summaryrefslogtreecommitdiffstats
path: root/netwerk/test/browser/browser_about_cache.js
blob: 38cfa3d0287d807f58491c1d60360d4e121bf5ed (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
"use strict";

/**
 * Open a dummy page, then open about:cache and verify the opened page shows up in the cache.
 */
add_task(function*() {
  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 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, kTestPage, true);
  yield BrowserTestUtils.removeTab(tab);

  tab = yield 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);
  yield ContentTask.spawn(tab.linkedBrowser, null, function() {
    ok(!content.document.nodePrincipal.isSystemPrincipal,
       "about:cache should not have system principal");
    let principalURI = content.document.nodePrincipal.URI;
    let channel = content.document.docShell.currentDocumentChannel;
    ok(!channel.loadInfo.loadingPrincipal, "Loading principal should be null.");
    is(principalURI && principalURI.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();
  });
  yield 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);
  yield ContentTask.spawn(tab.linkedBrowser, kTestPage, function(kTestPage) {
    ok(!content.document.nodePrincipal.isSystemPrincipal,
       "about:cache with query params should still not have system principal");
    let principalURI = content.document.nodePrincipal.URI;
    is(principalURI && principalURI.spec, content.document.location.href, "Principal matches location");
    let channel = content.document.docShell.currentDocumentChannel;
    principalURI = channel.loadInfo.triggeringPrincipal.URI;
    is(principalURI && principalURI.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();
  });
  yield entryLoaded;
  info("about:cache entry loaded");


  yield ContentTask.spawn(tab.linkedBrowser, triggeringURISpec, function(triggeringURISpec) {
    ok(!content.document.nodePrincipal.isSystemPrincipal,
       "about:cache-entry should also not have system principal");
    let principalURI = content.document.nodePrincipal.URI;
    is(principalURI && principalURI.spec, content.document.location.href, "Principal matches location");
    let channel = content.document.docShell.currentDocumentChannel;
    principalURI = channel.loadInfo.triggeringPrincipal.URI;
    is(principalURI && principalURI.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.");
  });
  yield BrowserTestUtils.removeTab(tab);
});