forked from mirrors/gecko-dev
116 lines
5.3 KiB
JavaScript
116 lines
5.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
"use strict";
|
|
|
|
Components.utils.import("resource:///modules/SitePermissions.jsm");
|
|
Components.utils.import("resource://gre/modules/Services.jsm");
|
|
|
|
const STORAGE_MANAGER_ENABLED = Services.prefs.getBoolPref("browser.storageManager.enabled");
|
|
|
|
add_task(async function testPermissionsListing() {
|
|
let expectedPermissions = ["camera", "cookie", "desktop-notification", "focus-tab-by-prompt",
|
|
"geo", "image", "indexedDB", "install", "microphone", "popup", "screen"];
|
|
if (STORAGE_MANAGER_ENABLED) {
|
|
// The persistent-storage permission is still only pref-on on Nightly
|
|
// so we add it only when it's pref-on.
|
|
// Should remove this checking and add it as default after it is fully pref-on.
|
|
expectedPermissions.push("persistent-storage");
|
|
}
|
|
Assert.deepEqual(SitePermissions.listPermissions().sort(), expectedPermissions.sort(),
|
|
"Correct list of all permissions");
|
|
});
|
|
|
|
add_task(async function testGetAllByURI() {
|
|
// check that it returns an empty array on an invalid URI
|
|
// like a file URI, which doesn't support site permissions
|
|
let wrongURI = Services.io.newURI("file:///example.js")
|
|
Assert.deepEqual(SitePermissions.getAllByURI(wrongURI), []);
|
|
|
|
let uri = Services.io.newURI("https://example.com")
|
|
Assert.deepEqual(SitePermissions.getAllByURI(uri), []);
|
|
|
|
SitePermissions.set(uri, "camera", SitePermissions.ALLOW);
|
|
Assert.deepEqual(SitePermissions.getAllByURI(uri), [
|
|
{ id: "camera", state: SitePermissions.ALLOW, scope: SitePermissions.SCOPE_PERSISTENT }
|
|
]);
|
|
|
|
SitePermissions.set(uri, "microphone", SitePermissions.ALLOW, SitePermissions.SCOPE_SESSION);
|
|
SitePermissions.set(uri, "desktop-notification", SitePermissions.BLOCK);
|
|
|
|
Assert.deepEqual(SitePermissions.getAllByURI(uri), [
|
|
{ id: "camera", state: SitePermissions.ALLOW, scope: SitePermissions.SCOPE_PERSISTENT },
|
|
{ id: "microphone", state: SitePermissions.ALLOW, scope: SitePermissions.SCOPE_SESSION },
|
|
{ id: "desktop-notification", state: SitePermissions.BLOCK, scope: SitePermissions.SCOPE_PERSISTENT }
|
|
]);
|
|
|
|
SitePermissions.remove(uri, "microphone");
|
|
Assert.deepEqual(SitePermissions.getAllByURI(uri), [
|
|
{ id: "camera", state: SitePermissions.ALLOW, scope: SitePermissions.SCOPE_PERSISTENT },
|
|
{ id: "desktop-notification", state: SitePermissions.BLOCK, scope: SitePermissions.SCOPE_PERSISTENT }
|
|
]);
|
|
|
|
SitePermissions.remove(uri, "camera");
|
|
SitePermissions.remove(uri, "desktop-notification");
|
|
Assert.deepEqual(SitePermissions.getAllByURI(uri), []);
|
|
|
|
// XXX Bug 1303108 - Control Center should only show non-default permissions
|
|
SitePermissions.set(uri, "addon", SitePermissions.BLOCK);
|
|
Assert.deepEqual(SitePermissions.getAllByURI(uri), []);
|
|
SitePermissions.remove(uri, "addon");
|
|
});
|
|
|
|
add_task(async function testGetAvailableStates() {
|
|
Assert.deepEqual(SitePermissions.getAvailableStates("camera"),
|
|
[ SitePermissions.UNKNOWN,
|
|
SitePermissions.ALLOW,
|
|
SitePermissions.BLOCK ]);
|
|
|
|
Assert.deepEqual(SitePermissions.getAvailableStates("cookie"),
|
|
[ SitePermissions.ALLOW,
|
|
SitePermissions.ALLOW_COOKIES_FOR_SESSION,
|
|
SitePermissions.BLOCK ]);
|
|
|
|
Assert.deepEqual(SitePermissions.getAvailableStates("popup"),
|
|
[ SitePermissions.ALLOW,
|
|
SitePermissions.BLOCK ]);
|
|
});
|
|
|
|
add_task(async function testExactHostMatch() {
|
|
let uri = Services.io.newURI("https://example.com");
|
|
let subUri = Services.io.newURI("https://test1.example.com");
|
|
|
|
let exactHostMatched = ["desktop-notification", "focus-tab-by-prompt", "camera",
|
|
"microphone", "screen", "geo"];
|
|
if (STORAGE_MANAGER_ENABLED) {
|
|
// The persistent-storage permission is still only pref-on on Nightly
|
|
// so we add it only when it's pref-on.
|
|
// Should remove this checking and add it as default after it is fully pref-on.
|
|
exactHostMatched.push("persistent-storage");
|
|
}
|
|
let nonExactHostMatched = ["image", "cookie", "popup", "install", "indexedDB"];
|
|
|
|
let permissions = SitePermissions.listPermissions();
|
|
for (let permission of permissions) {
|
|
SitePermissions.set(uri, permission, SitePermissions.ALLOW);
|
|
|
|
if (exactHostMatched.includes(permission)) {
|
|
// Check that the sub-origin does not inherit the permission from its parent.
|
|
Assert.equal(SitePermissions.get(subUri, permission).state, SitePermissions.UNKNOWN);
|
|
} else if (nonExactHostMatched.includes(permission)) {
|
|
// Check that the sub-origin does inherit the permission from its parent.
|
|
Assert.equal(SitePermissions.get(subUri, permission).state, SitePermissions.ALLOW);
|
|
} else {
|
|
Assert.ok(false, `Found an unknown permission ${permission} in exact host match test.` +
|
|
"Please add new permissions from SitePermissions.jsm to this test.");
|
|
}
|
|
|
|
// Check that the permission can be made specific to the sub-origin.
|
|
SitePermissions.set(subUri, permission, SitePermissions.BLOCK);
|
|
Assert.equal(SitePermissions.get(subUri, permission).state, SitePermissions.BLOCK);
|
|
Assert.equal(SitePermissions.get(uri, permission).state, SitePermissions.ALLOW);
|
|
|
|
SitePermissions.remove(subUri, permission);
|
|
SitePermissions.remove(uri, permission);
|
|
}
|
|
});
|