Skip to content

Instantly share code, notes, and snippets.

@piatra
Last active June 5, 2018 22:55
Show Gist options
  • Save piatra/25040812784ebc472149bab8559e5f3f to your computer and use it in GitHub Desktop.
Save piatra/25040812784ebc472149bab8559e5f3f to your computer and use it in GitHub Desktop.
patch
diff --git a/browser/components/preferences/in-content/home.js b/browser/components/preferences/in-content/home.js
index e6e02c24c9e1..20cbf7db56e7 100644
--- a/browser/components/preferences/in-content/home.js
+++ b/browser/components/preferences/in-content/home.js
@@ -31,13 +31,45 @@ Preferences.addAll([
const HOMEPAGE_OVERRIDE_KEY = "homepage_override";
const URL_OVERRIDES_TYPE = "url_overrides";
const NEW_TAB_KEY = "newTabURL";
+const ACTIVITY_STREAM_PREF_BRANCH = "browser.newtabpage.activity-stream.";
+const NEWTAB_ENABLED_PREF = "browser.newtabpage.enabled";
+
+const homePagePreferenceObserver = {
+ _initialized: false,
+
+ init() {
+ if (this._initialized) {
+ return;
+ }
+
+ Services.prefs.addObserver(ACTIVITY_STREAM_PREF_BRANCH, this);
+ Services.prefs.addObserver("browser.startup.homepage", this);
+ Services.prefs.addObserver(NEWTAB_ENABLED_PREF, this);
+
+ window.addEventListener("unload", () => {
+ Services.prefs.removeObserver(ACTIVITY_STREAM_PREF_BRANCH, this);
+ Services.prefs.removeObserver("browser.startup.homepage", this);
+ Services.prefs.removeObserver(NEWTAB_ENABLED_PREF, this);
+
+ this._initialized = false;
+ });
+
+ this._initialized = true;
+ },
+
+ observe(aSubject, aTopic, aData) {
+ if (aTopic != "nsPref:changed") {
+ return;
+ }
+
+ gHomePane.updateDefaultBtn();
+ },
+}
let gHomePane = {
HOME_MODE_FIREFOX_HOME: "0",
HOME_MODE_BLANK: "1",
HOME_MODE_CUSTOM: "2",
- NEWTAB_ENABLED_PREF: "browser.newtabpage.enabled",
-
/**
* _handleNewTabOverrides: disables new tab settings UI. Called by
* an observer in ._watchNewTab that watches for new tab url changes
@@ -221,7 +253,7 @@ let gHomePane = {
},
syncFromNewTabPref() {
- const newtabPref = Preferences.get(this.NEWTAB_ENABLED_PREF);
+ const newtabPref = Preferences.get(NEWTAB_ENABLED_PREF);
return newtabPref.value ? this.HOME_MODE_FIREFOX_HOME : this.HOME_MODE_BLANK;
},
@@ -327,7 +359,7 @@ let gHomePane = {
restoreDefaultHomePage() {
const homePref = Preferences.get("browser.startup.homepage");
- const newtabPref = Preferences.get(this.NEWTAB_ENABLED_PREF);
+ const newtabPref = Preferences.get(NEWTAB_ENABLED_PREF);
homePref.value = homePref.defaultValue;
newtabPref.value = newtabPref.defaultValue;
},
@@ -354,6 +386,31 @@ let gHomePane = {
homePref.value = value;
},
+ _changedHomeTabDefaultPrefs() {
+ const homeContentChanged = Preferences.getAll().filter(pref => pref.id.includes("activity-stream"))
+ .some(pref => pref.hasUserValue);
+ const homePref = Preferences.get("browser.startup.homepage");
+ const newtabPref = Preferences.get(NEWTAB_ENABLED_PREF);
+
+ return homeContentChanged ||
+ (homePref.value !== homePref.defaultValue) ||
+ newtabPref.hasUserValue;
+ },
+
+ updateDefaultBtn() {
+ const btn = document.getElementById("restoreDefaultHomePageBtn");
+ const prefChanged = this._changedHomeTabDefaultPrefs();
+ btn.style.visibility = prefChanged ? "visible" : "hidden";
+ },
+
+ restoreDefaultsForHomeTab() {
+ this.restoreDefaultHomePage();
+ Preferences.getAll().filter(pref => pref.id.includes("activity-stream"))
+ .forEach(pref => pref.value = pref.defaultValue);
+
+ document.getElementById("restoreDefaultHomePageBtn").style.visibility = "hidden";
+ },
+
init() {
// Event Listeners
document.getElementById("homeMode").addEventListener("command", this.onMenuChange.bind(this));
@@ -361,7 +418,7 @@ let gHomePane = {
document.getElementById("homePageUrl").addEventListener("input", this.onCustomHomePageInput.bind(this));
document.getElementById("useCurrentBtn").addEventListener("command", this.setHomePageToCurrent.bind(this));
document.getElementById("useBookmarkBtn").addEventListener("command", this.setHomePageToBookmark.bind(this));
- document.getElementById("restoreDefaultHomePageBtn").addEventListener("command", this.restoreDefaultHomePage.bind(this));
+ document.getElementById("restoreDefaultHomePageBtn").addEventListener("command", this.restoreDefaultsForHomeTab.bind(this));
this._updateUseCurrentButton();
window.addEventListener("focus", this._updateUseCurrentButton.bind(this));
@@ -373,6 +430,7 @@ let gHomePane = {
document.getElementById("disableNewTabExtension").addEventListener("command",
makeDisableControllingExtension(URL_OVERRIDES_TYPE, NEW_TAB_KEY));
+ homePagePreferenceObserver.init();
// Notify observers that the UI is now ready
Services.obs.notifyObservers(window, "home-pane-loaded");
}
diff --git a/browser/extensions/activity-stream/lib/AboutPreferences.jsm b/browser/extensions/activity-stream/lib/AboutPreferences.jsm
index a4a3748084fa..826190a6f698 100644
--- a/browser/extensions/activity-stream/lib/AboutPreferences.jsm
+++ b/browser/extensions/activity-stream/lib/AboutPreferences.jsm
@@ -65,6 +65,9 @@ const CUSTOM_CSS = `
}
`;
+const NEWTAB_ENABLED_PREF = "browser.newtabpage.enabled";
+const STARTUP_HOMEPAGE_PREF = "browser.startup.homepage";
+
this.AboutPreferences = class AboutPreferences {
init() {
Services.obs.addObserver(this, PREFERENCES_LOADED_EVENT);
@@ -126,6 +129,7 @@ this.AboutPreferences = class AboutPreferences {
// Helper to create a new element and append it
const createAppend = (tag, parent) => parent.appendChild(
document.createElementNS(XUL_NS, tag));
+ const restoreDefaultPrefsBtn = document.getElementById("restoreDefaultHomePageBtn");
// Helper to get strings and format with values if necessary
const formatString = id => {
@@ -149,8 +153,19 @@ this.AboutPreferences = class AboutPreferences {
// Prevent changing the UI if the preference can't be changed
element.disabled = Preferences.get(fullPref).locked;
+
+ // TODO
+ if (Preferences.get(fullPref).hasUserValue) {
+ restoreDefaultPrefsBtn.style.visibility = "visible";
+ }
};
+ const homePref = Preferences.get(STARTUP_HOMEPAGE_PREF);
+ const newtabPref = Preferences.get(NEWTAB_ENABLED_PREF);
+ if ((homePref.value === homePref.defaultValue) && !newtabPref.hasUserValue) {
+ restoreDefaultPrefsBtn.style.visibility = "hidden";
+ }
+
// Add in custom styling
document.insertBefore(document.createProcessingInstruction("xml-stylesheet",
`href="data:text/css,${encodeURIComponent(CUSTOM_CSS)}" type="text/css"`),
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment