commit b73c0bcfeedb7e5384da04db8829b89603027651
parent 8f823be747db655aef53348b58ea9de4f36c8834
Author: Maxx Crawford <mcrawford@mozilla.com>
Date: Tue, 16 Dec 2025 20:39:11 +0000
Bug 1969953 - Migrate Homepage preferences to new config markup on about:settings#home r=mstriemer,home-newtab-reviewers,fluent-reviewers,bolsson,nina-py,desktop-theme-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D273105
Diffstat:
6 files changed, 202 insertions(+), 8 deletions(-)
diff --git a/browser/components/preferences/home.inc.xhtml b/browser/components/preferences/home.inc.xhtml
@@ -9,7 +9,8 @@
<hbox id="firefoxHomeCategory"
class="subcategory"
hidden="true"
- data-category="paneHome">
+ data-category="paneHome"
+ data-srd-groupid="homepage">
<html:h1 style="flex: 1;" data-l10n-id="pane-home-title"/>
<button id="restoreDefaultHomePageBtn"
is="highlightable-button"
@@ -21,6 +22,7 @@
<groupbox id="homepageGroup"
data-category="paneHome"
+ data-srd-groupid="homepage"
hidden="true">
<label><html:h2 data-l10n-id="home-new-windows-tabs-header"/></label>
<description class="description-deemphasized" data-l10n-id="home-new-windows-tabs-description2" />
@@ -114,6 +116,13 @@
</groupbox>
<html:setting-group
+ groupid="homepage"
+ hidden="true"
+ data-category="paneHome"
+ data-subcategory="contents"
+ />
+
+<html:setting-group
groupid="home"
hidden="true"
data-category="paneHome"
diff --git a/browser/components/preferences/home.js b/browser/components/preferences/home.js
@@ -24,20 +24,112 @@ ChromeUtils.defineESModuleGetters(this, {
* false = about:blank is shown
*/
+const DEFAULT_HOMEPAGE_URL = "about:home";
+const BLANK_HOMEPAGE_URL = "chrome://browser/content/blanktab.html";
+
Preferences.addAll([
- { id: "browser.startup.homepage", type: "wstring" },
+ { id: "browser.startup.homepage", type: "string" },
{ id: "pref.browser.homepage.disable_button.current_page", type: "bool" },
{ id: "pref.browser.homepage.disable_button.bookmark_page", type: "bool" },
- { id: "pref.browser.homepage.disable_button.restore_default", type: "bool" },
+ {
+ id: "pref.browser.homepage.disable_button.restore_default",
+ type: "bool",
+ },
{ id: "browser.newtabpage.enabled", type: "bool" },
]);
+if (Services.prefs.getBoolPref("browser.settings-redesign.enabled")) {
+ // Homepage / New Windows
+ Preferences.addSetting(
+ /** @type {{ useCustomHomepage: boolean } & SettingConfig } */ ({
+ id: "homepageNewWindows",
+ pref: "browser.startup.homepage",
+ useCustomHomepage: false,
+ get(prefVal) {
+ if (this.useCustomHomepage) {
+ return "custom";
+ }
+ switch (prefVal) {
+ case DEFAULT_HOMEPAGE_URL:
+ return "home";
+ case BLANK_HOMEPAGE_URL:
+ return "blank";
+ // Bug 1969951 - Custom value can be any string so leaving it as default value to catch
+ // non-default/blank entires.
+ default:
+ return "custom";
+ }
+ },
+ set(inputVal, _, setting) {
+ let wasCustomHomepage = this.useCustomHomepage;
+ this.useCustomHomepage = inputVal == "custom";
+ if (wasCustomHomepage != this.useCustomHomepage) {
+ setting.onChange();
+ }
+ switch (inputVal) {
+ case "home":
+ return DEFAULT_HOMEPAGE_URL;
+ case "blank":
+ return BLANK_HOMEPAGE_URL;
+ case "custom":
+ // Bug 1969951 - Add values set in subpage here
+ return setting.pref.value;
+ default:
+ throw new Error("No handler for this value");
+ }
+ },
+ })
+ );
+
+ // Homepage / Choose Custom Homepage URL Button
+ Preferences.addSetting({
+ id: "homepageGoToCustomHomepageUrlPanel",
+ deps: ["homepageNewWindows"],
+ visible: ({ homepageNewWindows }) => {
+ return homepageNewWindows.value == "custom";
+ },
+ onUserClick: () => {
+ // Bug 1969951 - Navigate to Custom Homepage Subpage
+ },
+ });
+
+ // Homepage / New Tabs
+ Preferences.addSetting({
+ id: "homepageNewTabs",
+ pref: "browser.newtabpage.enabled",
+ get(prefVal) {
+ return prefVal.toString();
+ },
+ set(inputVal) {
+ return inputVal === "true";
+ },
+ });
+
+ // Homepage / Restore Defaults button
+ Preferences.addSetting({
+ id: "homepageRestoreDefaults",
+ pref: "pref.browser.homepage.disable_button.restore_default",
+ deps: ["homepageNewWindows", "homepageNewTabs"],
+ disabled: ({ homepageNewWindows, homepageNewTabs }) => {
+ return (
+ homepageNewWindows.value === "home" && homepageNewTabs.value === "true"
+ );
+ },
+ onUserClick: (e, { homepageNewWindows, homepageNewTabs }) => {
+ e.preventDefault();
+
+ // Bug 1969951 - This is temporary until the custom URL subpage is implemented.
+ // Once users can set custom URLs in the subpage, this will properly reset those values.
+ homepageNewWindows.value = "home";
+ homepageNewTabs.value = "true";
+ },
+ });
+}
+
const HOMEPAGE_OVERRIDE_KEY = "homepage_override";
const URL_OVERRIDES_TYPE = "url_overrides";
const NEW_TAB_KEY = "newTabURL";
-const BLANK_HOMEPAGE_URL = "chrome://browser/content/blanktab.html";
-
// New Prefs UI: we need to check for this setting before registering prefs
// so that old-style prefs continue working
if (Services.prefs.getBoolPref("browser.settings-redesign.enabled")) {
@@ -149,6 +241,7 @@ if (Services.prefs.getBoolPref("browser.settings-redesign.enabled")) {
id: "showWeather",
pref: "browser.newtabpage.activity-stream.system.showWeather",
});
+
Preferences.addSetting({
id: "weather",
pref: "browser.newtabpage.activity-stream.showWeather",
@@ -161,6 +254,7 @@ if (Services.prefs.getBoolPref("browser.settings-redesign.enabled")) {
id: "widgetsEnabled",
pref: "browser.newtabpage.activity-stream.widgets.system.enabled",
});
+
Preferences.addSetting({
id: "widgets",
pref: "browser.newtabpage.activity-stream.widgets.enabled",
@@ -173,6 +267,7 @@ if (Services.prefs.getBoolPref("browser.settings-redesign.enabled")) {
id: "listsEnabled",
pref: "browser.newtabpage.activity-stream.widgets.system.lists.enabled",
});
+
Preferences.addSetting({
id: "lists",
pref: "browser.newtabpage.activity-stream.widgets.lists.enabled",
@@ -185,6 +280,7 @@ if (Services.prefs.getBoolPref("browser.settings-redesign.enabled")) {
id: "timerEnabled",
pref: "browser.newtabpage.activity-stream.widgets.system.focusTimer.enabled",
});
+
Preferences.addSetting({
id: "timer",
pref: "browser.newtabpage.activity-stream.widgets.focusTimer.enabled",
@@ -944,6 +1040,7 @@ var gHomePane = {
},
init() {
+ initSettingGroup("homepage");
initSettingGroup("home");
// Event Listeners
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
@@ -2008,6 +2008,49 @@ SettingGroupManager.registerGroups({
},
],
},
+ homepage: {
+ inProgress: true,
+ headingLevel: 2,
+ l10nId: "home-homepage-title",
+ items: [
+ {
+ id: "homepageNewWindows",
+ control: "moz-select",
+ l10nId: "home-homepage-new-windows",
+ options: [
+ {
+ value: "home",
+ l10nId: "home-mode-choice-default-fx",
+ },
+ { value: "blank", l10nId: "home-mode-choice-blank" },
+ { value: "custom", l10nId: "home-mode-choice-custom" },
+ ],
+ },
+ {
+ id: "homepageGoToCustomHomepageUrlPanel",
+ control: "moz-box-button",
+ l10nId: "home-homepage-custom-homepage-button",
+ },
+ {
+ id: "homepageNewTabs",
+ control: "moz-select",
+ l10nId: "home-homepage-new-tabs",
+ options: [
+ {
+ value: "true",
+ l10nId: "home-mode-choice-default-fx",
+ },
+ { value: "false", l10nId: "home-mode-choice-blank" },
+ ],
+ },
+ {
+ id: "homepageRestoreDefaults",
+ control: "moz-button",
+ l10nId: "home-restore-defaults",
+ controlAttrs: { id: "restoreDefaultHomePageBtn" },
+ },
+ ],
+ },
home: {
inProgress: true,
headingLevel: 2,
diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
@@ -722,14 +722,19 @@ home-new-windows-tabs-description2 = Choose what you see when you open your home
## Home Section - Home Page Customization
-home-homepage-header = Homepage
+home-homepage-title =
+ .label = Homepage
home-homepage-mode-label = Homepage and new windows
-home-homepage-mode-label2 = New windows
+home-homepage-new-windows =
+ .label = New windows
home-newtabs-mode-label = New tabs
+home-homepage-new-tabs =
+ .label = New tabs
+
home-restore-defaults =
.label = Restore Defaults
.accesskey = R
@@ -751,7 +756,8 @@ home-homepage-manage-extension-button =
.label = Manage extension
# This option leads to the "Custom Homepage" subpage
-home-homepage-custom-homepage-url = Choose a specific site
+home-homepage-custom-homepage-button =
+ .label = Choose a specific site
## Custom Homepage subpage
diff --git a/browser/themes/shared/preferences/preferences.css b/browser/themes/shared/preferences/preferences.css
@@ -1406,6 +1406,13 @@ richlistitem .text-link:hover {
}
/** SRD web-appearance-chooser control END **/
+/** SRD rows control for Homepage START **/
+setting-group[groupid="homepage"] {
+ --select-max-width: fit-content;
+ --select-min-width: 15em;
+}
+/** SRD rows control for Homepage END **/
+
/** SRD rows control for New Tab START **/
setting-group[groupid="home"] {
--select-max-width: 17rem;
diff --git a/python/l10n/fluent_migrations/bug_1969953_settings_redesign_homepage_labels.py b/python/l10n/fluent_migrations/bug_1969953_settings_redesign_homepage_labels.py
@@ -0,0 +1,32 @@
+# Any copyright is dedicated to the Public Domain.
+# http://creativecommons.org/publicdomain/zero/1.0/
+
+from fluent.migrate.helpers import transforms_from
+
+
+def migrate(ctx):
+ """Bug 1969953 - Move Homepage settings strings to .label attributes, part {index}."""
+
+ source = "browser/browser/preferences/preferences.ftl"
+ target = source
+
+ ctx.add_transforms(
+ target,
+ target,
+ transforms_from(
+ """
+home-homepage-title =
+ .label = { COPY_PATTERN(from_path, "home-homepage-header") }
+
+home-homepage-new-windows =
+ .label = { COPY_PATTERN(from_path, "home-homepage-mode-label2") }
+
+home-homepage-new-tabs =
+ .label = { COPY_PATTERN(from_path, "home-newtabs-mode-label") }
+
+home-homepage-custom-homepage-button =
+ .label = { COPY_PATTERN(from_path, "home-homepage-custom-homepage-url") }
+""",
+ from_path=source,
+ ),
+ )