test_new_shentry_during_history_navigation.html (2980B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Test adding new session history entries while navigating to another one</title> 6 <script src="/tests/SimpleTest/SimpleTest.js"></script> 7 <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> 8 <script> 9 SimpleTest.waitForExplicitFinish(); 10 11 var win; 12 13 function waitForMessage(msg) { 14 return new Promise( 15 function(resolve) { 16 window.addEventListener("message", 17 function(event) { 18 is(event.data, msg, "Got the expected message " + msg); 19 resolve(); 20 }, { once: true } 21 ); 22 } 23 ); 24 } 25 26 async function test() { 27 28 let loadPromise = waitForMessage("load"); 29 win = window.open("file_new_shentry_during_history_navigation_1.html"); 30 await loadPromise; 31 32 loadPromise = waitForMessage("load"); 33 win.location.href = "file_new_shentry_during_history_navigation_2.html"; 34 await loadPromise; 35 36 let beforeunloadPromise = waitForMessage("beforeunload"); 37 win.history.back(); 38 await beforeunloadPromise; 39 await waitForMessage("load"); 40 41 win.history.back(); 42 SimpleTest.requestFlakyTimeout("Test that history.back() does not work on the initial entry."); 43 setTimeout(function() { 44 win.onmessage = null; 45 win.close(); 46 testBfcache(); 47 }, 500); 48 window.onmessage = function(event) { 49 ok(false, "Should not get a message " + event.data); 50 } 51 } 52 53 async function testBfcache() { 54 let bc = SpecialPowers.wrap(BroadcastChannel).unpartitionedTestingChannel("new_shentry_during_history_navigation"); 55 let pageshowCount = 0; 56 bc.onmessage = function(event) { 57 if (event.data.type == "pageshow") { 58 ++pageshowCount; 59 info("pageshow: " + pageshowCount + ", page: " + event.data.page); 60 if (pageshowCount == 1) { 61 ok(!event.data.persisted, "The page should not be bfcached."); 62 bc.postMessage("loadnext"); 63 } else if (pageshowCount == 2) { 64 ok(!event.data.persisted, "The page should not be bfcached."); 65 bc.postMessage("loadnext"); 66 } else if (pageshowCount == 3) { 67 ok(!event.data.persisted, "The page should not be bfcached."); 68 bc.postMessage("back"); 69 } else if (pageshowCount == 4) { 70 ok(event.data.persisted, "The page should be bfcached."); 71 bc.postMessage("forward"); 72 } else if (pageshowCount == 5) { 73 ok(event.data.page.includes("v2"), "Should have gone forward."); 74 bc.postMessage("close"); 75 SimpleTest.finish(); 76 } 77 } 78 }; 79 win = window.open("file_new_shentry_during_history_navigation_3.html", "", "noopener"); 80 81 } 82 83 </script> 84 </head> 85 <body onload="test()"> 86 <p id="display"></p> 87 <div id="content" style="display: none"></div> 88 <pre id="test"></pre> 89 </body> 90 </html>