commit 8882fd2ca86bc843060556b8126de75046a35f8f Author: Kathy Brade brade@pearlcrescent.com Date: Tue Aug 25 11:03:21 2015 -0400
fixup! Bug #4234: Use the Firefox Update Process for Tor Browser.
Fixes #13512: After update, load a static tab with change notes.
To use this feature, include the following attributes within the <update> element of each XML update manifest: actions="showURL" openURL="https://..." Within the URL, %OLD_VERSION% will be replaced with the previous Gecko version (e.g., 38.2.0) and %OLD_TOR_BROWSER_VERSION% will be replaced with the previous Tor Browser version (e.g., 5.5a1).
Note that the "Update Installed" window that previously was displayed after an update is no longer opened. --- browser/app/profile/000-tor-browser.js | 9 ++++- browser/app/profile/firefox.js | 2 +- browser/components/nsBrowserContentHandler.js | 50 ++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 4 deletions(-)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js index 5918a3e..b32728b 100644 --- a/browser/app/profile/000-tor-browser.js +++ b/browser/app/profile/000-tor-browser.js @@ -7,9 +7,14 @@ // Disable initial homepage notifications pref("browser.search.update", false); pref("browser.rights.3.shown", true); -pref("browser.startup.homepage_override.mstone", "ignore"); pref("startup.homepage_welcome_url", ""); -pref("startup.homepage_override_url", ""); + +// Set a generic, default URL that will be opened in a tab after an update. +// Typically, this will not be used; instead, the <update> element within +// each update manifest should contain attributes similar to: +// actions="showURL" +// openURL="https://blog.torproject.org/tor-browser-55a2-released" +pref("startup.homepage_override_url", "https://blog.torproject.org/category/tags/tor-browser");
// Try to nag a bit more about updates: Pop up a restart dialog an hour after the initial dialog pref("app.update.promptWaitTime", 3600); diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 53fd8d2..7d9677a 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -190,7 +190,7 @@ pref("app.update.idletime", 60); // upgrade start page instead! Other apps may wish to show this UI, and supply // a whatsNewURL field in their brand.properties that contains a link to a page // which tells users what's new in this new update. -pref("app.update.showInstalledUI", true); +pref("app.update.showInstalledUI", false);
// 0 = suppress prompting for incompatibilities if there are updates available // to newer versions of installed addons that resolve them. diff --git a/browser/components/nsBrowserContentHandler.js b/browser/components/nsBrowserContentHandler.js index 9ae384e..a3465a0 100644 --- a/browser/components/nsBrowserContentHandler.js +++ b/browser/components/nsBrowserContentHandler.js @@ -43,6 +43,10 @@ const NS_ERROR_ABORT = Components.results.NS_ERROR_ABORT; const URI_INHERITS_SECURITY_CONTEXT = Components.interfaces.nsIHttpProtocolHandler .URI_INHERITS_SECURITY_CONTEXT;
+#ifdef TOR_BROWSER_VERSION +const kTBSavedVersionPref = "browser.startup.homepage_override.torbrowser.version"; +#endif + function shouldLoadURI(aURI) { if (aURI && !aURI.schemeIs("chrome")) return true; @@ -94,7 +98,8 @@ const OVERRIDE_NEW_BUILD_ID = 3; * Returns: * OVERRIDE_NEW_PROFILE if this is the first run with a new profile. * OVERRIDE_NEW_MSTONE if this is the first run with a build with a different - * Gecko milestone (i.e. right after an upgrade). + * Gecko milestone or Tor Browser version (i.e. right + * after an upgrade). * OVERRIDE_NEW_BUILD_ID if this is the first run with a new build ID of the * same Gecko milestone (i.e. after a nightly upgrade). * OVERRIDE_NONE otherwise. @@ -110,6 +115,15 @@ function needHomepageOverride(prefb) {
var mstone = Services.appinfo.platformVersion;
+#ifdef TOR_BROWSER_VERSION +#expand const TOR_BROWSER_VERSION = __TOR_BROWSER_VERSION__; + + var savedTBVersion = null; + try { + savedTBVersion = prefb.getCharPref(kTBSavedVersionPref); + } catch (e) {} +#endif + var savedBuildID = null; try { savedBuildID = prefb.getCharPref("browser.startup.homepage_override.buildID"); @@ -127,9 +141,30 @@ function needHomepageOverride(prefb) {
prefb.setCharPref("browser.startup.homepage_override.mstone", mstone); prefb.setCharPref("browser.startup.homepage_override.buildID", buildID); +#ifdef TOR_BROWSER_VERSION + prefb.setCharPref(kTBSavedVersionPref, TOR_BROWSER_VERSION); + + // After an upgrade from an older release of Tor Browser (<= 5.5a1), the + // savedmstone will be undefined because those releases included the + // value "ignore" for the browser.startup.homepage_override.mstone pref. + // To correctly detect an upgrade vs. a new profile, we check for the + // presence of the "app.update.postupdate" pref. + var updated = prefb.prefHasUserValue("app.update.postupdate"); + return (savedmstone || updated) ? OVERRIDE_NEW_MSTONE + : OVERRIDE_NEW_PROFILE; +#else return (savedmstone ? OVERRIDE_NEW_MSTONE : OVERRIDE_NEW_PROFILE); +#endif }
+#ifdef TOR_BROWSER_VERSION + if (TOR_BROWSER_VERSION != savedTBVersion) { + prefb.setCharPref("browser.startup.homepage_override.buildID", buildID); + prefb.setCharPref(kTBSavedVersionPref, TOR_BROWSER_VERSION); + return OVERRIDE_NEW_MSTONE; + } +#endif + if (buildID != savedBuildID) { prefb.setCharPref("browser.startup.homepage_override.buildID", buildID); return OVERRIDE_NEW_BUILD_ID; @@ -572,6 +607,15 @@ nsBrowserContentHandler.prototype = { try { old_mstone = Services.prefs.getCharPref("browser.startup.homepage_override.mstone"); } catch (ex) {} + +#ifdef TOR_BROWSER_VERSION + // We do the same for the Tor Browser version. + var old_tbversion = null; + try { + old_tbversion = prefb.getCharPref(kTBSavedVersionPref); + } catch (e) {} +#endif + let override = needHomepageOverride(prefb); if (override != OVERRIDE_NONE) { switch (override) { @@ -594,6 +638,10 @@ nsBrowserContentHandler.prototype = { overridePage = getPostUpdateOverridePage(overridePage);
overridePage = overridePage.replace("%OLD_VERSION%", old_mstone); +#ifdef TOR_BROWSER_VERSION + overridePage = overridePage.replace("%OLD_TOR_BROWSER_VERSION%", + old_tbversion); +#endif break; } }