- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / platform_apps / web_view / speech_recognition_api / embedder.js
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.
4
5 var LOG = function(msg) {
6   window.console.log(msg);
7 };
8
9 var speechTests = {};
10
11 speechTests.testHelper_ = function(expectSpeech, allowRequest) {
12   var webview = document.createElement('webview');
13   var permissionRequested = false;
14
15   webview.addEventListener('loadstop', function(e) {
16     LOG('loadstop');
17     webview.executeScript(
18         {file: 'guest.js'},
19         function(results) {
20           LOG('done executeScript');
21           if (!results || !results.length) {
22             LOG('Error injecting JavaScript to guest');
23             chrome.test.fail();
24             return;
25           }
26           // Send message to establish channel.
27           webview.contentWindow.postMessage(
28               JSON.stringify(['create-channel']), '*');
29           LOG('done postMessage');
30         });
31   });
32   webview.addEventListener('permissionrequest', function(e) {
33     permissionRequested = true;
34     chrome.test.assertEq('media', e.permission);
35     LOG('allowRequest?: ' + allowRequest);
36     if (allowRequest) {
37       // Note that since we mock speech, this path actually doesn't get
38       // exercised because FakeSpeechRecognitionManager just sends down
39       // the response without checking for permission.
40       // TODO(lazyboy): Make FakeSpeechRecognitionManager better to address
41       // this issue.
42       e.request.allow();
43     } else {
44       e.request.deny();
45     }
46   });
47
48   webview.addEventListener('consolemessage', function(e) {
49     LOG('[guest]: ' + e.message + ', line: ' + e.line);
50   });
51
52   var onPostMessageReceived = function(e) {
53     var data = JSON.parse(e.data);
54     LOG('embedder.onPostMessageReceived: ' + data[0]);
55
56     if (data[0] != 'recognition') {
57       chrome.test.fail();
58       return;
59     }
60
61     LOG('embedder.onPostMessageReceived.status: ' + data[1]);
62     switch (data[1]) {
63       case 'onerror':
64         if (!expectSpeech) {
65           // Won't happen, see TODO above.
66           //chrome.test.assertTrue(permissionRequested);
67           chrome.test.succeed();
68         } else {
69           chrome.test.assertTrue(permissionRequested);
70           chrome.test.fail();
71         }
72         break;
73       case 'onresult':
74         if (expectSpeech) {
75           var transcript = data[2];
76           chrome.test.assertEq('Pictures of the moon', transcript);
77           chrome.test.succeed();
78         } else {
79           chrome.test.fail();
80         }
81         break;
82       case 'onstart':
83         if (expectSpeech) {
84           chrome.test.succeed();
85         } else {
86           chrome.test.fail();
87         }
88         break;
89       default:
90         chrome.test.fail();  // Unknown.
91         break;
92     }
93   };
94   window.addEventListener('message', onPostMessageReceived);
95
96   webview.setAttribute('src', 'about:blank');
97   document.body.appendChild(webview);
98 };
99
100 speechTests.denyTest = function() {
101   LOG('speechTests.denyTest');
102   speechTests.testHelper_(false /* expectSpeech */, false /* allowRequest */);
103 };
104
105 speechTests.allowTest = function() {
106   LOG('speechTests.allowTest');
107   speechTests.testHelper_(true /* expectSpeech */, true /* allowRequest */);
108 };
109
110 window.onload = function() {
111   chrome.test.getConfig(function(config) {
112     var testsToRun = [];
113     switch (config.customArg) {
114       case 'allowTest':
115         testsToRun.push(speechTests.allowTest);
116         break;
117       case 'denyTest':
118         testsToRun.push(speechTests.denyTest);
119         break;
120       default:
121         chrome.test.fail();
122         break;
123     }
124     chrome.test.runTests(testsToRun);
125   });
126 };