Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / platform_apps / web_view / geolocation / embedder_has_no_permission / 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.test = {};
7 embedder.baseGuestURL = '';
8 embedder.guestURL = '';
9
10 window.runTest = function(testName) {
11   if (!embedder.test.testList[testName]) {
12     console.log('Incorrect testName: ' + testName);
13     embedder.test.fail();
14     return;
15   }
16
17   // Run the test.
18   embedder.test.testList[testName]();
19 };
20 // window.* exported functions end.
21
22
23 embedder.test.succeed = function() {
24   chrome.test.sendMessage('TEST_PASSED');
25 };
26
27 embedder.test.fail = function() {
28   chrome.test.sendMessage('TEST_FAILED');
29 };
30
31 embedder.test.assertEq = function(a, b) {
32   if (a != b) {
33     console.log('assertion failed: ' + a + ' != ' + b);
34     embedder.test.fail();
35   }
36 };
37
38 embedder.test.assertTrue = function(condition) {
39   if (!condition) {
40     console.log('assertion failed: true != ' + condition);
41     embedder.test.fail();
42   }
43 };
44
45 embedder.test.assertFalse = function(condition) {
46   if (condition) {
47     console.log('assertion failed: false != ' + condition);
48     embedder.test.fail();
49   }
50 };
51
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);
58 };
59
60 /** @private */
61 embedder.setUpGuest_ = function() {
62   document.querySelector('#webview-tag-container').innerHTML =
63       '<webview style="width: 100px; height: 100px;"' +
64       ' src="' + embedder.guestURL + '"' +
65       '></webview>';
66   var webview = document.querySelector('webview');
67   if (!webview) {
68     console.log('No <webview> element created');
69     embedder.test.fail();
70   }
71   return webview;
72 };
73
74 /** @private */
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]), '*');
80   };
81   webview.addEventListener('loadstop', onWebViewLoadStop);
82 };
83
84 /** @private */
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();
92     }
93   };
94   window.addEventListener('message', onPostMessageReceived);
95 };
96
97 /** @private */
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);
102 };
103
104 // Tests begin.
105
106 // Embedder does not have geolocation permission, so geolocation access is
107 // always denied for these tests.
108
109 // Calling deny() results in deny.
110 function testDenyDenies() {
111   var webview = embedder.setUpGuest_();
112
113   var onPermissionRequest = function(e) {
114     chrome.test.log('Embedder notified on permissionRequest');
115     embedder.assertCorrectEvent_(e);
116     e.request.deny();
117   };
118   webview.addEventListener('permissionrequest', onPermissionRequest);
119
120   embedder.setUpLoadStop_(webview, 'test1');
121   embedder.registerAndWaitForPostMessage_(webview, ['test1', 'access-denied']);
122 }
123
124 // Calling allow() results in deny too.
125 function testAllowDenies() {
126   var webview = embedder.setUpGuest_();
127
128   var onPermissionRequest = function(e) {
129     chrome.test.log('Embedder notified on permissionRequest');
130     embedder.assertCorrectEvent_(e);
131     e.request.allow();
132   };
133   webview.addEventListener('permissionrequest', onPermissionRequest);
134
135   embedder.setUpLoadStop_(webview, 'test2');
136   embedder.registerAndWaitForPostMessage_(webview, ['test2', 'access-denied']);
137 }
138
139 embedder.test.testList = {
140   'testDenyDenies': testDenyDenies,
141   'testAllowDenies': testAllowDenies
142 };
143
144 onload = function() {
145   chrome.test.getConfig(function(config) {
146     embedder.setUp(config);
147     chrome.test.sendMessage('Launched');
148   });
149 };