Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
add_task(function testRemovePermissionsByOriginAttributes() {
// initialize the permission manager service
let pm = Services.perms;
Assert.equal(pm.all.length, 0, "Should start with no permissions");
// add some permissions
let attrs1 = {
privateBrowsingId: 1,
};
let principal = Services.scriptSecurityManager.createContentPrincipal(
Services.io.newURI("http://amazon.com:8080"),
attrs1
);
let attrs2 = {
partitionKey: "example.com",
privateBrowsingId: 1,
};
let principal2 = Services.scriptSecurityManager.createContentPrincipal(
Services.io.newURI("http://google.com:2048"),
attrs2
);
let attrs3 = {
privateBrowsingId: 0,
};
let principal3 = Services.scriptSecurityManager.createContentPrincipal(
Services.io.newURI("https://google.com"),
attrs3
);
let principal4 = Services.scriptSecurityManager.createContentPrincipal(
Services.io.newURI("https://mozilla.org"),
{}
);
pm.addFromPrincipal(principal, "type", Ci.nsIPermissionManager.ALLOW_ACTION);
pm.addFromPrincipal(principal2, "type", Ci.nsIPermissionManager.ALLOW_ACTION);
pm.addFromPrincipal(principal3, "type", Ci.nsIPermissionManager.ALLOW_ACTION);
pm.addFromPrincipal(principal4, "type", Ci.nsIPermissionManager.ALLOW_ACTION);
Assert.equal(pm.all.length, 4, "Check all permissions added");
pm.removePermissionsWithAttributes(JSON.stringify(attrs1), [], []);
// check exact match removed
Assert.equal(
pm.testPermissionFromPrincipal(
principal,
"type",
"Check exact match removed"
),
Ci.nsIPermissionManager.UNKNOWN_ACTION
);
// check non-exact match removed
Assert.equal(
pm.testPermissionFromPrincipal(
principal2,
"type",
"Check non-exact match removed"
),
Ci.nsIPermissionManager.UNKNOWN_ACTION
);
// check non-match not removed
Assert.equal(
pm.testPermissionFromPrincipal(
principal3,
"type",
"Check non-match not removed"
),
Ci.nsIPermissionManager.ALLOW_ACTION
);
// check default originattributes (privateBrowsingId=0) not removed
Assert.equal(
pm.testPermissionFromPrincipal(
principal4,
"type",
"Check default not removed"
),
Ci.nsIPermissionManager.ALLOW_ACTION
);
pm.removePermissionsWithAttributes(JSON.stringify({}), [], []);
// check all removed
Assert.equal(pm.all.length, 0, "All permissions should be removed");
});
add_task(function testRemovePermissionsByOriginAttributesWithExceptions() {
// initialize the permission manager service
let pm = Services.perms;
Assert.equal(pm.all.length, 0, "Should start with no permissions");
// add some permissions
let attrs = { partitionKey: "mozilla.org" };
let principal = Services.scriptSecurityManager.createContentPrincipal(
Services.io.newURI("http://amazon.com:8080"),
attrs
);
let principal2 = Services.scriptSecurityManager.createContentPrincipal(
Services.io.newURI("http://google.com:2048"),
attrs
);
let principal3 = Services.scriptSecurityManager.createContentPrincipal(
Services.io.newURI("https://google.com"),
{}
);
pm.addFromPrincipal(
principal,
"apple",
Ci.nsIPermissionManager.PROMPT_ACTION
);
pm.addFromPrincipal(principal, "pear", Ci.nsIPermissionManager.ALLOW_ACTION);
pm.addFromPrincipal(
principal,
"cucumber",
Ci.nsIPermissionManager.ALLOW_ACTION
);
pm.addFromPrincipal(
principal,
"watermelon",
Ci.nsIPermissionManager.ALLOW_ACTION
);
pm.addFromPrincipal(principal2, "apple", Ci.nsIPermissionManager.DENY_ACTION);
pm.addFromPrincipal(principal2, "pear", Ci.nsIPermissionManager.DENY_ACTION);
pm.addFromPrincipal(
principal3,
"cucumber",
Ci.nsIPermissionManager.PROMPT_ACTION
);
pm.addFromPrincipal(
principal3,
"apple",
Ci.nsIPermissionManager.ALLOW_ACTION
);
Assert.equal(pm.all.length, 8, "Check all permissions added");
// remove all of type "apple" with originAttributes attrs
pm.removePermissionsWithAttributes(JSON.stringify(attrs), ["apple"], []);
Assert.equal(
pm.all.length,
6,
'"apple" permissions with attr should be removed'
);
Assert.equal(pm.testPermissionFromPrincipal(principal, "apple"), 0);
Assert.equal(
pm.testPermissionFromPrincipal(principal, "pear"),
Ci.nsIPermissionManager.ALLOW_ACTION
);
Assert.equal(
pm.testPermissionFromPrincipal(principal, "cucumber"),
Ci.nsIPermissionManager.ALLOW_ACTION
);
Assert.equal(
pm.testPermissionFromPrincipal(principal, "watermelon"),
Ci.nsIPermissionManager.ALLOW_ACTION
);
Assert.equal(
pm.testPermissionFromPrincipal(principal2, "apple"),
Ci.nsIPermissionManager.UNKNOWN_ACTION
);
Assert.equal(
pm.testPermissionFromPrincipal(principal2, "pear"),
Ci.nsIPermissionManager.DENY_ACTION
);
Assert.equal(
pm.testPermissionFromPrincipal(principal3, "cucumber"),
Ci.nsIPermissionManager.PROMPT_ACTION
);
Assert.equal(
pm.testPermissionFromPrincipal(principal3, "apple"),
Ci.nsIPermissionManager.ALLOW_ACTION
);
// remove rest except for perm with type "watermelon"
pm.removePermissionsWithAttributes(JSON.stringify(attrs), [], ["watermelon"]);
Assert.equal(
pm.all.length,
3,
'All permissions with attrs should be removed except type "watermelon"'
);
Assert.equal(
pm.testPermissionFromPrincipal(principal, "watermelon"),
Ci.nsIPermissionManager.ALLOW_ACTION
);
Assert.equal(
pm.testPermissionFromPrincipal(principal3, "cucumber"),
Ci.nsIPermissionManager.PROMPT_ACTION
);
Assert.equal(
pm.testPermissionFromPrincipal(principal3, "apple"),
Ci.nsIPermissionManager.ALLOW_ACTION
);
// remove all
pm.removePermissionsWithAttributes(JSON.stringify({}), [], []);
Assert.equal(pm.all.length, 0, "All permissions should be removed");
});