tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>