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.
7 embedder.baseGuestURL = '';
8 embedder.guestURL = '';
10 window.runTest = function(testName) {
11 if (!embedder.test.testList[testName]) {
12 console.log('Incorrect testName: ' + testName);
18 embedder.test.testList[testName]();
20 // window.* exported functions end.
23 embedder.setUpGuest_ = function() {
24 document.querySelector('#webview-tag-container').innerHTML =
25 '<webview style="width: 100px; height: 100px;"></webview>';
26 var webview = document.querySelector('webview');
28 embedder.test.fail('No <webview> element created');
33 embedder.getHTMLForGuestWithTitle_ = function(title) {
36 '<html><head><title>%s</title></head>' +
37 '<body>hello world</body>' +
39 return html.replace('%s', title);
43 embedder.test.succeed = function() {
44 chrome.test.sendMessage('DoneDialogTest.PASSED');
47 embedder.test.fail = function() {
48 chrome.test.sendMessage('DoneDialogTest.FAILED');
51 embedder.test.assertEq = function(a, b) {
53 console.log('assertion failed: ' + a + ' != ' + b);
58 embedder.test.assertTrue = function(condition) {
60 console.log('assertion failed: true != ' + condition);
65 embedder.test.assertFalse = function(condition) {
67 console.log('assertion failed: false != ' + condition);
72 function setUpDialogTest(messageCallback, dialogHandler) {
73 var guestUrl = 'data:text/html,guest';
74 var webview = document.createElement('webview');
76 var onLoadStop = function(e) {
77 console.log('webview has loaded.');
78 webview.executeScript(
79 {file: 'inject_dialog.js'},
81 console.log('Script has been injected into webview.');
82 // Establish a communication channel with the guest.
83 var msg = ['connect'];
84 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
87 webview.addEventListener('loadstop', onLoadStop);
89 window.addEventListener('message', function(e) {
90 var data = JSON.parse(e.data);
91 if (data[0] == 'connected') {
92 console.log('A communication channel has been established with webview.');
95 messageCallback(webview, data);
98 webview.addEventListener('dialog', function(e) {
102 webview.setAttribute('src', guestUrl);
103 document.body.appendChild(webview);
108 function testAlertDialog() {
109 var messageText = '1337h@x0r';
111 var messageCallback = function(webview, data) {
112 if (data[0] == 'connected') {
113 console.log('The alert dialog test has started.');
114 var msg = ['start-alert-dialog-test', messageText];
115 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
119 if (data[0] == 'alert-dialog-done') {
121 'webview has been unblocked after requesting an alert dialog.');
122 embedder.test.succeed();
127 var dialogHandler = function(e) {
128 console.log('webview has requested a dialog.');
129 embedder.test.assertEq('alert', e.messageType);
130 embedder.test.assertEq(messageText, e.messageText);
132 console.log('The app has responded to the dialog request.');
135 setUpDialogTest(messageCallback, dialogHandler);
138 function testConfirmDialog() {
139 var messageText = 'foobar';
141 var messageCallback = function(webview, data) {
142 if (data[0] == 'connected') {
143 console.log('The confirm dialog test has started.');
144 var msg = ['start-confirm-dialog-test', messageText];
145 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
149 if (data[0] == 'confirm-dialog-result') {
150 console.log('webview has reported a result for its confirm dialog.');
151 embedder.test.assertEq(true, data[1]);
152 embedder.test.succeed();
157 var dialogHandler = function(e) {
158 console.log('webview has requested a dialog.');
159 embedder.test.assertEq('confirm', e.messageType);
160 embedder.test.assertEq(messageText, e.messageText);
162 console.log('The app has responded to the dialog request.');
165 setUpDialogTest(messageCallback, dialogHandler);
168 function testConfirmDialogCancel() {
169 var messageText = 'foobar';
171 var messageCallback = function(webview, data) {
172 if (data[0] == 'connected') {
173 console.log('The confirm dialog test has started.');
174 var msg = ['start-confirm-dialog-test', messageText];
175 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
179 if (data[0] == 'confirm-dialog-result') {
180 console.log('webview has reported a result for its confirm dialog.');
181 embedder.test.assertEq(false, data[1]);
182 embedder.test.succeed();
187 var dialogHandler = function(e) {
188 console.log('webview has requested a dialog.');
189 embedder.test.assertEq('confirm', e.messageType);
190 embedder.test.assertEq(messageText, e.messageText);
192 console.log('The app has responded to the dialog request.');
195 setUpDialogTest(messageCallback, dialogHandler);
198 function testConfirmDialogDefaultCancel() {
199 var messageText = 'foobar';
201 var messageCallback = function(webview, data) {
202 if (data[0] == 'connected') {
203 console.log('The confirm dialog test has started.');
204 var msg = ['start-confirm-dialog-test', messageText];
205 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
209 if (data[0] == 'confirm-dialog-result') {
210 console.log('webview has reported a result for its confirm dialog.');
211 embedder.test.assertEq(false, data[1]);
212 embedder.test.succeed();
217 var dialogHandler = function(e) {
218 console.log('webview has requested a dialog.');
219 embedder.test.assertEq('confirm', e.messageType);
220 embedder.test.assertEq(messageText, e.messageText);
223 setUpDialogTest(messageCallback, dialogHandler);
226 function testConfirmDialogDefaultGCCancel() {
227 var messageText = 'foobar';
229 var messageCallback = function(webview, data) {
230 if (data[0] == 'connected') {
231 console.log('The confirm dialog test has started.');
232 var msg = ['start-confirm-dialog-test', messageText];
233 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
237 if (data[0] == 'confirm-dialog-result') {
238 console.log('webview has reported a result for its confirm dialog.');
239 embedder.test.assertEq(false, data[1]);
240 embedder.test.succeed();
245 var dialogHandler = function(e) {
246 console.log('webview has requested a dialog.');
247 embedder.test.assertEq('confirm', e.messageType);
248 embedder.test.assertEq(messageText, e.messageText);
249 // Prevent default to leave cleanup in the GC's hands.
253 setUpDialogTest(messageCallback, dialogHandler);
256 function testPromptDialog() {
257 var messageText = 'bleep';
258 var defaultPromptText = 'bloop';
259 var returnPromptText = 'blah';
261 var messageCallback = function(webview, data) {
262 if (data[0] == 'connected') {
263 console.log('The prompt dialog test has started.');
264 var msg = ['start-prompt-dialog-test', messageText, defaultPromptText];
265 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
269 if (data[0] == 'prompt-dialog-result') {
270 console.log('webview has reported a result for its prompt dialog.');
271 embedder.test.assertEq(returnPromptText, data[1]);
272 embedder.test.succeed();
277 var dialogHandler = function(e) {
278 console.log('webview has requested a dialog.');
279 embedder.test.assertEq('prompt', e.messageType);
280 embedder.test.assertEq(messageText, e.messageText);
281 embedder.test.assertEq(defaultPromptText, e.defaultPromptText);
282 e.dialog.ok(returnPromptText);
283 console.log('The app has responded to the dialog request.');
286 setUpDialogTest(messageCallback, dialogHandler);
289 embedder.test.testList = {
290 'testAlertDialog': testAlertDialog,
291 'testConfirmDialog': testConfirmDialog,
292 'testConfirmDialogDefaultCancel': testConfirmDialogDefaultCancel,
293 'testConfirmDialogDefaultGCCancel': testConfirmDialogDefaultGCCancel,
294 'testConfirmDialogCancel': testConfirmDialogCancel,
295 'testPromptDialog': testPromptDialog
298 onload = function() {
299 chrome.test.getConfig(function(config) {
300 chrome.test.sendMessage('Launched');