Source code

Revision control

Copy as Markdown

Other Tools

<?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.
-->
<script type="application/javascript"><![CDATA[
function ok(condition, msg) {
window.arguments[0].ok(condition, msg);
}
function is(a, b, msg) {
window.arguments[0].is(a, b, msg);
}
var gBrowser = null;
var gOuterDoc = null;
var gInnerDoc = null;
var gReceivedFullscreenEnteredEvent = false;
function firstEntry(event) {
if (event.type == "MozDOMFullscreen:NewOrigin") {
ok(false, "MozDOMFullscreen:NewOrigin shouldn't be triggered at first entry");
return;
}
if (event.type != "MozDOMFullscreen:Entered") {
ok(false, "Unknown event received");
return;
}
ok(gOuterDoc.fullscreenElement != null, "Outer doc should be in fullscreen");
is(event.target, gOuterDoc.body, "First MozDOMFullscreen:Entered should be targeted at outer body");
ok(!gReceivedFullscreenEnteredEvent, "MozDOMFullscreen:Entered shouldn't have been triggered twice");
gReceivedFullscreenEnteredEvent = true;
window.removeEventListener("MozDOMFullscreen:Entered", firstEntry);
window.removeEventListener("MozDOMFullscreen:NewOrigin", firstEntry);
window.addEventListener("MozDOMFullscreen:NewOrigin", secondEntry);
gInnerDoc = gOuterDoc.getElementById("innerFrame").contentDocument;
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);
window.addEventListener("MozDOMFullscreen:NewOrigin", thirdEntry);
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);
window.removeEventListener("MozDOMFullscreen:Exited", earlyExit);
window.addEventListener("MozDOMFullscreen:Exited", lastExit);
gOuterDoc.exitFullscreen();
}
function earlyExit() {
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.arguments[0].done();
}
function start() {
SimpleTest.waitForFocus(
function() {
gBrowser = document.getElementById("browser");
gOuterDoc = gBrowser.contentDocument;
gBrowser.contentWindow.focus();
window.addEventListener("MozDOMFullscreen:Entered", firstEntry);
window.addEventListener("MozDOMFullscreen:NewOrigin", firstEntry);
gOuterDoc.body.requestFullscreen();
});
}
]]>
</script>
<browser type="content" id="browser" width="400" height="400" src="file_MozDomFullscreen.html"/>
</window>