gecko/dom/tests/browser/browser_webapps_perms_reinstall.js

179 lines
5.2 KiB
JavaScript

/* vim:set ts=2 sw=2 sts=2 et: */
/* 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/. */
let scope = {};
Cu.import("resource://gre/modules/PermissionSettings.jsm", scope);
const TEST_URL =
"http://mochi.test:8888/browser/dom/tests/browser/test-webapps-permissions.html";
const TEST_MANIFEST_URL =
"http://mochi.test:8888/browser/dom/tests/browser/test-webapp.webapp";
const TEST_ORIGIN_URL = "http://mochi.test:8888";
const installedPermsToTest = {
"geolocation": "prompt",
"alarms": "allow",
"contacts": "deny",
"device-storage:apps": "deny",
};
const reinstalledPermsToTest = {
"geolocation": "prompt",
"alarms": "unknown",
"contacts": "deny",
"device-storage:apps": "deny",
};
var gWindow, gNavigator;
function test() {
waitForExplicitFinish();
var tab = gBrowser.addTab(TEST_URL);
gBrowser.selectedTab = tab;
var browser = gBrowser.selectedBrowser;
PopupNotifications.panel.addEventListener("popupshown", handlePopup, false);
registerCleanupFunction(function () {
gWindow = null;
gBrowser.removeTab(tab);
});
browser.addEventListener("DOMContentLoaded", function onLoad(event) {
browser.removeEventListener("DOMContentLoaded", onLoad, false);
gWindow = browser.contentWindow;
SpecialPowers.setBoolPref("dom.mozPermissionSettings.enabled", true);
SpecialPowers.addPermission("permissions", true, browser.contentWindow.document);
SpecialPowers.addPermission("permissions", true, browser.contentDocument);
let pendingInstall;
function testInstall() {
var nav = XPCNativeWrapper.unwrap(browser.contentWindow.navigator);
ok(nav.mozApps, "we have a mozApps property");
var navMozPerms = nav.mozPermissionSettings;
ok(navMozPerms, "mozPermissions is available");
// INSTALL app
pendingInstall = nav.mozApps.install(TEST_MANIFEST_URL, null);
pendingInstall.onsuccess = function onsuccess()
{
ok(this.result, "we have a result: " + this.result);
function testPerm(aPerm, aAccess)
{
var res =
navMozPerms.get(aPerm, TEST_MANIFEST_URL, TEST_ORIGIN_URL, false);
is(res, aAccess, "install: " + aPerm + " is " + res);
}
for (let permName in installedPermsToTest) {
testPerm(permName, installedPermsToTest[permName]);
}
writeUpdatesToWebappManifest();
};
pendingInstall.onerror = function onerror(e)
{
ok(false, "install()'s onerror was called: " + e);
ok(false, "All permission checks failed, reinstall tests were not run");
};
}
testInstall();
}, false);
}
function reinstallApp()
{
var browser = gBrowser.selectedBrowser;
var nav = XPCNativeWrapper.unwrap(browser.contentWindow.navigator);
var navMozPerms = nav.mozPermissionSettings;
var pendingReinstall = nav.mozApps.install(TEST_MANIFEST_URL);
pendingReinstall.onsuccess = function onsuccess()
{
ok(this.result, "we have a result: " + this.result);
function testPerm(aPerm, aAccess)
{
var res =
navMozPerms.get(aPerm, TEST_MANIFEST_URL, TEST_ORIGIN_URL, false);
is(res, aAccess, "reinstall: " + aPerm + " is " + res);
}
for (let permName in reinstalledPermsToTest) {
testPerm(permName, reinstalledPermsToTest[permName]);
}
writeUpdatesToWebappManifest();
finish();
};
};
var qtyPopups = 0;
function handlePopup(aEvent)
{
qtyPopups++;
if (qtyPopups == 2) {
aEvent.target.removeEventListener("popupshown", handlePopup, false);
}
SpecialPowers.wrap(this).childNodes[0].button.doCommand();
}
function writeUpdatesToWebappManifest(aRestore)
{
let newfile = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties).
get("XCurProcD", Ci.nsIFile);
let devPath = ["_tests", "testing", "mochitest",
"browser", "dom" , "tests", "browser"];
// make package-tests moves tests to:
// dist/test-package-stage/mochitest/browser/dom/tests/browser
let slavePath = ["dist", "test-package-stage", "mochitest",
"browser", "dom", "tests", "browser"];
newfile = newfile.parent; // up to dist/
newfile = newfile.parent;// up to obj-dir/
info(newfile.path);
try {
for (let idx in devPath) {
newfile.append(devPath[idx]);
if (!newfile.isDirectory()) {
info("*** NOT RUNNING ON DEV MACHINE\n\n");
throw new Error("Test is not running on dev machine, try dev path");
}
}
}
catch (ex) {
info(ex + "\n\n");
for (let idx in slavePath) {
newfile.append(slavePath[idx]);
if (!newfile.isDirectory()) {
info("*** NOT RUNNING ON BUILD SLAVE\n\n");
throw new Error("Test is not running on slave machine, abort test");
}
}
}
info("Final path: " + newfile.path);
if (aRestore) {
newfile.append("test-webapp-original.webapp");
} else {
newfile.append("test-webapp-reinstall.webapp");
}
let oldfile = newfile.parent;
oldfile.append("test-webapp.webapp");
newfile.copyTo(null, "test-webapp.webapp");
if (!aRestore) {
executeSoon(function (){ reinstallApp(); });
}
}