tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_refresh_content.js (3709B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 /*
      5 * Ensures resources can still be fetched without validation
      6 */
      7 
      8 const CONTENT_URL =
      9  "http://www.example.com/browser/dom/base/test/file_browser_refresh_content.html";
     10 
     11 async function run_test_browser_refresh(forceRevalidate) {
     12  let tab = await BrowserTestUtils.openNewForegroundTab({
     13    gBrowser,
     14    url: CONTENT_URL,
     15    waitForLoad: true,
     16    /* Ensures each run is started with a fresh state */
     17    forceNewProcess: true,
     18  });
     19 
     20  let originalAttributes = await SpecialPowers.spawn(
     21    tab.linkedBrowser,
     22    [],
     23    async () => {
     24      let result = content.document.getElementById("result");
     25      await ContentTaskUtils.waitForCondition(() => {
     26        return (
     27          result.getAttribute("imageDataURL") &&
     28          result.getAttribute("iframeContent") &&
     29          result.getAttribute("expiredResourceCacheControl")
     30        );
     31      });
     32      return {
     33        imageDataURL: result.getAttribute("imageDataURL"),
     34        iframeContent: result.getAttribute("iframeContent"),
     35        expiredResourceCacheControl: result.getAttribute(
     36          "expiredResourceCacheControl"
     37        ),
     38      };
     39    }
     40  );
     41 
     42  let imageDataURL = originalAttributes.imageDataURL;
     43  let expiredResourceCacheControl =
     44    originalAttributes.expiredResourceCacheControl;
     45 
     46  is(
     47    originalAttributes.iframeContent,
     48    "first load",
     49    "Iframe is loaded with the initial content"
     50  );
     51 
     52  tab.linkedBrowser.reload();
     53 
     54  await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
     55 
     56  let attributes = await SpecialPowers.spawn(
     57    tab.linkedBrowser,
     58    [],
     59    async () => {
     60      let result = content.document.getElementById("result");
     61 
     62      await ContentTaskUtils.waitForCondition(() => {
     63        return (
     64          result.getAttribute("imageDataURL") &&
     65          result.getAttribute("expiredResourceCacheControl") &&
     66          result.getAttribute("nonCacheableResourceCompleted")
     67        );
     68      });
     69 
     70      return {
     71        iframeContent: result.getAttribute("iframeContent"),
     72        imageDataURL: result.getAttribute("imageDataURL"),
     73        expiredResourceCacheControl: result.getAttribute(
     74          "expiredResourceCacheControl"
     75        ),
     76        nonCacheableResourceCompleted: result.getAttribute(
     77          "nonCacheableResourceCompleted"
     78        ),
     79      };
     80    }
     81  );
     82 
     83  is(
     84    attributes.iframeContent,
     85    "second load",
     86    "Iframe should always be revalidated"
     87  );
     88 
     89  if (!forceRevalidate) {
     90    Assert.strictEqual(
     91      attributes.imageDataURL,
     92      imageDataURL,
     93      "Image should use cache"
     94    );
     95  } else {
     96    Assert.notStrictEqual(
     97      attributes.imageDataURL,
     98      imageDataURL,
     99      "Image should be revalidated"
    100    );
    101  }
    102 
    103  if (!forceRevalidate) {
    104    Assert.strictEqual(
    105      attributes.expiredResourceCacheControl,
    106      expiredResourceCacheControl,
    107      "max-age shouldn't be changed after reload because it didn't revalidate"
    108    );
    109  } else {
    110    Assert.notStrictEqual(
    111      attributes.expiredResourceCacheControl,
    112      expiredResourceCacheControl,
    113      "max-age should be changed after reload because it got revalidated"
    114    );
    115  }
    116 
    117  is(
    118    attributes.nonCacheableResourceCompleted,
    119    "true",
    120    "Non cacheable resource should still be loaded"
    121  );
    122 
    123  await BrowserTestUtils.removeTab(tab);
    124 }
    125 
    126 add_task(async function test_browser_refresh() {
    127  Services.prefs.setBoolPref(
    128    "browser.soft_reload.only_force_validate_top_level_document",
    129    true
    130  );
    131  await run_test_browser_refresh(false);
    132  Services.prefs.setBoolPref(
    133    "browser.soft_reload.only_force_validate_top_level_document",
    134    false
    135  );
    136  await run_test_browser_refresh(true);
    137 });