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.
8 window.runTest = function(testName) {
9 if (!embedder.test.testList[testName]) {
10 console.log('Incorrect testName: ' + testName);
16 embedder.test.testList[testName]();
18 // window.* exported functions end.
21 embedder.setUpGuest_ = function() {
22 document.querySelector('#webview-tag-container').innerHTML =
23 '<webview style="width: 100px; height: 100px;"></webview>';
24 var webview = document.querySelector('webview');
26 embedder.test.fail('No <webview> element created');
31 embedder.getHTMLForGuestWithTitle_ = function(title) {
34 '<html><head><title>%s</title></head>' +
35 '<body>hello world</body>' +
37 return html.replace('%s', title);
41 embedder.test.succeed = function() {
42 chrome.test.sendMessage('TEST_PASSED');
45 embedder.test.fail = function() {
46 chrome.test.sendMessage('TEST_FAILED');
49 embedder.test.assertEq = function(a, b) {
51 console.log('assertion failed: ' + a + ' != ' + b);
56 embedder.test.assertTrue = function(condition) {
58 console.log('assertion failed: true != ' + condition);
63 embedder.test.assertFalse = function(condition) {
65 console.log('assertion failed: false != ' + condition);
72 function testNavigation() {
73 var webview = embedder.setUpGuest_();
76 console.log('run step: ' + step);
78 // Verify that canGoBack and canGoForward work as expected.
79 var runStep2 = function() {
81 console.log('run step: ' + step);
82 webview.executeScript({
83 code: 'document.title'
84 }, function(results) {
85 embedder.test.assertEq('step1', results[0]);
86 embedder.test.assertFalse(webview.canGoBack());
87 embedder.test.assertFalse(webview.canGoForward());
88 webview.src = embedder.getHTMLForGuestWithTitle_('step2');
92 // Verify that canGoBack and canGoForward work as expected.
93 var runStep3 = function() {
95 console.log('run step: ' + step);
96 webview.executeScript({
97 code: 'document.title'
98 }, function(results) {
99 embedder.test.assertEq('step2', results[0]);
100 embedder.test.assertTrue(webview.canGoBack());
101 embedder.test.assertFalse(webview.canGoForward());
106 // Verify that webview.back works as expected.
107 var runStep4 = function() {
109 console.log('run step: ' + step);
110 webview.executeScript({
111 code: 'document.title'
112 }, function(results) {
113 embedder.test.assertEq('step1', results[0]);
114 embedder.test.assertFalse(webview.canGoBack());
115 embedder.test.assertTrue(webview.canGoForward());
120 // Verify that webview.forward works as expected.
121 var runStep5 = function() {
123 console.log('run step: ' + step);
124 webview.executeScript({
125 code: 'document.title'
126 }, function(results) {
127 embedder.test.assertEq('step2', results[0]);
128 embedder.test.assertTrue(webview.canGoBack());
129 embedder.test.assertFalse(webview.canGoForward());
130 webview.src = embedder.getHTMLForGuestWithTitle_('step3');
134 // Navigate one more time to allow for interesting uses of webview.go.
135 var runStep6 = function() {
137 console.log('run step: ' + step);
138 webview.executeScript({
139 code: 'document.title'
140 }, function(results) {
141 embedder.test.assertEq('step3', results[0]);
142 embedder.test.assertTrue(webview.canGoBack());
143 embedder.test.assertFalse(webview.canGoForward());
148 // Verify that webview.go works as expected. Test the forward key.
149 var runStep7 = function() {
151 console.log('run step: ' + step);
152 webview.executeScript({
153 code: 'document.title'
154 }, function(results) {
155 embedder.test.assertEq('step1', results[0]);
156 embedder.test.assertFalse(webview.canGoBack());
157 embedder.test.assertTrue(webview.canGoForward());
159 // Test the callbacks of webview.go/webview.forward/webview.back.
160 webview.removeEventListener('loadstop', onLoadStop);
161 webview.go(3, function(success) {
162 embedder.test.assertFalse(success);
163 webview.back(function(success) {
164 embedder.test.assertFalse(success);
165 webview.forward(function(success) {
166 embedder.test.assertTrue(success);
167 embedder.test.succeed();
174 var onLoadStop = function(e) {
195 console.log('unexpected step: ' + step);
196 embedder.test.fail();
199 webview.addEventListener('loadstop', onLoadStop);
200 webview.src = embedder.getHTMLForGuestWithTitle_('step1');
203 function testBackForwardKeys() {
204 var webview = embedder.setUpGuest_();
207 console.log('run step: ' + step);
209 // Verify that canGoBack and canGoForward work as expected.
210 var runStep2 = function() {
212 console.log('run step: ' + step);
213 webview.executeScript({
214 code: 'document.title'
215 }, function(results) {
216 embedder.test.assertEq('step1', results[0]);
217 embedder.test.assertFalse(webview.canGoBack());
218 embedder.test.assertFalse(webview.canGoForward());
219 webview.src = embedder.getHTMLForGuestWithTitle_('step2');
223 // Verify that webview.go works as expected. Test the forward key.
224 var runStep3 = function() {
226 console.log('run step: ' + step);
227 webview.executeScript({
228 code: 'document.title'
229 }, function(results) {
230 embedder.test.assertEq('step2', results[0]);
231 embedder.test.assertTrue(webview.canGoBack());
232 embedder.test.assertFalse(webview.canGoForward());
233 // Focus the webview to make sure it gets the forward key.
235 chrome.test.sendMessage('ReadyForBackKey');
239 var runStep4 = function() {
241 console.log('run step: ' + step);
242 webview.executeScript({
243 code: 'document.title'
244 }, function(results) {
245 embedder.test.assertEq('step1', results[0]);
246 embedder.test.assertFalse(webview.canGoBack());
247 embedder.test.assertTrue(webview.canGoForward());
248 chrome.test.sendMessage('ReadyForForwardKey');
252 var runStep5 = function() {
254 console.log('run step: ' + step);
255 webview.executeScript({
256 code: 'document.title'
257 }, function(results) {
258 embedder.test.assertEq('step2', results[0]);
259 embedder.test.assertTrue(webview.canGoBack());
260 embedder.test.assertFalse(webview.canGoForward());
261 embedder.test.succeed();
265 var onLoadStop = function(e) {
280 console.log('unexpected step: ' + step);
281 embedder.test.fail();
284 webview.addEventListener('loadstop', onLoadStop);
285 webview.src = embedder.getHTMLForGuestWithTitle_('step1');
288 embedder.test.testList = {
289 'testNavigation': testNavigation,
290 'testBackForwardKeys': testBackForwardKeys
293 onload = function() {
294 chrome.test.getConfig(function(config) {
295 chrome.test.sendMessage("Launched");