| <!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> |