Add ability to gather metrics to BubbleManager.
[chromium-blink-merge.git] / chrome / browser / ui / webui / app_list / start_page_browsertest.js
blob84869c4f54045d1c0988c2f2471b2c84670ff8b5
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 /**
6  * TestFixture for kiosk app settings WebUI testing.
7  * @extends {testing.Test}
8  * @constructor
9  */
10 function AppListStartPageWebUITest() {}
12 /**
13  * Mock of audioContext.
14  * @constructor
15  */
16 function mockAudioContext() {
17   this.sampleRate = 44100; /* some dummy number */
20 mockAudioContext.prototype = {
21   createMediaStreamSource: function(stream) {
22     return {connect: function(audioProc) {},
23             disconnect: function() {}};
24   },
25   createScriptProcessor: function(bufSize, in_channels, out_channels) {
26     return {connect: function(destination) {},
27             disconnect: function() {}};
28   }
31 AppListStartPageWebUITest.prototype = {
32   __proto__: testing.Test.prototype,
34   /**
35    * Browser to app launcher start page.
36    */
37   browsePreload: 'chrome://app-list/',
39   /**
40    * Placeholder for mock speech recognizer.
41    */
42   speechRecognizer: null,
44   /**
45    * Sends the speech recognition result.
46    *
47    * @param {string} result The testing result.
48    * @param {boolean} isFinal Whether the result is final or not.
49    */
50   sendSpeechResult: function(result, isFinal) {
51     var speechEvent = new Event('test');
52     // Each result contains a list of alternatives and 'isFinal' flag.
53     var speechResult = [{transcript: result}];
54     speechResult.isFinal = isFinal;
55     speechEvent.results = [speechResult];
56     this.speechRecognizer.onresult(speechEvent);
57   },
59   /**
60    * Registers the webkitSpeechRecognition mock for test.
61    * @private
62    */
63   registerMockSpeechRecognition_: function() {
64     var owner = this;
65     function mockSpeechRecognition() {
66       this.inSpeech_ = false;
67       owner.speechRecognizer = this;
68     }
70     mockSpeechRecognition.prototype = {
71       start: function() {
72         this.onstart();
73       },
75       abort: function() {
76         if (this.inSpeech_)
77           this.onspeechend();
78         this.onerror(new Error());
79         this.onend();
80       }
81     },
83     window.webkitSpeechRecognition = mockSpeechRecognition;
84   },
86   /**
87    * Mock of webkitGetUserMedia for start page.
88    *
89    * @private
90    * @param {object} constraint The constraint parameter.
91    * @param {Function} success The success callback.
92    * @param {Function} error The error callback.
93    */
94   mockGetUserMedia_: function(constraint, success, error) {
95     function getAudioTracks() {
96     }
97     assertTrue(constraint.audio);
98     assertNotEquals(null, error, 'error callback must not be null');
99     var audioTracks = [];
100     for (var i = 0; i < 2; ++i) {
101       audioTracks.push(this.audioTrackMocks[i].proxy());
102     }
103     success({getAudioTracks: function() { return audioTracks; }});
104   },
106   /** @override */
107   preLoad: function() {
108     this.makeAndRegisterMockHandler(['initialize',
109                                      'launchApp',
110                                      'setSpeechRecognitionState',
111                                      'speechResult']);
112     this.mockHandler.stubs().initialize();
113     this.mockHandler.stubs().launchApp(ANYTHING);
115     this.registerMockSpeechRecognition_();
116     window.AudioContext = mockAudioContext;
117     navigator.webkitGetUserMedia = this.mockGetUserMedia_.bind(this);
118     this.audioTrackMocks = [mock(MediaStreamTrack), mock(MediaStreamTrack)];
119   }
122 TEST_F('AppListStartPageWebUITest', 'Basic', function() {
123   assertEquals(this.browsePreload, document.location.href);
126 TEST_F('AppListStartPageWebUITest', 'LoadDoodle', function() {
127   var doodleData = {
128     'ddljson': {
129       'transparent_large_image': {
130         'url': 'doodle.png'
131       },
132       'alt_text': 'Doodle alt text',
133       'target_url': '/target.html'
134     }
135   };
137   assertEquals(null, $('doodle'));
139   // Load the doodle with a target url and alt text.
140   appList.startPage.onAppListDoodleUpdated(doodleData,
141                                            'http://example.com/x/');
142   assertNotEquals(null, $('doodle'));
143   assertEquals('http://example.com/x/doodle.png', $('doodle_image').src);
144   assertEquals(doodleData.ddljson.alt_text, $('doodle_image').title);
145   assertEquals('http://example.com/target.html', $('doodle_link').href);
147   // Reload the doodle without a target url and alt text.
148   doodleData.ddljson.alt_text = undefined;
149   doodleData.ddljson.target_url = undefined;
150   appList.startPage.onAppListDoodleUpdated(doodleData,
151                                            'http://example.com/x/');
152   assertNotEquals(null, $('doodle'));
153   assertEquals('http://example.com/x/doodle.png', $('doodle_image').src);
154   assertEquals('', $('doodle_image').title);
155   assertEquals(null, $('doodle_link'));
158   appList.startPage.onAppListDoodleUpdated({},
159                                            'http://example.com/');
160   assertEquals(null, $('doodle'));