| <!DOCTYPE html> | |
| <title>Speculation-Rules header must only be fetched for top-level windows</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/common/utils.js"></script> | |
| <script src="/common/dispatcher/dispatcher.js"></script> | |
| <script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> | |
| <script> | |
| promise_test(async t => { | |
| const uuid = token(); | |
| const rulesURL = (new URL(`resources/counter.py?uuid=${uuid}`, document.baseURI)).href; | |
| const rcHelper = new RemoteContextHelper(); | |
| const rc = await rcHelper.addWindow({ | |
| headers: [["Speculation-Rules", `"${rulesURL}"`]] | |
| }); | |
| await t.step_wait(async () => { | |
| const requestCount1 = await (await fetch(rulesURL + "&check")).json(); | |
| return requestCount1 === 1; | |
| }, "wait for request count to be updated for top-level window"); | |
| const iframe = rc.addIframe({ | |
| headers: [["Speculation-Rules", `"${rulesURL}"`]] | |
| }); | |
| // Just wait 2 seconds and hope that any erroneous request shows up by then. | |
| await new Promise(resolve => t.step_timeout(resolve, 2000)); | |
| const requestCount2 = await (await fetch(rulesURL + "&check")).json(); | |
| assert_equals(requestCount2, 1, "rules must not be fetched for iframes"); | |
| }); | |
| </script> |