зеркало из https://github.com/mozilla/gecko-dev.git
130 строки
3.7 KiB
HTML
130 строки
3.7 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=545812
|
|
|
|
Test DOM fullscreen API.
|
|
|
|
-->
|
|
<head>
|
|
<title>Test for Bug 545812</title>
|
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
|
<script type="application/javascript" src="file_fullscreen-utils.js"></script>
|
|
<style>
|
|
body {
|
|
background-color: black;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<script type="application/javascript">
|
|
|
|
/** Test for Bug 545812 **/
|
|
|
|
function ok(condition, msg) {
|
|
opener.ok(condition, "[denied] " + msg);
|
|
}
|
|
|
|
function is(a, b, msg) {
|
|
opener.is(a, b, "[denied] " + msg);
|
|
}
|
|
|
|
const INNER_FILE = "file_fullscreen-denied-inner.html";
|
|
function setupForInnerTest(targetName, callback) {
|
|
window.testTargetName = targetName;
|
|
window.continueTest = () => {
|
|
delete window.testTargetName;
|
|
delete window.continueTest;
|
|
callback();
|
|
};
|
|
}
|
|
|
|
function begin() {
|
|
document.addEventListener("fullscreenchange", () => {
|
|
ok(false, "Should never receive " +
|
|
"a fullscreenchange event in the main window.");
|
|
});
|
|
SimpleTest.executeSoon(testIFrameWithoutAllowFullscreen);
|
|
}
|
|
|
|
function testIFrameWithoutAllowFullscreen() {
|
|
// Create an iframe without an allowfullscreen attribute, whose
|
|
// contents request fullscreen. The request should be denied, and
|
|
// we should not receive a fullscreenchange event in this document.
|
|
var iframe = document.createElement("iframe");
|
|
iframe.src = INNER_FILE;
|
|
setupForInnerTest("an iframe without allowfullscreen", () => {
|
|
document.body.removeChild(iframe);
|
|
SimpleTest.executeSoon(testFrameElement);
|
|
});
|
|
document.body.appendChild(iframe);
|
|
}
|
|
|
|
function testFrameElement() {
|
|
var frameset = document.createElement("frameset");
|
|
var frame = document.createElement("frame");
|
|
frame.src = INNER_FILE;
|
|
frameset.appendChild(frame);
|
|
setupForInnerTest("a frame element", () => {
|
|
document.documentElement.removeChild(frameset);
|
|
SimpleTest.executeSoon(testObjectElement);
|
|
});
|
|
document.documentElement.appendChild(frameset);
|
|
}
|
|
|
|
function testObjectElement() {
|
|
var objectElem = document.createElement("object");
|
|
objectElem.data = INNER_FILE;
|
|
setupForInnerTest("an object element", () => {
|
|
document.body.removeChild(objectElem);
|
|
// In the following tests we want to test trust context requirement
|
|
// of fullscreen request, so temporary re-enable this pref.
|
|
SpecialPowers.pushPrefEnv({
|
|
"set":[["full-screen-api.allow-trusted-requests-only", true]]
|
|
}, testNonTrustContext);
|
|
});
|
|
document.body.appendChild(objectElem);
|
|
}
|
|
|
|
function testNonTrustContext() {
|
|
addFullscreenErrorContinuation(() => {
|
|
ok(!document.fullscreenElement,
|
|
"Should not grant request in non-trust context.");
|
|
SimpleTest.executeSoon(testLongRunningEventHandler);
|
|
});
|
|
document.documentElement.requestFullscreen();
|
|
}
|
|
|
|
function testLongRunningEventHandler() {
|
|
function longRunningHandler() {
|
|
window.removeEventListener("keypress", longRunningHandler);
|
|
// Busy loop until 2s has passed. We should then be past the one
|
|
// second threshold, and so our request for fullscreen should be
|
|
// rejected.
|
|
var end = (new Date()).getTime() + 2000;
|
|
while ((new Date()).getTime() < end) {
|
|
; // Wait...
|
|
}
|
|
document.documentElement.requestFullscreen();
|
|
}
|
|
addFullscreenErrorContinuation(() => {
|
|
ok(!document.fullscreenElement,
|
|
"Should not grant request in long-running event handler.");
|
|
// Restore the pref environment we changed before
|
|
// entering testNonTrustContext.
|
|
SpecialPowers.popPrefEnv(finish);
|
|
});
|
|
window.addEventListener("keypress", longRunningHandler);
|
|
synthesizeKey("VK_A", {});
|
|
}
|
|
|
|
function finish() {
|
|
opener.nextTest();
|
|
}
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|