Chromium Code Reviews| Index: chrome/test/data/extensions/platform_apps/web_view/media_access/embedder_has_permission/embedder.js |
| diff --git a/chrome/test/data/extensions/platform_apps/web_view/media_access/embedder_has_permission/embedder.js b/chrome/test/data/extensions/platform_apps/web_view/media_access/embedder_has_permission/embedder.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..20a7b73efd20a32146039be74e1408d66a8675d6 |
| --- /dev/null |
| +++ b/chrome/test/data/extensions/platform_apps/web_view/media_access/embedder_has_permission/embedder.js |
| @@ -0,0 +1,231 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +var embedder = {}; |
| +embedder.tests = {}; |
| +embedder.baseGuestURL = ''; |
| +embedder.guestURL = ''; |
| +embedder.guestURL2 = ''; |
| + |
| +chrome.test.getConfig(function(config) { |
| + embedder.baseGuestURL = 'http://localhost:' + config.testServer.port; |
| + embedder.guestURL = embedder.baseGuestURL + |
| + '/files/extensions/platform_apps/web_view/media_access' + |
| + '/media_access_guest.html'; |
| + embedder.guestURL2 = embedder.baseGuestURL + |
| + '/files/extensions/platform_apps/web_view/media_access' + |
| + '/media_access_guest2.html'; |
| + chrome.test.log('Guest url is: ' + embedder.guestURL); |
| +}); |
| + |
| +embedder.tests.assertMediaEvent = function(e) { |
| + chrome.test.assertEq('media', e.permission); |
| + chrome.test.assertTrue(!!e.url); |
| + chrome.test.assertTrue(e.url.indexOf(embedder.baseGuestURL) == 0); |
| +}; |
| + |
| +// Loads a guest which requests media access. The embedder (platform app) has |
| +// acccess to media. The embedder grants access to media to the guest. |
| +// |
| +// Once the guest is allowed or denied media access, the guest notifies the |
| +// embedder about the fact via post message. |
| +// The embedder has to initiate a post message so that the guest can get a |
| +// reference to embedder to send the reply back. |
| +embedder.tests.testMediaAccessPermissionAllow = function() { |
| + var container = document.getElementById('webview-tag-container-test1'); |
| + container.innerHTML = |
| + '<webview style="width: 100px; height: 100px;"' + |
| + ' src="' + embedder.guestURL + '"' + |
| + '></webview >'; |
| + var webview = container.querySelector('webview'); |
| + |
| + var onPermissionRequest = function(e) { |
| + chrome.test.log('Embedder notified on permissionRequest'); |
| + chrome.test.assertEq('media', e.permission); |
| + chrome.test.assertTrue(!!e.url); |
| + chrome.test.assertTrue(e.url.indexOf(embedder.baseGuestURL) == 0); |
| + e.allow(); |
| + }; |
| + webview.addEventListener('permissionrequest', onPermissionRequest); |
| + |
| + var onWebViewLoadStop = function(e) { |
| + // Send post message to <webview> when it's ready to receive them. |
| + webview.contentWindow.frames.postMessage( |
|
Fady Samuel
2013/02/07 15:40:34
webview.contentWindow.postMessage should now work.
lazyboy
2013/02/07 21:24:41
Done.
|
| + JSON.stringify(['check-media-permission', 'test1']), '*'); |
| + }; |
| + webview.addEventListener('loadstop', onWebViewLoadStop); |
| + |
| + var onPostMessageReceived = function(e) { |
| + var data = JSON.parse(e.data); |
| + if (data[1] == 'test1') { |
| + var testStatus = data[0]; |
| + chrome.test.assertEq('access-granted', testStatus); |
| + chrome.test.succeed(); |
| + } |
| + }; |
| + window.addEventListener('message', onPostMessageReceived); |
| +}; |
| + |
| +// Test that allows permission request in both listeners. |
| +// The second call to e.allow() would result in exception. |
| +embedder.tests.testMediaAccessPermissionAllowTwice = function() { |
| + var container = document.getElementById('webview-tag-container-test2'); |
| + container.innerHTML = |
| + '<webview style="width: 100px; height: 100px;"' + |
| + ' src="' + embedder.guestURL + '"' + |
| + '></webview >'; |
| + var webview = container.querySelector('webview'); |
| + |
| + var exceptionCount = 0; |
| + var callCount = 0; |
| + var callAllowAndCheck = function(e) { |
| + try { |
| + e.allow(); |
| + ++callCount; |
| + } catch (ex) { |
| + ++exceptionCount; |
| + } |
| + if (callCount == 1 && exceptionCount == 1) { |
| + chrome.test.succeed(); |
| + } |
| + }; |
| + |
| + var onPermissionRequestAllow1 = function(e) { |
| + embedder.tests.assertMediaEvent(e); |
| + callAllowAndCheck(e); |
| + }; |
| + var onPermissionRequestAllow2 = function(e) { |
| + embedder.tests.assertMediaEvent(e); |
| + callAllowAndCheck(e); |
| + }; |
| + webview.addEventListener('permissionrequest', onPermissionRequestAllow1); |
| + webview.addEventListener('permissionrequest', onPermissionRequestAllow2); |
| + |
| + var onWebViewLoadStop = function(e) { |
| + // Send post message to <webview> when it's ready to receive them. |
| + webview.contentWindow.frames.postMessage( |
| + JSON.stringify(['check-media-permission', 'test2']), '*'); |
| + }; |
| + webview.addEventListener('loadstop', onWebViewLoadStop); |
| + |
| + var onPostMessageReceived = function(e) { |
| + var data = JSON.parse(e.data); |
| + var testStatus = data[0]; |
| + if (data[1] == 'test2') { |
| + chrome.test.assertEq('access-granted', testStatus); |
| + chrome.test.succeed(); |
| + } |
| + }; |
| + window.addEventListener('message', onPostMessageReceived); |
| +}; |
| + |
| +// Loads a guest which requests media access. The embedder (platform app) has |
| +// acccess to media. The embedder denies access to media to the guest. |
| +// |
| +// Note that this test loads a different guest than |
| +// testMediaAccessPermissionAllow and testMediaAccessPermissionAllowTwice tests, |
| +// this is because allowing media on one particular guest seems to stick |
| +// (therefore user cannot allow and then deny the same guest). |
| +embedder.tests.testMediaAccessPermissionDeny = function() { |
| + var container = document.getElementById('webview-tag-container-test3'); |
| + container.innerHTML = |
| + '<webview style="width: 100px; height: 100px;"' + |
| + ' src="' + embedder.guestURL2 + '"' + |
| + '></webview >'; |
| + var webview = container.querySelector('webview'); |
| + |
| + var onPermissionRequest = function(e) { |
| + window.console.log('Embedder notified on permissionRequest'); |
| + chrome.test.log('Embedder notified on permissionRequest'); |
| + chrome.test.assertEq('media', e.permission); |
| + chrome.test.assertTrue(!!e.url); |
| + chrome.test.assertTrue(e.url.indexOf(embedder.baseGuestURL) == 0); |
| + try { |
| + e.deny(); |
| + } catch (ex) { |
| + chrome.test.fail('Exception is not expected: ' + ex); |
| + } |
| + }; |
| + webview.addEventListener('permissionrequest', onPermissionRequest); |
| + |
| + var onWebViewLoadStop = function(e) { |
| + // Send post message to <webview> when it's ready to receive them. |
| + webview.contentWindow.frames.postMessage( |
| + JSON.stringify(['check-media-permission', 'test3']), '*'); |
| + }; |
| + webview.addEventListener('loadstop', onWebViewLoadStop); |
| + |
| + var onPostMessageReceived = function(e) { |
| + var data = JSON.parse(e.data); |
| + if (data[1] == 'test3') { |
| + var testStatus = data[0]; |
| + chrome.test.assertEq('access-denied', testStatus); |
| + chrome.test.succeed(); |
| + } |
| + }; |
| + window.addEventListener('message', onPostMessageReceived); |
| +}; |
| + |
| +// TODO(lazyboy): Add commments here. |
| +embedder.tests.testMediaAccessPermissionAutoDeny = function() { |
| + var container = document.getElementById('webview-tag-container-test3'); |
| + container.innerHTML = |
| + '<webview style="width: 100px; height: 100px;"' + |
| + ' src="' + embedder.guestURL2 + '"' + |
| + '></webview >'; |
| + var webview = container.querySelector('webview'); |
| + |
| + var onPermissionRequest = function(e) { |
| + window.console.log('Embedder notified on permissionRequest'); |
| + chrome.test.log('Embedder notified on permissionRequest'); |
| + chrome.test.assertEq('media', e.permission); |
| + chrome.test.assertTrue(!!e.url); |
| + chrome.test.assertTrue(e.url.indexOf(embedder.baseGuestURL) == 0); |
| + // Do nothing. |
| + }; |
| + webview.addEventListener('permissionrequest', onPermissionRequest); |
| + |
| + var onWebViewLoadStop = function(e) { |
| + // Send post message to <webview> when it's ready to receive them. |
| + webview.contentWindow.frames.postMessage( |
| + JSON.stringify(['check-media-permission', 'test4']), '*'); |
| + }; |
| + webview.addEventListener('loadstop', onWebViewLoadStop); |
| + |
| + var onPostMessageReceived = function(e) { |
| + var data = JSON.parse(e.data); |
| + if (data[1] == 'test4') { |
| + var testStatus = data[0]; |
| + chrome.test.assertEq('access-denied', testStatus); |
| + chrome.test.succeed(); |
| + } |
| + }; |
| + window.addEventListener('message', onPostMessageReceived); |
| +}; |
| + |
| +onload = function() { |
| + chrome.test.runTests([ |
| + /* |
| + function testMediaAccessPermissionAllow() { |
| + chrome.test.getConfig(function(config) { |
| + embedder.tests.testMediaAccessPermissionAllow(); |
| + }); |
| + }, |
| + function testMediaAccessPermissionAllowTwice() { |
| + chrome.test.getConfig(function(config) { |
| + embedder.tests.testMediaAccessPermissionAllowTwice(); |
| + }); |
| + },*/ |
| + function testMediaAccessPermissionDeny() { |
| + chrome.test.getConfig(function(config) { |
| + embedder.tests.testMediaAccessPermissionDeny(); |
| + }); |
| + }, |
| + function testMediaAccessPermissionAutoDeny() { |
| + chrome.test.getConfig(function(config) { |
| + embedder.tests.testMediaAccessPermissionAutoDeny(); |
| + }); |
| + } |
| + ]); |
| +}; |