forked from mirrors/gecko-dev
- Adding browser tests to verify correct behavior in integration
- New test that fails on previous version: toolkit/components/antitracking/test/browser/browser_storageAccessScopeSameSiteWrite.js
- Add the ability to store permission by site, use 3rdPartyStorage for this
- No change is made to permission reads. These already proceed recursively, which eventually reach the site.
- When fetching all permissions for a principal, also look for site-scoped permissions on its site's principal
Differential Revision: https://phabricator.services.mozilla.com/D130675
105 lines
2.8 KiB
JavaScript
105 lines
2.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const EMPTY_PAGE =
|
|
getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content",
|
|
"https://example.com"
|
|
) + "empty.html";
|
|
|
|
const SUBDOMAIN_EMPTY_PAGE =
|
|
getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content",
|
|
"https://www.example.com"
|
|
) + "empty.html";
|
|
|
|
add_task(async function testSiteScopedPermissionSubdomainAffectsBaseDomain() {
|
|
let subdomainOrigin = "https://www.example.com";
|
|
let subdomainPrincipal = Services.scriptSecurityManager.createContentPrincipalFromOrigin(
|
|
subdomainOrigin
|
|
);
|
|
let id = "3rdPartyStorage^https://example.org";
|
|
|
|
await BrowserTestUtils.withNewTab(EMPTY_PAGE, async function(browser) {
|
|
Services.perms.addFromPrincipal(
|
|
subdomainPrincipal,
|
|
id,
|
|
SitePermissions.ALLOW
|
|
);
|
|
|
|
await openPermissionPopup();
|
|
|
|
let permissionsList = document.getElementById(
|
|
"permission-popup-permission-list"
|
|
);
|
|
let listEntryCount = permissionsList.querySelectorAll(
|
|
".permission-popup-permission-item"
|
|
).length;
|
|
is(
|
|
listEntryCount,
|
|
1,
|
|
"Permission exists on base domain when set on subdomain"
|
|
);
|
|
|
|
closePermissionPopup();
|
|
|
|
Services.perms.removeFromPrincipal(subdomainPrincipal, id);
|
|
|
|
await openPermissionPopup();
|
|
|
|
listEntryCount = permissionsList.querySelectorAll(
|
|
".permission-popup-permission-item-3rdPartyStorage"
|
|
).length;
|
|
is(
|
|
listEntryCount,
|
|
0,
|
|
"Permission removed on base domain when removed on subdomain"
|
|
);
|
|
|
|
await closePermissionPopup();
|
|
});
|
|
});
|
|
|
|
add_task(async function testSiteScopedPermissionBaseDomainAffectsSubdomain() {
|
|
let origin = "https://example.com";
|
|
let principal = Services.scriptSecurityManager.createContentPrincipalFromOrigin(
|
|
origin
|
|
);
|
|
let id = "3rdPartyStorage^https://example.org";
|
|
|
|
await BrowserTestUtils.withNewTab(SUBDOMAIN_EMPTY_PAGE, async function(
|
|
browser
|
|
) {
|
|
Services.perms.addFromPrincipal(principal, id, SitePermissions.ALLOW);
|
|
await openPermissionPopup();
|
|
|
|
let permissionsList = document.getElementById(
|
|
"permission-popup-permission-list"
|
|
);
|
|
let listEntryCount = permissionsList.querySelectorAll(
|
|
".permission-popup-permission-item"
|
|
).length;
|
|
is(
|
|
listEntryCount,
|
|
1,
|
|
"Permission exists on base domain when set on subdomain"
|
|
);
|
|
|
|
closePermissionPopup();
|
|
|
|
Services.perms.removeFromPrincipal(principal, id);
|
|
|
|
await openPermissionPopup();
|
|
|
|
listEntryCount = permissionsList.querySelectorAll(
|
|
".permission-popup-permission-item-3rdPartyStorage"
|
|
).length;
|
|
is(
|
|
listEntryCount,
|
|
0,
|
|
"Permission removed on base domain when removed on subdomain"
|
|
);
|
|
|
|
await closePermissionPopup();
|
|
});
|
|
});
|