Bug 1409054 - Remove code from the old about:home. r=Mardak
authorFelipe Gomes <felipc@gmail.com>
Tue, 22 May 2018 00:45:44 -0300
changeset 473824 81367b23ee5fe12feaa61523f87c8b74bbbc4d27
parent 473823 d67b21a431e5e495802527018434e83f43bdbe1c
child 473825 a882645f3abc222dc10bf11fc939347b3cc1c00a
push id9374
push userjlund@mozilla.com
push dateMon, 18 Jun 2018 21:43:20 +0000
treeherdermozilla-beta@160e085dfb0b [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersMardak
bugs1409054
milestone62.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 1409054 - Remove code from the old about:home. r=Mardak MozReview-Commit-ID: JrgIFr2kAvI
browser/app/profile/firefox.js
browser/base/content/abouthome/aboutHome.css
browser/base/content/abouthome/aboutHome.js
browser/base/content/abouthome/aboutHome.xhtml
browser/base/content/abouthome/addons.png
browser/base/content/abouthome/addons@2x.png
browser/base/content/abouthome/bookmarks.png
browser/base/content/abouthome/bookmarks@2x.png
browser/base/content/abouthome/downloads.png
browser/base/content/abouthome/downloads@2x.png
browser/base/content/abouthome/history.png
browser/base/content/abouthome/history@2x.png
browser/base/content/abouthome/restore-large.png
browser/base/content/abouthome/restore-large@2x.png
browser/base/content/abouthome/restore.png
browser/base/content/abouthome/restore@2x.png
browser/base/content/abouthome/settings.png
browser/base/content/abouthome/settings@2x.png
browser/base/content/abouthome/snippet1.png
browser/base/content/abouthome/snippet1@2x.png
browser/base/content/abouthome/snippet2.png
browser/base/content/abouthome/snippet2@2x.png
browser/base/content/abouthome/sync.png
browser/base/content/abouthome/sync@2x.png
browser/base/content/browser.js
browser/base/content/tab-content.js
browser/base/content/test/about/aboutHome_content_script.js
browser/base/content/test/about/browser.ini
browser/base/content/test/about/browser_aboutHome_imitate.js
browser/base/content/test/about/browser_aboutHome_input.js
browser/base/content/test/about/browser_aboutHome_snippets.js
browser/base/content/test/about/browser_aboutHome_wrapsCorrectly.js
browser/base/content/test/about/test_bug959531.html
browser/base/jar.mn
browser/branding/unofficial/content/about-logo@2x.png
browser/branding/unofficial/content/jar.mn
browser/components/newtab/aboutNewTabService.js
browser/components/nsBrowserGlue.js
browser/locales/en-US/chrome/browser/aboutHome.dtd
browser/locales/jar.mn
browser/modules/AboutHome.jsm
browser/modules/moz.build
tools/lint/eslint/modules.json
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -828,25 +828,16 @@ pref("gecko.handlerService.schemes.ircs.
 pref("gecko.handlerService.schemes.ircs.1.uriTemplate", "chrome://browser-region/locale/region.properties");
 pref("gecko.handlerService.schemes.ircs.2.name", "chrome://browser-region/locale/region.properties");
 pref("gecko.handlerService.schemes.ircs.2.uriTemplate", "chrome://browser-region/locale/region.properties");
 pref("gecko.handlerService.schemes.ircs.3.name", "chrome://browser-region/locale/region.properties");
 pref("gecko.handlerService.schemes.ircs.3.uriTemplate", "chrome://browser-region/locale/region.properties");
 
 pref("browser.geolocation.warning.infoURL", "https://www.mozilla.org/%LOCALE%/firefox/geolocation/");
 
-pref("browser.EULA.version", 3);
-pref("browser.rights.version", 3);
-pref("browser.rights.3.shown", false);
-
-#ifdef DEBUG
-// Don't show the about:rights notification in debug builds.
-pref("browser.rights.override", true);
-#endif
-
 pref("browser.sessionstore.resume_from_crash", true);
 pref("browser.sessionstore.resume_session_once", false);
 pref("browser.sessionstore.resuming_after_os_restart", false);
 
 // Minimal interval between two save operations in milliseconds (while the user is active).
 pref("browser.sessionstore.interval", 15000); // 15 seconds
 
 // Minimal interval between two save operations in milliseconds (while the user is idle).
deleted file mode 100644
--- a/browser/base/content/abouthome/aboutHome.css
+++ /dev/null
@@ -1,430 +0,0 @@
-%if 0
-/* 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/. */
-%endif
-
-html {
-  font: message-box;
-  font-size: 100%;
-  background-color: #F9F9FA;
-  color: #0C0C0D;
-  height: 100%;
-}
-
-body {
-  margin: 0;
-  display: -moz-box;
-  -moz-box-orient: vertical;
-  width: 100%;
-  height: 100%;
-}
-
-input,
-button {
-  font-size: inherit;
-  font-family: inherit;
-}
-
-a {
-  color: -moz-nativehyperlinktext;
-  text-decoration: none;
-}
-
-.spacer {
-  -moz-box-flex: 1;
-}
-
-#topSection {
-  text-align: center;
-  margin-top: -90px;
-  position: relative;
-}
-
-#brandLogo {
-  height: 192px;
-  width: 192px;
-  margin: 0 auto 20px;
-  background-image: url("chrome://branding/content/about-logo.png");
-  background-size: 192px auto;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-#searchWrapper,
-#snippets {
-  width: 470px;
-}
-
-#searchWrapper {
-  cursor: default;
-  display: flex;
-  position: relative;
-  margin: 0 auto;
-  height: 36px;
-}
-
-#searchText {
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  border-radius: 3px;
-  box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
-  color: inherit;
-  padding: 0;
-  padding-inline-end: 36px;
-  padding-inline-start: 35px;
-  width: 100%;
-  font-size: 15px;
-}
-
-#searchText:active,
-#searchText:focus {
-  border-color: #0A84FF;
-  box-shadow: 0 0 0 2px #0A84FF;
-}
-
-#searchIcon {
-  background: url("chrome://browser/skin/search-glass.svg") no-repeat 12px center/16px;
-  fill: rgba(12, 12, 13, 0.4);
-  -moz-context-properties: fill;
-  position: absolute;
-  offset-inline-start: 0;
-  height: 35px;
-  width: 35px;
-}
-
-#searchSubmit {
-  background: url("chrome://browser/skin/forward.svg") no-repeat center center;
-  border-radius: 0 3px 3px 0;
-  border: 0;
-  width: 36px;
-  fill: rgba(12, 12, 13, 0.4);
-  -moz-context-properties: fill;
-  background-size: 16px 16px;
-  height: 100%;
-  offset-inline-end: 0;
-  position: absolute;
-  color: transparent;
-}
-
-#searchSubmit:focus, #searchSubmit:hover {
-  background-color: rgba(12, 12, 13, 0.1);
-  cursor: pointer;
-}
-
-#searchSubmit:active {
-  background-color: rgba(12, 12, 13, 0.15);
-}
-
-#searchSubmit:dir(rtl) {
-  transform: scaleX(-1);
-}
-
-.contentSearchSuggestionTable {
-  border: 0;
-  transform: translateY(2px);
-}
-
-#defaultSnippet1,
-#defaultSnippet2,
-#rightsSnippet {
-  display: block;
-  min-height: 38px;
-  background: 0 center no-repeat;
-  padding: 6px 0;
-  padding-inline-start: 49px;
-}
-
-#rightsSnippet[hidden] {
-  display: none;
-}
-
-#defaultSnippet1:dir(rtl),
-#defaultSnippet2:dir(rtl),
-#rightsSnippet:dir(rtl) {
-  background-position: right 0 center;
-}
-
-#defaultSnippet1 {
-  background-image: url("chrome://browser/content/abouthome/snippet1.png");
-}
-
-#defaultSnippet2 {
-  background-image: url("chrome://browser/content/abouthome/snippet2.png");
-}
-
-#snippets {
-  display: inline-block;
-  text-align: start;
-  margin: 12px 0;
-  color: #3c3c3c;
-  font-size: 75%;
-  /* 12px is the computed font size, 15px the computed line height of the snippets
-     with Segoe UI on a default Windows 7 setup. The 15/12 multiplier approximately
-     converts em from units of font-size to units of line-height. The goal is to
-     preset the height of a three-line snippet to avoid visual moving/flickering as
-     the snippets load. */
-  min-height: calc(15/12 * 3em);
-}
-
-#launcher {
-  display: none;
-  -moz-box-align: center;
-  -moz-box-pack: center;
-  width: 100%;
-  background-color: hsla(0,0%,0%,.03);
-  border-top: 1px solid hsla(0,0%,0%,.03);
-  box-shadow: 0 1px 2px hsla(0,0%,0%,.02) inset,
-              0 -1px 0 hsla(0,0%,100%,.25);
-}
-
-#launcher:not([session]),
-body[narrow] #launcher[session] {
-  display: none; /* display separator and restore button on separate lines */
-  text-align: center;
-  white-space: nowrap; /* prevent navigational buttons from wrapping */
-}
-
-.launchButton {
-  display: -moz-box;
-  -moz-box-orient: vertical;
-  margin: 16px 1px;
-  padding: 14px 6px;
-  min-width: 88px;
-  max-width: 176px;
-  max-height: 85px;
-  vertical-align: top;
-  white-space: normal;
-  background: transparent padding-box;
-  border: 1px solid transparent;
-  border-radius: 2px;
-  color: #525c66;
-  font-size: 75%;
-  cursor: pointer;
-  transition-property: background-color, border-color, box-shadow;
-  transition-duration: 150ms;
-}
-
-body[narrow] #launcher[session] > .launchButton {
-  margin: 4px 1px;
-}
-
-.launchButton:hover {
-  background-color: hsla(211,79%,6%,.03);
-  border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
-}
-
-.launchButton:hover:active {
-  background-image: linear-gradient(hsla(211,79%,6%,.02), hsla(211,79%,6%,.05));
-  border-color: hsla(210,54%,20%,.2) hsla(210,54%,20%,.23) hsla(210,54%,20%,.25);
-  box-shadow: 0 1px 1px hsla(211,79%,6%,.05) inset,
-              0 0 1px hsla(211,79%,6%,.1) inset;
-  transition-duration: 0ms;
-}
-
-.launchButton[hidden],
-#launcher:not([session]) > #restorePreviousSessionSeparator,
-#launcher:not([session]) > #restorePreviousSession {
-  display: none;
-}
-
-#restorePreviousSessionSeparator {
-  width: 3px;
-  height: 116px;
-  margin: 0 10px;
-  background-image: linear-gradient(hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0)),
-                    linear-gradient(hsla(211,79%,6%,0), hsla(211,79%,6%,.2), hsla(211,79%,6%,0)),
-                    linear-gradient(hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0));
-  background-position: left top, center, right bottom;
-  background-size: 1px auto;
-  background-repeat: no-repeat;
-}
-
-body[narrow] #restorePreviousSessionSeparator {
-  margin: 0 auto;
-  width: 512px;
-  height: 3px;
-  background-image: linear-gradient(to right, hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0)),
-                    linear-gradient(to right, hsla(211,79%,6%,0), hsla(211,79%,6%,.2), hsla(211,79%,6%,0)),
-                    linear-gradient(to right, hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0));
-  background-size: auto 1px;
-}
-
-#restorePreviousSession {
-  max-width: none;
-  font-size: 90%;
-}
-
-body[narrow] #restorePreviousSession {
-  font-size: 80%;
-}
-
-.launchButton::before {
-  display: block;
-  width: 32px;
-  height: 32px;
-  margin: 0 auto 6px;
-  line-height: 0; /* remove extra vertical space due to non-zero font-size */
-}
-
-#downloads::before {
-  content: url("chrome://browser/content/abouthome/downloads.png");
-}
-
-#bookmarks::before {
-  content: url("chrome://browser/content/abouthome/bookmarks.png");
-}
-
-#history::before {
-  content: url("chrome://browser/content/abouthome/history.png");
-}
-
-#addons::before {
-  content: url("chrome://browser/content/abouthome/addons.png");
-}
-
-#sync::before {
-  content: url("chrome://browser/content/abouthome/sync.png");
-}
-
-#settings::before {
-  content: url("chrome://browser/content/abouthome/settings.png");
-}
-
-#restorePreviousSession::before {
-  content: url("chrome://browser/content/abouthome/restore-large.png");
-  height: 48px;
-  width: 48px;
-  display: inline-block; /* display on same line as text label */
-  vertical-align: middle;
-  margin-bottom: 0;
-  margin-inline-end: 8px;
-}
-
-#restorePreviousSession:dir(rtl)::before {
-  transform: scaleX(-1);
-}
-
-body[narrow] #restorePreviousSession::before {
-  content: url("chrome://browser/content/abouthome/restore.png");
-  height: 32px;
-  width: 32px;
-}
-
-/* [HiDPI]
- * At resolutions above 1dppx, prefer downscaling the 2x Retina graphics
- * rather than upscaling the original-size ones (bug 818940).
- */
-@media not all and (max-resolution: 1dppx) {
-  #brandLogo {
-    background-image: url("chrome://branding/content/about-logo@2x.png");
-  }
-
-  #defaultSnippet1,
-  #defaultSnippet2,
-  #rightsSnippet {
-    background-size: 40px;
-  }
-
-  #defaultSnippet1 {
-    background-image: url("chrome://browser/content/abouthome/snippet1@2x.png");
-  }
-
-  #defaultSnippet2 {
-    background-image: url("chrome://browser/content/abouthome/snippet2@2x.png");
-  }
-
-  .launchButton::before {
-    transform: scale(.5);
-    transform-origin: 0 0;
-  }
-
-  .launchButton:dir(rtl)::before {
-    transform: scale(.5) translateX(32px);
-  }
-
-  #downloads::before {
-    content: url("chrome://browser/content/abouthome/downloads@2x.png");
-  }
-
-  #bookmarks::before {
-    content: url("chrome://browser/content/abouthome/bookmarks@2x.png");
-  }
-
-  #history::before {
-    content: url("chrome://browser/content/abouthome/history@2x.png");
-  }
-
-  #addons::before {
-    content: url("chrome://browser/content/abouthome/addons@2x.png");
-  }
-
-  #sync::before {
-    content: url("chrome://browser/content/abouthome/sync@2x.png");
-  }
-
-  #settings::before {
-    content: url("chrome://browser/content/abouthome/settings@2x.png");
-  }
-
-  #restorePreviousSession::before {
-    content: url("chrome://browser/content/abouthome/restore-large@2x.png");
-  }
-
-  body[narrow] #restorePreviousSession::before {
-    content: url("chrome://browser/content/abouthome/restore@2x.png");
-  }
-
-  #restorePreviousSession:dir(rtl)::before {
-    transform: scale(-0.5, 0.5) translateX(24px);
-    transform-origin: top center;
-  }
-}
-
-/* Overrides for onboarding
-   These overrides hide the Firefox logo (since about:home has a
-   large logo already) and make the helper icon larger */
-
-#about-home #onboarding-notification-body,
-#about-home #onboarding-notification-tour-title {
-  color: #0C0C0D;
-}
-
-#about-home #onboarding-notification-body {
-  padding-inline-start: 46px;
-}
-
-#about-home #onboarding-notification-tour-message {
-  margin-bottom: 0;
-}
-
-#about-home #onboarding-notification-tour-icon {
-  display: none;
-}
-
-#about-home #onboarding-notification-tour-title::before {
-  display: block;
-  position: absolute;
-  top: 0;
-  offset-inline-start: 0;
-  height: 100%;
-  width: 42px;
-  background-size: 42px;
-  background-position: center;
-  -moz-context-properties: fill;
-  fill: #4A4A4F;
-}
-
-#about-home #onboarding-notification-bar {
-  z-index: 100;
-}
-
-/* Overrides for snippets
-   These changes make it so that snippets do not affect the height of the
-   main element, so that elements don't move around on page load. */
-#snippetContainer {
-  position: absolute;
-  left: 50%;
-  top: 100%;
-  margin-left: -235px;
-  width: 470px;
-}
deleted file mode 100644
--- a/browser/base/content/abouthome/aboutHome.js
+++ /dev/null
@@ -1,389 +0,0 @@
-/* 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/. */
-
-"use strict";
-
-/* import-globals-from ../contentSearchUI.js */
-
-// The process of adding a new default snippet involves:
-//   * add a new entity to aboutHome.dtd
-//   * add a <span/> for it in aboutHome.xhtml
-//   * add an entry here in the proper ordering (based on spans)
-// The <a/> part of the snippet will be linked to the corresponding url.
-const DEFAULT_SNIPPETS_URLS = [
-  "https://www.mozilla.org/firefox/features/?utm_source=snippet&utm_medium=snippet&utm_campaign=default+feature+snippet",
-  "https://addons.mozilla.org/firefox/?utm_source=snippet&utm_medium=snippet&utm_campaign=addons"
-];
-
-const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.
-
-// IndexedDB storage constants.
-const DATABASE_NAME = "abouthome";
-const DATABASE_VERSION = 1;
-const DATABASE_STORAGE = "persistent";
-const SNIPPETS_OBJECTSTORE_NAME = "snippets";
-var searchText;
-
-// This global tracks if the page has been set up before, to prevent double inits
-var gInitialized = false;
-var gObserver = new MutationObserver(function(mutations) {
-  for (let mutation of mutations) {
-    // The addition of the restore session button changes our width:
-    if (mutation.attributeName == "session") {
-      fitToWidth();
-    }
-    if (mutation.attributeName == "snippetsVersion") {
-      if (!gInitialized) {
-        ensureSnippetsMapThen(loadSnippets);
-        gInitialized = true;
-      }
-      return;
-    }
-  }
-});
-
-window.addEventListener("pageshow", function() {
-  // Delay search engine setup, cause browser.js::BrowserOnAboutPageLoad runs
-  // later and may use asynchronous getters.
-  window.gObserver.observe(document.documentElement, { attributes: true });
-  fitToWidth();
-  setupSearch();
-  window.addEventListener("resize", fitToWidth);
-
-  // Ask chrome to update snippets.
-  var event = new CustomEvent("AboutHomeLoad", {bubbles: true});
-  document.dispatchEvent(event);
-});
-
-window.addEventListener("pagehide", function() {
-  window.gObserver.disconnect();
-  window.removeEventListener("resize", fitToWidth);
-});
-
-window.addEventListener("keypress", ev => {
-  if (ev.defaultPrevented) {
-    return;
-  }
-
-  // don't focus the search-box on keypress if something other than the
-  // body or document element has focus - don't want to steal input from other elements
-  // Make an exception for <a> and <button> elements (and input[type=button|submit])
-  // which don't usefully take keypresses anyway.
-  // (except space, which is handled below)
-  if (document.activeElement && document.activeElement != document.body &&
-      document.activeElement != document.documentElement &&
-      !["a", "button"].includes(document.activeElement.localName) &&
-      !document.activeElement.matches("input:-moz-any([type=button],[type=submit])")) {
-    return;
-  }
-
-  let modifiers = ev.ctrlKey + ev.altKey + ev.metaKey;
-  // ignore Ctrl/Cmd/Alt, but not Shift
-  // also ignore Tab, Insert, PageUp, etc., and Space
-  if (modifiers != 0 || ev.charCode == 0 || ev.charCode == 32)
-    return;
-
-  searchText.focus();
-  // need to send the first keypress outside the search-box manually to it
-  searchText.value += ev.key;
-});
-
-// This object has the same interface as Map and is used to store and retrieve
-// the snippets data.  It is lazily initialized by ensureSnippetsMapThen(), so
-// be sure its callback returned before trying to use it.
-var gSnippetsMap;
-var gSnippetsMapCallbacks = [];
-
-/**
- * Ensure the snippets map is properly initialized.
- *
- * @param aCallback
- *        Invoked once the map has been initialized, gets the map as argument.
- * @note Snippets should never directly manage the underlying storage, since
- *       it may change inadvertently.
- */
-function ensureSnippetsMapThen(aCallback) {
-  if (gSnippetsMap) {
-    aCallback(gSnippetsMap);
-    return;
-  }
-
-  // Handle multiple requests during the async initialization.
-  gSnippetsMapCallbacks.push(aCallback);
-  if (gSnippetsMapCallbacks.length > 1) {
-    // We are already updating, the callbacks will be invoked when done.
-    return;
-  }
-
-  let invokeCallbacks = function() {
-    if (!gSnippetsMap) {
-      gSnippetsMap = Object.freeze(new Map());
-    }
-
-    for (let callback of gSnippetsMapCallbacks) {
-      callback(gSnippetsMap);
-    }
-    gSnippetsMapCallbacks.length = 0;
-  };
-
-  let openRequest = indexedDB.open(DATABASE_NAME, {version: DATABASE_VERSION,
-                                                   storage: DATABASE_STORAGE});
-
-  openRequest.onerror = function(event) {
-    // Try to delete the old database so that we can start this process over
-    // next time.
-    indexedDB.deleteDatabase(DATABASE_NAME);
-    invokeCallbacks();
-  };
-
-  openRequest.onupgradeneeded = function(event) {
-    let db = event.target.result;
-    if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {
-      db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);
-    }
-  };
-
-  openRequest.onsuccess = function(event) {
-    let db = event.target.result;
-
-    db.onerror = function() {
-      invokeCallbacks();
-    };
-
-    db.onversionchange = function(versionChangeEvent) {
-      versionChangeEvent.target.close();
-      invokeCallbacks();
-    };
-
-    let cache = new Map();
-    let cursorRequest;
-    try {
-      cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)
-                        .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();
-    } catch (ex) {
-      console.error(ex);
-      invokeCallbacks();
-      return;
-    }
-
-    cursorRequest.onerror = function() {
-      invokeCallbacks();
-    };
-
-    cursorRequest.onsuccess = function(cursorRequestEvent) {
-      let cursor = cursorRequestEvent.target.result;
-
-      // Populate the cache from the persistent storage.
-      if (cursor) {
-        cache.set(cursor.key, cursor.value);
-        cursor.continue();
-        return;
-      }
-
-      // The cache has been filled up, create the snippets map.
-      gSnippetsMap = Object.freeze({
-        get: (aKey) => cache.get(aKey),
-        set(aKey, aValue) {
-          db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
-            .objectStore(SNIPPETS_OBJECTSTORE_NAME).put(aValue, aKey);
-          return cache.set(aKey, aValue);
-        },
-        has: (aKey) => cache.has(aKey),
-        delete(aKey) {
-          db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
-            .objectStore(SNIPPETS_OBJECTSTORE_NAME).delete(aKey);
-          return cache.delete(aKey);
-        },
-        clear() {
-          db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
-            .objectStore(SNIPPETS_OBJECTSTORE_NAME).clear();
-          return cache.clear();
-        },
-        get size() { return cache.size; },
-      });
-
-      setTimeout(invokeCallbacks, 0);
-    };
-  };
-}
-
-function onSearchSubmit(aEvent) {
-  gContentSearchController.search(aEvent);
-}
-
-
-var gContentSearchController;
-
-function setupSearch() {
-  // Set submit button label for when CSS background are disabled (e.g.
-  // high contrast mode).
-  document.getElementById("searchSubmit").value =
-    document.body.getAttribute("dir") == "ltr" ? "\u25B6" : "\u25C0";
-
-  // The "autofocus" attribute doesn't focus the form element
-  // immediately when the element is first drawn, so the
-  // attribute is also used for styling when the page first loads.
-  searchText = document.getElementById("searchText");
-  searchText.addEventListener("blur", function() {
-    searchText.removeAttribute("autofocus");
-  }, {once: true});
-
-  if (!gContentSearchController) {
-    gContentSearchController =
-      new ContentSearchUIController(searchText, searchText.parentNode,
-                                    "abouthome", "homepage");
-  }
-}
-
-/**
- * Inform the test harness that we're done loading the page.
- */
-function loadCompleted() {
-  var event = new CustomEvent("AboutHomeLoadSnippetsCompleted", {bubbles: true});
-  document.dispatchEvent(event);
-}
-
-/**
- * Update the local snippets from the remote storage, then show them through
- * showSnippets.
- */
-function loadSnippets() {
-  if (!gSnippetsMap)
-    throw new Error("Snippets map has not properly been initialized");
-
-  // Allow tests to modify the snippets map before using it.
-  var event = new CustomEvent("AboutHomeLoadSnippets", {bubbles: true});
-  document.dispatchEvent(event);
-
-  // Check cached snippets version.
-  let cachedVersion = gSnippetsMap.get("snippets-cached-version") || 0;
-  let currentVersion = document.documentElement.getAttribute("snippetsVersion");
-  if (cachedVersion < currentVersion) {
-    // The cached snippets are old and unsupported, restart from scratch.
-    gSnippetsMap.clear();
-  }
-
-  // Check last snippets update.
-  let lastUpdate = gSnippetsMap.get("snippets-last-update");
-  let updateURL = document.documentElement.getAttribute("snippetsURL");
-  let shouldUpdate = !lastUpdate ||
-                     Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;
-  if (updateURL && shouldUpdate) {
-    // Try to update from network.
-    let xhr = new XMLHttpRequest();
-    xhr.timeout = 5000;
-    // Even if fetching should fail we don't want to spam the server, thus
-    // set the last update time regardless its results.  Will retry tomorrow.
-    gSnippetsMap.set("snippets-last-update", Date.now());
-    xhr.onloadend = function() {
-      if (xhr.status == 200) {
-        gSnippetsMap.set("snippets", xhr.responseText);
-        gSnippetsMap.set("snippets-cached-version", currentVersion);
-      }
-      showSnippets();
-      loadCompleted();
-    };
-    try {
-      xhr.open("GET", updateURL, true);
-      xhr.send(null);
-    } catch (ex) {
-      showSnippets();
-      loadCompleted();
-    }
-  } else {
-    showSnippets();
-    loadCompleted();
-  }
-}
-
-/**
- * Shows locally cached remote snippets, or default ones when not available.
- *
- * @note: snippets should never invoke showSnippets(), or they may cause
- *        a "too much recursion" exception.
- */
-var _snippetsShown = false;
-function showSnippets() {
-  let snippetsElt = document.getElementById("snippets");
-
-  // Show about:rights notification, if needed.
-  let showRights = document.documentElement.getAttribute("showKnowYourRights");
-  if (showRights) {
-    let rightsElt = document.getElementById("rightsSnippet");
-    let anchor = rightsElt.getElementsByTagName("a")[0];
-    anchor.href = "about:rights";
-    snippetsElt.appendChild(rightsElt);
-    rightsElt.removeAttribute("hidden");
-    return;
-  }
-
-  if (!gSnippetsMap)
-    throw new Error("Snippets map has not properly been initialized");
-  if (_snippetsShown) {
-    // There's something wrong with the remote snippets, just in case fall back
-    // to the default snippets.
-    showDefaultSnippets();
-    throw new Error("showSnippets should never be invoked multiple times");
-  }
-  _snippetsShown = true;
-
-  let snippets = gSnippetsMap.get("snippets");
-  // If there are remotely fetched snippets, try to to show them.
-  if (snippets) {
-    // Injecting snippets can throw if they're invalid XML.
-    try {
-      // eslint-disable-next-line no-unsanitized/property
-      snippetsElt.innerHTML = snippets;
-      // Scripts injected by innerHTML are inactive, so we have to relocate them
-      // through DOM manipulation to activate their contents.
-      Array.forEach(snippetsElt.getElementsByTagName("script"), function(elt) {
-        let relocatedScript = document.createElement("script");
-        relocatedScript.type = "text/javascript";
-        relocatedScript.text = elt.text;
-        elt.parentNode.replaceChild(relocatedScript, elt);
-      });
-      return;
-    } catch (ex) {
-      // Bad content, continue to show default snippets.
-    }
-  }
-
-  showDefaultSnippets();
-}
-
-/**
- * Clear snippets element contents and show default snippets.
- */
-function showDefaultSnippets() {
-  // Clear eventual contents...
-  let snippetsElt = document.getElementById("snippets");
-  snippetsElt.innerHTML = "";
-
-  // ...then show default snippets.
-  let defaultSnippetsElt = document.getElementById("defaultSnippets");
-  let entries = defaultSnippetsElt.querySelectorAll("span");
-  // Choose a random snippet.  Assume there is always at least one.
-  let randIndex = Math.floor(Math.random() * entries.length);
-  let entry = entries[randIndex];
-  // Inject url in the eventual link.
-  if (DEFAULT_SNIPPETS_URLS[randIndex]) {
-    let links = entry.getElementsByTagName("a");
-    // Default snippets can have only one link, otherwise something is messed
-    // up in the translation.
-    if (links.length == 1) {
-      links[0].href = DEFAULT_SNIPPETS_URLS[randIndex];
-    }
-  }
-  // Move the default snippet to the snippets element.
-  snippetsElt.appendChild(entry);
-}
-
-function fitToWidth() {
-  if (document.documentElement.scrollWidth > window.innerWidth) {
-    document.body.setAttribute("narrow", "true");
-  } else if (document.body.hasAttribute("narrow")) {
-    document.body.removeAttribute("narrow");
-    fitToWidth();
-  }
-}
deleted file mode 100644
--- a/browser/base/content/abouthome/aboutHome.xhtml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- 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/. -->
-
-<!DOCTYPE html [
-  <!ENTITY % htmlDTD
-    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "DTD/xhtml1-strict.dtd">
-  %htmlDTD;
-  <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
-  %globalDTD;
-  <!ENTITY % aboutHomeDTD SYSTEM "chrome://browser/locale/aboutHome.dtd">
-  %aboutHomeDTD;
-  <!ENTITY % browserDTD SYSTEM "chrome://browser/locale/browser.dtd" >
-  %browserDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta http-equiv="Content-Security-Policy" content="default-src chrome:" />
-    <title>&abouthome.pageTitle;</title>
-
-    <link rel="icon" type="image/png" id="favicon"
-          href="chrome://branding/content/icon32.png"/>
-    <link rel="stylesheet" type="text/css" media="all"
-          href="chrome://browser/content/contentSearchUI.css"/>
-    <link rel="stylesheet" type="text/css" media="all" defer="defer"
-          href="chrome://browser/content/abouthome/aboutHome.css"/>
-
-    <script type="text/javascript"
-            src="chrome://browser/content/abouthome/aboutHome.js"/>
-    <script type="text/javascript"
-            src="chrome://browser/content/contentSearchUI.js"/>
-  </head>
-
-  <body id="about-home" dir="&locale.dir;">
-    <div class="spacer"/>
-    <div id="topSection">
-      <div id="brandLogo"></div>
-
-      <div id="searchWrapper">
-        <div id="searchIcon"/>
-        <input type="text" name="q" value="" id="searchText" maxlength="256"
-               placeholder="&searchInput.placeholder;"
-               aria-label="&contentSearchInput.label;" autofocus="autofocus"/>
-        <input id="searchSubmit" type="button" onclick="onSearchSubmit(event)"
-               title="&contentSearchSubmit.tooltip;"/>
-      </div>
-
-      <div id="snippetContainer">
-        <div id="defaultSnippets" hidden="true">
-          <span id="defaultSnippet1">&abouthome.defaultSnippet1.v1;</span>
-          <span id="defaultSnippet2">&abouthome.defaultSnippet2.v1;</span>
-        </div>
-        <span id="rightsSnippet" hidden="true">&abouthome.rightsSnippet;</span>
-        <div id="snippets"/>
-      </div>
-    </div>
-    <div class="spacer"/>
-
-    <div id="launcher">
-      <button class="launchButton" id="downloads">&abouthome.downloadsButton.label;</button>
-      <button class="launchButton" id="bookmarks">&abouthome.bookmarksButton.label;</button>
-      <button class="launchButton" id="history">&abouthome.historyButton.label;</button>
-      <button class="launchButton" id="addons">&abouthome.addonsButton.label;</button>
-      <button class="launchButton" id="sync">&abouthome.syncButton.label;</button>
-#ifdef XP_WIN
-      <button class="launchButton" id="settings">&abouthome.preferencesButtonWin.label;</button>
-#else
-      <button class="launchButton" id="settings">&abouthome.preferencesButtonUnix.label;</button>
-#endif
-      <div id="restorePreviousSessionSeparator"/>
-      <button class="launchButton" id="restorePreviousSession">&historyRestoreLastSession.label;</button>
-    </div>
-  </body>
-</html>
deleted file mode 100644
index 238a5f6daa3b6eab2e68307509f27796bf3437f6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1510904a510bb7c45a2afe448d3a6a58db185edf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index dc6b9ab7f49dd5e758df1754f2bd3eccbfe1ad66..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 111212ef2027652f2984c7e5b8f5d33cbad39ac1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2ae5407c314bd901826ccc43c5fa9822e0cc9b3c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2cbd2d1e968c7e81d6027ddadce6444795a216d3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index adfbfb9cab6084137f711a356f3f5296d18de1da..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 92bb6dd43a72ba436b6f1c7837f9ed5816e07850..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4d6cf21aa8929ca5d8dc728fa13e2f2ee1cdfaf4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7b080af77ba315314bf7b76f9bc85fe1c582a1f7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a3ba25ce80c9a04611e4dc53d033395643743aff..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 21348fcf5d8597ce865c8a5e90bdc3b699691080..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cc8dd79f51940bc9ec92ddef8910ea9dea7fa5ab..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c995ae6313351d9d535c8559067ebd8220f5c51a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 05a9630b98a3537f541dbad1ffd0a105b7320c82..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 781af04e008aa479993265befe4363fcb2bb6f9b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 24325f87549162883ff10b9e0935b9749c8f2dcf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7c27a8e88a463e81b61e176983bd645741e6dc64..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1d862d1f35916ff3c43f39a29efa93d83705a601..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cbbc2e6ca8d297ebf5442e5611ad0ea4db4bbdae..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -11,17 +11,16 @@ ChromeUtils.import("resource://gre/modul
 ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 ChromeUtils.import("resource://gre/modules/NotificationDB.jsm");
 
 const {WebExtensionPolicy} = Cu.getGlobalForObject(Services);
 
 // lazy module getters
 
 XPCOMUtils.defineLazyModuleGetters(this, {
-  AboutHome: "resource:///modules/AboutHome.jsm",
   BrowserUITelemetry: "resource:///modules/BrowserUITelemetry.jsm",
   BrowserUsageTelemetry: "resource:///modules/BrowserUsageTelemetry.jsm",
   BrowserUtils: "resource://gre/modules/BrowserUtils.jsm",
   BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.jsm",
   CharsetMenu: "resource://gre/modules/CharsetMenu.jsm",
   Color: "resource://gre/modules/Color.jsm",
   ContentSearch: "resource:///modules/ContentSearch.jsm",
   ContextualIdentityService: "resource://gre/modules/ContextualIdentityService.jsm",
--- a/browser/base/content/tab-content.js
+++ b/browser/base/content/tab-content.js
@@ -87,134 +87,16 @@ addMessageListener("Browser:Reload", fun
   } catch (e) {
   }
 });
 
 addMessageListener("MixedContent:ReenableProtection", function() {
   docShell.mixedContentChannel = null;
 });
 
-var AboutHomeListener = {
-  init(chromeGlobal) {
-    chromeGlobal.addEventListener("AboutHomeLoad", this, false, true);
-  },
-
-  get isAboutHome() {
-    return content.document.documentURI.toLowerCase() == "about:home";
-  },
-
-  handleEvent(aEvent) {
-    if (!this.isAboutHome) {
-      return;
-    }
-    switch (aEvent.type) {
-      case "AboutHomeLoad":
-        this.onPageLoad();
-        break;
-      case "click":
-        this.onClick(aEvent);
-        break;
-      case "pagehide":
-        this.onPageHide(aEvent);
-        break;
-    }
-  },
-
-  receiveMessage(aMessage) {
-    if (!this.isAboutHome) {
-      return;
-    }
-    switch (aMessage.name) {
-      case "AboutHome:Update":
-        this.onUpdate(aMessage.data);
-        break;
-    }
-  },
-
-  onUpdate(aData) {
-    let doc = content.document;
-    if (aData.showRestoreLastSession && !PrivateBrowsingUtils.isContentWindowPrivate(content))
-      doc.getElementById("launcher").setAttribute("session", "true");
-
-    // Inject search engine and snippets URL.
-    let docElt = doc.documentElement;
-    // Set snippetsVersion last, which triggers to show the snippets when it's set.
-    docElt.setAttribute("snippetsURL", aData.snippetsURL);
-    if (aData.showKnowYourRights)
-      docElt.setAttribute("showKnowYourRights", "true");
-    docElt.setAttribute("snippetsVersion", aData.snippetsVersion);
-  },
-
-  onPageLoad() {
-    addMessageListener("AboutHome:Update", this);
-    addEventListener("click", this, true);
-    addEventListener("pagehide", this, true);
-
-    sendAsyncMessage("AboutHome:MaybeShowMigrateMessage");
-    sendAsyncMessage("AboutHome:RequestUpdate");
-  },
-
-  onClick(aEvent) {
-    if (!aEvent.isTrusted || // Don't trust synthetic events
-        aEvent.button == 2 || aEvent.target.localName != "button") {
-      return;
-    }
-
-    let originalTarget = aEvent.originalTarget;
-    let ownerDoc = originalTarget.ownerDocument;
-    if (ownerDoc.documentURI != "about:home") {
-      // This shouldn't happen, but we're being defensive.
-      return;
-    }
-
-    let elmId = originalTarget.getAttribute("id");
-
-    switch (elmId) {
-      case "restorePreviousSession":
-        sendAsyncMessage("AboutHome:RestorePreviousSession");
-        ownerDoc.getElementById("launcher").removeAttribute("session");
-        break;
-
-      case "downloads":
-        sendAsyncMessage("AboutHome:Downloads");
-        break;
-
-      case "bookmarks":
-        sendAsyncMessage("AboutHome:Bookmarks");
-        break;
-
-      case "history":
-        sendAsyncMessage("AboutHome:History");
-        break;
-
-      case "addons":
-        sendAsyncMessage("AboutHome:Addons");
-        break;
-
-      case "sync":
-        sendAsyncMessage("AboutHome:Sync");
-        break;
-
-      case "settings":
-        sendAsyncMessage("AboutHome:Settings");
-        break;
-    }
-  },
-
-  onPageHide(aEvent) {
-    if (aEvent.target.defaultView.frameElement) {
-      return;
-    }
-    removeMessageListener("AboutHome:Update", this);
-    removeEventListener("click", this, true);
-    removeEventListener("pagehide", this, true);
-  },
-};
-AboutHomeListener.init(this);
-
 var AboutReaderListener = {
 
   _articlePromise: null,
 
   _isLeavingReaderableReaderMode: false,
 
   init() {
     addEventListener("AboutReaderContentLoaded", this, false, true);
deleted file mode 100644
--- a/browser/base/content/test/about/aboutHome_content_script.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/* eslint-env mozilla/frame-script */
-
-addMessageListener("AboutHome:SearchTriggered", function(msg) {
-  sendAsyncMessage("AboutHomeTest:CheckRecordedSearch", msg.data);
-});
--- a/browser/base/content/test/about/browser.ini
+++ b/browser/base/content/test/about/browser.ini
@@ -1,30 +1,21 @@
 [DEFAULT]
 support-files =
-  aboutHome_content_script.js
   head.js
   print_postdata.sjs
   searchSuggestionEngine.sjs
   searchSuggestionEngine.xml
-  test_bug959531.html
   POSTSearchEngine.xml
 
 [browser_aboutCertError.js]
 support-files =
   dummy_page.html
-[browser_aboutHome_imitate.js]
-[browser_aboutHome_input.js]
-skip-if = true # Bug 1409054 to remove; previously skipped for intermittents, e.g., Bug 1399648
 [browser_aboutHome_search_POST.js]
 [browser_aboutHome_search_composing.js]
 [browser_aboutHome_search_searchbar.js]
 [browser_aboutHome_search_suggestion.js]
 skip-if = os == "mac" || (os == "linux" && (!debug || bits == 64)) # Bug 1399648, bug 1402502
 [browser_aboutHome_search_telemetry.js]
-[browser_aboutHome_snippets.js]
-skip-if = true # Bug 1409054 to remove
-[browser_aboutHome_wrapsCorrectly.js]
-skip-if = true # Bug 1409054 to remove; previously skipped for intermittents, e.g., Bug 1395602
 [browser_aboutNetError.js]
 [browser_aboutStopReload.js]
 [browser_aboutSupport.js]
 [browser_aboutSupport_newtab_security_state.js]
deleted file mode 100644
--- a/browser/base/content/test/about/browser_aboutHome_imitate.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-ignoreAllUncaughtExceptions();
-
-add_task(async function() {
-  info("Make sure that a page can't imitate about:home");
-
-  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:home" }, async function(browser) {
-    let promise = BrowserTestUtils.browserLoaded(browser);
-    browser.loadURI("https://example.com/browser/browser/base/content/test/about/test_bug959531.html");
-    await promise;
-
-    await ContentTask.spawn(browser, null, async function() {
-      let button = content.document.getElementById("settings");
-      ok(button, "Found settings button in test page");
-      button.click();
-    });
-
-    await new Promise(resolve => {
-      // It may take a few turns of the event loop before the window
-      // is displayed, so we wait.
-      function check(n) {
-        let win = Services.wm.getMostRecentWindow("Browser:Preferences");
-        ok(!win, "Preferences window not showing");
-        if (win) {
-          win.close();
-        }
-
-        if (n > 0) {
-          executeSoon(() => check(n - 1));
-        } else {
-          resolve();
-        }
-      }
-
-      check(5);
-    });
-  });
-});
deleted file mode 100644
--- a/browser/base/content/test/about/browser_aboutHome_input.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-ChromeUtils.defineModuleGetter(this, "AppConstants",
-  "resource://gre/modules/AppConstants.jsm");
-
-ignoreAllUncaughtExceptions();
-
-// The following two tests need to be skipped for the time being, since we're
-// no longer showing the launcher options on about:home. When we remove about:home
-// and all of it's code, we can delete these tests
-add_task(async function() {
-  info("Pressing Space while the Addons button is focused should activate it");
-
-  // Skip this test on Mac, because Space doesn't activate the button there.
-  if (AppConstants.platform == "macosx") {
-    return;
-  }
-
-  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:home" }, async function(browser) {
-    info("Waiting for about:addons tab to open...");
-    let promiseTabLoaded = BrowserTestUtils.browserLoaded(browser, false, "about:addons");
-
-    await ContentTask.spawn(browser, null, async function() {
-      let addOnsButton = content.document.getElementById("addons");
-      addOnsButton.focus();
-    });
-    await BrowserTestUtils.synthesizeKey(" ", {}, browser);
-
-    await promiseTabLoaded;
-    is(browser.currentURI.spec, "about:addons",
-      "Should have seen the about:addons tab");
-  });
-}).skip();
-
-add_task(async function() {
-  info("Sync button should open about:preferences#sync");
-
-  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:home" }, async function(browser) {
-    let oldOpenPrefs = window.openPreferences;
-    let openPrefsPromise = new Promise(resolve => {
-      window.openPreferences = function(pane, params) {
-        resolve({ pane, params });
-      };
-    });
-
-    await BrowserTestUtils.synthesizeMouseAtCenter("#sync", {}, browser);
-
-    let result = await openPrefsPromise;
-    window.openPreferences = oldOpenPrefs;
-
-    is(result.pane, "paneSync", "openPreferences should be called with paneSync");
-    is(result.params.urlParams.entrypoint, "abouthome",
-      "openPreferences should be called with abouthome entrypoint");
-  });
-}).skip();
-
-add_task(async function() {
-  info("Pressing any key should focus the search box in the page, and send the key to it");
-
-  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:home" }, async function(browser) {
-    await BrowserTestUtils.synthesizeMouseAtCenter("#brandLogo", {}, browser);
-
-    await ContentTask.spawn(browser, null, async function() {
-      let doc = content.document;
-      isnot(doc.getElementById("searchText"), doc.activeElement,
-        "Search input should not be the active element.");
-    });
-
-    await BrowserTestUtils.synthesizeKey("a", {}, browser);
-
-    await ContentTask.spawn(browser, null, async function() {
-      let doc = content.document;
-      let searchInput = doc.getElementById("searchText");
-      await ContentTaskUtils.waitForCondition(() => doc.activeElement === searchInput,
-        "Search input should be the active element.");
-      is(searchInput.value, "a", "Search input should be 'a'.");
-    });
-  });
-});
deleted file mode 100644
--- a/browser/base/content/test/about/browser_aboutHome_snippets.js
+++ /dev/null
@@ -1,234 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-ChromeUtils.defineModuleGetter(this, "AboutHomeUtils",
-  "resource:///modules/AboutHome.jsm");
-
-ignoreAllUncaughtExceptions();
-var gRightsVersion = Services.prefs.getIntPref("browser.rights.version");
-
-add_task(async function setup() {
-  // The following prefs would affect tests so make sure to disable them
-  // before any tests start.
-  await SpecialPowers.pushPrefEnv({set: [
-    ["browser.onboarding.enabled", false],
-    ["network.cookie.cookieBehavior", 0],
-    ["network.cookie.lifetimePolicy", 0],
-    ["browser.rights.override", true],
-    [`browser.rights.${gRightsVersion}.shown`, false]
-  ]});
-});
-
-add_task(async function() {
-  info("Check that clearing cookies does not clear storage");
-
-  await withSnippetsMap(
-    () => {
-      Services.obs.notifyObservers(null, "cookie-changed", "cleared");
-    },
-    function() {
-      isnot(content.gSnippetsMap.get("snippets-last-update"), null,
-            "snippets-last-update should have a value");
-    });
-});
-
-add_task(async function() {
-  info("Check default snippets are shown");
-
-  await withSnippetsMap(null, function() {
-    let doc = content.document;
-    let snippetsElt = doc.getElementById("snippets");
-    ok(snippetsElt, "Found snippets element");
-    is(snippetsElt.getElementsByTagName("span").length, 1,
-       "A default snippet is present.");
-  });
-});
-
-add_task(async function() {
-  info("Check default snippets are shown if snippets are invalid xml");
-
-  await withSnippetsMap(
-    // This must set some incorrect xhtml code.
-    snippetsMap => snippetsMap.set("snippets", "<p><b></p></b>"),
-    function() {
-      let doc = content.document;
-      let snippetsElt = doc.getElementById("snippets");
-      ok(snippetsElt, "Found snippets element");
-      is(snippetsElt.getElementsByTagName("span").length, 1,
-         "A default snippet is present.");
-
-      content.gSnippetsMap.delete("snippets");
-    });
-});
-
-add_task(async function() {
-  info("Check snippets map is cleared if cached version is old");
-
-  await withSnippetsMap(
-    snippetsMap => {
-      snippetsMap.set("snippets", "test");
-      snippetsMap.set("snippets-cached-version", 0);
-    },
-    function() {
-      let snippetsMap = content.gSnippetsMap;
-      ok(!snippetsMap.has("snippets"), "snippets have been properly cleared");
-      ok(!snippetsMap.has("snippets-cached-version"),
-         "cached-version has been properly cleared");
-    });
-});
-
-add_task(async function() {
-  info("Check cached snippets are shown if cached version is current");
-
-  await withSnippetsMap(
-    snippetsMap => snippetsMap.set("snippets", "test"),
-    function(args) {
-      let doc = content.document;
-      let snippetsMap = content.gSnippetsMap;
-
-      let snippetsElt = doc.getElementById("snippets");
-      ok(snippetsElt, "Found snippets element");
-      is(snippetsElt.innerHTML, "test", "Cached snippet is present.");
-
-      is(snippetsMap.get("snippets"), "test", "snippets still cached");
-      is(snippetsMap.get("snippets-cached-version"),
-         args.expectedVersion,
-         "cached-version is correct");
-      ok(snippetsMap.has("snippets-last-update"), "last-update still exists");
-    }, { expectedVersion: AboutHomeUtils.snippetsVersion });
-});
-
-add_task(async function() {
-  info("Check if the 'Know Your Rights' default snippet is shown when " +
-    "'browser.rights.override' pref is set and that its link works");
-
-  Services.prefs.setBoolPref("browser.rights.override", false);
-
-  ok(AboutHomeUtils.showKnowYourRights, "AboutHomeUtils.showKnowYourRights should be TRUE");
-
-  await withSnippetsMap(null, function() {
-    let doc = content.document;
-    let snippetsElt = doc.getElementById("snippets");
-    ok(snippetsElt, "Found snippets element");
-    let linkEl = snippetsElt.querySelector("a");
-    is(linkEl.href, "about:rights", "Snippet link is present.");
-  }, null, async function() {
-    let loadPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser, false, "about:rights");
-    await BrowserTestUtils.synthesizeMouseAtCenter("a[href='about:rights']", {
-      button: 0
-    }, gBrowser.selectedBrowser);
-    await loadPromise;
-    is(gBrowser.currentURI.spec, "about:rights", "about:rights should have opened.");
-  });
-});
-
-add_task(async function() {
-  info("Check if the 'Know Your Rights' default snippet is NOT shown when " +
-    "'browser.rights.override' pref is NOT set");
-
-  Services.prefs.setBoolPref("browser.rights.override", true);
-
-  let rightsData = AboutHomeUtils.knowYourRightsData;
-  ok(!rightsData, "AboutHomeUtils.knowYourRightsData should be FALSE");
-
-  await withSnippetsMap(null, function() {
-    let doc = content.document;
-    let snippetsElt = doc.getElementById("snippets");
-    ok(snippetsElt, "Found snippets element");
-    ok(snippetsElt.getElementsByTagName("a")[0].href != "about:rights",
-      "Snippet link should not point to about:rights.");
-  });
-});
-
-/**
- * Cleans up snippets and ensures that by default we don't try to check for
- * remote snippets since that may cause network bustage or slowness.
- *
- * @param aSetupFn
- *        The setup function to be run.
- * @param testFn
- *        the content task to run
- * @param testArgs (optional)
- *        the parameters to pass to the content task
- * @param parentFn (optional)
- *        the function to run in the parent after the content task has completed.
- * @return {Promise} resolved when the snippets are ready.  Gets the snippets map.
- */
-async function withSnippetsMap(setupFn, testFn, testArgs = null, parentFn = null) {
-  let setupFnSource;
-  if (setupFn) {
-    setupFnSource = setupFn.toSource();
-  }
-
-  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" }, async function(browser) {
-    let promiseAfterLocationChange = () => {
-      return ContentTask.spawn(browser, {
-        setupFnSource,
-        version: AboutHomeUtils.snippetsVersion,
-      }, async function(args) {
-        return new Promise(resolve => {
-          let document = content.document;
-          // We're not using Promise-based listeners, because they resolve asynchronously.
-          // The snippets test setup code relies on synchronous behaviour here.
-          document.addEventListener("AboutHomeLoadSnippets", function() {
-            let updateSnippets;
-            if (args.setupFnSource) {
-              // eslint-disable-next-line no-eval
-              updateSnippets = eval(`(() => (${args.setupFnSource}))()`);
-            }
-
-            content.wrappedJSObject.ensureSnippetsMapThen(snippetsMap => {
-              snippetsMap = Cu.waiveXrays(snippetsMap);
-              info("Got snippets map: " +
-                   "{ last-update: " + snippetsMap.get("snippets-last-update") +
-                   ", cached-version: " + snippetsMap.get("snippets-cached-version") +
-                   " }");
-              // Don't try to update.
-              snippetsMap.set("snippets-last-update", Date.now());
-              snippetsMap.set("snippets-cached-version", args.version);
-              // Clear snippets.
-              snippetsMap.delete("snippets");
-
-              if (updateSnippets) {
-                updateSnippets(snippetsMap);
-              }
-
-              // Tack it to the global object
-              content.gSnippetsMap = snippetsMap;
-
-              resolve();
-            });
-          }, {once: true});
-        });
-      });
-    };
-
-    // We'd like to listen to the 'AboutHomeLoadSnippets' event on a fresh
-    // document as soon as technically possible, so we use webProgress.
-    let promise = new Promise(resolve => {
-      let wpl = {
-        onLocationChange() {
-          gBrowser.removeProgressListener(wpl);
-          // Phase 2: retrieving the snippets map is the next promise on our agenda.
-          promiseAfterLocationChange().then(resolve);
-        },
-        onProgressChange() {},
-        onStatusChange() {},
-        onSecurityChange() {}
-      };
-      gBrowser.addProgressListener(wpl);
-    });
-
-    // Set the URL to 'about:home' here to allow capturing the 'AboutHomeLoadSnippets'
-    // event.
-    browser.loadURI("about:home");
-    // Wait for LocationChange.
-    await promise;
-
-    await ContentTask.spawn(browser, testArgs, testFn);
-    if (parentFn) {
-      await parentFn();
-    }
-  });
-}
deleted file mode 100644
--- a/browser/base/content/test/about/browser_aboutHome_wrapsCorrectly.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-add_task(async function() {
-  let newWindow = await BrowserTestUtils.openNewBrowserWindow();
-
-  let resizedPromise = BrowserTestUtils.waitForEvent(newWindow, "resize");
-  newWindow.resizeTo(300, 300);
-  await resizedPromise;
-
-  await BrowserTestUtils.openNewForegroundTab(newWindow.gBrowser, "about:home");
-
-  await ContentTask.spawn(newWindow.gBrowser.selectedBrowser, {}, async function() {
-    Assert.equal(content.document.body.getAttribute("narrow"), "true", "narrow mode");
-  });
-
-  resizedPromise = BrowserTestUtils.waitForContentEvent(newWindow.gBrowser.selectedBrowser, "resize");
-
-
-  await ContentTask.spawn(newWindow.gBrowser.selectedBrowser, {}, async function() {
-    content.window.resizeTo(800, 800);
-  });
-
-  await resizedPromise;
-
-  await ContentTask.spawn(newWindow.gBrowser.selectedBrowser, {}, async function() {
-    Assert.equal(content.document.body.hasAttribute("narrow"), false, "non-narrow mode");
-  });
-
-  await BrowserTestUtils.closeWindow(newWindow);
-});
deleted file mode 100644
--- a/browser/base/content/test/about/test_bug959531.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Test for content page with settings button</title>
-  </head>
-  <body>
-    <button name="settings" id="settings">Settings</button>
-  </body>
-</html>
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -8,39 +8,16 @@ browser.jar:
 *       content/browser/aboutDialog.xul               (content/aboutDialog.xul)
         content/browser/aboutDialog.js                (content/aboutDialog.js)
         content/browser/aboutDialog.css               (content/aboutDialog.css)
         content/browser/aboutRestartRequired.js       (content/aboutRestartRequired.js)
         content/browser/aboutRestartRequired.xhtml    (content/aboutRestartRequired.xhtml)
         content/browser/aboutRobots.xhtml             (content/aboutRobots.xhtml)
         content/browser/aboutRobots.js                (content/aboutRobots.js)
         content/browser/aboutRobots.css               (content/aboutRobots.css)
-*       content/browser/abouthome/aboutHome.xhtml     (content/abouthome/aboutHome.xhtml)
-        content/browser/abouthome/aboutHome.js        (content/abouthome/aboutHome.js)
-*       content/browser/abouthome/aboutHome.css       (content/abouthome/aboutHome.css)
-        content/browser/abouthome/snippet1.png        (content/abouthome/snippet1.png)
-        content/browser/abouthome/snippet2.png        (content/abouthome/snippet2.png)
-        content/browser/abouthome/downloads.png       (content/abouthome/downloads.png)
-        content/browser/abouthome/bookmarks.png       (content/abouthome/bookmarks.png)
-        content/browser/abouthome/history.png         (content/abouthome/history.png)
-        content/browser/abouthome/addons.png          (content/abouthome/addons.png)
-        content/browser/abouthome/sync.png            (content/abouthome/sync.png)
-        content/browser/abouthome/settings.png        (content/abouthome/settings.png)
-        content/browser/abouthome/restore.png         (content/abouthome/restore.png)
-        content/browser/abouthome/restore-large.png   (content/abouthome/restore-large.png)
-        content/browser/abouthome/snippet1@2x.png      (content/abouthome/snippet1@2x.png)
-        content/browser/abouthome/snippet2@2x.png      (content/abouthome/snippet2@2x.png)
-        content/browser/abouthome/downloads@2x.png     (content/abouthome/downloads@2x.png)
-        content/browser/abouthome/bookmarks@2x.png     (content/abouthome/bookmarks@2x.png)
-        content/browser/abouthome/history@2x.png       (content/abouthome/history@2x.png)
-        content/browser/abouthome/addons@2x.png        (content/abouthome/addons@2x.png)
-        content/browser/abouthome/sync@2x.png          (content/abouthome/sync@2x.png)
-        content/browser/abouthome/settings@2x.png      (content/abouthome/settings@2x.png)
-        content/browser/abouthome/restore@2x.png       (content/abouthome/restore@2x.png)
-        content/browser/abouthome/restore-large@2x.png (content/abouthome/restore-large@2x.png)
 
         content/browser/illustrations/error-connection-failure.svg (content/illustrations/error-connection-failure.svg)
         content/browser/illustrations/error-server-not-found.svg (content/illustrations/error-server-not-found.svg)
         content/browser/illustrations/error-malformed-url.svg (content/illustrations/error-malformed-url.svg)
         content/browser/illustrations/under-construction.svg (content/illustrations/under-construction.svg)
         content/browser/aboutNetError.xhtml            (content/aboutNetError.xhtml)
         content/browser/aboutNetError.js               (content/aboutNetError.js)
         content/browser/aboutRobots-icon.png          (content/aboutRobots-icon.png)
deleted file mode 100644
index 3f1d2d39652926f67bc4fe9344ea18c09cdde478..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/unofficial/content/jar.mn
+++ b/browser/branding/unofficial/content/jar.mn
@@ -2,17 +2,16 @@
 # 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/.
 
 browser.jar:
 % content branding %content/branding/ contentaccessible=yes
   content/branding/about.png
   content/branding/about-background.png
   content/branding/about-logo.png
-  content/branding/about-logo@2x.png
   content/branding/about-wordmark.svg
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon48.png                    (../default48.png)
   content/branding/icon64.png                    (../default64.png)
   content/branding/icon128.png                   (../default128.png)
   content/branding/identity-icons-brand.svg
   content/branding/aboutDialog.css
--- a/browser/components/newtab/aboutNewTabService.js
+++ b/browser/components/newtab/aboutNewTabService.js
@@ -8,19 +8,16 @@
 
 ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 
 ChromeUtils.defineModuleGetter(this, "AboutNewTab",
                                "resource:///modules/AboutNewTab.jsm");
 
-// Dummy references to the files that this service no longer allows loading.
-// Bug 1409054 to remove "chrome://browser/content/abouthome/aboutHome.xhtml"
-
 const TOPIC_APP_QUIT = "quit-application-granted";
 const TOPIC_LOCALES_CHANGE = "intl:app-locales-changed";
 
 // Automated tests ensure packaged locales are in this list. Copied output of:
 // https://github.com/mozilla/activity-stream/blob/master/bin/render-activity-stream-html.js
 const ACTIVITY_STREAM_LOCALES = "en-US ach an ar ast az be bg bn-BD bn-IN br bs ca cak crh cs cy da de dsb el en-CA en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id it ja ka kab kk km kn ko lij lo lt ltg lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO pa-IN pl pt-BR pt-PT rm ro ru si sk sl sq sr sv-SE ta te th tl tr uk ur uz vi zh-CN zh-TW".split(" ");
 
 const ABOUT_URL = "about:newtab";
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -136,28 +136,27 @@ XPCOMUtils.defineLazyModuleGetters(this,
   ShellService: "resource:///modules/ShellService.jsm",
   TabCrashHandler: "resource:///modules/ContentCrashHandlers.jsm",
   UIState: "resource://services-sync/UIState.jsm",
   UITour: "resource:///modules/UITour.jsm",
   WebChannel: "resource://gre/modules/WebChannel.jsm",
   WindowsRegistry: "resource://gre/modules/WindowsRegistry.jsm",
 });
 
-/* global AboutHome:false, ContentPrefServiceParent:false, ContentSearch:false,
+/* global ContentPrefServiceParent:false, ContentSearch:false,
           UpdateListener:false, webrtcUI:false */
 
 /**
  * IF YOU ADD OR REMOVE FROM THIS LIST, PLEASE UPDATE THE LIST ABOVE AS WELL.
  * XXX Bug 1325373 is for making eslint detect these automatically.
  */
 
 let initializedModules = {};
 
 [
-  ["AboutHome", "resource:///modules/AboutHome.jsm", "init"],
   ["ContentPrefServiceParent", "resource://gre/modules/ContentPrefServiceParent.jsm", "alwaysInit"],
   ["ContentSearch", "resource:///modules/ContentSearch.jsm", "init"],
   ["UpdateListener", "resource://gre/modules/UpdateListener.jsm", "init"],
   ["webrtcUI", "resource:///modules/webrtcUI.jsm", "init"],
 ].forEach(([name, resource, init]) => {
   XPCOMUtils.defineLazyGetter(this, name, () => {
     ChromeUtils.import(resource, initializedModules);
     initializedModules[name][init]();
@@ -205,18 +204,16 @@ const listeners = {
 
     "FeedConverter:addLiveBookmark": ["Feeds"],
     "WCCR:setAutoHandler": ["Feeds"],
     "webrtc:UpdateGlobalIndicators": ["webrtcUI"],
     "webrtc:UpdatingIndicators": ["webrtcUI"],
   },
 
   mm: {
-    "AboutHome:MaybeShowMigrateMessage": ["AboutHome"],
-    "AboutHome:RequestUpdate": ["AboutHome"],
     "Content:Click": ["ContentClick"],
     "ContentSearch": ["ContentSearch"],
     "FormValidation:ShowPopup": ["FormValidationHandler"],
     "FormValidation:HidePopup": ["FormValidationHandler"],
     "Prompt:Open": ["RemotePrompt"],
     "Reader:FaviconRequest": ["ReaderParent"],
     "Reader:UpdateReaderButton": ["ReaderParent"],
     // PLEASE KEEP THIS LIST IN SYNC WITH THE MOBILE LISTENERS IN BrowserCLH.js
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/aboutHome.dtd
+++ /dev/null
@@ -1,40 +0,0 @@
-<!-- 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/. -->
-
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-%brandDTD;
-<!ENTITY % syncBrandDTD SYSTEM "chrome://browser/locale/syncBrand.dtd">
-%syncBrandDTD;
-
-<!-- These strings are used in the about:home page -->
-
-<!ENTITY abouthome.pageTitle "&brandFullName; Start Page">
-
-<!-- LOCALIZATION NOTE (abouthome.defaultSnippet1.v1):
-     text in <a/> will be linked to the Firefox features page on mozilla.com
--->
-<!ENTITY abouthome.defaultSnippet1.v1 "Thanks for choosing Firefox! To get the most out of your browser, learn more about the <a>latest features</a>.">
-<!-- LOCALIZATION NOTE (abouthome.defaultSnippet2.v1):
-     text in <a/> will be linked to the featured add-ons on addons.mozilla.org
--->
-<!ENTITY abouthome.defaultSnippet2.v1 "It’s easy to customize your Firefox exactly the way you want it. <a>Choose from thousands of add-ons</a>.">
-<!-- LOCALIZATION NOTE (abouthome.rightsSnippet): text in <a/> will be linked to about:rights -->
-<!ENTITY abouthome.rightsSnippet "&brandFullName; is free and open source software from the non-profit Mozilla Foundation. <a>Know your rights…</a>">
-
-<!ENTITY abouthome.bookmarksButton.label "Bookmarks">
-<!ENTITY abouthome.historyButton.label   "History">
-<!-- LOCALIZATION NOTE (abouthome.preferencesButtonWin.label): The label for the
-     preferences/options item on about:home on Windows -->
-<!ENTITY abouthome.preferencesButtonWin.label  "Options">
-<!-- LOCALIZATION NOTE (abouthome.preferencesButtonUnix.label): The label for the
-     preferences/options item on about:home on Linux and OS X -->
-<!ENTITY abouthome.preferencesButtonUnix.label  "Preferences">
-<!ENTITY abouthome.addonsButton.label    "Add-ons">
-<!ENTITY abouthome.downloadsButton.label "Downloads">
-<!ENTITY abouthome.syncButton.label      "&syncBrand.shortName.label;">
-
-<!-- LOCALIZATION NOTE (abouthome.aboutMozilla.label): The (invisible) label for
-     the mozilla wordmark in the top-right corner that links to Mozilla's main
-     about page. -->
-<!ENTITY abouthome.aboutMozilla.label    "About Mozilla">
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -11,17 +11,16 @@
   browser                                          (%browser/**/*.ftl)
 
 @AB_CD@.jar:
 % locale browser @AB_CD@ %locale/browser/
 *   locale/browser/bookmarks.html                  (generic/profile/bookmarks.html.in)
     locale/browser/aboutDialog.dtd                 (%chrome/browser/aboutDialog.dtd)
     locale/browser/aboutPrivateBrowsing.dtd        (%chrome/browser/aboutPrivateBrowsing.dtd)
     locale/browser/aboutRobots.dtd                 (%chrome/browser/aboutRobots.dtd)
-    locale/browser/aboutHome.dtd                   (%chrome/browser/aboutHome.dtd)
     locale/browser/accounts.properties             (%chrome/browser/accounts.properties)
     locale/browser/aboutRestartRequired.dtd        (%chrome/browser/aboutRestartRequired.dtd)
     locale/browser/aboutSearchReset.dtd            (%chrome/browser/aboutSearchReset.dtd)
     locale/browser/aboutSessionRestore.dtd         (%chrome/browser/aboutSessionRestore.dtd)
     locale/browser/aboutTabCrashed.dtd             (%chrome/browser/aboutTabCrashed.dtd)
     locale/browser/browser.dtd                     (%chrome/browser/browser.dtd)
     locale/browser/baseMenuOverlay.dtd             (%chrome/browser/baseMenuOverlay.dtd)
     locale/browser/browser.properties              (%chrome/browser/browser.properties)
deleted file mode 100644
--- a/browser/modules/AboutHome.jsm
+++ /dev/null
@@ -1,179 +0,0 @@
-/* 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/. */
-
-"use strict";
-
-var EXPORTED_SYMBOLS = [ "AboutHomeUtils", "AboutHome" ];
-
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-ChromeUtils.defineModuleGetter(this, "AppConstants",
-  "resource://gre/modules/AppConstants.jsm");
-ChromeUtils.defineModuleGetter(this, "AutoMigrate",
-  "resource:///modules/AutoMigrate.jsm");
-ChromeUtils.defineModuleGetter(this, "SessionStore",
-  "resource:///modules/sessionstore/SessionStore.jsm");
-
-// Url to fetch snippets, in the urlFormatter service format.
-const SNIPPETS_URL_PREF = "browser.aboutHomeSnippets.updateUrl";
-
-// Should be bumped up if the snippets content format changes.
-const STARTPAGE_VERSION = 4;
-
-var AboutHomeUtils = {
-  get snippetsVersion() {
-    return STARTPAGE_VERSION;
-  },
-
-  /*
-   * showKnowYourRights - Determines if the user should be shown the
-   * about:rights notification. The notification should *not* be shown if
-   * we've already shown the current version, or if the override pref says to
-   * never show it. The notification *should* be shown if it's never been seen
-   * before, if a newer version is available, or if the override pref says to
-   * always show it.
-   */
-  get showKnowYourRights() {
-    // Look for an unconditional override pref. If set, do what it says.
-    // (true --> never show, false --> always show)
-    try {
-      return !Services.prefs.getBoolPref("browser.rights.override");
-    } catch (e) { }
-    // Ditto, for the legacy EULA pref.
-    try {
-      return !Services.prefs.getBoolPref("browser.EULA.override");
-    } catch (e) { }
-
-    if (!AppConstants.MOZILLA_OFFICIAL) {
-      // Non-official builds shouldn't show the notification.
-      return false;
-    }
-
-    // Look to see if the user has seen the current version or not.
-    var currentVersion = Services.prefs.getIntPref("browser.rights.version");
-    try {
-      return !Services.prefs.getBoolPref("browser.rights." + currentVersion + ".shown");
-    } catch (e) { }
-
-    // Legacy: If the user accepted a EULA, we won't annoy them with the
-    // equivalent about:rights page until the version changes.
-    try {
-      return !Services.prefs.getBoolPref("browser.EULA." + currentVersion + ".accepted");
-    } catch (e) { }
-
-    // We haven't shown the notification before, so do so now.
-    return true;
-  }
-};
-
-/**
- * Returns the URL to fetch snippets from, in the urlFormatter service format.
- */
-XPCOMUtils.defineLazyGetter(AboutHomeUtils, "snippetsURL", function() {
-  let updateURL = Services.prefs
-                          .getCharPref(SNIPPETS_URL_PREF)
-                          .replace("%STARTPAGE_VERSION%", STARTPAGE_VERSION);
-  return Services.urlFormatter.formatURL(updateURL);
-});
-
-/**
- * This code provides services to the about:home page. Whenever
- * about:home needs to do something chrome-privileged, it sends a
- * message that's handled here.
- */
-var AboutHome = {
-  MESSAGES: [
-    "AboutHome:RestorePreviousSession",
-    "AboutHome:Downloads",
-    "AboutHome:Bookmarks",
-    "AboutHome:History",
-    "AboutHome:Addons",
-    "AboutHome:Sync",
-    "AboutHome:Settings",
-  ],
-
-  init() {
-    for (let msg of this.MESSAGES) {
-      Services.mm.addMessageListener(msg, this);
-    }
-  },
-
-  // Additional listeners are registered in nsBrowserGlue.js
-  receiveMessage(aMessage) {
-    let window = aMessage.target.ownerGlobal;
-
-    switch (aMessage.name) {
-      case "AboutHome:RestorePreviousSession":
-        if (SessionStore.canRestoreLastSession) {
-          SessionStore.restoreLastSession();
-        }
-        break;
-
-      case "AboutHome:Downloads":
-        window.BrowserDownloadsUI();
-        break;
-
-      case "AboutHome:Bookmarks":
-        window.PlacesCommandHook.showPlacesOrganizer("UnfiledBookmarks");
-        break;
-
-      case "AboutHome:History":
-        window.PlacesCommandHook.showPlacesOrganizer("History");
-        break;
-
-      case "AboutHome:Addons":
-        window.BrowserOpenAddonsMgr();
-        break;
-
-      case "AboutHome:Sync":
-        window.openPreferences("paneSync", { urlParams: { entrypoint: "abouthome" }, origin: "aboutHome"  });
-        break;
-
-      case "AboutHome:Settings":
-        window.openPreferences(undefined, {origin: "aboutHome"} );
-        break;
-
-      case "AboutHome:RequestUpdate":
-        this.sendAboutHomeData(aMessage.target);
-        break;
-
-      case "AboutHome:MaybeShowMigrateMessage":
-        AutoMigrate.shouldShowMigratePrompt(aMessage.target).then((prompt) => {
-          if (prompt) {
-            AutoMigrate.showUndoNotificationBar(aMessage.target);
-          }
-        });
-        break;
-    }
-  },
-
-  // Send all the chrome-privileged data needed by about:home. This
-  // gets re-sent when the search engine changes.
-  sendAboutHomeData(target) {
-    SessionStore.promiseInitialized.then(function() {
-      let data = {
-        showRestoreLastSession: SessionStore.canRestoreLastSession,
-        snippetsURL: AboutHomeUtils.snippetsURL,
-        showKnowYourRights: AboutHomeUtils.showKnowYourRights,
-        snippetsVersion: AboutHomeUtils.snippetsVersion,
-      };
-
-      if (AboutHomeUtils.showKnowYourRights) {
-        // Set pref to indicate we've shown the notification.
-        let currentVersion = Services.prefs.getIntPref("browser.rights.version");
-        Services.prefs.setBoolPref("browser.rights." + currentVersion + ".shown", true);
-      }
-
-      if (target && target.messageManager) {
-        target.messageManager.sendAsyncMessage("AboutHome:Update", data);
-      } else {
-        Services.mm.broadcastAsyncMessage("AboutHome:Update", data);
-      }
-    }).catch(function onError(x) {
-      Cu.reportError("Error in AboutHome.sendAboutHomeData: " + x);
-    });
-  },
-
-};
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -118,17 +118,16 @@ with Files("ZoomUI.jsm"):
 
 BROWSER_CHROME_MANIFESTS += [
     'test/browser/browser.ini',
     'test/browser/formValidation/browser.ini',
 ]
 XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
 
 EXTRA_JS_MODULES += [
-    'AboutHome.jsm',
     'AboutNewTab.jsm',
     'AsyncTabSwitcher.jsm',
     'AttributionCode.jsm',
     'BrowserErrorReporter.jsm',
     'BrowserUITelemetry.jsm',
     'BrowserUsageTelemetry.jsm',
     'BrowserWindowTracker.jsm',
     'ContentClick.jsm',
--- a/tools/lint/eslint/modules.json
+++ b/tools/lint/eslint/modules.json
@@ -1,10 +1,9 @@
 {
-  "AboutHome.jsm": ["AboutHomeUtils", "AboutHome"],
   "AddonManager.jsm": ["AddonManager", "AddonManagerPrivate"],
   "addons.js": ["AddonsEngine", "AddonValidator"],
   "addons.jsm": ["Addon", "STATE_ENABLED", "STATE_DISABLED"],
   "addonsreconciler.js": ["AddonsReconciler", "CHANGE_INSTALLED", "CHANGE_UNINSTALLED", "CHANGE_ENABLED", "CHANGE_DISABLED"],
   "AddonTestUtils.jsm": ["AddonTestUtils", "MockAsyncShutdown"],
   "addonutils.js": ["AddonUtils"],
   "ajv-4.1.1.js": ["Ajv"],
   "AlertsHelper.jsm": [],