Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /html/browsers/browsing-the-web/back-forward-cache/broadcastchannel/evict-on-message.tentative.window.html - WPT Dashboard Interop Dashboard
// META: title=BroadcastChannel message while in bfcache should evict the entry.
// META: script=/common/dispatcher/dispatcher.js
// META: script=/common/get-host-info.sub.js
// META: script=/common/utils.js
// META: script=/html/browsers/browsing-the-web/back-forward-cache/resources/rc-helper.js
// META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js
// META: script=/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js
'use strict';
promise_test(async t => {
const rcHelper = new RemoteContextHelper();
// Open a window with noopener so that BFCache will work.
const rc1 = await rcHelper.addWindow(
/*extraConfig=*/ {}, /*options=*/ {features: 'noopener'});
await rc1.executeScript(() => {
const channel = new BroadcastChannel('foo');
channel.addEventListener('message', event => {
channel.postMessage('Message received: ' + event.data);
});
});
await prepareForBFCache(rc1);
const newRemoteContextHelper = await rc1.navigateToNew();
await assertSimplestScriptRuns(newRemoteContextHelper);
// Post a message to a channel in bfcache. This should trigger eviction.
const channel = new BroadcastChannel('foo'); // Access shared channel
channel.postMessage('Sending a message should evict a bfcache entry.');
await newRemoteContextHelper.historyBack();
// It's possible that the pages with open broadcastchannel are not allowed
// into bfcache. Set preconditionFailReasons to catch that case. Otherwise
// expect the eviction reason.
await assertNotRestoredFromBFCache(
rc1, ['broadcastchannel-message'],
/*preconditonFailReasons=*/['broadcastchannel']);
});