summaryrefslogtreecommitdiffstats
path: root/browser/components/customizableui/test/browser_proton_toolbar_hide_toolbarbuttons.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/customizableui/test/browser_proton_toolbar_hide_toolbarbuttons.js')
-rw-r--r--browser/components/customizableui/test/browser_proton_toolbar_hide_toolbarbuttons.js287
1 files changed, 287 insertions, 0 deletions
diff --git a/browser/components/customizableui/test/browser_proton_toolbar_hide_toolbarbuttons.js b/browser/components/customizableui/test/browser_proton_toolbar_hide_toolbarbuttons.js
new file mode 100644
index 0000000000..ef0a44d6b1
--- /dev/null
+++ b/browser/components/customizableui/test/browser_proton_toolbar_hide_toolbarbuttons.js
@@ -0,0 +1,287 @@
+/* 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.defineModuleGetter(
+ this,
+ "HomePage",
+ "resource:///modules/HomePage.jsm"
+);
+
+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();
+});