230 lines
6.7 KiB
JavaScript
230 lines
6.7 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
const PREF_UI_DENSITY = "browser.uidensity";
|
|
const PREF_AUTO_TOUCH_MODE = "browser.touchmode.auto";
|
|
|
|
async function testModeMenuitem(mode, modePref) {
|
|
await startCustomizing();
|
|
|
|
let win = document.getElementById("main-window");
|
|
let popupButton = document.getElementById("customization-uidensity-button");
|
|
let popup = document.getElementById("customization-uidensity-menu");
|
|
|
|
// Show the popup.
|
|
let popupShownPromise = popupShown(popup);
|
|
EventUtils.synthesizeMouseAtCenter(popupButton, {});
|
|
await popupShownPromise;
|
|
|
|
let item = document.getElementById(
|
|
"customization-uidensity-menuitem-" + mode
|
|
);
|
|
let normalItem = document.getElementById(
|
|
"customization-uidensity-menuitem-normal"
|
|
);
|
|
|
|
is(
|
|
normalItem.getAttribute("active"),
|
|
"true",
|
|
"Normal mode menuitem should be active by default"
|
|
);
|
|
|
|
// Hover over the mode menuitem and wait for the event that updates the UI
|
|
// density.
|
|
let mouseoverPromise = BrowserTestUtils.waitForEvent(item, "mouseover");
|
|
EventUtils.synthesizeMouseAtCenter(item, { type: "mouseover" });
|
|
await mouseoverPromise;
|
|
|
|
is(
|
|
win.getAttribute("uidensity"),
|
|
mode,
|
|
`UI Density should be set to ${mode} on ${mode} menuitem hover`
|
|
);
|
|
|
|
is(
|
|
Services.prefs.getIntPref(PREF_UI_DENSITY),
|
|
window.gUIDensity.MODE_NORMAL,
|
|
`UI Density pref should still be set to normal on ${mode} menuitem hover`
|
|
);
|
|
|
|
// Hover the normal menuitem again and check that the UI density reset to normal.
|
|
EventUtils.synthesizeMouseAtCenter(normalItem, { type: "mouseover" });
|
|
await BrowserTestUtils.waitForCondition(() => !win.hasAttribute("uidensity"));
|
|
|
|
ok(
|
|
!win.hasAttribute("uidensity"),
|
|
`UI Density should be reset when no longer hovering the ${mode} menuitem`
|
|
);
|
|
|
|
// Select the custom UI density and wait for the popup to be hidden.
|
|
let popupHiddenPromise = popupHidden(popup);
|
|
EventUtils.synthesizeMouseAtCenter(item, {});
|
|
await popupHiddenPromise;
|
|
|
|
// Check that the click permanently changed the UI density.
|
|
is(
|
|
win.getAttribute("uidensity"),
|
|
mode,
|
|
`UI Density should be set to ${mode} on ${mode} menuitem click`
|
|
);
|
|
is(
|
|
Services.prefs.getIntPref(PREF_UI_DENSITY),
|
|
modePref,
|
|
`UI Density pref should be set to ${mode} when clicking the ${mode} menuitem`
|
|
);
|
|
|
|
// Open the popup again.
|
|
popupShownPromise = popupShown(popup);
|
|
EventUtils.synthesizeMouseAtCenter(popupButton, {});
|
|
await popupShownPromise;
|
|
|
|
// Check that the menuitem is still active after opening and closing the popup.
|
|
is(
|
|
item.getAttribute("active"),
|
|
"true",
|
|
`${mode} mode menuitem should be active`
|
|
);
|
|
|
|
// Hide the popup again.
|
|
popupHiddenPromise = popupHidden(popup);
|
|
EventUtils.synthesizeMouseAtCenter(popupButton, {});
|
|
await popupHiddenPromise;
|
|
|
|
// Check that the menuitem is still active after re-opening customize mode.
|
|
await endCustomizing();
|
|
await startCustomizing();
|
|
|
|
popupShownPromise = popupShown(popup);
|
|
EventUtils.synthesizeMouseAtCenter(popupButton, {});
|
|
await popupShownPromise;
|
|
|
|
is(
|
|
item.getAttribute("active"),
|
|
"true",
|
|
`${mode} mode menuitem should be active after entering and exiting customize mode`
|
|
);
|
|
|
|
// Click the normal menuitem and check that the density is reset.
|
|
popupHiddenPromise = popupHidden(popup);
|
|
EventUtils.synthesizeMouseAtCenter(normalItem, {});
|
|
await popupHiddenPromise;
|
|
|
|
ok(
|
|
!win.hasAttribute("uidensity"),
|
|
"UI Density should be reset when clicking the normal menuitem"
|
|
);
|
|
|
|
is(
|
|
Services.prefs.getIntPref(PREF_UI_DENSITY),
|
|
window.gUIDensity.MODE_NORMAL,
|
|
"UI Density pref should be set to normal."
|
|
);
|
|
|
|
// Show the popup and click on the mode menuitem again to test the
|
|
// reset default feature.
|
|
popupShownPromise = popupShown(popup);
|
|
EventUtils.synthesizeMouseAtCenter(popupButton, {});
|
|
await popupShownPromise;
|
|
|
|
popupHiddenPromise = popupHidden(popup);
|
|
EventUtils.synthesizeMouseAtCenter(item, {});
|
|
await popupHiddenPromise;
|
|
|
|
is(
|
|
win.getAttribute("uidensity"),
|
|
mode,
|
|
`UI Density should be set to ${mode} on ${mode} menuitem click`
|
|
);
|
|
|
|
is(
|
|
Services.prefs.getIntPref(PREF_UI_DENSITY),
|
|
modePref,
|
|
`UI Density pref should be set to ${mode} when clicking the ${mode} menuitem`
|
|
);
|
|
|
|
await gCustomizeMode.reset();
|
|
|
|
ok(
|
|
!win.hasAttribute("uidensity"),
|
|
"UI Density should be reset when clicking the normal menuitem"
|
|
);
|
|
|
|
is(
|
|
Services.prefs.getIntPref(PREF_UI_DENSITY),
|
|
window.gUIDensity.MODE_NORMAL,
|
|
"UI Density pref should be set to normal."
|
|
);
|
|
|
|
await endCustomizing();
|
|
}
|
|
|
|
add_task(async function test_touch_mode_menuitem() {
|
|
// OSX doesn't get touch mode for now.
|
|
if (AppConstants.platform == "macosx") {
|
|
is(
|
|
document.getElementById("customization-uidensity-menuitem-touch"),
|
|
null,
|
|
"There's no touch option on Mac OSX"
|
|
);
|
|
return;
|
|
}
|
|
|
|
await testModeMenuitem("touch", window.gUIDensity.MODE_TOUCH);
|
|
|
|
// Test the checkbox for automatic Touch Mode transition
|
|
// in Windows Tablet Mode.
|
|
if (AppConstants.platform == "win") {
|
|
await startCustomizing();
|
|
|
|
let popupButton = document.getElementById("customization-uidensity-button");
|
|
let popup = document.getElementById("customization-uidensity-menu");
|
|
let popupShownPromise = popupShown(popup);
|
|
EventUtils.synthesizeMouseAtCenter(popupButton, {});
|
|
await popupShownPromise;
|
|
|
|
let checkbox = document.getElementById(
|
|
"customization-uidensity-autotouchmode-checkbox"
|
|
);
|
|
ok(checkbox.checked, "Checkbox should be checked by default");
|
|
|
|
// Test toggling the checkbox.
|
|
EventUtils.synthesizeMouseAtCenter(checkbox, {});
|
|
is(
|
|
Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE),
|
|
false,
|
|
"Automatic Touch Mode is off when the checkbox is unchecked."
|
|
);
|
|
|
|
EventUtils.synthesizeMouseAtCenter(checkbox, {});
|
|
is(
|
|
Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE),
|
|
true,
|
|
"Automatic Touch Mode is on when the checkbox is checked."
|
|
);
|
|
|
|
// Test reset to defaults.
|
|
EventUtils.synthesizeMouseAtCenter(checkbox, {});
|
|
is(
|
|
Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE),
|
|
false,
|
|
"Automatic Touch Mode is off when the checkbox is unchecked."
|
|
);
|
|
|
|
await gCustomizeMode.reset();
|
|
is(
|
|
Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE),
|
|
true,
|
|
"Automatic Touch Mode is on when the checkbox is checked."
|
|
);
|
|
}
|
|
});
|
|
|
|
add_task(async function cleanup() {
|
|
await endCustomizing();
|
|
|
|
Services.prefs.clearUserPref(PREF_UI_DENSITY);
|
|
Services.prefs.clearUserPref(PREF_AUTO_TOUCH_MODE);
|
|
});
|