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.
7 embedder.baseGuestURL = '';
8 embedder.guestURL = '';
10 window.runTest = function(testName) {
11 if (!embedder.test.testList[testName]) {
12 console.log('Incorrect testName: ' + testName);
18 embedder.test.testList[testName]();
20 // window.* exported functions end.
23 embedder.test.succeed = function() {
24 chrome.test.sendMessage('DoneGeolocationTest.PASSED');
27 embedder.test.fail = function() {
28 chrome.test.sendMessage('DoneGeolocationTest.FAILED');
31 embedder.test.assertEq = function(a, b) {
33 console.log('assertion failed: ' + a + ' != ' + b);
38 embedder.test.assertTrue = function(condition) {
40 console.log('assertion failed: true != ' + condition);
45 embedder.test.assertFalse = function(condition) {
47 console.log('assertion failed: false != ' + condition);
52 embedder.setUp = function(config) {
53 embedder.baseGuestURL = 'http://localhost:' + config.testServer.port;
54 embedder.guestURL = embedder.baseGuestURL +
55 '/extensions/platform_apps/web_view/geolocation' +
56 '/geolocation_access_guest.html';
57 chrome.test.log('Guest url is: ' + embedder.guestURL);
61 embedder.setUpGuest_ = function() {
62 document.querySelector('#webview-tag-container').innerHTML =
63 '<webview style="width: 100px; height: 100px;"' +
64 ' src="' + embedder.guestURL + '"' +
66 var webview = document.querySelector('webview');
68 console.log('No <webview> element created');
75 embedder.setUpLoadStop_ = function(webview, testName) {
76 var onWebViewLoadStop = function(e) {
77 // Send post message to <webview> when it's ready to receive them.
78 webview.contentWindow.postMessage(
79 JSON.stringify(['check-geolocation-permission', '' + testName]), '*');
81 webview.addEventListener('loadstop', onWebViewLoadStop);
85 embedder.registerAndWaitForPostMessage_ = function(webview, expectedData) {
86 var testName = expectedData[0];
87 var onPostMessageReceived = function(e) {
88 var data = JSON.parse(e.data);
89 if (data[0] == '' + testName) {
90 embedder.test.assertEq(expectedData[1], data[1]);
91 embedder.test.succeed();
94 window.addEventListener('message', onPostMessageReceived);
98 embedder.assertCorrectEvent_ = function(e) {
99 embedder.test.assertEq('geolocation', e.permission);
100 embedder.test.assertTrue(!!e.url);
101 embedder.test.assertTrue(e.url.indexOf(embedder.baseGuestURL) == 0);
103 // Check that unexpected properties (from other permissionrequest) do not show
104 // up in the event object.
105 embedder.test.assertFalse('userGesture' in e);
110 // Embedder does not have geolocation permission, so geolocation access is
111 // always denied for these tests.
113 // Calling deny() results in deny.
114 function testDenyDenies() {
115 var webview = embedder.setUpGuest_();
117 var onPermissionRequest = function(e) {
118 chrome.test.log('Embedder notified on permissionRequest');
119 embedder.assertCorrectEvent_(e);
122 webview.addEventListener('permissionrequest', onPermissionRequest);
124 embedder.setUpLoadStop_(webview, 'test1');
125 embedder.registerAndWaitForPostMessage_(webview, ['test1', 'access-denied']);
128 // Calling allow() results in deny too.
129 function testAllowDenies() {
130 var webview = embedder.setUpGuest_();
132 var onPermissionRequest = function(e) {
133 chrome.test.log('Embedder notified on permissionRequest');
134 embedder.assertCorrectEvent_(e);
137 webview.addEventListener('permissionrequest', onPermissionRequest);
139 embedder.setUpLoadStop_(webview, 'test2');
140 embedder.registerAndWaitForPostMessage_(webview, ['test2', 'access-denied']);
143 embedder.test.testList = {
144 'testDenyDenies': testDenyDenies,
145 'testAllowDenies': testAllowDenies
148 onload = function() {
149 chrome.test.getConfig(function(config) {
150 embedder.setUp(config);
151 chrome.test.sendMessage('Launched');