Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / platform_apps / web_view / filesystem / shared_worker / multiple / embedder.js
1 // Copyright 2014 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.test = {};
7 embedder.baseGuestURL = '';
8 embedder.guestURL = '';
9 embedder.guestNumber = 3;
10 var actualReceivedMessage = 0;
11
12 window.runTest = function(testName) {
13   if (!embedder.test.testList[testName]) {
14     console.log('Incorrect testName: ' + testName);
15     embedder.test.fail();
16     return;
17   }
18
19   // Run the test.
20   embedder.test.testList[testName]();
21 };
22 // window.* exported functions end.
23
24
25 /** @private */
26 embedder.setUp_ = function(config) {
27   embedder.baseGuestURL = 'http://localhost:' + config.testServer.port;
28   embedder.guestURL = embedder.baseGuestURL +
29       '/extensions/platform_apps/web_view/filesystem/shared_worker/multiple' +
30       '/guest_shared_worker.html';
31   chrome.test.log('Guest url is: ' + embedder.guestURL);
32 };
33
34 /** @private */
35 embedder.setUpGuest_ = function() {
36   var webview = [];
37   var container = document.querySelector('#webview-tag-container');
38   for (var i = 0;  i < embedder.guestNumber; ++i) {
39     webview[i] = document.createElement('webview');
40     webview[i].style.width = '100px';
41     webview[i].style.height = '100px';
42     webview[i].setAttribute('partition', "persist:a");
43     container.appendChild(webview[i]);
44   }
45   return webview;
46 };
47
48 embedder.test = {};
49 embedder.test.succeed = function() {
50   chrome.test.sendMessage('TEST_PASSED');
51 };
52
53 embedder.test.fail = function() {
54   chrome.test.sendMessage('TEST_FAILED');
55 };
56
57 embedder.test.assertEq = function(a, b) {
58   if (a != b) {
59     console.log('assertion failed: ' + a + ' != ' + b);
60     embedder.test.fail();
61   }
62 };
63 embedder.test.assertTrue = function(condition) {
64   if (!condition) {
65     console.log('assertion failed: true != ' + condition);
66     embedder.test.fail();
67   }
68 };
69 embedder.test.assertFalse = function(condition) {
70   if (condition) {
71     console.log('assertion failed: false != ' + condition);
72     embedder.test.fail();
73   }
74 };
75
76 /** @private */
77 embedder.setUpLoadStop_ = function(webview, testName, id) {
78   var onWebViewLoadStop = function(e) {
79     window.console.log('embedder.onWebViewLoadStop of guest No.' + id);
80     // Send post message to <webview> when it's ready to receive them.
81     var msgArray = ['check-filesystem-permission', '' + testName];
82     window.console.log('embedder.webview[' + id + '].postMessage');
83     webview.contentWindow.postMessage(JSON.stringify(msgArray), '*');
84   };
85   webview.addEventListener('loadstop', onWebViewLoadStop);
86 };
87
88 /** @private */
89 embedder.registerAndWaitForPostMessage_ = function(
90     webview, expectedData) {
91   var testName = expectedData[0];
92   var expectedMessageNumber = embedder.guestNumber;
93
94   var onPostMessageReceived = function(e) {
95     var data = JSON.parse(e.data);
96     if (data[0] == '' + testName)
97       actualReceivedMessage ++;
98       embedder.test.assertEq(expectedData.length, data.length);
99       for (var i = 0; i < expectedData.length; ++i) {
100         embedder.test.assertEq(expectedData[i], data[i]);
101       }
102       if (actualReceivedMessage == expectedMessageNumber)
103         embedder.test.succeed();
104   };
105   window.addEventListener('message', onPostMessageReceived);
106 };
107
108 /** @private */
109 embedder.assertCorrectEvent_ = function(e) {
110   embedder.test.assertEq('filesystem', e.permission);
111   embedder.test.assertTrue(!!e.url);
112   embedder.test.assertTrue(e.url.indexOf(embedder.baseGuestURL) == 0);
113 };
114
115 // Tests begin.
116
117 // Once the guest is allowed or denied filesystem, the guest notifies the
118 // embedder about the fact via post message.
119 // The embedder has to initiate a post message so that the guest can get a
120 // reference to embedder to send the reply back.
121
122 // Loads multiple guests each of which creates a shared worker to request
123 // filesystem. The embedder explicitly allows acccess to filesystem for guests.
124 function testAllow() {
125   var webview = embedder.setUpGuest_();
126
127   var onPermissionRequest = function(e) {
128     chrome.test.log('Embedder notified on permissionRequest');
129     embedder.assertCorrectEvent_(e);
130     e.request.allow();
131   };
132   for(var i = 0; i < embedder.guestNumber; ++i) {
133     webview[i].addEventListener('permissionrequest', onPermissionRequest);
134     embedder.setUpLoadStop_(webview[i], 'test1', i);
135     webview[i].setAttribute('src', embedder.guestURL);
136   }
137   actualReceivedMessage = 0;
138   embedder.registerAndWaitForPostMessage_(
139       webview, ['test1', 'access-granted']);
140 }
141
142 // Loads multiple guests each of which creates a shared worker to request
143 // filesystem. The embedder explicitly denies access to filesystem for
144 // guests.
145 function testDeny() {
146   var webview = embedder.setUpGuest_();
147
148   var onPermissionRequest = function(e) {
149     chrome.test.log('Embedder notified on permissionRequest');
150     embedder.assertCorrectEvent_(e);
151     e.request.deny();
152   };
153   for (var i = 0; i < embedder.guestNumber; ++i) {
154     webview[i].addEventListener('permissionrequest', onPermissionRequest);
155     embedder.setUpLoadStop_(webview[i], 'test2', i);
156     webview[i].setAttribute('src', embedder.guestURL);
157   }
158   actualReceivedMessage = 0;
159   embedder.registerAndWaitForPostMessage_(
160       webview, ['test2', 'access-denied']);
161 }
162
163 // Loads multiple guests each of which creates a shared worker to request
164 // filesystem. The embedder does not perform an explicit action, and the
165 // default permission according to cookie setting is allowed.
166 function testDefaultAllow() {
167   var webview = embedder.setUpGuest_();
168
169   var onPermissionRequest = function(e) {
170     embedder.assertCorrectEvent_(e);
171   };
172   for (var i = 0; i < embedder. guestNumber; ++i) {
173     webview[i].addEventListener('permissionrequest', onPermissionRequest);
174     embedder.setUpLoadStop_(webview[i], 'test3', i);
175     webview[i].setAttribute('src', embedder.guestURL);
176   }
177   actualReceivedMessage = 0;
178   embedder.registerAndWaitForPostMessage_(
179       webview, ['test3', 'access-granted']);
180 }
181
182 embedder.test.testList = {
183   'testAllow': testAllow,
184   'testDeny': testDeny,
185   'testDefaultAllow': testDefaultAllow
186 };
187
188 onload = function() {
189   chrome.test.getConfig(function(config) {
190     embedder.setUp_(config);
191     chrome.test.sendMessage('Launched');
192   });
193 };