| <!DOCTYPE html> | |
| <meta name="timeout" content="long"> | |
| <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 src="../resources/utils.js"></script> | |
| <script src="resources/utils.js"></script> | |
| <body> | |
| <script> | |
| setup(() => assertSpeculationRulesIsSupported()); | |
| // We attempted to write this test using `RemoteContextHelper`. See | |
| // https://github.com/web-platform-tests/wpt/blob/23ed0c7015082f21dd29dd09a545e2979dc3e08c/speculation-rules/prerender/prerender-while-prerender.html. | |
| // | |
| // However, that ended up being flaky in Chromium. See | |
| // https://bugs.chromium.org/p/chromium/issues/detail?id=1517319. | |
| // | |
| // We're unsure yet if that flakiness was due to a test bug or an implementation | |
| // bug. In case it is due to a test bug, we are currently trying the following | |
| // uglier `PrerenderChannel` version. If it is still flaky, then probably it is | |
| // an implementation bug, and we can revert to the prettier | |
| // `RemoteContextHelper` version. | |
| promise_test(async t => { | |
| const uid = token(); | |
| const channel = new PrerenderChannel("result", uid); | |
| const result = new Promise(r => channel.addEventListener("message", e => r(e.data))); | |
| window.open( | |
| `resources/prerender-while-prerender-initiator.html?uid=${uid}`, | |
| "_blank", | |
| "noopener" | |
| ); | |
| assert_equals( | |
| await result, | |
| false, | |
| "document.prerendering in the inner page must be false" | |
| ); | |
| channel.close(); | |
| }, "Prerendering inside a prerender doesn't work, and navigating inside prerenderingchange is fine"); | |
| </script> |