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>