summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/permissions/browser_site_scoped_permissions.js
blob: 560b1fff4c7b9331a00d84399a081a230ac82abb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* 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();
    }
  );
});