tor-browser

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

MozDomFullscreen_chrome.xhtml (4306B)


      1 <?xml version="1.0"?>
      2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
      3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
      4 <!--
      5  Test that "MozDOMFullscreen:*" events are dispatched to chrome on documents that use DOM fullscreen.
      6 
      7  Test Description:
      8  
      9  This chrome window has a browser. The browser's contentDocument (the "outer document")
     10  in turn has an iframe (the "inner document").
     11  
     12  We request fullscreen in the outer document, and check that MozDOMFullscreen:Entered and
     13  MozDOMFullscreen:NewOrigin are dispatched to chrome, targeted at the outer document.
     14  
     15  Then we request fullscreen in the inner document, and check that MozDOMFullscreen:NewOrigin
     16  is dispatched to chrome, targeted at the inner document.
     17  
     18  Then we cancel fullscreen in the inner document, and check that MozDOMFullscreen:NewOrigin is
     19  dispatched again to chrome, targeted at the outer document.
     20 -->
     21 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="start();">
     22 
     23 <script src="chrome://mochikit/content/chrome-harness.js"></script>
     24 <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
     25 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>      
     26 <script type="application/javascript"><![CDATA[
     27 
     28 function ok(condition, msg) {
     29  window.arguments[0].ok(condition, msg);
     30 }
     31 
     32 function is(a, b, msg) {
     33  window.arguments[0].is(a, b, msg);
     34 }
     35 
     36 var gBrowser = null;
     37 var gOuterDoc = null;
     38 var gInnerDoc = null;
     39 
     40 var gReceivedFullscreenEnteredEvent = false;
     41 function firstEntry(event) {
     42  if (event.type == "MozDOMFullscreen:NewOrigin") {
     43    ok(false, "MozDOMFullscreen:NewOrigin shouldn't be triggered at first entry");
     44    return;
     45  }
     46 
     47  if (event.type != "MozDOMFullscreen:Entered") {
     48    ok(false, "Unknown event received");
     49    return;
     50  }
     51 
     52  ok(gOuterDoc.fullscreenElement != null, "Outer doc should be in fullscreen");
     53  is(event.target, gOuterDoc.body, "First MozDOMFullscreen:Entered should be targeted at outer body");
     54  ok(!gReceivedFullscreenEnteredEvent, "MozDOMFullscreen:Entered shouldn't have been triggered twice");
     55  gReceivedFullscreenEnteredEvent = true;
     56  window.removeEventListener("MozDOMFullscreen:Entered", firstEntry);
     57  window.removeEventListener("MozDOMFullscreen:NewOrigin", firstEntry);
     58 
     59  window.addEventListener("MozDOMFullscreen:NewOrigin", secondEntry);
     60  gInnerDoc = gOuterDoc.getElementById("innerFrame").contentDocument;
     61  gInnerDoc.defaultView.focus();
     62  gInnerDoc.body.requestFullscreen();
     63 }
     64 
     65 function secondEntry(event) {
     66  is(event.target, gInnerDoc, "Second MozDOMFullscreen:NewOrigin should be targeted at inner doc");
     67  ok(gInnerDoc.fullscreenElement != null, "Inner doc should be in fullscreen");
     68  window.removeEventListener("MozDOMFullscreen:NewOrigin", secondEntry);
     69  window.addEventListener("MozDOMFullscreen:NewOrigin", thirdEntry);
     70  gInnerDoc.exitFullscreen();
     71 }
     72 
     73 function thirdEntry(event) {
     74  is(event.target, gOuterDoc, "Third MozDOMFullscreen:NewOrigin should be targeted at outer doc");
     75  ok(gOuterDoc.fullscreenElement != null, "Outer doc return to fullscreen after cancel fullscreen in inner doc");
     76  window.removeEventListener("MozDOMFullscreen:NewOrigin", thirdEntry);
     77  window.removeEventListener("MozDOMFullscreen:Exited", earlyExit);
     78  window.addEventListener("MozDOMFullscreen:Exited", lastExit);
     79  gOuterDoc.exitFullscreen();
     80 }
     81 
     82 function earlyExit() {
     83  ok(false, "MozDOMFullscreen:Exited should only be triggered after cancel all fullscreen");
     84 }
     85 
     86 function lastExit(event) {
     87  is(event.target, gOuterDoc, "MozDOMFullscreen:Exited should be targeted at the last exited doc");
     88  ok(gOuterDoc.fullscreenElement == null, "Fullscreen should have been fully exited");
     89  window.arguments[0].done();
     90 }
     91 
     92 function start() {
     93  SimpleTest.waitForFocus(
     94    function() {
     95      gBrowser = document.getElementById("browser");
     96      gOuterDoc = gBrowser.contentDocument;
     97      gBrowser.contentWindow.focus();
     98      window.addEventListener("MozDOMFullscreen:Entered", firstEntry);
     99      window.addEventListener("MozDOMFullscreen:NewOrigin", firstEntry);
    100      gOuterDoc.body.requestFullscreen();
    101    });
    102 }
    103 
    104 ]]>
    105 </script>
    106 <browser type="content" id="browser" width="400" height="400" src="file_MozDomFullscreen.html"/>
    107 
    108 </window>