Merge autoland to mozilla-central r=merge a=merge
authorshindli <shindli@mozilla.com>
Tue, 05 Dec 2017 11:57:21 +0200
changeset 394987 390c1aad9d4d5bd44bc5f347d2233d14eb9a2944
parent 394986 f2cf6d1473808039be5ecd8727cc3791d5d7d2d4 (current diff)
parent 394984 ba48231d04a8a6cee4a0cccea4985c416029ed25 (diff)
child 394988 b4cef8d1dff06a1ec2b9bb17211c0c3c7f5b76fa
push id97987
push usernerli@mozilla.com
push dateTue, 05 Dec 2017 13:52:50 +0000
treeherdermozilla-inbound@8842dba7396b [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge, merge
milestone59.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
Merge autoland to mozilla-central r=merge a=merge
--- a/browser/base/content/test/favicons/browser_preferred_icons.js
+++ b/browser/base/content/test/favicons/browser_preferred_icons.js
@@ -1,14 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 const ROOT = "http://mochi.test:8888/browser/browser/base/content/test/favicons/";
 
 function waitIcon(url) {
+  // Make sure we don't miss out on an icon if it was previously used in a test
+  PlacesUtils.favicons.removeFailedFavicon(makeURI(url));
+
   // Because there is debounce logic in ContentLinkHandler.jsm to reduce the
   // favicon loads, we have to wait some time before checking that icon was
   // stored properly.
   return BrowserTestUtils.waitForCondition(
     () => {
       let tabIcon = gBrowser.getIcon();
       info("Found icon " + tabIcon);
       return tabIcon == url;
@@ -19,17 +22,18 @@ function waitIcon(url) {
 function createLinks(linkInfos) {
   return ContentTask.spawn(gBrowser.selectedBrowser, linkInfos, links => {
     let doc = content.document;
     let head = doc.getElementById("linkparent");
     for (let l of links) {
       let link = doc.createElement("link");
       link.rel = "icon";
       link.href = l.href;
-      link.type = l.type;
+      if (l.type)
+        link.type = l.type;
       if (l.size)
         link.setAttribute("sizes", `${l.size}x${l.size}`);
       head.appendChild(link);
     }
   });
 }
 
 add_task(async function setup() {
@@ -73,25 +77,90 @@ add_task(async function prefer_sized() {
       type: "image/x-icon"
     },
   ]);
   await promise;
   // Must have at least one test.
   Assert.ok(true, "The expected icon has been set");
 });
 
-add_task(async function prefer_ico() {
+add_task(async function prefer_last_ico() {
   let promise = waitIcon(ROOT + "icon2.ico");
   await createLinks([
     { href: ROOT + "icon.ico",
       type: "image/x-icon"
     },
     { href: ROOT + "icon.png",
       type: "image/png",
     },
     { href: ROOT + "icon2.ico",
-    type: "image/x-icon"
-  },
+      type: "image/x-icon"
+    },
+  ]);
+  await promise;
+  // Must have at least one test.
+  Assert.ok(true, "The expected icon has been set");
+});
+
+add_task(async function fuzzy_ico() {
+  let promise = waitIcon(ROOT + "microsoft.ico");
+  await createLinks([
+    { href: ROOT + "icon.ico",
+      type: "image/x-icon"
+    },
+    { href: ROOT + "icon.png",
+      type: "image/png",
+    },
+    { href: ROOT + "microsoft.ico",
+      type: "image/vnd.microsoft.icon"
+    },
   ]);
   await promise;
   // Must have at least one test.
   Assert.ok(true, "The expected icon has been set");
 });
+
+add_task(async function guess_svg() {
+  let promise = waitIcon(ROOT + "icon.svg");
+  await createLinks([
+    { href: ROOT + "icon.svg" },
+    { href: ROOT + "icon.png",
+      type: "image/png",
+      size: 16 * Math.ceil(window.devicePixelRatio)
+    },
+    { href: ROOT + "icon.ico",
+      type: "image/x-icon"
+    },
+  ]);
+  await promise;
+  // Must have at least one test.
+  Assert.ok(true, "The expected icon has been set");
+});
+
+add_task(async function guess_ico() {
+  let promise = waitIcon(ROOT + "icon.ico");
+  await createLinks([
+    { href: ROOT + "icon.ico" },
+    { href: ROOT + "icon.png",
+      type: "image/png",
+    },
+  ]);
+  await promise;
+  // Must have at least one test.
+  Assert.ok(true, "The expected icon has been set");
+});
+
+add_task(async function guess_invalid() {
+  let promise = waitIcon(ROOT + "icon.svg");
+  // Create strange links to make sure they don't break us
+  await createLinks([
+    { href: ROOT + "icon.svg" },
+    { href: ROOT + "icon" },
+    { href: ROOT + "icon?.svg" },
+    { href: ROOT + "icon#.svg" },
+    { href: "data:text/plain,icon" },
+    { href: "file:///icon" },
+    { href: "about:icon" },
+  ]);
+  await promise;
+  // Must have at least one test.
+  Assert.ok(true, "The expected icon has been set");
+});
--- a/browser/components/extensions/ext-tabs.js
+++ b/browser/components/extensions/ext-tabs.js
@@ -612,16 +612,22 @@ this.tabs = class extends ExtensionAPI {
           let lastInsertion = new Map();
 
           let tabs = tabIds.map(tabId => tabTracker.getTab(tabId));
           for (let nativeTab of tabs) {
             // If the window is not specified, use the window from the tab.
             let window = destinationWindow || nativeTab.ownerGlobal;
             let gBrowser = window.gBrowser;
 
+            // If we are not moving the tab to a different window, and the window
+            // only has one tab, do nothing.
+            if (nativeTab.ownerGlobal == window && gBrowser.tabs.length === 1) {
+              continue;
+            }
+
             let insertionPoint = indexMap.get(window) || moveProperties.index;
             // If the index is -1 it should go to the end of the tabs.
             if (insertionPoint == -1) {
               insertionPoint = gBrowser.tabs.length;
             }
 
             // We can only move pinned tabs to a point within, or just after,
             // the current set of pinned tabs. Unpinned tabs, likewise, can only
--- a/browser/components/newtab/aboutNewTabService.js
+++ b/browser/components/newtab/aboutNewTabService.js
@@ -16,17 +16,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
                                   "resource:///modules/AboutNewTab.jsm");
 
 const LOCAL_NEWTAB_URL = "chrome://browser/content/newtab/newTab.xhtml";
 const TOPIC_APP_QUIT = "quit-application-granted";
 const TOPIC_LOCALES_CHANGE = "intl:requested-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 = new Set("en-US ach ar ast az be bg bn-BD bn-IN br bs ca cak cs cy da de dsb el en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl 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 mk ml mr ms my nb-NO ne-NP nl nn-NO pa-IN pl pt-BR pt-PT rm ro ru sk sl sq sr sv-SE ta te th tl tr uk ur uz vi zh-CN zh-TW".split(" "));
+const ACTIVITY_STREAM_LOCALES = new Set("en-US ach ar ast az be bg bn-BD bn-IN br bs ca cak cs cy da de dsb el en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl 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 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";
 
 const IS_MAIN_PROCESS = Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_DEFAULT;
 
 const IS_RELEASE_OR_BETA = AppConstants.RELEASE_OR_BETA;
 
 // Pref that tells if activity stream is enabled
--- a/browser/components/places/content/controller.js
+++ b/browser/components/places/content/controller.js
@@ -5,29 +5,16 @@
 
 XPCOMUtils.defineLazyModuleGetter(this, "ForgetAboutSite",
                                   "resource://gre/modules/ForgetAboutSite.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
                                   "resource://gre/modules/NetUtil.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
                                   "resource://gre/modules/PrivateBrowsingUtils.jsm");
 
-// XXXmano: we should move most/all of these constants to PlacesUtils
-const ORGANIZER_ROOT_BOOKMARKS = "place:folder=BOOKMARKS_MENU&excludeItems=1&queryType=1";
-
-// No change to the view, preserve current selection
-const RELOAD_ACTION_NOTHING = 0;
-// Inserting items new to the view, select the inserted rows
-const RELOAD_ACTION_INSERT = 1;
-// Removing items from the view, select the first item after the last selected
-const RELOAD_ACTION_REMOVE = 2;
-// Moving items within a view, don't treat the dropped items as additional
-// rows.
-const RELOAD_ACTION_MOVE = 3;
-
 /**
  * Represents an insertion point within a container where we can insert
  * items.
  * @param {object} an object containing the following properties:
  *   - parentId
  *     The identifier of the parent container
  *   - parentGuid
  *     The unique identifier of the parent container
--- a/browser/extensions/activity-stream/bootstrap.js
+++ b/browser/extensions/activity-stream/bootstrap.js
@@ -176,17 +176,17 @@ this.install = function install(data, re
 
 this.startup = function startup(data, reason) {
   // Cache startup data which contains stuff like the version number, etc.
   // so we can use it when we init
   startupData = data;
   startupReason = reason;
 
   // Only start Activity Stream up when the browser UI is ready
-  if (Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup).startingUp) {
+  if (Services.startup.startingUp) {
     Services.obs.addObserver(observe, BROWSER_READY_NOTIFICATION);
   } else {
     // Handle manual install or automatic install after manual uninstall
     onBrowserReady();
   }
 };
 
 this.shutdown = function shutdown(data, reason) {
--- a/browser/extensions/activity-stream/common/Actions.jsm
+++ b/browser/extensions/activity-stream/common/Actions.jsm
@@ -64,18 +64,20 @@ for (const type of [
   "SECTION_OPTIONS_CHANGED",
   "SECTION_REGISTER",
   "SECTION_UPDATE",
   "SECTION_UPDATE_CARD",
   "SETTINGS_CLOSE",
   "SETTINGS_OPEN",
   "SET_PREF",
   "SHOW_FIREFOX_ACCOUNTS",
+  "SNIPPETS_BLOCKLIST_UPDATED",
   "SNIPPETS_DATA",
   "SNIPPETS_RESET",
+  "SNIPPET_BLOCKED",
   "SYSTEM_TICK",
   "TELEMETRY_IMPRESSION_STATS",
   "TELEMETRY_PERFORMANCE_EVENT",
   "TELEMETRY_UNDESIRED_EVENT",
   "TELEMETRY_USER_EVENT",
   "TOP_SITES_ADD",
   "TOP_SITES_CANCEL_EDIT",
   "TOP_SITES_EDIT",
--- a/browser/extensions/activity-stream/css/activity-stream-linux.css
+++ b/browser/extensions/activity-stream/css/activity-stream-linux.css
@@ -18,40 +18,40 @@ button,
 input {
   font-family: inherit;
   font-size: inherit; }
 
 [hidden] {
   display: none !important; }
 
 .icon {
-  display: inline-block;
-  width: 16px;
-  height: 16px;
-  background-size: 16px;
   background-position: center center;
   background-repeat: no-repeat;
-  vertical-align: middle;
+  background-size: 16px;
+  -moz-context-properties: fill;
+  display: inline-block;
   fill: rgba(12, 12, 13, 0.8);
-  -moz-context-properties: fill; }
+  height: 16px;
+  vertical-align: middle;
+  width: 16px; }
   .icon.icon-spacer {
     margin-inline-end: 8px; }
   .icon.icon-small-spacer {
     margin-inline-end: 6px; }
   .icon.icon-bookmark-added {
     background-image: url("chrome://browser/skin/bookmark.svg"); }
   .icon.icon-bookmark-hollow {
     background-image: url("chrome://browser/skin/bookmark-hollow.svg"); }
   .icon.icon-delete {
     background-image: url("../data/content/assets/glyph-delete-16.svg"); }
   .icon.icon-modal-delete {
     background-image: url("../data/content/assets/glyph-modal-delete-32.svg");
-    width: 32px;
+    background-size: 32px;
     height: 32px;
-    background-size: 32px; }
+    width: 32px; }
   .icon.icon-dismiss {
     background-image: url("../data/content/assets/glyph-dismiss-16.svg"); }
   .icon.icon-info {
     background-image: url("../data/content/assets/glyph-info-16.svg"); }
   .icon.icon-import {
     background-image: url("../data/content/assets/glyph-import-16.svg"); }
   .icon.icon-new-window {
     background-image: url("../data/content/assets/glyph-newWindow-16.svg"); }
@@ -66,18 +66,17 @@ input {
   .icon.icon-edit {
     background-image: url("../data/content/assets/glyph-edit-16.svg"); }
   .icon.icon-pocket {
     background-image: url("../data/content/assets/glyph-pocket-16.svg"); }
   .icon.icon-historyItem {
     background-image: url("../data/content/assets/glyph-historyItem-16.svg"); }
   .icon.icon-trending {
     background-image: url("../data/content/assets/glyph-trending-16.svg");
-    transform: translateY(2px);
-    /* trending bolt is visually top heavy */ }
+    transform: translateY(2px); }
   .icon.icon-now {
     background-image: url("chrome://browser/skin/history.svg"); }
   .icon.icon-topsites {
     background-image: url("../data/content/assets/glyph-topsites-16.svg"); }
   .icon.icon-pin-small {
     background-image: url("../data/content/assets/glyph-pin-12.svg");
     background-size: 12px;
     height: 12px;
@@ -120,65 +119,65 @@ h2 {
 
 a {
   color: #0060DF;
   text-decoration: none; }
   a:hover {
     color: #008EA4; }
 
 .sr-only {
-  position: absolute;
-  width: 1px;
+  border: 0;
+  clip: rect(0, 0, 0, 0);
   height: 1px;
-  padding: 0;
   margin: -1px;
   overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0; }
+  padding: 0;
+  position: absolute;
+  width: 1px; }
 
 .inner-border {
   border: 1px solid #D7D7DB;
   border-radius: 3px;
+  height: 100%;
+  left: 0;
+  pointer-events: none;
   position: absolute;
   top: 0;
-  left: 0;
   width: 100%;
-  height: 100%;
-  pointer-events: none;
   z-index: 100; }
 
 @keyframes fadeIn {
   from {
     opacity: 0; }
   to {
     opacity: 1; } }
 
 .show-on-init {
   opacity: 0;
   transition: opacity 0.2s ease-in; }
   .show-on-init.on {
-    opacity: 1;
-    animation: fadeIn 0.2s; }
+    animation: fadeIn 0.2s;
+    opacity: 1; }
 
 .actions {
   border-top: 1px solid #D7D7DB;
   display: flex;
   flex-direction: row;
+  flex-wrap: wrap;
+  justify-content: flex-start;
   margin: 0;
-  padding: 15px 25px 0 25px;
-  justify-content: flex-start;
-  flex-wrap: wrap; }
+  padding: 15px 25px 0; }
   .actions button {
     background-color: #F9F9FA;
     border: 1px solid #B1B1B3;
     border-radius: 4px;
     color: inherit;
     cursor: pointer;
+    margin-bottom: 15px;
     padding: 10px 30px;
-    margin-bottom: 15px;
     white-space: nowrap; }
     .actions button:hover:not(.dismiss) {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
     .actions button.dismiss {
       border: 0;
       padding: 0;
       text-decoration: underline; }
@@ -188,26 +187,26 @@ a {
       color: #FFF;
       margin-inline-start: auto; }
 
 #snippets-container {
   z-index: 1; }
 
 .outer-wrapper {
   display: flex;
-  padding: 40px 32px 32px;
+  flex-grow: 1;
   height: 100%;
-  flex-grow: 1; }
+  padding: 40px 32px 32px; }
   .outer-wrapper.fixed-to-top {
     height: auto; }
 
 main {
   margin: auto;
-  width: 224px;
-  padding-bottom: 48px; }
+  padding-bottom: 48px;
+  width: 224px; }
   @media (min-width: 416px) {
     main {
       width: 352px; } }
   @media (min-width: 544px) {
     main {
       width: 480px; } }
   @media (min-width: 800px) {
     main {
@@ -240,157 +239,161 @@ main {
 .body-wrapper.on .sections-list .section:last-of-type,
 .body-wrapper.on .topic {
   opacity: 1; }
 
 .top-sites-list {
   list-style: none;
   margin: 0;
   margin-bottom: -18px;
-  padding: 0;
-  margin-inline-end: -32px; }
+  margin-inline-end: -32px;
+  padding: 0; }
   @media (max-width: 416px) {
     .top-sites-list :nth-child(2n+1) .context-menu {
+      margin-inline-end: auto;
       margin-inline-start: auto;
-      margin-inline-end: auto;
-      offset-inline-start: -32px;
-      offset-inline-end: auto; }
+      offset-inline-end: auto;
+      offset-inline-start: -32px; }
     .top-sites-list :nth-child(2n) .context-menu {
-      margin-inline-start: auto;
       margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      margin-inline-start: auto;
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 416px) and (max-width: 544px) {
-    .top-sites-list :nth-child(3n+2) .context-menu, .top-sites-list :nth-child(3n) .context-menu {
-      margin-inline-start: auto;
+    .top-sites-list :nth-child(3n+2) .context-menu,
+    .top-sites-list :nth-child(3n) .context-menu {
       margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      margin-inline-start: auto;
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 800px) {
     .top-sites-list :nth-child(4n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 768px) {
     .top-sites-list :nth-child(4n+3) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1248px) {
     .top-sites-list :nth-child(6n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1024px) {
     .top-sites-list :nth-child(6n+5) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   .top-sites-list li {
     display: inline-block;
     margin: 0 0 8px;
     margin-inline-end: 32px; }
   .top-sites-list .top-site-outer {
     position: relative; }
     .top-sites-list .top-site-outer > a {
+      color: inherit;
       display: block;
-      color: inherit;
       outline: none; }
-      .top-sites-list .top-site-outer > a.active .tile, .top-sites-list .top-site-outer > a:focus .tile {
+      .top-sites-list .top-site-outer > a:-moz-any(.active, :focus) .tile {
         box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
         transition: box-shadow 150ms; }
     .top-sites-list .top-site-outer .context-menu-button {
-      cursor: pointer;
-      position: absolute;
-      top: -13.5px;
-      offset-inline-end: -13.5px;
-      width: 27px;
-      height: 27px;
+      background-clip: padding-box;
       background-color: #FFF;
       background-image: url("chrome://browser/skin/page-action.svg");
       background-position: 55%;
-      background-clip: padding-box;
       border: 1px solid #B1B1B3;
       border-radius: 100%;
       box-shadow: 0 2px rgba(12, 12, 13, 0.1);
+      cursor: pointer;
       fill: rgba(12, 12, 13, 0.8);
+      height: 27px;
+      offset-inline-end: -13.5px;
+      opacity: 0;
+      position: absolute;
+      top: -13.5px;
       transform: scale(0.25);
-      opacity: 0;
+      transition-duration: 200ms;
       transition-property: transform, opacity;
-      transition-duration: 200ms; }
-      .top-sites-list .top-site-outer .context-menu-button:focus, .top-sites-list .top-site-outer .context-menu-button:active {
-        transform: scale(1);
-        opacity: 1; }
-    .top-sites-list .top-site-outer:hover .tile, .top-sites-list .top-site-outer:focus .tile, .top-sites-list .top-site-outer.active .tile {
+      width: 27px; }
+      .top-sites-list .top-site-outer .context-menu-button:-moz-any(:active, :focus) {
+        opacity: 1;
+        transform: scale(1); }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .tile {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
-    .top-sites-list .top-site-outer:hover .context-menu-button, .top-sites-list .top-site-outer:focus .context-menu-button, .top-sites-list .top-site-outer.active .context-menu-button {
-      transform: scale(1);
-      opacity: 1; }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .edit-menu {
+      opacity: 1;
+      transform: scale(1); }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .context-menu-button {
+      opacity: 1;
+      transform: scale(1); }
     .top-sites-list .top-site-outer .tile {
-      position: relative;
-      height: 96px;
-      width: 96px;
       border-radius: 6px;
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
+      height: 96px;
+      position: relative;
+      width: 96px;
+      align-items: center;
       color: #737373;
-      font-weight: 200;
+      display: flex;
       font-size: 32px;
-      text-transform: uppercase;
-      display: flex;
-      align-items: center;
-      justify-content: center; }
+      font-weight: 200;
+      justify-content: center;
+      text-transform: uppercase; }
       .top-sites-list .top-site-outer .tile::before {
         content: attr(data-fallback); }
     .top-sites-list .top-site-outer.placeholder .tile {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
     .top-sites-list .top-site-outer.placeholder .screenshot {
       display: none; }
     .top-sites-list .top-site-outer .screenshot {
+      background-color: #FFF;
+      background-position: top left;
+      background-size: cover;
+      border-radius: 6px;
+      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      height: 100%;
+      left: 0;
+      opacity: 0;
       position: absolute;
       top: 0;
-      left: 0;
-      height: 100%;
-      width: 100%;
-      background-color: #FFF;
-      border-radius: 6px;
-      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
-      background-size: cover;
-      background-position: top left;
       transition: opacity 1s;
-      opacity: 0; }
+      width: 100%; }
       .top-sites-list .top-site-outer .screenshot.active {
         opacity: 1; }
     .top-sites-list .top-site-outer .top-site-icon {
-      position: absolute;
-      border-radius: 6px;
-      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      background-color: #F9F9FA;
       background-position: center center;
       background-repeat: no-repeat;
-      background-color: #F9F9FA; }
+      border-radius: 6px;
+      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      position: absolute; }
     .top-sites-list .top-site-outer .rich-icon {
-      top: 0;
+      background-size: 96px;
+      height: 100%;
       offset-inline-start: 0;
-      height: 100%;
-      width: 100%;
-      background-size: 96px; }
+      top: 0;
+      width: 100%; }
     .top-sites-list .top-site-outer .default-icon {
+      background-size: 32px;
       bottom: -6px;
       height: 42px;
       offset-inline-end: -6px;
       width: 42px;
-      background-size: 32px;
+      align-items: center;
       display: flex;
-      align-items: center;
-      justify-content: center;
-      font-size: 20px; }
+      font-size: 20px;
+      justify-content: center; }
       .top-sites-list .top-site-outer .default-icon[data-fallback]::before {
         content: attr(data-fallback); }
     .top-sites-list .top-site-outer .title {
       font: message-box;
       height: 30px;
       line-height: 30px;
       text-align: center;
       width: 96px;
@@ -418,17 +421,17 @@ main {
       offset-inline-end: -12.5px;
       opacity: 0;
       overflow: hidden;
       top: -12.5px;
       transform: scale(0.25);
       transition-property: transform, opacity;
       transition-duration: 200ms;
       z-index: 1000; }
-      .top-sites-list .top-site-outer .edit-menu:focus, .top-sites-list .top-site-outer .edit-menu:active {
+      .top-sites-list .top-site-outer .edit-menu:-moz-any(:active, :focus) {
         transform: scale(1);
         opacity: 1; }
       .top-sites-list .top-site-outer .edit-menu button {
         border: 0;
         border-right: 1px solid #B1B1B3;
         background-color: #FFF;
         cursor: pointer;
         height: 100%;
@@ -438,34 +441,31 @@ main {
         .top-sites-list .top-site-outer .edit-menu button:first-child:dir(ltr), .top-sites-list .top-site-outer .edit-menu button:last-child:dir(rtl) {
           width: 30px; }
         .top-sites-list .top-site-outer .edit-menu button:last-child:dir(ltr), .top-sites-list .top-site-outer .edit-menu button:first-child:dir(rtl) {
           width: 28px; }
         .top-sites-list .top-site-outer .edit-menu button:last-child:dir(ltr) {
           border-right: 0; }
         .top-sites-list .top-site-outer .edit-menu button:first-child:dir(rtl) {
           border-right: 0; }
-    .top-sites-list .top-site-outer:hover .edit-menu, .top-sites-list .top-site-outer:focus .edit-menu, .top-sites-list .top-site-outer.active .edit-menu {
-      transform: scale(1);
-      opacity: 1; }
 
 .edit-topsites-wrapper .edit-topsites-button {
   border-right: 1px solid #D7D7DB;
   line-height: 13px;
   offset-inline-end: 24px;
   opacity: 0;
   padding: 0 10px;
   pointer-events: none;
   position: absolute;
   top: 2px;
   transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
   .edit-topsites-wrapper .edit-topsites-button:dir(rtl) {
     border-left: 1px solid #D7D7DB;
     border-right: 0; }
-  .edit-topsites-wrapper .edit-topsites-button:focus, .edit-topsites-wrapper .edit-topsites-button:active {
+  .edit-topsites-wrapper .edit-topsites-button:-moz-any(:active, :focus) {
     opacity: 1; }
   .edit-topsites-wrapper .edit-topsites-button button {
     background: none;
     border: 0;
     color: #737373;
     cursor: pointer;
     font-size: 12px;
     padding: 0; }
@@ -494,17 +494,17 @@ main {
   width: auto; }
   .edit-topsites-wrapper .show-more:dir(rtl),
   .edit-topsites-wrapper .show-less:dir(rtl) {
     background-position: right 10px center; }
   .edit-topsites-wrapper .show-more span,
   .edit-topsites-wrapper .show-less span {
     padding-inline-start: 3px; }
 
-section.top-sites:not(.collapsed):hover .edit-topsites-button {
+.top-sites:not(.collapsed):hover .edit-topsites-button {
   opacity: 1;
   pointer-events: auto; }
 
 .topsite-form .form-wrapper {
   margin: auto;
   max-width: 350px;
   padding: 15px 0; }
   .topsite-form .form-wrapper .field {
@@ -559,69 +559,69 @@ section.top-sites:not(.collapsed):hover 
   0% {
     opacity: 0;
     transform: translateY(15px); }
   100% {
     opacity: 1;
     transform: translateY(0); } }
 
 .sections-list .section-list {
-  margin: 0;
   display: grid;
+  grid-gap: 32px;
   grid-template-columns: repeat(auto-fit, 224px);
-  grid-gap: 32px; }
+  margin: 0; }
   @media (max-width: 544px) {
     .sections-list .section-list .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 800px) {
     .sections-list .section-list :nth-child(2n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1248px) {
     .sections-list .section-list :nth-child(3n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
 
 .sections-list .section-empty-state {
-  width: 100%;
-  height: 266px;
+  border: 1px solid #D7D7DB;
+  border-radius: 3px;
   display: flex;
-  border: 1px solid #D7D7DB;
-  border-radius: 3px; }
+  height: 266px;
+  width: 100%; }
   .sections-list .section-empty-state .empty-state {
     margin: auto;
     max-width: 350px; }
     .sections-list .section-empty-state .empty-state .empty-state-icon {
-      background-size: 50px 50px;
+      background-position: center;
       background-repeat: no-repeat;
-      background-position: center;
+      background-size: 50px 50px;
+      -moz-context-properties: fill;
+      display: block;
       fill: rgba(12, 12, 13, 0.6);
-      -moz-context-properties: fill;
       height: 50px;
-      width: 50px;
       margin: 0 auto;
-      display: block; }
+      width: 50px; }
     .sections-list .section-empty-state .empty-state .empty-state-message {
-      margin-bottom: 0;
+      color: #737373;
       font-size: 13px;
-      color: #737373;
+      margin-bottom: 0;
       text-align: center; }
 
 .topic {
+  color: #737373;
   font-size: 12px;
-  color: #737373;
-  margin-top: 12px;
-  line-height: 1.6; }
+  line-height: 1.6;
+  margin-top: 12px; }
   @media (min-width: 800px) {
     .topic {
       line-height: 16px; } }
   .topic ul {
     margin: 0;
     padding: 0; }
     @media (min-width: 800px) {
       .topic ul {
@@ -651,110 +651,110 @@ section.top-sites:not(.collapsed):hover 
       fill: #008EA4;
       height: 16px;
       margin-inline-start: 5px;
       vertical-align: top;
       width: 12px; }
     .topic .topic-read-more:dir(rtl)::after {
       transform: scaleX(-1); }
   .topic::after {
-    content: "";
-    display: table;
-    clear: both; }
+    clear: both;
+    content: '';
+    display: table; }
 
 .search-wrapper {
   cursor: default;
   display: flex;
-  position: relative;
+  height: 35px;
   margin: 1px 1px 40px;
-  width: 100%;
-  height: 35px; }
+  position: relative;
+  width: 100%; }
   .search-wrapper input {
-    border: none;
+    border: 0;
     border-radius: 3px;
     box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
     color: inherit;
+    font-size: 15px;
     padding: 0;
     padding-inline-end: 36px;
     padding-inline-start: 35px;
-    width: 100%;
-    font-size: 15px; }
+    width: 100%; }
   .search-wrapper:hover input {
     box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.25); }
   .search-wrapper:active input,
   .search-wrapper input:focus {
     box-shadow: 0 0 0 3px #0A84FF; }
   .search-wrapper .search-label {
     background: url("chrome://browser/skin/search-glass.svg") no-repeat 12px center/16px;
+    -moz-context-properties: fill;
     fill: rgba(12, 12, 13, 0.4);
-    -moz-context-properties: fill;
+    height: 100%;
+    offset-inline-start: 0;
     position: absolute;
-    offset-inline-start: 0;
-    height: 100%;
     width: 35px; }
   .search-wrapper .search-button {
     background: url("chrome://browser/skin/forward.svg") no-repeat center center;
-    border-radius: 0 3px 3px 0;
+    background-size: 16px 16px;
     border: 0;
-    width: 36px;
+    border-radius: 0 3px 3px 0;
+    -moz-context-properties: fill;
     fill: rgba(12, 12, 13, 0.4);
-    -moz-context-properties: fill;
-    background-size: 16px 16px;
     height: 100%;
     offset-inline-end: 0;
-    position: absolute; }
+    position: absolute;
+    width: 36px; }
     .search-wrapper .search-button:focus, .search-wrapper .search-button:hover {
       background-color: rgba(12, 12, 13, 0.1);
       cursor: pointer; }
     .search-wrapper .search-button:active {
       background-color: rgba(12, 12, 13, 0.2); }
     .search-wrapper .search-button:dir(rtl) {
       transform: scaleX(-1); }
   .search-wrapper .contentSearchSuggestionTable {
     border: 0;
     transform: translateY(2px); }
 
 .context-menu {
+  background: #F9F9FA;
+  border-radius: 5px;
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
   display: block;
-  position: absolute;
   font-size: 14px;
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
-  top: 6.75px;
-  offset-inline-start: 100%;
   margin-inline-start: 5px;
-  z-index: 10000;
-  background: #F9F9FA;
-  border-radius: 5px; }
+  offset-inline-start: 100%;
+  position: absolute;
+  top: 6.75px;
+  z-index: 10000; }
   .context-menu > ul {
+    list-style: none;
     margin: 0;
-    padding: 5px 0;
-    list-style: none; }
+    padding: 5px 0; }
     .context-menu > ul > li {
       margin: 0;
       width: 100%; }
       .context-menu > ul > li.separator {
-        margin: 5px 0;
-        border-bottom: 1px solid rgba(0, 0, 0, 0.2); }
+        border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+        margin: 5px 0; }
       .context-menu > ul > li > a {
-        outline: none;
-        cursor: pointer;
+        align-items: center;
         color: inherit;
-        white-space: nowrap;
-        padding: 3px 12px;
+        cursor: pointer;
+        display: flex;
         line-height: 16px;
-        display: flex;
-        align-items: center; }
-        .context-menu > ul > li > a:hover, .context-menu > ul > li > a:focus {
+        outline: none;
+        padding: 3px 12px;
+        white-space: nowrap; }
+        .context-menu > ul > li > a:-moz-any(:focus, :hover) {
           background: #0060DF;
           color: #FFF; }
-          .context-menu > ul > li > a:hover a, .context-menu > ul > li > a:focus a {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover) a {
             color: #0C0C0D; }
-          .context-menu > ul > li > a:hover .icon, .context-menu > ul > li > a:focus .icon {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover) .icon {
             fill: #FFF; }
-          .context-menu > ul > li > a:hover:hover, .context-menu > ul > li > a:hover:focus, .context-menu > ul > li > a:focus:hover, .context-menu > ul > li > a:focus:focus {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover):-moz-any(:focus, :hover) {
             color: #FFF; }
 
 .prefs-pane {
   color: #4A4A4F;
   font-size: 14px;
   line-height: 21px; }
   .prefs-pane .sidebar {
     background: #FFF;
@@ -854,79 +854,79 @@ section.top-sites:not(.collapsed):hover 
     offset-inline-start: 0;
     position: absolute;
     top: 0;
     width: 21px; }
   .prefs-pane [type='checkbox']:not(:checked) + label::after,
   .prefs-pane [type='checkbox']:checked + label::after {
     background: url("chrome://global/skin/in-content/check.svg") no-repeat center center;
     content: '';
+    -moz-context-properties: fill, stroke;
+    fill: #0060DF;
     height: 21px;
     offset-inline-start: 0;
     position: absolute;
+    stroke: none;
     top: 0;
-    width: 21px;
-    -moz-context-properties: fill, stroke;
-    fill: #0060DF;
-    stroke: none; }
+    width: 21px; }
   .prefs-pane [type='checkbox']:not(:checked) + label::after {
     opacity: 0; }
   .prefs-pane [type='checkbox']:checked + label::after {
     opacity: 1; }
   .prefs-pane [type='checkbox']:not(:disabled) + label:hover::before {
     border: 1px solid #0060DF; }
   .prefs-pane [type='checkbox']:not(:disabled):checked:focus + label::before,
   .prefs-pane [type='checkbox']:not(:disabled):not(:checked):focus + label::before {
     border: 1px dotted #0060DF; }
 
 .prefs-pane-button button {
   background-color: transparent;
   border: 0;
   cursor: pointer;
   fill: rgba(12, 12, 13, 0.6);
+  offset-inline-end: 15px;
   padding: 15px;
   position: fixed;
-  offset-inline-end: 15px;
   top: 15px;
   z-index: 12001; }
   .prefs-pane-button button:hover {
     background-color: #EDEDF0; }
   .prefs-pane-button button:active {
     background-color: #F9F9FA; }
 
 .confirmation-dialog .modal {
-  position: fixed;
-  width: 400px;
-  top: 20%;
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
   left: 50%;
   margin-left: -200px;
-  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.08); }
+  position: fixed;
+  top: 20%;
+  width: 400px; }
 
 .confirmation-dialog section {
   margin: 0; }
 
 .confirmation-dialog .modal-message {
+  display: flex;
   padding: 16px;
-  padding-bottom: 0;
-  display: flex; }
+  padding-bottom: 0; }
   .confirmation-dialog .modal-message p {
     margin: 0;
     margin-bottom: 16px; }
 
 .confirmation-dialog .actions {
-  padding: 0px 16px 0 16px;
-  border: none;
+  border: 0;
+  display: flex;
   flex-wrap: nowrap;
-  display: flex; }
+  padding: 0 16px; }
   .confirmation-dialog .actions button {
     margin-inline-end: 16px;
     width: 50%; }
     .confirmation-dialog .actions button.done {
-      margin-inline-start: 0;
-      margin-inline-end: 0; }
+      margin-inline-end: 0;
+      margin-inline-start: 0; }
 
 .confirmation-dialog .icon {
   margin-inline-end: 16px; }
 
 .modal-overlay {
   background: #EDEDF0;
   height: 100%;
   left: 0;
@@ -940,142 +940,142 @@ section.top-sites:not(.collapsed):hover 
   background: #FFF;
   border: 1px solid #D7D7DB;
   border-radius: 5px;
   font-size: 15px;
   z-index: 11002; }
 
 .card-outer {
   background: #FFF;
+  border-radius: 3px;
   display: inline-block;
+  height: 266px;
   margin-inline-end: 32px;
-  width: 224px;
-  border-radius: 3px;
-  height: 266px;
-  position: relative; }
+  position: relative;
+  width: 224px; }
   .card-outer .context-menu-button {
-    cursor: pointer;
-    position: absolute;
-    top: -13.5px;
-    offset-inline-end: -13.5px;
-    width: 27px;
-    height: 27px;
+    background-clip: padding-box;
     background-color: #FFF;
     background-image: url("chrome://browser/skin/page-action.svg");
     background-position: 55%;
-    background-clip: padding-box;
     border: 1px solid #B1B1B3;
     border-radius: 100%;
     box-shadow: 0 2px rgba(12, 12, 13, 0.1);
+    cursor: pointer;
     fill: rgba(12, 12, 13, 0.8);
+    height: 27px;
+    offset-inline-end: -13.5px;
+    opacity: 0;
+    position: absolute;
+    top: -13.5px;
     transform: scale(0.25);
-    opacity: 0;
+    transition-duration: 200ms;
     transition-property: transform, opacity;
-    transition-duration: 200ms; }
-    .card-outer .context-menu-button:focus, .card-outer .context-menu-button:active {
-      transform: scale(1);
-      opacity: 1; }
+    width: 27px; }
+    .card-outer .context-menu-button:-moz-any(:active, :focus) {
+      opacity: 1;
+      transform: scale(1); }
   .card-outer.placeholder {
     background: transparent; }
     .card-outer.placeholder .card {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
   .card-outer .card {
-    height: 100%;
     border-radius: 3px;
-    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1); }
+    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
+    height: 100%; }
   .card-outer > a {
+    color: inherit;
     display: block;
-    color: inherit;
     height: 100%;
     outline: none;
     position: absolute;
     width: 224px; }
-    .card-outer > a.active .card, .card-outer > a:focus .card {
+    .card-outer > a:-moz-any(.active, :focus) .card {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
-    .card-outer > a.active .card-title, .card-outer > a:focus .card-title {
+    .card-outer > a:-moz-any(.active, :focus) .card-title {
       color: #0060DF; }
   .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) {
-    outline: none;
     box-shadow: 0 0 0 5px #D7D7DB;
-    transition: box-shadow 150ms; }
+    transition: box-shadow 150ms;
+    outline: none; }
     .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .context-menu-button {
-      transform: scale(1);
-      opacity: 1; }
+      opacity: 1;
+      transform: scale(1); }
     .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-title {
       color: #0060DF; }
   .card-outer .card-preview-image-outer {
     background-color: #F9F9FA;
-    position: relative;
+    border-radius: 3px 3px 0 0;
     height: 122px;
-    border-radius: 3px 3px 0 0;
-    overflow: hidden; }
+    overflow: hidden;
+    position: relative; }
     .card-outer .card-preview-image-outer::after {
       border-bottom: 1px solid rgba(0, 0, 0, 0.05);
       bottom: 0;
-      content: " ";
+      content: '';
       position: absolute;
       width: 100%; }
     .card-outer .card-preview-image-outer .card-preview-image {
-      width: 100%;
-      height: 100%;
-      background-size: cover;
       background-position: center;
       background-repeat: no-repeat;
+      background-size: cover;
+      height: 100%;
       opacity: 0;
-      transition: opacity 1s cubic-bezier(0.07, 0.95, 0, 1); }
+      transition: opacity 1s cubic-bezier(0.07, 0.95, 0, 1);
+      width: 100%; }
       .card-outer .card-preview-image-outer .card-preview-image.loaded {
         opacity: 1; }
   .card-outer .card-details {
     padding: 15px 16px 12px; }
     .card-outer .card-details.no-image {
       padding-top: 16px; }
   .card-outer .card-text {
-    overflow: hidden;
-    max-height: 78px; }
+    max-height: 78px;
+    overflow: hidden; }
     .card-outer .card-text.no-image {
       max-height: 192px; }
     .card-outer .card-text.no-host-name, .card-outer .card-text.no-context {
       max-height: 97px; }
     .card-outer .card-text.no-image.no-host-name, .card-outer .card-text.no-image.no-context {
       max-height: 211px; }
     .card-outer .card-text.no-host-name.no-context {
       max-height: 116px; }
     .card-outer .card-text.no-image.no-host-name.no-context {
       max-height: 230px; }
     .card-outer .card-text:not(.no-description) .card-title {
       max-height: 57px;
       overflow: hidden; }
   .card-outer .card-host-name {
     color: #737373;
     font-size: 10px;
+    overflow: hidden;
     padding-bottom: 4px;
-    text-transform: uppercase;
-    overflow: hidden;
-    text-overflow: ellipsis; }
+    text-overflow: ellipsis;
+    text-transform: uppercase; }
   .card-outer .card-title {
+    font-size: 14px;
+    line-height: 19px;
     margin: 0 0 2px;
-    font-size: 14px;
-    word-wrap: break-word;
-    line-height: 19px; }
+    word-wrap: break-word; }
   .card-outer .card-description {
     font-size: 12px;
+    line-height: 19px;
     margin: 0;
-    word-wrap: break-word;
     overflow: hidden;
-    line-height: 19px; }
+    word-wrap: break-word; }
   .card-outer .card-context {
+    bottom: 0;
+    color: #737373;
+    display: flex;
+    font-size: 11px;
+    left: 0;
     padding: 12px 16px 12px 14px;
     position: absolute;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    color: #737373;
-    font-size: 11px;
-    display: flex; }
+    right: 0; }
   .card-outer .card-context-icon {
     fill: rgba(12, 12, 13, 0.6);
     margin-inline-end: 6px; }
   .card-outer .card-context-label {
     flex-grow: 1;
     line-height: 16px;
     overflow: hidden;
     text-overflow: ellipsis;
@@ -1098,23 +1098,23 @@ section.top-sites:not(.collapsed):hover 
       .manual-migration-container p {
         align-self: center;
         display: flex;
         justify-content: space-between; } }
   .manual-migration-container .icon {
     display: none; }
     @media (min-width: 544px) {
       .manual-migration-container .icon {
+        align-self: center;
         display: block;
         fill: rgba(12, 12, 13, 0.6);
-        margin-inline-end: 6px;
-        align-self: center; } }
+        margin-inline-end: 6px; } }
 
 .manual-migration-actions {
-  border: none;
+  border: 0;
   display: block;
   flex-wrap: nowrap; }
   @media (min-width: 544px) {
     .manual-migration-actions {
       display: flex;
       justify-content: space-between;
       padding: 0; } }
   .manual-migration-actions button {
@@ -1126,102 +1126,102 @@ section.top-sites:not(.collapsed):hover 
 
 .collapsible-section .section-title .click-target {
   cursor: pointer;
   vertical-align: top;
   white-space: nowrap; }
 
 .collapsible-section .section-title .icon-arrowhead-down,
 .collapsible-section .section-title .icon-arrowhead-forward {
-  margin-top: -1px;
-  margin-inline-start: 8px; }
+  margin-inline-start: 8px;
+  margin-top: -1px; }
 
 .collapsible-section .section-top-bar {
   position: relative; }
   .collapsible-section .section-top-bar .section-info-option {
     offset-inline-end: 0;
     position: absolute;
     top: 0; }
   .collapsible-section .section-top-bar .info-option-icon {
     background-image: url("../data/content/assets/glyph-info-option-12.svg");
-    background-size: 12px 12px;
+    background-position: center;
     background-repeat: no-repeat;
-    background-position: center;
+    background-size: 12px 12px;
+    -moz-context-properties: fill;
+    display: inline-block;
     fill: rgba(12, 12, 13, 0.6);
-    -moz-context-properties: fill;
     height: 16px;
-    width: 16px;
-    display: inline-block;
     margin-bottom: -2px;
     opacity: 0;
-    transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
-    .collapsible-section .section-top-bar .info-option-icon:focus, .collapsible-section .section-top-bar .info-option-icon:active {
+    transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+    width: 16px; }
+    .collapsible-section .section-top-bar .info-option-icon[aria-expanded='true'] {
+      background-color: rgba(12, 12, 13, 0.1);
+      border-radius: 1px;
+      box-shadow: 0 0 0 5px rgba(12, 12, 13, 0.1);
+      fill: rgba(12, 12, 13, 0.8); }
+      .collapsible-section .section-top-bar .info-option-icon[aria-expanded='true'] + .info-option {
+        opacity: 1;
+        transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+        visibility: visible; }
+    .collapsible-section .section-top-bar .info-option-icon:not([aria-expanded='true']) + .info-option {
+      pointer-events: none; }
+    .collapsible-section .section-top-bar .info-option-icon:-moz-any(:active, :focus) {
       opacity: 1; }
-  .collapsible-section .section-top-bar .info-option-icon[aria-expanded="true"] {
-    background-color: rgba(12, 12, 13, 0.1);
-    border-radius: 1px;
-    box-shadow: 0 0 0 5px rgba(12, 12, 13, 0.1);
-    fill: rgba(12, 12, 13, 0.8); }
   .collapsible-section .section-top-bar .section-info-option .info-option {
-    visibility: hidden;
     opacity: 0;
-    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
+    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+    visibility: hidden; }
     .collapsible-section .section-top-bar .section-info-option .info-option::after, .collapsible-section .section-top-bar .section-info-option .info-option::before {
-      content: "";
+      content: '';
       offset-inline-end: 0;
       position: absolute; }
     .collapsible-section .section-top-bar .section-info-option .info-option::before {
       background-image: url("chrome://global/skin/arrow/panelarrow-vertical-themed.svg");
       background-position: right 6px bottom;
       background-repeat: no-repeat;
       background-size: 20px 10px;
       height: 32px;
       top: -32px;
       width: 43px; }
     .collapsible-section .section-top-bar .section-info-option .info-option:dir(rtl)::before {
       background-position-x: 6px; }
     .collapsible-section .section-top-bar .section-info-option .info-option::after {
       height: 10px;
       offset-inline-start: 0;
       top: -10px; }
-  .collapsible-section .section-top-bar .info-option-icon[aria-expanded="true"] + .info-option {
-    visibility: visible;
-    opacity: 1;
-    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
-  .collapsible-section .section-top-bar .info-option-icon:not([aria-expanded="true"]) + .info-option {
-    pointer-events: none; }
   .collapsible-section .section-top-bar .info-option {
-    z-index: 9999;
-    position: absolute;
     background: #FFF;
     border: 1px solid #D7D7DB;
     border-radius: 3px;
+    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
     font-size: 13px;
     line-height: 120%;
     margin-inline-end: -9px;
     offset-inline-end: 0;
+    padding: 24px;
+    position: absolute;
     top: 26px;
+    -moz-user-select: none;
     width: 320px;
-    padding: 24px;
-    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
-    -moz-user-select: none; }
+    z-index: 9999; }
   .collapsible-section .section-top-bar .info-option-header {
     font-size: 15px;
     font-weight: 600; }
   .collapsible-section .section-top-bar .info-option-body {
     margin: 0;
     margin-top: 12px; }
   .collapsible-section .section-top-bar .info-option-link {
     color: #0060DF;
     margin-left: 7px; }
   .collapsible-section .section-top-bar .info-option-manage {
     margin-top: 24px; }
     .collapsible-section .section-top-bar .info-option-manage button {
-      background: none;
-      border: none;
+      background: 0;
+      border: 0;
       color: #0060DF;
       cursor: pointer;
       margin: 0;
       padding: 0; }
       .collapsible-section .section-top-bar .info-option-manage button::after {
         background-image: url("../data/content/assets/topic-show-more-12.svg");
         background-repeat: no-repeat;
         content: '';
@@ -1251,24 +1251,24 @@ section.top-sites:not(.collapsed):hover 
         width: 340px; } }
     @media (min-width: 800px) {
       .collapsible-section .section-disclaimer .section-disclaimer-text {
         width: 610px; } }
   .collapsible-section .section-disclaimer a {
     color: #008EA4;
     padding-left: 3px; }
   .collapsible-section .section-disclaimer button {
-    margin-top: 2px;
-    offset-inline-end: 0;
-    min-height: 26px;
-    max-width: 130px;
     background: #F9F9FA;
     border: 1px solid #B1B1B3;
     border-radius: 4px;
-    cursor: pointer; }
+    cursor: pointer;
+    margin-top: 2px;
+    max-width: 130px;
+    min-height: 26px;
+    offset-inline-end: 0; }
     .collapsible-section .section-disclaimer button:hover:not(.dismiss) {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
     @media (min-width: 416px) {
       .collapsible-section .section-disclaimer button {
         position: absolute; } }
 
 .collapsible-section .section-body {
--- a/browser/extensions/activity-stream/css/activity-stream-mac.css
+++ b/browser/extensions/activity-stream/css/activity-stream-mac.css
@@ -18,40 +18,40 @@ button,
 input {
   font-family: inherit;
   font-size: inherit; }
 
 [hidden] {
   display: none !important; }
 
 .icon {
-  display: inline-block;
-  width: 16px;
-  height: 16px;
-  background-size: 16px;
   background-position: center center;
   background-repeat: no-repeat;
-  vertical-align: middle;
+  background-size: 16px;
+  -moz-context-properties: fill;
+  display: inline-block;
   fill: rgba(12, 12, 13, 0.8);
-  -moz-context-properties: fill; }
+  height: 16px;
+  vertical-align: middle;
+  width: 16px; }
   .icon.icon-spacer {
     margin-inline-end: 8px; }
   .icon.icon-small-spacer {
     margin-inline-end: 6px; }
   .icon.icon-bookmark-added {
     background-image: url("chrome://browser/skin/bookmark.svg"); }
   .icon.icon-bookmark-hollow {
     background-image: url("chrome://browser/skin/bookmark-hollow.svg"); }
   .icon.icon-delete {
     background-image: url("../data/content/assets/glyph-delete-16.svg"); }
   .icon.icon-modal-delete {
     background-image: url("../data/content/assets/glyph-modal-delete-32.svg");
-    width: 32px;
+    background-size: 32px;
     height: 32px;
-    background-size: 32px; }
+    width: 32px; }
   .icon.icon-dismiss {
     background-image: url("../data/content/assets/glyph-dismiss-16.svg"); }
   .icon.icon-info {
     background-image: url("../data/content/assets/glyph-info-16.svg"); }
   .icon.icon-import {
     background-image: url("../data/content/assets/glyph-import-16.svg"); }
   .icon.icon-new-window {
     background-image: url("../data/content/assets/glyph-newWindow-16.svg"); }
@@ -66,18 +66,17 @@ input {
   .icon.icon-edit {
     background-image: url("../data/content/assets/glyph-edit-16.svg"); }
   .icon.icon-pocket {
     background-image: url("../data/content/assets/glyph-pocket-16.svg"); }
   .icon.icon-historyItem {
     background-image: url("../data/content/assets/glyph-historyItem-16.svg"); }
   .icon.icon-trending {
     background-image: url("../data/content/assets/glyph-trending-16.svg");
-    transform: translateY(2px);
-    /* trending bolt is visually top heavy */ }
+    transform: translateY(2px); }
   .icon.icon-now {
     background-image: url("chrome://browser/skin/history.svg"); }
   .icon.icon-topsites {
     background-image: url("../data/content/assets/glyph-topsites-16.svg"); }
   .icon.icon-pin-small {
     background-image: url("../data/content/assets/glyph-pin-12.svg");
     background-size: 12px;
     height: 12px;
@@ -120,65 +119,65 @@ h2 {
 
 a {
   color: #0060DF;
   text-decoration: none; }
   a:hover {
     color: #008EA4; }
 
 .sr-only {
-  position: absolute;
-  width: 1px;
+  border: 0;
+  clip: rect(0, 0, 0, 0);
   height: 1px;
-  padding: 0;
   margin: -1px;
   overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0; }
+  padding: 0;
+  position: absolute;
+  width: 1px; }
 
 .inner-border {
   border: 1px solid #D7D7DB;
   border-radius: 3px;
+  height: 100%;
+  left: 0;
+  pointer-events: none;
   position: absolute;
   top: 0;
-  left: 0;
   width: 100%;
-  height: 100%;
-  pointer-events: none;
   z-index: 100; }
 
 @keyframes fadeIn {
   from {
     opacity: 0; }
   to {
     opacity: 1; } }
 
 .show-on-init {
   opacity: 0;
   transition: opacity 0.2s ease-in; }
   .show-on-init.on {
-    opacity: 1;
-    animation: fadeIn 0.2s; }
+    animation: fadeIn 0.2s;
+    opacity: 1; }
 
 .actions {
   border-top: 1px solid #D7D7DB;
   display: flex;
   flex-direction: row;
+  flex-wrap: wrap;
+  justify-content: flex-start;
   margin: 0;
-  padding: 15px 25px 0 25px;
-  justify-content: flex-start;
-  flex-wrap: wrap; }
+  padding: 15px 25px 0; }
   .actions button {
     background-color: #F9F9FA;
     border: 1px solid #B1B1B3;
     border-radius: 4px;
     color: inherit;
     cursor: pointer;
+    margin-bottom: 15px;
     padding: 10px 30px;
-    margin-bottom: 15px;
     white-space: nowrap; }
     .actions button:hover:not(.dismiss) {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
     .actions button.dismiss {
       border: 0;
       padding: 0;
       text-decoration: underline; }
@@ -188,26 +187,26 @@ a {
       color: #FFF;
       margin-inline-start: auto; }
 
 #snippets-container {
   z-index: 1; }
 
 .outer-wrapper {
   display: flex;
-  padding: 40px 32px 32px;
+  flex-grow: 1;
   height: 100%;
-  flex-grow: 1; }
+  padding: 40px 32px 32px; }
   .outer-wrapper.fixed-to-top {
     height: auto; }
 
 main {
   margin: auto;
-  width: 224px;
-  padding-bottom: 48px; }
+  padding-bottom: 48px;
+  width: 224px; }
   @media (min-width: 416px) {
     main {
       width: 352px; } }
   @media (min-width: 544px) {
     main {
       width: 480px; } }
   @media (min-width: 800px) {
     main {
@@ -240,157 +239,161 @@ main {
 .body-wrapper.on .sections-list .section:last-of-type,
 .body-wrapper.on .topic {
   opacity: 1; }
 
 .top-sites-list {
   list-style: none;
   margin: 0;
   margin-bottom: -18px;
-  padding: 0;
-  margin-inline-end: -32px; }
+  margin-inline-end: -32px;
+  padding: 0; }
   @media (max-width: 416px) {
     .top-sites-list :nth-child(2n+1) .context-menu {
+      margin-inline-end: auto;
       margin-inline-start: auto;
-      margin-inline-end: auto;
-      offset-inline-start: -32px;
-      offset-inline-end: auto; }
+      offset-inline-end: auto;
+      offset-inline-start: -32px; }
     .top-sites-list :nth-child(2n) .context-menu {
-      margin-inline-start: auto;
       margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      margin-inline-start: auto;
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 416px) and (max-width: 544px) {
-    .top-sites-list :nth-child(3n+2) .context-menu, .top-sites-list :nth-child(3n) .context-menu {
-      margin-inline-start: auto;
+    .top-sites-list :nth-child(3n+2) .context-menu,
+    .top-sites-list :nth-child(3n) .context-menu {
       margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      margin-inline-start: auto;
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 800px) {
     .top-sites-list :nth-child(4n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 768px) {
     .top-sites-list :nth-child(4n+3) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1248px) {
     .top-sites-list :nth-child(6n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1024px) {
     .top-sites-list :nth-child(6n+5) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   .top-sites-list li {
     display: inline-block;
     margin: 0 0 8px;
     margin-inline-end: 32px; }
   .top-sites-list .top-site-outer {
     position: relative; }
     .top-sites-list .top-site-outer > a {
+      color: inherit;
       display: block;
-      color: inherit;
       outline: none; }
-      .top-sites-list .top-site-outer > a.active .tile, .top-sites-list .top-site-outer > a:focus .tile {
+      .top-sites-list .top-site-outer > a:-moz-any(.active, :focus) .tile {
         box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
         transition: box-shadow 150ms; }
     .top-sites-list .top-site-outer .context-menu-button {
-      cursor: pointer;
-      position: absolute;
-      top: -13.5px;
-      offset-inline-end: -13.5px;
-      width: 27px;
-      height: 27px;
+      background-clip: padding-box;
       background-color: #FFF;
       background-image: url("chrome://browser/skin/page-action.svg");
       background-position: 55%;
-      background-clip: padding-box;
       border: 1px solid #B1B1B3;
       border-radius: 100%;
       box-shadow: 0 2px rgba(12, 12, 13, 0.1);
+      cursor: pointer;
       fill: rgba(12, 12, 13, 0.8);
+      height: 27px;
+      offset-inline-end: -13.5px;
+      opacity: 0;
+      position: absolute;
+      top: -13.5px;
       transform: scale(0.25);
-      opacity: 0;
+      transition-duration: 200ms;
       transition-property: transform, opacity;
-      transition-duration: 200ms; }
-      .top-sites-list .top-site-outer .context-menu-button:focus, .top-sites-list .top-site-outer .context-menu-button:active {
-        transform: scale(1);
-        opacity: 1; }
-    .top-sites-list .top-site-outer:hover .tile, .top-sites-list .top-site-outer:focus .tile, .top-sites-list .top-site-outer.active .tile {
+      width: 27px; }
+      .top-sites-list .top-site-outer .context-menu-button:-moz-any(:active, :focus) {
+        opacity: 1;
+        transform: scale(1); }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .tile {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
-    .top-sites-list .top-site-outer:hover .context-menu-button, .top-sites-list .top-site-outer:focus .context-menu-button, .top-sites-list .top-site-outer.active .context-menu-button {
-      transform: scale(1);
-      opacity: 1; }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .edit-menu {
+      opacity: 1;
+      transform: scale(1); }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .context-menu-button {
+      opacity: 1;
+      transform: scale(1); }
     .top-sites-list .top-site-outer .tile {
-      position: relative;
-      height: 96px;
-      width: 96px;
       border-radius: 6px;
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
+      height: 96px;
+      position: relative;
+      width: 96px;
+      align-items: center;
       color: #737373;
-      font-weight: 200;
+      display: flex;
       font-size: 32px;
-      text-transform: uppercase;
-      display: flex;
-      align-items: center;
-      justify-content: center; }
+      font-weight: 200;
+      justify-content: center;
+      text-transform: uppercase; }
       .top-sites-list .top-site-outer .tile::before {
         content: attr(data-fallback); }
     .top-sites-list .top-site-outer.placeholder .tile {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
     .top-sites-list .top-site-outer.placeholder .screenshot {
       display: none; }
     .top-sites-list .top-site-outer .screenshot {
+      background-color: #FFF;
+      background-position: top left;
+      background-size: cover;
+      border-radius: 6px;
+      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      height: 100%;
+      left: 0;
+      opacity: 0;
       position: absolute;
       top: 0;
-      left: 0;
-      height: 100%;
-      width: 100%;
-      background-color: #FFF;
-      border-radius: 6px;
-      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
-      background-size: cover;
-      background-position: top left;
       transition: opacity 1s;
-      opacity: 0; }
+      width: 100%; }
       .top-sites-list .top-site-outer .screenshot.active {
         opacity: 1; }
     .top-sites-list .top-site-outer .top-site-icon {
-      position: absolute;
-      border-radius: 6px;
-      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      background-color: #F9F9FA;
       background-position: center center;
       background-repeat: no-repeat;
-      background-color: #F9F9FA; }
+      border-radius: 6px;
+      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      position: absolute; }
     .top-sites-list .top-site-outer .rich-icon {
-      top: 0;
+      background-size: 96px;
+      height: 100%;
       offset-inline-start: 0;
-      height: 100%;
-      width: 100%;
-      background-size: 96px; }
+      top: 0;
+      width: 100%; }
     .top-sites-list .top-site-outer .default-icon {
+      background-size: 32px;
       bottom: -6px;
       height: 42px;
       offset-inline-end: -6px;
       width: 42px;
-      background-size: 32px;
+      align-items: center;
       display: flex;
-      align-items: center;
-      justify-content: center;
-      font-size: 20px; }
+      font-size: 20px;
+      justify-content: center; }
       .top-sites-list .top-site-outer .default-icon[data-fallback]::before {
         content: attr(data-fallback); }
     .top-sites-list .top-site-outer .title {
       font: message-box;
       height: 30px;
       line-height: 30px;
       text-align: center;
       width: 96px;
@@ -418,17 +421,17 @@ main {
       offset-inline-end: -12.5px;
       opacity: 0;
       overflow: hidden;
       top: -12.5px;
       transform: scale(0.25);
       transition-property: transform, opacity;
       transition-duration: 200ms;
       z-index: 1000; }
-      .top-sites-list .top-site-outer .edit-menu:focus, .top-sites-list .top-site-outer .edit-menu:active {
+      .top-sites-list .top-site-outer .edit-menu:-moz-any(:active, :focus) {
         transform: scale(1);
         opacity: 1; }
       .top-sites-list .top-site-outer .edit-menu button {
         border: 0;
         border-right: 1px solid #B1B1B3;
         background-color: #FFF;
         cursor: pointer;
         height: 100%;
@@ -438,34 +441,31 @@ main {
         .top-sites-list .top-site-outer .edit-menu button:first-child:dir(ltr), .top-sites-list .top-site-outer .edit-menu button:last-child:dir(rtl) {
           width: 30px; }
         .top-sites-list .top-site-outer .edit-menu button:last-child:dir(ltr), .top-sites-list .top-site-outer .edit-menu button:first-child:dir(rtl) {
           width: 28px; }
         .top-sites-list .top-site-outer .edit-menu button:last-child:dir(ltr) {
           border-right: 0; }
         .top-sites-list .top-site-outer .edit-menu button:first-child:dir(rtl) {
           border-right: 0; }
-    .top-sites-list .top-site-outer:hover .edit-menu, .top-sites-list .top-site-outer:focus .edit-menu, .top-sites-list .top-site-outer.active .edit-menu {
-      transform: scale(1);
-      opacity: 1; }
 
 .edit-topsites-wrapper .edit-topsites-button {
   border-right: 1px solid #D7D7DB;
   line-height: 13px;
   offset-inline-end: 24px;
   opacity: 0;
   padding: 0 10px;
   pointer-events: none;
   position: absolute;
   top: 2px;
   transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
   .edit-topsites-wrapper .edit-topsites-button:dir(rtl) {
     border-left: 1px solid #D7D7DB;
     border-right: 0; }
-  .edit-topsites-wrapper .edit-topsites-button:focus, .edit-topsites-wrapper .edit-topsites-button:active {
+  .edit-topsites-wrapper .edit-topsites-button:-moz-any(:active, :focus) {
     opacity: 1; }
   .edit-topsites-wrapper .edit-topsites-button button {
     background: none;
     border: 0;
     color: #737373;
     cursor: pointer;
     font-size: 12px;
     padding: 0; }
@@ -494,17 +494,17 @@ main {
   width: auto; }
   .edit-topsites-wrapper .show-more:dir(rtl),
   .edit-topsites-wrapper .show-less:dir(rtl) {
     background-position: right 10px center; }
   .edit-topsites-wrapper .show-more span,
   .edit-topsites-wrapper .show-less span {
     padding-inline-start: 3px; }
 
-section.top-sites:not(.collapsed):hover .edit-topsites-button {
+.top-sites:not(.collapsed):hover .edit-topsites-button {
   opacity: 1;
   pointer-events: auto; }
 
 .topsite-form .form-wrapper {
   margin: auto;
   max-width: 350px;
   padding: 15px 0; }
   .topsite-form .form-wrapper .field {
@@ -559,69 +559,69 @@ section.top-sites:not(.collapsed):hover 
   0% {
     opacity: 0;
     transform: translateY(15px); }
   100% {
     opacity: 1;
     transform: translateY(0); } }
 
 .sections-list .section-list {
-  margin: 0;
   display: grid;
+  grid-gap: 32px;
   grid-template-columns: repeat(auto-fit, 224px);
-  grid-gap: 32px; }
+  margin: 0; }
   @media (max-width: 544px) {
     .sections-list .section-list .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 800px) {
     .sections-list .section-list :nth-child(2n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1248px) {
     .sections-list .section-list :nth-child(3n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
 
 .sections-list .section-empty-state {
-  width: 100%;
-  height: 266px;
+  border: 1px solid #D7D7DB;
+  border-radius: 3px;
   display: flex;
-  border: 1px solid #D7D7DB;
-  border-radius: 3px; }
+  height: 266px;
+  width: 100%; }
   .sections-list .section-empty-state .empty-state {
     margin: auto;
     max-width: 350px; }
     .sections-list .section-empty-state .empty-state .empty-state-icon {
-      background-size: 50px 50px;
+      background-position: center;
       background-repeat: no-repeat;
-      background-position: center;
+      background-size: 50px 50px;
+      -moz-context-properties: fill;
+      display: block;
       fill: rgba(12, 12, 13, 0.6);
-      -moz-context-properties: fill;
       height: 50px;
-      width: 50px;
       margin: 0 auto;
-      display: block; }
+      width: 50px; }
     .sections-list .section-empty-state .empty-state .empty-state-message {
-      margin-bottom: 0;
+      color: #737373;
       font-size: 13px;
-      color: #737373;
+      margin-bottom: 0;
       text-align: center; }
 
 .topic {
+  color: #737373;
   font-size: 12px;
-  color: #737373;
-  margin-top: 12px;
-  line-height: 1.6; }
+  line-height: 1.6;
+  margin-top: 12px; }
   @media (min-width: 800px) {
     .topic {
       line-height: 16px; } }
   .topic ul {
     margin: 0;
     padding: 0; }
     @media (min-width: 800px) {
       .topic ul {
@@ -651,110 +651,110 @@ section.top-sites:not(.collapsed):hover 
       fill: #008EA4;
       height: 16px;
       margin-inline-start: 5px;
       vertical-align: top;
       width: 12px; }
     .topic .topic-read-more:dir(rtl)::after {
       transform: scaleX(-1); }
   .topic::after {
-    content: "";
-    display: table;
-    clear: both; }
+    clear: both;
+    content: '';
+    display: table; }
 
 .search-wrapper {
   cursor: default;
   display: flex;
-  position: relative;
+  height: 35px;
   margin: 1px 1px 40px;
-  width: 100%;
-  height: 35px; }
+  position: relative;
+  width: 100%; }
   .search-wrapper input {
-    border: none;
+    border: 0;
     border-radius: 3px;
     box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
     color: inherit;
+    font-size: 15px;
     padding: 0;
     padding-inline-end: 36px;
     padding-inline-start: 35px;
-    width: 100%;
-    font-size: 15px; }
+    width: 100%; }
   .search-wrapper:hover input {
     box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.25); }
   .search-wrapper:active input,
   .search-wrapper input:focus {
     box-shadow: 0 0 0 3px #0A84FF; }
   .search-wrapper .search-label {
     background: url("chrome://browser/skin/search-glass.svg") no-repeat 12px center/16px;
+    -moz-context-properties: fill;
     fill: rgba(12, 12, 13, 0.4);
-    -moz-context-properties: fill;
+    height: 100%;
+    offset-inline-start: 0;
     position: absolute;
-    offset-inline-start: 0;
-    height: 100%;
     width: 35px; }
   .search-wrapper .search-button {
     background: url("chrome://browser/skin/forward.svg") no-repeat center center;
-    border-radius: 0 3px 3px 0;
+    background-size: 16px 16px;
     border: 0;
-    width: 36px;
+    border-radius: 0 3px 3px 0;
+    -moz-context-properties: fill;
     fill: rgba(12, 12, 13, 0.4);
-    -moz-context-properties: fill;
-    background-size: 16px 16px;
     height: 100%;
     offset-inline-end: 0;
-    position: absolute; }
+    position: absolute;
+    width: 36px; }
     .search-wrapper .search-button:focus, .search-wrapper .search-button:hover {
       background-color: rgba(12, 12, 13, 0.1);
       cursor: pointer; }
     .search-wrapper .search-button:active {
       background-color: rgba(12, 12, 13, 0.2); }
     .search-wrapper .search-button:dir(rtl) {
       transform: scaleX(-1); }
   .search-wrapper .contentSearchSuggestionTable {
     border: 0;
     transform: translateY(2px); }
 
 .context-menu {
+  background: #F9F9FA;
+  border-radius: 5px;
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
   display: block;
-  position: absolute;
   font-size: 14px;
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
-  top: 6.75px;
-  offset-inline-start: 100%;
   margin-inline-start: 5px;
-  z-index: 10000;
-  background: #F9F9FA;
-  border-radius: 5px; }
+  offset-inline-start: 100%;
+  position: absolute;
+  top: 6.75px;
+  z-index: 10000; }
   .context-menu > ul {
+    list-style: none;
     margin: 0;
-    padding: 5px 0;
-    list-style: none; }
+    padding: 5px 0; }
     .context-menu > ul > li {
       margin: 0;
       width: 100%; }
       .context-menu > ul > li.separator {
-        margin: 5px 0;
-        border-bottom: 1px solid rgba(0, 0, 0, 0.2); }
+        border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+        margin: 5px 0; }
       .context-menu > ul > li > a {
-        outline: none;
-        cursor: pointer;
+        align-items: center;
         color: inherit;
-        white-space: nowrap;
-        padding: 3px 12px;
+        cursor: pointer;
+        display: flex;
         line-height: 16px;
-        display: flex;
-        align-items: center; }
-        .context-menu > ul > li > a:hover, .context-menu > ul > li > a:focus {
+        outline: none;
+        padding: 3px 12px;
+        white-space: nowrap; }
+        .context-menu > ul > li > a:-moz-any(:focus, :hover) {
           background: #0060DF;
           color: #FFF; }
-          .context-menu > ul > li > a:hover a, .context-menu > ul > li > a:focus a {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover) a {
             color: #0C0C0D; }
-          .context-menu > ul > li > a:hover .icon, .context-menu > ul > li > a:focus .icon {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover) .icon {
             fill: #FFF; }
-          .context-menu > ul > li > a:hover:hover, .context-menu > ul > li > a:hover:focus, .context-menu > ul > li > a:focus:hover, .context-menu > ul > li > a:focus:focus {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover):-moz-any(:focus, :hover) {
             color: #FFF; }
 
 .prefs-pane {
   color: #4A4A4F;
   font-size: 14px;
   line-height: 21px; }
   .prefs-pane .sidebar {
     background: #FFF;
@@ -854,79 +854,79 @@ section.top-sites:not(.collapsed):hover 
     offset-inline-start: 0;
     position: absolute;
     top: 0;
     width: 21px; }
   .prefs-pane [type='checkbox']:not(:checked) + label::after,
   .prefs-pane [type='checkbox']:checked + label::after {
     background: url("chrome://global/skin/in-content/check.svg") no-repeat center center;
     content: '';
+    -moz-context-properties: fill, stroke;
+    fill: #0060DF;
     height: 21px;
     offset-inline-start: 0;
     position: absolute;
+    stroke: none;
     top: 0;
-    width: 21px;
-    -moz-context-properties: fill, stroke;
-    fill: #0060DF;
-    stroke: none; }
+    width: 21px; }
   .prefs-pane [type='checkbox']:not(:checked) + label::after {
     opacity: 0; }
   .prefs-pane [type='checkbox']:checked + label::after {
     opacity: 1; }
   .prefs-pane [type='checkbox']:not(:disabled) + label:hover::before {
     border: 1px solid #0060DF; }
   .prefs-pane [type='checkbox']:not(:disabled):checked:focus + label::before,
   .prefs-pane [type='checkbox']:not(:disabled):not(:checked):focus + label::before {
     border: 1px dotted #0060DF; }
 
 .prefs-pane-button button {
   background-color: transparent;
   border: 0;
   cursor: pointer;
   fill: rgba(12, 12, 13, 0.6);
+  offset-inline-end: 15px;
   padding: 15px;
   position: fixed;
-  offset-inline-end: 15px;
   top: 15px;
   z-index: 12001; }
   .prefs-pane-button button:hover {
     background-color: #EDEDF0; }
   .prefs-pane-button button:active {
     background-color: #F9F9FA; }
 
 .confirmation-dialog .modal {
-  position: fixed;
-  width: 400px;
-  top: 20%;
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
   left: 50%;
   margin-left: -200px;
-  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.08); }
+  position: fixed;
+  top: 20%;
+  width: 400px; }
 
 .confirmation-dialog section {
   margin: 0; }
 
 .confirmation-dialog .modal-message {
+  display: flex;
   padding: 16px;
-  padding-bottom: 0;
-  display: flex; }
+  padding-bottom: 0; }
   .confirmation-dialog .modal-message p {
     margin: 0;
     margin-bottom: 16px; }
 
 .confirmation-dialog .actions {
-  padding: 0px 16px 0 16px;
-  border: none;
+  border: 0;
+  display: flex;
   flex-wrap: nowrap;
-  display: flex; }
+  padding: 0 16px; }
   .confirmation-dialog .actions button {
     margin-inline-end: 16px;
     width: 50%; }
     .confirmation-dialog .actions button.done {
-      margin-inline-start: 0;
-      margin-inline-end: 0; }
+      margin-inline-end: 0;
+      margin-inline-start: 0; }
 
 .confirmation-dialog .icon {
   margin-inline-end: 16px; }
 
 .modal-overlay {
   background: #EDEDF0;
   height: 100%;
   left: 0;
@@ -940,142 +940,142 @@ section.top-sites:not(.collapsed):hover 
   background: #FFF;
   border: 1px solid #D7D7DB;
   border-radius: 5px;
   font-size: 15px;
   z-index: 11002; }
 
 .card-outer {
   background: #FFF;
+  border-radius: 3px;
   display: inline-block;
+  height: 266px;
   margin-inline-end: 32px;
-  width: 224px;
-  border-radius: 3px;
-  height: 266px;
-  position: relative; }
+  position: relative;
+  width: 224px; }
   .card-outer .context-menu-button {
-    cursor: pointer;
-    position: absolute;
-    top: -13.5px;
-    offset-inline-end: -13.5px;
-    width: 27px;
-    height: 27px;
+    background-clip: padding-box;
     background-color: #FFF;
     background-image: url("chrome://browser/skin/page-action.svg");
     background-position: 55%;
-    background-clip: padding-box;
     border: 1px solid #B1B1B3;
     border-radius: 100%;
     box-shadow: 0 2px rgba(12, 12, 13, 0.1);
+    cursor: pointer;
     fill: rgba(12, 12, 13, 0.8);
+    height: 27px;
+    offset-inline-end: -13.5px;
+    opacity: 0;
+    position: absolute;
+    top: -13.5px;
     transform: scale(0.25);
-    opacity: 0;
+    transition-duration: 200ms;
     transition-property: transform, opacity;
-    transition-duration: 200ms; }
-    .card-outer .context-menu-button:focus, .card-outer .context-menu-button:active {
-      transform: scale(1);
-      opacity: 1; }
+    width: 27px; }
+    .card-outer .context-menu-button:-moz-any(:active, :focus) {
+      opacity: 1;
+      transform: scale(1); }
   .card-outer.placeholder {
     background: transparent; }
     .card-outer.placeholder .card {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
   .card-outer .card {
-    height: 100%;
     border-radius: 3px;
-    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1); }
+    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
+    height: 100%; }
   .card-outer > a {
+    color: inherit;
     display: block;
-    color: inherit;
     height: 100%;
     outline: none;
     position: absolute;
     width: 224px; }
-    .card-outer > a.active .card, .card-outer > a:focus .card {
+    .card-outer > a:-moz-any(.active, :focus) .card {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
-    .card-outer > a.active .card-title, .card-outer > a:focus .card-title {
+    .card-outer > a:-moz-any(.active, :focus) .card-title {
       color: #0060DF; }
   .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) {
-    outline: none;
     box-shadow: 0 0 0 5px #D7D7DB;
-    transition: box-shadow 150ms; }
+    transition: box-shadow 150ms;
+    outline: none; }
     .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .context-menu-button {
-      transform: scale(1);
-      opacity: 1; }
+      opacity: 1;
+      transform: scale(1); }
     .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-title {
       color: #0060DF; }
   .card-outer .card-preview-image-outer {
     background-color: #F9F9FA;
-    position: relative;
+    border-radius: 3px 3px 0 0;
     height: 122px;
-    border-radius: 3px 3px 0 0;
-    overflow: hidden; }
+    overflow: hidden;
+    position: relative; }
     .card-outer .card-preview-image-outer::after {
       border-bottom: 1px solid rgba(0, 0, 0, 0.05);
       bottom: 0;
-      content: " ";
+      content: '';
       position: absolute;
       width: 100%; }
     .card-outer .card-preview-image-outer .card-preview-image {
-      width: 100%;
-      height: 100%;
-      background-size: cover;
       background-position: center;
       background-repeat: no-repeat;
+      background-size: cover;
+      height: 100%;
       opacity: 0;
-      transition: opacity 1s cubic-bezier(0.07, 0.95, 0, 1); }
+      transition: opacity 1s cubic-bezier(0.07, 0.95, 0, 1);
+      width: 100%; }
       .card-outer .card-preview-image-outer .card-preview-image.loaded {
         opacity: 1; }
   .card-outer .card-details {
     padding: 15px 16px 12px; }
     .card-outer .card-details.no-image {
       padding-top: 16px; }
   .card-outer .card-text {
-    overflow: hidden;
-    max-height: 78px; }
+    max-height: 78px;
+    overflow: hidden; }
     .card-outer .card-text.no-image {
       max-height: 192px; }
     .card-outer .card-text.no-host-name, .card-outer .card-text.no-context {
       max-height: 97px; }
     .card-outer .card-text.no-image.no-host-name, .card-outer .card-text.no-image.no-context {
       max-height: 211px; }
     .card-outer .card-text.no-host-name.no-context {
       max-height: 116px; }
     .card-outer .card-text.no-image.no-host-name.no-context {
       max-height: 230px; }
     .card-outer .card-text:not(.no-description) .card-title {
       max-height: 57px;
       overflow: hidden; }
   .card-outer .card-host-name {
     color: #737373;
     font-size: 10px;
+    overflow: hidden;
     padding-bottom: 4px;
-    text-transform: uppercase;
-    overflow: hidden;
-    text-overflow: ellipsis; }
+    text-overflow: ellipsis;
+    text-transform: uppercase; }
   .card-outer .card-title {
+    font-size: 14px;
+    line-height: 19px;
     margin: 0 0 2px;
-    font-size: 14px;
-    word-wrap: break-word;
-    line-height: 19px; }
+    word-wrap: break-word; }
   .card-outer .card-description {
     font-size: 12px;
+    line-height: 19px;
     margin: 0;
-    word-wrap: break-word;
     overflow: hidden;
-    line-height: 19px; }
+    word-wrap: break-word; }
   .card-outer .card-context {
+    bottom: 0;
+    color: #737373;
+    display: flex;
+    font-size: 11px;
+    left: 0;
     padding: 12px 16px 12px 14px;
     position: absolute;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    color: #737373;
-    font-size: 11px;
-    display: flex; }
+    right: 0; }
   .card-outer .card-context-icon {
     fill: rgba(12, 12, 13, 0.6);
     margin-inline-end: 6px; }
   .card-outer .card-context-label {
     flex-grow: 1;
     line-height: 16px;
     overflow: hidden;
     text-overflow: ellipsis;
@@ -1098,23 +1098,23 @@ section.top-sites:not(.collapsed):hover 
       .manual-migration-container p {
         align-self: center;
         display: flex;
         justify-content: space-between; } }
   .manual-migration-container .icon {
     display: none; }
     @media (min-width: 544px) {
       .manual-migration-container .icon {
+        align-self: center;
         display: block;
         fill: rgba(12, 12, 13, 0.6);
-        margin-inline-end: 6px;
-        align-self: center; } }
+        margin-inline-end: 6px; } }
 
 .manual-migration-actions {
-  border: none;
+  border: 0;
   display: block;
   flex-wrap: nowrap; }
   @media (min-width: 544px) {
     .manual-migration-actions {
       display: flex;
       justify-content: space-between;
       padding: 0; } }
   .manual-migration-actions button {
@@ -1126,102 +1126,102 @@ section.top-sites:not(.collapsed):hover 
 
 .collapsible-section .section-title .click-target {
   cursor: pointer;
   vertical-align: top;
   white-space: nowrap; }
 
 .collapsible-section .section-title .icon-arrowhead-down,
 .collapsible-section .section-title .icon-arrowhead-forward {
-  margin-top: -1px;
-  margin-inline-start: 8px; }
+  margin-inline-start: 8px;
+  margin-top: -1px; }
 
 .collapsible-section .section-top-bar {
   position: relative; }
   .collapsible-section .section-top-bar .section-info-option {
     offset-inline-end: 0;
     position: absolute;
     top: 0; }
   .collapsible-section .section-top-bar .info-option-icon {
     background-image: url("../data/content/assets/glyph-info-option-12.svg");
-    background-size: 12px 12px;
+    background-position: center;
     background-repeat: no-repeat;
-    background-position: center;
+    background-size: 12px 12px;
+    -moz-context-properties: fill;
+    display: inline-block;
     fill: rgba(12, 12, 13, 0.6);
-    -moz-context-properties: fill;
     height: 16px;
-    width: 16px;
-    display: inline-block;
     margin-bottom: -2px;
     opacity: 0;
-    transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
-    .collapsible-section .section-top-bar .info-option-icon:focus, .collapsible-section .section-top-bar .info-option-icon:active {
+    transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+    width: 16px; }
+    .collapsible-section .section-top-bar .info-option-icon[aria-expanded='true'] {
+      background-color: rgba(12, 12, 13, 0.1);
+      border-radius: 1px;
+      box-shadow: 0 0 0 5px rgba(12, 12, 13, 0.1);
+      fill: rgba(12, 12, 13, 0.8); }
+      .collapsible-section .section-top-bar .info-option-icon[aria-expanded='true'] + .info-option {
+        opacity: 1;
+        transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+        visibility: visible; }
+    .collapsible-section .section-top-bar .info-option-icon:not([aria-expanded='true']) + .info-option {
+      pointer-events: none; }
+    .collapsible-section .section-top-bar .info-option-icon:-moz-any(:active, :focus) {
       opacity: 1; }
-  .collapsible-section .section-top-bar .info-option-icon[aria-expanded="true"] {
-    background-color: rgba(12, 12, 13, 0.1);
-    border-radius: 1px;
-    box-shadow: 0 0 0 5px rgba(12, 12, 13, 0.1);
-    fill: rgba(12, 12, 13, 0.8); }
   .collapsible-section .section-top-bar .section-info-option .info-option {
-    visibility: hidden;
     opacity: 0;
-    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
+    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+    visibility: hidden; }
     .collapsible-section .section-top-bar .section-info-option .info-option::after, .collapsible-section .section-top-bar .section-info-option .info-option::before {
-      content: "";
+      content: '';
       offset-inline-end: 0;
       position: absolute; }
     .collapsible-section .section-top-bar .section-info-option .info-option::before {
       background-image: url("chrome://global/skin/arrow/panelarrow-vertical@2x.png");
       background-position: right 7px bottom;
       background-repeat: no-repeat;
       background-size: 18px 10px;
       height: 32px;
       top: -32px;
       width: 43px; }
     .collapsible-section .section-top-bar .section-info-option .info-option:dir(rtl)::before {
       background-position-x: 7px; }
     .collapsible-section .section-top-bar .section-info-option .info-option::after {
       height: 10px;
       offset-inline-start: 0;
       top: -10px; }
-  .collapsible-section .section-top-bar .info-option-icon[aria-expanded="true"] + .info-option {
-    visibility: visible;
-    opacity: 1;
-    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
-  .collapsible-section .section-top-bar .info-option-icon:not([aria-expanded="true"]) + .info-option {
-    pointer-events: none; }
   .collapsible-section .section-top-bar .info-option {
-    z-index: 9999;
-    position: absolute;
     background: #FFF;
     border: 1px solid #D7D7DB;
     border-radius: 3px;
+    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
     font-size: 13px;
     line-height: 120%;
     margin-inline-end: -9px;
     offset-inline-end: 0;
+    padding: 24px;
+    position: absolute;
     top: 26px;
+    -moz-user-select: none;
     width: 320px;
-    padding: 24px;
-    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
-    -moz-user-select: none; }
+    z-index: 9999; }
   .collapsible-section .section-top-bar .info-option-header {
     font-size: 15px;
     font-weight: 600; }
   .collapsible-section .section-top-bar .info-option-body {
     margin: 0;
     margin-top: 12px; }
   .collapsible-section .section-top-bar .info-option-link {
     color: #0060DF;
     margin-left: 7px; }
   .collapsible-section .section-top-bar .info-option-manage {
     margin-top: 24px; }
     .collapsible-section .section-top-bar .info-option-manage button {
-      background: none;
-      border: none;
+      background: 0;
+      border: 0;
       color: #0060DF;
       cursor: pointer;
       margin: 0;
       padding: 0; }
       .collapsible-section .section-top-bar .info-option-manage button::after {
         background-image: url("../data/content/assets/topic-show-more-12.svg");
         background-repeat: no-repeat;
         content: '';
@@ -1251,24 +1251,24 @@ section.top-sites:not(.collapsed):hover 
         width: 340px; } }
     @media (min-width: 800px) {
       .collapsible-section .section-disclaimer .section-disclaimer-text {
         width: 610px; } }
   .collapsible-section .section-disclaimer a {
     color: #008EA4;
     padding-left: 3px; }
   .collapsible-section .section-disclaimer button {
-    margin-top: 2px;
-    offset-inline-end: 0;
-    min-height: 26px;
-    max-width: 130px;
     background: #F9F9FA;
     border: 1px solid #B1B1B3;
     border-radius: 4px;
-    cursor: pointer; }
+    cursor: pointer;
+    margin-top: 2px;
+    max-width: 130px;
+    min-height: 26px;
+    offset-inline-end: 0; }
     .collapsible-section .section-disclaimer button:hover:not(.dismiss) {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
     @media (min-width: 416px) {
       .collapsible-section .section-disclaimer button {
         position: absolute; } }
 
 .collapsible-section .section-body {
--- a/browser/extensions/activity-stream/css/activity-stream-windows.css
+++ b/browser/extensions/activity-stream/css/activity-stream-windows.css
@@ -18,40 +18,40 @@ button,
 input {
   font-family: inherit;
   font-size: inherit; }
 
 [hidden] {
   display: none !important; }
 
 .icon {
-  display: inline-block;
-  width: 16px;
-  height: 16px;
-  background-size: 16px;
   background-position: center center;
   background-repeat: no-repeat;
-  vertical-align: middle;
+  background-size: 16px;
+  -moz-context-properties: fill;
+  display: inline-block;
   fill: rgba(12, 12, 13, 0.8);
-  -moz-context-properties: fill; }
+  height: 16px;
+  vertical-align: middle;
+  width: 16px; }
   .icon.icon-spacer {
     margin-inline-end: 8px; }
   .icon.icon-small-spacer {
     margin-inline-end: 6px; }
   .icon.icon-bookmark-added {
     background-image: url("chrome://browser/skin/bookmark.svg"); }
   .icon.icon-bookmark-hollow {
     background-image: url("chrome://browser/skin/bookmark-hollow.svg"); }
   .icon.icon-delete {
     background-image: url("../data/content/assets/glyph-delete-16.svg"); }
   .icon.icon-modal-delete {
     background-image: url("../data/content/assets/glyph-modal-delete-32.svg");
-    width: 32px;
+    background-size: 32px;
     height: 32px;
-    background-size: 32px; }
+    width: 32px; }
   .icon.icon-dismiss {
     background-image: url("../data/content/assets/glyph-dismiss-16.svg"); }
   .icon.icon-info {
     background-image: url("../data/content/assets/glyph-info-16.svg"); }
   .icon.icon-import {
     background-image: url("../data/content/assets/glyph-import-16.svg"); }
   .icon.icon-new-window {
     background-image: url("../data/content/assets/glyph-newWindow-16.svg"); }
@@ -66,18 +66,17 @@ input {
   .icon.icon-edit {
     background-image: url("../data/content/assets/glyph-edit-16.svg"); }
   .icon.icon-pocket {
     background-image: url("../data/content/assets/glyph-pocket-16.svg"); }
   .icon.icon-historyItem {
     background-image: url("../data/content/assets/glyph-historyItem-16.svg"); }
   .icon.icon-trending {
     background-image: url("../data/content/assets/glyph-trending-16.svg");
-    transform: translateY(2px);
-    /* trending bolt is visually top heavy */ }
+    transform: translateY(2px); }
   .icon.icon-now {
     background-image: url("chrome://browser/skin/history.svg"); }
   .icon.icon-topsites {
     background-image: url("../data/content/assets/glyph-topsites-16.svg"); }
   .icon.icon-pin-small {
     background-image: url("../data/content/assets/glyph-pin-12.svg");
     background-size: 12px;
     height: 12px;
@@ -120,65 +119,65 @@ h2 {
 
 a {
   color: #0060DF;
   text-decoration: none; }
   a:hover {
     color: #008EA4; }
 
 .sr-only {
-  position: absolute;
-  width: 1px;
+  border: 0;
+  clip: rect(0, 0, 0, 0);
   height: 1px;
-  padding: 0;
   margin: -1px;
   overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0; }
+  padding: 0;
+  position: absolute;
+  width: 1px; }
 
 .inner-border {
   border: 1px solid #D7D7DB;
   border-radius: 3px;
+  height: 100%;
+  left: 0;
+  pointer-events: none;
   position: absolute;
   top: 0;
-  left: 0;
   width: 100%;
-  height: 100%;
-  pointer-events: none;
   z-index: 100; }
 
 @keyframes fadeIn {
   from {
     opacity: 0; }
   to {
     opacity: 1; } }
 
 .show-on-init {
   opacity: 0;
   transition: opacity 0.2s ease-in; }
   .show-on-init.on {
-    opacity: 1;
-    animation: fadeIn 0.2s; }
+    animation: fadeIn 0.2s;
+    opacity: 1; }
 
 .actions {
   border-top: 1px solid #D7D7DB;
   display: flex;
   flex-direction: row;
+  flex-wrap: wrap;
+  justify-content: flex-start;
   margin: 0;
-  padding: 15px 25px 0 25px;
-  justify-content: flex-start;
-  flex-wrap: wrap; }
+  padding: 15px 25px 0; }
   .actions button {
     background-color: #F9F9FA;
     border: 1px solid #B1B1B3;
     border-radius: 4px;
     color: inherit;
     cursor: pointer;
+    margin-bottom: 15px;
     padding: 10px 30px;
-    margin-bottom: 15px;
     white-space: nowrap; }
     .actions button:hover:not(.dismiss) {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
     .actions button.dismiss {
       border: 0;
       padding: 0;
       text-decoration: underline; }
@@ -188,26 +187,26 @@ a {
       color: #FFF;
       margin-inline-start: auto; }
 
 #snippets-container {
   z-index: 1; }
 
 .outer-wrapper {
   display: flex;
-  padding: 40px 32px 32px;
+  flex-grow: 1;
   height: 100%;
-  flex-grow: 1; }
+  padding: 40px 32px 32px; }
   .outer-wrapper.fixed-to-top {
     height: auto; }
 
 main {
   margin: auto;
-  width: 224px;
-  padding-bottom: 48px; }
+  padding-bottom: 48px;
+  width: 224px; }
   @media (min-width: 416px) {
     main {
       width: 352px; } }
   @media (min-width: 544px) {
     main {
       width: 480px; } }
   @media (min-width: 800px) {
     main {
@@ -240,157 +239,161 @@ main {
 .body-wrapper.on .sections-list .section:last-of-type,
 .body-wrapper.on .topic {
   opacity: 1; }
 
 .top-sites-list {
   list-style: none;
   margin: 0;
   margin-bottom: -18px;
-  padding: 0;
-  margin-inline-end: -32px; }
+  margin-inline-end: -32px;
+  padding: 0; }
   @media (max-width: 416px) {
     .top-sites-list :nth-child(2n+1) .context-menu {
+      margin-inline-end: auto;
       margin-inline-start: auto;
-      margin-inline-end: auto;
-      offset-inline-start: -32px;
-      offset-inline-end: auto; }
+      offset-inline-end: auto;
+      offset-inline-start: -32px; }
     .top-sites-list :nth-child(2n) .context-menu {
-      margin-inline-start: auto;
       margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      margin-inline-start: auto;
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 416px) and (max-width: 544px) {
-    .top-sites-list :nth-child(3n+2) .context-menu, .top-sites-list :nth-child(3n) .context-menu {
-      margin-inline-start: auto;
+    .top-sites-list :nth-child(3n+2) .context-menu,
+    .top-sites-list :nth-child(3n) .context-menu {
       margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      margin-inline-start: auto;
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 800px) {
     .top-sites-list :nth-child(4n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 768px) {
     .top-sites-list :nth-child(4n+3) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1248px) {
     .top-sites-list :nth-child(6n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1024px) {
     .top-sites-list :nth-child(6n+5) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   .top-sites-list li {
     display: inline-block;
     margin: 0 0 8px;
     margin-inline-end: 32px; }
   .top-sites-list .top-site-outer {
     position: relative; }
     .top-sites-list .top-site-outer > a {
+      color: inherit;
       display: block;
-      color: inherit;
       outline: none; }
-      .top-sites-list .top-site-outer > a.active .tile, .top-sites-list .top-site-outer > a:focus .tile {
+      .top-sites-list .top-site-outer > a:-moz-any(.active, :focus) .tile {
         box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
         transition: box-shadow 150ms; }
     .top-sites-list .top-site-outer .context-menu-button {
-      cursor: pointer;
-      position: absolute;
-      top: -13.5px;
-      offset-inline-end: -13.5px;
-      width: 27px;
-      height: 27px;
+      background-clip: padding-box;
       background-color: #FFF;
       background-image: url("chrome://browser/skin/page-action.svg");
       background-position: 55%;
-      background-clip: padding-box;
       border: 1px solid #B1B1B3;
       border-radius: 100%;
       box-shadow: 0 2px rgba(12, 12, 13, 0.1);
+      cursor: pointer;
       fill: rgba(12, 12, 13, 0.8);
+      height: 27px;
+      offset-inline-end: -13.5px;
+      opacity: 0;
+      position: absolute;
+      top: -13.5px;
       transform: scale(0.25);
-      opacity: 0;
+      transition-duration: 200ms;
       transition-property: transform, opacity;
-      transition-duration: 200ms; }
-      .top-sites-list .top-site-outer .context-menu-button:focus, .top-sites-list .top-site-outer .context-menu-button:active {
-        transform: scale(1);
-        opacity: 1; }
-    .top-sites-list .top-site-outer:hover .tile, .top-sites-list .top-site-outer:focus .tile, .top-sites-list .top-site-outer.active .tile {
+      width: 27px; }
+      .top-sites-list .top-site-outer .context-menu-button:-moz-any(:active, :focus) {
+        opacity: 1;
+        transform: scale(1); }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .tile {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
-    .top-sites-list .top-site-outer:hover .context-menu-button, .top-sites-list .top-site-outer:focus .context-menu-button, .top-sites-list .top-site-outer.active .context-menu-button {
-      transform: scale(1);
-      opacity: 1; }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .edit-menu {
+      opacity: 1;
+      transform: scale(1); }
+    .top-sites-list .top-site-outer:-moz-any(.active, :focus, :hover) .context-menu-button {
+      opacity: 1;
+      transform: scale(1); }
     .top-sites-list .top-site-outer .tile {
-      position: relative;
-      height: 96px;
-      width: 96px;
       border-radius: 6px;
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
+      height: 96px;
+      position: relative;
+      width: 96px;
+      align-items: center;
       color: #737373;
-      font-weight: 200;
+      display: flex;
       font-size: 32px;
-      text-transform: uppercase;
-      display: flex;
-      align-items: center;
-      justify-content: center; }
+      font-weight: 200;
+      justify-content: center;
+      text-transform: uppercase; }
       .top-sites-list .top-site-outer .tile::before {
         content: attr(data-fallback); }
     .top-sites-list .top-site-outer.placeholder .tile {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
     .top-sites-list .top-site-outer.placeholder .screenshot {
       display: none; }
     .top-sites-list .top-site-outer .screenshot {
+      background-color: #FFF;
+      background-position: top left;
+      background-size: cover;
+      border-radius: 6px;
+      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      height: 100%;
+      left: 0;
+      opacity: 0;
       position: absolute;
       top: 0;
-      left: 0;
-      height: 100%;
-      width: 100%;
-      background-color: #FFF;
-      border-radius: 6px;
-      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
-      background-size: cover;
-      background-position: top left;
       transition: opacity 1s;
-      opacity: 0; }
+      width: 100%; }
       .top-sites-list .top-site-outer .screenshot.active {
         opacity: 1; }
     .top-sites-list .top-site-outer .top-site-icon {
-      position: absolute;
-      border-radius: 6px;
-      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      background-color: #F9F9FA;
       background-position: center center;
       background-repeat: no-repeat;
-      background-color: #F9F9FA; }
+      border-radius: 6px;
+      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
+      position: absolute; }
     .top-sites-list .top-site-outer .rich-icon {
-      top: 0;
+      background-size: 96px;
+      height: 100%;
       offset-inline-start: 0;
-      height: 100%;
-      width: 100%;
-      background-size: 96px; }
+      top: 0;
+      width: 100%; }
     .top-sites-list .top-site-outer .default-icon {
+      background-size: 32px;
       bottom: -6px;
       height: 42px;
       offset-inline-end: -6px;
       width: 42px;
-      background-size: 32px;
+      align-items: center;
       display: flex;
-      align-items: center;
-      justify-content: center;
-      font-size: 20px; }
+      font-size: 20px;
+      justify-content: center; }
       .top-sites-list .top-site-outer .default-icon[data-fallback]::before {
         content: attr(data-fallback); }
     .top-sites-list .top-site-outer .title {
       font: message-box;
       height: 30px;
       line-height: 30px;
       text-align: center;
       width: 96px;
@@ -418,17 +421,17 @@ main {
       offset-inline-end: -12.5px;
       opacity: 0;
       overflow: hidden;
       top: -12.5px;
       transform: scale(0.25);
       transition-property: transform, opacity;
       transition-duration: 200ms;
       z-index: 1000; }
-      .top-sites-list .top-site-outer .edit-menu:focus, .top-sites-list .top-site-outer .edit-menu:active {
+      .top-sites-list .top-site-outer .edit-menu:-moz-any(:active, :focus) {
         transform: scale(1);
         opacity: 1; }
       .top-sites-list .top-site-outer .edit-menu button {
         border: 0;
         border-right: 1px solid #B1B1B3;
         background-color: #FFF;
         cursor: pointer;
         height: 100%;
@@ -438,34 +441,31 @@ main {
         .top-sites-list .top-site-outer .edit-menu button:first-child:dir(ltr), .top-sites-list .top-site-outer .edit-menu button:last-child:dir(rtl) {
           width: 30px; }
         .top-sites-list .top-site-outer .edit-menu button:last-child:dir(ltr), .top-sites-list .top-site-outer .edit-menu button:first-child:dir(rtl) {
           width: 28px; }
         .top-sites-list .top-site-outer .edit-menu button:last-child:dir(ltr) {
           border-right: 0; }
         .top-sites-list .top-site-outer .edit-menu button:first-child:dir(rtl) {
           border-right: 0; }
-    .top-sites-list .top-site-outer:hover .edit-menu, .top-sites-list .top-site-outer:focus .edit-menu, .top-sites-list .top-site-outer.active .edit-menu {
-      transform: scale(1);
-      opacity: 1; }
 
 .edit-topsites-wrapper .edit-topsites-button {
   border-right: 1px solid #D7D7DB;
   line-height: 13px;
   offset-inline-end: 24px;
   opacity: 0;
   padding: 0 10px;
   pointer-events: none;
   position: absolute;
   top: 2px;
   transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
   .edit-topsites-wrapper .edit-topsites-button:dir(rtl) {
     border-left: 1px solid #D7D7DB;
     border-right: 0; }
-  .edit-topsites-wrapper .edit-topsites-button:focus, .edit-topsites-wrapper .edit-topsites-button:active {
+  .edit-topsites-wrapper .edit-topsites-button:-moz-any(:active, :focus) {
     opacity: 1; }
   .edit-topsites-wrapper .edit-topsites-button button {
     background: none;
     border: 0;
     color: #737373;
     cursor: pointer;
     font-size: 12px;
     padding: 0; }
@@ -494,17 +494,17 @@ main {
   width: auto; }
   .edit-topsites-wrapper .show-more:dir(rtl),
   .edit-topsites-wrapper .show-less:dir(rtl) {
     background-position: right 10px center; }
   .edit-topsites-wrapper .show-more span,
   .edit-topsites-wrapper .show-less span {
     padding-inline-start: 3px; }
 
-section.top-sites:not(.collapsed):hover .edit-topsites-button {
+.top-sites:not(.collapsed):hover .edit-topsites-button {
   opacity: 1;
   pointer-events: auto; }
 
 .topsite-form .form-wrapper {
   margin: auto;
   max-width: 350px;
   padding: 15px 0; }
   .topsite-form .form-wrapper .field {
@@ -559,69 +559,69 @@ section.top-sites:not(.collapsed):hover 
   0% {
     opacity: 0;
     transform: translateY(15px); }
   100% {
     opacity: 1;
     transform: translateY(0); } }
 
 .sections-list .section-list {
-  margin: 0;
   display: grid;
+  grid-gap: 32px;
   grid-template-columns: repeat(auto-fit, 224px);
-  grid-gap: 32px; }
+  margin: 0; }
   @media (max-width: 544px) {
     .sections-list .section-list .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 544px) and (max-width: 800px) {
     .sections-list .section-list :nth-child(2n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
   @media (min-width: 800px) and (max-width: 1248px) {
     .sections-list .section-list :nth-child(3n) .context-menu {
+      margin-inline-end: 5px;
       margin-inline-start: auto;
-      margin-inline-end: 5px;
-      offset-inline-start: auto;
-      offset-inline-end: 0; } }
+      offset-inline-end: 0;
+      offset-inline-start: auto; } }
 
 .sections-list .section-empty-state {
-  width: 100%;
-  height: 266px;
+  border: 1px solid #D7D7DB;
+  border-radius: 3px;
   display: flex;
-  border: 1px solid #D7D7DB;
-  border-radius: 3px; }
+  height: 266px;
+  width: 100%; }
   .sections-list .section-empty-state .empty-state {
     margin: auto;
     max-width: 350px; }
     .sections-list .section-empty-state .empty-state .empty-state-icon {
-      background-size: 50px 50px;
+      background-position: center;
       background-repeat: no-repeat;
-      background-position: center;
+      background-size: 50px 50px;
+      -moz-context-properties: fill;
+      display: block;
       fill: rgba(12, 12, 13, 0.6);
-      -moz-context-properties: fill;
       height: 50px;
-      width: 50px;
       margin: 0 auto;
-      display: block; }
+      width: 50px; }
     .sections-list .section-empty-state .empty-state .empty-state-message {
-      margin-bottom: 0;
+      color: #737373;
       font-size: 13px;
-      color: #737373;
+      margin-bottom: 0;
       text-align: center; }
 
 .topic {
+  color: #737373;
   font-size: 12px;
-  color: #737373;
-  margin-top: 12px;
-  line-height: 1.6; }
+  line-height: 1.6;
+  margin-top: 12px; }
   @media (min-width: 800px) {
     .topic {
       line-height: 16px; } }
   .topic ul {
     margin: 0;
     padding: 0; }
     @media (min-width: 800px) {
       .topic ul {
@@ -651,110 +651,110 @@ section.top-sites:not(.collapsed):hover 
       fill: #008EA4;
       height: 16px;
       margin-inline-start: 5px;
       vertical-align: top;
       width: 12px; }
     .topic .topic-read-more:dir(rtl)::after {
       transform: scaleX(-1); }
   .topic::after {
-    content: "";
-    display: table;
-    clear: both; }
+    clear: both;
+    content: '';
+    display: table; }
 
 .search-wrapper {
   cursor: default;
   display: flex;
-  position: relative;
+  height: 35px;
   margin: 1px 1px 40px;
-  width: 100%;
-  height: 35px; }
+  position: relative;
+  width: 100%; }
   .search-wrapper input {
-    border: none;
+    border: 0;
     border-radius: 3px;
     box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
     color: inherit;
+    font-size: 15px;
     padding: 0;
     padding-inline-end: 36px;
     padding-inline-start: 35px;
-    width: 100%;
-    font-size: 15px; }
+    width: 100%; }
   .search-wrapper:hover input {
     box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.25); }
   .search-wrapper:active input,
   .search-wrapper input:focus {
     box-shadow: 0 0 0 1px #0A84FF; }
   .search-wrapper .search-label {
     background: url("chrome://browser/skin/search-glass.svg") no-repeat 12px center/16px;
+    -moz-context-properties: fill;
     fill: rgba(12, 12, 13, 0.4);
-    -moz-context-properties: fill;
+    height: 100%;
+    offset-inline-start: 0;
     position: absolute;
-    offset-inline-start: 0;
-    height: 100%;
     width: 35px; }
   .search-wrapper .search-button {
     background: url("chrome://browser/skin/forward.svg") no-repeat center center;
-    border-radius: 0 3px 3px 0;
+    background-size: 16px 16px;
     border: 0;
-    width: 36px;
+    border-radius: 0 3px 3px 0;
+    -moz-context-properties: fill;
     fill: rgba(12, 12, 13, 0.4);
-    -moz-context-properties: fill;
-    background-size: 16px 16px;
     height: 100%;
     offset-inline-end: 0;
-    position: absolute; }
+    position: absolute;
+    width: 36px; }
     .search-wrapper .search-button:focus, .search-wrapper .search-button:hover {
       background-color: rgba(12, 12, 13, 0.1);
       cursor: pointer; }
     .search-wrapper .search-button:active {
       background-color: rgba(12, 12, 13, 0.2); }
     .search-wrapper .search-button:dir(rtl) {
       transform: scaleX(-1); }
   .search-wrapper .contentSearchSuggestionTable {
     border: 0;
     transform: translateY(2px); }
 
 .context-menu {
+  background: #F9F9FA;
+  border-radius: 5px;
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
   display: block;
-  position: absolute;
   font-size: 14px;
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
-  top: 6.75px;
-  offset-inline-start: 100%;
   margin-inline-start: 5px;
-  z-index: 10000;
-  background: #F9F9FA;
-  border-radius: 5px; }
+  offset-inline-start: 100%;
+  position: absolute;
+  top: 6.75px;
+  z-index: 10000; }
   .context-menu > ul {
+    list-style: none;
     margin: 0;
-    padding: 5px 0;
-    list-style: none; }
+    padding: 5px 0; }
     .context-menu > ul > li {
       margin: 0;
       width: 100%; }
       .context-menu > ul > li.separator {
-        margin: 5px 0;
-        border-bottom: 1px solid rgba(0, 0, 0, 0.2); }
+        border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+        margin: 5px 0; }
       .context-menu > ul > li > a {
-        outline: none;
-        cursor: pointer;
+        align-items: center;
         color: inherit;
-        white-space: nowrap;
-        padding: 3px 12px;
+        cursor: pointer;
+        display: flex;
         line-height: 16px;
-        display: flex;
-        align-items: center; }
-        .context-menu > ul > li > a:hover, .context-menu > ul > li > a:focus {
+        outline: none;
+        padding: 3px 12px;
+        white-space: nowrap; }
+        .context-menu > ul > li > a:-moz-any(:focus, :hover) {
           background: #0060DF;
           color: #FFF; }
-          .context-menu > ul > li > a:hover a, .context-menu > ul > li > a:focus a {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover) a {
             color: #0C0C0D; }
-          .context-menu > ul > li > a:hover .icon, .context-menu > ul > li > a:focus .icon {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover) .icon {
             fill: #FFF; }
-          .context-menu > ul > li > a:hover:hover, .context-menu > ul > li > a:hover:focus, .context-menu > ul > li > a:focus:hover, .context-menu > ul > li > a:focus:focus {
+          .context-menu > ul > li > a:-moz-any(:focus, :hover):-moz-any(:focus, :hover) {
             color: #FFF; }
 
 .prefs-pane {
   color: #4A4A4F;
   font-size: 14px;
   line-height: 21px; }
   .prefs-pane .sidebar {
     background: #FFF;
@@ -854,79 +854,79 @@ section.top-sites:not(.collapsed):hover 
     offset-inline-start: 0;
     position: absolute;
     top: 0;
     width: 21px; }
   .prefs-pane [type='checkbox']:not(:checked) + label::after,
   .prefs-pane [type='checkbox']:checked + label::after {
     background: url("chrome://global/skin/in-content/check.svg") no-repeat center center;
     content: '';
+    -moz-context-properties: fill, stroke;
+    fill: #0060DF;
     height: 21px;
     offset-inline-start: 0;
     position: absolute;
+    stroke: none;
     top: 0;
-    width: 21px;
-    -moz-context-properties: fill, stroke;
-    fill: #0060DF;
-    stroke: none; }
+    width: 21px; }
   .prefs-pane [type='checkbox']:not(:checked) + label::after {
     opacity: 0; }
   .prefs-pane [type='checkbox']:checked + label::after {
     opacity: 1; }
   .prefs-pane [type='checkbox']:not(:disabled) + label:hover::before {
     border: 1px solid #0060DF; }
   .prefs-pane [type='checkbox']:not(:disabled):checked:focus + label::before,
   .prefs-pane [type='checkbox']:not(:disabled):not(:checked):focus + label::before {
     border: 1px dotted #0060DF; }
 
 .prefs-pane-button button {
   background-color: transparent;
   border: 0;
   cursor: pointer;
   fill: rgba(12, 12, 13, 0.6);
+  offset-inline-end: 15px;
   padding: 15px;
   position: fixed;
-  offset-inline-end: 15px;
   top: 15px;
   z-index: 12001; }
   .prefs-pane-button button:hover {
     background-color: #EDEDF0; }
   .prefs-pane-button button:active {
     background-color: #F9F9FA; }
 
 .confirmation-dialog .modal {
-  position: fixed;
-  width: 400px;
-  top: 20%;
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
   left: 50%;
   margin-left: -200px;
-  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.08); }
+  position: fixed;
+  top: 20%;
+  width: 400px; }
 
 .confirmation-dialog section {
   margin: 0; }
 
 .confirmation-dialog .modal-message {
+  display: flex;
   padding: 16px;
-  padding-bottom: 0;
-  display: flex; }
+  padding-bottom: 0; }
   .confirmation-dialog .modal-message p {
     margin: 0;
     margin-bottom: 16px; }
 
 .confirmation-dialog .actions {
-  padding: 0px 16px 0 16px;
-  border: none;
+  border: 0;
+  display: flex;
   flex-wrap: nowrap;
-  display: flex; }
+  padding: 0 16px; }
   .confirmation-dialog .actions button {
     margin-inline-end: 16px;
     width: 50%; }
     .confirmation-dialog .actions button.done {
-      margin-inline-start: 0;
-      margin-inline-end: 0; }
+      margin-inline-end: 0;
+      margin-inline-start: 0; }
 
 .confirmation-dialog .icon {
   margin-inline-end: 16px; }
 
 .modal-overlay {
   background: #EDEDF0;
   height: 100%;
   left: 0;
@@ -940,142 +940,142 @@ section.top-sites:not(.collapsed):hover 
   background: #FFF;
   border: 1px solid #D7D7DB;
   border-radius: 5px;
   font-size: 15px;
   z-index: 11002; }
 
 .card-outer {
   background: #FFF;
+  border-radius: 3px;
   display: inline-block;
+  height: 266px;
   margin-inline-end: 32px;
-  width: 224px;
-  border-radius: 3px;
-  height: 266px;
-  position: relative; }
+  position: relative;
+  width: 224px; }
   .card-outer .context-menu-button {
-    cursor: pointer;
-    position: absolute;
-    top: -13.5px;
-    offset-inline-end: -13.5px;
-    width: 27px;
-    height: 27px;
+    background-clip: padding-box;
     background-color: #FFF;
     background-image: url("chrome://browser/skin/page-action.svg");
     background-position: 55%;
-    background-clip: padding-box;
     border: 1px solid #B1B1B3;
     border-radius: 100%;
     box-shadow: 0 2px rgba(12, 12, 13, 0.1);
+    cursor: pointer;
     fill: rgba(12, 12, 13, 0.8);
+    height: 27px;
+    offset-inline-end: -13.5px;
+    opacity: 0;
+    position: absolute;
+    top: -13.5px;
     transform: scale(0.25);
-    opacity: 0;
+    transition-duration: 200ms;
     transition-property: transform, opacity;
-    transition-duration: 200ms; }
-    .card-outer .context-menu-button:focus, .card-outer .context-menu-button:active {
-      transform: scale(1);
-      opacity: 1; }
+    width: 27px; }
+    .card-outer .context-menu-button:-moz-any(:active, :focus) {
+      opacity: 1;
+      transform: scale(1); }
   .card-outer.placeholder {
     background: transparent; }
     .card-outer.placeholder .card {
       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
   .card-outer .card {
-    height: 100%;
     border-radius: 3px;
-    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1); }
+    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
+    height: 100%; }
   .card-outer > a {
+    color: inherit;
     display: block;
-    color: inherit;
     height: 100%;
     outline: none;
     position: absolute;
     width: 224px; }
-    .card-outer > a.active .card, .card-outer > a:focus .card {
+    .card-outer > a:-moz-any(.active, :focus) .card {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
-    .card-outer > a.active .card-title, .card-outer > a:focus .card-title {
+    .card-outer > a:-moz-any(.active, :focus) .card-title {
       color: #0060DF; }
   .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) {
-    outline: none;
     box-shadow: 0 0 0 5px #D7D7DB;
-    transition: box-shadow 150ms; }
+    transition: box-shadow 150ms;
+    outline: none; }
     .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .context-menu-button {
-      transform: scale(1);
-      opacity: 1; }
+      opacity: 1;
+      transform: scale(1); }
     .card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-title {
       color: #0060DF; }
   .card-outer .card-preview-image-outer {
     background-color: #F9F9FA;
-    position: relative;
+    border-radius: 3px 3px 0 0;
     height: 122px;
-    border-radius: 3px 3px 0 0;
-    overflow: hidden; }
+    overflow: hidden;
+    position: relative; }
     .card-outer .card-preview-image-outer::after {
       border-bottom: 1px solid rgba(0, 0, 0, 0.05);
       bottom: 0;
-      content: " ";
+      content: '';
       position: absolute;
       width: 100%; }
     .card-outer .card-preview-image-outer .card-preview-image {
-      width: 100%;
-      height: 100%;
-      background-size: cover;
       background-position: center;
       background-repeat: no-repeat;
+      background-size: cover;
+      height: 100%;
       opacity: 0;
-      transition: opacity 1s cubic-bezier(0.07, 0.95, 0, 1); }
+      transition: opacity 1s cubic-bezier(0.07, 0.95, 0, 1);
+      width: 100%; }
       .card-outer .card-preview-image-outer .card-preview-image.loaded {
         opacity: 1; }
   .card-outer .card-details {
     padding: 15px 16px 12px; }
     .card-outer .card-details.no-image {
       padding-top: 16px; }
   .card-outer .card-text {
-    overflow: hidden;
-    max-height: 78px; }
+    max-height: 78px;
+    overflow: hidden; }
     .card-outer .card-text.no-image {
       max-height: 192px; }
     .card-outer .card-text.no-host-name, .card-outer .card-text.no-context {
       max-height: 97px; }
     .card-outer .card-text.no-image.no-host-name, .card-outer .card-text.no-image.no-context {
       max-height: 211px; }
     .card-outer .card-text.no-host-name.no-context {
       max-height: 116px; }
     .card-outer .card-text.no-image.no-host-name.no-context {
       max-height: 230px; }
     .card-outer .card-text:not(.no-description) .card-title {
       max-height: 57px;
       overflow: hidden; }
   .card-outer .card-host-name {
     color: #737373;
     font-size: 10px;
+    overflow: hidden;
     padding-bottom: 4px;
-    text-transform: uppercase;
-    overflow: hidden;
-    text-overflow: ellipsis; }
+    text-overflow: ellipsis;
+    text-transform: uppercase; }
   .card-outer .card-title {
+    font-size: 14px;
+    line-height: 19px;
     margin: 0 0 2px;
-    font-size: 14px;
-    word-wrap: break-word;
-    line-height: 19px; }
+    word-wrap: break-word; }
   .card-outer .card-description {
     font-size: 12px;
+    line-height: 19px;
     margin: 0;
-    word-wrap: break-word;
     overflow: hidden;
-    line-height: 19px; }
+    word-wrap: break-word; }
   .card-outer .card-context {
+    bottom: 0;
+    color: #737373;
+    display: flex;
+    font-size: 11px;
+    left: 0;
     padding: 12px 16px 12px 14px;
     position: absolute;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    color: #737373;
-    font-size: 11px;
-    display: flex; }
+    right: 0; }
   .card-outer .card-context-icon {
     fill: rgba(12, 12, 13, 0.6);
     margin-inline-end: 6px; }
   .card-outer .card-context-label {
     flex-grow: 1;
     line-height: 16px;
     overflow: hidden;
     text-overflow: ellipsis;
@@ -1098,23 +1098,23 @@ section.top-sites:not(.collapsed):hover 
       .manual-migration-container p {
         align-self: center;
         display: flex;
         justify-content: space-between; } }
   .manual-migration-container .icon {
     display: none; }
     @media (min-width: 544px) {
       .manual-migration-container .icon {
+        align-self: center;
         display: block;
         fill: rgba(12, 12, 13, 0.6);
-        margin-inline-end: 6px;
-        align-self: center; } }
+        margin-inline-end: 6px; } }
 
 .manual-migration-actions {
-  border: none;
+  border: 0;
   display: block;
   flex-wrap: nowrap; }
   @media (min-width: 544px) {
     .manual-migration-actions {
       display: flex;
       justify-content: space-between;
       padding: 0; } }
   .manual-migration-actions button {
@@ -1126,102 +1126,102 @@ section.top-sites:not(.collapsed):hover 
 
 .collapsible-section .section-title .click-target {
   cursor: pointer;
   vertical-align: top;
   white-space: nowrap; }
 
 .collapsible-section .section-title .icon-arrowhead-down,
 .collapsible-section .section-title .icon-arrowhead-forward {
-  margin-top: -1px;
-  margin-inline-start: 8px; }
+  margin-inline-start: 8px;
+  margin-top: -1px; }
 
 .collapsible-section .section-top-bar {
   position: relative; }
   .collapsible-section .section-top-bar .section-info-option {
     offset-inline-end: 0;
     position: absolute;
     top: 0; }
   .collapsible-section .section-top-bar .info-option-icon {
     background-image: url("../data/content/assets/glyph-info-option-12.svg");
-    background-size: 12px 12px;
+    background-position: center;
     background-repeat: no-repeat;
-    background-position: center;
+    background-size: 12px 12px;
+    -moz-context-properties: fill;
+    display: inline-block;
     fill: rgba(12, 12, 13, 0.6);
-    -moz-context-properties: fill;
     height: 16px;
-    width: 16px;
-    display: inline-block;
     margin-bottom: -2px;
     opacity: 0;
-    transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
-    .collapsible-section .section-top-bar .info-option-icon:focus, .collapsible-section .section-top-bar .info-option-icon:active {
+    transition: opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+    width: 16px; }
+    .collapsible-section .section-top-bar .info-option-icon[aria-expanded='true'] {
+      background-color: rgba(12, 12, 13, 0.1);
+      border-radius: 1px;
+      box-shadow: 0 0 0 5px rgba(12, 12, 13, 0.1);
+      fill: rgba(12, 12, 13, 0.8); }
+      .collapsible-section .section-top-bar .info-option-icon[aria-expanded='true'] + .info-option {
+        opacity: 1;
+        transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+        visibility: visible; }
+    .collapsible-section .section-top-bar .info-option-icon:not([aria-expanded='true']) + .info-option {
+      pointer-events: none; }
+    .collapsible-section .section-top-bar .info-option-icon:-moz-any(:active, :focus) {
       opacity: 1; }
-  .collapsible-section .section-top-bar .info-option-icon[aria-expanded="true"] {
-    background-color: rgba(12, 12, 13, 0.1);
-    border-radius: 1px;
-    box-shadow: 0 0 0 5px rgba(12, 12, 13, 0.1);
-    fill: rgba(12, 12, 13, 0.8); }
   .collapsible-section .section-top-bar .section-info-option .info-option {
-    visibility: hidden;
     opacity: 0;
-    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
+    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1);
+    visibility: hidden; }
     .collapsible-section .section-top-bar .section-info-option .info-option::after, .collapsible-section .section-top-bar .section-info-option .info-option::before {
-      content: "";
+      content: '';
       offset-inline-end: 0;
       position: absolute; }
     .collapsible-section .section-top-bar .section-info-option .info-option::before {
       background-image: url("chrome://global/skin/arrow/panelarrow-vertical-themed.svg");
       background-position: right 6px bottom;
       background-repeat: no-repeat;
       background-size: 20px 10px;
       height: 32px;
       top: -32px;
       width: 43px; }
     .collapsible-section .section-top-bar .section-info-option .info-option:dir(rtl)::before {
       background-position-x: 6px; }
     .collapsible-section .section-top-bar .section-info-option .info-option::after {
       height: 10px;
       offset-inline-start: 0;
       top: -10px; }
-  .collapsible-section .section-top-bar .info-option-icon[aria-expanded="true"] + .info-option {
-    visibility: visible;
-    opacity: 1;
-    transition: visibility 0.2s, opacity 0.2s cubic-bezier(0.07, 0.95, 0, 1); }
-  .collapsible-section .section-top-bar .info-option-icon:not([aria-expanded="true"]) + .info-option {
-    pointer-events: none; }
   .collapsible-section .section-top-bar .info-option {
-    z-index: 9999;
-    position: absolute;
     background: #FFF;
     border: 1px solid #D7D7DB;
     border-radius: 3px;
+    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
     font-size: 13px;
     line-height: 120%;
     margin-inline-end: -9px;
     offset-inline-end: 0;
+    padding: 24px;
+    position: absolute;
     top: 26px;
+    -moz-user-select: none;
     width: 320px;
-    padding: 24px;
-    box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
-    -moz-user-select: none; }
+    z-index: 9999; }
   .collapsible-section .section-top-bar .info-option-header {
     font-size: 15px;
     font-weight: 600; }
   .collapsible-section .section-top-bar .info-option-body {
     margin: 0;
     margin-top: 12px; }
   .collapsible-section .section-top-bar .info-option-link {
     color: #0060DF;
     margin-left: 7px; }
   .collapsible-section .section-top-bar .info-option-manage {
     margin-top: 24px; }
     .collapsible-section .section-top-bar .info-option-manage button {
-      background: none;
-      border: none;
+      background: 0;
+      border: 0;
       color: #0060DF;
       cursor: pointer;
       margin: 0;
       padding: 0; }
       .collapsible-section .section-top-bar .info-option-manage button::after {
         background-image: url("../data/content/assets/topic-show-more-12.svg");
         background-repeat: no-repeat;
         content: '';
@@ -1251,24 +1251,24 @@ section.top-sites:not(.collapsed):hover 
         width: 340px; } }
     @media (min-width: 800px) {
       .collapsible-section .section-disclaimer .section-disclaimer-text {
         width: 610px; } }
   .collapsible-section .section-disclaimer a {
     color: #008EA4;
     padding-left: 3px; }
   .collapsible-section .section-disclaimer button {
-    margin-top: 2px;
-    offset-inline-end: 0;
-    min-height: 26px;
-    max-width: 130px;
     background: #F9F9FA;
     border: 1px solid #B1B1B3;
     border-radius: 4px;
-    cursor: pointer; }
+    cursor: pointer;
+    margin-top: 2px;
+    max-width: 130px;
+    min-height: 26px;
+    offset-inline-end: 0; }
     .collapsible-section .section-disclaimer button:hover:not(.dismiss) {
       box-shadow: 0 0 0 5px #D7D7DB;
       transition: box-shadow 150ms; }
     @media (min-width: 416px) {
       .collapsible-section .section-disclaimer button {
         position: absolute; } }
 
 .collapsible-section .section-body {
--- a/browser/extensions/activity-stream/data/content/activity-stream.bundle.js
+++ b/browser/extensions/activity-stream/data/content/activity-stream.bundle.js
@@ -89,17 +89,17 @@ const globalImportContext = typeof Windo
 
 
 // Create an object that avoids accidental differing key/value pairs:
 // {
 //   INIT: "INIT",
 //   UNINIT: "UNINIT"
 // }
 const actionTypes = {};
-for (const type of ["BLOCK_URL", "BOOKMARK_URL", "DELETE_BOOKMARK_BY_ID", "DELETE_HISTORY_URL", "DELETE_HISTORY_URL_CONFIRM", "DIALOG_CANCEL", "DIALOG_OPEN", "DISABLE_ONBOARDING", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_CHANGED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_DELETED", "PLACES_LINK_BLOCKED", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_FIREFOX_ACCOUNTS", "SNIPPETS_DATA", "SNIPPETS_RESET", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_ADD", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_EDIT", "TOP_SITES_PIN", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "UNINIT"]) {
+for (const type of ["BLOCK_URL", "BOOKMARK_URL", "DELETE_BOOKMARK_BY_ID", "DELETE_HISTORY_URL", "DELETE_HISTORY_URL_CONFIRM", "DIALOG_CANCEL", "DIALOG_OPEN", "DISABLE_ONBOARDING", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_CHANGED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_DELETED", "PLACES_LINK_BLOCKED", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_FIREFOX_ACCOUNTS", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_ADD", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_EDIT", "TOP_SITES_PIN", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "UNINIT"]) {
   actionTypes[type] = type;
 }
 
 // Helper function for creating routed actions between content and main
 // Not intended to be used by consumers
 function _RouteMessage(action, options) {
   const meta = action.meta ? Object.assign({}, action.meta) : {};
   if (!options || !options.from || !options.to) {
@@ -305,37 +305,37 @@ module.exports = ReactIntl;
 /***/ (function(module, exports) {
 
 module.exports = ReactRedux;
 
 /***/ }),
 /* 4 */
 /***/ (function(module, exports) {
 
-var g;
-
-// This works in non-strict mode
-g = (function() {
-	return this;
-})();
-
-try {
-	// This works if eval is allowed (see CSP)
-	g = g || Function("return this")() || (1,eval)("this");
-} catch(e) {
-	// This works if the window reference is available
-	if(typeof window === "object")
-		g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
+var g;
+
+// This works in non-strict mode
+g = (function() {
+	return this;
+})();
+
+try {
+	// This works if eval is allowed (see CSP)
+	g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+	// This works if the window reference is available
+	if(typeof window === "object")
+		g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
 
 
 /***/ }),
 /* 5 */
 /***/ (function(module, exports) {
 
 module.exports = {
   TOP_SITES_SOURCE: "TOP_SITES",
@@ -2468,21 +2468,16 @@ class Search extends React.PureComponent
       // more details)
       const searchSource = IS_NEWTAB ? "newtab" : "homepage";
 
       // gContentSearchController needs to exist as a global so that tests for
       // the existing about:home can find it; and so it allows these tests to pass.
       // In the future, when activity stream is default about:home, this can be renamed
       window.gContentSearchController = new ContentSearchUIController(input, input.parentNode, healthReportKey, searchSource);
       addEventListener("ContentSearchClient", this);
-
-      // Focus the search box if we are on about:home
-      if (!IS_NEWTAB) {
-        input.focus();
-      }
     } else {
       window.gContentSearchController = null;
       removeEventListener("ContentSearchClient", this);
     }
   }
 
   /*
    * Do not change the ID on the input field, as legacy newtab code
@@ -3764,18 +3759,19 @@ class SnippetsMap extends Map {
    */
   async blockSnippetById(id) {
     if (!id) {
       return;
     }
     let blockList = this.blockList;
     if (!blockList.includes(id)) {
       blockList.push(id);
+      this._dispatch(ac.SendToMain({ type: at.SNIPPETS_BLOCKLIST_UPDATED, data: blockList }));
+      await this.set("blockList", blockList);
     }
-    await this.set("blockList", blockList);
   }
 
   disableOnboarding() {
     this._dispatch(ac.SendToMain({ type: at.DISABLE_ONBOARDING }));
   }
 
   showFirefoxAccounts() {
     this._dispatch(ac.SendToMain({ type: at.SHOW_FIREFOX_ACCOUNTS }));
@@ -3888,16 +3884,17 @@ class SnippetsMap extends Map {
  *                    remote location, or else default snippets if the remote
  *                    snippets cannot be retrieved.
  */
 class SnippetsProvider {
   constructor(dispatch) {
     // Initialize the Snippets Map and attaches it to a global so that
     // the snippet payload can interact with it.
     global.gSnippetsMap = new SnippetsMap(dispatch);
+    this._onAction = this._onAction.bind(this);
   }
 
   get snippetsMap() {
     return global.gSnippetsMap;
   }
 
   async _refreshSnippets() {
     // Check if the cached version of of the snippets in snippetsMap. If it's too
@@ -3953,43 +3950,56 @@ class SnippetsProvider {
       throw new Error("No remote snippets were found in gSnippetsMap.");
     }
 
     if (typeof payload !== "string") {
       throw new Error("Snippet payload was incorrectly formatted");
     }
 
     // Note that injecting snippets can throw if they're invalid XML.
+    // eslint-disable-next-line no-unsanitized/property
     snippetsEl.innerHTML = payload;
 
     // Scripts injected by innerHTML are inactive, so we have to relocate them
     // through DOM manipulation to activate their contents.
     for (const scriptEl of snippetsEl.getElementsByTagName("script")) {
       const relocatedScript = document.createElement("script");
       relocatedScript.text = scriptEl.text;
       scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);
     }
   }
 
+  _onAction(msg) {
+    if (msg.data.type === at.SNIPPET_BLOCKED) {
+      this.snippetsMap.set("blockList", msg.data.data);
+      document.getElementById("snippets-container").style.display = "none";
+    }
+  }
+
   /**
    * init - Fetch the snippet payload and show snippets
    *
    * @param  {obj} options
    * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets
    * @param  {int} options.appData.version  The current snippets version
    * @param  {str} options.elementId  The id of the element in which to inject snippets
    * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?
    */
   async init(options) {
     Object.assign(this, {
       appData: {},
       elementId: "snippets",
       connect: true
     }, options);
 
+    // Add listener so we know when snippets are blocked on other pages
+    if (global.addMessageListener) {
+      global.addMessageListener("ActivityStream:MainToContent", this._onAction);
+    }
+
     // TODO: Requires enabling indexedDB on newtab
     // Restore the snippets map from indexedDB
     if (this.connect) {
       try {
         await this.snippetsMap.connect();
       } catch (e) {
         console.error(e); // eslint-disable-line no-console
       }
@@ -4014,16 +4024,19 @@ class SnippetsProvider {
 
     this._forceOnboardingVisibility(true);
     this.initialized = true;
   }
 
   uninit() {
     window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));
     this._forceOnboardingVisibility(false);
+    if (global.removeMessageListener) {
+      global.removeMessageListener("ActivityStream:MainToContent", this._onAction);
+    }
     this.initialized = false;
   }
 }
 
 /**
  * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes
  *                         when the store has received the appropriate
  *                         Snippet data.
--- a/browser/extensions/activity-stream/install.rdf.in
+++ b/browser/extensions/activity-stream/install.rdf.in
@@ -3,17 +3,17 @@
 #filter substitution
 
 <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
   <Description about="urn:mozilla:install-manifest">
     <em:id>activity-stream@mozilla.org</em:id>
     <em:type>2</em:type>
     <em:bootstrap>true</em:bootstrap>
     <em:unpack>false</em:unpack>
-    <em:version>2017.11.16.1254-39442ee8</em:version>
+    <em:version>2017.12.02.0024-b0532674</em:version>
     <em:name>Activity Stream</em:name>
     <em:description>A rich visual history feed and a reimagined home page make it easier than ever to find exactly what you're looking for in Firefox.</em:description>
     <em:multiprocessCompatible>true</em:multiprocessCompatible>
 
     <em:targetApplication>
       <Description>
         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
         <em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
--- a/browser/extensions/activity-stream/lib/ActivityStream.jsm
+++ b/browser/extensions/activity-stream/lib/ActivityStream.jsm
@@ -36,20 +36,16 @@ const DEFAULT_SITES = new Map([
   ["FR", "https://www.youtube.com/,https://www.facebook.com/,https://www.wikipedia.org/,https://www.amazon.fr/,https://www.leboncoin.fr/,https://twitter.com/"]
 ]);
 const GEO_PREF = "browser.search.region";
 const REASON_ADDON_UNINSTALL = 6;
 
 // Configure default Activity Stream prefs with a plain `value` or a `getValue`
 // that computes a value. A `value_local_dev` is used for development defaults.
 const PREFS_CONFIG = new Map([
-  ["aboutHome.autoFocus", {
-    title: "Focus the about:home search box on load",
-    value: false
-  }],
   ["default.sites", {
     title: "Comma-separated list of default top sites to fill in behind visited sites",
     getValue: ({geo}) => DEFAULT_SITES.get(DEFAULT_SITES.has(geo) ? geo : "")
   }],
   ["feeds.section.topstories.options", {
     title: "Configuration options for top stories feed",
     // This is a dynamic pref as it depends on the feed being shown or not
     getValue: args => JSON.stringify({
--- a/browser/extensions/activity-stream/lib/NewTabInit.jsm
+++ b/browser/extensions/activity-stream/lib/NewTabInit.jsm
@@ -35,23 +35,16 @@ this.NewTabInit = class NewTabInit {
       case at.NEW_TAB_STATE_REQUEST:
         this.reply(action.meta.fromTarget);
         break;
       case at.NEW_TAB_INIT:
         // Initialize data for early tabs that might REQUEST twice
         if (action.data.simulated) {
           this._repliedEarlyTabs.set(action.data.portID, false);
         }
-
-        if (action.data.url === "about:home") {
-          const prefs = this.store.getState().Prefs.values;
-          if (prefs["aboutHome.autoFocus"] && prefs.showSearch) {
-            action.data.browser.focus();
-          }
-        }
         break;
       case at.NEW_TAB_UNLOAD:
         // Clean up for any tab (no-op if not an early tab)
         this._repliedEarlyTabs.delete(action.meta.fromTarget);
         break;
     }
   }
 };
--- a/browser/extensions/activity-stream/lib/SnippetsFeed.jsm
+++ b/browser/extensions/activity-stream/lib/SnippetsFeed.jsm
@@ -138,13 +138,16 @@ this.SnippetsFeed = class SnippetsFeed {
         this.init();
         break;
       case at.UNINIT:
         this.uninit();
         break;
       case at.SHOW_FIREFOX_ACCOUNTS:
         this.showFirefoxAccounts(action._target.browser);
         break;
+      case at.SNIPPETS_BLOCKLIST_UPDATED:
+        this.store.dispatch(ac.BroadcastToContent({type: at.SNIPPET_BLOCKED, data: action.data}));
+        break;
     }
   }
 };
 
 this.EXPORTED_SYMBOLS = ["SnippetsFeed"];
--- a/browser/extensions/activity-stream/prerendered/locales/ast/activity-stream-prerendered.html
+++ b/browser/extensions/activity-stream/prerendered/locales/ast/activity-stream-prerendered.html
@@ -3,17 +3,17 @@
   <head>
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy-Report-Only" content="script-src 'unsafe-inline'; img-src http: https: data: blob:; style-src 'unsafe-inline'; child-src 'none'; object-src 'none'; report-uri https://tiles.services.mozilla.com/v4/links/activity-stream/csp">
     <link rel="icon" type="image/png" id="favicon" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="123967595"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">Guetar na web</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="Guetar na web" title="Guetar na web" data-reactid="7"/><button id="searchSubmit" class="search-button" title="Guetar" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">Guetar</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">Sitios destacaos</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="Información" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">Top Sites</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">Access the websites you visit most.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">New Tab Preferences</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="Customize your Top Sites section" data-reactid="69"><span data-reactid="70">Edit</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">Recommended by Pocket</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">Temes populares:</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">Los destacaos</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
+    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="-194534958"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">Guetar na web</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="Guetar na web" title="Guetar na web" data-reactid="7"/><button id="searchSubmit" class="search-button" title="Guetar" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">Guetar</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">Más visitaos</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="Información" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">Más visitaos</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">Acceder a les webs que más visites.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">Preferencies de Llingüeta nueva</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="Personalizar la seición de Más visitaos" data-reactid="69"><span data-reactid="70">Editar</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">Recomendáu por Pocket</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">Temes populares:</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">Destacaos</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
     <div id="snippets-container">
       <div id="snippets"></div>
     </div>
     <script>
 // Don't directly load the following scripts as part of html to let the page
 // finish loading to render the content sooner.
 for (const src of [
   "resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
--- a/browser/extensions/activity-stream/prerendered/locales/ast/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ast/activity-stream-strings.js
@@ -1,18 +1,18 @@
 // Note - this is a generated file.
 window.gActivityStreamStrings = {
   "newtab_page_title": "Llingüeta nueva",
   "default_label_loading": "Cargando…",
-  "header_top_sites": "Sitios destacaos",
+  "header_top_sites": "Más visitaos",
   "header_stories": "Histories destacaes",
-  "header_highlights": "Los destacaos",
+  "header_highlights": "Destacaos",
   "header_visit_again": "Visitar de nueves",
   "header_bookmarks": "Marcadores recientes",
-  "header_recommended_by": "Recommended by {provider}",
+  "header_recommended_by": "Recomendáu por {provider}",
   "header_bookmarks_placeholder": "Entá nun tienes dengún marcador.",
   "header_stories_from": "de",
   "type_label_visited": "Visitóse",
   "type_label_bookmarked": "Amestóse a marcadores",
   "type_label_synced": "Sincronizóse dende otru preséu",
   "type_label_recommended": "Tendencia",
   "type_label_open": "Abrir",
   "type_label_topic": "Tema",
@@ -34,65 +34,65 @@ window.gActivityStreamStrings = {
   "search_button": "Guetar",
   "search_header": "Gueta en {search_engine_name}",
   "search_web_placeholder": "Guetar na web",
   "search_settings": "Camudar axustes de gueta",
   "section_info_option": "Información",
   "section_info_send_feedback": "Unviar comentarios",
   "section_info_privacy_notice": "Nota de privacidá",
   "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories_linktext": "Deprendi cómo furrula.",
+  "section_disclaimer_topstories_buttontext": "Val, píllolo",
   "welcome_title": "Afáyate na llingüeta nueva",
   "welcome_body": "Firefox usará esti espaciu p'amosate los marcadores, artículos, vídeos y páxines más relevantes que visitares apocayá, asina pues volver a ellos de mou cenciellu.",
-  "welcome_label": "Identifying your Highlights",
+  "welcome_label": "Identificando los tos destacaos",
   "time_label_less_than_minute": "<1m",
   "time_label_minute": "{number}m",
   "time_label_hour": "{number}h",
   "time_label_day": "{number}d",
-  "settings_pane_button_label": "Customize your New Tab page",
-  "settings_pane_header": "New Tab Preferences",
-  "settings_pane_body2": "Choose what you see on this page.",
+  "settings_pane_button_label": "Personalizar páxina Llingüeta nueva",
+  "settings_pane_header": "Preferencies de Llingüeta nueva",
+  "settings_pane_body2": "Escueyi qué quies ver nesta páxina",
   "settings_pane_search_header": "Search",
-  "settings_pane_search_body": "Search the Web from your new tab.",
-  "settings_pane_topsites_header": "Top Sites",
-  "settings_pane_topsites_body": "Access the websites you visit most.",
-  "settings_pane_topsites_options_showmore": "Show two rows",
-  "settings_pane_bookmarks_header": "Recent Bookmarks",
-  "settings_pane_bookmarks_body": "Your newly created bookmarks in one handy location.",
-  "settings_pane_visit_again_header": "Visit Again",
-  "settings_pane_visit_again_body": "Firefox will show you parts of your browsing history that you might want to remember or get back to.",
-  "settings_pane_highlights_header": "Highlights",
-  "settings_pane_highlights_body2": "Find your way back to interesting things you’ve recently visited or bookmarked.",
-  "settings_pane_highlights_options_bookmarks": "Bookmarks",
-  "settings_pane_highlights_options_visited": "Visited Sites",
-  "settings_pane_snippets_header": "Snippets",
-  "settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
+  "settings_pane_search_body": "Restolar na Web dende la nueva llingüeta",
+  "settings_pane_topsites_header": "Más visitaos",
+  "settings_pane_topsites_body": "Acceder a les webs que más visites.",
+  "settings_pane_topsites_options_showmore": "Amosar dos fileres",
+  "settings_pane_bookmarks_header": "Marcadores recientes",
+  "settings_pane_bookmarks_body": "Los marcadores recién fechos, nun llugar accesible.",
+  "settings_pane_visit_again_header": "Visitar de nueves",
+  "settings_pane_visit_again_body": "Firefox va amosate partes del to historial de navegación que a lo meyor prestaríate remembrar o volver visitar.",
+  "settings_pane_highlights_header": "Destacaos",
+  "settings_pane_highlights_body2": "Atopa otra vegada les coses interesantes que yá visitaras o marcaras.",
+  "settings_pane_highlights_options_bookmarks": "Marcadores",
+  "settings_pane_highlights_options_visited": "Sitios visitaos",
+  "settings_pane_snippets_header": "Retayos",
+  "settings_pane_snippets_body": "Llei anovamientos curtios de Mozilla tocante a Firefox, la cultura d'internet y un meme de xemes en cuandu.",
   "settings_pane_done_button": "Fecho",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
-  "edit_topsites_button_text": "Edit",
-  "edit_topsites_button_label": "Customize your Top Sites section",
+  "settings_pane_topstories_options_sponsored": "Amosar hestories patrocinaes",
+  "edit_topsites_button_text": "Editar",
+  "edit_topsites_button_label": "Personalizar la seición de Más visitaos",
   "edit_topsites_showmore_button": "Amosar más",
-  "edit_topsites_showless_button": "Show Fewer",
+  "edit_topsites_showless_button": "Amosar menos",
   "edit_topsites_done_button": "Fecho",
-  "edit_topsites_pin_button": "Pin this site",
-  "edit_topsites_unpin_button": "Unpin this site",
-  "edit_topsites_edit_button": "Edit this site",
-  "edit_topsites_dismiss_button": "Dismiss this site",
-  "edit_topsites_add_button": "Add",
-  "topsites_form_add_header": "New Top Site",
-  "topsites_form_edit_header": "Edit Top Site",
-  "topsites_form_title_placeholder": "Enter a title",
-  "topsites_form_url_placeholder": "Type or paste a URL",
+  "edit_topsites_pin_button": "Fixar esti sitiu",
+  "edit_topsites_unpin_button": "Desfixar esti sitiu",
+  "edit_topsites_edit_button": "Editar esti sitiu",
+  "edit_topsites_dismiss_button": "Escartar esti sitiu",
+  "edit_topsites_add_button": "Amestar",
+  "topsites_form_add_header": "Nuevu Sitiu más visitáu",
+  "topsites_form_edit_header": "Editar Sitiu más visitáu",
+  "topsites_form_title_placeholder": "Introducir títulu",
+  "topsites_form_url_placeholder": "Escribi o apega una URL",
   "topsites_form_add_button": "Amestar",
   "topsites_form_save_button": "Guardar",
   "topsites_form_cancel_button": "Encaboxar",
-  "topsites_form_url_validation": "Valid URL required",
+  "topsites_form_url_validation": "Ríquese una URL válida",
   "pocket_read_more": "Temes populares:",
   "pocket_read_even_more": "Ver más histories",
   "pocket_feedback_header": "The best of the web, curated by over 25 million people.",
   "pocket_description": "Discover high-quality content you might otherwise miss, with help from Pocket, now part of Mozilla.",
   "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
   "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
-  "manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
-  "manual_migration_cancel_button": "No Thanks",
-  "manual_migration_import_button": "Import Now"
+  "manual_migration_explanation2": "Prueba Firefox colos marcadores, hestorial y contraseñes d'otru restolador.",
+  "manual_migration_cancel_button": "Non, gracies",
+  "manual_migration_import_button": "Importar agora"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/be/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/be/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "Шукаць {search_term} у:",
   "search_button": "Шукаць",
   "search_header": "Шукаць у {search_engine_name}",
   "search_web_placeholder": "Пошук у Інтэрнэце",
   "search_settings": "Змяніць налады пошуку",
   "section_info_option": "Звесткі",
   "section_info_send_feedback": "Даслаць водгук",
   "section_info_privacy_notice": "Паведамленне аб прыватнасці",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "Самыя цікавыя гісторыі з інтэрнэту на аснове таго, што вы чытаеце. Падборка ад Pocket, які цяпер частка Mozilla.",
+  "section_disclaimer_topstories_linktext": "Даведайцеся, як гэта працуе.",
+  "section_disclaimer_topstories_buttontext": "Зразумела",
   "welcome_title": "Калі ласка ў новую картку",
   "welcome_body": "Firefox будзе выкарыстоўваць гэта месца, каб адлюстроўваць самыя актуальныя закладкі, артыкулы, відэа і старонкі, якія вы нядаўна наведалі, каб вы змаглі лёгка трапіць на іх зноў.",
   "welcome_label": "Вызначэнне вашага выбранага",
   "time_label_less_than_minute": "<1 хв",
   "time_label_minute": "{number} хв",
   "time_label_hour": "{number} г",
   "time_label_day": "{number} д",
   "settings_pane_button_label": "Наладзіць вашу старонку новай карткі",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "Firefox пакажа вам элементы гісторыі прагляду, якія вы, магчыма, захочаце запомніць або наведаць зноў.",
   "settings_pane_highlights_header": "Выбранае",
   "settings_pane_highlights_body2": "Знайдзіце зваротны шлях да цікавых рэчаў, якія вы нядаўна наведалі або дадалі ў закладкі.",
   "settings_pane_highlights_options_bookmarks": "Закладкі",
   "settings_pane_highlights_options_visited": "Наведаныя сайты",
   "settings_pane_snippets_header": "Урыўкі",
   "settings_pane_snippets_body": "Чытайце кароткія і радасныя навіны ад Mozilla аб Firefox, інтэрнэт-культуру і выпадковыя мемы.",
   "settings_pane_done_button": "Гатова",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "Паказаць артыкулы ад спонсараў",
   "edit_topsites_button_text": "Правіць",
   "edit_topsites_button_label": "Наладзіць раздзел папулярных сайтаў",
   "edit_topsites_showmore_button": "Паказаць больш",
   "edit_topsites_showless_button": "Паказаць менш",
   "edit_topsites_done_button": "Гатова",
   "edit_topsites_pin_button": "Замацаваць гэты сайт",
   "edit_topsites_unpin_button": "Адшпіліць гэты сайт",
   "edit_topsites_edit_button": "Рэдагаваць гэты сайт",
--- a/browser/extensions/activity-stream/prerendered/locales/bn-BD/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/bn-BD/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "{search_term} এর জন্য খুঁজুন সাথে:",
   "search_button": "অনুসন্ধান",
   "search_header": "{search_engine_name} খুঁজুন",
   "search_web_placeholder": "ওয়েবে সন্ধান করুন",
   "search_settings": "সার্চ সেটিংস বদল করুন",
   "section_info_option": "তথ্য",
   "section_info_send_feedback": "মতামত পাঠান",
   "section_info_privacy_notice": "গোপনীয়তা বিজ্ঞপ্তি",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "মজার মজার সব গল্প নির্বাচিত হয়েছে, আপনি যেমনটা পড়েন। Pocket এখন থেকে Mozilla এর অংশ।",
+  "section_disclaimer_topstories_linktext": "কিভাবে কাজ করে জানুন।",
+  "section_disclaimer_topstories_buttontext": "ঠিক আছে, বুঝেছি",
   "welcome_title": "নতুন ট্যাবে আপনাকে স্বাগতম",
   "welcome_body": "আপনার সাথে মিলে এমন বুর্কমার্ক, নিবন্ধ, ভিডিও এবং পাতা যেগুলো আপনি সম্প্রতি ভ্রমণ করেছে তা Firefox এই জায়গায় দেখাবে, যাতে আপনি সেগুলো দ্রুত খুঁজে পান।",
   "welcome_label": "আপনার হাইলাইট সমূহ চিহ্নিত করুন",
   "time_label_less_than_minute": "<1মিনিট",
   "time_label_minute": "{number} মিনিট",
   "time_label_hour": "{number} ঘন্টা",
   "time_label_day": "{number} দিন",
   "settings_pane_button_label": "আপনার নতুন ট্যাব পেজটি কাস্টমাইজ করুন",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "Firefox আপনার ব্রাউজিং ইতিহাসের এমন একটি অংশ দেখাবে যা আপনি মনে রাখতে চান বা যাতে আবার ফিরে যেতে চান।",
   "settings_pane_highlights_header": "হাইলাইটস",
   "settings_pane_highlights_body2": "আপনি সম্প্রতি পরিদর্শন করেছেন বা বুকমার্ক করেছেন এমন আকর্ষণীয় বিষয়গুলিতে ফিরে যাবার পথ পান।",
   "settings_pane_highlights_options_bookmarks": "বুকমার্ক",
   "settings_pane_highlights_options_visited": "পূর্বে পরিদর্শন করা সাইটগুলি",
   "settings_pane_snippets_header": "টুকিটাকি",
   "settings_pane_snippets_body": "Mozilla থেকে Firefox, ইন্টারনেট সংস্কৃতি, এবং মাঝে মাঝে উদ্দেশ্যহীন মেমে সম্পর্কে ছোট এবং মিষ্টি আপডেটগুলি পড়ুন।",
   "settings_pane_done_button": "হয়েছে",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "বিজ্ঞাপনী গল্প দেখাও",
   "edit_topsites_button_text": "সম্পাদনা",
   "edit_topsites_button_label": "আপনার টপ সাইট সেকশন কাস্টমাইজ করুন",
   "edit_topsites_showmore_button": "আরও দেখান",
   "edit_topsites_showless_button": "কম দেখান",
   "edit_topsites_done_button": "হয়েছে",
   "edit_topsites_pin_button": "সাইটটি পিন করুন",
   "edit_topsites_unpin_button": "এই সাইট আনপিন করুন",
   "edit_topsites_edit_button": "সাইটটি সম্পাদনা করুন",
--- a/browser/extensions/activity-stream/prerendered/locales/bn-IN/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/bn-IN/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "{search_term} এর জন্য খুঁজুন সাথে:",
   "search_button": "অনুসন্ধান",
   "search_header": "{search_engine_name} এ অনুসন্ধান করুন",
   "search_web_placeholder": "ওয়েবে সন্ধান করুন",
   "search_settings": "সার্চ সেটিংস বদল করুন",
   "section_info_option": "তথ্য",
   "section_info_send_feedback": "মতামত পাঠান",
   "section_info_privacy_notice": "গোপনীয়তা বিজ্ঞপ্তি",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "মজার মজার সব গল্প নির্বাচিত হয়েছে, আপনি যেমনটা পড়েন। Pocket এখন থেকে Mozilla এর অংশ।",
+  "section_disclaimer_topstories_linktext": "কিভাবে কাজ করে জানুন।",
+  "section_disclaimer_topstories_buttontext": "ঠিক আছে, বুঝেছি",
   "welcome_title": "নতুন ট্যাবে স্বাগতম",
   "welcome_body": "আপনার সাথে মিলে এমন বুর্কমার্ক, নিবন্ধ, ভিডিও এবং পাতা যেগুলো আপনি সম্প্রতি ভ্রমণ করেছে তা Firefox এই জায়গায় দেখাবে, যাতে আপনি সেগুলো দ্রুত খুঁজে পান।",
   "welcome_label": "আপনার হাইলাইট সমূহ চিহ্নিত করা হচ্ছে",
   "time_label_less_than_minute": "<1মিনিট",
   "time_label_minute": "{number} মিনিট",
   "time_label_hour": "{number} ঘন্টা",
   "time_label_day": "{number} দিন",
   "settings_pane_button_label": "আপনার নতুন ট্যাব পেজটি কাস্টমাইজ করুন",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "Firefox আপনার ব্রাউজিং ইতিহাসের এমন একটি অংশ দেখাবে যা আপনি মনে রাখতে চান বা যাতে আবার ফিরে যেতে চান।",
   "settings_pane_highlights_header": "হাইলাইটস",
   "settings_pane_highlights_body2": "আপনি সম্প্রতি পরিদর্শন করেছেন বা বুকমার্ক করেছেন এমন আকর্ষণীয় বিষয়গুলিতে ফিরে যাবার পথ পান।",
   "settings_pane_highlights_options_bookmarks": "বুকমার্ক",
   "settings_pane_highlights_options_visited": "পূর্বে পরিদর্শন করা সাইটগুলি",
   "settings_pane_snippets_header": "টুকিটাকি",
   "settings_pane_snippets_body": "Mozilla থেকে Firefox, ইন্টারনেট সংস্কৃতি, এবং মাঝে মাঝে উদ্দেশ্যহীন মেমে সম্পর্কে ছোট এবং মিষ্টি আপডেটগুলি পড়ুন।",
   "settings_pane_done_button": "হয়েছে",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "বিজ্ঞাপনী গল্প দেখাও",
   "edit_topsites_button_text": "সম্পাদনা",
   "edit_topsites_button_label": "আপনার শীর্ষ সাইট সেকশন কাস্টমাইজ করুন",
   "edit_topsites_showmore_button": "আরও দেখান",
   "edit_topsites_showless_button": "কম দেখান",
   "edit_topsites_done_button": "হয়েছে",
   "edit_topsites_pin_button": "সাইটটি পিন করুন",
   "edit_topsites_unpin_button": "এই সাইট আনপিন করুন",
   "edit_topsites_edit_button": "সাইটটি সম্পাদনা করুন",
--- a/browser/extensions/activity-stream/prerendered/locales/es-AR/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/es-AR/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "Buscar {search_term} con:",
   "search_button": "Buscar",
   "search_header": "Buscar con {search_engine_name}",
   "search_web_placeholder": "Buscar en la web",
   "search_settings": "Cambiar opciones de búsqueda",
   "section_info_option": "Información",
   "section_info_send_feedback": "Enviar opinión",
   "section_info_privacy_notice": "Nota de privacidad",
-  "section_disclaimer_topstories": "Las más interesantes historias en la web, seleccionadas basándonos en los que lees. Desde Pocket, ahora parte de Mozilla.",
-  "section_disclaimer_topstories_linktext": "Saber como trabaja.",
-  "section_disclaimer_topstories_buttontext": "Está bien, lo entiendo",
+  "section_disclaimer_topstories": "Las historias más interesantes en la web, seleccionadas en base a lo que lees. Gracias a Pocket, ahora parte de Mozilla.",
+  "section_disclaimer_topstories_linktext": "Aprendé cómo funciona.",
+  "section_disclaimer_topstories_buttontext": "Listo, lo entendí",
   "welcome_title": "Bienvenido a una nueva pestaña",
   "welcome_body": "Firefox usará este espacio para mostrar sus marcadores, artículos, videos y páginas más relevantes que se hayan visitado para poder volver más fácilmente.",
   "welcome_label": "Identificar los destacados",
   "time_label_less_than_minute": "<1m",
   "time_label_minute": "{number}m",
   "time_label_hour": "{number}h",
   "time_label_day": "{number}d",
   "settings_pane_button_label": "Personalizar la página nueva pestaña",
--- a/browser/extensions/activity-stream/prerendered/locales/et/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/et/activity-stream-strings.js
@@ -34,18 +34,18 @@ window.gActivityStreamStrings = {
   "search_button": "Otsi",
   "search_header": "{search_engine_name}",
   "search_web_placeholder": "Otsi veebist",
   "search_settings": "Muuda otsingu sätteid",
   "section_info_option": "Teave",
   "section_info_send_feedback": "Saada tagasisidet",
   "section_info_privacy_notice": "Privaatsusreeglid",
   "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories_linktext": "Vaata, kuidas see töötab.",
+  "section_disclaimer_topstories_buttontext": "Olgu, sain aru",
   "welcome_title": "Tere tulemast uuele kaardile",
   "welcome_body": "Firefox kasutab seda lehte, et kuvada sulle kõige olulisemaid järjehoidjaid, artikleid, videoid ja lehti, mida oled hiljuti külastanud, nii et pääseksid kergelt nende juurde tagasi.",
   "welcome_label": "Esiletõstetava sisu tuvastamine",
   "time_label_less_than_minute": "<1m",
   "time_label_minute": "{number}m",
   "time_label_hour": "{number}t",
   "time_label_day": "{number}p",
   "settings_pane_button_label": "Kohanda uue kaardi lehte",
--- a/browser/extensions/activity-stream/prerendered/locales/fi/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/fi/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "Hae {search_term} palvelusta:",
   "search_button": "Haku",
   "search_header": "{search_engine_name}-haku",
   "search_web_placeholder": "Verkkohaku",
   "search_settings": "Muuta hakuasetuksia",
   "section_info_option": "Tietoa",
   "section_info_send_feedback": "Anna palautetta",
   "section_info_privacy_notice": "Tietosuojakäytäntö",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "Verkon kiinnostavimmat jutut, lukemasi perusteella valittuna. Pocketilta, joka on nyt osa Mozillaa.",
+  "section_disclaimer_topstories_linktext": "Lue, miten tämä toimii.",
+  "section_disclaimer_topstories_buttontext": "Selvä",
   "welcome_title": "Tervetuloa uuteen välilehteen",
   "welcome_body": "Firefox käyttää tätä tilaa näyttämään olennaisimmat kirjanmerkit, artikkelit, videot ja sivut, joita olet katsellut, jotta pääset niihin takaisin nopeasti.",
   "welcome_label": "Tunnistetaan nostojasi",
   "time_label_less_than_minute": "<1 min",
   "time_label_minute": "{number} min",
   "time_label_hour": "{number} h",
   "time_label_day": "{number} pv",
   "settings_pane_button_label": "Muokkaa Uusi välilehti -sivua",
@@ -59,20 +59,20 @@ window.gActivityStreamStrings = {
   "settings_pane_bookmarks_header": "Uusimmat kirjanmerkit",
   "settings_pane_bookmarks_body": "Uusimmat kirjanmerkkisi, yhdessä kätevässä paikassa.",
   "settings_pane_visit_again_header": "Käy toistekin",
   "settings_pane_visit_again_body": "Firefox näyttää selaushistoriastasi palasia, jotka saatat haluta muistaa tai joissa haluat ehkä käydä.",
   "settings_pane_highlights_header": "Nostot",
   "settings_pane_highlights_body2": "Löydä tiesi takaisin kiinnostaviin juttuihin, joissa olet käynyt tai jotka olet lisännyt kirjanmerkkeihin viime aikoina.",
   "settings_pane_highlights_options_bookmarks": "Kirjanmerkit",
   "settings_pane_highlights_options_visited": "Vieraillut sivustot",
-  "settings_pane_snippets_header": "Snippets",
-  "settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
+  "settings_pane_snippets_header": "Tiedonmuruset",
+  "settings_pane_snippets_body": "Lue Mozillan lyhyitä päivityksiä liittyen Firefoxiin, internetkulttuuriin ja satunnaisiin meemeihin.",
   "settings_pane_done_button": "Valmis",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "Näytä sponsoroidut jutut",
   "edit_topsites_button_text": "Muokkaa",
   "edit_topsites_button_label": "Muokkaa Ykkössivustot-osiota",
   "edit_topsites_showmore_button": "Näytä enemmän",
   "edit_topsites_showless_button": "Näytä vähemmän",
   "edit_topsites_done_button": "Valmis",
   "edit_topsites_pin_button": "Kiinnitä tämä sivusto",
   "edit_topsites_unpin_button": "Poista tämän sivuston kiinnitys",
   "edit_topsites_edit_button": "Muokkaa tätä sivustoa",
@@ -84,15 +84,15 @@ window.gActivityStreamStrings = {
   "topsites_form_url_placeholder": "Kirjoita tai liitä osoite",
   "topsites_form_add_button": "Lisää",
   "topsites_form_save_button": "Tallenna",
   "topsites_form_cancel_button": "Peruuta",
   "topsites_form_url_validation": "Kelvollinen osoite vaaditaan",
   "pocket_read_more": "Suositut aiheet:",
   "pocket_read_even_more": "Katso lisää juttuja",
   "pocket_feedback_header": "Netin parhaat palat, valikoitu yli 25 miljoonan ihmisen voimin.",
-  "pocket_description": "Discover high-quality content you might otherwise miss, with help from Pocket, now part of Mozilla.",
-  "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
+  "pocket_description": "Löydä laadukasta sisältöä, josta olisit muutoin ehkä jäänyt paitsi. Pocketilta, joka on nyt osa Mozillaa.",
+  "highlights_empty_state": "Ala selata, niin tässä alkaa näkyä hyviä juttuja, videoita ja muita sivuja, joilla olet käynyt hiljattain tai jotka olet lisännyt kirjanmerkkeihin.",
   "topstories_empty_state": "Ei enempää suosituksia juuri nyt. Katso myöhemmin uudestaan lisää ykkösjuttuja lähteestä {provider}. Etkö malta odottaa? Valitse suosittu aihe ja löydä lisää hyviä juttuja ympäri verkkoa.",
-  "manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
+  "manual_migration_explanation2": "Kokeile Firefoxia toisesta selaimesta tuotujen kirjanmerkkien, historian ja salasanojen kanssa.",
   "manual_migration_cancel_button": "Ei kiitos",
   "manual_migration_import_button": "Tuo nyt"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/fy-NL/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/fy-NL/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "Sykje nei {search_term} mei:",
   "search_button": "Sykje",
   "search_header": "{search_engine_name} trochsykje",
   "search_web_placeholder": "Sykje op it web",
   "search_settings": "Sykynstellingen wizigje",
   "section_info_option": "Ynfo",
   "section_info_send_feedback": "Kommentaar ferstjoere",
   "section_info_privacy_notice": "Privacyferklearring",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "De meast ynteressante ferhalen op it web, selektearre op basis fan wat jo lêzen hawwe. Fan Pocket, no ûnderdiel fan Mozilla.",
+  "section_disclaimer_topstories_linktext": "Lês hoe't it wurket.",
+  "section_disclaimer_topstories_buttontext": "Oké, begrepen",
   "welcome_title": "Wolkom by it nije ljepblêd",
   "welcome_body": "Firefox brûkt dizze romte om jo meast relevante blêdwizers, artikelen, fideo’s en siden dy't jo koartlyn besocht hawwe wer te jaan, sadat jo dizze ienfâldichwei weromfine kinne.",
   "welcome_label": "Jo hichtepunten oantsjutte",
   "time_label_less_than_minute": "< 1 m",
   "time_label_minute": "{number} m",
   "time_label_hour": "{number} o",
   "time_label_day": "{number} d",
   "settings_pane_button_label": "Jo side foar nije ljepblêden oanpasse",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "Firefox sil jo ûnderdielen fan jo sneupskiednis toane dy't jo miskien ûnthâlde of nei werom gean wolle.",
   "settings_pane_highlights_header": "Hichtepunten",
   "settings_pane_highlights_body2": "Fyn fluch ynteressante saken werom út jo blêdwizers en resint besocht siden.",
   "settings_pane_highlights_options_bookmarks": "Blêdwizers",
   "settings_pane_highlights_options_visited": "Besochte websites",
   "settings_pane_snippets_header": "Koarte ynformaasje",
   "settings_pane_snippets_body": "Lês koart nijs fan Mozilla oer Firefox, ynternetkultuer en somtiden in meme.",
   "settings_pane_done_button": "Dien",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "Sponsore ferhalen toane",
   "edit_topsites_button_text": "Bewurkje",
   "edit_topsites_button_label": "Jo seksje Topwebsites oanpasse",
   "edit_topsites_showmore_button": "Mear toane",
   "edit_topsites_showless_button": "Minder toane",
   "edit_topsites_done_button": "Dien",
   "edit_topsites_pin_button": "Dizze side fêstsette",
   "edit_topsites_unpin_button": "Dizze webstee loskeppelje",
   "edit_topsites_edit_button": "Dizze side bewurkje",
--- a/browser/extensions/activity-stream/prerendered/locales/gu-IN/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/gu-IN/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "શોધ કરો {search_term} ની સાથે:",
   "search_button": "શોધો",
   "search_header": "{search_engine_name} શોધ કરો",
   "search_web_placeholder": "વેબ પર શોધો",
   "search_settings": "શોધ ના સેટિંગ્સ બદલો",
   "section_info_option": "માહિતી",
   "section_info_send_feedback": "પ્રતિસાદ મોકલ",
   "section_info_privacy_notice": "ગોપનીયતા સૂચના",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "વેબ પરની સૌથી રસપ્રદ વાર્તાઓ, તમે જે વાંચો છો તેના આધારે પસંદ કરેલ છે. Pocket થી, હવે Mozilla નો ભાગ.",
+  "section_disclaimer_topstories_linktext": "તે કેવી રીતે કાર્ય કરે છે તે જાણો.",
+  "section_disclaimer_topstories_buttontext": "ઠીક છે, સમજાઇ ગયું",
   "welcome_title": "નવી વિન્ડોમાં આપનું સ્વાગત છે",
   "welcome_body": "ફાયરફોક્સ, તમારા સૌથી સંબંધિત બુકમાર્ક્સ, લેખો, વિડિઓઝ, અને પૃષ્ઠો જે તમે તાજેતરમાં મુલાકાત લીધી એ બતાવવા માટે આ જગ્યાનો ઉપયોગ કરશે જેથી તમે પાછા તેમને સરળતાથી મેળવી શકો છો.",
   "welcome_label": "તમારા હાઇલાઇટ્સ ઓળખવા",
   "time_label_less_than_minute": "<1મિનિટ",
   "time_label_minute": "{number}મિનિટ",
   "time_label_hour": "{number}કલાક",
   "time_label_day": "{number}દિવસ",
   "settings_pane_button_label": "તમારા નવા ટૅબ પૃષ્ઠને કસ્ટમાઇઝ કરો",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "ફાયરફોક્સ તમને તમારા બ્રાઉઝિંગ હિસ્ટરીનાં ભાગો બતાવશે જે તમે યાદ રાખવા અથવા પાછા આવવા ઇચ્છતા હોવ.",
   "settings_pane_highlights_header": "વીતી ગયેલું",
   "settings_pane_highlights_body2": "તમે તાજેતરમાં મુલાકાત લીધેલા અથવા બુકમાર્ક કરેલી રસપ્રદ વસ્તુઓ પર તમારી રીત શોધો.",
   "settings_pane_highlights_options_bookmarks": "બુકમાર્ક્સ",
   "settings_pane_highlights_options_visited": "મુલાકાત લીધેલ સાઇટ્સ",
   "settings_pane_snippets_header": "જાણકારી આપનારા ઉતારા ક કાપલીઓ",
   "settings_pane_snippets_body": "ટૂંકી અને મીઠી સુધારાઓ વાંચો મોઝિલ્લાથી ફાયરફોક્સ વિશે, ઇન્ટરનેટ સંસ્કૃતિ અને પ્રસંગોપાત ફાવે તેમ મેમે વિશે.",
   "settings_pane_done_button": "પૂરું",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "પ્રાયોજિત વાર્તાઓ બતાવો",
   "edit_topsites_button_text": "ફેરફાર કરો",
   "edit_topsites_button_label": "તમારા ટોચના સાઇટ્સ વિભાગને કસ્ટમાઇઝ કરો",
   "edit_topsites_showmore_button": "વધારે બતાવો",
   "edit_topsites_showless_button": "થોડું બતાવો",
   "edit_topsites_done_button": "પૂરું",
   "edit_topsites_pin_button": "આ સાઇટને પિન કરો",
   "edit_topsites_unpin_button": "આ સાઇટ અનપિન કરો",
   "edit_topsites_edit_button": "આ સાઇટને સંપાદિત કરો",
--- a/browser/extensions/activity-stream/prerendered/locales/it/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/it/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "Cerca {search_term} con:",
   "search_button": "Cerca",
   "search_header": "Ricerca {search_engine_name}",
   "search_web_placeholder": "Cerca sul Web",
   "search_settings": "Cambia impostazioni di ricerca",
   "section_info_option": "Info",
   "section_info_send_feedback": "Invia feedback",
   "section_info_privacy_notice": "Informativa sulla privacy",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "Le storie più interessanti del Web, selezionate in base alle tue letture. Direttamente da Pocket, ora parte del gruppo Mozilla.",
+  "section_disclaimer_topstories_linktext": "Scopri come funziona.",
+  "section_disclaimer_topstories_buttontext": "Ho capito.",
   "welcome_title": "Benvenuto nella nuova scheda",
   "welcome_body": "Firefox utilizzerà questo spazio per visualizzare gli elementi più significativi, come segnalibri, articoli, video e pagine visitate di recente, in modo che siano sempre facili da raggiungere.",
   "welcome_label": "Identificazione elementi in evidenza…",
   "time_label_less_than_minute": "<1m",
   "time_label_minute": "{number}m",
   "time_label_hour": "{number}h",
   "time_label_day": "{number}g",
   "settings_pane_button_label": "Personalizza la pagina Nuova scheda",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "Firefox mostrerà alcuni elementi, estratti dalla cronologia di navigazione, che potresti voler visitare di nuovo.",
   "settings_pane_highlights_header": "In evidenza",
   "settings_pane_highlights_body2": "Ritrova pagine interessanti che avevi visitato o aggiunto ai segnalibri.",
   "settings_pane_highlights_options_bookmarks": "Segnalibri",
   "settings_pane_highlights_options_visited": "Siti visitati",
   "settings_pane_snippets_header": "Snippet",
   "settings_pane_snippets_body": "Brevi notizie direttamente da Mozilla a proposito di Firefox, Internet, senza dimenticare qualche meme di tanto in tanto.",
   "settings_pane_done_button": "Fatto",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "Visualizza articoli sponsorizzati",
   "edit_topsites_button_text": "Modifica",
   "edit_topsites_button_label": "Personalizza la sezione Siti principali",
   "edit_topsites_showmore_button": "Visualizza altri",
   "edit_topsites_showless_button": "Nascondi altri",
   "edit_topsites_done_button": "Fatto",
   "edit_topsites_pin_button": "Aggiungi sito alla bacheca",
   "edit_topsites_unpin_button": "Rimuovi sito dalla bacheca",
   "edit_topsites_edit_button": "Modifica questo sito",
--- a/browser/extensions/activity-stream/prerendered/locales/ka/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ka/activity-stream-strings.js
@@ -3,32 +3,32 @@ window.gActivityStreamStrings = {
   "newtab_page_title": "ახალი ჩანართი",
   "default_label_loading": "იტვირთება…",
   "header_top_sites": "რჩეული საიტები",
   "header_stories": "რჩეული სტატიები",
   "header_highlights": "მნიშვნელოვანი საიტები",
   "header_visit_again": "ხელახლა ნახვა",
   "header_bookmarks": "ბოლოს ჩანიშნულები",
   "header_recommended_by": "რეკომენდებულია {provider}-ის მიერ",
-  "header_bookmarks_placeholder": "სანიშნეები ჯერ არაა დამატებული.",
+  "header_bookmarks_placeholder": "სანიშნები ჯერ არაა დამატებული.",
   "header_stories_from": "-იდან",
   "type_label_visited": "მონახულებული",
   "type_label_bookmarked": "ჩანიშნული",
   "type_label_synced": "სხვა მოწყობილობიდან დასინქრონებული",
   "type_label_recommended": "პოპულარული",
   "type_label_open": "გახსნა",
   "type_label_topic": "თემა",
   "type_label_now": "ახლა",
   "menu_action_bookmark": "ჩანიშვნა",
-  "menu_action_remove_bookmark": "სანიშნეებიდან ამოღება",
+  "menu_action_remove_bookmark": "სანიშნებიდან ამოღება",
   "menu_action_copy_address": "მისამართის დაკოპირება",
   "menu_action_email_link": "ბმულის გაგზავნა…",
   "menu_action_open_new_window": "ახალ ფანჯარაში გახსნა",
   "menu_action_open_private_window": "ახალ პირად ფანჯარაში გახსნა",
-  "menu_action_dismiss": "დახურვა",
+  "menu_action_dismiss": "დამალვა",
   "menu_action_delete": "ისტორიიდან ამოშლა",
   "menu_action_pin": "მიმაგრება",
   "menu_action_unpin": "მოხსნა",
   "confirm_history_delete_p1": "ნამდვილად გსურთ, ამ გვერდის ყველა ჩანაწერის ისტორიიდან ამოშლა?",
   "confirm_history_delete_notice_p2": "ეს ქმედება შეუქცევადია.",
   "menu_action_save_to_pocket": "Pocket-ში შენახვა",
   "search_for_something_with": "{search_term} -ის ძიება:",
   "search_button": "ძიება",
@@ -37,37 +37,37 @@ window.gActivityStreamStrings = {
   "search_settings": "ძიების პარამეტრების შეცვლა",
   "section_info_option": "ინფორმაცია",
   "section_info_send_feedback": "უკუკავშირი",
   "section_info_privacy_notice": "პირადი მონაცემების დაცვა",
   "section_disclaimer_topstories": "საუკეთესო და საინტერესო სიახლეები ინტერნეტიდან, შერჩეული თქვენ მიერ მონახულებული გვერდების საფუძველზე. Pocket-იდან, რომელიც უკვე Mozilla-ს ნაწილია.",
   "section_disclaimer_topstories_linktext": "ნახეთ, როგორ მუშაობს.",
   "section_disclaimer_topstories_buttontext": "კარგი, გასაგებია",
   "welcome_title": "მოგესალმებით ახალ ჩანართზე",
-  "welcome_body": "Firefox ამ სივრცეს გამოიყენებს თქვენთვის ყველაზე საჭირო სანიშნეების, სტატიების, ვიდეოებისა და ბოლოს მონახულებული გვერდებისთვის, რომ ადვილად შეძლოთ მათზე დაბრუნება.",
+  "welcome_body": "Firefox ამ სივრცეს გამოიყენებს თქვენთვის ყველაზე საჭირო სანიშნების, სტატიების, ვიდეოებისა და ბოლოს მონახულებული გვერდებისთვის, რომ ადვილად შეძლოთ მათზე დაბრუნება.",
   "welcome_label": "მნიშვნელოვანი საიტების დადგენა",
   "time_label_less_than_minute": "<1წთ",
   "time_label_minute": "{number}წთ",
   "time_label_hour": "{number}სთ",
   "time_label_day": "{number}დღე",
   "settings_pane_button_label": "მოირგეთ ახალი ჩანართის გვერდი",
   "settings_pane_header": "ახალი ჩანართის პარამეტრები",
   "settings_pane_body2": "მიუთითეთ, რისი ხილვა გსურთ ამ გვერდზე.",
   "settings_pane_search_header": "ძიება",
   "settings_pane_search_body": "ძიება ინტერნეტში ახალი ჩანართიდან.",
   "settings_pane_topsites_header": "რჩეული საიტები",
   "settings_pane_topsites_body": "წვდომა ხშირად მონახულებულ საიტებთან.",
   "settings_pane_topsites_options_showmore": "ორ რიგად ჩვენება",
   "settings_pane_bookmarks_header": "ბოლოს ჩანიშნულები",
-  "settings_pane_bookmarks_body": "ახლად შექმნილი სანიშნეები, ერთი ხელის გაწვდენაზე.",
+  "settings_pane_bookmarks_body": "ახლად შექმნილი სანიშნები, ერთი ხელის გაწვდენაზე.",
   "settings_pane_visit_again_header": "ხელახლა ნახვა",
   "settings_pane_visit_again_body": "Firefox გაჩვენებთ მონახულებული გვერდების ისტორიიდან იმას, რისი გახსენებაც ან რაზე დაბრუნებაც გენდომებათ.",
   "settings_pane_highlights_header": "მნიშვნელოვანი საიტები",
   "settings_pane_highlights_body2": "მარტივად დაუბრუნდით ბოლოს მონახულებულ, ან ჩანიშნულ გვერდებს.",
-  "settings_pane_highlights_options_bookmarks": "სანიშნეები",
+  "settings_pane_highlights_options_bookmarks": "სანიშნები",
   "settings_pane_highlights_options_visited": "მონახულებული საიტები",
   "settings_pane_snippets_header": "ცნობები",
   "settings_pane_snippets_body": "გაეცანით მოკლე, საინტერესო სიახლეებს Mozilla-სგან, Firefox-ის, ინტერნეტ სამყაროს მიღწევებისა და სხვა დასამახსოვრებელი ფაქტების შესახებ.",
   "settings_pane_done_button": "მზადაა",
   "settings_pane_topstories_options_sponsored": "დარეკლამებული სტატიების ჩვენება",
   "edit_topsites_button_text": "ჩასწორება",
   "edit_topsites_button_label": "მოირგეთ რჩეული საიტების განყოფილება",
   "edit_topsites_showmore_button": "მეტის გამოჩენა",
@@ -87,12 +87,12 @@ window.gActivityStreamStrings = {
   "topsites_form_cancel_button": "გაუქმება",
   "topsites_form_url_validation": "საჭიროა მართებული URL",
   "pocket_read_more": "პოპულარული თემები:",
   "pocket_read_even_more": "მეტი სიახლის ნახვა",
   "pocket_feedback_header": "საუკეთესოები ინტერნეტიდან, 25 მილიონზე მეტი ადამიანის მიერ არჩეული.",
   "pocket_description": "გაეცანით ინტერნეტში არსებულ მაღალი ხარისხის მასალას Pocket-ის საშუალებით, რომელიც ახლა უკვე Mozilla-ს ნაწილს წარმოადგენს.",
   "highlights_empty_state": "დაიწყეთ გვერდების დათვალიერება და აქ გამოჩნდება თქვენი რჩეული სტატიები, ვიდეოები და ბოლოს მონახულებული, ან ჩანიშნული საიტები.",
   "topstories_empty_state": "უკვე ყველაფერი წაკითხული გაქვთ. {provider}-იდან ახალი რჩეული სტატიების მისაღებად, მოგვიანებით შემოიარეთ. თუ ვერ ითმენთ, აირჩიეთ რომელიმე მოთხოვნადი თემა, ახალი საინტერესო სტატიების მოსაძიებლად.",
-  "manual_migration_explanation2": "გადმოიტანეთ სხვა ბრაუზერებიდან თქვენი სანიშნეები, ისტორია და პაროლები Firefox-ში.",
+  "manual_migration_explanation2": "გადმოიტანეთ სხვა ბრაუზერებიდან თქვენი სანიშნები, ისტორია და პაროლები Firefox-ში.",
   "manual_migration_cancel_button": "არა, გმადლობთ",
   "manual_migration_import_button": "ახლავე გადმოტანა"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-prerendered.html
+++ b/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-prerendered.html
@@ -3,17 +3,17 @@
   <head>
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy-Report-Only" content="script-src 'unsafe-inline'; img-src http: https: data: blob:; style-src 'unsafe-inline'; child-src 'none'; object-src 'none'; report-uri https://tiles.services.mozilla.com/v4/links/activity-stream/csp">
     <link rel="icon" type="image/png" id="favicon" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="-592150916"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">ស្វែងរក​បណ្ដាញ</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="ស្វែងរក​បណ្ដាញ" title="ស្វែងរក​បណ្ដាញ" data-reactid="7"/><button id="searchSubmit" class="search-button" title="Search" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">Search</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">វិបសាយ​លើ​គេ</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="Info" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">Top Sites</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">Access the websites you visit most.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">New Tab Preferences</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="Customize your Top Sites section" data-reactid="69"><span data-reactid="70">Edit</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">Recommended by Pocket</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">Popular Topics:</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">ការ​រំលេច</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
+    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="-2120605812"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">ស្វែងរក​បណ្ដាញ</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="ស្វែងរក​បណ្ដាញ" title="ស្វែងរក​បណ្ដាញ" data-reactid="7"/><button id="searchSubmit" class="search-button" title="ស្វែងរក" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">ស្វែងរក</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">វិបសាយ​លើ​គេ</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="ព័ត៌មាន" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">សាយកំពូល</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">ចូលវេបសាយដែលអ្នកទស្សនាច្រើនបំផុត។</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">ចំណង់ចំណូលចិត្ត ផ្ទាំងថ្មី</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="Customize your Top Sites section" data-reactid="69"><span data-reactid="70">កែសម្រួល</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">បានណែនាំដោយ Pocket</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">ប្រធានបទកំពុងពេញនិយម៖</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">រឿងសំខាន់ៗ</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
     <div id="snippets-container">
       <div id="snippets"></div>
     </div>
     <script>
 // Don't directly load the following scripts as part of html to let the page
 // finish loading to render the content sooner.
 for (const src of [
   "resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
--- a/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-strings.js
@@ -1,98 +1,98 @@
 // Note - this is a generated file.
 window.gActivityStreamStrings = {
   "newtab_page_title": "ផ្ទាំង​ថ្មី",
   "default_label_loading": "កំពុង​ផ្ទុក...",
   "header_top_sites": "វិបសាយ​លើ​គេ",
-  "header_stories": "Top Stories",
-  "header_highlights": "ការ​រំលេច",
-  "header_visit_again": "Visit Again",
-  "header_bookmarks": "Recent Bookmarks",
-  "header_recommended_by": "Recommended by {provider}",
-  "header_bookmarks_placeholder": "You don’t have any bookmarks yet.",
-  "header_stories_from": "from",
+  "header_stories": "រឿងរ៉ាវកំពូល",
+  "header_highlights": "រឿងសំខាន់ៗ",
+  "header_visit_again": "ទស្សនាម្តងទៀត",
+  "header_bookmarks": "ចំណាំថ្មីៗ",
+  "header_recommended_by": "បានណែនាំដោយ {provider}",
+  "header_bookmarks_placeholder": "អ្នកមិនមានចំណាំណាមួយនៅឡើយទេ ។",
+  "header_stories_from": "មកពី",
   "type_label_visited": "បាន​ចូល​មើល",
   "type_label_bookmarked": "បាន​ចំណាំ",
   "type_label_synced": "បាន​ធ្វើ​សមកាលកម្ម​ពី​ឧបករណ៍​ផ្សេង​ទៀត",
-  "type_label_recommended": "Trending",
+  "type_label_recommended": "និន្នាការ",
   "type_label_open": "បើក",
   "type_label_topic": "ប្រធានបទ",
-  "type_label_now": "Now",
+  "type_label_now": "ឥឡូវនេះ",
   "menu_action_bookmark": "ចំណាំ",
   "menu_action_remove_bookmark": "លុប​ចំណាំ​ចេញ",
   "menu_action_copy_address": "ចម្លង​អាសយដ្ឋាន",
   "menu_action_email_link": "តំណ​អ៊ីមែល...",
   "menu_action_open_new_window": "បើក​នៅ​ក្នុង​បង្អួច​ថ្មី",
   "menu_action_open_private_window": "បើក​នៅ​ក្នុង​បង្អួច​ឯកជន​ថ្មី",
   "menu_action_dismiss": "បោះបង់ចោល",
   "menu_action_delete": "លុប​ពី​ប្រវត្តិ",
-  "menu_action_pin": "Pin",
-  "menu_action_unpin": "Unpin",
-  "confirm_history_delete_p1": "Are you sure you want to delete every instance of this page from your history?",
-  "confirm_history_delete_notice_p2": "This action cannot be undone.",
-  "menu_action_save_to_pocket": "Save to Pocket",
+  "menu_action_pin": "ខ្ទាស់",
+  "menu_action_unpin": "ដកខ្ទាស់",
+  "confirm_history_delete_p1": "តើអ្នកប្រាកដថាអ្នកចង់លុបគ្រប់វត្ថុនៃទំព័រនេះពីប្រវត្តិរបស់អ្នកឬ?",
+  "confirm_history_delete_notice_p2": "សកម្មភាពនេះមិនអាចមិនធ្វើឡើង​វិញបានទេ។",
+  "menu_action_save_to_pocket": "រក្សាទុកទៅ Pocket",
   "search_for_something_with": "ស្វែងរក {search_term} ជាមួយ៖",
-  "search_button": "Search",
+  "search_button": "ស្វែងរក",
   "search_header": "{search_engine_name} ស្វែងរក",
   "search_web_placeholder": "ស្វែងរក​បណ្ដាញ",
   "search_settings": "ផ្លាស់ប្ដូរ​ការ​កំណត់​ស្វែងរក",
-  "section_info_option": "Info",
-  "section_info_send_feedback": "Send Feedback",
-  "section_info_privacy_notice": "Privacy Notice",
+  "section_info_option": "ព័ត៌មាន",
+  "section_info_send_feedback": "ផ្ញើមតិត្រឡប់",
+  "section_info_privacy_notice": "សេចក្តីជូនដំណឹងអំពីភាពឯកជន",
   "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
   "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories_buttontext": "យល់​ហើយ",
   "welcome_title": "ស្វាគមន៍​មក​កាន់​ផ្ទាំង​ថ្មី",
   "welcome_body": "Firefox នឹង​ប្រើប្រាស់​កន្លែង​ទំនេរ​នេះ ដើម្បី​បង្ហាញ​ចំណាំ អត្ថបទ វីដេអូ និង​ទំព័រ​ដែល​ទាក់ទង​អ្នក​បំផុត ដែល​អ្នក​បាន​ចូល​មើល​ថ្មីៗ​នេះ ដូច្នេះ​អ្នក​អាច​ត្រឡប់​ទៅ​​កាន់​​វា​​វិញ​បាន​យ៉ាងងាយស្រួល។",
   "welcome_label": "កំពុង​បញ្ជាក់​ការ​រំលេច​របស់​អ្នក",
   "time_label_less_than_minute": "<1 នាទី",
   "time_label_minute": "{number} នាទី",
   "time_label_hour": "{number} ម៉ោង",
   "time_label_day": "{number} ថ្ងៃ",
   "settings_pane_button_label": "Customize your New Tab page",
-  "settings_pane_header": "New Tab Preferences",
-  "settings_pane_body2": "Choose what you see on this page.",
-  "settings_pane_search_header": "Search",
-  "settings_pane_search_body": "Search the Web from your new tab.",
-  "settings_pane_topsites_header": "Top Sites",
-  "settings_pane_topsites_body": "Access the websites you visit most.",
-  "settings_pane_topsites_options_showmore": "Show two rows",
-  "settings_pane_bookmarks_header": "Recent Bookmarks",
-  "settings_pane_bookmarks_body": "Your newly created bookmarks in one handy location.",
-  "settings_pane_visit_again_header": "Visit Again",
+  "settings_pane_header": "ចំណង់ចំណូលចិត្ត ផ្ទាំងថ្មី",
+  "settings_pane_body2": "ជ្រើសរើសអ្វីដែលអ្នកឃើញនៅលើទំព័រនេះ។",
+  "settings_pane_search_header": "ស្វែងរក",
+  "settings_pane_search_body": "ស្វែងរកបណ្តាញពីផ្ទាំងថ្មីរបស់អ្នក។",
+  "settings_pane_topsites_header": "សាយកំពូល",
+  "settings_pane_topsites_body": "ចូលវេបសាយដែលអ្នកទស្សនាច្រើនបំផុត។",
+  "settings_pane_topsites_options_showmore": "បង្ហាញជួរដេកពីរ",
+  "settings_pane_bookmarks_header": "ចំណាំថ្មីៗ",
+  "settings_pane_bookmarks_body": "ចំណាំថ្មីៗ ដែលបានបង្កើតរបស់អ្នកនៅក្នុងទីតាំងដែលងាយស្រួល។",
+  "settings_pane_visit_again_header": "ទស្សនាម្ដងទៀត",
   "settings_pane_visit_again_body": "Firefox will show you parts of your browsing history that you might want to remember or get back to.",
-  "settings_pane_highlights_header": "Highlights",
+  "settings_pane_highlights_header": "រឿងសំខាន់ៗ",
   "settings_pane_highlights_body2": "Find your way back to interesting things you’ve recently visited or bookmarked.",
-  "settings_pane_highlights_options_bookmarks": "Bookmarks",
-  "settings_pane_highlights_options_visited": "Visited Sites",
-  "settings_pane_snippets_header": "Snippets",
+  "settings_pane_highlights_options_bookmarks": "ចំណាំ",
+  "settings_pane_highlights_options_visited": "សាយដែលបានទស្សនា",
+  "settings_pane_snippets_header": "អត្ថបទសង្ខេប",
   "settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
-  "settings_pane_done_button": "Done",
+  "settings_pane_done_button": "ធ្វើរួច",
   "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
-  "edit_topsites_button_text": "Edit",
+  "edit_topsites_button_text": "កែសម្រួល",
   "edit_topsites_button_label": "Customize your Top Sites section",
-  "edit_topsites_showmore_button": "Show More",
-  "edit_topsites_showless_button": "Show Fewer",
-  "edit_topsites_done_button": "Done",
-  "edit_topsites_pin_button": "Pin this site",
-  "edit_topsites_unpin_button": "Unpin this site",
-  "edit_topsites_edit_button": "Edit this site",
-  "edit_topsites_dismiss_button": "Dismiss this site",
-  "edit_topsites_add_button": "Add",
-  "topsites_form_add_header": "New Top Site",
-  "topsites_form_edit_header": "Edit Top Site",
-  "topsites_form_title_placeholder": "Enter a title",
-  "topsites_form_url_placeholder": "Type or paste a URL",
-  "topsites_form_add_button": "Add",
-  "topsites_form_save_button": "Save",
-  "topsites_form_cancel_button": "Cancel",
-  "topsites_form_url_validation": "Valid URL required",
-  "pocket_read_more": "Popular Topics:",
-  "pocket_read_even_more": "View More Stories",
-  "pocket_feedback_header": "The best of the web, curated by over 25 million people.",
+  "edit_topsites_showmore_button": "បង្ហាញច្រើនទៀត",
+  "edit_topsites_showless_button": "បង្ហាញតិចជាង​នេះ",
+  "edit_topsites_done_button": "ធ្វើរួច",
+  "edit_topsites_pin_button": "ខ្ទាស់សាយនេះ",
+  "edit_topsites_unpin_button": "ដកខ្ទាស់សាយនេះ",
+  "edit_topsites_edit_button": "កែសម្រួលសាយនេះ",
+  "edit_topsites_dismiss_button": "ច្រានចោលសាយនេះ",
+  "edit_topsites_add_button": "បន្ថែម",
+  "topsites_form_add_header": "សាយកំពូលថ្មី",
+  "topsites_form_edit_header": "កែសម្រួលសាយកំពូល",
+  "topsites_form_title_placeholder": "បញ្ចូលចំណងជើង",
+  "topsites_form_url_placeholder": "វាយបញ្ចូល ឬបិទភ្ជាប់ URL",
+  "topsites_form_add_button": "បន្ថែម",
+  "topsites_form_save_button": "រក្សាទុក",
+  "topsites_form_cancel_button": "បោះបង់",
+  "topsites_form_url_validation": "ត្រូវការ URL ដែលត្រឹមត្រូវ",
+  "pocket_read_more": "ប្រធានបទកំពុងពេញនិយម៖",
+  "pocket_read_even_more": "មើលរឿងរ៉ាវច្រើនទៀត",
+  "pocket_feedback_header": "បណ្តាញល្អបំផុត ដែលបានវាយតម្លៃដោយមនុស្សជាង 25 លាននាក់។",
   "pocket_description": "Discover high-quality content you might otherwise miss, with help from Pocket, now part of Mozilla.",
   "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
   "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
-  "manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
-  "manual_migration_cancel_button": "No Thanks",
-  "manual_migration_import_button": "Import Now"
+  "manual_migration_explanation2": "សាកល្បងប្រើ Firefox ជាមួយចំណាំ ប្រវត្តិ និងពាក្យសម្ងាត់ពីកម្មវិធីរុករកផ្សេងទៀត។",
+  "manual_migration_cancel_button": "ទេ អរគុណ",
+  "manual_migration_import_button": "នាំចូលឥឡូវនេះ"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/ko/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ko/activity-stream-strings.js
@@ -34,18 +34,18 @@ window.gActivityStreamStrings = {
   "search_button": "검색",
   "search_header": "{search_engine_name} 검색",
   "search_web_placeholder": "웹 검색",
   "search_settings": "검색 설정 바꾸기",
   "section_info_option": "정보",
   "section_info_send_feedback": "의견 보내기",
   "section_info_privacy_notice": "개인 정보 보호 정책",
   "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories_linktext": "어떻게 작동 하는지 알아봅시다.",
+  "section_disclaimer_topstories_buttontext": "알겠습니다.",
   "welcome_title": "새 탭을 소개합니다",
   "welcome_body": "최근에 방문한 관련있는 즐겨찾기나 글, 동영상, 페이지를 Firefox가 여기에 표시해서 쉽게 다시 찾아볼 수 있게 할 것입니다.",
   "welcome_label": "하이라이트 확인",
   "time_label_less_than_minute": "<1분",
   "time_label_minute": "{number}분",
   "time_label_hour": "{number}시",
   "time_label_day": "{number}일",
   "settings_pane_button_label": "새 탭 페이지 꾸미기",
@@ -57,22 +57,22 @@ window.gActivityStreamStrings = {
   "settings_pane_topsites_body": "가장 많이 방문한 웹 사이트에 접근하세요.",
   "settings_pane_topsites_options_showmore": "두 줄로 보기",
   "settings_pane_bookmarks_header": "최근 북마크",
   "settings_pane_bookmarks_body": "최근 북마크가 편리하게 한 곳에 나타납니다.",
   "settings_pane_visit_again_header": "다시 방문",
   "settings_pane_visit_again_body": "Firefox will show you parts of your browsing history that you might want to remember or get back to.",
   "settings_pane_highlights_header": "하이라이트",
   "settings_pane_highlights_body2": "Find your way back to interesting things you’ve recently visited or bookmarked.",
-  "settings_pane_highlights_options_bookmarks": "Bookmarks",
-  "settings_pane_highlights_options_visited": "Visited Sites",
+  "settings_pane_highlights_options_bookmarks": "즐겨찾기",
+  "settings_pane_highlights_options_visited": "방문한 사이트",
   "settings_pane_snippets_header": "Snippets",
   "settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
   "settings_pane_done_button": "완료",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "후원된 스토리",
   "edit_topsites_button_text": "수정",
   "edit_topsites_button_label": "상위 사이트 영역 꾸미기",
   "edit_topsites_showmore_button": "더보기",
   "edit_topsites_showless_button": "줄이기",
   "edit_topsites_done_button": "완료",
   "edit_topsites_pin_button": "이 사이트 고정",
   "edit_topsites_unpin_button": "이 사이트 고정 취소",
   "edit_topsites_edit_button": "이 사이트 수정",
@@ -85,14 +85,14 @@ window.gActivityStreamStrings = {
   "topsites_form_add_button": "추가",
   "topsites_form_save_button": "저장",
   "topsites_form_cancel_button": "취소",
   "topsites_form_url_validation": "유효한 URL이 필요합니다",
   "pocket_read_more": "인기 주제:",
   "pocket_read_even_more": "더 많은 이야기 보기",
   "pocket_feedback_header": "2천 5백만 명에 의해 추천되는 최고의 웹입니다.",
   "pocket_description": "Mozilla와 하나가 된 Pocket의 도움으로 놓칠지도 모르는 고품질의 컨텐츠를 접해보세요.",
-  "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
+  "highlights_empty_state": "브라우징을 시작하면 최근 방문하거나 북마크한 좋은 글이나 영상, 페이지를 여기에 보여줍니다.",
   "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
   "manual_migration_explanation2": "다른 브라우저에 있는 북마크, 기록, 비밀번호를 사용해 Firefox를 이용해 보세요.",
   "manual_migration_cancel_button": "괜찮습니다",
   "manual_migration_import_button": "지금 가져오기"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-prerendered.html
+++ b/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-prerendered.html
@@ -3,17 +3,17 @@
   <head>
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy-Report-Only" content="script-src 'unsafe-inline'; img-src http: https: data: blob:; style-src 'unsafe-inline'; child-src 'none'; object-src 'none'; report-uri https://tiles.services.mozilla.com/v4/links/activity-stream/csp">
     <link rel="icon" type="image/png" id="favicon" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="-1353654196"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">ຄົ້ນຫາເວັບ</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="ຄົ້ນຫາເວັບ" title="ຄົ້ນຫາເວັບ" data-reactid="7"/><button id="searchSubmit" class="search-button" title="ຊອກ​ຫາ" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">ຊອກ​ຫາ</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">ເວັບໄຊຕ໌ຍອດນິຍົມ</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="Info" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">ເວັບໄຊທ໌ຍອດນິຍົມ</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">ເຂົ້າເວັບໄຊທ໌ທີ່ທ່ານໄດ້ເຂົ້າໄປຫລາຍທີ່ສຸດ.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">ການຕັ້ງຄ່າແທັບໃຫມ່</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="ປັບແຕ່ງພາກສ່ວນເວັບໄຊທ໌ຍອດນິຍົມຂອງທ່ານ" data-reactid="69"><span data-reactid="70">ແກ້ໄຂ</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">Recommended by Pocket</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">Popular Topics:</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">ຈຸດເດັ່ນ</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
+    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="29217771"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">ຄົ້ນຫາເວັບ</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="ຄົ້ນຫາເວັບ" title="ຄົ້ນຫາເວັບ" data-reactid="7"/><button id="searchSubmit" class="search-button" title="ຊອກ​ຫາ" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">ຊອກ​ຫາ</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">ເວັບໄຊຕ໌ຍອດນິຍົມ</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="Info" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">ເວັບໄຊທ໌ຍອດນິຍົມ</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">ເຂົ້າເວັບໄຊທ໌ທີ່ທ່ານໄດ້ເຂົ້າໄປຫລາຍທີ່ສຸດ.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">ການຕັ້ງຄ່າແທັບໃຫມ່</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="ປັບແຕ່ງພາກສ່ວນເວັບໄຊທ໌ຍອດນິຍົມຂອງທ່ານ" data-reactid="69"><span data-reactid="70">ແກ້ໄຂ</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">Recommended by Pocket</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">ຫົວຂໍ້ຍອດນິຍົມ:</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">ລາຍການເດັ່ນ</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
     <div id="snippets-container">
       <div id="snippets"></div>
     </div>
     <script>
 // Don't directly load the following scripts as part of html to let the page
 // finish loading to render the content sooner.
 for (const src of [
   "resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
--- a/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-strings.js
@@ -1,15 +1,15 @@
 // Note - this is a generated file.
 window.gActivityStreamStrings = {
   "newtab_page_title": "ແທັບໃຫມ່",
   "default_label_loading": "ກຳລັງໂຫລດ…",
   "header_top_sites": "ເວັບໄຊຕ໌ຍອດນິຍົມ",
   "header_stories": "Top Stories",
-  "header_highlights": "ຈຸດເດັ່ນ",
+  "header_highlights": "ລາຍການເດັ່ນ",
   "header_visit_again": "Visit Again",
   "header_bookmarks": "Recent Bookmarks",
   "header_recommended_by": "Recommended by {provider}",
   "header_bookmarks_placeholder": "You don’t have any bookmarks yet.",
   "header_stories_from": "from",
   "type_label_visited": "ເຂົ້າໄປເບິງມາແລ້ວ",
   "type_label_bookmarked": "ບຸກມາກໄວ້ແລ້ວ",
   "type_label_synced": "ໄດ້ Sync ມາຈາກອຸປະກອນອື່ນ",
@@ -24,17 +24,17 @@ window.gActivityStreamStrings = {
   "menu_action_open_new_window": "ເປີດລີ້ງໃນຫນ້າຕ່າງໃຫມ່",
   "menu_action_open_private_window": "ເປີດໃນຫນ້າຕ່າງສ່ວນຕົວໃຫມ່",
   "menu_action_dismiss": "ຍົກເລີກ",
   "menu_action_delete": "ລຶບອອກຈາກປະຫວັດການນຳໃຊ້",
   "menu_action_pin": "Pin",
   "menu_action_unpin": "Unpin",
   "confirm_history_delete_p1": "Are you sure you want to delete every instance of this page from your history?",
   "confirm_history_delete_notice_p2": "This action cannot be undone.",
-  "menu_action_save_to_pocket": "Save to Pocket",
+  "menu_action_save_to_pocket": "ບັນທືກໄປທີ່ Pocket",
   "search_for_something_with": "ຄົ້ນຫາສໍາລັບ {search_term} ດ້ວຍ:",
   "search_button": "ຊອກ​ຫາ",
   "search_header": "ຄົ້ນຫາ {search_engine_name}",
   "search_web_placeholder": "ຄົ້ນຫາເວັບ",
   "search_settings": "ປ່ຽນການຕັ້ງຄ່າການຄົ້ນຫາ",
   "section_info_option": "Info",
   "section_info_send_feedback": "Send Feedback",
   "section_info_privacy_notice": "Privacy Notice",
@@ -59,42 +59,40 @@ window.gActivityStreamStrings = {
   "settings_pane_bookmarks_header": "Recent Bookmarks",
   "settings_pane_bookmarks_body": "Your newly created bookmarks in one handy location.",
   "settings_pane_visit_again_header": "Visit Again",
   "settings_pane_visit_again_body": "Firefox will show you parts of your browsing history that you might want to remember or get back to.",
   "settings_pane_highlights_header": "ຈຸດເດັ່ນ",
   "settings_pane_highlights_body2": "Find your way back to interesting things you’ve recently visited or bookmarked.",
   "settings_pane_highlights_options_bookmarks": "Bookmarks",
   "settings_pane_highlights_options_visited": "Visited Sites",
-  "settings_pane_snippets_header": "Snippets",
+  "settings_pane_snippets_header": "ສ່ວນຍ່ອຍ",
   "settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
   "settings_pane_done_button": "ສຳເລັດ",
   "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
   "edit_topsites_button_text": "ແກ້ໄຂ",
   "edit_topsites_button_label": "ປັບແຕ່ງພາກສ່ວນເວັບໄຊທ໌ຍອດນິຍົມຂອງທ່ານ",
   "edit_topsites_showmore_button": "ສະແດງເພີ່ມເຕີມ",
   "edit_topsites_showless_button": "ສະແດງນ້ອຍລົງ",
   "edit_topsites_done_button": "ສຳເລັດ",
   "edit_topsites_pin_button": "Pin ເວັບໄຊທ໌ນີ້",
   "edit_topsites_unpin_button": "Unpin this site",
   "edit_topsites_edit_button": "ແກ້ໄຂເວັບໄຊທ໌ນີ້",
   "edit_topsites_dismiss_button": "ຍົກເລີກເວັບໄຊທ໌ນີ້",
   "edit_topsites_add_button": "Add",
   "topsites_form_add_header": "New Top Site",
   "topsites_form_edit_header": "Edit Top Site",
-  "topsites_form_title_placeholder": "Enter a title",
+  "topsites_form_title_placeholder": "ປ້ອນຊື່ເລື່ອງ",
   "topsites_form_url_placeholder": "Type or paste a URL",
   "topsites_form_add_button": "Add",
   "topsites_form_save_button": "Save",
   "topsites_form_cancel_button": "Cancel",
   "topsites_form_url_validation": "Valid URL required",
-  "pocket_read_more": "Popular Topics:",
+  "pocket_read_more": "ຫົວຂໍ້ຍອດນິຍົມ:",
   "pocket_read_even_more": "View More Stories",
   "pocket_feedback_header": "The best of the web, curated by over 25 million people.",
   "pocket_description": "Discover high-quality content you might otherwise miss, with help from Pocket, now part of Mozilla.",
   "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
   "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
   "manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
   "manual_migration_cancel_button": "No Thanks",
-  "manual_migration_import_button": "Import Now",
-  "settings_pane_body": "ເລືອກສິ່ງທີ່ທ່ານເຫັນເມື່ອທ່ານເປີດແທັບໃຫມ່.",
-  "settings_pane_highlights_body": "ຍ້ອນຄືນກັບໄປເບິງປະຫວັດການທ່ອງເວັບທີ່ຫາກາເຂົ້າໄປ ແລະ ບຸກມາກທີ່ໄດ້ຮັບການສ້າງຂື້ນມາໃຫມ່ຂອງທ່ານ."
+  "manual_migration_import_button": "ນຳເຂົ້າຕອນນີ້"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/lt/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/lt/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "Ieškoti „{search_term}“ per:",
   "search_button": "Ieškoti",
   "search_header": "{search_engine_name} paieška",
   "search_web_placeholder": "Ieškokite saityne",
   "search_settings": "Keisti paieškos nuostatas",
   "section_info_option": "Informacija",
   "section_info_send_feedback": "Siųsti atsiliepimą",
   "section_info_privacy_notice": "Privatumo nuostatai",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "Įdomiausi saityno straipsniai, parinkti pagal jūsų skaitymo įpročius. Iš „Pocket“, kuri dabar priklauso „Mozillai“.",
+  "section_disclaimer_topstories_linktext": "Sužinokite, kaip tai veikia.",
+  "section_disclaimer_topstories_buttontext": "Gerai, supratau",
   "welcome_title": "Sveiki, čia nauja kortelė",
   "welcome_body": "„Firefox“ naudos šią vietą jums aktualiausių adresyno įrašų, straipsnių, vaizdo įrašų bei neseniai lankytų tinklalapių rodymui, kad galėtumėte lengvai į juos sugrįžti.",
   "welcome_label": "Nustatomi jūsų akcentai",
   "time_label_less_than_minute": "<1 min.",
   "time_label_minute": "{number} min.",
   "time_label_hour": "{number} val.",
   "time_label_day": "{number} d.",
   "settings_pane_button_label": "Tinkinkite savo naujos kortelės puslapį",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "„Firefox“ pateiks ištraukas iš jūsų naršymo žurnalo, kurias galbūt norėtumėte prisiminti.",
   "settings_pane_highlights_header": "Akcentai",
   "settings_pane_highlights_body2": "Sugrįžkite prie įdomių dalykų, kuriuose neseniai lankėtės ar įtraukėte į adresyną.",
   "settings_pane_highlights_options_bookmarks": "Adresynas",
   "settings_pane_highlights_options_visited": "Aplankytos svetainės",
   "settings_pane_snippets_header": "Iškarpos",
   "settings_pane_snippets_body": "Skaitykite trumpas ir mielas naujienas iš „Mozillos“ apie „Firefox“, interneto kultūrą bei atsitiktinį memą.",
   "settings_pane_done_button": "Atlikta",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "Rodyti rėmėjų straipsnius",
   "edit_topsites_button_text": "Keisti",
   "edit_topsites_button_label": "Tinkinkite savo lankomiausių svetainių skiltį",
   "edit_topsites_showmore_button": "Rodyti daugiau",
   "edit_topsites_showless_button": "Rodyti mažiau",
   "edit_topsites_done_button": "Atlikta",
   "edit_topsites_pin_button": "Įsegti šią svetainę",
   "edit_topsites_unpin_button": "Išsegti šią svetainę",
   "edit_topsites_edit_button": "Redaguoti šią svetainę",
--- a/browser/extensions/activity-stream/prerendered/locales/ml/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ml/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "തിരയാൻ {search_term} : എന്നത് ഉപയോഗിയ്ക്കുക",
   "search_button": "തിരയുക",
   "search_header": "{search_engine_name} തിരയുക",
   "search_web_placeholder": "ഇൻറർനെറ്റിൽ തിരയുക",
   "search_settings": "തിരയാനുള്ള രീതികൾ മാറ്റുക",
   "section_info_option": "വിവരം",
   "section_info_send_feedback": "ഫീഡ്ബാക്ക് അയയ്ക്കുക",
   "section_info_privacy_notice": "സ്വകാര്യതാ അറിയിപ്പ്",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "വെബിലെ ഏറ്റവും രസകരമായ അറിവുകൾ, നിങ്ങൾ വായിച്ചവ അടിസ്ഥാനമാക്കി തിരഞ്ഞെടുത്തത്. ഇപ്പോൾ മോസില്ലയുടെ ഭാഗമായ പോക്കറ്റിൽ നിന്നും.",
+  "section_disclaimer_topstories_linktext": "എങ്ങനെ പ്രവര്‍ത്തിക്കുന്നു എന്ന് കാണുക.",
+  "section_disclaimer_topstories_buttontext": "ശരി, മനസ്സിലായി",
   "welcome_title": "പുതിയ ജാലകത്തിലേക്കു സ്വാഗതം",
   "welcome_body": "നിങ്ങളുടെ ഏറ്റവും ശ്രദ്ധേയമായ അടയാളങ്ങൾ, ലേഖനങ്ങൾ, വീഡിയോകൾ, കൂടാതെ നിങ്ങൾ സമീപകാലത്ത് സന്ദർശിച്ച താളുകൾ എന്നിവ കാണിക്കുന്നതിനായി ഫയർഫോക്സ് ഈ ഇടം ഉപയോഗിക്കും, അതിനാൽ നിങ്ങൾക്ക് എളുപ്പത്തിൽ അവയിലേക്ക് തിരിച്ചു പോകാം.",
   "welcome_label": "താങ്കളുടെ ഹൈലൈറ്റ്സ് തിരിച്ചറിയുന്നു",
   "time_label_less_than_minute": "<1 മിനിറ്റ്",
   "time_label_minute": "{number} മിനിറ്റ്",
   "time_label_hour": "{number} മിനിറ്റ്",
   "time_label_day": "{number} മിനിറ്റ്",
   "settings_pane_button_label": "നിങ്ങളുടെ പുതിയ ടാബ് താള് ഇഷ്ടാനുസൃതമാക്കുക",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "നിങ്ങൾ ഓർത്തുവയ്ക്കാനോ അല്ലെങ്കിൽ തിരികെ ചെല്ലാനോ ആഗ്രഹിക്കുന്ന ബ്രൌസിംഗ് ചരിത്രത്തിന്റെ ഭാഗങ്ങൾ നിങ്ങൾക്ക് ഫയർഫോക്സ് കാണിച്ച് തരും.",
   "settings_pane_highlights_header": "ഹൈലൈറ്റുകൾ",
   "settings_pane_highlights_body2": "നിങ്ങൾ സമീപകാലത്ത് സന്ദർശിച്ചതോ അല്ലെങ്കിൽ ബുക്ക്മാർക്ക് ചെയ്തതോ ആയ രസകരമായ കാര്യങ്ങളിലേക്ക് വഴി കണ്ടെത്തുക.",
   "settings_pane_highlights_options_bookmarks": "ബുക്ക്മാർക്കുകൾ",
   "settings_pane_highlights_options_visited": "സന്ദർശിച്ച സൈറ്റുകൾ",
   "settings_pane_snippets_header": "ലഘു കുറിപ്പുകൾ",
   "settings_pane_snippets_body": "മോസില്ലയിൽ നിന്നും ഫയർഫോക്സ്, ഇന്റർനെറ്റ് സംസ്കാരം, വല്ലപ്പോഴുമുള്ള ക്രമമില്ലാത്ത മെമെ, എന്നിവയിൽ ചെറുതും മധുരവുമായ പരിഷ്കരണങ്ങൾ വായിക്കുക.",
   "settings_pane_done_button": "തീർന്നു",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "സ്പോൺസർ ചെയ്തവ കാണിക്കുക",
   "edit_topsites_button_text": "തിരുത്തുക",
   "edit_topsites_button_label": "നിങ്ങളുടെ മുന്നേറിയ സൈറ്റുകളുടെ വിഭാഗം ഇഷ്ടാനുസൃതമാക്കുക",
   "edit_topsites_showmore_button": "കൂടുതൽ കാണിക്കുക",
   "edit_topsites_showless_button": "കുറച്ച് കാണിക്കുക",
   "edit_topsites_done_button": "തീർന്നു",
   "edit_topsites_pin_button": "ഈ സൈറ്റ് പിൻ ചെയ്യുക",
   "edit_topsites_unpin_button": "ഈ സൈറ്റ് അണ്‍പിന്‍ ചെയ്യുക",
   "edit_topsites_edit_button": "ഈ സൈറ്റ് തിരുത്തുക",
--- a/browser/extensions/activity-stream/prerendered/locales/pt-BR/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/pt-BR/activity-stream-strings.js
@@ -22,26 +22,26 @@ window.gActivityStreamStrings = {
   "menu_action_copy_address": "Copiar endereço",
   "menu_action_email_link": "Enviar link por e-mail…",
   "menu_action_open_new_window": "Abrir em uma nova janela",
   "menu_action_open_private_window": "Abrir em uma nova janela privativa",
   "menu_action_dismiss": "Dispensar",
   "menu_action_delete": "Excluir do histórico",
   "menu_action_pin": "Fixar",
   "menu_action_unpin": "Desafixar",
-  "confirm_history_delete_p1": "Você tem certeza que deseja deletar todas as ocorrências dessa página do seu histórico?",
+  "confirm_history_delete_p1": "Você tem certeza que deseja excluir todas as instâncias desta página do seu histórico?",
   "confirm_history_delete_notice_p2": "Essa ação não pode ser desfeita.",
   "menu_action_save_to_pocket": "Salvar no Pocket",
   "search_for_something_with": "Pesquisar por {search_term} com:",
   "search_button": "Pesquisar",
   "search_header": "Pesquisa {search_engine_name}",
   "search_web_placeholder": "Pesquisar na Web",
   "search_settings": "Alterar configurações de pesquisa",
   "section_info_option": "Info",
-  "section_info_send_feedback": "Enviar opinião",
+  "section_info_send_feedback": "Enviar feedback",
   "section_info_privacy_notice": "Política de Privacidade",
   "section_disclaimer_topstories": "As histórias mais interessantes na web, selecionadas baseadas no que você lê. Do Pocket, agora parte da Mozilla.",
   "section_disclaimer_topstories_linktext": "Saiba como funciona.",
   "section_disclaimer_topstories_buttontext": "Ok, entendi",
   "welcome_title": "Bem-vindo a nova aba",
   "welcome_body": "O Firefox usará este espaço para mostrar seus favoritos, artigos, vídeos e páginas mais relevantes visitados recentemente, assim você pode voltar mais facilmente.",
   "welcome_label": "Identificando seus destaques",
   "time_label_less_than_minute": "<1m",
--- a/browser/extensions/activity-stream/prerendered/locales/pt-PT/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/pt-PT/activity-stream-strings.js
@@ -36,28 +36,28 @@ window.gActivityStreamStrings = {
   "search_web_placeholder": "Pesquisar na Web",
   "search_settings": "Alterar definições de pesquisa",
   "section_info_option": "Informação",
   "section_info_send_feedback": "Enviar feedback",
   "section_info_privacy_notice": "Aviso de privacidade",
   "section_disclaimer_topstories": "As histórias mais interessantes na web, selecionadas baseadas no que você lê. Do Pocket, agora parte da Mozilla.",
   "section_disclaimer_topstories_linktext": "Saiba como funciona.",
   "section_disclaimer_topstories_buttontext": "Ok, entendi",
-  "welcome_title": "Bem-vindo ao novo separador",
+  "welcome_title": "Bem-vindo(a) ao novo separador",
   "welcome_body": "O Firefox irá utilizar este espaço para lhe mostrar os seus marcadores, artigos, vídeos, e páginas mais relevantes que visitou recentemente, para que possa regressar a estes mais facilmente.",
   "welcome_label": "A identificar os seus destaques",
   "time_label_less_than_minute": "<1m",
   "time_label_minute": "{number}m",
   "time_label_hour": "{number}h",
   "time_label_day": "{number}d",
   "settings_pane_button_label": "Personalizar a sua página de novo separador",
   "settings_pane_header": "Preferências de novo separador",
   "settings_pane_body2": "Escolha o que vê nesta página.",
   "settings_pane_search_header": "Pesquisa",
-  "settings_pane_search_body": "Pesquise na Web a partir do seu novo separador.",
+  "settings_pane_search_body": "Pesquise na Web a partir do seu 'Novo separador'.",
   "settings_pane_topsites_header": "Sites mais visitados",
   "settings_pane_topsites_body": "Aceda aos websites que mais visita.",
   "settings_pane_topsites_options_showmore": "Mostrar duas linhas",
   "settings_pane_bookmarks_header": "Marcadores recentes",
   "settings_pane_bookmarks_body": "Os seus marcadores recém-criados num único local acessível.",
   "settings_pane_visit_again_header": "Visitar novamente",
   "settings_pane_visit_again_body": "O Firefox irá mostrar-lhe partes do seu histórico de navegação que pode querer relembrar ou voltar a aceder.",
   "settings_pane_highlights_header": "Destaques",
@@ -88,11 +88,11 @@ window.gActivityStreamStrings = {
   "topsites_form_url_validation": "URL válido requerido",
   "pocket_read_more": "Tópicos populares:",
   "pocket_read_even_more": "Ver mais histórias",
   "pocket_feedback_header": "O melhor da web, com curadoria de mais de 25 milhões de pessoas.",
   "pocket_description": "Descubra conteúdo de alta qualidade que podia de outra maneira perder, com a ajuda do Pocket, agora parte da Mozilla.",
   "highlights_empty_state": "Comece a navegar, e iremos mostrar-lhe alguns dos ótimos artigos, vídeos, e outras páginas que visitou recentemente ou adicionou aos marcadores aqui.",
   "topstories_empty_state": "Já apanhou tudo. Verifique mais tarde para mais histórias principais de {provider}. Não pode esperar? Selecione um tópico popular para encontrar mais boas histórias de toda a web.",
   "manual_migration_explanation2": "Experimente o Firefox com marcadores, histórico e palavras-passe de outro navegador.",
-  "manual_migration_cancel_button": "Não obrigado",
+  "manual_migration_cancel_button": "Não, obrigado",
   "manual_migration_import_button": "Importar agora"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/ro/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ro/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "Caută {search_term} cu: ",
   "search_button": "Caută",
   "search_header": "Căutare {search_engine_name}",
   "search_web_placeholder": "Caută pe web",
   "search_settings": "Schimbă setările de căutare",
   "section_info_option": "Informații",
   "section_info_send_feedback": "Trimite feedback",
   "section_info_privacy_notice": "Politica de confidențialitate",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "Cele mai interesante articole de pe web, alese pe baza lucrurilor pe care le citești. De la Pocket, acum parte din Mozilla.",
+  "section_disclaimer_topstories_linktext": "Află cum funcționează.",
+  "section_disclaimer_topstories_buttontext": "Ok, am înțeles",
   "welcome_title": "Bun venit în noua filă",
   "welcome_body": "Firefox va folosi acest spațiu pentru a arăta cele mai relevante semne de carte, articole, videouri și pagini vizitate recent pentru a reveni la acestea ușor.",
   "welcome_label": "Se identifică evidențierile tale",
   "time_label_less_than_minute": "<1m",
   "time_label_minute": "{number}m",
   "time_label_hour": "{number}h",
   "time_label_day": "{number}d",
   "settings_pane_button_label": "Particularizează pagina de filă nouă",
@@ -56,23 +56,23 @@ window.gActivityStreamStrings = {
   "settings_pane_topsites_header": "Site-uri de top",
   "settings_pane_topsites_body": "Accesează site-urile pe care le vizitezi mai des.",
   "settings_pane_topsites_options_showmore": "Arată două rânduri",
   "settings_pane_bookmarks_header": "Marcaje recente",
   "settings_pane_bookmarks_body": "Marcajele memorate recent, organizate și accesibile într-un singur log.",
   "settings_pane_visit_again_header": "Vizitează din nou",
   "settings_pane_visit_again_body": "Firefox îți va arăta părți din istoricul navigării tale la care ai vrea să revii mai târziu.",
   "settings_pane_highlights_header": "Evidențieri",
-  "settings_pane_highlights_body2": "Find your way back to interesting things you’ve recently visited or bookmarked.",
+  "settings_pane_highlights_body2": "Regăsește lucrurile interesante pe care le-ai vizitat sau marcat recent.",
   "settings_pane_highlights_options_bookmarks": "Marcaje",
   "settings_pane_highlights_options_visited": "Site-uri vizitate",
-  "settings_pane_snippets_header": "Snippets",
-  "settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
+  "settings_pane_snippets_header": "Fragmente",
+  "settings_pane_snippets_body": "Citește actualizări scurte de la Mozilla despre Firefox, cultura internetului și meme-ul ocazional.",
   "settings_pane_done_button": "Gata",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "Arată articolele sponsorizate",
   "edit_topsites_button_text": "Editează",
   "edit_topsites_button_label": "Particularizează secțiunea site-urilor de top",
   "edit_topsites_showmore_button": "Arată mai mult",
   "edit_topsites_showless_button": "Arată mai puțin",
   "edit_topsites_done_button": "Gata",
   "edit_topsites_pin_button": "Fixează acest site",
   "edit_topsites_unpin_button": "Anulează fixarea acestui site",
   "edit_topsites_edit_button": "Editează acest site",
@@ -84,15 +84,15 @@ window.gActivityStreamStrings = {
   "topsites_form_url_placeholder": "Tastează sau lipește un URL",
   "topsites_form_add_button": "Adaugă",
   "topsites_form_save_button": "Salvează",
   "topsites_form_cancel_button": "Renunță",
   "topsites_form_url_validation": "URL valid necesar",
   "pocket_read_more": "Subiecte populare:",
   "pocket_read_even_more": "Vezi mai multe articole",
   "pocket_feedback_header": "Cel mai bun de pe web, întreţinut de peste 25 de milioane de oameni.",
-  "pocket_description": "Discover high-quality content you might otherwise miss, with help from Pocket, now part of Mozilla.",
-  "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
-  "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
+  "pocket_description": "Descoperă conținut de calitate pe care l-ai putea rata, cu ajutorul Pocket, acum parte din Mozilla.",
+  "highlights_empty_state": "Începe să navighezi și noi îți vom arăta articole interesante, videouri sau alte pagini pe care le-ai vizitat sau marcat recent.",
+  "topstories_empty_state": "Ai ajuns la capăt. Revino mai târziu pentru alte articole de la {provider}. Nu mai vrei să aștepți? Alege un subiect popular și găsește alte articole interesante de pe web.",
   "manual_migration_explanation2": "Încearcă Firefox cu marcajele, istoricul și parolele din alt navigator.",
   "manual_migration_cancel_button": "Nu, mulțumesc",
   "manual_migration_import_button": "Importă acum"
 };
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/locales/si/activity-stream-prerendered.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="si" dir="ltr">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="Content-Security-Policy-Report-Only" content="script-src 'unsafe-inline'; img-src http: https: data: blob:; style-src 'unsafe-inline'; child-src 'none'; object-src 'none'; report-uri https://tiles.services.mozilla.com/v4/links/activity-stream/csp">
+    <link rel="icon" type="image/png" id="favicon" href="chrome://branding/content/icon32.png"/>
+    <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
+    <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
+  </head>
+  <body class="activity-stream">
+    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="602757434"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">ජාලය තුළ සොයන්න</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="ජාලය තුළ සොයන්න" title="ජාලය තුළ සොයන්න" data-reactid="7"/><button id="searchSubmit" class="search-button" title="සොයන්න" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">සොයන්න</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">ප්‍රමුඛ අඩවි</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="තොරතුරු" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">ප්‍රමුඛ අඩවි</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">ඔබ නිරතුරුව පිවිසෙන වෙබ් අඩවි වෙත ප්‍රවේශය.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">නව ටැබ අභිප්‍රේත</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="Customize your Top Sites section" data-reactid="69"><span data-reactid="70">සැකසුම්</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">Pocket විසින් නිර්දේශිතයි</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">ජනප්‍රිය මාතෘකා:</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">ඉස්මතු කිරීම්</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
+    <div id="snippets-container">
+      <div id="snippets"></div>
+    </div>
+    <script>
+// Don't directly load the following scripts as part of html to let the page
+// finish loading to render the content sooner.
+for (const src of [
+  "resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
+  "chrome://browser/content/contentSearchUI.js",
+  "resource://activity-stream/vendor/react.js",
+  "resource://activity-stream/vendor/react-dom.js",
+  "resource://activity-stream/vendor/react-intl.js",
+  "resource://activity-stream/vendor/redux.js",
+  "resource://activity-stream/vendor/react-redux.js",
+  "resource://activity-stream/prerendered/si/activity-stream-strings.js",
+  "resource://activity-stream/data/content/activity-stream.bundle.js"
+]) {
+  // These dynamically inserted scripts by default are async, but we need them
+  // to load in the desired order (i.e., bundle last).
+  const script = document.body.appendChild(document.createElement("script"));
+  script.async = false;
+  script.src = src;
+}
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/locales/si/activity-stream-strings.js
@@ -0,0 +1,98 @@
+// Note - this is a generated file.
+window.gActivityStreamStrings = {
+  "newtab_page_title": "නව ටැබය",
+  "default_label_loading": "පූරණය වෙමින්…",
+  "header_top_sites": "ප්‍රමුඛ අඩවි",
+  "header_stories": "ප්‍රමුඛ පුවත්",
+  "header_highlights": "ඉස්මතු කිරීම්",
+  "header_visit_again": "යළි පිවිසෙන්න",
+  "header_bookmarks": "නැවුම් පිටු සලකුණු",
+  "header_recommended_by": "{provider} විසින් නිර්දේශිතයි",
+  "header_bookmarks_placeholder": "ඔබ සතුව තවම පිටුසලකුණු නැත.",
+  "header_stories_from": "සිට​",
+  "type_label_visited": "ප්‍රවේශිත",
+  "type_label_bookmarked": "පිටු සලකුණු තැබූ",
+  "type_label_synced": "වෙනත් උපාංගයක් වෙතින් සමකාලීන​ කර ඇත​",
+  "type_label_recommended": "Trending",
+  "type_label_open": "විවෘත",
+  "type_label_topic": "මාතෘකාව",
+  "type_label_now": "දැන්",
+  "menu_action_bookmark": "පිටු සලකුණ",
+  "menu_action_remove_bookmark": "පිටු සලකුණ ඉවත් කරන්න",
+  "menu_action_copy_address": "ලිපිනය පිටපත් කරන්න",
+  "menu_action_email_link": "විද්‍යුත් තැපැල් සබැඳි…",
+  "menu_action_open_new_window": "නව කවුළුවක විවෘත කරන්න",
+  "menu_action_open_private_window": "නව පුද්ගලික කවුළුවක විවෘත කරන්න",
+  "menu_action_dismiss": "ඉවත් කරන්න",
+  "menu_action_delete": "අතිතයෙන් මකන්න කරන්න",
+  "menu_action_pin": "ඇමිණීම",
+  "menu_action_unpin": "ඇමුණුම ඉවත් කරන්න",
+  "confirm_history_delete_p1": "ඔබට මෙම පිටුවට අදාල සියලුම සිදුවීම් ඔබේ අතීතයන් මැකීමට අවශ්‍ය ද?",
+  "confirm_history_delete_notice_p2": "මෙම ක්‍රියාව අහෝසි කළ නොහැක.",
+  "menu_action_save_to_pocket": "Save to Pocket",
+  "search_for_something_with": "{search_term} සදහා සෙවීමට භාවිත කළ යුත්තේ:",
+  "search_button": "සොයන්න",
+  "search_header": "{search_engine_name} ෙසවුම",
+  "search_web_placeholder": "ජාලය තුළ සොයන්න",
+  "search_settings": "සෙවුම් සැකසුම් වෙනස් කරන්න",
+  "section_info_option": "තොරතුරු",
+  "section_info_send_feedback": "ප්‍රතිචාරය යවන්න",
+  "section_info_privacy_notice": "පෞද්ගලිකත්ව දැනුම්දීම්",
+  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
+  "section_disclaimer_topstories_linktext": "එය ක්‍රියාකරන්නේ කෙසේදැයි අධ්‍යපනය කරන්න.",
+  "section_disclaimer_topstories_buttontext": "හරි, තේරුණා",
+  "welcome_title": "නව ටැබයට සාදරයෙන් පිළිගනිමු",
+  "welcome_body": "ඔබට පහසුවෙන් යළි භාවිතයට පහසු කරවීමට, Firefox මෙම ඉඩ ඔබට වඩාත් අදාල පිටු සළකුණු, ලිපි, විඩියෝ සහ ඔබ මෑතකදී පිවිසි පිටු පෙන්වීම සදහා භාවිත කරයි.",
+  "welcome_label": "ඔබේ ඉස්මතු කිරීම් හදුනාගනිමින්",
+  "time_label_less_than_minute": "<1m",
+  "time_label_minute": "{number} මිනිත්තු",
+  "time_label_hour": "{number}පැය",
+  "time_label_day": "{number}දින",
+  "settings_pane_button_label": "ඔබේ නව ටැබ පිටුව රුචිකරණය කරන්න",
+  "settings_pane_header": "නව ටැබ අභිප්‍රේත",
+  "settings_pane_body2": "මෙම පිටුවේ ඔබ දැකිය යුතු දේ තෝරන්න.",
+  "settings_pane_search_header": "සොයන්න",
+  "settings_pane_search_body": "ඔබේ නව ටැබයෙන් වෙබ් සෙවීම.",
+  "settings_pane_topsites_header": "ප්‍රමුඛ අඩවි",
+  "settings_pane_topsites_body": "ඔබ නිරතුරුව පිවිසෙන වෙබ් අඩවි වෙත ප්‍රවේශය.",
+  "settings_pane_topsites_options_showmore": "පේළි දෙකක් පෙන්වන්න",
+  "settings_pane_bookmarks_header": "නැවුම් පිටු සලකුණු",
+  "settings_pane_bookmarks_body": "ඔබේ නැවුම් පිටු සලකුණු එක් ස්ථානයක.",
+  "settings_pane_visit_again_header": "යළි පිවිසෙන්න",
+  "settings_pane_visit_again_body": "Firefox will show you parts of your browsing history that you might want to remember or get back to.",
+  "settings_pane_highlights_header": "ඉස්මතු කිරීම්",
+  "settings_pane_highlights_body2": "Find your way back to interesting things you’ve recently visited or bookmarked.",
+  "settings_pane_highlights_options_bookmarks": "පිටු සලකුණු",
+  "settings_pane_highlights_options_visited": "පිවිසුණු අඩවි",
+  "settings_pane_snippets_header": "Snippets",
+  "settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
+  "settings_pane_done_button": "",
+  "settings_pane_topstories_options_sponsored": "අනුග්‍රහක පුවත් පෙන්වන්න",
+  "edit_topsites_button_text": "සැකසුම්",
+  "edit_topsites_button_label": "Customize your Top Sites section",
+  "edit_topsites_showmore_button": "තවත් පෙන්වන්න",
+  "edit_topsites_showless_button": "අඩුවෙන් පෙන්වන්න",
+  "edit_topsites_done_button": "කළා",
+  "edit_topsites_pin_button": "Pin this site",
+  "edit_topsites_unpin_button": "Unpin this site",
+  "edit_topsites_edit_button": "මෙම අඩවිය සකසන්න",
+  "edit_topsites_dismiss_button": "මෙම අඩවිය ඉවත ලන්න",
+  "edit_topsites_add_button": "එක් කරන්න",
+  "topsites_form_add_header": "නව ප්‍රමුඛ අඩවියක්",
+  "topsites_form_edit_header": "ප්‍රමුඛ අඩවිය සකසන්න",
+  "topsites_form_title_placeholder": "සිරස්තල එක් කරන්න",
+  "topsites_form_url_placeholder": "URL එකක් ඇතුළත් කරන්න",
+  "topsites_form_add_button": "එක් කරන්න",
+  "topsites_form_save_button": "සුරකින්න",
+  "topsites_form_cancel_button": "අවලංගු කරන්න",
+  "topsites_form_url_validation": "වලංගු URL එකක් අවශ්‍ය වේ",
+  "pocket_read_more": "ජනප්‍රිය මාතෘකා:",
+  "pocket_read_even_more": "තවත් බොහෝ දැ",
+  "pocket_feedback_header": "The best of the web, curated by over 25 million people.",
+  "pocket_description": "Discover high-quality content you might otherwise miss, with help from Pocket, now part of Mozilla.",
+  "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
+  "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
+  "manual_migration_explanation2": "Firefox වෙනත් ගවේශයකය පිටය සලකුණු, අතීතය සහ මුරපද සමග උත්සාහ කර බලන්න.",
+  "manual_migration_cancel_button": "එපා, ස්තුතියි",
+  "manual_migration_import_button": "දැන් ආයාත කරන්න"
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/locales/si/activity-stream.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="si" dir="ltr">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="Content-Security-Policy-Report-Only" content="script-src 'unsafe-inline'; img-src http: https: data: blob:; style-src 'unsafe-inline'; child-src 'none'; object-src 'none'; report-uri https://tiles.services.mozilla.com/v4/links/activity-stream/csp">
+    <link rel="icon" type="image/png" id="favicon" href="chrome://branding/content/icon32.png"/>
+    <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
+    <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
+  </head>
+  <body class="activity-stream">
+    <div id="root"></div>
+    <div id="snippets-container">
+      <div id="snippets"></div>
+    </div>
+    <script>
+// Don't directly load the following scripts as part of html to let the page
+// finish loading to render the content sooner.
+for (const src of [
+  "chrome://browser/content/contentSearchUI.js",
+  "resource://activity-stream/vendor/react.js",
+  "resource://activity-stream/vendor/react-dom.js",
+  "resource://activity-stream/vendor/react-intl.js",
+  "resource://activity-stream/vendor/redux.js",
+  "resource://activity-stream/vendor/react-redux.js",
+  "resource://activity-stream/prerendered/si/activity-stream-strings.js",
+  "resource://activity-stream/data/content/activity-stream.bundle.js"
+]) {
+  // These dynamically inserted scripts by default are async, but we need them
+  // to load in the desired order (i.e., bundle last).
+  const script = document.body.appendChild(document.createElement("script"));
+  script.async = false;
+  script.src = src;
+}
+    </script>
+  </body>
+</html>
--- a/browser/extensions/activity-stream/prerendered/locales/ta/activity-stream-prerendered.html
+++ b/browser/extensions/activity-stream/prerendered/locales/ta/activity-stream-prerendered.html
@@ -3,17 +3,17 @@
   <head>
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy-Report-Only" content="script-src 'unsafe-inline'; img-src http: https: data: blob:; style-src 'unsafe-inline'; child-src 'none'; object-src 'none'; report-uri https://tiles.services.mozilla.com/v4/links/activity-stream/csp">
     <link rel="icon" type="image/png" id="favicon" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="1728466482"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">இணையத்தில் தேடு</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="இணையத்தில் தேடு" title="இணையத்தில் தேடு" data-reactid="7"/><button id="searchSubmit" class="search-button" title="தேடு" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">தேடு</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">சிறந்த தளங்கள்</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="தகவல்" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">சிறந்த தளங்கள்</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">நீங்கள் அடிக்கடி பார்க்கும் தளங்களை அணுகவும்.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">புதிய கீற்றின் முன்னுரிமைகள்</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="உங்களின் சிறந்த தளங்களுக்கான தொகுதியை விருப்பமை" data-reactid="69"><span data-reactid="70">தொகு</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">Pocket என்பவரால் பரிந்துரைக்கப்பட்டது</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">பிரபலமான தலைப்புகள்:</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">Highlights</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
+    <div id="root"><div class="outer-wrapper fixed-to-top" data-reactroot="" data-reactid="1" data-react-checksum="-1453923718"><main data-reactid="2"><div class="search-wrapper" data-reactid="3"><label for="newtab-search-text" class="search-label" data-reactid="4"><span class="sr-only" data-reactid="5"><span data-reactid="6">இணையத்தில் தேடு</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="இணையத்தில் தேடு" title="இணையத்தில் தேடு" data-reactid="7"/><button id="searchSubmit" class="search-button" title="தேடு" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">தேடு</span></span></button></div><div class="body-wrapper" data-reactid="11"><section class="collapsible-section top-sites animation-enabled" data-reactid="12"><div class="section-top-bar" data-reactid="13"><h3 class="section-title" data-reactid="14"><span class="click-target" data-reactid="15"><span class="icon icon-small-spacer icon-topsites" data-reactid="16"></span><span data-reactid="17">சிறந்த தளங்கள்</span><span class="icon icon-arrowhead-down" data-reactid="18"></span></span></h3><span class="section-info-option" data-reactid="19"><img class="info-option-icon" title="தகவல்" aria-haspopup="true" aria-controls="info-option" aria-expanded="false" role="note" tabindex="0" data-reactid="20"/><div class="info-option" data-reactid="21"><div class="info-option-header" role="heading" data-reactid="22"><span data-reactid="23">சிறந்த தளங்கள்</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">நீங்கள் அடிக்கடி பார்க்கும் தளங்களை அணுகவும்.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">புதிய கீற்றின் முன்னுரிமைகள்</span></button></div></div></span></div><div class="section-body" data-reactid="29"><ul class="top-sites-list" data-reactid="30"><li class="top-site-outer placeholder" data-reactid="31"><a data-reactid="32"><div class="tile" aria-hidden="true" data-reactid="33"><div class="screenshot" style="background-image:none;" data-reactid="34"></div></div><div class="title " data-reactid="35"><span dir="auto" data-reactid="36"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="37"><a data-reactid="38"><div class="tile" aria-hidden="true" data-reactid="39"><div class="screenshot" style="background-image:none;" data-reactid="40"></div></div><div class="title " data-reactid="41"><span dir="auto" data-reactid="42"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="43"><a data-reactid="44"><div class="tile" aria-hidden="true" data-reactid="45"><div class="screenshot" style="background-image:none;" data-reactid="46"></div></div><div class="title " data-reactid="47"><span dir="auto" data-reactid="48"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="49"><a data-reactid="50"><div class="tile" aria-hidden="true" data-reactid="51"><div class="screenshot" style="background-image:none;" data-reactid="52"></div></div><div class="title " data-reactid="53"><span dir="auto" data-reactid="54"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="55"><a data-reactid="56"><div class="tile" aria-hidden="true" data-reactid="57"><div class="screenshot" style="background-image:none;" data-reactid="58"></div></div><div class="title " data-reactid="59"><span dir="auto" data-reactid="60"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="61"><a data-reactid="62"><div class="tile" aria-hidden="true" data-reactid="63"><div class="screenshot" style="background-image:none;" data-reactid="64"></div></div><div class="title " data-reactid="65"><span dir="auto" data-reactid="66"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="67"><div class="edit-topsites-button" data-reactid="68"><button class="edit" title="உங்களின் சிறந்த தளங்களுக்கான தொகுதியை விருப்பமை" data-reactid="69"><span data-reactid="70">தொகு</span></button></div></div></div></section><div class="sections-list" data-reactid="71"><section class="collapsible-section section animation-enabled" data-reactid="72"><div class="section-top-bar" data-reactid="73"><h3 class="section-title" data-reactid="74"><span class="click-target" data-reactid="75"><span class="icon icon-small-spacer icon-pocket" data-reactid="76"></span><span data-reactid="77">Pocket என்பவரால் பரிந்துரைக்கப்பட்டது</span><span class="icon icon-arrowhead-down" data-reactid="78"></span></span></h3></div><div class="section-body" data-reactid="79"><ul class="section-list" style="padding:0;" data-reactid="80"><li class="card-outer placeholder" data-reactid="81"><a data-reactid="82"><div class="card" data-reactid="83"><div class="card-details no-image" data-reactid="84"><div class="card-text no-context no-description no-host-name no-image" data-reactid="85"><h4 class="card-title" dir="auto" data-reactid="86"></h4><p class="card-description" dir="auto" data-reactid="87"></p></div><div class="card-context" data-reactid="88"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="89"><a data-reactid="90"><div class="card" data-reactid="91"><div class="card-details no-image" data-reactid="92"><div class="card-text no-context no-description no-host-name no-image" data-reactid="93"><h4 class="card-title" dir="auto" data-reactid="94"></h4><p class="card-description" dir="auto" data-reactid="95"></p></div><div class="card-context" data-reactid="96"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="97"><a data-reactid="98"><div class="card" data-reactid="99"><div class="card-details no-image" data-reactid="100"><div class="card-text no-context no-description no-host-name no-image" data-reactid="101"><h4 class="card-title" dir="auto" data-reactid="102"></h4><p class="card-description" dir="auto" data-reactid="103"></p></div><div class="card-context" data-reactid="104"></div></div></div></a></li></ul><div class="topic" data-reactid="105"><span data-reactid="106"><span data-reactid="107">பிரபலமான தலைப்புகள்:</span></span><ul data-reactid="108"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="109"><div class="section-top-bar" data-reactid="110"><h3 class="section-title" data-reactid="111"><span class="click-target" data-reactid="112"><span class="icon icon-small-spacer icon-highlights" data-reactid="113"></span><span data-reactid="114">மிளிர்ப்புகள்</span><span class="icon icon-arrowhead-down" data-reactid="115"></span></span></h3></div><div class="section-body" data-reactid="116"><ul class="section-list" style="padding:0;" data-reactid="117"><li class="card-outer placeholder" data-reactid="118"><a data-reactid="119"><div class="card" data-reactid="120"><div class="card-details no-image" data-reactid="121"><div class="card-text no-context no-description no-host-name no-image" data-reactid="122"><h4 class="card-title" dir="auto" data-reactid="123"></h4><p class="card-description" dir="auto" data-reactid="124"></p></div><div class="card-context" data-reactid="125"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="126"><a data-reactid="127"><div class="card" data-reactid="128"><div class="card-details no-image" data-reactid="129"><div class="card-text no-context no-description no-host-name no-image" data-reactid="130"><h4 class="card-title" dir="auto" data-reactid="131"></h4><p class="card-description" dir="auto" data-reactid="132"></p></div><div class="card-context" data-reactid="133"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="134"><a data-reactid="135"><div class="card" data-reactid="136"><div class="card-details no-image" data-reactid="137"><div class="card-text no-context no-description no-host-name no-image" data-reactid="138"><h4 class="card-title" dir="auto" data-reactid="139"></h4><p class="card-description" dir="auto" data-reactid="140"></p></div><div class="card-context" data-reactid="141"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 142 --></main></div></div>
     <div id="snippets-container">
       <div id="snippets"></div>
     </div>
     <script>
 // Don't directly load the following scripts as part of html to let the page
 // finish loading to render the content sooner.
 for (const src of [
   "resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
--- a/browser/extensions/activity-stream/prerendered/locales/ta/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ta/activity-stream-strings.js
@@ -1,15 +1,15 @@
 // Note - this is a generated file.
 window.gActivityStreamStrings = {
   "newtab_page_title": "புதிய கீற்று",
   "default_label_loading": "ஏற்றுகிறது…",
   "header_top_sites": "சிறந்த தளங்கள்",
   "header_stories": "முக்கிய கதைகள்",
-  "header_highlights": "Highlights",
+  "header_highlights": "மிளிர்ப்புகள்",
   "header_visit_again": "மீண்டும் வருக",
   "header_bookmarks": "சமீபத்திய புத்தகக்குறிகள்",
   "header_recommended_by": "{provider} என்பவரால் பரிந்துரைக்கப்பட்டது",
   "header_bookmarks_placeholder": "நீங்கள் புத்தகக்குறிகளைக் கொண்டிருக்கவில்லை .",
   "header_stories_from": "அனுப்பியவர்",
   "type_label_visited": "பார்த்தவை",
   "type_label_bookmarked": "புத்தகக்குறியிடப்பட்டது",
   "type_label_synced": "இன்னொரு சாதனத்திலிருந்து ஒத்திசைக்கப்பட்டது",
@@ -31,18 +31,18 @@ window.gActivityStreamStrings = {
   "confirm_history_delete_notice_p2": "இச்செயலை மீட்க முடியாது.",
   "menu_action_save_to_pocket": "பாக்கட்டில் சேமி",
   "search_for_something_with": "{search_term} சொல்லிற்காகத் தேடு:",
   "search_button": "தேடு",
   "search_header": "{search_engine_name} தேடுபொறியில் தேடு",
   "search_web_placeholder": "இணையத்தில் தேடு",
   "search_settings": "தேடல் அமைவுகளை மாற்று",
   "section_info_option": "தகவல்",
-  "section_info_send_feedback": "Send Feedback",
-  "section_info_privacy_notice": "Privacy Notice",
+  "section_info_send_feedback": "பின்னூட்டம் அனுப்பு",
+  "section_info_privacy_notice": "தனியுரிம கொள்கை",
   "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
   "section_disclaimer_topstories_linktext": "Learn how it works.",
   "section_disclaimer_topstories_buttontext": "Okay, got it",
   "welcome_title": "புதிய கீற்றுக்கு வருக",
   "welcome_body": "உங்களுக்கு மிகவும் பொருத்தமான புத்தகக்குறிகள், கட்டுரைகள், காணொளிகள் மற்றும் சமீபத்தில் பார்வையிட்ட பக்கங்களைக் காண்பிக்க பயர்பாக்ஸ் இந்த இடத்தைப் பயன்படுத்தும், எனவே நீங்கள் அவற்றை எளிதாகத் திரும்பப் பெறலாம்.",
   "welcome_label": "உங்களின் முக்கியம்சங்களை அடையாளம் காண்கிறோம்",
   "time_label_less_than_minute": "<1நி",
   "time_label_minute": "{number}நி",
@@ -55,20 +55,20 @@ window.gActivityStreamStrings = {
   "settings_pane_search_body": "புதிய கீற்றிலீருந்து இணையத்தை தேடு.",
   "settings_pane_topsites_header": "சிறந்த தளங்கள்",
   "settings_pane_topsites_body": "நீங்கள் அடிக்கடி பார்க்கும் தளங்களை அணுகவும்.",
   "settings_pane_topsites_options_showmore": "இரு வரிசைகளைக் காண்பி",
   "settings_pane_bookmarks_header": "சமீபத்திய புத்தகக்குறிகள்",
   "settings_pane_bookmarks_body": "ஒரு வசதியான இடத்தில் உங்கள் புதிதாக உருவாக்கப்பட்ட புத்தகக்குறிகள்.",
   "settings_pane_visit_again_header": "மீண்டும் வருக",
   "settings_pane_visit_again_body": "பயர்பாக்ஸ் நீங்கள் நினைவுப்படுத்த (அ) திரும்பப் பெற விரும்பும் உங்கள் உலாவல் வரலாற்றின் சில பகுதிகளைக் காட்டும்.",
-  "settings_pane_highlights_header": "Highlights",
+  "settings_pane_highlights_header": "மிளிர்ப்புகள்",
   "settings_pane_highlights_body2": "Find your way back to interesting things you’ve recently visited or bookmarked.",
-  "settings_pane_highlights_options_bookmarks": "Bookmarks",
-  "settings_pane_highlights_options_visited": "Visited Sites",
+  "settings_pane_highlights_options_bookmarks": "புத்தகக்குறிகள்",
+  "settings_pane_highlights_options_visited": "பார்வையிடப்பட்ட தளம்",
   "settings_pane_snippets_header": "Snippets",
   "settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
   "settings_pane_done_button": "முடிந்தது",
   "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
   "edit_topsites_button_text": "தொகு",
   "edit_topsites_button_label": "உங்களின் சிறந்த தளங்களுக்கான தொகுதியை விருப்பமை",
   "edit_topsites_showmore_button": "கூடுதலாகக் காட்டுக",
   "edit_topsites_showless_button": "குறைவாகக் காண்பி",
@@ -89,15 +89,10 @@ window.gActivityStreamStrings = {
   "pocket_read_more": "பிரபலமான தலைப்புகள்:",
   "pocket_read_even_more": "இன்னும் கதைகளைப் பார்க்கவும்",
   "pocket_feedback_header": "இணையத்தின் சிறந்த செயலி, 250 இலட்ச மக்களால் தேர்ந்தெடுக்கப்பட்டது.",
   "pocket_description": "Discover high-quality content you might otherwise miss, with help from Pocket, now part of Mozilla.",
   "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
   "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
   "manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
   "manual_migration_cancel_button": "பரவாயில்லை",
-  "manual_migration_import_button": "இப்போது இறக்கு",
-  "settings_pane_body": "ஒரு புதிய கீற்றைத் திறக்கும்போது நீங்கள் பார்ப்பதை தேர்க.",
-  "settings_pane_pocketstories_header": "முக்கிய கதைகள்",
-  "settings_pane_pocketstories_body": "Pocket, ஒரு மொசில்லா குடும்ப உறுப்பினராக, உயர்தர உள்ளடக்கங்களுடன் இணைய உதவுகிறது, இது இல்லையேல் அது சாத்தியமாகது.",
-  "pocket_feedback_body": "Pocket, ஒரு மொசில்லா குடும்ப உறுப்பினராக, உயர்தர உள்ளடக்கங்களுடன் இணைய உதவுகிறது, இது இல்லையேல் அது சாத்தியமாகது.",
-  "pocket_send_feedback": "கருத்துகளைத் தெறிவிக்கவும்"
+  "manual_migration_import_button": "இப்போது இறக்கு"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/th/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/th/activity-stream-strings.js
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "Firefox จะแสดงประวัติการท่องเว็บที่คุณอาจต้องการให้จดจำหรือกลับไปเยี่ยมชมอีกครั้งที่นี่",
   "settings_pane_highlights_header": "รายการเด่น",
   "settings_pane_highlights_body2": "ค้นหาทางของคุณกลับไปยังสิ่งที่น่าสนใจที่คุณได้เยี่ยมชมหรือเพิ่มที่คั่นหน้าไว้ล่าสุด",
   "settings_pane_highlights_options_bookmarks": "ที่คั่นหน้า",
   "settings_pane_highlights_options_visited": "ไซต์ที่เยี่ยมชมแล้ว",
   "settings_pane_snippets_header": "ส่วนย่อย",
   "settings_pane_snippets_body": "อ่านข้อมูลอัปเดตที่สั้นและไพเราะจาก Mozilla เกี่ยวกับ Firefox, วัฒนธรรมอินเทอร์เน็ต และมีมแบบสุ่มเป็นครั้งคราว",
   "settings_pane_done_button": "เสร็จสิ้น",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "แสดงเรื่องราวที่ได้รับการสนับสนุน",
   "edit_topsites_button_text": "แก้ไข",
   "edit_topsites_button_label": "ปรับแต่งส่วนไซต์เด่นของคุณ",
   "edit_topsites_showmore_button": "แสดงเพิ่มเติม",
   "edit_topsites_showless_button": "แสดงน้อยลง",
   "edit_topsites_done_button": "เสร็จสิ้น",
   "edit_topsites_pin_button": "ปักหมุดไซต์นี้",
   "edit_topsites_unpin_button": "ถอนหมุดไซต์นี้",
   "edit_topsites_edit_button": "แก้ไขไซต์นี้",
--- a/browser/extensions/activity-stream/prerendered/locales/tl/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/tl/activity-stream-strings.js
@@ -33,19 +33,19 @@ window.gActivityStreamStrings = {
   "search_for_something_with": "Maghanap ng mga {search_term} na may:",
   "search_button": "Hanapin",
   "search_header": "{search_engine_name} Hanapin",
   "search_web_placeholder": "Hanapin sa Web",
   "search_settings": "Baguhin ang mga Setting ng Paghahanap",
   "section_info_option": "Impormasyon",
   "section_info_send_feedback": "Magbigay ng Feedback",
   "section_info_privacy_notice": "Abiso sa Privacy",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
+  "section_disclaimer_topstories": "Ang pinaka-kagiliw-giliw na mga kwento sa web, pinili batay sa kung ano ang iyong nabasa. Mula sa Pocket, bahagi na ngayon ng Mozilla.",
+  "section_disclaimer_topstories_linktext": "Alamin kung paano ito gumagana.",
+  "section_disclaimer_topstories_buttontext": "Sige, nakuha ko",
   "welcome_title": "Maligayang pagdating sa bagong tab",
   "welcome_body": "Firefox ay gagamit ng puwang upang ipakita ang iyong mga pinaka-kaugnay na bookmark, artikulo, video, at mga pahina ng kamakailan na iyong binisita, kaya maaari kang bumalik sa mga ito ng madali.",
   "welcome_label": "Ang pagkilala sa iyong Highlights",
   "time_label_less_than_minute": "<1m",
   "time_label_minute": "{number}m",
   "time_label_hour": "{number}h",
   "time_label_day": "{number}d",
   "settings_pane_button_label": "I-customize ang iyong pahina ng Bagong Tab",
@@ -62,17 +62,17 @@ window.gActivityStreamStrings = {
   "settings_pane_visit_again_body": "Ipapakita sa iyo ng Firefox ang mga bahagi ng iyong kasaysayan ng pagba-browse na maaaring gusto mong matandaan o makabalik.",
   "settings_pane_highlights_header": "Mga highlight",
   "settings_pane_highlights_body2": "Hanapin ang iyong daan pabalik sa mga kagiliw-giliw na bagay na kamakailan mong binisita o na-bookmark.",
   "settings_pane_highlights_options_bookmarks": "Mga bookmark",
   "settings_pane_highlights_options_visited": "Mga binisitang site",
   "settings_pane_snippets_header": "Mga snippet",
   "settings_pane_snippets_body": "Magbasa ng maikli at matamis na mga update mula sa Mozilla tungkol sa Firefox, kultura sa internet, at paminsan-minsang random na meme.",
   "settings_pane_done_button": "Tapos",
-  "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+  "settings_pane_topstories_options_sponsored": "Ipakita ang Mga Na-sponsor na Kuwento",
   "edit_topsites_button_text": "I-edit",
   "edit_topsites_button_label": "I-customize ang iyong Tuktok na mga seksyon ng Sites",
   "edit_topsites_showmore_button": "Magpakita ng higit pa",
   "edit_topsites_showless_button": "Magpakita ng mas kaunti",
   "edit_topsites_done_button": "Tapos",
   "edit_topsites_pin_button": "I-pin sa site na ito",
   "edit_topsites_unpin_button": "I-unpin ang site na ito",
   "edit_topsites_edit_button": "I-edit ang site na ito",
--- a/browser/extensions/activity-stream/test/unit/lib/NewTabInit.test.js
+++ b/browser/extensions/activity-stream/test/unit/lib/NewTabInit.test.js
@@ -14,60 +14,16 @@ describe("NewTabInit", () => {
     instance.store = store;
   });
   it("should reply with a copy of the state immediately", () => {
     requestFromTab(123);
 
     const resp = ac.SendToContent({type: at.NEW_TAB_INITIAL_STATE, data: STATE}, 123);
     assert.calledWith(store.dispatch, resp);
   });
-  describe("about:home search auto focus", () => {
-    let action;
-    beforeEach(() => {
-      STATE.Prefs = {
-        values: {
-          "aboutHome.autoFocus": true,
-          "showSearch": true
-        }
-      };
-      action = {
-        type: at.NEW_TAB_INIT,
-        data: {
-          url: "about:home",
-          browser: {focus: sinon.spy()}
-        }
-      };
-    });
-    it("should focus the content browser when NEW_TAB_INIT", () => {
-      instance.onAction(action);
-
-      assert.calledOnce(action.data.browser.focus);
-    });
-    it("should NOT focus the content browser when NEW_TAB_INIT for about:newtab", () => {
-      action.data.url = "about:newtab";
-
-      instance.onAction(action);
-
-      assert.notCalled(action.data.browser.focus);
-    });
-    it("should NOT focus the content browser when NEW_TAB_INIT when autoFocus pref is off", () => {
-      STATE.Prefs.values["aboutHome.autoFocus"] = false;
-
-      instance.onAction(action);
-
-      assert.notCalled(action.data.browser.focus);
-    });
-    it("should NOT focus the content browser when NEW_TAB_INIT when there's no search", () => {
-      STATE.Prefs.values.showSearch = false;
-
-      instance.onAction(action);
-
-      assert.notCalled(action.data.browser.focus);
-    });
-  });
   describe("early / simulated new tabs", () => {
     const simulateTabInit = portID => instance.onAction({
       type: at.NEW_TAB_INIT,
       data: {portID, simulated: true}
     });
     beforeEach(() => {
       simulateTabInit("foo");
     });
--- a/browser/extensions/activity-stream/test/unit/lib/SnippetsFeed.test.js
+++ b/browser/extensions/activity-stream/test/unit/lib/SnippetsFeed.test.js
@@ -83,16 +83,25 @@ describe("SnippetsFeed", () => {
   it("should broadcast a SNIPPETS_RESET on uninit", () => {
     const feed = new SnippetsFeed();
     feed.store = {dispatch: sandbox.stub()};
 
     feed.uninit();
 
     assert.calledWith(feed.store.dispatch, ac.BroadcastToContent({type: at.SNIPPETS_RESET}));
   });
+  it("should broadcast a SNIPPET_BLOCKED when a SNIPPETS_BLOCKLIST_UPDATED is received", () => {
+    const feed = new SnippetsFeed();
+    feed.store = {dispatch: sandbox.stub()};
+    const blockList = ["foo", "bar", "baz"];
+
+    feed.onAction({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: blockList});
+
+    assert.calledWith(feed.store.dispatch, ac.BroadcastToContent({type: at.SNIPPET_BLOCKED, data: blockList}));
+  });
   it("should dispatch an update event when the Search observer is called", async () => {
     const feed = new SnippetsFeed();
     feed.store = {dispatch: sandbox.stub()};
     sandbox.stub(feed, "getSelectedSearchEngine")
       .returns(Promise.resolve(searchData));
 
     await feed.observe(null, "browser-search-engine-modified");
 
--- a/browser/extensions/activity-stream/test/unit/lib/TelemetryFeed.test.js
+++ b/browser/extensions/activity-stream/test/unit/lib/TelemetryFeed.test.js
@@ -127,17 +127,17 @@ describe("TelemetryFeed", () => {
       assert.propertyVal(session.perf, "load_trigger_type",
         "first_window_opened");
     });
     it("should not set load_trigger_type to first_window_opened on the second about:home seen", () => {
       instance.addSession("foo", "about:home");
 
       const session2 = instance.addSession("foo", "about:home");
 
-      assert.propertyNotVal(session2.perf, "load_trigger_type",
+      assert.notPropertyVal(session2.perf, "load_trigger_type",
         "first_window_opened");
     });
     it("should set load_trigger_ts to the value of perfService.timeOrigin", () => {
       const session = instance.addSession("foo", "about:home");
 
       assert.propertyVal(session.perf, "load_trigger_ts",
         123456);
     });
--- a/browser/extensions/formautofill/FormAutofillHandler.jsm
+++ b/browser/extensions/formautofill/FormAutofillHandler.jsm
@@ -406,17 +406,17 @@ class FormAutofillSection {
           option.selected = true;
           element.dispatchEvent(new element.ownerGlobal.UIEvent("input", {bubbles: true}));
           element.dispatchEvent(new element.ownerGlobal.Event("change", {bubbles: true}));
         }
         // Autofill highlight appears regardless if value is changed or not
         this.changeFieldState(fieldDetail, FIELD_STATES.AUTO_FILLED);
       }
       if (fieldDetail.state == FIELD_STATES.AUTO_FILLED) {
-        element.addEventListener("input", this);
+        element.addEventListener("input", this, {mozSystemGroup: true});
       }
     }
   }
 
   /**
    * Populates result to the preview layers with given profile.
    *
    * @param {Object} profile
@@ -508,18 +508,18 @@ class FormAutofillSection {
         continue;
       }
 
       // Only reset value for input element.
       if (fieldDetail.state == FIELD_STATES.AUTO_FILLED &&
           element instanceof Ci.nsIDOMHTMLInputElement) {
         element.setUserInput("");
       }
-      this.changeFieldState(fieldDetail, FIELD_STATES.NORMAL);
     }
+    this.resetFieldStates();
   }
 
   /**
    * Change the state of a field to correspond with different presentations.
    *
    * @param {Object} fieldDetail
    *        A fieldDetail of which its element is about to update the state.
    * @param {string} nextState
@@ -552,17 +552,17 @@ class FormAutofillSection {
     }
 
     fieldDetail.state = nextState;
   }
 
   resetFieldStates() {
     for (let fieldDetail of this._validDetails) {
       const element = fieldDetail.elementWeakRef.get();
-      element.removeEventListener("input", this);
+      element.removeEventListener("input", this, {mozSystemGroup: true});
       this.changeFieldState(fieldDetail, FIELD_STATES.NORMAL);
     }
     this.address.filledRecordGUID = null;
     this.creditCard.filledRecordGUID = null;
   }
 
   isFilled() {
     return !!(this.address.filledRecordGUID || this.creditCard.filledRecordGUID);
@@ -745,17 +745,17 @@ class FormAutofillSection {
         const target = event.target;
         const fieldDetail = this.getFieldDetailByElement(target);
         const targetSet = this._getTargetSet(target);
         this.changeFieldState(fieldDetail, FIELD_STATES.NORMAL);
 
         if (!targetSet.fieldDetails.some(detail => detail.state == FIELD_STATES.AUTO_FILLED)) {
           targetSet.filledRecordGUID = null;
         }
-        target.removeEventListener("input", this);
+        target.removeEventListener("input", this, {mozSystemGroup: true});
         break;
       }
     }
   }
 }
 
 /**
  * Handles profile autofill for a DOM Form element.
@@ -871,17 +871,17 @@ class FormAutofillHandler {
       allValidDetails.push(...section.validDetails);
     }
 
     for (let detail of allValidDetails) {
       let input = detail.elementWeakRef.get();
       if (!input) {
         continue;
       }
-      input.addEventListener("input", this);
+      input.addEventListener("input", this, {mozSystemGroup: true});
     }
 
     this.fieldDetails = allValidDetails;
     return allValidDetails;
   }
 
   getSectionByElement(element) {
     let section = this._sectionCache.get(element);
@@ -949,42 +949,42 @@ class FormAutofillHandler {
       }
       if (e.type == "reset") {
         for (let section of this.sections) {
           section.resetFieldStates();
         }
       }
       // Unregister listeners once no field is in AUTO_FILLED state.
       if (!this.hasFilledSection()) {
-        this.form.rootElement.removeEventListener("input", onChangeHandler);
-        this.form.rootElement.removeEventListener("reset", onChangeHandler);
+        this.form.rootElement.removeEventListener("input", onChangeHandler, {mozSystemGroup: true});
+        this.form.rootElement.removeEventListener("reset", onChangeHandler, {mozSystemGroup: true});
       }
     };
 
     if (noFilledSectionsPreviously) {
       // Handle the highlight style resetting caused by user's correction afterward.
       log.debug("register change handler for filled form:", this.form);
-      this.form.rootElement.addEventListener("input", onChangeHandler);
-      this.form.rootElement.addEventListener("reset", onChangeHandler);
+      this.form.rootElement.addEventListener("input", onChangeHandler, {mozSystemGroup: true});
+      this.form.rootElement.addEventListener("reset", onChangeHandler, {mozSystemGroup: true});
     }
   }
 
   handleEvent(event) {
     switch (event.type) {
       case "input":
         if (!event.isTrusted) {
           return;
         }
 
         for (let detail of this.fieldDetails) {
           let input = detail.elementWeakRef.get();
           if (!input) {
             continue;
           }
-          input.removeEventListener("input", this);
+          input.removeEventListener("input", this, {mozSystemGroup: true});
         }
         this.timeStartedFillingMS = Date.now();
         break;
     }
   }
 
   /**
    * Collect the filled sections within submitted form and convert all the valid
--- a/browser/modules/ContentLinkHandler.jsm
+++ b/browser/modules/ContentLinkHandler.jsm
@@ -23,16 +23,19 @@ const SIZES_TELEMETRY_ENUM = {
   ANY: 1,
   DIMENSION: 2,
   INVALID: 3,
 };
 
 const FAVICON_PARSING_TIMEOUT = 100;
 const FAVICON_RICH_ICON_MIN_WIDTH = 96;
 
+const TYPE_ICO = "image/x-icon";
+const TYPE_SVG = "image/svg+xml";
+
 /*
  * Create a nsITimer.
  *
  * @param {function} aCallback A timeout callback function.
  * @param {Number} aDelay A timeout interval in millisecond.
  * @return {nsITimer} A nsITimer object.
  */
 function setTimeout(aCallback, aDelay) {
@@ -115,20 +118,37 @@ function setIconForLink(aIconInfo, aChro
     { url: aIconInfo.iconUri.spec,
       loadingPrincipal: aIconInfo.loadingPrincipal,
       requestContextID: aIconInfo.requestContextID,
       canUseForTab: !aIconInfo.isRichIcon,
     });
 }
 
 /**
- * Checks whether the icon info represents an ICO image.
+ * Guess a type for an icon based on its declared type or file extension.
  */
-function isICO(icon) {
-  return icon.type == "image/x-icon" || icon.type == "image/vnd.microsoft.icon";
+function guessType(icon) {
+  // No type with no icon
+  if (!icon) {
+    return "";
+  }
+
+  // Use the file extension to guess at a type we're interested in
+  if (!icon.type) {
+    let extension = icon.iconUri.filePath.split(".").pop();
+    switch (extension) {
+      case "ico":
+        return TYPE_ICO;
+      case "svg":
+        return TYPE_SVG;
+    }
+  }
+
+  // Fuzzily prefer the type or fall back to the declared type
+  return icon.type == "image/vnd.microsoft.icon" ? TYPE_ICO : icon.type || "";
 }
 
 /*
  * Timeout callback function for loading favicon.
  *
  * @param {Map} aFaviconLoads A map of page URL and FaviconLoad object pairs,
  *   where the FaviconLoad object looks like {
  *     timer: a nsITimer object,
@@ -137,36 +157,34 @@ function isICO(icon) {
  * @param {String} aPageUrl A page URL string for this callback.
  * @param {Object} aChromeGlobal A global chrome object.
  */
 function faviconTimeoutCallback(aFaviconLoads, aPageUrl, aChromeGlobal) {
   let load = aFaviconLoads.get(aPageUrl);
   if (!load)
     return;
 
-  let preferredIcon = {
-    type: null
-  };
+  let preferredIcon;
   let preferredWidth = 16 * Math.ceil(aChromeGlobal.content.devicePixelRatio);
   // Other links with the "icon" tag are the default icons
   let defaultIcon;
   // Rich icons are either apple-touch or fluid icons, or the ones of the
   // dimension 96x96 or greater
   let largestRichIcon;
 
   for (let icon of load.iconInfos) {
     if (!icon.isRichIcon) {
       // First check for svg. If it's not available check for an icon with a
       // size adapt to the current resolution. If both are not available, prefer
       // ico files. When multiple icons are in the same set, the latest wins.
-      if (icon.type == "image/svg+xml") {
+      if (guessType(icon) == TYPE_SVG) {
         preferredIcon = icon;
-      } else if (icon.width == preferredWidth && preferredIcon.type != "image/svg+xml") {
+      } else if (icon.width == preferredWidth && guessType(preferredIcon) != TYPE_SVG) {
         preferredIcon = icon;
-      } else if (isICO(icon) && (preferredIcon.type == null || isICO(preferredIcon))) {
+      } else if (guessType(icon) == TYPE_ICO && (!preferredIcon || guessType(preferredIcon) == TYPE_ICO)) {
         preferredIcon = icon;
       }
     }
 
     // Note that some sites use hi-res icons without specifying them as
     // apple-touch or fluid icons.
     if (icon.isRichIcon || icon.width >= FAVICON_RICH_ICON_MIN_WIDTH) {
       if (!largestRichIcon || largestRichIcon.width < icon.width) {
@@ -180,17 +198,17 @@ function faviconTimeoutCallback(aFavicon
   // Now set the favicons for the page in the following order:
   // 1. Set the best rich icon if any.
   // 2. Set the preferred one if any, otherwise use the default one.
   // This order allows smaller icon frames to eventually override rich icon
   // frames.
   if (largestRichIcon) {
     setIconForLink(largestRichIcon, aChromeGlobal);
   }
-  if (preferredIcon.type) {
+  if (preferredIcon) {
     setIconForLink(preferredIcon, aChromeGlobal);
   } else if (defaultIcon) {
     setIconForLink(defaultIcon, aChromeGlobal);
   }
 
   load.timer = null;
   aFaviconLoads.delete(aPageUrl);
 }
--- a/devtools/client/framework/devtools-browser.js
+++ b/devtools/client/framework/devtools-browser.js
@@ -371,19 +371,18 @@ var gDevToolsBrowser = exports.gDevTools
       if (child == mm) {
         processId = i;
         break;
       }
     }
     if (processId) {
       return this._getContentProcessTarget(processId)
           .then(target => {
-            // Display a new toolbox, in a new window, with debugger by default
-            return gDevTools.showToolbox(target, "jsdebugger",
-                                         Toolbox.HostType.WINDOW);
+            // Display a new toolbox in a new window
+            return gDevTools.showToolbox(target, null, Toolbox.HostType.WINDOW);
           });
     }
 
     let msg = L10N.getStr("toolbox.noContentProcessForTab.message");
     Services.prompt.alert(null, "", msg);
     return Promise.reject(msg);
   },
 
--- a/dom/animation/test/css-animations/file_animations-dynamic-changes.html
+++ b/dom/animation/test/css-animations/file_animations-dynamic-changes.html
@@ -21,17 +21,17 @@ promise_test(function(t) {
   // Wait a moment so we can confirm the startTime doesn't change (and doesn't
   // simply reflect the current time).
   return originalAnimation.ready.then(function() {
     originalStartTime = originalAnimation.startTime;
     originalCurrentTime = originalAnimation.currentTime;
 
     // Wait a moment so we can confirm the startTime doesn't change (and
     // doesn't simply reflect the current time).
-    return waitForFrame();
+    return waitForNextFrame();
   }).then(function() {
     div.style.animationDuration = '200s';
     var animation = div.getAnimations()[0];
     assert_equals(animation, originalAnimation,
                   'The same Animation is returned after updating'
                   + ' animation duration');
     assert_equals(animation.startTime, originalStartTime,
                   'Animations returned by getAnimations preserve'
--- a/dom/base/CustomElementRegistry.cpp
+++ b/dom/base/CustomElementRegistry.cpp
@@ -13,16 +13,67 @@
 #include "mozilla/dom/WebComponentsBinding.h"
 #include "mozilla/dom/DocGroup.h"
 #include "nsHTMLTags.h"
 #include "jsapi.h"
 
 namespace mozilla {
 namespace dom {
 
+//-----------------------------------------------------
+// CustomElementUpgradeReaction
+
+class CustomElementUpgradeReaction final : public CustomElementReaction
+{
+public:
+  explicit CustomElementUpgradeReaction(CustomElementDefinition* aDefinition)
+    : mDefinition(aDefinition)
+  {
+#if DEBUG
+    mIsUpgradeReaction = true;
+#endif
+  }
+
+private:
+  virtual void Invoke(Element* aElement, ErrorResult& aRv) override
+  {
+    CustomElementRegistry::Upgrade(aElement, mDefinition, aRv);
+  }
+
+  CustomElementDefinition* mDefinition;
+};
+
+//-----------------------------------------------------
+// CustomElementCallbackReaction
+
+class CustomElementCallbackReaction final : public CustomElementReaction
+{
+  public:
+    explicit CustomElementCallbackReaction(UniquePtr<CustomElementCallback> aCustomElementCallback)
+      : mCustomElementCallback(Move(aCustomElementCallback))
+    {
+    }
+
+    virtual void Traverse(nsCycleCollectionTraversalCallback& aCb) const override
+    {
+      mCustomElementCallback->Traverse(aCb);
+    }
+
+  private:
+    virtual void Invoke(Element* aElement, ErrorResult& aRv) override
+    {
+      mCustomElementCallback->Call();
+    }
+
+    UniquePtr<CustomElementCallback> mCustomElementCallback;
+};
+
+//-----------------------------------------------------
+// CustomElementCallback
+
 void
 CustomElementCallback::Call()
 {
   IgnoredErrorResult rv;
   switch (mType) {
     case nsIDocument::eConnected:
       static_cast<LifecycleConnectedCallback *>(mCallback.get())->Call(mThisObject, rv);
       break;
@@ -83,16 +134,17 @@ CustomElementConstructor::Construct(cons
 
   RefPtr<Element> element;
   if (NS_FAILED(UNWRAP_OBJECT(Element, &result, element))) {
     return nullptr;
   }
 
   return element.forget();
 }
+
 //-----------------------------------------------------
 // CustomElementData
 
 CustomElementData::CustomElementData(nsAtom* aType)
   : CustomElementData(aType, CustomElementData::State::eUndefined)
 {
 }
 
@@ -1115,29 +1167,10 @@ CustomElementDefinition::CustomElementDe
   : mType(aType),
     mLocalName(aLocalName),
     mConstructor(new CustomElementConstructor(aConstructor)),
     mObservedAttributes(Move(aObservedAttributes)),
     mCallbacks(aCallbacks)
 {
 }
 
-
-//-----------------------------------------------------
-// CustomElementUpgradeReaction
-
-/* virtual */ void
-CustomElementUpgradeReaction::Invoke(Element* aElement, ErrorResult& aRv)
-{
-  CustomElementRegistry::Upgrade(aElement, mDefinition, aRv);
-}
-
-//-----------------------------------------------------
-// CustomElementCallbackReaction
-
-/* virtual */ void
-CustomElementCallbackReaction::Invoke(Element* aElement, ErrorResult& aRv)
-{
-  mCustomElementCallback->Call();
-}
-
 } // namespace dom
 } // namespace mozilla
--- a/dom/base/CustomElementRegistry.h
+++ b/dom/base/CustomElementRegistry.h
@@ -204,51 +204,16 @@ public:
     return mIsUpgradeReaction;
   }
 
 protected:
   bool mIsUpgradeReaction = false;
 #endif
 };
 
-class CustomElementUpgradeReaction final : public CustomElementReaction
-{
-public:
-  explicit CustomElementUpgradeReaction(CustomElementDefinition* aDefinition)
-    : mDefinition(aDefinition)
-  {
-#if DEBUG
-    mIsUpgradeReaction = true;
-#endif
-  }
-
-private:
-   virtual void Invoke(Element* aElement, ErrorResult& aRv) override;
-
-   CustomElementDefinition* mDefinition;
-};
-
-class CustomElementCallbackReaction final : public CustomElementReaction
-{
-  public:
-    explicit CustomElementCallbackReaction(UniquePtr<CustomElementCallback> aCustomElementCallback)
-      : mCustomElementCallback(Move(aCustomElementCallback))
-    {
-    }
-
-    virtual void Traverse(nsCycleCollectionTraversalCallback& aCb) const override
-    {
-      mCustomElementCallback->Traverse(aCb);
-    }
-
-  private:
-    virtual void Invoke(Element* aElement, ErrorResult& aRv) override;
-    UniquePtr<CustomElementCallback> mCustomElementCallback;
-};
-
 // https://html.spec.whatwg.org/multipage/scripting.html#custom-element-reactions-stack
 class CustomElementReactionsStack
 {
 public:
   NS_INLINE_DECL_REFCOUNTING(CustomElementReactionsStack)
 
   CustomElementReactionsStack()
     : mIsBackupQueueProcessing(false)
--- a/dom/base/nsRange.cpp
+++ b/dom/base/nsRange.cpp
@@ -195,58 +195,87 @@ nsRange::IsNodeSelected(nsINode* aNode, 
                         uint32_t aEndOffset)
 {
   NS_PRECONDITION(aNode, "bad arg");
 
   nsINode* n = GetNextRangeCommonAncestor(aNode);
   NS_ASSERTION(n || !aNode->IsSelectionDescendant(),
                "orphan selection descendant");
 
-  // Collect the potential ranges and their selection objects.
-  RangeHashTable ancestorSelectionRanges;
+  // Collect the selection objects for potential ranges.
   nsTHashtable<nsPtrHashKey<Selection>> ancestorSelections;
+  Selection* prevSelection = nullptr;
   uint32_t maxRangeCount = 0;
   for (; n; n = GetNextRangeCommonAncestor(n->GetParentNode())) {
     LinkedList<nsRange>* ranges = n->GetExistingCommonAncestorRanges();
     if (!ranges) {
       continue;
     }
     for (nsRange* range : *ranges) {
       MOZ_ASSERT(range->IsInSelection(),
                  "Why is this range registeed with a node?");
       // Looks like that IsInSelection() assert fails sometimes...
-      if (!range->Collapsed() && range->IsInSelection()) {
-        ancestorSelectionRanges.PutEntry(range);
+      if (range->IsInSelection()) {
         Selection* selection = range->mSelection;
-        ancestorSelections.PutEntry(selection);
+        if (prevSelection != selection) {
+          prevSelection = selection;
+          ancestorSelections.PutEntry(selection);
+        }
         maxRangeCount = std::max(maxRangeCount, selection->RangeCount());
       }
     }
   }
 
-  if (!ancestorSelectionRanges.IsEmpty()) {
-    nsTArray<const nsRange*> sortedRanges(maxRangeCount);
+  IsItemInRangeComparator comparator = { aNode, aStartOffset, aEndOffset };
+  if (!ancestorSelections.IsEmpty()) {
     for (auto iter = ancestorSelections.ConstIter(); !iter.Done(); iter.Next()) {
       Selection* selection = iter.Get()->GetKey();
-      // Sort the found ranges for |selection| in document order
+      // Binary search the sorted ranges in this selection.
       // (Selection::GetRangeAt returns its ranges ordered).
-      for (uint32_t i = 0, len = selection->RangeCount(); i < len; ++i) {
-        nsRange* range = selection->GetRangeAt(i);
-        if (ancestorSelectionRanges.Contains(range)) {
-          sortedRanges.AppendElement(range);
+      size_t low = 0;
+      size_t high = selection->RangeCount();
+
+      while (high != low) {
+        size_t middle = low + (high - low) / 2;
+
+        const nsRange* const range = selection->GetRangeAt(middle);
+        int result = comparator(range);
+        if (result == 0) {
+          if (!range->Collapsed())
+            return true;
+
+          const nsRange* middlePlus1;
+          const nsRange* middleMinus1;
+          // if node end > start of middle+1, result = 1
+          if (middle + 1 < high &&
+              (middlePlus1 = selection->GetRangeAt(middle + 1)) &&
+              nsContentUtils::ComparePoints(
+                aNode, static_cast<int32_t>(aEndOffset),
+                middlePlus1->GetStartContainer(),
+                static_cast<int32_t>(middlePlus1->StartOffset())) > 0) {
+              result = 1;
+          // if node start < end of middle - 1, result = -1
+          } else if (middle >= 1 &&
+              (middleMinus1 = selection->GetRangeAt(middle - 1)) &&
+              nsContentUtils::ComparePoints(
+                aNode, static_cast<int32_t>(aStartOffset),
+                middleMinus1->GetEndContainer(),
+                static_cast<int32_t>(middleMinus1->EndOffset())) < 0) {
+            result = -1;
+          } else {
+            return false;
+          }
+        }
+
+        if (result < 0) {
+          high = middle;
+        } else {
+          low = middle + 1;
         }
       }
-      MOZ_ASSERT(!sortedRanges.IsEmpty());
-      // Binary search the now sorted ranges.
-      IsItemInRangeComparator comparator = { aNode, aStartOffset, aEndOffset };
-      size_t unused;
-      if (mozilla::BinarySearchIf(sortedRanges, 0, sortedRanges.Length(), comparator, &unused)) {
-        return true;
-      }
-      sortedRanges.ClearAndRetainStorage();
     }
   }
   return false;
 }
 
 /******************************************************
  * constructor/destructor
  ******************************************************/
--- a/dom/encoding/FallbackEncoding.cpp
+++ b/dom/encoding/FallbackEncoding.cpp
@@ -29,16 +29,17 @@ static constexpr nsUConvProp domainsFall
 static constexpr nsUConvProp nonParticipatingDomains[] = {
 #include "nonparticipatingdomains.properties.h"
 };
 
 NS_IMPL_ISUPPORTS(FallbackEncoding, nsIObserver)
 
 FallbackEncoding* FallbackEncoding::sInstance = nullptr;
 bool FallbackEncoding::sGuessFallbackFromTopLevelDomain = true;
+bool FallbackEncoding::sFallbackToUTF8ForFile = false;
 
 FallbackEncoding::FallbackEncoding()
   : mFallback(nullptr)
 {
   MOZ_ASSERT(!FallbackEncoding::sInstance,
              "Singleton already exists.");
 }
 
@@ -134,16 +135,18 @@ FallbackEncoding::Initialize()
   MOZ_ASSERT(!FallbackEncoding::sInstance,
              "Initializing pre-existing fallback cache.");
   FallbackEncoding::sInstance = new FallbackEncoding;
   Preferences::RegisterCallback(FallbackEncoding::PrefChanged,
                                 "intl.charset.fallback.override",
                                 nullptr);
   Preferences::AddBoolVarCache(&sGuessFallbackFromTopLevelDomain,
                                "intl.charset.fallback.tld");
+  Preferences::AddBoolVarCache(&sFallbackToUTF8ForFile,
+                               "intl.charset.fallback.utf8_for_file");
 
   nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
   if (obs) {
     obs->AddObserver(sInstance, "intl:requested-locales-changed", true);
   }
 }
 
 void
--- a/dom/encoding/FallbackEncoding.h
+++ b/dom/encoding/FallbackEncoding.h
@@ -22,16 +22,21 @@ public:
   NS_DECL_NSIOBSERVER
 
   /**
    * Whether FromTopLevelDomain() should be used.
    */
   static bool sGuessFallbackFromTopLevelDomain;
 
   /**
+   * Whether UTF-8 should be used for file URLs.
+   */
+  static bool sFallbackToUTF8ForFile;
+
+  /**
    * Gets the locale-dependent fallback encoding for legacy HTML and plain
    * text content.
    *
    * @param aFallback the outparam for the fallback encoding
    */
   static NotNull<const Encoding*> FromLocale();
 
   /**
--- a/dom/html/nsHTMLDocument.cpp
+++ b/dom/html/nsHTMLDocument.cpp
@@ -481,16 +481,22 @@ nsHTMLDocument::TryTLD(int32_t& aCharset
 void
 nsHTMLDocument::TryFallback(int32_t& aCharsetSource,
                             NotNull<const Encoding*>& aEncoding)
 {
   if (kCharsetFromFallback <= aCharsetSource)
     return;
 
   aCharsetSource = kCharsetFromFallback;
+  bool isFile = false;
+  if (FallbackEncoding::sFallbackToUTF8ForFile && mDocumentURI &&
+      NS_SUCCEEDED(mDocumentURI->SchemeIs("file", &isFile)) && isFile) {
+    aEncoding = UTF_8_ENCODING;
+    return;
+  }
   aEncoding = FallbackEncoding::FromLocale();
 }
 
 void
 nsHTMLDocument::SetDocumentCharacterSet(NotNull<const Encoding*> aEncoding)
 {
   nsDocument::SetDocumentCharacterSet(aEncoding);
   // Make sure to stash this charset on our channel as needed if it's a wyciwyg
--- a/dom/html/nsHTMLDocument.h
+++ b/dom/html/nsHTMLDocument.h
@@ -357,18 +357,18 @@ protected:
                             NotNull<const Encoding*>& aEncoding);
   static void TryCacheCharset(nsICachingChannel* aCachingChannel,
                               int32_t& aCharsetSource,
                               NotNull<const Encoding*>& aEncoding);
   void TryParentCharset(nsIDocShell*  aDocShell,
                         int32_t& charsetSource,
                         NotNull<const Encoding*>& aEncoding);
   void TryTLD(int32_t& aCharsetSource, NotNull<const Encoding*>& aCharset);
-  static void TryFallback(int32_t& aCharsetSource,
-                          NotNull<const Encoding*>& aEncoding);
+  void TryFallback(int32_t& aCharsetSource,
+                   NotNull<const Encoding*>& aEncoding);
 
   // Override so we can munge the charset on our wyciwyg channel as needed.
   virtual void
     SetDocumentCharacterSet(NotNull<const Encoding*> aEncoding) override;
 
   // Tracks if we are currently processing any document.write calls (either
   // implicit or explicit). Note that if a write call writes out something which
   // would block the parser, then mWriteLevel will be incorrect until the parser
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -1697,30 +1697,32 @@ MediaManager::EnumerateRawDevices(uint64
     if (aVideoType == MediaSourceEnum::Camera) {
       Preferences::GetCString("media.video_loopback_dev", videoLoopDev);
     }
     if (aAudioType == MediaSourceEnum::Microphone) {
       Preferences::GetCString("media.audio_loopback_dev", audioLoopDev);
     }
   }
 
+  bool hasVideo = aVideoType != MediaSourceEnum::Other;
+  bool hasAudio = aAudioType != MediaSourceEnum::Other;
+  bool fakeCams = aFake && aVideoType == MediaSourceEnum::Camera;
+  bool fakeMics = aFake && aAudioType == MediaSourceEnum::Microphone;
+  bool realDevicesRequested = (!fakeCams && hasVideo) || (!fakeMics && hasAudio);
+
   RefPtr<Runnable> task = NewTaskFrom([id, aWindowId, audioLoopDev,
                                        videoLoopDev, aVideoType,
-                                       aAudioType, aFake]() mutable {
+                                       aAudioType, hasVideo, hasAudio,
+                                       fakeCams, fakeMics, realDevicesRequested]() {
     // Only enumerate what's asked for, and only fake cams and mics.
-    bool hasVideo = aVideoType != MediaSourceEnum::Other;
-    bool hasAudio = aAudioType != MediaSourceEnum::Other;
-    bool fakeCams = aFake && aVideoType == MediaSourceEnum::Camera;
-    bool fakeMics = aFake && aAudioType == MediaSourceEnum::Microphone;
-
     RefPtr<MediaEngine> fakeBackend, realBackend;
     if (fakeCams || fakeMics) {
       fakeBackend = new MediaEngineDefault();
     }
-    if ((!fakeCams && hasVideo) || (!fakeMics && hasAudio)) {
+    if (realDevicesRequested) {
       MediaManager* manager = MediaManager::GetIfExists();
       MOZ_RELEASE_ASSERT(manager); // Must exist while media thread is alive
       realBackend = manager->GetBackend(aWindowId);
       // We need to listen to this event even JS didn't listen to it.
       realBackend->AddDeviceChangeCallback(manager);
     }
 
     auto result = MakeUnique<SourceSet>();
@@ -1753,19 +1755,17 @@ MediaManager::EnumerateRawDevices(uint64
       RefPtr<PledgeSourceSet> p = mgr->mOutstandingPledges.Remove(id);
       if (p) {
         p->Resolve(result.release());
       }
       return NS_OK;
     }));
   });
 
-  if (!aFake &&
-      (aVideoType == MediaSourceEnum::Camera ||
-       aAudioType == MediaSourceEnum::Microphone) &&
+  if (realDevicesRequested &&
       Preferences::GetBool("media.navigator.permission.device", false)) {
     // Need to ask permission to retrieve list of all devices;
     // notify frontend observer and wait for callback notification to post task.
     const char16_t* const type =
       (aVideoType != MediaSourceEnum::Camera)     ? u"audio" :
       (aAudioType != MediaSourceEnum::Microphone) ? u"video" :
                                                     u"all";
     nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
@@ -2506,19 +2506,25 @@ MediaManager::GetUserMedia(nsPIDOMWindow
 
   nsString callID;
   rv = GenerateUUID(callID);
   NS_ENSURE_SUCCESS(rv, rv);
 
   bool fake = c.mFake.WasPassed()? c.mFake.Value() :
       Preferences::GetBool("media.navigator.streams.fake");
 
+  bool hasVideo = videoType != MediaSourceEnum::Other;
+  bool hasAudio = audioType != MediaSourceEnum::Other;
+  bool fakeCams = fake && videoType == MediaSourceEnum::Camera;
+  bool fakeMics = fake && audioType == MediaSourceEnum::Microphone;
+  bool realDevicesRequested = (!fakeCams && hasVideo) || (!fakeMics && hasAudio);
+
   bool askPermission =
       (!privileged || Preferences::GetBool("media.navigator.permission.force")) &&
-      (!fake || Preferences::GetBool("media.navigator.permission.fake"));
+      (realDevicesRequested || Preferences::GetBool("media.navigator.permission.fake"));
 
   RefPtr<PledgeSourceSet> p = EnumerateDevicesImpl(windowID, videoType,
                                                    audioType, fake);
   RefPtr<MediaManager> self = this;
   p->Then([self, onSuccess, onFailure, windowID, c, windowListener,
            sourceListener, askPermission, prefs, isHTTPS, callID, principalInfo,
            isChrome, resistFingerprinting](SourceSet*& aDevices) mutable {
     // grab result
--- a/dom/media/webaudio/test/test_mediaElementAudioSourceNodeFidelity.html
+++ b/dom/media/webaudio/test/test_mediaElementAudioSourceNodeFidelity.html
@@ -41,43 +41,52 @@ function debugCanvas(analyser) {
 }
 
 
 function checkFrequency(an) {
   an.getFloatFrequencyData(frequencyArray);
   // We should have no energy when checking the data largely outside the index
   // for 440Hz (the frequency of the sine wave), start checking an octave above,
   // the Opus compression can add some harmonics to the pure since wave.
-  var index = binIndexForFrequency(880, an);
-  var underTreshold = true;
-  for (var i = index; i < frequencyArray.length; i++) {
-    // Let some slack, there might be some noise here because of int -> float
-    // conversion or the Opus encoding.
-    if (frequencyArray[i] > an.minDecibels + 40) {
-      return false;
+  var maxNoiseIndex = binIndexForFrequency(880, an);
+  for (var i = maxNoiseIndex + 1; i < frequencyArray.length; i++) {
+    if (frequencyArray[i] > frequencyArray[maxNoiseIndex]) {
+       maxNoiseIndex = i;
     }
   }
 
   // On the other hand, we should find a peak at 440Hz. Our sine wave is not
   // attenuated, we're expecting the peak to reach 0dBFs.
-  index = binIndexForFrequency(440, an);
-  info("energy at 440: " + frequencyArray[index] + ", threshold " + (an.maxDecibels - 10));
+  var index = binIndexForFrequency(440, an);
+  info("energy at 440: " + frequencyArray[index] +
+       ", threshold " + (an.maxDecibels - 10) +
+       "; max noise at index " + maxNoiseIndex +
+       ": " + frequencyArray[maxNoiseIndex] );
   if (frequencyArray[index] < (an.maxDecibels - 10)) {
     return false;
   }
+  // Let some slack, there might be some noise here because of int -> float
+  // conversion or the Opus encoding.
+  if (frequencyArray[maxNoiseIndex] > an.minDecibels + 40) {
+    return false;
+  }
 
   return true;
 }
 
 var audioElement = new Audio();
 audioElement.src = 'sine-440-10s.opus'
 audioElement.loop = true;
 var ac = new AudioContext();
 var mediaElementSource = ac.createMediaElementSource(audioElement);
 var an = ac.createAnalyser();
+// Use no smoothing as this would just average with previous
+// getFloatFrequencyData() calls.  Non-seamless looping would introduce noise,
+// and smoothing would spread this into calls after the loop point.
+an.smoothingTimeConstant = 0;
 frequencyArray = new Float32Array(an.frequencyBinCount);
 
 // Uncomment this to check what the analyser is doing.
 // debugCanvas(an);
 
 mediaElementSource.connect(an)
 
 audioElement.play();
--- a/gfx/layers/apz/src/AsyncPanZoomController.cpp
+++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp
@@ -902,17 +902,22 @@ nsEventStatus AsyncPanZoomController::Ha
   if (!gfxPrefs::APZDragEnabled()) {
     return nsEventStatus_eIgnore;
   }
 
   if (!GetApzcTreeManager()) {
     return nsEventStatus_eConsumeNoDefault;
   }
 
+  if (aEvent.mType == MouseInput::MouseType::MOUSE_DOWN) {
+    SetState(SCROLLBAR_DRAG);
+  }
+
   if (aEvent.mType == MouseInput::MouseType::MOUSE_UP) {
+    SetState(NOTHING);
     ScrollSnap();
   }
 
   if (aEvent.mType != MouseInput::MouseType::MOUSE_MOVE) {
     return nsEventStatus_eConsumeNoDefault;
   }
 
   RefPtr<HitTestingTreeNode> node =
@@ -1143,16 +1148,17 @@ nsEventStatus AsyncPanZoomController::On
     case OVERSCROLL_ANIMATION:
     case WHEEL_SCROLL:
     case KEYBOARD_SCROLL:
     case PAN_MOMENTUM:
     case AUTOSCROLL:
       MOZ_ASSERT(GetCurrentTouchBlock());
       GetCurrentTouchBlock()->GetOverscrollHandoffChain()->CancelAnimations(ExcludeOverscroll);
       MOZ_FALLTHROUGH;
+    case SCROLLBAR_DRAG:
     case NOTHING: {
       mX.StartTouch(point.x, aEvent.mTime);
       mY.StartTouch(point.y, aEvent.mTime);
       if (RefPtr<GeckoContentController> controller = GetGeckoContentController()) {
         MOZ_ASSERT(GetCurrentTouchBlock());
         controller->NotifyAPZStateChange(
             GetGuid(), APZStateChange::eStartTouch,
             GetCurrentTouchBlock()->GetOverscrollHandoffChain()->CanBePanned(this));
@@ -1217,16 +1223,17 @@ nsEventStatus AsyncPanZoomController::On
       // The scale gesture listener should have handled this.
       NS_WARNING("Gesture listener should have handled pinching in OnTouchMove.");
       return nsEventStatus_eIgnore;
 
     case WHEEL_SCROLL:
     case KEYBOARD_SCROLL:
     case OVERSCROLL_ANIMATION:
     case AUTOSCROLL:
+    case SCROLLBAR_DRAG:
       // Should not receive a touch-move in the OVERSCROLL_ANIMATION state
       // as touch blocks that begin in an overscrolled state cancel the
       // animation. The same is true for wheel scroll animations.
       NS_WARNING("Received impossible touch in OnTouchMove");
       break;
   }
 
   return nsEventStatus_eConsumeNoDefault;
@@ -1299,16 +1306,17 @@ nsEventStatus AsyncPanZoomController::On
     // Scale gesture listener should have handled this.
     NS_WARNING("Gesture listener should have handled pinching in OnTouchEnd.");
     return nsEventStatus_eIgnore;
 
   case WHEEL_SCROLL:
   case KEYBOARD_SCROLL:
   case OVERSCROLL_ANIMATION:
   case AUTOSCROLL:
+  case SCROLLBAR_DRAG:
     // Should not receive a touch-end in the OVERSCROLL_ANIMATION state
     // as touch blocks that begin in an overscrolled state cancel the
     // animation. The same is true for WHEEL_SCROLL.
     NS_WARNING("Received impossible touch in OnTouchEnd");
     break;
   }
 
   return nsEventStatus_eConsumeNoDefault;
--- a/gfx/layers/apz/src/AsyncPanZoomController.h
+++ b/gfx/layers/apz/src/AsyncPanZoomController.h
@@ -923,17 +923,18 @@ protected:
     PINCHING,                 /* nth touch-start, where n > 1. this mode allows pan and zoom */
     ANIMATING_ZOOM,           /* animated zoom to a new rect */
     OVERSCROLL_ANIMATION,     /* Spring-based animation used to relieve overscroll once
                                  the finger is lifted. */
     SMOOTH_SCROLL,            /* Smooth scrolling to destination. Used by
                                  CSSOM-View smooth scroll-behavior */
     WHEEL_SCROLL,             /* Smooth scrolling to a destination for a wheel event. */
     KEYBOARD_SCROLL,          /* Smooth scrolling to a destination for a keyboard event. */
-    AUTOSCROLL                /* Autoscroll animation. */
+    AUTOSCROLL,               /* Autoscroll animation. */
+    SCROLLBAR_DRAG            /* Async scrollbar drag. */
   };
   // This is in theory protected by |mRecursiveMutex|; that is, it should be held whenever
   // this is updated. In practice though... see bug 897017.
   PanZoomState mState;
 
 private:
   friend class StateChangeNotificationBlocker;
   /**
--- a/js/xpconnect/src/nsXPConnect.cpp
+++ b/js/xpconnect/src/nsXPConnect.cpp
@@ -1127,23 +1127,16 @@ nsXPConnect::ReadFunction(nsIObjectInput
 
 /* These are here to be callable from a debugger */
 extern "C" {
 JS_EXPORT_API(void) DumpJSStack()
 {
     xpc_DumpJSStack(true, true, false);
 }
 
-JS_EXPORT_API(const char*) PrintJSStack()
-{
-    if (JSContext* cx = nsContentUtils::GetCurrentJSContext())
-        return xpc_PrintJSStack(cx, true, true, false).release();
-    return "There is no JSContext on the stack.\n";
-}
-
 JS_EXPORT_API(void) DumpCompleteHeap()
 {
     nsCOMPtr<nsICycleCollectorListener> listener =
       do_CreateInstance("@mozilla.org/cycle-collector-logger;1");
     if (!listener) {
       NS_WARNING("Failed to create CC logger");
       return;
     }
--- a/layout/generic/nsGfxScrollFrame.cpp
+++ b/layout/generic/nsGfxScrollFrame.cpp
@@ -3645,18 +3645,18 @@ ScrollFrameHelper::BuildDisplayList(nsDi
     // a displayport for this frame. We'll add the item later on.
     if (!mWillBuildScrollableLayer) {
       int32_t zIndex =
         MaxZIndexInListOfItemsContainedInFrame(scrolledContent.PositionedDescendants(), mOuter);
       if (aBuilder->BuildCompositorHitTestInfo()) {
         CompositorHitTestInfo info = CompositorHitTestInfo::eVisibleToHitTest
                                    | CompositorHitTestInfo::eDispatchToContent;
         nsDisplayCompositorHitTestInfo* hitInfo =
-            new (aBuilder) nsDisplayCompositorHitTestInfo(aBuilder, mScrolledFrame, info, 1);
-        hitInfo->SetArea(mScrollPort + aBuilder->ToReferenceFrame(mOuter));
+            new (aBuilder) nsDisplayCompositorHitTestInfo(aBuilder, mScrolledFrame, info, 1,
+                Some(mScrollPort + aBuilder->ToReferenceFrame(mOuter)));
         AppendInternalItemToTop(scrolledContent, hitInfo, zIndex);
       }
       if (aBuilder->IsBuildingLayerEventRegions()) {
         nsDisplayLayerEventRegions* inactiveRegionItem =
             new (aBuilder) nsDisplayLayerEventRegions(aBuilder, mScrolledFrame, 1);
         inactiveRegionItem->AddInactiveScrollPort(mScrolledFrame, mScrollPort + aBuilder->ToReferenceFrame(mOuter));
         AppendInternalItemToTop(scrolledContent, inactiveRegionItem, zIndex);
       }
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -4939,17 +4939,18 @@ nsDisplayEventReceiver::CreateWebRenderC
   // list for WebRender consumption, so this function should never get called.
   MOZ_ASSERT(false);
   return true;
 }
 
 nsDisplayCompositorHitTestInfo::nsDisplayCompositorHitTestInfo(nsDisplayListBuilder* aBuilder,
                                                                nsIFrame* aFrame,
                                                                mozilla::gfx::CompositorHitTestInfo aHitTestInfo,
-                                                               uint32_t aIndex)
+                                                               uint32_t aIndex,
+                                                               const mozilla::Maybe<nsRect>& aArea)
   : nsDisplayEventReceiver(aBuilder, aFrame)
   , mHitTestInfo(aHitTestInfo)
   , mIndex(aIndex)
 {
   MOZ_COUNT_CTOR(nsDisplayCompositorHitTestInfo);
   // We should never even create this display item if we're not building
   // compositor hit-test info or if the computed hit info indicated the
   // frame is invisible to hit-testing
@@ -4957,56 +4958,55 @@ nsDisplayCompositorHitTestInfo::nsDispla
   MOZ_ASSERT(mHitTestInfo != mozilla::gfx::CompositorHitTestInfo::eInvisibleToHitTest);
 
   if (aBuilder->GetCurrentScrollbarFlags() != nsDisplayOwnLayerFlags::eNone) {
     // In the case of scrollbar frames, we use the scrollbar's target scrollframe
     // instead of the scrollframe with which the scrollbar actually moves.
     MOZ_ASSERT(mHitTestInfo & CompositorHitTestInfo::eScrollbar);
     mScrollTarget = Some(aBuilder->GetCurrentScrollbarTarget());
   }
-}
-
-void
-nsDisplayCompositorHitTestInfo::SetArea(const nsRect& aArea)
-{
-  mArea = Some(aArea);
+
+  if (aArea.isSome()) {
+    mArea = *aArea;
+  } else {
+    nsIScrollableFrame* scrollFrame = nsLayoutUtils::GetScrollableFrameFor(mFrame);
+    if (scrollFrame) {
+      // If the frame is content of a scrollframe, then we need to pick up the
+      // area corresponding to the overflow rect as well. Otherwise the parts of
+      // the overflow that are not occupied by descendants get skipped and the
+      // APZ code sends touch events to the content underneath instead.
+      // See https://bugzilla.mozilla.org/show_bug.cgi?id=1127773#c15.
+      mArea = mFrame->GetScrollableOverflowRect();
+    } else {
+      mArea = nsRect(nsPoint(0, 0), mFrame->GetSize());
+    }
+
+    // Note that it's important to do this call to ToReferenceFrame here in the
+    // nsDisplayCompositorHitTestInfo constructor, because then we'll hit the good
+    // fast path (because aBuilder will already have the info we want cached).
+    // This is as opposed to, say, calling it in CreateWebRenderCommands where
+    // we would not hit the fast path.
+    mArea += aBuilder->ToReferenceFrame(mFrame);
+  }
 }
 
 bool
 nsDisplayCompositorHitTestInfo::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
                                                         mozilla::wr::IpcResourceUpdateQueue& aResources,
                                                         const StackingContextHelper& aSc,
                                                         mozilla::layers::WebRenderLayerManager* aManager,
                                                         nsDisplayListBuilder* aDisplayListBuilder)
 {
-  if (mArea.isNothing()) {
-    nsRect borderBox;
-    nsIScrollableFrame* scrollFrame = nsLayoutUtils::GetScrollableFrameFor(mFrame);
-    if (scrollFrame) {
-      // If the frame is content of a scrollframe, then we need to pick up the
-      // area corresponding to the overflow rect as well. Otherwise the parts of
-      // the overflow that are not occupied by descendants get skipped and the
-      // APZ code sends touch events to the content underneath instead.
-      // See https://bugzilla.mozilla.org/show_bug.cgi?id=1127773#c15.
-      borderBox = mFrame->GetScrollableOverflowRect();
-    } else {
-      borderBox = nsRect(nsPoint(0, 0), mFrame->GetSize());
-    }
-
-    if (borderBox.IsEmpty()) {
-      return true;
-    }
-
-    mArea = Some(borderBox + aDisplayListBuilder->ToReferenceFrame(mFrame));
-  }
-
-  MOZ_ASSERT(mArea.isSome());
+  if (mArea.IsEmpty()) {
+    return true;
+  }
+
   wr::LayoutRect rect = aSc.ToRelativeLayoutRect(
       LayoutDeviceRect::FromAppUnits(
-          *mArea,
+          mArea,
           mFrame->PresContext()->AppUnitsPerDevPixel()));
 
   // XXX: eventually this scrollId computation and the SetHitTestInfo
   // call will get moved out into the WR display item iteration code so that
   // we don't need to do it as often, and so that we can do it for other
   // display item types as well (reducing the need for as many instances of
   // this display item).
   FrameMetrics::ViewID scrollId = mScrollTarget.valueOrFrom(
--- a/layout/painting/nsDisplayList.h
+++ b/layout/painting/nsDisplayList.h
@@ -4353,44 +4353,44 @@ public:
  * this gets built when we're doing widget painting and we need to send the
  * compositor some hit-test info for a frame. This is effectively a dummy item
  * whose sole purpose is to carry the hit-test info to the compositor.
  */
 class nsDisplayCompositorHitTestInfo : public nsDisplayEventReceiver {
 public:
   nsDisplayCompositorHitTestInfo(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
                                  mozilla::gfx::CompositorHitTestInfo aHitTestInfo,
-                                 uint32_t aIndex = 0);
+                                 uint32_t aIndex = 0,
+                                 const mozilla::Maybe<nsRect>& aArea = mozilla::Nothing());
 
 #ifdef NS_BUILD_REFCNT_LOGGING
   virtual ~nsDisplayCompositorHitTestInfo()
   {
     MOZ_COUNT_DTOR(nsDisplayCompositorHitTestInfo);
   }
 #endif
 
   mozilla::gfx::CompositorHitTestInfo HitTestInfo() const { return mHitTestInfo; }
-  void SetArea(const nsRect& aArea);
 
   bool CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
                                mozilla::wr::IpcResourceUpdateQueue& aResources,
                                const StackingContextHelper& aSc,
                                mozilla::layers::WebRenderLayerManager* aManager,
                                nsDisplayListBuilder* aDisplayListBuilder) override;
   void WriteDebugInfo(std::stringstream& aStream) override;
   uint32_t GetPerFrameKey() const override;
   int32_t ZIndex() const override;
   void SetOverrideZIndex(int32_t aZIndex);
 
   NS_DISPLAY_DECL_NAME("CompositorHitTestInfo", TYPE_COMPOSITOR_HITTEST_INFO)
 
 private:
   mozilla::gfx::CompositorHitTestInfo mHitTestInfo;
   mozilla::Maybe<mozilla::layers::FrameMetrics::ViewID> mScrollTarget;
-  mozilla::Maybe<nsRect> mArea;
+  nsRect mArea;
   uint32_t mIndex;
   mozilla::Maybe<int32_t> mOverrideZIndex;
 };
 
 /**
  * A display item that tracks event-sensitive regions which will be set
  * on the ContainerLayer that eventually contains this item.
  *
--- a/layout/printing/DrawEventRecorder.cpp
+++ b/layout/printing/DrawEventRecorder.cpp
@@ -14,22 +14,16 @@ DrawEventRecorderPRFileDesc::RecordEvent
 {
   WriteElement(mOutputStream, aEvent.GetType());
 
   aEvent.RecordToStream(mOutputStream);
 
   Flush();
 }
 
-DrawEventRecorderPRFileDesc::DrawEventRecorderPRFileDesc(const char* aFilename)
-{
-  mOutputStream.Open(aFilename);
-  WriteHeader(mOutputStream);
-}
-
 DrawEventRecorderPRFileDesc::~DrawEventRecorderPRFileDesc()
 {
   if (IsOpen()) {
     Close();
   }
 }
 
 void
@@ -40,21 +34,21 @@ DrawEventRecorderPRFileDesc::Flush()
 
 bool
 DrawEventRecorderPRFileDesc::IsOpen()
 {
   return mOutputStream.IsOpen();
 }
 
 void
-DrawEventRecorderPRFileDesc::OpenNew(const char* aFilename)
+DrawEventRecorderPRFileDesc::OpenFD(PRFileDesc* aFd)
 {
   MOZ_ASSERT(!IsOpen());
 
-  mOutputStream.Open(aFilename);
+  mOutputStream.OpenFD(aFd);
   WriteHeader(mOutputStream);
 }
 
 void
 DrawEventRecorderPRFileDesc::Close()
 {
   MOZ_ASSERT(IsOpen());
 
--- a/layout/printing/DrawEventRecorder.h
+++ b/layout/printing/DrawEventRecorder.h
@@ -20,19 +20,20 @@ class PRFileDescStream : public mozilla:
   // Most writes, as seen in the print IPC use case, are very small (<32 bytes),
   // with a small number of very large (>40KB) writes. Writes larger than this
   // value are not buffered.
   static const size_t kBufferSize = 1024;
 public:
   PRFileDescStream() : mFd(nullptr), mBuffer(nullptr), mBufferPos(0),
                        mGood(true) {}
 
-  void Open(const char* aFilename) {
+  void OpenFD(PRFileDesc* aFd)
+  {
     MOZ_ASSERT(!IsOpen());
-    mFd = PR_Open(aFilename, PR_RDWR | PR_CREATE_FILE, PR_IRUSR | PR_IWUSR);
+    mFd = aFd;
     mGood = true;
     mBuffer.reset(new uint8_t[kBufferSize]);
     mBufferPos = 0;
   }
 
   void Close() {
     // We need to be API compatible with std::ostream, and so we silently handle
     // closes on a closed FD.
@@ -113,32 +114,30 @@ private:
   size_t mBufferPos;
   bool mGood;
 };
 
 class DrawEventRecorderPRFileDesc : public gfx::DrawEventRecorderPrivate
 {
 public:
   MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(DrawEventRecorderPRFileDesc, override)
-  explicit DrawEventRecorderPRFileDesc(const char* aFilename);
+  explicit DrawEventRecorderPRFileDesc(){};
   ~DrawEventRecorderPRFileDesc();
 
   void RecordEvent(const gfx::RecordedEvent& aEvent) override;
 
   /**
    * Returns whether a recording file is currently open.
    */
   bool IsOpen();
 
   /**
-   * Opens new file with the provided name. The recorder does NOT forget which
-   * objects it has recorded. This can be used with Close, so that a recording
-   * can be processed in chunks. The file must not already be open.
+   * Opens the recorder with the provided PRFileDesc *.
    */
-  void OpenNew(const char* aFilename);
+  void OpenFD(PRFileDesc* aFd);
 
   /**
    * Closes the file so that it can be processed. The recorder does NOT forget
    * which objects it has recorded. This can be used with OpenNew, so that a
    * recording can be processed in chunks. The file must be open.
    */
   void Close();
 
--- a/layout/printing/ipc/PRemotePrintJob.ipdl
+++ b/layout/printing/ipc/PRemotePrintJob.ipdl
@@ -17,19 +17,19 @@ both:
   // Tell either side to abort printing and clean up.
   async AbortPrint(nsresult aRv);
 
 parent:
   // Initialize the real print device with the given information.
   async InitializePrint(nsString aDocumentTitle, nsString aPrintToFile,
                         int32_t aStartPage, int32_t aEndPage);
 
-  // Translate the stored page recording and play back the events to the real
-  // print device.
-  async ProcessPage(nsCString aPageFileName);
+  // Translate the page recording writen into |fd| and play back the events to
+  // the real print device.
+  async ProcessPage();
 
   // This informs the real print device that we've finished, so it can trigger
   // the actual print.
   async FinalizePrint();
 
   // Report a state change to listeners in the parent process.
   async StateChange(long aStateFlags,
                     nsresult aStatus);
@@ -40,19 +40,21 @@ parent:
                        long aCurTotalProgress,
                        long aMaxTotalProgress);
 
   // Report a status change to listeners in the parent process.
   async StatusChange(nsresult aStatus);
 
 child:
   // Inform the child that the print has been initialized in the parent or has
-  // failed with result aRv.
-  async PrintInitializationResult(nsresult aRv);
+  // failed with result aRv. Includes a file descriptor which the first page
+  // can be written to.
+  async PrintInitializationResult(nsresult aRv, FileDescriptor aFd);
 
-  // Inform the child that the latest page has been processed remotely.
-  async PageProcessed();
+  // Inform the child that the latest page has been processed remotely. Includes
+  // a file descriptor which the next page can be written to.
+  async PageProcessed(FileDescriptor aFd);
 
   async __delete__();
 };
 
 } // namespace layout
 } // namespace mozilla
--- a/layout/printing/ipc/RemotePrintJobChild.cpp
+++ b/layout/printing/ipc/RemotePrintJobChild.cpp
@@ -4,16 +4,17 @@
  * 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/. */
 
 #include "RemotePrintJobChild.h"
 
 #include "mozilla/Unused.h"
 #include "nsPagePrintTimer.h"
 #include "nsPrintEngine.h"
+#include "private/pprio.h"
 
 namespace mozilla {
 namespace layout {
 
 NS_IMPL_ISUPPORTS(RemotePrintJobChild,
                   nsIWebProgressListener)
 
 RemotePrintJobChild::RemotePrintJobChild()
@@ -31,36 +32,58 @@ RemotePrintJobChild::InitializePrint(con
   Unused << SendInitializePrint(aDocumentTitle, aPrintToFile, aStartPage,
                                 aEndPage);
   mozilla::SpinEventLoopUntil([&]() { return mPrintInitialized; });
 
   return mInitializationResult;
 }
 
 mozilla::ipc::IPCResult
-RemotePrintJobChild::RecvPrintInitializationResult(const nsresult& aRv)
+RemotePrintJobChild::RecvPrintInitializationResult(
+  const nsresult& aRv,
+  const mozilla::ipc::FileDescriptor& aFd)
 {
   mPrintInitialized = true;
   mInitializationResult = aRv;
+  if (NS_SUCCEEDED(aRv)) {
+    SetNextPageFD(aFd);
+  }
   return IPC_OK();
 }
 
+PRFileDesc*
+RemotePrintJobChild::GetNextPageFD()
+{
+  MOZ_ASSERT(mNextPageFD);
+  PRFileDesc* fd = mNextPageFD;
+  mNextPageFD = nullptr;
+  return fd;
+}
+
 void
-RemotePrintJobChild::ProcessPage(const nsCString& aPageFileName)
+RemotePrintJobChild::SetNextPageFD(const mozilla::ipc::FileDescriptor& aFd)
+{
+  auto handle = aFd.ClonePlatformHandle();
+  mNextPageFD = PR_ImportFile(PROsfd(handle.release()));
+}
+
+void
+RemotePrintJobChild::ProcessPage()
 {
   MOZ_ASSERT(mPagePrintTimer);
 
   mPagePrintTimer->WaitForRemotePrint();
-  Unused << SendProcessPage(aPageFileName);
+  Unused << SendProcessPage();
 }
 
 mozilla::ipc::IPCResult
-RemotePrintJobChild::RecvPageProcessed()
+RemotePrintJobChild::RecvPageProcessed(const mozilla::ipc::FileDescriptor& aFd)
 {
   MOZ_ASSERT(mPagePrintTimer);
+  SetNextPageFD(aFd);
 
   mPagePrintTimer->RemotePrintFinished();
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 RemotePrintJobChild::RecvAbortPrint(const nsresult& aRv)
 {
--- a/layout/printing/ipc/RemotePrintJobChild.h
+++ b/layout/printing/ipc/RemotePrintJobChild.h
@@ -29,33 +29,39 @@ public:
 
   void ActorDestroy(ActorDestroyReason aWhy) final;
 
   nsresult InitializePrint(const nsString& aDocumentTitle,
                            const nsString& aPrintToFile,
                            const int32_t& aStartPage,
                            const int32_t& aEndPage);
 
-  mozilla::ipc::IPCResult RecvPrintInitializationResult(const nsresult& aRv) final;
+  mozilla::ipc::IPCResult RecvPrintInitializationResult(
+    const nsresult& aRv,
+    const FileDescriptor& aFd) final;
 
-  void ProcessPage(const nsCString& aPageFileName);
+  void ProcessPage();
 
-  mozilla::ipc::IPCResult RecvPageProcessed() final;
+  mozilla::ipc::IPCResult RecvPageProcessed(const FileDescriptor& aFd) final;
 
   mozilla::ipc::IPCResult RecvAbortPrint(const nsresult& aRv) final;
 
   void SetPagePrintTimer(nsPagePrintTimer* aPagePrintTimer);
 
   void SetPrintEngine(nsPrintEngine* aPrintEngine);
 
+  PRFileDesc* GetNextPageFD();
+
 private:
   ~RemotePrintJobChild() final;
+  void SetNextPageFD(const mozilla::ipc::FileDescriptor& aFd);
 
   bool mPrintInitialized = false;
   nsresult mInitializationResult = NS_OK;
   RefPtr<nsPagePrintTimer> mPagePrintTimer;
   RefPtr<nsPrintEngine> mPrintEngine;
+  PRFileDesc* mNextPageFD = nullptr;
 };
 
 } // namespace layout
 } // namespace mozilla
 
 #endif // mozilla_layout_RemotePrintJobChild_h
--- a/layout/printing/ipc/RemotePrintJobParent.cpp
+++ b/layout/printing/ipc/RemotePrintJobParent.cpp
@@ -14,16 +14,18 @@
 #include "nsAppDirectoryServiceDefs.h"
 #include "nsComponentManagerUtils.h"
 #include "nsDirectoryServiceUtils.h"
 #include "nsDeviceContext.h"
 #include "nsIDeviceContextSpec.h"
 #include "nsIPrintSettings.h"
 #include "nsIWebProgressListener.h"
 #include "PrintTranslator.h"
+#include "private/pprio.h"
+#include "nsAnonymousTemporaryFile.h"
 
 namespace mozilla {
 namespace layout {
 
 RemotePrintJobParent::RemotePrintJobParent(nsIPrintSettings* aPrintSettings)
   : mPrintSettings(aPrintSettings)
 {
   MOZ_COUNT_CTOR(RemotePrintJobParent);
@@ -33,24 +35,31 @@ mozilla::ipc::IPCResult
 RemotePrintJobParent::RecvInitializePrint(const nsString& aDocumentTitle,
                                           const nsString& aPrintToFile,
                                           const int32_t& aStartPage,
                                           const int32_t& aEndPage)
 {
   nsresult rv = InitializePrintDevice(aDocumentTitle, aPrintToFile, aStartPage,
                                       aEndPage);
   if (NS_FAILED(rv)) {
-    Unused << SendPrintInitializationResult(rv);
+    Unused << SendPrintInitializationResult(rv, FileDescriptor());
     Unused << Send__delete__(this);
     return IPC_OK();
   }
 
   mPrintTranslator.reset(new PrintTranslator(mPrintDeviceContext));
-  Unused << SendPrintInitializationResult(NS_OK);
+  FileDescriptor fd;
+  rv = PrepareNextPageFD(&fd);
+  if (NS_FAILED(rv)) {
+    Unused << SendPrintInitializationResult(rv, FileDescriptor());
+    Unused << Send__delete__(this);
+    return IPC_OK();
+  }
 
+  Unused << SendPrintInitializationResult(NS_OK, fd);
   return IPC_OK();
 }
 
 nsresult
 RemotePrintJobParent::InitializePrintDevice(const nsString& aDocumentTitle,
                                             const nsString& aPrintToFile,
                                             const int32_t& aStartPage,
                                             const int32_t& aEndPage)
@@ -77,76 +86,75 @@ RemotePrintJobParent::InitializePrintDev
                                           aStartPage, aEndPage);
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return rv;
   }
 
   return NS_OK;
 }
 
+nsresult
+RemotePrintJobParent::PrepareNextPageFD(FileDescriptor* aFd)
+{
+  PRFileDesc* prFd = nullptr;
+  nsresult rv = NS_OpenAnonymousTemporaryFile(&prFd);
+  if (NS_FAILED(rv)) {
+    return rv;
+  }
+  *aFd = FileDescriptor(
+    FileDescriptor::PlatformHandleType(PR_FileDesc2NativeHandle(prFd)));
+  mCurrentPageStream.OpenFD(prFd);
+  return NS_OK;
+}
+
 mozilla::ipc::IPCResult
-RemotePrintJobParent::RecvProcessPage(const nsCString& aPageFileName)
+RemotePrintJobParent::RecvProcessPage()
 {
-  nsresult rv = PrintPage(aPageFileName);
+  if (!mCurrentPageStream.IsOpen()) {
+    Unused << SendAbortPrint(NS_ERROR_FAILURE);
+    return IPC_OK();
+  }
+  mCurrentPageStream.Seek(0, PR_SEEK_SET);
+  nsresult rv = PrintPage(mCurrentPageStream);
+  mCurrentPageStream.Close();
 
   if (NS_FAILED(rv)) {
     Unused << SendAbortPrint(rv);
-  } else {
-    Unused << SendPageProcessed();
+    return IPC_OK();
   }
 
+  FileDescriptor fd;
+  rv = PrepareNextPageFD(&fd);
+  if (NS_FAILED(rv)) {
+    Unused << SendAbortPrint(rv);
+    return IPC_OK();
+  }
+
+  Unused << SendPageProcessed(fd);
   return IPC_OK();
 }
 
 nsresult
-RemotePrintJobParent::PrintPage(const nsCString& aPageFileName)
+RemotePrintJobParent::PrintPage(PRFileDescStream& aRecording)
 {
   MOZ_ASSERT(mPrintDeviceContext);
 
   nsresult rv = mPrintDeviceContext->BeginPage();
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return rv;
   }
-
-  nsCOMPtr<nsIFile> recordingFile;
-  rv = NS_GetSpecialDirectory(NS_APP_CONTENT_PROCESS_TEMP_DIR,
-                              getter_AddRefs(recordingFile));
-  if (NS_WARN_IF(NS_FAILED(rv))) {
-    return rv;
-  }
-
-  rv = recordingFile->AppendNative(aPageFileName);
-  if (NS_WARN_IF(NS_FAILED(rv))) {
-    return rv;
-  }
-
-  nsAutoCString recordingPath;
-  rv = recordingFile->GetNativePath(recordingPath);
-  if (NS_WARN_IF(NS_FAILED(rv))) {
-    return rv;
-  }
-
-  PRFileDescStream recording;
-  recording.Open(recordingPath.get());
-  MOZ_ASSERT(recording.IsOpen());
-  if (!mPrintTranslator->TranslateRecording(recording)) {
+  if (!mPrintTranslator->TranslateRecording(aRecording)) {
     return NS_ERROR_FAILURE;
   }
 
   rv = mPrintDeviceContext->EndPage();
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return rv;
   }
 
-  recording.Close();
-  rv = recordingFile->Remove(/* recursive= */ false);
-  if (NS_WARN_IF(NS_FAILED(rv))) {
-    return rv;
-  }
-
   return NS_OK;
 }
 
 mozilla::ipc::IPCResult
 RemotePrintJobParent::RecvFinalizePrint()
 {
   // EndDocument is sometimes called in the child even when BeginDocument has
   // not been called. See bug 1223332.
--- a/layout/printing/ipc/RemotePrintJobParent.h
+++ b/layout/printing/ipc/RemotePrintJobParent.h
@@ -3,21 +3,23 @@
 /* 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/. */
 
 #ifndef mozilla_layout_RemotePrintJobParent_h
 #define mozilla_layout_RemotePrintJobParent_h
 
 #include "mozilla/layout/PRemotePrintJobParent.h"
+#include "mozilla/layout/printing/DrawEventRecorder.h"
 
 #include "nsCOMArray.h"
 #include "nsCOMPtr.h"
 #include "mozilla/RefPtr.h"
 #include "mozilla/UniquePtr.h"
+#include "mozilla/gfx/RecordedEvent.h"
 
 class nsDeviceContext;
 class nsIPrintSettings;
 class nsIWebProgressListener;
 class PrintTranslator;
 
 namespace mozilla {
 namespace layout {
@@ -29,17 +31,17 @@ public:
 
   void ActorDestroy(ActorDestroyReason aWhy) final;
 
   mozilla::ipc::IPCResult RecvInitializePrint(const nsString& aDocumentTitle,
                                               const nsString& aPrintToFile,
                                               const int32_t& aStartPage,
                                               const int32_t& aEndPage) final;
 
-  mozilla::ipc::IPCResult RecvProcessPage(const nsCString& aPageFileName) final;
+  mozilla::ipc::IPCResult RecvProcessPage() final;
 
   mozilla::ipc::IPCResult RecvFinalizePrint() final;
 
   mozilla::ipc::IPCResult RecvAbortPrint(const nsresult& aRv) final;
 
   mozilla::ipc::IPCResult RecvStateChange(const long& aStateFlags,
                                           const nsresult& aStatus) final;
 
@@ -65,20 +67,23 @@ public:
 private:
   ~RemotePrintJobParent() final;
 
   nsresult InitializePrintDevice(const nsString& aDocumentTitle,
                                  const nsString& aPrintToFile,
                                  const int32_t& aStartPage,
                                  const int32_t& aEndPage);
 
-  nsresult PrintPage(const nsCString& aPageFileName);
+  nsresult PrepareNextPageFD(FileDescriptor* aFd);
+
+  nsresult PrintPage(PRFileDescStream& aRecording);
 
   nsCOMPtr<nsIPrintSettings> mPrintSettings;
   RefPtr<nsDeviceContext> mPrintDeviceContext;
   UniquePtr<PrintTranslator> mPrintTranslator;
   nsCOMArray<nsIWebProgressListener> mPrintProgressListeners;
+  PRFileDescStream mCurrentPageStream;
 };
 
 } // namespace layout
 } // namespace mozilla
 
 #endif // mozilla_layout_RemotePrintJobParent_h
--- a/layout/printing/nsPagePrintTimer.cpp
+++ b/layout/printing/nsPagePrintTimer.cpp
@@ -140,17 +140,18 @@ nsPagePrintTimer::Notify(nsITimer *timer
     if (mWatchDogCount > WATCH_DOG_MAX_COUNT) {
       Fail();
       return NS_OK;
     }
   }
 
   if (mDocViewerPrint) {
     bool donePrePrint = true;
-    if (mPrintEngine) {
+    // Don't start to pre-print if we're waiting on the parent still.
+    if (mPrintEngine && !mWaitingForRemotePrint) {
       donePrePrint = mPrintEngine->PrePrintPage();
     }
 
     if (donePrePrint && !mWaitingForRemotePrint) {
       StopWatchDogTimer();
       // Pass nullptr here since name already was set in constructor.
       mDocument->Dispatch(TaskCategory::Other, do_AddRef(this));
     } else {
--- a/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.cpp
+++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.cpp
@@ -45,23 +45,16 @@ namespace mozilla {
 using namespace dom;
 
 static const char* pcmLogTag = "PeerConnectionMedia";
 #ifdef LOGTAG
 #undef LOGTAG
 #endif
 #define LOGTAG pcmLogTag
 
-//XXX(pkerr) What about bitrate settings? Going with the defaults for now.
-RefPtr<WebRtcCallWrapper>
-CreateCall()
-{
-  return WebRtcCallWrapper::Create();
-}
-
 NS_IMETHODIMP PeerConnectionMedia::ProtocolProxyQueryHandler::
 OnProxyAvailable(nsICancelable *request,
                  nsIChannel *aChannel,
                  nsIProxyInfo *proxyinfo,
                  nsresult result) {
 
   if (!pcm_->mProxyRequest) {
     // PeerConnectionMedia is no longer waiting
@@ -289,19 +282,16 @@ nsresult PeerConnectionMedia::Init(const
   }
   if (NS_FAILED(rv =
       mIceCtxHdlr->ctx()->SetResolver(mDNSResolver->AllocateResolver()))) {
     CSFLogError(LOGTAG, "%s: Failed to get dns resolver", __FUNCTION__);
     return rv;
   }
   ConnectSignals(mIceCtxHdlr->ctx().get());
 
-  // This webrtc:Call instance will be shared by audio and video media conduits.
-  mCall = CreateCall();
-
   return NS_OK;
 }
 
 void
 PeerConnectionMedia::EnsureTransports(const JsepSession& aSession)
 {
   for (const auto& transceiver : aSession.GetTransceivers()) {
     if (!transceiver->HasLevel()) {
@@ -1140,16 +1130,20 @@ PeerConnectionMedia::ShutdownMediaTransp
 
 nsresult
 PeerConnectionMedia::AddTransceiver(
     JsepTransceiver* aJsepTransceiver,
     DOMMediaStream& aReceiveStream,
     dom::MediaStreamTrack* aSendTrack,
     RefPtr<TransceiverImpl>* aTransceiverImpl)
 {
+  if (!mCall) {
+    mCall = WebRtcCallWrapper::Create();
+  }
+
   RefPtr<TransceiverImpl> transceiver = new TransceiverImpl(
       mParent->GetHandle(),
       aJsepTransceiver,
       mMainThread.get(),
       mSTSThread.get(),
       aReceiveStream,
       aSendTrack,
       mCall.get());
new file mode 100644
--- /dev/null
+++ b/mobile/android/app/src/main/res/values-v21/integers.xml
@@ -0,0 +1,10 @@
+<?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/. -->
+
+<resources>
+
+    <integer name="assist_launch_icon_res">@drawable/icon</integer>
+
+</resources>
--- a/mobile/android/app/src/main/res/values/integers.xml
+++ b/mobile/android/app/src/main/res/values/integers.xml
@@ -8,10 +8,11 @@
     <integer name="number_of_top_sites">6</integer>
     <integer name="number_of_top_sites_cols">2</integer>
     <integer name="max_icon_grid_columns">4</integer>
     <integer name="panel_icon_grid_view_columns">3</integer>
     <integer name="number_of_inline_share_devices">2</integer>
     <integer name="max_search_suggestions">2</integer>
     <integer name="max_saved_suggestions">2</integer>
     <integer name="shift_duration_suggestion">500</integer>
+    <integer name="assist_launch_icon_res">0</integer>
 
 </resources>
--- a/mobile/android/base/AndroidManifest.xml.in
+++ b/mobile/android/base/AndroidManifest.xml.in
@@ -137,16 +137,32 @@
                 <action android:name="android.intent.action.WEB_SEARCH" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.BROWSABLE" />
                 <data android:scheme="" />
                 <data android:scheme="http" />
                 <data android:scheme="https" />
             </intent-filter>
 
+            <intent-filter>
+                <action android:name="android.intent.action.ASSIST"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+
+            <!-- Pre Lollipop devices display a generic search icon, if none is
+                 provided here. To use this we need to set the resource to 0.
+                 For Lollipop and later the search launcher icon ist used.
+                 To retrieve the resource value the Bundle.getInt() method is
+                 used, so we use integer resources instead of drawables, because
+                 setting a drawable referenced to 0 results in errors when used
+                 as a real drawable resource somewhere else. -->
+            <meta-data
+                android:name="com.android.systemui.action_assist_icon"
+                android:resource="@integer/assist_launch_icon_res"/>
+
             <!-- For XPI installs from websites and the download manager. -->
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:scheme="file" />
                 <data android:scheme="http" />
                 <data android:scheme="https" />
                 <data android:mimeType="application/x-xpinstall" />
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -430,25 +430,27 @@ public class BrowserApp extends GeckoApp
             case MENU_UPDATED:
                 if (Tabs.getInstance().isSelectedTab(tab)) {
                     invalidateOptionsMenu();
                 }
                 break;
             case PAGE_SHOW:
                 tab.loadFavicon();
                 break;
-
             case UNSELECTED:
                 // We receive UNSELECTED immediately after the SELECTED listeners run
                 // so we are ensured that the unselectedTabEditingText has not changed.
                 if (tab.isEditing()) {
                     // Copy to avoid constructing new objects.
                     tab.getEditingState().copyFrom(mLastTabEditingState);
                 }
                 break;
+            case START_EDITING:
+                enterEditingMode();
+                break;
         }
 
         if (HardwareUtils.isTablet() && msg == TabEvents.SELECTED) {
             updateEditingModeForTab(tab);
         }
 
         super.onTabChanged(tab, msg, data);
     }
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
@@ -1406,18 +1406,20 @@ public abstract class GeckoApp extends G
 
         mWasFirstTabShownAfterActivityUnhidden = true; // Reset since we'll be loading a tab.
 
         final SafeIntent intent = new SafeIntent(getIntent());
         final String action = intent.getAction();
 
         final String passedUri = getIntentURI(intent);
 
-        final boolean isExternalURL = passedUri != null;
-        final boolean isAboutHomeURL = isExternalURL && AboutPages.isAboutHome(passedUri);
+        final boolean intentHasURL = passedUri != null;
+        final boolean isAboutHomeURL = intentHasURL && AboutPages.isAboutHome(passedUri);
+        final boolean isAssistIntent = Intent.ACTION_ASSIST.equals(action);
+        final boolean needsNewForegroundTab = intentHasURL || isAssistIntent;
 
         // Start migrating as early as possible, can do this in
         // parallel with Gecko load.
         checkMigrateProfile();
 
         initializeChrome();
 
         // We need to wait here because mShouldRestore can revert back to
@@ -1433,24 +1435,26 @@ public abstract class GeckoApp extends G
             }
         }
 
         if (mIsRestoringActivity && hasGeckoTab(intent)) {
             Tabs.getInstance().notifyListeners(null, Tabs.TabEvents.RESTORED);
             handleSelectTabIntent(intent);
         // External URLs and new tab from widget should always be loaded regardless of whether Gecko is
         // already running.
-        } else if (isExternalURL) {
+        } else if (needsNewForegroundTab) {
             // Restore tabs before opening an external URL so that the new tab
             // is animated properly.
             Tabs.getInstance().notifyListeners(null, Tabs.TabEvents.RESTORED);
             processActionViewIntent(new Runnable() {
                 @Override
                 public void run() {
-                    if (isAboutHomeURL) {
+                    if (isAssistIntent) {
+                        Tabs.getInstance().addTab(Tabs.LOADURL_START_EDITING | Tabs.LOADURL_EXTERNAL);
+                    } else if (isAboutHomeURL) {
                         // respect the user preferences for about:home from external intent calls
                         loadStartupTab(Tabs.LOADURL_NEW_TAB, action);
                     } else {
                         final int flags = getNewTabFlags();
                         loadStartupTab(passedUri, intent, flags);
                     }
                 }
             });
@@ -1775,16 +1779,18 @@ public abstract class GeckoApp extends G
                     final String url = intent.getDataString();
                     int flags = Tabs.LOADURL_NEW_TAB | Tabs.LOADURL_USER_ENTERED | Tabs.LOADURL_EXTERNAL;
                     if (isFirstTab) {
                         flags |= Tabs.LOADURL_FIRST_AFTER_ACTIVITY_UNHIDDEN;
                     }
                     Tabs.getInstance().loadUrlWithIntentExtras(url, intent, flags);
                 }
             });
+        } else if (Intent.ACTION_ASSIST.equals(action)) {
+            Tabs.getInstance().addTab(Tabs.LOADURL_START_EDITING | Tabs.LOADURL_EXTERNAL);
         } else if (ACTION_HOMESCREEN_SHORTCUT.equals(action)) {
             final GeckoBundle data = new GeckoBundle(2);
             data.putString("uri", uri);
             data.putString("flags", "OPEN_SWITCHTAB");
             getAppEventDispatcher().dispatch("Tab:OpenUri", data);
         } else if (Intent.ACTION_SEARCH.equals(action)) {
             final GeckoBundle data = new GeckoBundle(2);
             data.putString("uri", uri);
--- a/mobile/android/base/java/org/mozilla/gecko/Tabs.java
+++ b/mobile/android/base/java/org/mozilla/gecko/Tabs.java
@@ -79,16 +79,18 @@ public class Tabs implements BundleEvent
     public static final int LOADURL_PINNED       = 1 << 3;
     public static final int LOADURL_DELAY_LOAD   = 1 << 4;
     public static final int LOADURL_DESKTOP      = 1 << 5;
     public static final int LOADURL_BACKGROUND   = 1 << 6;
     /** Indicates the url has been specified by a source external to the app. */
     public static final int LOADURL_EXTERNAL     = 1 << 7;
     /** Indicates the tab is the first shown after Firefox is hidden and restored. */
     public static final int LOADURL_FIRST_AFTER_ACTIVITY_UNHIDDEN = 1 << 8;
+    /** Indicates that we should enter editing mode after opening the tab. */
+    public static final int LOADURL_START_EDITING = 1 << 9;
 
     private static final long PERSIST_TABS_AFTER_MILLISECONDS = 1000 * 2;
 
     public static final int INVALID_TAB_ID = -1;
     // Used to indicate a new tab should be appended to the current tabs.
     public static final int NEW_LAST_INDEX = -1;
 
     private static final AtomicInteger sTabId = new AtomicInteger(0);
@@ -753,17 +755,18 @@ public class Tabs implements BundleEvent
         SECURITY_CHANGE,
         DESKTOP_MODE_CHANGE,
         RECORDING_CHANGE,
         BOOKMARK_ADDED,
         BOOKMARK_REMOVED,
         AUDIO_PLAYING_CHANGE,
         OPENED_FROM_TABS_TRAY,
         MEDIA_PLAYING_CHANGE,
-        MEDIA_PLAYING_RESUME
+        MEDIA_PLAYING_RESUME,
+        START_EDITING,
     }
 
     public void notifyListeners(Tab tab, TabEvents msg) {
         notifyListeners(tab, msg, "");
     }
 
     public void notifyListeners(final Tab tab, final TabEvents msg, final String data) {
         if (tab == null &&
@@ -982,16 +985,17 @@ public class Tabs implements BundleEvent
         // delayLoad implies background tab
         boolean background = delayLoad || (flags & LOADURL_BACKGROUND) != 0;
 
         boolean isPrivate = (flags & LOADURL_PRIVATE) != 0 || (intent != null && intent.getBooleanExtra(PRIVATE_TAB_INTENT_EXTRA, false));
         boolean userEntered = (flags & LOADURL_USER_ENTERED) != 0;
         boolean desktopMode = (flags & LOADURL_DESKTOP) != 0;
         boolean external = (flags & LOADURL_EXTERNAL) != 0;
         final boolean isFirstShownAfterActivityUnhidden = (flags & LOADURL_FIRST_AFTER_ACTIVITY_UNHIDDEN) != 0;
+        final boolean startEditing = (flags & LOADURL_START_EDITING) != 0;
 
         data.putString("url", url);
         data.putString("engine", searchEngine);
         data.putInt("parentId", parentId);
         data.putBoolean("userEntered", userEntered);
         data.putBoolean("isPrivate", isPrivate);
         data.putBoolean("pinned", (flags & LOADURL_PINNED) != 0);
         data.putBoolean("desktopMode", desktopMode);
@@ -1060,36 +1064,50 @@ public class Tabs implements BundleEvent
         if (tabToSelect == null) {
             return null;
         }
 
         if (!delayLoad && !background) {
             selectTab(tabToSelect.getId());
         }
 
+        if (startEditing) {
+            notifyListeners(tabToSelect, TabEvents.START_EDITING);
+        }
+
         // Load favicon instantly for about:home page because it's already cached
         if (AboutPages.isBuiltinIconPage(url)) {
             tabToSelect.loadFavicon();
         }
 
-
         return tabToSelect;
     }
 
     /**
-     * Opens a new tab and loads either about:home or, if PREFS_HOMEPAGE_FOR_EVERY_NEW_TAB is set,
-     * the user's homepage.
+     * Opens a new tab and loads a page according to the user's preferences (by default about:home).
      */
     @RobocopTarget
     public Tab addTab() {
-        return loadUrl(getHomepageForNewTab(mAppContext), Tabs.LOADURL_NEW_TAB);
+        return addTab(Tabs.LOADURL_NONE);
     }
 
+    /**
+     * Opens a new tab and loads a page according to the user's preferences (by default about:home).
+     */
     public Tab addPrivateTab() {
-        return loadUrl(getHomepageForNewTab(mAppContext), Tabs.LOADURL_NEW_TAB | Tabs.LOADURL_PRIVATE);
+        return addTab(Tabs.LOADURL_PRIVATE);
+    }
+
+    /**
+     * Opens a new tab and loads a page according to the user's preferences (by default about:home).
+     *
+     * @param flags additional flags used when opening the tab
+     */
+    public Tab addTab(int flags) {
+        return loadUrl(getHomepageForNewTab(mAppContext), flags | Tabs.LOADURL_NEW_TAB);
     }
 
     /**
      * Open the url as a new tab, and mark the selected tab as its "parent".
      *
      * If the url is already open in a tab, the existing tab is selected.
      * Use this for tabs opened by the browser chrome, so users can press the
      * "Back" button to return to the previous tab.
--- a/mobile/android/base/java/org/mozilla/gecko/restrictions/RestrictionProvider.java
+++ b/mobile/android/base/java/org/mozilla/gecko/restrictions/RestrictionProvider.java
@@ -33,22 +33,22 @@ public class RestrictionProvider extends
         }
 
         final PendingResult result = goAsync();
 
         new Thread() {
             @Override
             public void run() {
                 final Bundle oldRestrictions = intent.getBundleExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE);
-                RestrictionCache.migrateRestrictionsIfNeeded(oldRestrictions);
-
                 final Bundle extras = new Bundle();
-
-                ArrayList<RestrictionEntry> entries = initRestrictions(context, oldRestrictions);
-                extras.putParcelableArrayList(Intent.EXTRA_RESTRICTIONS_LIST, entries);
+                if (oldRestrictions != null) {
+                    RestrictionCache.migrateRestrictionsIfNeeded(oldRestrictions);
+                    ArrayList<RestrictionEntry> entries = initRestrictions(context, oldRestrictions);
+                    extras.putParcelableArrayList(Intent.EXTRA_RESTRICTIONS_LIST, entries);
+                }
 
                 result.setResult(Activity.RESULT_OK, null, extras);
                 result.finish();
             }
         }.start();
     }
 
     private ArrayList<RestrictionEntry> initRestrictions(Context context, Bundle oldRestrictions) {
--- a/mobile/android/components/NSSDialogService.js
+++ b/mobile/android/components/NSSDialogService.js
@@ -87,32 +87,30 @@ NSSDialogs.prototype = {
       let prompt = this.getPrompt(this.getString("downloadCert.title"),
                                   this.getString("downloadCert.message1"),
                                   [ this.getString("nssdialogs.ok.label"),
                                     this.getString("downloadCert.viewCert.label"),
                                     this.getString("nssdialogs.cancel.label")
                                   ], aCtx);
 
       prompt.addCheckbox({ id: "trustSSL", label: this.getString("downloadCert.trustSSL"), checked: false })
-            .addCheckbox({ id: "trustEmail", label: this.getString("downloadCert.trustEmail"), checked: false })
-            .addCheckbox({ id: "trustSign", label: this.getString("downloadCert.trustObjSign"), checked: false });
+            .addCheckbox({ id: "trustEmail", label: this.getString("downloadCert.trustEmail"), checked: false });
       let response = this.showPrompt(prompt);
 
       // they hit the "view cert" button, so show the cert and try again
       if (response.button == 1) {
         this.viewCert(aCtx, aCert);
         continue;
       } else if (response.button != 0) {
         return false;
       }
 
       aTrust.value = Ci.nsIX509CertDB.UNTRUSTED;
       if (response.trustSSL) aTrust.value |= Ci.nsIX509CertDB.TRUSTED_SSL;
       if (response.trustEmail) aTrust.value |= Ci.nsIX509CertDB.TRUSTED_EMAIL;
-      if (response.trustSign) aTrust.value |= Ci.nsIX509CertDB.TRUSTED_OBJSIGN;
       return true;
     }
   },
 
   setPKCS12FilePassword: function(aCtx, aPassword) {
     // this dialog is never shown in Fennec; in Desktop it is shown while backing up a personal
     // certificate to a file via Preferences->Advanced->Encryption->View Certificates->Your Certificates
     throw "Unimplemented";
--- a/mobile/android/locales/en-US/chrome/pippki.properties
+++ b/mobile/android/locales/en-US/chrome/pippki.properties
@@ -6,17 +6,16 @@ nssdialogs.ok.label=OK
 nssdialogs.cancel.label=Cancel
 
 # These strings are stolen from security/manager/locales/en-US/chrome/pippki/pippki.dtd
 downloadCert.title=Downloading Certificate
 downloadCert.message1=You have been asked to trust a new Certificate Authority (CA).
 downloadCert.viewCert.label=View
 downloadCert.trustSSL=Trust to identify websites.
 downloadCert.trustEmail=Trust to identify email users.
-downloadCert.trustObjSign=Trust to identify software developers.
 pkcs12.getpassword.title=Password Entry Dialog
 pkcs12.getpassword.message=Please enter the password that was used to encrypt this certificate backup.
 clientAuthAsk.title=User Identification Request
 clientAuthAsk.message1=This site has requested that you identify yourself with a certificate:
 clientAuthAsk.message2=Choose a certificate to present as identification:
 clientAuthAsk.message3=Details of selected certificate:
 clientAuthAsk.remember.label=Remember this decision
 # LOCALIZATION NOTE(clientAuthAsk.nickAndSerial): Represents a single cert when
--- a/mobile/android/tests/browser/robocop/robocop.ini
+++ b/mobile/android/tests/browser/robocop/robocop.ini
@@ -6,16 +6,18 @@ subsuite = robocop
 [src/org/mozilla/gecko/tests/testActivityStreamContextMenu.java]
 [src/org/mozilla/gecko/tests/testAddonManager.java]
 # disabled on 4.3, bug 1144918
 skip-if = android_version == "18"
 [src/org/mozilla/gecko/tests/testAddSearchEngine.java]
 # disabled on 4.3, bug 1120759
 skip-if = android_version == "18"
 [src/org/mozilla/gecko/tests/testANRReporter.java]
+[src/org/mozilla/gecko/tests/testAssistIntentNewIntent.java]
+[src/org/mozilla/gecko/tests/testAssistIntentStartup.java]
 [src/org/mozilla/gecko/tests/testAudioFocus.java]
 [src/org/mozilla/gecko/tests/testMediaControl.java]
 skip-if = android_version < "23"
 [src/org/mozilla/gecko/tests/testAxisLocking.java]
 skip-if = true # Bug 1390059
 [src/org/mozilla/gecko/tests/testBookmark.java]
 disabled=see bug 915350
 [src/org/mozilla/gecko/tests/testBookmarksPanel.java]
new file mode 100644
--- /dev/null
+++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/AssistIntentTest.java
@@ -0,0 +1,29 @@
+package org.mozilla.gecko.tests;
+
+import android.content.Intent;
+
+import org.mozilla.gecko.tests.helpers.GeckoHelper;
+
+public class AssistIntentTest extends SessionTest {
+    @Override
+    public void setActivityIntent(Intent intent) {
+        // We want to make sure that we have opened a new tab, so we're creating a session
+        // where the default selected tab will *not* be about:home.
+        Session session = createTestSession(/*selected tab*/ 1);
+        injectSessionToRestore(intent, session);
+
+        super.setActivityIntent(intent);
+    }
+
+    protected void verifyAssistIntentHandling() {
+        // After an ACTION_ASSIST intent, we should be in editing mode...
+        mToolbar.assertIsEditing();
+
+        // ... the input field should be empty in readiness for the user to type...
+        mToolbar.assertUrl("");
+
+        // ... and we should have opened a new tab in addition to those from the "restored" session.
+        mToolbar.dismissEditingMode();
+        mToolbar.assertTitle(mStringHelper.ABOUT_HOME_URL);
+    }
+}
--- a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/components/ToolbarComponent.java
+++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/components/ToolbarComponent.java
@@ -70,17 +70,17 @@ public class ToolbarComponent extends Ba
         // Since we only display a shortened "base domain" (See bug 1236431) we use the content
         // description to obtain the full URL.
         fAssertEquals("The Toolbar title is " + expected, expected, getUrlFromContentDescription());
         return this;
     }
 
     public ToolbarComponent assertUrl(final String expected) {
         assertIsEditing();
-        fAssertEquals("The Toolbar url is " + expected, expected, getUrlEditText().getText());
+        fAssertEquals("The Toolbar url is " + expected, expected, getUrlEditText().getText().toString());
         return this;
     }
 
     public ToolbarComponent assertIsUrlEditTextSelected() {
         fAssertTrue("The edit text is selected", isUrlEditTextSelected());
         return this;
     }
 
new file mode 100644
--- /dev/null
+++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testAssistIntentNewIntent.java
@@ -0,0 +1,28 @@
+package org.mozilla.gecko.tests;
+
+import android.content.Context;
+import android.content.Intent;
+
+import org.mozilla.gecko.AppConstants;
+import org.mozilla.gecko.tests.helpers.GeckoHelper;
+import org.mozilla.gecko.tests.helpers.WaitHelper;
+
+public class testAssistIntentNewIntent extends AssistIntentTest {
+    public void testAssistIntentNewIntent() {
+        GeckoHelper.blockForReady();
+
+        final Context testContext = getInstrumentation().getContext();
+        final Intent assistIntent = new Intent(Intent.ACTION_ASSIST);
+        assistIntent.setPackage(AppConstants.ANDROID_PACKAGE_NAME);
+        assistIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+        WaitHelper.waitForPageLoad(new Runnable() {
+            @Override
+            public void run() {
+                testContext.startActivity(assistIntent);
+            }
+        });
+
+        verifyAssistIntentHandling();
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testAssistIntentStartup.java
@@ -0,0 +1,20 @@
+package org.mozilla.gecko.tests;
+
+import android.content.Intent;
+
+import org.mozilla.gecko.tests.helpers.GeckoHelper;
+
+public class testAssistIntentStartup extends AssistIntentTest {
+    @Override
+    public void setActivityIntent(Intent intent) {
+        intent.setAction(Intent.ACTION_ASSIST);
+
+        super.setActivityIntent(intent);
+    }
+
+    public void testAssistIntentStartup() {
+        GeckoHelper.blockForReady();
+
+        verifyAssistIntentHandling();
+    }
+}
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -2286,16 +2286,17 @@ pref("converter.html2txt.header_strategy
 pref("converter.html2txt.always_include_ruby", false);
 
 pref("intl.accept_languages",               "chrome://global/locale/intl.properties");
 pref("intl.menuitems.alwaysappendaccesskeys","chrome://global/locale/intl.properties");
 pref("intl.menuitems.insertseparatorbeforeaccesskeys","chrome://global/locale/intl.properties");
 pref("intl.charset.detector",               "chrome://global/locale/intl.properties");
 pref("intl.charset.fallback.override",      "");
 pref("intl.charset.fallback.tld",           true);
+pref("intl.charset.fallback.utf8_for_file", false);
 pref("intl.ellipsis",                       "chrome://global-platform/locale/intl.properties");
 pref("intl.locale.matchOS",                 false);
 // this pref allows user to request that all internationalization formatters
 // like date/time formatting, unit formatting, calendars etc. should use
 // OS locale set instead of the app locale set.
 pref("intl.regional_prefs.use_os_locales",  false);
 // fallback charset list for Unicode conversion (converting from Unicode)
 // currently used for mail send only to handle symbol characters (e.g Euro, trademark, smartquotes)
--- a/security/manager/locales/en-US/chrome/pippki/certManager.dtd
+++ b/security/manager/locales/en-US/chrome/pippki/certManager.dtd
@@ -33,17 +33,16 @@
 <!ENTITY certmgr.certdetail.serialnumber      "Serial Number">
 <!ENTITY certmgr.certdetail.sha256fingerprint "SHA-256 Fingerprint">
 <!ENTITY certmgr.certdetail.sha1fingerprint   "SHA1 Fingerprint">
 
 <!ENTITY certmgr.editcacert.title             "Edit CA certificate trust settings">
 <!ENTITY certmgr.editcert.edittrust           "Edit trust settings:">
 <!ENTITY certmgr.editcert.trustssl            "This certificate can identify websites.">
 <!ENTITY certmgr.editcert.trustemail          "This certificate can identify mail users.">
-<!ENTITY certmgr.editcert.trustobjsign        "This certificate can identify software makers.">
 
 <!ENTITY certmgr.deletecert.title             "Delete Certificate">
 
 <!ENTITY certmgr.certname                     "Certificate Name">
 <!ENTITY certmgr.certserver                   "Server">
 <!ENTITY certmgr.override_lifetime            "Lifetime">
 <!ENTITY certmgr.tokenname                    "Security Device">
 <!ENTITY certmgr.begins                       "Begins On">
--- a/security/manager/locales/en-US/chrome/pippki/pippki.dtd
+++ b/security/manager/locales/en-US/chrome/pippki/pippki.dtd
@@ -15,17 +15,16 @@
 <!ENTITY resetPassword.title  "Reset Master Password">
 <!ENTITY resetPassword.text  "If you reset your master password, all your stored web and e-mail passwords, form data, personal certificates, and private keys will be forgotten. Are you sure you want to reset your master password?">
 
 <!-- Downloading a cert -->
 <!ENTITY downloadCert.title "Downloading Certificate">
 <!ENTITY downloadCert.message1 "You have been asked to trust a new Certificate Authority (CA).">
 <!ENTITY downloadCert.trustSSL "Trust this CA to identify websites.">
 <!ENTITY downloadCert.trustEmail "Trust this CA to identify email users.">
-<!ENTITY downloadCert.trustObjSign "Trust this CA to identify software developers.">
 <!ENTITY downloadCert.message3 "Before trusting this CA for any purpose, you should examine its certificate and its policy and procedures (if available).">
 <!ENTITY downloadCert.viewCert.label "View">
 <!ENTITY downloadCert.viewCert.text "Examine CA certificate">
 
 <!-- Strings for the SSL client auth ask dialog -->
 <!ENTITY clientAuthAsk.title "User Identification Request">
 <!ENTITY clientAuthAsk.message1 "This site has requested that you identify yourself with a certificate:">
 <!ENTITY clientAuthAsk.message2 "Choose a certificate to present as identification:">
--- a/security/manager/pki/nsNSSDialogs.cpp
+++ b/security/manager/pki/nsNSSDialogs.cpp
@@ -148,26 +148,19 @@ nsNSSDialogs::ConfirmDownloadCACert(nsII
     return rv;
   }
   bool trustForEmail = false;
   rv = retVals->GetPropertyAsBool(NS_LITERAL_STRING("trustForEmail"),
                                   &trustForEmail);
   if (NS_FAILED(rv)) {
     return rv;
   }
-  bool trustForObjSign = false;
-  rv = retVals->GetPropertyAsBool(NS_LITERAL_STRING("trustForObjSign"),
-                                  &trustForObjSign);
-  if (NS_FAILED(rv)) {
-    return rv;
-  }
 
   *trust |= trustForSSL ? nsIX509CertDB::TRUSTED_SSL : 0;
   *trust |= trustForEmail ? nsIX509CertDB::TRUSTED_EMAIL : 0;
-  *trust |= trustForObjSign ? nsIX509CertDB::TRUSTED_OBJSIGN : 0;
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsNSSDialogs::ChooseCertificate(nsIInterfaceRequestor* ctx,
                                 const nsACString& hostname,
                                 int32_t port,
--- a/security/manager/pki/resources/content/downloadcert.js
+++ b/security/manager/pki/resources/content/downloadcert.js
@@ -22,19 +22,16 @@
  *           Set to true if the user confirmed import of the cert and accepted
  *           the dialog, false otherwise.
  * @property {Boolean} trustForSSL
  *           Set to true if the cert should be trusted for SSL, false otherwise.
  *           Undefined value if |importConfirmed| is not true.
  * @property {Boolean} trustForEmail
  *           Set to true if the cert should be trusted for e-mail, false
  *           otherwise. Undefined value if |importConfirmed| is not true.
- * @property {Boolean} trustForObjSign
- *           Set to true if the cert should be trusted for object signing, false
- *           otherwise. Undefined value if |importConfirmed| is not true.
  */
 
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 /**
  * The cert to potentially import.
  * @type nsIX509Cert
  */
@@ -65,23 +62,21 @@ function viewCert() {
 /**
  * ondialogaccept() handler.
  *
  * @returns {Boolean} true to make the dialog close, false otherwise.
  */
 function onDialogAccept() {
   let checkSSL = document.getElementById("trustSSL");
   let checkEmail = document.getElementById("trustEmail");
-  let checkObjSign = document.getElementById("trustObjSign");
 
   let retVals = window.arguments[1].QueryInterface(Ci.nsIWritablePropertyBag2);
   retVals.setPropertyAsBool("importConfirmed", true);
   retVals.setPropertyAsBool("trustForSSL", checkSSL.checked);
   retVals.setPropertyAsBool("trustForEmail", checkEmail.checked);
-  retVals.setPropertyAsBool("trustForObjSign", checkObjSign.checked);
   return true;
 }
 
 /**
  * ondialogcancel() handler.
  *
  * @returns {Boolean} true to make the dialog close, false otherwise.
  */
--- a/security/manager/pki/resources/content/downloadcert.xul
+++ b/security/manager/pki/resources/content/downloadcert.xul
@@ -28,26 +28,23 @@
   </vbox>
 
   <separator/>
 
   <!--  checkboxes for trust bits
      -  "do you want to?"
      -  * trust for SSL
      -  * trust for email
-     -  * trust for object signing
     -->
   <vbox>
     <description id="trustHeader"/>
     <checkbox label="&downloadCert.trustSSL;"
               id="trustSSL"/>
     <checkbox label="&downloadCert.trustEmail;"
               id="trustEmail"/>
-    <checkbox label="&downloadCert.trustObjSign;"
-              id="trustObjSign"/>
   </vbox>
 
   <separator/>
 
   <vbox>
     <description>&downloadCert.message3;</description>
     <separator/>
     <grid>
--- a/security/manager/pki/resources/content/editcacert.js
+++ b/security/manager/pki/resources/content/editcacert.js
@@ -26,33 +26,24 @@ function onLoad() {
 
   let sslCheckbox = document.getElementById("trustSSL");
   sslCheckbox.checked = gCertDB.isCertTrusted(gCert, Ci.nsIX509Cert.CA_CERT,
                                               Ci.nsIX509CertDB.TRUSTED_SSL);
 
   let emailCheckbox = document.getElementById("trustEmail");
   emailCheckbox.checked = gCertDB.isCertTrusted(gCert, Ci.nsIX509Cert.CA_CERT,
                                                 Ci.nsIX509CertDB.TRUSTED_EMAIL);
-
-  let objSignCheckbox = document.getElementById("trustObjSign");
-  objSignCheckbox.checked =
-    gCertDB.isCertTrusted(gCert, Ci.nsIX509Cert.CA_CERT,
-                          Ci.nsIX509CertDB.TRUSTED_OBJSIGN);
 }
 
 /**
  * ondialogaccept() handler.
  *
  * @returns {Boolean} true to make the dialog close, false otherwise.
  */
 function onDialogAccept() {
   let sslCheckbox = document.getElementById("trustSSL");
   let emailCheckbox = document.getElementById("trustEmail");
-  let objSignCheckbox = document.getElementById("trustObjSign");
   let trustSSL = sslCheckbox.checked ? Ci.nsIX509CertDB.TRUSTED_SSL : 0;
   let trustEmail = emailCheckbox.checked ? Ci.nsIX509CertDB.TRUSTED_EMAIL : 0;
-  let trustObjSign = objSignCheckbox.checked ? Ci.nsIX509CertDB.TRUSTED_OBJSIGN
-                                             : 0;
 
-  gCertDB.setCertTrust(gCert, Ci.nsIX509Cert.CA_CERT,
-                       trustSSL | trustEmail | trustObjSign);
+  gCertDB.setCertTrust(gCert, Ci.nsIX509Cert.CA_CERT, trustSSL | trustEmail);
   return true;
 }
--- a/security/manager/pki/resources/content/editcacert.xul
+++ b/security/manager/pki/resources/content/editcacert.xul
@@ -24,13 +24,11 @@
   <description id="certmsg"/>
   <separator/>
   <description>&certmgr.editcert.edittrust;</description>
   <vbox align="start">
     <checkbox label="&certmgr.editcert.trustssl;"
               id="trustSSL"/>
     <checkbox label="&certmgr.editcert.trustemail;"
               id="trustEmail"/>
-    <checkbox label="&certmgr.editcert.trustobjsign;"
-              id="trustObjSign"/>
   </vbox>
 
 </dialog>
--- a/security/manager/ssl/nsIX509CertDB.idl
+++ b/security/manager/ssl/nsIX509CertDB.idl
@@ -62,17 +62,16 @@ interface nsIX509CertDB : nsISupports {
 
   /**
    *  Constants that define which usages a certificate
    *  is trusted for.
    */
   const unsigned long UNTRUSTED       =      0;
   const unsigned long TRUSTED_SSL     = 1 << 0;
   const unsigned long TRUSTED_EMAIL   = 1 << 1;
-  const unsigned long TRUSTED_OBJSIGN = 1 << 2;
 
   /**
    *  Will find a certificate based on its dbkey
    *  retrieved by getting the dbKey attribute of
    *  the certificate.
    *
    *  @param aDBkey Database internal key, as obtained using
    *                attribute dbkey in nsIX509Cert.
@@ -150,18 +149,21 @@ interface nsIX509CertDB : nsISupports {
   [must_use]
   void setCertTrust(in nsIX509Cert cert,
                     in unsigned long type,
                     in unsigned long trust);
 
   /**
    * @param cert        The certificate for which to modify trust.
    * @param trustString decoded by CERT_DecodeTrustString. 3 comma separated
-   *                    characters, indicating SSL, Email, and Obj signing
-   *                    trust.
+   *                    characters, indicating SSL, Email, and Object signing
+   *                    trust. The object signing trust flags are effectively
+   *                    ignored by gecko, but they still must be specified (at
+   *                    least by a final trailing comma) because this argument
+   *                    is passed to CERT_DecodeTrustString.
    */
   [must_use]
   void setCertTrustFromString(in nsIX509Cert cert, in ACString trustString);
 
   /**
    *  Query whether a certificate is trusted for a particular use.
    *
    *  @param cert Obtain the stored trust of this certificate.
@@ -279,17 +281,20 @@ interface nsIX509CertDB : nsISupports {
 
   /*
    * Add a cert to a cert DB from a binary string.
    *
    * @param certDER The raw DER encoding of a certificate.
    * @param trust String describing the trust settings to assign the
    *              certificate. Decoded by CERT_DecodeTrustString. Consists of 3
    *              comma separated sets of characters, indicating SSL, Email, and
-   *              Object signing trust.
+   *              Object signing trust. The object signing trust flags are
+   *              effectively ignored by gecko, but they still must be specified
+   *              (at least by a final trailing comma) because this argument is
+   *              passed to CERT_DecodeTrustString.
    * @return nsIX509Cert the resulting certificate
    */
   [must_use]
   nsIX509Cert addCert(in ACString certDER, in ACString trust);
 
   // Flags for verifyCertNow (these must match the values in CertVerifier.cpp):
   // Prevent network traffic. Doesn't work with classic verification.
   const uint32_t FLAG_LOCAL_ONLY = 1 << 0;
@@ -354,17 +359,20 @@ interface nsIX509CertDB : nsISupports {
 
   /*
    * Add a cert to a cert DB from a base64 encoded string.
    *
    * @param base64 The raw representation of a certificate, encoded as Base 64.
    * @param trust String describing the trust settings to assign the
    *              certificate. Decoded by CERT_DecodeTrustString. Consists of 3
    *              comma separated sets of characters, indicating SSL, Email, and
-   *              Object signing trust.
+   *              Object signing trust. The object signing trust flags are
+   *              effectively ignored by gecko, but they still must be specified
+   *              (at least by a final trailing comma) because this argument is
+   *              passed to CERT_DecodeTrustString.
    * @return nsIX509Cert the resulting certificate
    */
   [must_use]
   nsIX509Cert addCertFromBase64(in ACString base64, in ACString trust);
 
   /*
    * Get all the known certs in the database
    */
--- a/security/manager/ssl/nsNSSCertHelper.cpp
+++ b/security/manager/ssl/nsNSSCertHelper.cpp
@@ -2034,19 +2034,19 @@ nsNSSCertificate::CreateASN1Struct(nsIAS
 uint32_t
 getCertType(CERTCertificate* cert)
 {
   nsNSSCertTrust trust(cert->trust);
   if (cert->nickname && trust.HasAnyUser())
     return nsIX509Cert::USER_CERT;
   if (trust.HasAnyCA())
     return nsIX509Cert::CA_CERT;
-  if (trust.HasPeer(true, false, false))
+  if (trust.HasPeer(true, false))
     return nsIX509Cert::SERVER_CERT;
-  if (trust.HasPeer(false, true, false) && cert->emailAddr)
+  if (trust.HasPeer(false, true) && cert->emailAddr)
     return nsIX509Cert::EMAIL_CERT;
   if (CERT_IsCACert(cert, nullptr))
     return nsIX509Cert::CA_CERT;
   if (cert->emailAddr)
     return nsIX509Cert::EMAIL_CERT;
   return nsIX509Cert::UNKNOWN_CERT;
 }
 
--- a/security/manager/ssl/nsNSSCertTrust.cpp
+++ b/security/manager/ssl/nsNSSCertTrust.cpp
@@ -1,55 +1,46 @@
 /* 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/. */
 
 #include "nsNSSCertTrust.h"
 
 void
-nsNSSCertTrust::AddCATrust(bool ssl, bool email, bool objSign)
+nsNSSCertTrust::AddCATrust(bool ssl, bool email)
 {
   if (ssl) {
     addTrust(&mTrust.sslFlags, CERTDB_TRUSTED_CA);
     addTrust(&mTrust.sslFlags, CERTDB_TRUSTED_CLIENT_CA);
   }
   if (email) {
     addTrust(&mTrust.emailFlags, CERTDB_TRUSTED_CA);
     addTrust(&mTrust.emailFlags, CERTDB_TRUSTED_CLIENT_CA);
   }
-  if (objSign) {
-    addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED_CA);
-    addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED_CLIENT_CA);
-  }
 }
 
 void
-nsNSSCertTrust::AddPeerTrust(bool ssl, bool email, bool objSign)
+nsNSSCertTrust::AddPeerTrust(bool ssl, bool email)
 {
   if (ssl)
     addTrust(&mTrust.sslFlags, CERTDB_TRUSTED);
   if (email)
     addTrust(&mTrust.emailFlags, CERTDB_TRUSTED);
-  if (objSign)
-    addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED);
 }
 
 nsNSSCertTrust::nsNSSCertTrust()
 {
   memset(&mTrust, 0, sizeof(CERTCertTrust));
 }
 
-nsNSSCertTrust::nsNSSCertTrust(unsigned int ssl,
-                               unsigned int email,
-                               unsigned int objsign)
+nsNSSCertTrust::nsNSSCertTrust(unsigned int ssl, unsigned int email)
 {
   memset(&mTrust, 0, sizeof(CERTCertTrust));
   addTrust(&mTrust.sslFlags, ssl);
   addTrust(&mTrust.emailFlags, email);
-  addTrust(&mTrust.objectSigningFlags, objsign);
 }
 
 nsNSSCertTrust::nsNSSCertTrust(CERTCertTrust *t)
 {
   if (t)
     memcpy(&mTrust, t, sizeof(CERTCertTrust));
   else
     memset(&mTrust, 0, sizeof(CERTCertTrust));
@@ -99,129 +90,86 @@ nsNSSCertTrust::SetEmailTrust(bool peer,
     addTrust(&mTrust.emailFlags, CERTDB_TRUSTED_CA);
   if (user)
     addTrust(&mTrust.emailFlags, CERTDB_USER);
   if (warn)
     addTrust(&mTrust.emailFlags, CERTDB_SEND_WARN);
 }
 
 void
-nsNSSCertTrust::SetObjSignTrust(bool peer, bool tPeer,
-                                bool ca,   bool tCA, bool tClientCA,
-                                bool user, bool warn)
-{
-  mTrust.objectSigningFlags = 0;
-  if (peer || tPeer)
-    addTrust(&mTrust.objectSigningFlags, CERTDB_TERMINAL_RECORD);
-  if (tPeer)
-    addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED);
-  if (ca || tCA)
-    addTrust(&mTrust.objectSigningFlags, CERTDB_VALID_CA);
-  if (tClientCA)
-    addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED_CLIENT_CA);
-  if (tCA)
-    addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED_CA);
-  if (user)
-    addTrust(&mTrust.objectSigningFlags, CERTDB_USER);
-  if (warn)
-    addTrust(&mTrust.objectSigningFlags, CERTDB_SEND_WARN);
-}
-
-void
 nsNSSCertTrust::SetValidCA()
 {
   SetSSLTrust(false, false,
               true, false, false,
               false, false);
   SetEmailTrust(false, false,
                 true, false, false,
                 false, false);
-  SetObjSignTrust(false, false,
-                  true, false, false,
-                  false, false);
 }
 
 void
 nsNSSCertTrust::SetValidPeer()
 {
   SetSSLTrust(true, false,
               false, false, false,
               false, false);
   SetEmailTrust(true, false,
                 false, false, false,
                 false, false);
-  SetObjSignTrust(true, false,
-                  false, false, false,
-                  false, false);
 }
 
 bool
 nsNSSCertTrust::HasAnyCA()
 {
   if (hasTrust(mTrust.sslFlags, CERTDB_VALID_CA) ||
       hasTrust(mTrust.emailFlags, CERTDB_VALID_CA) ||
       hasTrust(mTrust.objectSigningFlags, CERTDB_VALID_CA))
     return true;
   return false;
 }
 
 bool
-nsNSSCertTrust::HasPeer(bool checkSSL,
-                        bool checkEmail,
-                        bool checkObjSign)
+nsNSSCertTrust::HasPeer(bool checkSSL, bool checkEmail)
 {
   if (checkSSL && !hasTrust(mTrust.sslFlags, CERTDB_TERMINAL_RECORD))
     return false;
   if (checkEmail && !hasTrust(mTrust.emailFlags, CERTDB_TERMINAL_RECORD))
     return false;
-  if (checkObjSign && !hasTrust(mTrust.objectSigningFlags, CERTDB_TERMINAL_RECORD))
-    return false;
   return true;
 }
 
 bool
 nsNSSCertTrust::HasAnyUser()
 {
   if (hasTrust(mTrust.sslFlags, CERTDB_USER) ||
       hasTrust(mTrust.emailFlags, CERTDB_USER) ||
       hasTrust(mTrust.objectSigningFlags, CERTDB_USER))
     return true;
   return false;
 }
 
 bool
-nsNSSCertTrust::HasTrustedCA(bool checkSSL,
-                             bool checkEmail,
-                             bool checkObjSign)
+nsNSSCertTrust::HasTrustedCA(bool checkSSL, bool checkEmail)
 {
   if (checkSSL && !(hasTrust(mTrust.sslFlags, CERTDB_TRUSTED_CA) ||
                     hasTrust(mTrust.sslFlags, CERTDB_TRUSTED_CLIENT_CA)))
     return false;
   if (checkEmail && !(hasTrust(mTrust.emailFlags, CERTDB_TRUSTED_CA) ||
                       hasTrust(mTrust.emailFlags, CERTDB_TRUSTED_CLIENT_CA)))
     return false;
-  if (checkObjSign &&
-       !(hasTrust(mTrust.objectSigningFlags, CERTDB_TRUSTED_CA) ||
-         hasTrust(mTrust.objectSigningFlags, CERTDB_TRUSTED_CLIENT_CA)))
-    return false;
   return true;
 }
 
 bool
-nsNSSCertTrust::HasTrustedPeer(bool checkSSL,
-                               bool checkEmail,
-                               bool checkObjSign)
+nsNSSCertTrust::HasTrustedPeer(bool checkSSL, bool checkEmail)
 {
   if (checkSSL && !(hasTrust(mTrust.sslFlags, CERTDB_TRUSTED)))
     return false;
   if (checkEmail && !(hasTrust(mTrust.emailFlags, CERTDB_TRUSTED)))
     return false;
-  if (checkObjSign &&
-       !(hasTrust(mTrust.objectSigningFlags, CERTDB_TRUSTED)))
-    return false;
   return true;
 }
 
 void
 nsNSSCertTrust::addTrust(unsigned int *t, unsigned int v)
 {
   *t |= v;
 }
--- a/security/manager/ssl/nsNSSCertTrust.h
+++ b/security/manager/ssl/nsNSSCertTrust.h
@@ -10,32 +10,26 @@
 
 /*
  * Class for maintaining trust flags for an NSS certificate.
  */
 class nsNSSCertTrust
 {
 public:
   nsNSSCertTrust();
-  nsNSSCertTrust(unsigned int ssl, unsigned int email, unsigned int objsign);
+  nsNSSCertTrust(unsigned int ssl, unsigned int email);
   explicit nsNSSCertTrust(CERTCertTrust *t);
   virtual ~nsNSSCertTrust();
 
   /* query */
   bool HasAnyCA();
   bool HasAnyUser();
-  bool HasPeer(bool checkSSL = true,
-                 bool checkEmail = true,
-                 bool checkObjSign = true);
-  bool HasTrustedCA(bool checkSSL = true,
-                      bool checkEmail = true,
-                      bool checkObjSign = true);
-  bool HasTrustedPeer(bool checkSSL = true,
-                        bool checkEmail = true,
-                        bool checkObjSign = true);
+  bool HasPeer(bool checkSSL = true, bool checkEmail = true);
+  bool HasTrustedCA(bool checkSSL = true, bool checkEmail = true);
+  bool HasTrustedPeer(bool checkSSL = true, bool checkEmail = true);
 
   /* common defaults */
   /* equivalent to "c,c,c" */
   void SetValidCA();
   /* equivalent to "p,p,p" */
   void SetValidPeer();
 
   /* general setters */
@@ -43,24 +37,20 @@ public:
   void SetSSLTrust(bool peer, bool tPeer,
                    bool ca,   bool tCA, bool tClientCA,
                    bool user, bool warn);
 
   void SetEmailTrust(bool peer, bool tPeer,
                      bool ca,   bool tCA, bool tClientCA,
                      bool user, bool warn);
 
-  void SetObjSignTrust(bool peer, bool tPeer,
-                       bool ca,   bool tCA, bool tClientCA,
-                       bool user, bool warn);
-
   /* set c <--> CT */
-  void AddCATrust(bool ssl, bool email, bool objSign);
+  void AddCATrust(bool ssl, bool email);
   /* set p <--> P */
-  void AddPeerTrust(bool ssl, bool email, bool objSign);
+  void AddPeerTrust(bool ssl, bool email);
 
   CERTCertTrust& GetTrust() { return mTrust; }
 
 private:
   void addTrust(unsigned int *t, unsigned int v);
   void removeTrust(unsigned int *t, unsigned int v);
   bool hasTrust(unsigned int t, unsigned int v);
   CERTCertTrust mTrust;
--- a/security/manager/ssl/nsNSSCertificateDB.cpp
+++ b/security/manager/ssl/nsNSSCertificateDB.cpp
@@ -377,18 +377,17 @@ nsNSSCertificateDB::handleCACertDownload
   MOZ_LOG(gPIPNSSLog, LogLevel::Debug, ("trust is %d\n", trustBits));
   UniquePORTString nickname(CERT_MakeCANickname(tmpCert.get()));
 
   MOZ_LOG(gPIPNSSLog, LogLevel::Debug, ("Created nick \"%s\"\n", nickname.get()));
 
   nsNSSCertTrust trust;
   trust.SetValidCA();
   trust.AddCATrust(!!(trustBits & nsIX509CertDB::TRUSTED_SSL),
-                   !!(trustBits & nsIX509CertDB::TRUSTED_EMAIL),
-                   !!(trustBits & nsIX509CertDB::TRUSTED_OBJSIGN));
+                   !!(trustBits & nsIX509CertDB::TRUSTED_EMAIL));
 
   UniquePK11SlotInfo slot(PK11_GetInternalKeySlot());
   SECStatus srv = PK11_ImportCert(slot.get(), tmpCert.get(), CK_INVALID_HANDLE,
                                   nickname.get(),
                                   false); // this parameter is ignored by NSS
   if (srv != SECSuccess) {
     return MapSECStatus(srv);
   }
@@ -732,17 +731,17 @@ nsNSSCertificateDB::DeleteCertificate(ns
   if (cert->slot && certType != nsIX509Cert::USER_CERT) {
     // To delete a cert of a slot (builtin, most likely), mark it as
     // completely untrusted.  This way we keep a copy cached in the
     // local database, and next time we try to load it off of the
     // external token/slot, we'll know not to trust it.  We don't
     // want to do that with user certs, because a user may  re-store
     // the cert onto the card again at which point we *will* want to
     // trust that cert if it chains up properly.
-    nsNSSCertTrust trust(0, 0, 0);
+    nsNSSCertTrust trust(0, 0);
     srv = ChangeCertTrustWithPossibleAuthentication(cert, trust.GetTrust(),
                                                     nullptr);
   }
   MOZ_LOG(gPIPNSSLog, LogLevel::Debug, ("cert deleted: %d", srv));
 
   nsCOMPtr<nsIObserverService> observerService =
     mozilla::services::GetObserverService();
   if (observerService) {
@@ -763,27 +762,25 @@ nsNSSCertificateDB::SetCertTrust(nsIX509
     return NS_ERROR_NOT_AVAILABLE;
   }
 
   nsNSSCertTrust trust;
   s