Bug 951997 : Create content sandbox permission prompt test. r=amarchesini, jgriffin

This commit is contained in:
Alfredo Yang 2014-01-02 20:43:54 +01:00
parent 61f5e84559
commit ce234fb2fa
8 changed files with 181 additions and 0 deletions

View File

@ -0,0 +1,16 @@
<html>
<body>
<script>
// invoke audio-capture permission prompt
navigator.mozGetUserMedia({audio: true}, function () {}, function () {});
// invoke geolocation permission prompt
navigator.geolocation.getCurrentPosition(function (pos) {});
// invoke desktop-notification prompt
Notification.requestPermission(function (perm) {});
</script>
</body>
</html>

View File

@ -0,0 +1,7 @@
[DEFAULT]
run-if = toolkit == "gonk"
support-files =
permission_handler_chrome.js
SandboxPromptTest.html
[test_sandbox_permission.html]

View File

@ -0,0 +1,76 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
function debug(str) {
dump("CHROME PERMISSON HANDLER -- " + str + "\n");
}
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const { Services } = Cu.import("resource://gre/modules/Services.jsm");
let browser = Services.wm.getMostRecentWindow("navigator:browser");
let shell;
let test_counts = 0;
function loadShell() {
if (!browser) {
debug("no browser");
return false;
}
shell = browser.shell;
return true;
}
function getContentWindow() {
return shell.contentBrowser.contentWindow;
}
function addChromeEventListener(type, listener) {
let content = getContentWindow();
content.addEventListener("mozChromeEvent", function chromeListener(evt) {
if (!evt.detail || evt.detail.type !== type) {
return;
}
let remove = listener(evt);
if (remove) {
content.removeEventListener("mozChromeEvent", chromeListener);
}
});
}
function checkPromptEvent(prompt_evt) {
let detail = prompt_evt.detail;
if (detail.permission == "audio-capture") {
sendAsyncMessage("permission.granted", "audio-capture");
test_counts--;
} else if (detail.permission == "desktop-notification") {
sendAsyncMessage("permission.granted", "desktop-notification");
test_counts--;
} else if (detail.permission == "geolocation") {
sendAsyncMessage("permission.granted", "geolocation");
test_counts--;
}
if (!test_counts) {
debug("remove prompt event listener.");
return true;
}
return false;
}
if (loadShell()) {
addMessageListener("test.counts", function (counts) {
test_counts = counts;
});
addChromeEventListener("permission-prompt", checkPromptEvent);
}

View File

@ -0,0 +1,78 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=951997
-->
<head>
<meta charset="utf-8">
<title>Permission Prompt Test</title>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=951997">Permission prompt web content test</a>
<script type="application/javascript">
"use strict";
const APP_URL = "SandboxPromptTest.html";
var gUrl = SimpleTest.getTestFileURL("permission_handler_chrome.js");
var gScript = SpecialPowers.loadChromeScript(gUrl);
var gResult = [
{
type: "audio-capture",
prompt: false
},
{
type: "geolocation",
prompt: false
},
{
type: "desktop-notification",
prompt: false
}
];
// Create a sanbox iframe.
function loadBrowser() {
var iframe = document.createElement("iframe");
SpecialPowers.wrap(iframe).mozbrowser = true;
iframe.src = APP_URL;
document.body.appendChild(iframe);
}
// send test counts to chrome script.
gScript.sendAsyncMessage("test.counts", gResult.length);
gScript.addMessageListener("permission.granted", function (aName) {
gResult.forEach(function(aType, aIndex) {
if (aType.type == aName) {
aType.prompt = true;
}
});
if(gResult.every(function(aType) { return aType.prompt; })) {
ok(true, "Get all permission prompts");
gScript.destroy();
SimpleTest.finish();
}});
// Add permissions to this app. We use ALLOW_ACTION here. The ContentPermissionPrompt
// should prompt for permission, not allow it without prompt.
SpecialPowers.pushPrefEnv({"set": [["media.navigator.permission.disabled", false]]},
function() {
SpecialPowers.addPermission('audio-capture',
SpecialPowers.Ci.nsIPermissionManager.ALLOW_ACTION, document);
SpecialPowers.addPermission('geolocation',
SpecialPowers.Ci.nsIPermissionManager.ALLOW_ACTION, document);
SpecialPowers.addPermission('desktop-notification',
SpecialPowers.Ci.nsIPermissionManager.ALLOW_ACTION, document);
loadBrowser();
});
SimpleTest.waitForExplicitFinish();
</script>
</pre>
</body>
</html>

View File

@ -5,3 +5,4 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini']
MOCHITEST_MANIFESTS += ['mochitest/mochitest.ini']

View File

@ -1,5 +1,6 @@
{
"runtests": {
"b2g": "",
"caps": "",
"content": "",
"docshell": "",

View File

@ -1,5 +1,6 @@
{
"runtests": {
"b2g": "",
"caps": "",
"content": "",
"docshell": "",

View File

@ -1,5 +1,6 @@
{
"runtests": {
"b2g": "",
"caps": "",
"content": "",
"docshell": "",