tor-browser

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

test_resource_cache.html (3438B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test for SharedSubResourceCache with redirect</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
      7 </head>
      8 <body>
      9 <iframe id="frame" src="about:blank"></iframe>
     10 
     11 <script>
     12 const us = window.location.href;
     13 const baseURL = us.substring(0, us.lastIndexOf('/') + 1);
     14 const serverFilename = "file_resource_cache_server.sjs";
     15 const frame = document.getElementById("frame");
     16 
     17 SimpleTest.waitForExplicitFinish();
     18 
     19 async function testReload({ src, clearCache, cacheable, desc }) {
     20  // The iframe loads CSS with "file_resource_cache_server.sjs?redirect" URL.
     21  // With the first access, it redirects to "file_resource_cache_server.sjs?red"
     22  // that makes the body color "red".
     23  //
     24  // The redirect response has "Cache-Control: no-cache", and the request
     25  // shouldn't be cached.
     26  await new Promise(r => {
     27    frame.addEventListener("load", r, { once: true });
     28    frame.src = src;
     29  });
     30 
     31  is(frame.contentWindow.getComputedStyle(frame.contentDocument.body).color,
     32     "rgb(255, 0, 0)",
     33     `body color before reload with ${desc} should be red`);
     34 
     35  if (clearCache) {
     36    SpecialPowers.ChromeUtils.clearResourceCache({
     37      types: ["stylesheet", "script"],
     38    });
     39  }
     40 
     41  // Reload the iframe and wait for reload.
     42  //
     43  // With the second access, "file_resource_cache_server.sjs?redirect" redirects
     44  // to "file_resource_cache_server.sjs?blue" that makes the body color "blue".
     45  await new Promise(r => {
     46    frame.addEventListener("load", r, { once: true });
     47    frame.contentWindow.location.reload();
     48  });
     49 
     50  if (cacheable) {
     51    is(frame.contentWindow.getComputedStyle(frame.contentDocument.body).color,
     52       "rgb(255, 0, 0)",
     53       `body color after reload with ${desc} should be red`);
     54  } else {
     55    is(frame.contentWindow.getComputedStyle(frame.contentDocument.body).color,
     56       "rgb(0, 0, 255)",
     57       `body color after reload with ${desc} should be blue`);
     58  }
     59 }
     60 
     61 async function reset() {
     62  // Reset the server-side script state.
     63  const resetResponse = await fetch(baseURL + serverFilename + "?reset");
     64  is(await resetResponse.text(), "reset", "server side is reset");
     65 
     66  // Reset the iframe.
     67  await new Promise(r => {
     68    frame.addEventListener("load", r, { once: true });
     69    frame.src = "about:blank";
     70  });
     71 
     72  // Clear cache.
     73  SpecialPowers.ChromeUtils.clearResourceCache({
     74    types: ["stylesheet", "script"],
     75  });
     76 }
     77 
     78 async function doTest() {
     79  await new Promise(r => window.addEventListener("load", r, { once: true }));
     80 
     81  await testReload({
     82    src: "file_resource_cache_frame_not_cacheable.html",
     83    clearCache: true,
     84    cacheable: false,
     85    desc: "clearing SharedSubResourceCache for not-cacheable",
     86  });
     87 
     88  await reset();
     89 
     90  await testReload({
     91    src: "file_resource_cache_frame_not_cacheable.html",
     92    clearCache: false,
     93    cacheable: false,
     94    desc: "not clearing SharedSubResourceCache for not-cacheable",
     95  });
     96 
     97  await reset();
     98 
     99  await testReload({
    100    src: "file_resource_cache_frame_cacheable.html",
    101    clearCache: true,
    102    cacheable: true,
    103    desc: "clearing SharedSubResourceCache for cacheable",
    104  });
    105 
    106  await reset();
    107 
    108  await testReload({
    109    src: "file_resource_cache_frame_cacheable.html",
    110    clearCache: false,
    111    cacheable: true,
    112    desc: "not clearing SharedSubResourceCache for cacheable",
    113  });
    114 
    115  SimpleTest.finish();
    116 }
    117 
    118 doTest();
    119 </script>
    120 </body>
    121 </html>