summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fenced-frame/prerender.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/fenced-frame/prerender.https.html')
-rw-r--r--testing/web-platform/tests/fenced-frame/prerender.https.html51
1 files changed, 51 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fenced-frame/prerender.https.html b/testing/web-platform/tests/fenced-frame/prerender.https.html
new file mode 100644
index 0000000000..45a39989d2
--- /dev/null
+++ b/testing/web-platform/tests/fenced-frame/prerender.https.html
@@ -0,0 +1,51 @@
+<!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>