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.
7 embedder.baseGuestURL = '';
8 embedder.guestURL = '';
9 embedder.guestNumber = 3;
10 var actualReceivedMessage = 0;
12 window.runTest = function(testName) {
13 if (!embedder.test.testList[testName]) {
14 console.log('Incorrect testName: ' + testName);
20 embedder.test.testList[testName]();
22 // window.* exported functions end.
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);
35 embedder.setUpGuest_ = function() {
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]);
49 embedder.test.succeed = function() {
50 chrome.test.sendMessage('TEST_PASSED');
53 embedder.test.fail = function() {
54 chrome.test.sendMessage('TEST_FAILED');
57 embedder.test.assertEq = function(a, b) {
59 console.log('assertion failed: ' + a + ' != ' + b);
63 embedder.test.assertTrue = function(condition) {
65 console.log('assertion failed: true != ' + condition);
69 embedder.test.assertFalse = function(condition) {
71 console.log('assertion failed: false != ' + condition);
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), '*');
85 webview.addEventListener('loadstop', onWebViewLoadStop);
89 embedder.registerAndWaitForPostMessage_ = function(
90 webview, expectedData) {
91 var testName = expectedData[0];
92 var expectedMessageNumber = embedder.guestNumber;
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]);
102 if (actualReceivedMessage == expectedMessageNumber)
103 embedder.test.succeed();
105 window.addEventListener('message', onPostMessageReceived);
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);
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.
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_();
127 var onPermissionRequest = function(e) {
128 chrome.test.log('Embedder notified on permissionRequest');
129 embedder.assertCorrectEvent_(e);
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);
137 actualReceivedMessage = 0;
138 embedder.registerAndWaitForPostMessage_(
139 webview, ['test1', 'access-granted']);
142 // Loads multiple guests each of which creates a shared worker to request
143 // filesystem. The embedder explicitly denies access to filesystem for
145 function testDeny() {
146 var webview = embedder.setUpGuest_();
148 var onPermissionRequest = function(e) {
149 chrome.test.log('Embedder notified on permissionRequest');
150 embedder.assertCorrectEvent_(e);
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);
158 actualReceivedMessage = 0;
159 embedder.registerAndWaitForPostMessage_(
160 webview, ['test2', 'access-denied']);
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_();
169 var onPermissionRequest = function(e) {
170 embedder.assertCorrectEvent_(e);
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);
177 actualReceivedMessage = 0;
178 embedder.registerAndWaitForPostMessage_(
179 webview, ['test3', 'access-granted']);
182 embedder.test.testList = {
183 'testAllow': testAllow,
184 'testDeny': testDeny,
185 'testDefaultAllow': testDefaultAllow
188 onload = function() {
189 chrome.test.getConfig(function(config) {
190 embedder.setUp_(config);
191 chrome.test.sendMessage('Launched');