summaryrefslogtreecommitdiffstats
path: root/netwerk/test/browser/browser_about_cache.js
blob: 9e9b2467d589b25a5bcbac2637968f8bd2dab0c2 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
"use strict";

/**
 * Open a dummy page, then open about:cache and verify the opened page shows up in the cache.
 */
add_task(async function () {
  await SpecialPowers.pushPrefEnv({
    set: [["privacy.partition.network_state", false]],
  });

  const kRoot = getRootDirectory(gTestPath).replace(
    "chrome://mochitests/content/",
    "https://example.com/"
  );
  const kTestPage = kRoot + "dummy.html";
  // Open the dummy page to get it cached.
  let tab = await BrowserTestUtils.openNewForegroundTab(
    gBrowser,
    kTestPage,
    true
  );
  BrowserTestUtils.removeTab(tab);

  tab = await BrowserTestUtils.openNewForegroundTab(
    gBrowser,
    "about:cache",
    true
  );
  let expectedPageCheck = function (uri) {
    info("Saw load for " + uri);
    // Can't easily use searchParms and new URL() because it's an about: URI...
    return uri.startsWith("about:cache?") && uri.includes("storage=disk");
  };
  let diskPageLoaded = BrowserTestUtils.browserLoaded(
    tab.linkedBrowser,
    false,
    expectedPageCheck
  );
  await SpecialPowers.spawn(tab.linkedBrowser, [], function () {
    ok(
      !content.document.nodePrincipal.isSystemPrincipal,
      "about:cache should not have system principal"
    );
    let principal = content.document.nodePrincipal;
    let channel = content.docShell.currentDocumentChannel;
    ok(!channel.loadInfo.loadingPrincipal, "Loading principal should be null.");
    is(
      principal.spec,
      content.document.location.href,
      "Principal matches location"
    );
    let links = [...content.document.querySelectorAll("a[href*=disk]")];
    is(links.length, 1, "Should have 1 link to the disk entries");
    links[0].click();
  });
  await diskPageLoaded;
  info("about:cache disk subpage loaded");

  expectedPageCheck = function (uri) {
    info("Saw load for " + uri);
    return uri.startsWith("about:cache-entry") && uri.includes("dummy.html");
  };
  let triggeringURISpec = tab.linkedBrowser.currentURI.spec;
  let entryLoaded = BrowserTestUtils.browserLoaded(
    tab.linkedBrowser,
    false,
    expectedPageCheck
  );
  await SpecialPowers.spawn(
    tab.linkedBrowser,
    [kTestPage],
    function (kTestPage) {
      ok(
        !content.document.nodePrincipal.isSystemPrincipal,
        "about:cache with query params should still not have system principal"
      );
      let principal = content.document.nodePrincipal;
      is(
        principal.spec,
        content.document.location.href,
        "Principal matches location"
      );
      let channel = content.docShell.currentDocumentChannel;
      principal = channel.loadInfo.triggeringPrincipal;
      is(
        principal.spec,
        "about:cache",
        "Triggering principal matches previous location"
      );
      ok(
        !channel.loadInfo.loadingPrincipal,
        "Loading principal should be null."
      );
      let links = [
        ...content.document.querySelectorAll("a[href*='" + kTestPage + "']"),
      ];
      is(links.length, 1, "Should have 1 link to the entry for " + kTestPage);
      links[0].click();
    }
  );
  await entryLoaded;
  info("about:cache entry loaded");

  await SpecialPowers.spawn(
    tab.linkedBrowser,
    [triggeringURISpec],
    function (triggeringURISpec) {
      ok(
        !content.document.nodePrincipal.isSystemPrincipal,
        "about:cache-entry should also not have system principal"
      );
      let principal = content.document.nodePrincipal;
      is(
        principal.spec,
        content.document.location.href,
        "Principal matches location"
      );
      let channel = content.docShell.currentDocumentChannel;
      principal = channel.loadInfo.triggeringPrincipal;
      is(
        principal.spec,
        triggeringURISpec,
        "Triggering principal matches previous location"
      );
      ok(
        !channel.loadInfo.loadingPrincipal,
        "Loading principal should be null."
      );
      ok(
        content.document.querySelectorAll("th").length,
        "Should have several table headers with data."
      );
    }
  );
  BrowserTestUtils.removeTab(tab);
});