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 513834 bff0f583c673817e12c12a561deab99a56548af6
parent 513833 4b0600db127a88a72afbbf079c8207825e9abf3c
child 513835 5ecfcb615bd62bb2a7760799c19299fd93921aa7
push id1953
push userffxbld-merge
push dateMon, 11 Mar 2019 12:10:20 +0000
treeherdermozilla-release@9c35dcbaa899 [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.20190116", "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,48 @@ 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) {
+  let isInTests = Cu.isInAutomation || Services.prefs.getBoolPref("marionette.enabled", false);
+  if (AppConstants.NIGHTLY_BUILD && !isInTests) {
+    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 +556,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 = "";