tor-browser

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

prerender.https.html (1953B)


      1 <!DOCTYPE html>
      2 <title>Test prerendering</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="/resources/testdriver.js"></script>
      6 <script src="/resources/testdriver-vendor.js"></script>
      7 <script src="resources/utils.js"></script>
      8 <script src="/common/utils.js"></script>
      9 
     10 <body>
     11 
     12 <script>
     13 promise_test(async t => {
     14  assert_implements(
     15      'supports' in HTMLScriptElement,
     16      'HTMLScriptElement.supports is not supported');
     17  assert_implements(
     18      HTMLScriptElement.supports('speculationrules'),
     19      '<script type="speculationrules"> is not supported');
     20 
     21  const prerender_ready_key = token();
     22  const prerender_loaded_key = token();
     23  const prerender_activated_key = token();
     24  const url = generateURL('resources/prerender-inner.html',
     25      [prerender_ready_key, prerender_loaded_key, prerender_activated_key]);
     26 
     27  // TODO: This test expects that the browser always triggers prerendering when
     28  // SpeculationRules is provided. But SpeculationRules allows browsers not to
     29  // trigger the speculative resource loading even if SpeculationRules is
     30  // specified. So we have to use a new WebDriver API that deterministically
     31  // triggers prerendering.
     32  // https://github.com/WICG/nav-speculation/blob/main/speculation-rules-testing.md
     33  const script = document.createElement('script');
     34  script.type = 'speculationrules';
     35  script.text = `{"prerender": [{"source": "list", "urls": ["${url}"] }] }`;
     36  document.head.appendChild(script);
     37 
     38  const ready_result = await nextValueFromServer(prerender_ready_key);
     39  assert_equals(ready_result, 'ready');
     40 
     41  attachFencedFrame(url);
     42 
     43  const loaded_or_acrivated_result = await Promise.race([
     44      nextValueFromServer(prerender_loaded_key),
     45      nextValueFromServer(prerender_activated_key)
     46    ]);
     47  assert_equals(loaded_or_acrivated_result, 'loaded');
     48 }, 'Fenced Frame must not load prerendered page.');
     49 </script>
     50 
     51 </body>