summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/chrome/MozDomFullscreen_chrome.xul
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/mochitest/chrome/MozDomFullscreen_chrome.xul')
-rw-r--r--dom/tests/mochitest/chrome/MozDomFullscreen_chrome.xul110
1 files changed, 110 insertions, 0 deletions
diff --git a/dom/tests/mochitest/chrome/MozDomFullscreen_chrome.xul b/dom/tests/mochitest/chrome/MozDomFullscreen_chrome.xul
new file mode 100644
index 000000000..7c36696b9
--- /dev/null
+++ b/dom/tests/mochitest/chrome/MozDomFullscreen_chrome.xul
@@ -0,0 +1,110 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
+<!--
+ Test that "MozDOMFullscreen:*" events are dispatched to chrome on documents that use DOM fullscreen.
+
+ Test Description:
+
+ This chrome window has a browser. The browser's contentDocument (the "outer document")
+ in turn has an iframe (the "inner document").
+
+ We request fullscreen in the outer document, and check that MozDOMFullscreen:Entered and
+ MozDOMFullscreen:NewOrigin are dispatched to chrome, targeted at the outer document.
+
+ Then we request fullscreen in the inner document, and check that MozDOMFullscreen:NewOrigin
+ is dispatched to chrome, targeted at the inner document.
+
+ Then we cancel fullscreen in the inner document, and check that MozDOMFullscreen:NewOrigin is
+ dispatched again to chrome, targeted at the outer document.
+-->
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="start();">
+
+<script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
+<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
+<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+<script type="application/javascript"><![CDATA[
+
+function ok(condition, msg) {
+ window.opener.wrappedJSObject.ok(condition, msg);
+}
+
+function is(a, b, msg) {
+ window.opener.wrappedJSObject.is(a, b, msg);
+}
+
+var gBrowser = null;
+var gOuterDoc = null;
+var gInnerDoc = null;
+
+var gReceivedFullscreenEnteredEvent = false;
+var gReceivedNewOriginEvent = false;
+function firstEntry(event) {
+ if (event.type == "MozDOMFullscreen:Entered") {
+ window.removeEventListener("MozDOMFullscreen:Entered", firstEntry, false);
+ ok(!gReceivedFullscreenEnteredEvent, "MozDOMFullscreen:Entered shouldn't have been triggered twice");
+ is(event.target, gOuterDoc.body, "First MozDOMFullscreen:Entered should be targeted at outer body");
+ gReceivedFullscreenEnteredEvent = true;
+ } else if (event.type == "MozDOMFullscreen:NewOrigin") {
+ window.removeEventListener("MozDOMFullscreen:NewOrigin", firstEntry, false);
+ ok(!gReceivedNewOriginEvent, "MozDOMFullscreen:NewOrigin shouldn't have been triggered twice");
+ is(event.target, gOuterDoc, "First MozDOMFullscreen:NewOrigin should be targeted at outer doc");
+ gReceivedNewOriginEvent = true;
+ } else {
+ ok(false, "Unknown event received");
+ }
+ if (!gReceivedFullscreenEnteredEvent || !gReceivedNewOriginEvent) {
+ return;
+ }
+
+ ok(gOuterDoc.fullscreenElement != null, "Outer doc should be in fullscreen");
+ gInnerDoc = gOuterDoc.getElementById("innerFrame").contentDocument;
+ window.addEventListener("MozDOMFullscreen:NewOrigin", secondEntry, false);
+ gInnerDoc.defaultView.focus();
+ gInnerDoc.body.requestFullscreen();
+}
+
+function secondEntry(event) {
+ is(event.target, gInnerDoc, "Second MozDOMFullscreen:NewOrigin should be targeted at inner doc");
+ ok(gInnerDoc.fullscreenElement != null, "Inner doc should be in fullscreen");
+ window.removeEventListener("MozDOMFullscreen:NewOrigin", secondEntry, false);
+ window.addEventListener("MozDOMFullscreen:NewOrigin", thirdEntry, false);
+ gInnerDoc.exitFullscreen();
+}
+
+function thirdEntry(event) {
+ is(event.target, gOuterDoc, "Third MozDOMFullscreen:NewOrigin should be targeted at outer doc");
+ ok(gOuterDoc.fullscreenElement != null, "Outer doc return to fullscreen after cancel fullscreen in inner doc");
+ window.removeEventListener("MozDOMFullscreen:NewOrigin", thirdEntry, false);
+ window.removeEventListener("MozDOMFullscreen:Exited", earlyExit, false);
+ window.addEventListener("MozDOMFullscreen:Exited", lastExit, false);
+ gOuterDoc.exitFullscreen();
+}
+
+function earlyExit(event) {
+ ok(false, "MozDOMFullscreen:Exited should only be triggered after cancel all fullscreen");
+}
+
+function lastExit(event) {
+ is(event.target, gOuterDoc, "MozDOMFullscreen:Exited should be targeted at the last exited doc");
+ ok(gOuterDoc.fullscreenElement == null, "Fullscreen should have been fully exited");
+ window.opener.wrappedJSObject.done();
+}
+
+function start() {
+ SimpleTest.waitForFocus(
+ function() {
+ gBrowser = document.getElementById("browser");
+ gOuterDoc = gBrowser.contentDocument;
+ gBrowser.contentWindow.focus();
+ window.addEventListener("MozDOMFullscreen:Entered", firstEntry, false);
+ window.addEventListener("MozDOMFullscreen:NewOrigin", firstEntry, false);
+ gOuterDoc.body.requestFullscreen();
+ });
+}
+
+]]>
+</script>
+<browser type="content" id="browser" width="400" height="400" src="file_MozDomFullscreen.html"/>
+
+</window>