Bug 1518799: Show a custom page on startup on Nightly on a specific date. r=Gijs
authorDave Townsend <dtownsend@oxymoronical.com>
Fri, 11 Jan 2019 17:23:11 +0000
changeset 453509 eace4709948cdf060a36a60c00eeb286cb7acb17
parent 453508 fd2b5b6a3048f5e7680508b4dc2900f4d3e56480
child 453510 3e29a26d22b2d57b215b1eddbc8cd0e597888048
push id35357
push usernerli@mozilla.com
push dateFri, 11 Jan 2019 21:54:07 +0000
treeherdermozilla-central@0ce024c91511 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersGijs
bugs1518799
milestone66.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1518799: Show a custom page on startup on Nightly on a specific date. r=Gijs We want to show an informative message about dedicated profiles per channel to users of Nightly on a specific date. We currently only have the ability to do this when the version changes. This adds the ability to show a page once on startup on a specific date. This will probably be backed out past that date. Differential Revision: https://phabricator.services.mozilla.com/D16249
browser/branding/nightly/pref/firefox-branding.js
browser/components/nsBrowserContentHandler.js
--- a/browser/branding/nightly/pref/firefox-branding.js
+++ b/browser/branding/nightly/pref/firefox-branding.js
@@ -1,12 +1,13 @@
 /* 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/. */
 
+pref("startup.homepage_override_nightly.20190114", "https://www.mozilla.org/firefox/dedicated-profiles/");
 pref("startup.homepage_override_url", "https://www.mozilla.org/projects/firefox/%VERSION%/whatsnew/?oldversion=%OLD_VERSION%");
 pref("startup.homepage_welcome_url", "https://www.mozilla.org/projects/firefox/%VERSION%/firstrun/");
 pref("startup.homepage_welcome_url.additional", "");
 // The time interval between checks for a new version (in seconds)
 pref("app.update.interval", 7200); // 2 hours
 // Give the user x seconds to react before showing the big UI. default=12 hours
 pref("app.update.promptWaitTime", 43200);
 // URL user can browse to manually if for some reason all update installation
--- a/browser/components/nsBrowserContentHandler.js
+++ b/browser/components/nsBrowserContentHandler.js
@@ -56,31 +56,47 @@ function resolveURIInternal(aCmdLine, aA
     Cu.reportError(e);
   }
 
   return uri;
 }
 
 var gFirstWindow = false;
 
+function getNormalizedDate() {
+  let pad = num => ("" + num).padStart(2, "0");
+
+  let date = new Date();
+  return `${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}`;
+}
+
 const OVERRIDE_NONE        = 0;
 const OVERRIDE_NEW_PROFILE = 1;
 const OVERRIDE_NEW_MSTONE  = 2;
 const OVERRIDE_NEW_BUILD_ID = 3;
+const OVERRIDE_NIGHTLY     = 4;
 /**
  * Determines whether a home page override is needed.
  * 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).
  *  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.
  */
 function needHomepageOverride(prefb) {
+  if (AppConstants.NIGHTLY_BUILD && !Cu.isInAutomation) {
+    let pref = `startup.homepage_override_nightly.${getNormalizedDate()}`;
+    let url = Services.prefs.getCharPref(pref, "");
+    if (url) {
+      return OVERRIDE_NIGHTLY;
+    }
+  }
+
   var savedmstone = prefb.getCharPref("browser.startup.homepage_override.mstone", "");
 
   if (savedmstone == "ignore")
     return OVERRIDE_NONE;
 
   var mstone = Services.appinfo.platformVersion;
 
   var savedBuildID = prefb.getCharPref("browser.startup.homepage_override.buildID", "");
@@ -539,16 +555,22 @@ nsBrowserContentHandler.prototype = {
             overridePage = overridePage.replace("%OLD_VERSION%", old_mstone);
             break;
           case OVERRIDE_NEW_BUILD_ID:
             if (prefb.prefHasUserValue("app.update.postupdate")) {
               // Send the update ping to signal that the update was successful.
               UpdatePing.handleUpdateSuccess(old_mstone, old_buildId);
             }
             break;
+          case OVERRIDE_NIGHTLY:
+            // Opens a page on the first startup on a particular day.
+            let pref = `startup.homepage_override_nightly.${getNormalizedDate()}`;
+            overridePage = Services.prefs.getCharPref(pref);
+            Services.prefs.setCharPref(pref, "");
+            break;
         }
       }
     } catch (ex) {}
 
     // formatURLPref might return "about:blank" if getting the pref fails
     if (overridePage == "about:blank")
       overridePage = "";