| <!-- |
| Test same-document navigation inside an srcdoc iframe using location.hash |
| --> |
| <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> |
| async function test() { |
| // Wait until 'document' is available. |
| await new Promise(resolve => window.addEventListener('load', resolve)); |
| |
| // Create an iframe, wait until is is loaded. |
| let iframe = document.createElement('iframe'); |
| await new Promise(resolve => { |
| iframe.srcdoc = "srcdoc document"; |
| iframe.onload = resolve; |
| document.body.appendChild(iframe); |
| }); |
| |
| assert_equals(iframe.contentDocument.body.innerText, "srcdoc document"); |
| assert_equals(iframe.contentWindow.location.href, "about:srcdoc"); |
| |
| function iframeHashChanged() { |
| return new Promise(resolve => { |
| iframe.contentWindow.onhashchange = resolve; |
| }) |
| } |
| |
| // 1) hash = "1". |
| { |
| let hash_changed = iframeHashChanged(); |
| await test_driver.bless("hash = '1'", () => { |
| iframe.contentWindow.location.hash = "1"; |
| }); |
| await hash_changed; |
| assert_equals(iframe.contentWindow.location.href, "about:srcdoc#1"); |
| } |
| |
| // 2) hash = "2". |
| { |
| let hash_changed = iframeHashChanged(); |
| await test_driver.bless("hash = '2'", () => { |
| iframe.contentWindow.location.hash = "2"; |
| }); |
| await hash_changed; |
| assert_equals(iframe.contentWindow.location.href, "about:srcdoc#2"); |
| } |
| |
| // 3) history.back(). |
| { |
| let hash_changed = iframeHashChanged(); |
| await test_driver.bless("history.back()", () => { |
| history.back(); |
| }); |
| await hash_changed; |
| assert_equals(iframe.contentWindow.location.href, "about:srcdoc#1"); |
| } |
| |
| // 4) history.forward(). |
| { |
| let hash_changed = iframeHashChanged(); |
| await test_driver.bless("history.forward()", () => { |
| history.forward(); |
| }); |
| await hash_changed; |
| assert_equals(iframe.contentWindow.location.href, "about:srcdoc#2"); |
| } |
| |
| done(); |
| } |
| test(); |
| </script> |