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>