test_bug1747033.html (3119B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Test history after loading multipart</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 async function runTest() { 12 let bc = SpecialPowers.wrap(BroadcastChannel).unpartitionedTestingChannel("bug1747033"); 13 new Promise(resolve => { 14 bc.addEventListener("message", ({ data: { historyLength } }) => { 15 is(historyLength, 1, "Correct length for first normal load."); 16 17 resolve(); 18 }, { once: true }); 19 20 window.open("file_bug1747033.sjs", "", "noopener"); 21 }).then(() => { 22 return new Promise(resolve => { 23 let loaded = 0; 24 bc.addEventListener("message", function listener({ data: { historyLength } }) { 25 ++loaded; 26 27 is(historyLength, 2, `Correct length for multipart load ${loaded}.`); 28 29 // We want 3 parts in total. 30 if (loaded < 3) { 31 if (loaded == 2) { 32 // We've had 2 parts, make the server send the last part. 33 fetch("file_bug1747033.sjs?sendLastPart"); 34 } else { 35 fetch("file_bug1747033.sjs?sendNextPart"); 36 } 37 return; 38 } 39 40 bc.removeEventListener("message", listener); 41 resolve(); 42 }); 43 44 bc.postMessage({ cmd: "load", arg: "file_bug1747033.sjs?multipart" }); 45 }); 46 }).then(() => { 47 return new Promise(resolve => { 48 bc.addEventListener("message", ({ data: { historyLength } }) => { 49 is(historyLength, 2, "Correct length after calling replaceState in multipart."); 50 51 resolve(); 52 }, { once: true }); 53 54 bc.postMessage({ cmd: "replaceState", arg: "file_bug1747033.sjs?replaced" }); 55 }); 56 }).then(() => { 57 return new Promise(resolve => { 58 bc.addEventListener("message", ({ data: { historyLength } }) => { 59 is(historyLength, 3, "Correct length for first normal load after multipart."); 60 61 resolve(); 62 }, { once: true }); 63 64 bc.postMessage({ cmd: "load", arg: "file_bug1747033.sjs" }); 65 }); 66 }).then(() => { 67 return new Promise(resolve => { 68 let goneBack = 0; 69 bc.addEventListener("message", function listener({ data: { historyLength } }) { 70 ++goneBack; 71 72 is(historyLength, 3, "Correct length after going back."); 73 74 if (goneBack == 1) { 75 bc.postMessage({ cmd: "back" }); 76 } else if (goneBack == 2) { 77 bc.removeEventListener("message", listener); 78 resolve(); 79 } 80 }); 81 82 bc.postMessage({ cmd: "back" }); 83 }); 84 }).then(() => { 85 bc.postMessage({ cmd: "close" }); 86 87 SimpleTest.finish(); 88 }); 89 } 90 </script> 91 </head> 92 <body onload="runTest();"> 93 <p id="display"></p> 94 <div id="content" style="display: none"></div> 95 <pre id="test"></pre> 96 </body> 97 </html>