fune/browser/base/content/test/permissions/browser_site_scoped_permissions.js
Benjamin VanderSloot 83bac9db86 Bug 1731739 part 2 - Use site as key for 3rdPartyStorage permissions, rather than origin r=anti-tracking-reviewers,pbz,timhuang
- 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
2021-11-23 18:25:58 +00:00

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();
});
});