| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/utils.js"></script> |
| <script src="/common/utils.js"></script> |
| <title>history-length-outer-page-navigation-not-reflected-in-fenced</title> |
| |
| <body> |
| <script> |
| const fenced_history_length_key = token(); |
| const outer_page_ready_for_next_navigation_key = token(); |
| |
| async function runTest(embed_scope_reporting) { |
| const kAssertionDesc = "history.length Should never reflect the length " + |
| "of joint session history that occured outside " + |
| "of the fenced frame tree. history.length will " + |
| "always return 1." |
| |
| ////////////// BEGIN NAVIGATIONS |
| // This block performs a sequence of 'kNavigationLimit' navigations in: |
| // -- the outer page |
| const kNavigationLimit = 5 |
| |
| const url = new URL(location.href); |
| |
| // First, perform some real navigations as well as history.pushState to this |
| // same page. Normally this would increase `history.length`. |
| if (url.searchParams.get("navigationCount") == null) |
| url.searchParams.append("navigationCount", 1); |
| |
| let navigationCount = parseInt(url.searchParams.get("navigationCount")); |
| |
| if (navigationCount <= kNavigationLimit) { |
| url.searchParams.set('navigationCount', ++navigationCount); |
| location.href = url; |
| history.pushState({} , ""); |
| return; |
| } |
| ////////////// END |
| |
| // Append an iframe to the outer page for subsequent navigations within |
| // the iframe |
| const iframe = document.createElement('iframe'); |
| const embed_scope_iframe = "outer_page::iframe"; |
| iframe.src = generateURL("resources/history-length-outer-page-navigation-" + |
| "not-reflected-in-fenced-inner.html", |
| [fenced_history_length_key, outer_page_ready_for_next_navigation_key, |
| embed_scope_iframe, null]); |
| document.body.append(iframe); |
| |
| await nextValueFromServer(outer_page_ready_for_next_navigation_key); |
| |
| // Append a fenced frame to observe 'history.length' and report it back |
| // to the outer page |
| const embed_scope_fenced_frame = "outer_page::fenced_frame"; |
| attachFencedFrame(generateURL( |
| "resources/history-length-outer-page-navigation-" + |
| "not-reflected-in-fenced-inner.html", |
| [fenced_history_length_key, outer_page_ready_for_next_navigation_key, |
| embed_scope_fenced_frame, embed_scope_reporting]) |
| ); |
| |
| // Wait for the 'embed_scope_reporting' to report 'history.length' |
| let result = await nextValueFromServer(fenced_history_length_key); |
| assert_equals(result, "PASS > " + " history.length: 1", kAssertionDesc); |
| } |
| |
| promise_test(async () => { |
| await runTest("outer_page::fenced_frame"); |
| }, "history.length should not reflect navigations within outer page in " + |
| "fenced frame"); |
| |
| promise_test(async () => { |
| await runTest("outer_page::fenced_frame::iframe"); |
| }, "history.length should not reflect navigations within outer page in " + |
| "fenced frame nexted iframe"); |
| </script> |
| </body> |