a685b8a02736ed5e8c84e1d4993dbf9c13ef38b0
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / platform_apps / web_view / navigation / 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 embedder = {};
6 embedder.tests = {};
7
8 window.runTest = function(testName) {
9   if (!embedder.test.testList[testName]) {
10     console.log('Incorrect testName: ' + testName);
11     embedder.test.fail();
12     return;
13   }
14
15   // Run the test.
16   embedder.test.testList[testName]();
17 };
18 // window.* exported functions end.
19
20 /** @private */
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');
25   if (!webview) {
26     embedder.test.fail('No <webview> element created');
27   }
28   return webview;
29 };
30
31 embedder.getHTMLForGuestWithTitle_ = function(title) {
32   var html =
33       'data:text/html,' +
34       '<html><head><title>%s</title></head>' +
35       '<body>hello world</body>' +
36       '</html>';
37   return html.replace('%s', title);
38 };
39
40 embedder.test = {};
41 embedder.test.succeed = function() {
42   chrome.test.sendMessage('TEST_PASSED');
43 };
44
45 embedder.test.fail = function() {
46   chrome.test.sendMessage('TEST_FAILED');
47 };
48
49 embedder.test.assertEq = function(a, b) {
50   if (a != b) {
51     console.log('assertion failed: ' + a + ' != ' + b);
52     embedder.test.fail();
53   }
54 };
55
56 embedder.test.assertTrue = function(condition) {
57   if (!condition) {
58     console.log('assertion failed: true != ' + condition);
59     embedder.test.fail();
60   }
61 };
62
63 embedder.test.assertFalse = function(condition) {
64   if (condition) {
65     console.log('assertion failed: false != ' + condition);
66     embedder.test.fail();
67   }
68 };
69
70 // Tests begin.
71
72 function testNavigation() {
73   var webview = embedder.setUpGuest_();
74
75   var step = 1;
76   console.log('run step: ' + step);
77
78   // Verify that canGoBack and canGoForward work as expected.
79   var runStep2 = function() {
80     step = 2;
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');
89     });
90   };
91
92   // Verify that canGoBack and canGoForward work as expected.
93   var runStep3 = function() {
94     step = 3;
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());
102       webview.back();
103     });
104   };
105
106   // Verify that webview.back works as expected.
107   var runStep4 = function() {
108     step = 4;
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());
116       webview.forward();
117     });
118   };
119
120   // Verify that webview.forward works as expected.
121   var runStep5 = function() {
122     step = 5;
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');
131     });
132   };
133
134   // Navigate one more time to allow for interesting uses of webview.go.
135   var runStep6 = function() {
136     step = 6;
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());
144       webview.go(-2);
145     });
146   };
147
148   // Verify that webview.go works as expected. Test the forward key.
149   var runStep7 = function() {
150     step = 7;
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());
158
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();
168           });
169         });
170       });
171     });
172   };
173
174   var onLoadStop = function(e) {
175     switch (step) {
176       case 1:
177         runStep2();
178         break;
179       case 2:
180         runStep3();
181         break;
182       case 3:
183         runStep4();
184         break;
185       case 4:
186         runStep5();
187         break;
188       case 5:
189         runStep6();
190         break;
191       case 6:
192         runStep7();
193         break;
194       default:
195         console.log('unexpected step: ' + step);
196         embedder.test.fail();
197     }
198   };
199   webview.addEventListener('loadstop', onLoadStop);
200   webview.src = embedder.getHTMLForGuestWithTitle_('step1');
201 }
202
203 function testBackForwardKeys() {
204   var webview = embedder.setUpGuest_();
205
206   var step = 1;
207   console.log('run step: ' + step);
208
209   // Verify that canGoBack and canGoForward work as expected.
210   var runStep2 = function() {
211     step = 2;
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');
220     });
221   };
222
223   // Verify that webview.go works as expected. Test the forward key.
224   var runStep3 = function() {
225     step = 3;
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.
234       webview.focus();
235       chrome.test.sendMessage('ReadyForBackKey');
236     });
237   };
238
239   var runStep4 = function() {
240     step = 4;
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');
249     });
250   };
251
252   var runStep5 = function() {
253     step = 5;
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();
262     });
263   };
264
265   var onLoadStop = function(e) {
266     switch (step) {
267       case 1:
268         runStep2();
269         break;
270       case 2:
271         runStep3();
272         break;
273       case 3:
274         runStep4();
275         break;
276       case 4:
277         runStep5();
278         break;
279       default:
280         console.log('unexpected step: ' + step);
281         embedder.test.fail();
282     }
283   };
284   webview.addEventListener('loadstop', onLoadStop);
285   webview.src = embedder.getHTMLForGuestWithTitle_('step1');
286 }
287
288 embedder.test.testList = {
289   'testNavigation': testNavigation,
290   'testBackForwardKeys': testBackForwardKeys
291 };
292
293 onload = function() {
294   chrome.test.getConfig(function(config) {
295     chrome.test.sendMessage("Launched");
296   });
297 };