summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_domFullscreen_fullscreenMode.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/general/browser_domFullscreen_fullscreenMode.js')
-rw-r--r--browser/base/content/test/general/browser_domFullscreen_fullscreenMode.js221
1 files changed, 0 insertions, 221 deletions
diff --git a/browser/base/content/test/general/browser_domFullscreen_fullscreenMode.js b/browser/base/content/test/general/browser_domFullscreen_fullscreenMode.js
deleted file mode 100644
index 054fb3cc0..000000000
--- a/browser/base/content/test/general/browser_domFullscreen_fullscreenMode.js
+++ /dev/null
@@ -1,221 +0,0 @@
-"use strict";
-
-var gMessageManager;
-
-function frameScript() {
- addMessageListener("Test:RequestFullscreen", () => {
- content.document.body.requestFullscreen();
- });
- addMessageListener("Test:ExitFullscreen", () => {
- content.document.exitFullscreen();
- });
- addMessageListener("Test:QueryFullscreenState", () => {
- sendAsyncMessage("Test:FullscreenState", {
- inDOMFullscreen: !!content.document.fullscreenElement,
- inFullscreen: content.fullScreen
- });
- });
- content.document.addEventListener("fullscreenchange", () => {
- sendAsyncMessage("Test:FullscreenChanged", {
- inDOMFullscreen: !!content.document.fullscreenElement,
- inFullscreen: content.fullScreen
- });
- });
- function waitUntilActive() {
- let doc = content.document;
- if (doc.docShell.isActive && doc.hasFocus()) {
- sendAsyncMessage("Test:Activated");
- } else {
- setTimeout(waitUntilActive, 10);
- }
- }
- waitUntilActive();
-}
-
-function listenOneMessage(aMsg, aListener) {
- function listener({ data }) {
- gMessageManager.removeMessageListener(aMsg, listener);
- aListener(data);
- }
- gMessageManager.addMessageListener(aMsg, listener);
-}
-
-function listenOneEvent(aEvent, aListener) {
- function listener(evt) {
- removeEventListener(aEvent, listener);
- aListener(evt);
- }
- addEventListener(aEvent, listener);
-}
-
-function queryFullscreenState() {
- return new Promise(resolve => {
- listenOneMessage("Test:FullscreenState", resolve);
- gMessageManager.sendAsyncMessage("Test:QueryFullscreenState");
- });
-}
-
-function captureUnexpectedFullscreenChange() {
- ok(false, "catched an unexpected fullscreen change");
-}
-
-const FS_CHANGE_DOM = 1 << 0;
-const FS_CHANGE_SIZE = 1 << 1;
-const FS_CHANGE_BOTH = FS_CHANGE_DOM | FS_CHANGE_SIZE;
-
-function waitForFullscreenChanges(aFlags) {
- return new Promise(resolve => {
- let fullscreenData = null;
- let sizemodeChanged = false;
- function tryResolve() {
- if ((!(aFlags & FS_CHANGE_DOM) || fullscreenData) &&
- (!(aFlags & FS_CHANGE_SIZE) || sizemodeChanged)) {
- if (!fullscreenData) {
- queryFullscreenState().then(resolve);
- } else {
- resolve(fullscreenData);
- }
- }
- }
- if (aFlags & FS_CHANGE_SIZE) {
- listenOneEvent("sizemodechange", () => {
- sizemodeChanged = true;
- tryResolve();
- });
- }
- if (aFlags & FS_CHANGE_DOM) {
- gMessageManager.removeMessageListener(
- "Test:FullscreenChanged", captureUnexpectedFullscreenChange);
- listenOneMessage("Test:FullscreenChanged", data => {
- gMessageManager.addMessageListener(
- "Test:FullscreenChanged", captureUnexpectedFullscreenChange);
- fullscreenData = data;
- tryResolve();
- });
- }
- });
-}
-
-var gTests = [
- {
- desc: "document method",
- affectsFullscreenMode: false,
- exitFunc: () => {
- gMessageManager.sendAsyncMessage("Test:ExitFullscreen");
- }
- },
- {
- desc: "escape key",
- affectsFullscreenMode: false,
- exitFunc: () => {
- executeSoon(() => EventUtils.synthesizeKey("VK_ESCAPE", {}));
- }
- },
- {
- desc: "F11 key",
- affectsFullscreenMode: true,
- exitFunc: function () {
- executeSoon(() => EventUtils.synthesizeKey("VK_F11", {}));
- }
- }
-];
-
-function checkState(expectedStates, contentStates) {
- is(contentStates.inDOMFullscreen, expectedStates.inDOMFullscreen,
- "The DOM fullscreen state of the content should match");
- // TODO window.fullScreen is not updated as soon as the fullscreen
- // state flips in child process, hence checking it could cause
- // anonying intermittent failure. As we just want to confirm the
- // fullscreen state of the browser window, we can just check the
- // that on the chrome window below.
- // is(contentStates.inFullscreen, expectedStates.inFullscreen,
- // "The fullscreen state of the content should match");
- is(!!document.fullscreenElement, expectedStates.inDOMFullscreen,
- "The DOM fullscreen state of the chrome should match");
- is(window.fullScreen, expectedStates.inFullscreen,
- "The fullscreen state of the chrome should match");
-}
-
-const kPage = "http://example.org/browser/browser/" +
- "base/content/test/general/dummy_page.html";
-
-add_task(function* () {
- yield pushPrefs(
- ["full-screen-api.transition-duration.enter", "0 0"],
- ["full-screen-api.transition-duration.leave", "0 0"]);
-
- let tab = gBrowser.addTab(kPage);
- let browser = tab.linkedBrowser;
- gBrowser.selectedTab = tab;
- yield waitForDocLoadComplete();
-
- registerCleanupFunction(() => {
- if (browser.contentWindow.fullScreen) {
- BrowserFullScreen();
- }
- gBrowser.removeTab(tab);
- });
-
- gMessageManager = browser.messageManager;
- gMessageManager.loadFrameScript(
- "data:,(" + frameScript.toString() + ")();", false);
- gMessageManager.addMessageListener(
- "Test:FullscreenChanged", captureUnexpectedFullscreenChange);
-
- // Wait for the document being activated, so that
- // fullscreen request won't be denied.
- yield new Promise(resolve => listenOneMessage("Test:Activated", resolve));
-
- for (let test of gTests) {
- let contentStates;
- info("Testing exit DOM fullscreen via " + test.desc);
-
- contentStates = yield queryFullscreenState();
- checkState({inDOMFullscreen: false, inFullscreen: false}, contentStates);
-
- /* DOM fullscreen without fullscreen mode */
-
- info("> Enter DOM fullscreen");
- gMessageManager.sendAsyncMessage("Test:RequestFullscreen");
- contentStates = yield waitForFullscreenChanges(FS_CHANGE_BOTH);
- checkState({inDOMFullscreen: true, inFullscreen: true}, contentStates);
-
- info("> Exit DOM fullscreen");
- test.exitFunc();
- contentStates = yield waitForFullscreenChanges(FS_CHANGE_BOTH);
- checkState({inDOMFullscreen: false, inFullscreen: false}, contentStates);
-
- /* DOM fullscreen with fullscreen mode */
-
- info("> Enter fullscreen mode");
- // Need to be asynchronous because sizemodechange event could be
- // dispatched synchronously, which would cause the event listener
- // miss that event and wait infinitely.
- executeSoon(() => BrowserFullScreen());
- contentStates = yield waitForFullscreenChanges(FS_CHANGE_SIZE);
- checkState({inDOMFullscreen: false, inFullscreen: true}, contentStates);
-
- info("> Enter DOM fullscreen in fullscreen mode");
- gMessageManager.sendAsyncMessage("Test:RequestFullscreen");
- contentStates = yield waitForFullscreenChanges(FS_CHANGE_DOM);
- checkState({inDOMFullscreen: true, inFullscreen: true}, contentStates);
-
- info("> Exit DOM fullscreen in fullscreen mode");
- test.exitFunc();
- contentStates = yield waitForFullscreenChanges(
- test.affectsFullscreenMode ? FS_CHANGE_BOTH : FS_CHANGE_DOM);
- checkState({
- inDOMFullscreen: false,
- inFullscreen: !test.affectsFullscreenMode
- }, contentStates);
-
- /* Cleanup */
-
- // Exit fullscreen mode if we are still in
- if (window.fullScreen) {
- info("> Cleanup");
- executeSoon(() => BrowserFullScreen());
- yield waitForFullscreenChanges(FS_CHANGE_SIZE);
- }
- }
-});