Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* 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";
requestLongerTimeout(2);
// Restoring default should reset density and show an "undo" option which undoes
// the restoring operation.
add_task(async function () {
await SpecialPowers.pushPrefEnv({
set: [["browser.compactmode.show", true]],
});
let stopReloadButtonId = "stop-reload-button";
CustomizableUI.removeWidgetFromArea(stopReloadButtonId);
await startCustomizing();
ok(!CustomizableUI.inDefaultState, "Not in default state to begin with");
is(
CustomizableUI.getPlacementOfWidget(stopReloadButtonId),
null,
"Stop/reload button is in palette"
);
let undoResetButton = document.getElementById(
"customization-undo-reset-button"
);
is(undoResetButton.hidden, true, "The undo button is hidden before reset");
let densityButton = document.getElementById("customization-uidensity-button");
let popup = document.getElementById("customization-uidensity-menu");
let popupShownPromise = popupShown(popup);
EventUtils.synthesizeMouseAtCenter(densityButton, {});
info("Clicked on density button");
await popupShownPromise;
let compactModeItem = document.getElementById(
"customization-uidensity-menuitem-compact"
);
let win = document.getElementById("main-window");
let densityChangedPromise = new Promise(resolve => {
let observer = new MutationObserver(() => {
if (win.getAttribute("uidensity") == "compact") {
resolve();
observer.disconnect();
}
});
observer.observe(win, {
attributes: true,
attributeFilter: ["uidensity"],
});
});
compactModeItem.doCommand();
info("Clicked on compact density");
await densityChangedPromise;
await gCustomizeMode.reset();
ok(CustomizableUI.inDefaultState, "In default state after reset");
is(undoResetButton.hidden, false, "The undo button is visible after reset");
is(
win.hasAttribute("uidensity"),
false,
"The window has been restored to normal density."
);
await gCustomizeMode.undoReset();
is(
win.getAttribute("uidensity"),
"compact",
"Density has been reset to compact."
);
ok(!CustomizableUI.inDefaultState, "Not in default state after undo-reset");
is(
undoResetButton.hidden,
true,
"The undo button is hidden after clicking on the undo button"
);
is(
CustomizableUI.getPlacementOfWidget(stopReloadButtonId),
null,
"Stop/reload button is in palette"
);
await gCustomizeMode.reset();
await SpecialPowers.popPrefEnv();
});
// Performing an action after a reset will hide the undo button.
add_task(async function action_after_reset_hides_undo() {
let stopReloadButtonId = "stop-reload-button";
CustomizableUI.removeWidgetFromArea(stopReloadButtonId);
ok(!CustomizableUI.inDefaultState, "Not in default state to begin with");
is(
CustomizableUI.getPlacementOfWidget(stopReloadButtonId),
null,
"Stop/reload button is in palette"
);
let undoResetButton = document.getElementById(
"customization-undo-reset-button"
);
is(undoResetButton.hidden, true, "The undo button is hidden before reset");
await gCustomizeMode.reset();
ok(CustomizableUI.inDefaultState, "In default state after reset");
is(undoResetButton.hidden, false, "The undo button is visible after reset");
CustomizableUI.addWidgetToArea(
stopReloadButtonId,
CustomizableUI.AREA_FIXED_OVERFLOW_PANEL
);
is(
undoResetButton.hidden,
true,
"The undo button is hidden after another change"
);
});
// "Restore defaults", exiting customize, and re-entering shouldn't show the Undo button
add_task(async function () {
let undoResetButton = document.getElementById(
"customization-undo-reset-button"
);
is(undoResetButton.hidden, true, "The undo button is hidden before a reset");
ok(
!CustomizableUI.inDefaultState,
"The browser should not be in default state"
);
await gCustomizeMode.reset();
is(undoResetButton.hidden, false, "The undo button is visible after a reset");
await endCustomizing();
await startCustomizing();
is(
undoResetButton.hidden,
true,
"The undo reset button should be hidden after entering customization mode"
);
});
// Bug 971626 - Restore Defaults should collapse the Title Bar
add_task(async function () {
{
const supported = TabsInTitlebar.systemSupported;
is(typeof supported, "boolean");
info("TabsInTitlebar support: " + supported);
if (!supported) {
return;
}
}
const kDefaultValue = Services.appinfo.drawInTitlebar;
let restoreDefaultsButton = document.getElementById(
"customization-reset-button"
);
let titlebarCheckbox = document.getElementById(
"customization-titlebar-visibility-checkbox"
);
let undoResetButton = document.getElementById(
"customization-undo-reset-button"
);
ok(
CustomizableUI.inDefaultState,
"Should be in default state at start of test"
);
ok(
restoreDefaultsButton.disabled,
"Restore defaults button should be disabled when in default state"
);
is(
titlebarCheckbox.hasAttribute("checked"),
!kDefaultValue,
"Title bar checkbox should reflect pref value"
);
is(
undoResetButton.hidden,
true,
"Undo reset button should be hidden at start of test"
);
let prefName = "browser.tabs.inTitlebar";
Services.prefs.setIntPref(prefName, !kDefaultValue);
ok(
!restoreDefaultsButton.disabled,
"Restore defaults button should be enabled when pref changed"
);
is(
Services.appinfo.drawInTitlebar,
!kDefaultValue,
"Title bar checkbox should reflect changed pref value"
);
is(
titlebarCheckbox.hasAttribute("checked"),
kDefaultValue,
"Title bar checkbox should reflect changed pref value"
);
ok(
!CustomizableUI.inDefaultState,
"With titlebar flipped, no longer default"
);
is(
undoResetButton.hidden,
true,
"Undo reset button should be hidden after pref change"
);
await gCustomizeMode.reset();
ok(
restoreDefaultsButton.disabled,
"Restore defaults button should be disabled after reset"
);
is(
titlebarCheckbox.hasAttribute("checked"),
!kDefaultValue,
"Title bar checkbox should reflect default value after reset"
);
is(
Services.prefs.getIntPref(prefName),
2,
"Reset should reset drawInTitlebar"
);
is(
Services.appinfo.drawInTitlebar,
kDefaultValue,
"Default state should be restored"
);
ok(CustomizableUI.inDefaultState, "In default state after titlebar reset");
is(
undoResetButton.hidden,
false,
"Undo reset button should be visible after reset"
);
ok(
!undoResetButton.disabled,
"Undo reset button should be enabled after reset"
);
await gCustomizeMode.undoReset();
ok(
!restoreDefaultsButton.disabled,
"Restore defaults button should be enabled after undo-reset"
);
is(
titlebarCheckbox.hasAttribute("checked"),
kDefaultValue,
"Title bar checkbox should reflect undo-reset value"
);
ok(!CustomizableUI.inDefaultState, "No longer in default state after undo");
is(
Services.prefs.getIntPref(prefName),
kDefaultValue ? 0 : 1,
"Undo-reset goes back to previous pref value"
);
is(
undoResetButton.hidden,
true,
"Undo reset button should be hidden after undo-reset clicked"
);
Services.prefs.clearUserPref(prefName);
ok(CustomizableUI.inDefaultState, "In default state after pref cleared");
is(
undoResetButton.hidden,
true,
"Undo reset button should be hidden at end of test"
);
});
add_task(async function asyncCleanup() {
await gCustomizeMode.reset();
await endCustomizing();
});