| <!DOCTYPE html> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/common/dispatcher/dispatcher.js"></script> | |
| <script src="/common/utils.js"></script> | |
| <script src="../resources/utils.js"></script> | |
| <script src="resources/utils.sub.js"></script> | |
| <script> | |
| setup(() => assertSpeculationRulesIsSupported()); | |
| promise_test(async t => { | |
| const testUrl = document.URL; | |
| const [prefetchUrl, anotherPrefetchUrl] = getPrefetchUrlList(2); | |
| try { | |
| history.pushState({}, '', prefetchUrl); | |
| const urls = [ | |
| new URL('#fragment', prefetchUrl), | |
| new URL('#fragment', anotherPrefetchUrl), | |
| ]; | |
| insertSpeculationRules({prefetch: [{source: 'list', urls}]}); | |
| await new Promise(resolve => t.step_timeout(resolve, 2000)); | |
| assert_equals(await isUrlPrefetched(prefetchUrl), 0); | |
| assert_equals(await isUrlPrefetched(anotherPrefetchUrl), 1); | |
| } finally { | |
| // We needed to temporarily change the document URL to do the previous | |
| // test. Undo that to avoid breaking any other test cases. | |
| history.back(); | |
| await new Promise(resolve => { | |
| addEventListener('popstate', () => resolve(), {once: true}); | |
| }); | |
| await new Promise(resolve => t.step_timeout(resolve, 0)); | |
| assert_equals(document.URL, testUrl); | |
| } | |
| }, "fragment links to the current document URL are not prefetched"); | |
| </script> |