| <!DOCTYPE html> | |
| <title>Test prerendering</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/resources/testdriver.js"></script> | |
| <script src="/resources/testdriver-vendor.js"></script> | |
| <script src="resources/utils.js"></script> | |
| <script src="/common/utils.js"></script> | |
| <body> | |
| <script> | |
| promise_test(async t => { | |
| assert_implements( | |
| 'supports' in HTMLScriptElement, | |
| 'HTMLScriptElement.supports is not supported'); | |
| assert_implements( | |
| HTMLScriptElement.supports('speculationrules'), | |
| '<script type="speculationrules"> is not supported'); | |
| const prerender_ready_key = token(); | |
| const prerender_loaded_key = token(); | |
| const prerender_activated_key = token(); | |
| const url = generateURL('resources/prerender-inner.html', | |
| [prerender_ready_key, prerender_loaded_key, prerender_activated_key]); | |
| // TODO: This test expects that the browser always triggers prerendering when | |
| // SpeculationRules is provided. But SpeculationRules allows browsers not to | |
| // trigger the speculative resource loading even if SpeculationRules is | |
| // specified. So we have to use a new WebDriver API that deterministically | |
| // triggers prerendering. | |
| // https://github.com/WICG/nav-speculation/blob/main/speculation-rules-testing.md | |
| const script = document.createElement('script'); | |
| script.type = 'speculationrules'; | |
| script.text = `{"prerender": [{"source": "list", "urls": ["${url}"] }] }`; | |
| document.head.appendChild(script); | |
| const ready_result = await nextValueFromServer(prerender_ready_key); | |
| assert_equals(ready_result, 'ready'); | |
| attachFencedFrame(url); | |
| const loaded_or_acrivated_result = await Promise.race([ | |
| nextValueFromServer(prerender_loaded_key), | |
| nextValueFromServer(prerender_activated_key) | |
| ]); | |
| assert_equals(loaded_or_acrivated_result, 'loaded'); | |
| }, 'Fenced Frame must not load prerendered page.'); | |
| </script> | |
| </body> |