Index: chrome/test/data/extensions/platform_apps/web_view/dialog/embedder.js |
diff --git a/chrome/test/data/extensions/platform_apps/web_view/dialog/embedder.js b/chrome/test/data/extensions/platform_apps/web_view/dialog/embedder.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cec58620b78ea8dea05833c906302efec3679714 |
--- /dev/null |
+++ b/chrome/test/data/extensions/platform_apps/web_view/dialog/embedder.js |
@@ -0,0 +1,302 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+var embedder = {}; |
+embedder.tests = {}; |
+embedder.baseGuestURL = ''; |
+embedder.guestURL = ''; |
+ |
+window.runTest = function(testName) { |
+ if (!embedder.test.testList[testName]) { |
+ console.log('Incorrect testName: ' + testName); |
+ embedder.test.fail(); |
+ return; |
+ } |
+ |
+ // Run the test. |
+ embedder.test.testList[testName](); |
+}; |
+// window.* exported functions end. |
+ |
+/** @private */ |
+embedder.setUpGuest_ = function() { |
+ document.querySelector('#webview-tag-container').innerHTML = |
+ '<webview style="width: 100px; height: 100px;"></webview>'; |
+ var webview = document.querySelector('webview'); |
+ if (!webview) { |
+ embedder.test.fail('No <webview> element created'); |
+ } |
+ return webview; |
+}; |
+ |
+embedder.getHTMLForGuestWithTitle_ = function(title) { |
+ var html = |
+ 'data:text/html,' + |
+ '<html><head><title>%s</title></head>' + |
+ '<body>hello world</body>' + |
+ '</html>'; |
+ return html.replace('%s', title); |
+}; |
+ |
+embedder.test = {}; |
+embedder.test.succeed = function() { |
+ chrome.test.sendMessage('DoneDialogTest.PASSED'); |
+}; |
+ |
+embedder.test.fail = function() { |
+ chrome.test.sendMessage('DoneDialogTest.FAILED'); |
+}; |
+ |
+embedder.test.assertEq = function(a, b) { |
+ if (a != b) { |
+ console.log('assertion failed: ' + a + ' != ' + b); |
+ embedder.test.fail(); |
+ } |
+}; |
+ |
+embedder.test.assertTrue = function(condition) { |
+ if (!condition) { |
+ console.log('assertion failed: true != ' + condition); |
+ embedder.test.fail(); |
+ } |
+}; |
+ |
+embedder.test.assertFalse = function(condition) { |
+ if (condition) { |
+ console.log('assertion failed: false != ' + condition); |
+ embedder.test.fail(); |
+ } |
+}; |
+ |
+function setupDialogTest(messageCallback, dialogHandler) { |
+ var guestUrl = 'data:text/html,guest'; |
+ var webview = document.createElement('webview'); |
+ |
+ var onLoadStop = function(e) { |
+ console.log('webview has loaded.'); |
+ webview.executeScript( |
+ {file: 'inject_dialog.js'}, |
+ function(results) { |
+ console.log('Script has been injected into webview.'); |
+ // Establish a communication channel with the guest. |
+ var msg = ['connect']; |
+ webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+ }); |
+ }; |
+ webview.addEventListener('loadstop', onLoadStop); |
+ |
+ window.addEventListener('message', function(e) { |
+ var data = JSON.parse(e.data); |
+ if (data[0] == 'connected') { |
+ console.log('A communication channel has been established with webview.'); |
+ } |
+ |
+ messageCallback(webview, data); |
+ }); |
+ |
+ webview.addEventListener('dialog', function(e) { |
+ dialogHandler(e); |
+ }); |
+ |
+ webview.setAttribute('src', guestUrl); |
+ document.body.appendChild(webview); |
+} |
+ |
+// Tests begin. |
+ |
+function testAlertDialog() { |
+ var messageText = '1337h@x0r'; |
+ |
+ var messageCallback = function(webview, data) { |
+ if (data[0] == 'connected') { |
+ console.log('The alert dialog test has started.'); |
+ var msg = ['start-alert-dialog-test', messageText]; |
+ webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+ return; |
+ } |
+ |
+ if (data[0] == 'alert-dialog-requested') { |
+ console.log( |
+ 'webview has been unblocked after requesting an alert dialog.'); |
+ embedder.test.succeed(); |
+ return; |
+ } |
+ }; |
+ |
+ var dialogHandler = function(e) { |
+ console.log('webview has requested a dialog.'); |
+ embedder.test.assertEq('alert', e.messageType); |
+ embedder.test.assertEq(messageText, e.messageText); |
+ e.dialog.ok(); |
+ console.log('The app has responded to the dialog request.'); |
+ }; |
+ |
+ setupDialogTest(messageCallback, dialogHandler); |
+} |
+ |
+function testConfirmDialog() { |
+ var messageText = 'foobar'; |
+ |
+ var messageCallback = function(webview, data) { |
+ if (data[0] == 'connected') { |
+ console.log('The confirm dialog test has started.'); |
+ var msg = ['start-confirm-dialog-test', messageText]; |
+ webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+ return; |
+ } |
+ |
+ if (data[0] == 'confirm-dialog-result') { |
+ console.log('webview has reported a result for its confirm dialog.'); |
+ embedder.test.assertEq(true, data[1]); |
+ embedder.test.succeed(); |
+ return; |
+ } |
+ }; |
+ |
+ var dialogHandler = function(e) { |
+ console.log('webview has requested a dialog.'); |
+ embedder.test.assertEq('confirm', e.messageType); |
+ embedder.test.assertEq(messageText, e.messageText); |
+ e.dialog.ok(); |
+ console.log('The app has responded to the dialog request.'); |
+ }; |
+ |
+ setupDialogTest(messageCallback, dialogHandler); |
+} |
+ |
+function testConfirmDialogCancel() { |
+ var messageText = 'foobar'; |
+ |
+ var messageCallback = function(webview, data) { |
+ if (data[0] == 'connected') { |
+ console.log('The confirm dialog test has started.'); |
+ var msg = ['start-confirm-dialog-test', messageText]; |
+ webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+ return; |
+ } |
+ |
+ if (data[0] == 'confirm-dialog-result') { |
+ console.log('webview has reported a result for its confirm dialog.'); |
+ embedder.test.assertEq(false, data[1]); |
+ embedder.test.succeed(); |
+ return; |
+ } |
+ }; |
+ |
+ var dialogHandler = function(e) { |
+ console.log('webview has requested a dialog.'); |
+ embedder.test.assertEq('confirm', e.messageType); |
+ embedder.test.assertEq(messageText, e.messageText); |
+ e.dialog.cancel(); |
+ console.log('The app has responded to the dialog request.'); |
+ }; |
+ |
+ setupDialogTest(messageCallback, dialogHandler); |
+} |
+ |
+function testConfirmDialogDefaultCancel() { |
+ var messageText = 'foobar'; |
+ |
+ var messageCallback = function(webview, data) { |
+ if (data[0] == 'connected') { |
+ console.log('The confirm dialog test has started.'); |
+ var msg = ['start-confirm-dialog-test', messageText]; |
+ webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+ return; |
+ } |
+ |
+ if (data[0] == 'confirm-dialog-result') { |
+ console.log('webview has reported a result for its confirm dialog.'); |
+ embedder.test.assertEq(false, data[1]); |
+ embedder.test.succeed(); |
+ return; |
+ } |
+ }; |
+ |
+ var dialogHandler = function(e) { |
+ console.log('webview has requested a dialog.'); |
+ embedder.test.assertEq('confirm', e.messageType); |
+ embedder.test.assertEq(messageText, e.messageText); |
+ }; |
+ |
+ setupDialogTest(messageCallback, dialogHandler); |
+} |
+ |
+function testConfirmDialogDefaultGCCancel() { |
+ var messageText = 'foobar'; |
+ |
+ var messageCallback = function(webview, data) { |
+ if (data[0] == 'connected') { |
+ console.log('The confirm dialog test has started.'); |
+ var msg = ['start-confirm-dialog-test', messageText]; |
+ webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+ return; |
+ } |
+ |
+ if (data[0] == 'confirm-dialog-result') { |
+ console.log('webview has reported a result for its confirm dialog.'); |
+ embedder.test.assertEq(false, data[1]); |
+ embedder.test.succeed(); |
+ return; |
+ } |
+ }; |
+ |
+ var dialogHandler = function(e) { |
+ console.log('webview has requested a dialog.'); |
+ embedder.test.assertEq('confirm', e.messageType); |
+ embedder.test.assertEq(messageText, e.messageText); |
+ // Prevent default to leave cleanup in the GC's hands. |
+ e.preventDefault(); |
+ }; |
+ |
+ setupDialogTest(messageCallback, dialogHandler); |
+} |
+ |
+function testPromptDialog() { |
+ var messageText = 'bleep'; |
+ var defaultPromptText = 'bloop'; |
+ var returnPromptText = 'blah'; |
+ |
+ var messageCallback = function(webview, data) { |
+ if (data[0] == 'connected') { |
+ console.log('The prompt dialog test has started.'); |
+ var msg = ['start-prompt-dialog-test', messageText, defaultPromptText]; |
+ webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+ return; |
+ } |
+ |
+ if (data[0] == 'prompt-dialog-result') { |
+ console.log('webview has reported a result for its prompt dialog.'); |
+ embedder.test.assertEq(returnPromptText, data[1]); |
+ embedder.test.succeed(); |
+ return; |
+ } |
+ }; |
+ |
+ var dialogHandler = function(e) { |
+ console.log('webview has requested a dialog.'); |
+ embedder.test.assertEq('prompt', e.messageType); |
+ embedder.test.assertEq(messageText, e.messageText); |
+ embedder.test.assertEq(defaultPromptText, e.defaultPromptText); |
+ e.dialog.ok(returnPromptText); |
+ console.log('The app has responded to the dialog request.'); |
+ }; |
+ |
+ setupDialogTest(messageCallback, dialogHandler); |
+} |
+ |
+embedder.test.testList = { |
+ 'testAlertDialog': testAlertDialog, |
+ 'testConfirmDialog': testConfirmDialog, |
+ 'testConfirmDialogDefaultCancel': testConfirmDialogDefaultCancel, |
+ 'testConfirmDialogDefaultGCCancel': testConfirmDialogDefaultGCCancel, |
+ 'testConfirmDialogCancel': testConfirmDialogCancel, |
+ 'testPromptDialog': testPromptDialog |
+}; |
+ |
+onload = function() { |
+ chrome.test.getConfig(function(config) { |
+ chrome.test.sendMessage("Launched"); |
+ }); |
+}; |