forked from mirrors/gecko-dev
285 lines
8 KiB
JavaScript
285 lines
8 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";
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
HomePage: "resource:///modules/HomePage.sys.mjs",
|
|
});
|
|
|
|
const kPrefProtonToolbarVersion = "browser.proton.toolbar.version";
|
|
const kPrefHomeButtonUsed = "browser.engagement.home-button.has-used";
|
|
const kPrefLibraryButtonUsed = "browser.engagement.library-button.has-used";
|
|
const kPrefSidebarButtonUsed = "browser.engagement.sidebar-button.has-used";
|
|
|
|
async function testToolbarButtons(aActions) {
|
|
let {
|
|
shouldRemoveHomeButton,
|
|
shouldRemoveLibraryButton,
|
|
shouldRemoveSidebarButton,
|
|
shouldUpdateVersion,
|
|
} = aActions;
|
|
const defaultPlacements = [
|
|
"back-button",
|
|
"forward-button",
|
|
"stop-reload-button",
|
|
"home-button",
|
|
"customizableui-special-spring1",
|
|
"urlbar-container",
|
|
"customizableui-special-spring2",
|
|
"downloads-button",
|
|
"library-button",
|
|
"sidebar-button",
|
|
"fxa-toolbar-menu-button",
|
|
];
|
|
let oldState = CustomizableUI.getTestOnlyInternalProp("gSavedState");
|
|
|
|
Assert.equal(
|
|
Services.prefs.getIntPref(kPrefProtonToolbarVersion),
|
|
0,
|
|
"Toolbar proton version is 0"
|
|
);
|
|
|
|
let CustomizableUIInternal = CustomizableUI.getTestOnlyInternalProp(
|
|
"CustomizableUIInternal"
|
|
);
|
|
|
|
CustomizableUI.setTestOnlyInternalProp("gSavedState", {
|
|
placements: {
|
|
"nav-bar": defaultPlacements,
|
|
},
|
|
});
|
|
CustomizableUIInternal._updateForNewProtonVersion();
|
|
|
|
let navbarPlacements =
|
|
CustomizableUI.getTestOnlyInternalProp("gSavedState").placements["nav-bar"];
|
|
let includesHomeButton = navbarPlacements.includes("home-button");
|
|
let includesLibraryButton = navbarPlacements.includes("library-button");
|
|
let includesSidebarButton = navbarPlacements.includes("sidebar-button");
|
|
|
|
Assert.equal(
|
|
!includesHomeButton,
|
|
shouldRemoveHomeButton,
|
|
"Correctly handles home button"
|
|
);
|
|
Assert.equal(
|
|
!includesLibraryButton,
|
|
shouldRemoveLibraryButton,
|
|
"Correctly handles library button"
|
|
);
|
|
Assert.equal(
|
|
!includesSidebarButton,
|
|
shouldRemoveSidebarButton,
|
|
"Correctly handles sidebar button"
|
|
);
|
|
|
|
let toolbarVersion = Services.prefs.getIntPref(kPrefProtonToolbarVersion);
|
|
if (shouldUpdateVersion) {
|
|
Assert.ok(toolbarVersion >= 1, "Toolbar proton version updated");
|
|
} else {
|
|
Assert.ok(toolbarVersion == 0, "Toolbar proton version not updated");
|
|
}
|
|
|
|
// Cleanup
|
|
CustomizableUI.setTestOnlyInternalProp("gSavedState", oldState);
|
|
}
|
|
|
|
/**
|
|
* Checks that the home button is removed from the nav-bar under
|
|
* these conditions: proton must be enabled, the toolbar engagement
|
|
* pref is false, and the homepage is about:home or about:blank.
|
|
* Otherwise, the home button should remain if it was previously
|
|
* in the navbar.
|
|
* Also checks that the library button is removed from the nav-bar
|
|
* if proton is enabled and the toolbar engagement pref is false.
|
|
*/
|
|
add_task(async function testButtonRemoval() {
|
|
// Ensure the engagement prefs are set to their default values
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
[kPrefHomeButtonUsed, false],
|
|
[kPrefLibraryButtonUsed, false],
|
|
[kPrefSidebarButtonUsed, false],
|
|
],
|
|
});
|
|
|
|
let tests = [
|
|
// Proton enabled without home and library engagement
|
|
{
|
|
prefs: [],
|
|
actions: {
|
|
shouldRemoveHomeButton: true,
|
|
shouldRemoveLibraryButton: true,
|
|
shouldRemoveSidebarButton: true,
|
|
shouldUpdateVersion: true,
|
|
},
|
|
},
|
|
// Proton enabled with home engagement
|
|
{
|
|
prefs: [[kPrefHomeButtonUsed, true]],
|
|
actions: {
|
|
shouldRemoveHomeButton: false,
|
|
shouldRemoveLibraryButton: true,
|
|
shouldRemoveSidebarButton: true,
|
|
shouldUpdateVersion: true,
|
|
},
|
|
},
|
|
// Proton enabled with custom homepage
|
|
{
|
|
prefs: [],
|
|
actions: {
|
|
shouldRemoveHomeButton: false,
|
|
shouldRemoveLibraryButton: true,
|
|
shouldRemoveSidebarButton: true,
|
|
shouldUpdateVersion: true,
|
|
},
|
|
async fn() {
|
|
HomePage.safeSet("https://example.com");
|
|
},
|
|
},
|
|
// Proton enabled with library engagement
|
|
{
|
|
prefs: [[kPrefLibraryButtonUsed, true]],
|
|
actions: {
|
|
shouldRemoveHomeButton: true,
|
|
shouldRemoveLibraryButton: false,
|
|
shouldRemoveSidebarButton: true,
|
|
shouldUpdateVersion: true,
|
|
},
|
|
},
|
|
// Proton enabled with sidebar engagement
|
|
{
|
|
prefs: [[kPrefSidebarButtonUsed, true]],
|
|
actions: {
|
|
shouldRemoveHomeButton: true,
|
|
shouldRemoveLibraryButton: true,
|
|
shouldRemoveSidebarButton: false,
|
|
shouldUpdateVersion: true,
|
|
},
|
|
},
|
|
];
|
|
|
|
for (let test of tests) {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [[kPrefProtonToolbarVersion, 0], ...test.prefs],
|
|
});
|
|
if (test.fn) {
|
|
await test.fn();
|
|
}
|
|
testToolbarButtons(test.actions);
|
|
HomePage.reset();
|
|
await SpecialPowers.popPrefEnv();
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Checks that a null saved state (new profile) does not prevent migration.
|
|
*/
|
|
add_task(async function testNullSavedState() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [[kPrefProtonToolbarVersion, 0]],
|
|
});
|
|
let oldState = CustomizableUI.getTestOnlyInternalProp("gSavedState");
|
|
|
|
Assert.equal(
|
|
Services.prefs.getIntPref(kPrefProtonToolbarVersion),
|
|
0,
|
|
"Toolbar proton version is 0"
|
|
);
|
|
|
|
let CustomizableUIInternal = CustomizableUI.getTestOnlyInternalProp(
|
|
"CustomizableUIInternal"
|
|
);
|
|
CustomizableUIInternal.initialize();
|
|
|
|
Assert.ok(
|
|
Services.prefs.getIntPref(kPrefProtonToolbarVersion) >= 1,
|
|
"Toolbar proton version updated"
|
|
);
|
|
let navbarPlacements = CustomizableUI.getTestOnlyInternalProp("gAreas")
|
|
.get("nav-bar")
|
|
.get("defaultPlacements");
|
|
Assert.ok(
|
|
!navbarPlacements.includes("home-button"),
|
|
"Home button isn't included by default"
|
|
);
|
|
Assert.ok(
|
|
!navbarPlacements.includes("library-button"),
|
|
"Library button isn't included by default"
|
|
);
|
|
Assert.ok(
|
|
!navbarPlacements.includes("sidebar-button"),
|
|
"Sidebar button isn't included by default"
|
|
);
|
|
|
|
// Cleanup
|
|
CustomizableUI.setTestOnlyInternalProp("gSavedState", oldState);
|
|
await SpecialPowers.popPrefEnv();
|
|
// Re-initialize to prevent future test failures
|
|
CustomizableUIInternal.initialize();
|
|
});
|
|
|
|
/**
|
|
* Checks that a saved state that is missing nav-bar placements does not prevent migration.
|
|
*/
|
|
add_task(async function testNoNavbarPlacements() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [[kPrefProtonToolbarVersion, 0]],
|
|
});
|
|
|
|
let oldState = CustomizableUI.getTestOnlyInternalProp("gSavedState");
|
|
|
|
Assert.equal(
|
|
Services.prefs.getIntPref(kPrefProtonToolbarVersion),
|
|
0,
|
|
"Toolbar proton version is 0"
|
|
);
|
|
|
|
let CustomizableUIInternal = CustomizableUI.getTestOnlyInternalProp(
|
|
"CustomizableUIInternal"
|
|
);
|
|
|
|
CustomizableUI.setTestOnlyInternalProp("gSavedState", {
|
|
placements: { "widget-overflow-fixed-list": [] },
|
|
});
|
|
CustomizableUIInternal._updateForNewProtonVersion();
|
|
|
|
Assert.ok(true, "_updateForNewProtonVersion didn't throw");
|
|
|
|
// Cleanup
|
|
CustomizableUI.setTestOnlyInternalProp("gSavedState", oldState);
|
|
|
|
await SpecialPowers.popPrefEnv();
|
|
});
|
|
|
|
/**
|
|
* Checks that a saved state that is missing the placements value does not prevent migration.
|
|
*/
|
|
add_task(async function testNullPlacements() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [[kPrefProtonToolbarVersion, 0]],
|
|
});
|
|
|
|
let oldState = CustomizableUI.getTestOnlyInternalProp("gSavedState");
|
|
|
|
Assert.equal(
|
|
Services.prefs.getIntPref(kPrefProtonToolbarVersion),
|
|
0,
|
|
"Toolbar proton version is 0"
|
|
);
|
|
|
|
let CustomizableUIInternal = CustomizableUI.getTestOnlyInternalProp(
|
|
"CustomizableUIInternal"
|
|
);
|
|
|
|
CustomizableUI.setTestOnlyInternalProp("gSavedState", {});
|
|
CustomizableUIInternal._updateForNewProtonVersion();
|
|
|
|
Assert.ok(true, "_updateForNewProtonVersion didn't throw");
|
|
|
|
// Cleanup
|
|
CustomizableUI.setTestOnlyInternalProp("gSavedState", oldState);
|
|
|
|
await SpecialPowers.popPrefEnv();
|
|
});
|