- add sources.
[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('DoneGeolocationTest.PASSED');
25 };
26
27 embedder.test.fail = function() {
28   chrome.test.sendMessage('DoneGeolocationTest.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   // Check that unexpected properties (from other permissionrequest) do not show
104   // up in the event object.
105   embedder.test.assertFalse('userGesture' in e);
106 };
107
108 // Tests begin.
109
110 // Embedder does not have geolocation permission, so geolocation access is
111 // always denied for these tests.
112
113 // Calling deny() results in deny.
114 function testDenyDenies() {
115   var webview = embedder.setUpGuest_();
116
117   var onPermissionRequest = function(e) {
118     chrome.test.log('Embedder notified on permissionRequest');
119     embedder.assertCorrectEvent_(e);
120     e.request.deny();
121   };
122   webview.addEventListener('permissionrequest', onPermissionRequest);
123
124   embedder.setUpLoadStop_(webview, 'test1');
125   embedder.registerAndWaitForPostMessage_(webview, ['test1', 'access-denied']);
126 }
127
128 // Calling allow() results in deny too.
129 function testAllowDenies() {
130   var webview = embedder.setUpGuest_();
131
132   var onPermissionRequest = function(e) {
133     chrome.test.log('Embedder notified on permissionRequest');
134     embedder.assertCorrectEvent_(e);
135     e.request.allow();
136   };
137   webview.addEventListener('permissionrequest', onPermissionRequest);
138
139   embedder.setUpLoadStop_(webview, 'test2');
140   embedder.registerAndWaitForPostMessage_(webview, ['test2', 'access-denied']);
141 }
142
143 embedder.test.testList = {
144   'testDenyDenies': testDenyDenies,
145   'testAllowDenies': testAllowDenies
146 };
147
148 onload = function() {
149   chrome.test.getConfig(function(config) {
150     embedder.setUp(config);
151     chrome.test.sendMessage('Launched');
152   });
153 };