<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Evict a page from bfcache</title> <script src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> <script> /* * This test checks that a page can be evicted from bfcache. Sending a * message to an open BroadcastChannel is used for this. * * First the test opens a window and loads a page there. Another page is then * loaded and then session history is navigated back to check if bfcache is * enabled. If not, close message is sent to close the opened window and this * controller page will finish the test. * If bfcache is enabled, session history goes forward, but the * BroadcastChannel in the page isn't closed. Then sending the message to go * back again should evict the bfcached page. * Close message is sent and window closed and test finishes. */ SimpleTest.waitForExplicitFinish(); var bc = new BroadcastChannel("evict_from_bfcache"); var pageshowCount = 0; bc.onmessage = function(event) { if (event.data.type == "pageshow") { ++pageshowCount; info("pageshow " + pageshowCount); if (pageshowCount == 1) { bc.postMessage("nextpage"); } else if (pageshowCount == 2) { bc.postMessage("back"); } else if (pageshowCount == 3) { if (!event.data.persisted) { ok(true, "BFCache isn't enabled."); bc.postMessage("close"); } else { bc.postMessage("forward"); } } else if (pageshowCount == 4) { bc.postMessage("back"); } else if (pageshowCount == 5) { ok(!event.data.persisted, "The page should have been evicted from BFCache"); bc.postMessage("close"); } } else if (event.data == "closed") { SimpleTest.finish(); } } function runTest() { window.open("file_evict_from_bfcache.html", "", "noopener"); } </script> </head> <body onload="runTest()"> <p id="display"></p> <div id="content" style="display: none"></div> <pre id="test"></pre> </body> </html>