Bug 1191597 part 2 - Convert fullscreen-esc-context-menu to a browser chrome test.
--- a/dom/html/test/browser.ini
+++ b/dom/html/test/browser.ini
@@ -11,8 +11,9 @@ support-files =
skip-if = e10s # Bug ?????? - leaked until shutdown [nsGlobalWindow #16 about:blank]
[browser_bug1081537.js]
[browser_bug1108547.js]
support-files =
file_bug1108547-1.html
file_bug1108547-2.html
file_bug1108547-3.html
[browser_DOMDocElementInserted.js]
+[browser_fullscreen-contextmenu-esc.js]
new file mode 100644
--- /dev/null
+++ b/dom/html/test/browser_fullscreen-contextmenu-esc.js
@@ -0,0 +1,105 @@
+"use strict";
+
+function frameScript() {
+ addMessageListener("Test:RequestFullscreen", () => {
+ content.document.body.mozRequestFullScreen();
+ });
+ content.document.addEventListener("mozfullscreenchange", () => {
+ sendAsyncMessage("Test:FullscreenChanged", content.document.mozFullScreen);
+ });
+ addMessageListener("Test:QueryFullscreenState", () => {
+ sendAsyncMessage("Test:FullscreenState", content.document.mozFullScreen);
+ });
+ function waitUntilActive() {
+ let doc = content.document;
+ if (doc.docShell.isActive && doc.hasFocus()) {
+ sendAsyncMessage("Test:Activated");
+ } else {
+ setTimeout(waitUntilActive, 10);
+ }
+ }
+ waitUntilActive();
+}
+
+var gMessageManager;
+
+function listenOneMessage(aMsg, aListener) {
+ function listener({ data }) {
+ gMessageManager.removeMessageListener(aMsg, listener);
+ aListener(data);
+ }
+ gMessageManager.addMessageListener(aMsg, listener);
+}
+
+function promiseOneMessage(aMsg) {
+ return new Promise(resolve => listenOneMessage(aMsg, resolve));
+}
+
+function captureUnexpectedFullscreenChange() {
+ ok(false, "Caught an unexpected fullscreen change");
+}
+
+const kPage = "http://example.org/browser/dom/html/test/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);
+ registerCleanupFunction(() => gBrowser.removeTab(tab));
+ let browser = tab.linkedBrowser;
+ gBrowser.selectedTab = tab;
+ yield waitForDocLoadComplete();
+
+ gMessageManager = browser.messageManager;
+ gMessageManager.loadFrameScript(
+ "data:,(" + frameScript.toString() + ")();", false);
+
+ // Wait for the document being activated, so that
+ // fullscreen request won't be denied.
+ yield promiseOneMessage("Test:Activated");
+
+ let contextMenu = document.getElementById("contentAreaContextMenu");
+ ok(contextMenu, "Got context menu");
+
+ let state;
+ info("Enter DOM fullscreen");
+ gMessageManager.sendAsyncMessage("Test:RequestFullscreen");
+ state = yield promiseOneMessage("Test:FullscreenChanged");
+ ok(state, "The content should have entered fullscreen");
+ ok(document.mozFullScreen, "The chrome should also be in fullscreen");
+ gMessageManager.addMessageListener(
+ "Test:FullscreenChanged", captureUnexpectedFullscreenChange);
+
+ info("Open context menu");
+ is(contextMenu.state, "closed", "Should not have opened context menu");
+ let popupShownPromise = promiseWaitForEvent(window, "popupshown");
+ EventUtils.synthesizeMouse(browser, screen.width / 2, screen.height / 2,
+ {type: "contextmenu", button: 2}, window);
+ yield popupShownPromise;
+ is(contextMenu.state, "open", "Should have opened context menu");
+
+ info("Send the first escape");
+ let popupHidePromise = promiseWaitForEvent(window, "popuphidden");
+ EventUtils.synthesizeKey("VK_ESCAPE", {});
+ yield popupHidePromise;
+ is(contextMenu.state, "closed", "Should have closed context menu");
+
+ // Wait a small time to confirm that the first ESC key
+ // does not exit fullscreen.
+ yield new Promise(resolve => setTimeout(resolve, 1000));
+ gMessageManager.sendAsyncMessage("Test:QueryFullscreenState");
+ state = yield promiseOneMessage("Test:FullscreenState");
+ ok(state, "The content should still be in fullscreen");
+ ok(document.mozFullScreen, "The chrome should still be in fullscreen");
+
+ info("Send the second escape");
+ gMessageManager.removeMessageListener(
+ "Test:FullscreenChanged", captureUnexpectedFullscreenChange);
+ let fullscreenExitPromise = promiseOneMessage("Test:FullscreenChanged");
+ EventUtils.synthesizeKey("VK_ESCAPE", {});
+ state = yield fullscreenExitPromise;
+ ok(!state, "The content should have exited fullscreen");
+ ok(!document.mozFullScreen, "The chrome should have exited fullscreen");
+});
deleted file mode 100644
--- a/dom/html/test/file_fullscreen-esc-context-menu.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=910532
-
-Verify that an ESC key press canceling the context menu
-won't exit DOM fullscreen.
--->
-<head>
- <meta charset="UTF-8">
- <title>Text for bug 910532</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:-moz-full-screen {
- background-color: red;
- }
- </style>
-</head>
-<body>
-<script type="application/javascript">
-
-const Ci = SpecialPowers.Ci;
-
-SimpleTest.requestFlakyTimeout("We need to wait a small time to confirm " +
- "that the first ESC key does not exit fullscreen.");
-
-function ok(condition, msg) {
- opener.ok(condition, "[esc-context-menu] " + msg);
-}
-
-function is(a, b, msg) {
- opener.is(a, b, "[esc-context-menu] " + msg);
-}
-
-var contextMenu;
-var escapeSent = 0;
-
-function sendEscape() {
- escapeSent++;
- synthesizeKey("VK_ESCAPE", {});
-}
-
-function begin() {
- // Copy from browser/base/content/test/general/test_contextmenu.html
- var chromeWin = SpecialPowers.wrap(window)
- .QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIWebNavigation)
- .QueryInterface(Ci.nsIDocShellTreeItem)
- .rootTreeItem
- .QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindow)
- .QueryInterface(Ci.nsIDOMChromeWindow);
- contextMenu = chromeWin.document.getElementById("contentAreaContextMenu");
- ok(contextMenu, "Got context menu XUL");
-
- addFullscreenChangeContinuation("enter", fullscreenEntered);
- document.body.mozRequestFullScreen();
-}
-
-function finish() {
- opener.nextTest();
-}
-
-function fullscreenEntered(event) {
- ok(document.mozFullScreen, "Should have entered fullscreen mode");
- is(document.mozFullScreenElement, document.body, "FSE should be doc");
- contextMenu.addEventListener("popupshown", contextMenuOpened, false);
- is(contextMenu.state, "closed", "Should not have opened context menu");
- synthesizeMouseAtCenter(document.body, {type: 'contextmenu', button: 2});
-}
-
-function contextMenuOpened(event) {
- contextMenu.removeEventListener("popupshown", contextMenuOpened);
- is(contextMenu.state, "open", "Should have opened context menu");
- addFullscreenChangeContinuation("exit", fullscreenExited);
- contextMenu.addEventListener("popuphidden", contextMenuClosed, false);
- sendEscape();
-}
-
-function contextMenuClosed(event) {
- is(contextMenu.state, "closed", "Should have closed context menu");
- setTimeout(function () {
- ok(document.mozFullScreen, "Should still be in fullscreen mode");
- sendEscape();
- }, 100);
-}
-
-function fullscreenExited(event) {
- is(escapeSent, 2, "Only the second escape should exit fullscreen");
- ok(!document.mozFullScreen, "Should have left fullscreen mode");
- finish();
-}
-
-</script>
-</body>
-</html>
--- a/dom/html/test/mochitest.ini
+++ b/dom/html/test/mochitest.ini
@@ -45,17 +45,16 @@ support-files =
file_bug417760.png
file_bug893537.html
file_formSubmission_img.jpg
file_formSubmission_text.txt
file_fullscreen-api-keys.html
file_fullscreen-api.html
file_fullscreen-denied-inner.html
file_fullscreen-denied.html
- file_fullscreen-esc-context-menu.html
file_fullscreen-esc-exit-inner.html
file_fullscreen-esc-exit.html
file_fullscreen-hidden.html
file_fullscreen-multiple-inner.html
file_fullscreen-multiple.html
file_fullscreen-navigation.html
file_fullscreen-nested.html
file_fullscreen-plugins.html
--- a/dom/html/test/test_fullscreen-api.html
+++ b/dom/html/test/test_fullscreen-api.html
@@ -25,17 +25,16 @@
SimpleTest.requestFlakyTimeout("untriaged");
// Run the tests which go full-screen in new windows, as mochitests normally
// run in an iframe, which by default will not have the allowfullscreen
// attribute set, so full-screen won't work.
var gTestWindows = [
"file_fullscreen-multiple.html",
"file_fullscreen-rollback.html",
- "file_fullscreen-esc-context-menu.html",
"file_fullscreen-esc-exit.html",
"file_fullscreen-denied.html",
"file_fullscreen-api.html",
"file_fullscreen-api-keys.html",
"file_fullscreen-plugins.html",
"file_fullscreen-hidden.html",
"file_fullscreen-svg-element.html",
"file_fullscreen-navigation.html",