Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'linux' && os_version == '24.04' && processor == 'x86_64' && display == 'x11' && opt
- Manifest: browser/base/content/test/fullscreen/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
async function click_hamburger_fs_toggle() {
// show panel
let menuShown = BrowserTestUtils.waitForEvent(PanelUI.panel, "ViewShown");
PanelUI.show();
await menuShown;
// click button
let hamburgerMenuButton = window.document.getElementById(
"appMenu-fullscreen-button2"
);
// clicking the button might hide the menu
let menuHidden = BrowserTestUtils.waitForEvent(PanelUI.panel, "popuphidden");
hamburgerMenuButton.click();
// try to hide panel explicitly
PanelUI.hide();
await menuHidden;
}
async function check_states(fullscreen) {
// These are the menu items in the View menu
const fsEnableMac = document.getElementById("enterFullScreenItem");
const fsDisableMac = document.getElementById("exitFullScreenItem");
const fullScreenItem = document.getElementById("fullScreenItem");
const toolbarButton = document.getElementById("fullscreen-button");
if (AppConstants.platform == "macosx") {
ok(
!fsEnableMac.hasAttribute("checked"),
"On MacOS, the Enter Full Screen menu item should never get a checkmark"
);
ok(
!fsDisableMac.hasAttribute("checked"),
"On MacOS, the Exit Full Screen menu item should never get a checkmark"
);
is(
fsEnableMac.hasAttribute("hidden"),
fullscreen,
"Enter Full Screen should be visible iff not in full screen mode"
);
is(
fsDisableMac.hasAttribute("hidden"),
!fullscreen,
"Exit Full Screen should be visible iff in full screen mode"
);
} else {
is(
fullScreenItem.hasAttribute("checked"),
fullscreen,
"On non-mac platforms, the menu item should be checked iff in full screen mode"
);
}
is(
toolbarButton.hasAttribute("checked"),
fullscreen,
"The toolbar button must be checked iff in full screen mode"
);
// And there is little button in the hamburger menu
let menuShown = BrowserTestUtils.waitForEvent(PanelUI.panel, "ViewShown");
PanelUI.show();
await menuShown;
let hamburgerMenuButton = window.document.getElementById(
"appMenu-fullscreen-button2"
);
is(
hamburgerMenuButton.hasAttribute("checked"),
fullscreen,
"The hambuger menu button should be checked iff in full screen mode"
);
let menuHidden = BrowserTestUtils.waitForEvent(PanelUI.panel, "popuphidden");
PanelUI.hide();
await menuHidden;
}
async function toggle_fs() {
let oldFSState = window.fullScreen;
const fullScreenEntered = BrowserTestUtils.waitForEvent(window, "fullscreen");
document.getElementById("View:FullScreen").doCommand();
info(
`Now waiting for fullscreen mode to be ${oldFSState ? "exited" : "entered"}`
);
await fullScreenEntered;
return window.fullScreen;
}
add_task(async function test_fullscreen_ui_state() {
// We add the custom button to the toolbar to make sure it works
CustomizableUI.addWidgetToArea(
"fullscreen-button",
CustomizableUI.AREA_NAVBAR
);
registerCleanupFunction(() => CustomizableUI.reset());
let inFullScreen = await toggle_fs();
ok(inFullScreen, "Full screen should be ON");
await check_states(inFullScreen);
inFullScreen = await toggle_fs();
is(inFullScreen, false, "Full screen should be OFF");
await check_states(inFullScreen);
});
add_task(async function test_f11_fullscreen() {
const fullScreenEntered = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing F11 to enter fullscreen");
EventUtils.synthesizeKey("KEY_F11", {});
await fullScreenEntered;
ok(window.fullScreen, "Full screen should be ON");
const fullScreenExited = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing F11 to exit fullscreen");
EventUtils.synthesizeKey("KEY_F11", {});
await fullScreenExited;
ok(!window.fullScreen, "Full screen should be OFF");
});
add_task(async function test_mac_fullscreen_shortcut() {
if (AppConstants.platform !== "macosx") {
info("Skipping test for MacOS shortcut on non-Mac");
return;
}
const fullScreenEntered = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing Ctrl+Cmd+F to enter fullscreen");
EventUtils.synthesizeKey("f", { ctrlKey: true, metaKey: true }, window);
await fullScreenEntered;
ok(window.fullScreen, "Full screen should be ON");
const fullScreenExited = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing Ctrl+Cmd+F to enter fullscreen");
EventUtils.synthesizeKey("f", { ctrlKey: true, metaKey: true }, window);
await fullScreenExited;
ok(!window.fullScreen, "Full screen should be OFF");
});
add_task(async function test_menubar_click() {
let fsEnable;
let fsDisable;
if (AppConstants.platform === "macosx") {
fsEnable = document.getElementById("enterFullScreenItem");
fsDisable = document.getElementById("exitFullScreenItem");
} else {
fsEnable = document.getElementById("fullScreenItem");
fsDisable = fsEnable;
}
const fullScreenEntered = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing Enter Full Screen");
fsEnable.click();
await fullScreenEntered;
ok(window.fullScreen, "Full screen should be ON");
const fullScreenExited = BrowserTestUtils.waitForEvent(window, "fullscreen");
fsDisable.click();
await fullScreenExited;
ok(!window.fullScreen, "Full screen should be OFF");
});
add_task(async function test_hamburger_menu_click() {
const fullScreenEntered = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing little double arrow icon");
await click_hamburger_fs_toggle();
await fullScreenEntered;
ok(window.fullScreen, "Full screen should be ON");
const fullScreenExited = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing little double arrow icon");
await click_hamburger_fs_toggle();
await fullScreenExited;
ok(!window.fullScreen, "Full screen should be OFF");
});
add_task(async function test_custom_menu_icon_click() {
// We add the custom button to the toolbar to make sure it works
CustomizableUI.addWidgetToArea(
"fullscreen-button",
CustomizableUI.AREA_NAVBAR
);
registerCleanupFunction(() => CustomizableUI.reset());
const toolbarButton = document.getElementById("fullscreen-button");
const fullScreenEntered = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing custom double arrow icon");
toolbarButton.click();
await fullScreenEntered;
ok(window.fullScreen, "Full screen should be ON");
const fullScreenExited = BrowserTestUtils.waitForEvent(window, "fullscreen");
info("Pressing custom double arrow icon");
toolbarButton.click();
await fullScreenExited;
ok(!window.fullScreen, "Full screen should be OFF");
});