Skip to content

Commit

Permalink
[WPT] BFCache: pushstate
Browse files Browse the repository at this point in the history
Change-Id: I609276fe865fa92409fd7a547777dba222bac36c
  • Loading branch information
hiroshige-g authored and chromium-wpt-export-bot committed Oct 4, 2021
1 parent 904652f commit 06a497c
Showing 1 changed file with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions html/browsers/browsing-the-web/back-forward-cache/pushstate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<!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="resources/helper.sub.js"></script>
<script>
// https://github.com/whatwg/html/issues/6207
for (const shouldBeBFCached of [true, false]) {
promise_test(async t => {
const pageA = new RemoteContext(token());
const pageB = new RemoteContext(token());

const urlA = location.origin + executorPath + pageA.context_id + (shouldBeBFCached ? '' : '&pipe=header(Cache-Control,no-store)');
const urlPushState = urlA + '&pushState=yes';
const urlB = originCrossSite + executorPath + pageB.context_id;

window.open(urlA, '_blank', 'noopener');

await pageA.execute_script(waitForPageShow);
await pageA.execute_script(
(url) => history.pushState('blue', '', url),
[urlPushState]);

await pageA.execute_script(
(url) => prepareNavigation(() => {
location.href = url;
}),
[urlB]);

await pageB.execute_script(waitForPageShow);
await pageB.execute_script(
() => {
prepareNavigation(() => { history.back(); });
}
);

if (shouldBeBFCached) {
await assert_bfcached(pageA);
} else {
await assert_not_bfcached(pageA);
}

assert_equals(await pageA.execute_script(() => location.href), urlPushState, 'url 1');
assert_equals(await pageA.execute_script(() => history.state), 'blue', 'history.state 1');

// history.back() and then wait for onpopstate.
await pageA.execute_script(() => new Promise(resolve => {
window.onpopstate = () => resolve();
history.back();
}));

assert_equals(await pageA.execute_script(() => location.href), urlA, 'url 2');
// Failing on Safari?
assert_equals(await pageA.execute_script(() => history.state), null, 'history.state 2');
}, 'back navigation to pushState()d page (' + (shouldBeBFCached ? '' : 'not ') + 'in BFCache)');
}
</script>

0 comments on commit 06a497c

Please sign in to comment.