bug662200_window.xhtml (4651B)
1 <?xml version="1.0"?> 2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?> 3 4 <window id="303267Test" 5 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 6 width="600" 7 height="600" 8 onload="setTimeout(runTest, 0);" 9 title="bug 662200 test"> 10 11 <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js" /> 12 <script type="application/javascript" src="docshell_helpers.js" /> 13 <script type="application/javascript"><![CDATA[ 14 Services.prefs.setBoolPref("browser.navigation.requireUserInteraction", false); 15 16 //// 17 // Bug 662200 18 // 19 async function runTest() 20 { 21 // Load the first test page 22 var navData = { 23 uri: getHttpUrl("662200a.html"), 24 eventsToListenFor: ["pageshow"], 25 expectedEvents: [ {type: "pageshow", title: "A"} ], 26 }; 27 await promisePageNavigation(navData); 28 29 // Load the second test page. 30 navData = { 31 eventsToListenFor: ["pageshow", "pagehide"], 32 expectedEvents: [ {type: "pagehide", 33 title: "A"}, 34 {type: "pageshow", 35 title: "B"} ], 36 } 37 let clicked = promisePageEvents(navData); 38 SpecialPowers.spawn(TestWindow.getBrowser(), [], () => { 39 var link = content.document.getElementById("link"); 40 var event = content.document.createEvent("MouseEvents"); 41 event.initMouseEvent("click", true, true, content, 42 0, 0, 0, 0, 0, false, false, false, false, 0, null); 43 link.dispatchEvent(event); 44 }); 45 await clicked; 46 47 // Load the third test page. 48 navData = { 49 eventsToListenFor: ["pageshow", "pagehide"], 50 expectedEvents: [ {type: "pagehide", 51 title: "B"}, 52 {type: "pageshow", 53 title: "C"} ], 54 }; 55 clicked = promisePageEvents(navData); 56 SpecialPowers.spawn(TestWindow.getBrowser(), [], () => { 57 var link = content.document.getElementById("link"); 58 var event = content.document.createEvent("MouseEvents"); 59 event.initMouseEvent("click", true, true, content, 60 0, 0, 0, 0, 0, false, false, false, false, 0, null); 61 link.dispatchEvent(event); 62 }); 63 await clicked; 64 65 // Go back. 66 navData = { 67 back: true, 68 eventsToListenFor: ["pageshow", "pagehide"], 69 expectedEvents: [ {type: "pagehide", 70 title: "C"}, 71 {type: "pageshow", 72 title: "B"} ], 73 }; 74 await promisePageNavigation(navData); 75 76 // Reload. 77 navData = { 78 eventsToListenFor: ["pageshow", "pagehide"], 79 expectedEvents: [ {type: "pagehide", 80 title: "B"}, 81 {type: "pageshow", 82 title: "B"} ], 83 }; 84 // Asking the docshell harness to reload for us will call reload on 85 // nsDocShell which has different behavior than the reload on nsSHistory 86 // so we call reloadCurrentEntry() (which is equivalent to reload(0) and 87 // visible from JS) explicitly here. 88 let reloaded = promisePageEvents(navData); 89 if (SpecialPowers.Services.appinfo.sessionHistoryInParent) { 90 TestWindow.getBrowser().browsingContext.sessionHistory.reloadCurrentEntry(); 91 } else { 92 SpecialPowers.spawn(TestWindow.getBrowser(), [], () => { 93 docShell.QueryInterface(Ci.nsIWebNavigation).sessionHistory.legacySHistory.reloadCurrentEntry(); 94 }); 95 } 96 await reloaded; 97 98 // After this sequence of events, we should be able to go back and forward 99 is(TestWindow.getBrowser().canGoBack, true, "Should be able to go back!"); 100 is(TestWindow.getBrowser().canGoForward, true, "Should be able to go forward!"); 101 let requestedIndex; 102 if (SpecialPowers.Services.appinfo.sessionHistoryInParent) { 103 requestedIndex = TestWindow.getBrowser().browsingContext.sessionHistory.requestedIndex; 104 } else { 105 requestedIndex = await SpecialPowers.spawn(TestWindow.getBrowser(), [], () => { 106 return docShell.sessionHistory.legacySHistory.requestedIndex; 107 }) 108 } 109 is(requestedIndex, -1, "Requested index should be cleared!"); 110 111 Services.prefs.clearUserPref("browser.navigation.requireUserInteraction"); 112 // Tell the framework the test is finished. 113 finish(); 114 } 115 116 ]]></script> 117 118 <browser type="content" primary="true" flex="1" id="content" remote="true" /> 119 </window>