Bug 1410541 - Add prerendered locales, preloaded pings and bug fixes to Activity Stream. r=k88hudson
authorEd Lee <edilee@mozilla.com>
Fri, 20 Oct 2017 15:11:28 -0700
changeset 440942 d1f0c44b2d7935ffacef0cdde5d4078259377613
parent 440941 790d3b90345fe6cd0e424771d1656fd9d4555f21
child 440943 34accef71609223bba5738d726082d8b79525389
push id1618
push userCallek@gmail.com
push dateThu, 11 Jan 2018 17:45:48 +0000
treeherdermozilla-release@882ca853e05a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersk88hudson
bugs1410541
milestone58.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1410541 - Add prerendered locales, preloaded pings and bug fixes to Activity Stream. r=k88hudson MozReview-Commit-ID: 81WygivxBoG
browser/extensions/activity-stream/bootstrap.js
browser/extensions/activity-stream/common/Actions.jsm
browser/extensions/activity-stream/common/PrerenderData.jsm
browser/extensions/activity-stream/data/content/activity-stream-debug.html
browser/extensions/activity-stream/data/content/activity-stream-initial-state.js
browser/extensions/activity-stream/data/content/activity-stream-prerendered-debug.html
browser/extensions/activity-stream/data/content/activity-stream-prerendered.html
browser/extensions/activity-stream/data/content/activity-stream.bundle.js
browser/extensions/activity-stream/data/content/activity-stream.css
browser/extensions/activity-stream/data/content/activity-stream.html
browser/extensions/activity-stream/data/locales.json
browser/extensions/activity-stream/install.rdf.in
browser/extensions/activity-stream/jar.mn
browser/extensions/activity-stream/lib/ActivityStream.jsm
browser/extensions/activity-stream/lib/ActivityStreamMessageChannel.jsm
browser/extensions/activity-stream/lib/ActivityStreamPrefs.jsm
browser/extensions/activity-stream/lib/HighlightsFeed.jsm
browser/extensions/activity-stream/lib/LinksCache.jsm
browser/extensions/activity-stream/lib/PersistentCache.jsm
browser/extensions/activity-stream/lib/Store.jsm
browser/extensions/activity-stream/lib/TelemetryFeed.jsm
browser/extensions/activity-stream/lib/TopSitesFeed.jsm
browser/extensions/activity-stream/lib/TopStoriesFeed.jsm
browser/extensions/activity-stream/lib/UserDomainAffinityProvider.jsm
browser/extensions/activity-stream/prerendered/ach/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ach/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ach/activity-stream.html
browser/extensions/activity-stream/prerendered/ar/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ar/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ar/activity-stream.html
browser/extensions/activity-stream/prerendered/ast/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ast/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ast/activity-stream.html
browser/extensions/activity-stream/prerendered/az/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/az/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/az/activity-stream.html
browser/extensions/activity-stream/prerendered/be/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/be/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/be/activity-stream.html
browser/extensions/activity-stream/prerendered/bg/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/bg/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/bg/activity-stream.html
browser/extensions/activity-stream/prerendered/bn-BD/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/bn-BD/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/bn-BD/activity-stream.html
browser/extensions/activity-stream/prerendered/bn-IN/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/bn-IN/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/bn-IN/activity-stream.html
browser/extensions/activity-stream/prerendered/br/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/br/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/br/activity-stream.html
browser/extensions/activity-stream/prerendered/bs/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/bs/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/bs/activity-stream.html
browser/extensions/activity-stream/prerendered/ca/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ca/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ca/activity-stream.html
browser/extensions/activity-stream/prerendered/cak/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/cak/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/cak/activity-stream.html
browser/extensions/activity-stream/prerendered/cs/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/cs/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/cs/activity-stream.html
browser/extensions/activity-stream/prerendered/cy/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/cy/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/cy/activity-stream.html
browser/extensions/activity-stream/prerendered/da/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/da/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/da/activity-stream.html
browser/extensions/activity-stream/prerendered/de/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/de/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/de/activity-stream.html
browser/extensions/activity-stream/prerendered/dsb/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/dsb/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/dsb/activity-stream.html
browser/extensions/activity-stream/prerendered/el/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/el/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/el/activity-stream.html
browser/extensions/activity-stream/prerendered/en-GB/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/en-GB/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/en-GB/activity-stream.html
browser/extensions/activity-stream/prerendered/en-US/activity-stream-debug.html
browser/extensions/activity-stream/prerendered/en-US/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/en-US/activity-stream-prerendered-debug.html
browser/extensions/activity-stream/prerendered/en-US/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/en-US/activity-stream.html
browser/extensions/activity-stream/prerendered/eo/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/eo/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/eo/activity-stream.html
browser/extensions/activity-stream/prerendered/es-AR/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/es-AR/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/es-AR/activity-stream.html
browser/extensions/activity-stream/prerendered/es-CL/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/es-CL/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/es-CL/activity-stream.html
browser/extensions/activity-stream/prerendered/es-ES/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/es-ES/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/es-ES/activity-stream.html
browser/extensions/activity-stream/prerendered/es-MX/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/es-MX/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/es-MX/activity-stream.html
browser/extensions/activity-stream/prerendered/et/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/et/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/et/activity-stream.html
browser/extensions/activity-stream/prerendered/eu/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/eu/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/eu/activity-stream.html
browser/extensions/activity-stream/prerendered/fa/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/fa/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/fa/activity-stream.html
browser/extensions/activity-stream/prerendered/fi/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/fi/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/fi/activity-stream.html
browser/extensions/activity-stream/prerendered/fr/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/fr/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/fr/activity-stream.html
browser/extensions/activity-stream/prerendered/fy-NL/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/fy-NL/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/fy-NL/activity-stream.html
browser/extensions/activity-stream/prerendered/ga-IE/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ga-IE/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ga-IE/activity-stream.html
browser/extensions/activity-stream/prerendered/gd/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/gd/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/gd/activity-stream.html
browser/extensions/activity-stream/prerendered/gu-IN/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/gu-IN/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/gu-IN/activity-stream.html
browser/extensions/activity-stream/prerendered/he/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/he/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/he/activity-stream.html
browser/extensions/activity-stream/prerendered/hi-IN/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/hi-IN/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/hi-IN/activity-stream.html
browser/extensions/activity-stream/prerendered/hr/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/hr/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/hr/activity-stream.html
browser/extensions/activity-stream/prerendered/hsb/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/hsb/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/hsb/activity-stream.html
browser/extensions/activity-stream/prerendered/hu/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/hu/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/hu/activity-stream.html
browser/extensions/activity-stream/prerendered/hy-AM/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/hy-AM/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/hy-AM/activity-stream.html
browser/extensions/activity-stream/prerendered/ia/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ia/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ia/activity-stream.html
browser/extensions/activity-stream/prerendered/it/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/it/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/it/activity-stream.html
browser/extensions/activity-stream/prerendered/ja-JP-mac/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ja-JP-mac/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ja-JP-mac/activity-stream.html
browser/extensions/activity-stream/prerendered/ja/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ja/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ja/activity-stream.html
browser/extensions/activity-stream/prerendered/ka/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ka/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ka/activity-stream.html
browser/extensions/activity-stream/prerendered/kab/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/kab/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/kab/activity-stream.html
browser/extensions/activity-stream/prerendered/kk/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/kk/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/kk/activity-stream.html
browser/extensions/activity-stream/prerendered/km/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/km/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/km/activity-stream.html
browser/extensions/activity-stream/prerendered/kn/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/kn/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/kn/activity-stream.html
browser/extensions/activity-stream/prerendered/ko/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ko/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ko/activity-stream.html
browser/extensions/activity-stream/prerendered/lij/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/lij/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/lij/activity-stream.html
browser/extensions/activity-stream/prerendered/lo/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/lo/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/lo/activity-stream.html
browser/extensions/activity-stream/prerendered/lt/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/lt/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/lt/activity-stream.html
browser/extensions/activity-stream/prerendered/lv/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/lv/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/lv/activity-stream.html
browser/extensions/activity-stream/prerendered/mk/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/mk/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/mk/activity-stream.html
browser/extensions/activity-stream/prerendered/ml/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ml/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ml/activity-stream.html
browser/extensions/activity-stream/prerendered/mr/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/mr/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/mr/activity-stream.html
browser/extensions/activity-stream/prerendered/ms/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ms/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ms/activity-stream.html
browser/extensions/activity-stream/prerendered/my/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/my/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/my/activity-stream.html
browser/extensions/activity-stream/prerendered/nb-NO/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/nb-NO/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/nb-NO/activity-stream.html
browser/extensions/activity-stream/prerendered/ne-NP/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ne-NP/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ne-NP/activity-stream.html
browser/extensions/activity-stream/prerendered/nl/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/nl/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/nl/activity-stream.html
browser/extensions/activity-stream/prerendered/nn-NO/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/nn-NO/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/nn-NO/activity-stream.html
browser/extensions/activity-stream/prerendered/pa-IN/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/pa-IN/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/pa-IN/activity-stream.html
browser/extensions/activity-stream/prerendered/pl/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/pl/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/pl/activity-stream.html
browser/extensions/activity-stream/prerendered/pt-BR/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/pt-BR/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/pt-BR/activity-stream.html
browser/extensions/activity-stream/prerendered/pt-PT/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/pt-PT/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/pt-PT/activity-stream.html
browser/extensions/activity-stream/prerendered/rm/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/rm/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/rm/activity-stream.html
browser/extensions/activity-stream/prerendered/ro/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ro/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ro/activity-stream.html
browser/extensions/activity-stream/prerendered/ru/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ru/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ru/activity-stream.html
browser/extensions/activity-stream/prerendered/sk/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/sk/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/sk/activity-stream.html
browser/extensions/activity-stream/prerendered/sl/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/sl/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/sl/activity-stream.html
browser/extensions/activity-stream/prerendered/sq/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/sq/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/sq/activity-stream.html
browser/extensions/activity-stream/prerendered/sr/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/sr/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/sr/activity-stream.html
browser/extensions/activity-stream/prerendered/sv-SE/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/sv-SE/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/sv-SE/activity-stream.html
browser/extensions/activity-stream/prerendered/ta-LK/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ta-LK/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ta-LK/activity-stream.html
browser/extensions/activity-stream/prerendered/ta/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ta/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ta/activity-stream.html
browser/extensions/activity-stream/prerendered/te/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/te/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/te/activity-stream.html
browser/extensions/activity-stream/prerendered/th/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/th/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/th/activity-stream.html
browser/extensions/activity-stream/prerendered/tl/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/tl/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/tl/activity-stream.html
browser/extensions/activity-stream/prerendered/tr/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/tr/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/tr/activity-stream.html
browser/extensions/activity-stream/prerendered/uk/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/uk/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/uk/activity-stream.html
browser/extensions/activity-stream/prerendered/ur/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/ur/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/ur/activity-stream.html
browser/extensions/activity-stream/prerendered/uz/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/uz/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/uz/activity-stream.html
browser/extensions/activity-stream/prerendered/vi/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/vi/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/vi/activity-stream.html
browser/extensions/activity-stream/prerendered/zh-CN/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/zh-CN/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/zh-CN/activity-stream.html
browser/extensions/activity-stream/prerendered/zh-TW/activity-stream-initial-state.js
browser/extensions/activity-stream/prerendered/zh-TW/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/zh-TW/activity-stream.html
browser/extensions/activity-stream/test/functional/mochitest/head.js
browser/extensions/activity-stream/test/schemas/pings.js
browser/extensions/activity-stream/test/unit/activity-stream-prerender.test.jsx
browser/extensions/activity-stream/test/unit/lib/ActivityStreamMessageChannel.test.js
browser/extensions/activity-stream/test/unit/lib/HighlightsFeed.test.js
browser/extensions/activity-stream/test/unit/lib/PlacesFeed.test.js
browser/extensions/activity-stream/test/unit/lib/Store.test.js
browser/extensions/activity-stream/test/unit/lib/TelemetryFeed.test.js
browser/extensions/activity-stream/test/unit/lib/TopSitesFeed.test.js
browser/extensions/activity-stream/test/unit/lib/TopStoriesFeed.test.js
browser/extensions/activity-stream/test/unit/lib/UserDomainAffinityProvider.test.js
--- a/browser/extensions/activity-stream/bootstrap.js
+++ b/browser/extensions/activity-stream/bootstrap.js
@@ -24,17 +24,17 @@ let modulesToUnload = new Set();
 let startupData;
 let startupReason;
 let waitingForBrowserReady = true;
 
 // Lazily load ActivityStream then find related modules to unload
 XPCOMUtils.defineLazyModuleGetter(this, "ActivityStream",
   "resource://activity-stream/lib/ActivityStream.jsm", null, null, () => {
     // Helper to fetch a resource directory listing and call back with each item
-    const processListing = async(uri, cb) => (await (await fetch(uri)).text())
+    const processListing = async (uri, cb) => (await (await fetch(uri)).text())
       .split("\n").slice(2).forEach(line => cb(line.split(" ").slice(1)));
 
     // Look for modules one level deeper than the top resource URI
     processListing(RESOURCE_BASE, ([directory, , , type]) => {
       if (type === "DIRECTORY") {
         // Look into this directory for .jsm files
         const subDir = `${RESOURCE_BASE}/${directory}`;
         processListing(subDir, ([name]) => {
--- a/browser/extensions/activity-stream/common/Actions.jsm
+++ b/browser/extensions/activity-stream/common/Actions.jsm
@@ -41,16 +41,17 @@ for (const type of [
   "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",
--- a/browser/extensions/activity-stream/common/PrerenderData.jsm
+++ b/browser/extensions/activity-stream/common/PrerenderData.jsm
@@ -47,28 +47,34 @@ class _PrerenderData {
 }
 
 this.PrerenderData = new _PrerenderData({
   initialPrefs: {
     "migrationExpired": true,
     "showTopSites": true,
     "showSearch": true,
     "topSitesCount": 6,
+    "collapseTopSites": false,
+    "section.highlights.collapsed": false,
+    "section.topstories.collapsed": false,
     "feeds.section.topstories": true,
     "feeds.section.highlights": true
   },
   // Prefs listed as invalidating will prevent the prerendered version
   // of AS from being used if their value is something other than what is listed
   // here. This is required because some preferences cause the page layout to be
   // too different for the prerendered version to be used. Unfortunately, this
   // will result in users who have modified some of their preferences not being
   // able to get the benefits of prerendering.
   validation: [
     "showTopSites",
     "showSearch",
+    "collapseTopSites",
+    "section.highlights.collapsed",
+    "section.topstories.collapsed",
     // This means if either of these are set to their default values,
     // prerendering can be used.
     {oneOf: ["feeds.section.topstories", "feeds.section.highlights"]}
   ],
   initialSections: [
     {
       enabled: true,
       icon: "pocket",
deleted file mode 100644
--- a/browser/extensions/activity-stream/data/content/activity-stream-debug.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!doctype html>
-<html lang="" 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">
-    <title></title>
-    <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/data/content/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-dev.js",
-  "resource://activity-stream/vendor/react-dom-dev.js",
-  "resource://activity-stream/vendor/react-intl.js",
-  "resource://activity-stream/vendor/redux.js",
-  "resource://activity-stream/vendor/react-redux.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>
deleted file mode 100644
--- a/browser/extensions/activity-stream/data/content/activity-stream-initial-state.js
+++ /dev/null
@@ -1,159 +0,0 @@
-// Note - this is a generated file.
-  window.gActivityStreamPrerenderedState = {
-  "TopSites": {
-    "initialized": false,
-    "rows": [],
-    "editForm": {
-      "visible": false,
-      "site": null
-    }
-  },
-  "App": {
-    "initialized": false,
-    "locale": "en-PRERENDER",
-    "strings": {
-      "newtab_page_title": " ",
-      "default_label_loading": " ",
-      "header_top_sites": " ",
-      "header_stories": " ",
-      "header_highlights": " ",
-      "header_visit_again": " ",
-      "header_bookmarks": " ",
-      "header_recommended_by": " ",
-      "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_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": " ",
-      "search_for_something_with": " ",
-      "search_button": " ",
-      "search_header": " ",
-      "search_web_placeholder": " ",
-      "search_settings": " ",
-      "section_info_option": " ",
-      "section_info_send_feedback": " ",
-      "section_info_privacy_notice": " ",
-      "welcome_title": " ",
-      "welcome_body": " ",
-      "welcome_label": " ",
-      "time_label_less_than_minute": " ",
-      "time_label_minute": " ",
-      "time_label_hour": " ",
-      "time_label_day": " ",
-      "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": " ",
-      "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": " ",
-      "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": " ",
-      "edit_topsites_dismiss_button": " ",
-      "edit_topsites_add_button": " ",
-      "topsites_form_add_header": " ",
-      "topsites_form_edit_header": " ",
-      "topsites_form_title_placeholder": " ",
-      "topsites_form_url_placeholder": " ",
-      "topsites_form_add_button": " ",
-      "topsites_form_save_button": " ",
-      "topsites_form_cancel_button": " ",
-      "topsites_form_url_validation": " ",
-      "pocket_read_more": " ",
-      "pocket_read_even_more": " ",
-      "pocket_feedback_header": " ",
-      "pocket_description": " ",
-      "highlights_empty_state": " ",
-      "topstories_empty_state": " ",
-      "manual_migration_explanation2": " ",
-      "manual_migration_cancel_button": " ",
-      "manual_migration_import_button": " "
-    },
-    "textDirection": "ltr",
-    "version": null
-  },
-  "Snippets": {
-    "initialized": false
-  },
-  "Prefs": {
-    "initialized": true,
-    "values": {
-      "migrationExpired": true,
-      "showTopSites": true,
-      "showSearch": true,
-      "topSitesCount": 6,
-      "feeds.section.topstories": true,
-      "feeds.section.highlights": true
-    }
-  },
-  "Dialog": {
-    "visible": false,
-    "data": {}
-  },
-  "Sections": [
-    {
-      "title": {
-        "id": "header_recommended_by",
-        "values": {
-          "provider": "Pocket"
-        }
-      },
-      "rows": [],
-      "order": 1,
-      "enabled": true,
-      "icon": "pocket",
-      "id": "topstories",
-      "initialized": false
-    },
-    {
-      "title": {
-        "id": "header_highlights"
-      },
-      "rows": [],
-      "order": 2,
-      "enabled": true,
-      "id": "highlights",
-      "icon": "highlights",
-      "initialized": false
-    }
-  ],
-  "PreferencesPane": {
-    "visible": false
-  }
-};
deleted file mode 100644
--- a/browser/extensions/activity-stream/data/content/activity-stream-prerendered-debug.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!doctype html>
-<html lang="" 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">
-    <title></title>
-    <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/data/content/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="645243258"><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" 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"><span class="letter-fallback" data-reactid="34"></span><div class="screenshot" style="background-image:none;" data-reactid="35"></div></div><div class="title " data-reactid="36"><span dir="auto" data-reactid="37"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="38"><a data-reactid="39"><div class="tile" aria-hidden="true" data-reactid="40"><span class="letter-fallback" data-reactid="41"></span><div class="screenshot" style="background-image:none;" data-reactid="42"></div></div><div class="title " data-reactid="43"><span dir="auto" data-reactid="44"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="45"><a data-reactid="46"><div class="tile" aria-hidden="true" data-reactid="47"><span class="letter-fallback" data-reactid="48"></span><div class="screenshot" style="background-image:none;" data-reactid="49"></div></div><div class="title " data-reactid="50"><span dir="auto" data-reactid="51"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="52"><a data-reactid="53"><div class="tile" aria-hidden="true" data-reactid="54"><span class="letter-fallback" data-reactid="55"></span><div class="screenshot" style="background-image:none;" data-reactid="56"></div></div><div class="title " data-reactid="57"><span dir="auto" data-reactid="58"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="59"><a data-reactid="60"><div class="tile" aria-hidden="true" data-reactid="61"><span class="letter-fallback" data-reactid="62"></span><div class="screenshot" style="background-image:none;" data-reactid="63"></div></div><div class="title " data-reactid="64"><span dir="auto" data-reactid="65"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="66"><a data-reactid="67"><div class="tile" aria-hidden="true" data-reactid="68"><span class="letter-fallback" data-reactid="69"></span><div class="screenshot" style="background-image:none;" data-reactid="70"></div></div><div class="title " data-reactid="71"><span dir="auto" data-reactid="72"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="73"><div class="edit-topsites-button" data-reactid="74"><button class="edit" title=" " data-reactid="75"><span data-reactid="76"> </span></button></div></div></div></section><div class="sections-list" data-reactid="77"><section class="collapsible-section section" data-reactid="78"><div class="section-top-bar" data-reactid="79"><h3 class="section-title" data-reactid="80"><span class="click-target" data-reactid="81"><span class="icon icon-small-spacer icon-pocket" data-reactid="82"></span><span data-reactid="83"> </span><span class="icon icon-arrowhead-down" data-reactid="84"></span></span></h3></div><div class="section-body" data-reactid="85"><ul class="section-list" style="padding:0;" data-reactid="86"><li class="card-outer placeholder" data-reactid="87"><a data-reactid="88"><div class="card" data-reactid="89"><div class="card-details no-image" data-reactid="90"><div class="card-text no-context no-description no-host-name no-image" data-reactid="91"><h4 class="card-title" dir="auto" data-reactid="92"></h4><p class="card-description" dir="auto" data-reactid="93"></p></div><div class="card-context" data-reactid="94"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="95"><a data-reactid="96"><div class="card" data-reactid="97"><div class="card-details no-image" data-reactid="98"><div class="card-text no-context no-description no-host-name no-image" data-reactid="99"><h4 class="card-title" dir="auto" data-reactid="100"></h4><p class="card-description" dir="auto" data-reactid="101"></p></div><div class="card-context" data-reactid="102"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="103"><a data-reactid="104"><div class="card" data-reactid="105"><div class="card-details no-image" data-reactid="106"><div class="card-text no-context no-description no-host-name no-image" data-reactid="107"><h4 class="card-title" dir="auto" data-reactid="108"></h4><p class="card-description" dir="auto" data-reactid="109"></p></div><div class="card-context" data-reactid="110"></div></div></div></a></li></ul><div class="topic" data-reactid="111"><span data-reactid="112"><span data-reactid="113"> </span></span><ul data-reactid="114"></ul></div></div></section><section class="collapsible-section section" data-reactid="115"><div class="section-top-bar" data-reactid="116"><h3 class="section-title" data-reactid="117"><span class="click-target" data-reactid="118"><span class="icon icon-small-spacer icon-highlights" data-reactid="119"></span><span data-reactid="120"> </span><span class="icon icon-arrowhead-down" data-reactid="121"></span></span></h3></div><div class="section-body" data-reactid="122"><ul class="section-list" style="padding:0;" data-reactid="123"><li class="card-outer placeholder" data-reactid="124"><a data-reactid="125"><div class="card" data-reactid="126"><div class="card-details no-image" data-reactid="127"><div class="card-text no-context no-description no-host-name no-image" data-reactid="128"><h4 class="card-title" dir="auto" data-reactid="129"></h4><p class="card-description" dir="auto" data-reactid="130"></p></div><div class="card-context" data-reactid="131"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="132"><a data-reactid="133"><div class="card" data-reactid="134"><div class="card-details no-image" data-reactid="135"><div class="card-text no-context no-description no-host-name no-image" data-reactid="136"><h4 class="card-title" dir="auto" data-reactid="137"></h4><p class="card-description" dir="auto" data-reactid="138"></p></div><div class="card-context" data-reactid="139"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="140"><a data-reactid="141"><div class="card" data-reactid="142"><div class="card-details no-image" data-reactid="143"><div class="card-text no-context no-description no-host-name no-image" data-reactid="144"><h4 class="card-title" dir="auto" data-reactid="145"></h4><p class="card-description" dir="auto" data-reactid="146"></p></div><div class="card-context" data-reactid="147"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 148 --></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/data/content/activity-stream-initial-state.js",
-  "chrome://browser/content/contentSearchUI.js",
-  "resource://activity-stream/vendor/react-dev.js",
-  "resource://activity-stream/vendor/react-dom-dev.js",
-  "resource://activity-stream/vendor/react-intl.js",
-  "resource://activity-stream/vendor/redux.js",
-  "resource://activity-stream/vendor/react-redux.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>
deleted file mode 100644
--- a/browser/extensions/activity-stream/data/content/activity-stream-prerendered.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!doctype html>
-<html lang="" 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">
-    <title></title>
-    <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/data/content/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="645243258"><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" 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"><span class="letter-fallback" data-reactid="34"></span><div class="screenshot" style="background-image:none;" data-reactid="35"></div></div><div class="title " data-reactid="36"><span dir="auto" data-reactid="37"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="38"><a data-reactid="39"><div class="tile" aria-hidden="true" data-reactid="40"><span class="letter-fallback" data-reactid="41"></span><div class="screenshot" style="background-image:none;" data-reactid="42"></div></div><div class="title " data-reactid="43"><span dir="auto" data-reactid="44"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="45"><a data-reactid="46"><div class="tile" aria-hidden="true" data-reactid="47"><span class="letter-fallback" data-reactid="48"></span><div class="screenshot" style="background-image:none;" data-reactid="49"></div></div><div class="title " data-reactid="50"><span dir="auto" data-reactid="51"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="52"><a data-reactid="53"><div class="tile" aria-hidden="true" data-reactid="54"><span class="letter-fallback" data-reactid="55"></span><div class="screenshot" style="background-image:none;" data-reactid="56"></div></div><div class="title " data-reactid="57"><span dir="auto" data-reactid="58"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="59"><a data-reactid="60"><div class="tile" aria-hidden="true" data-reactid="61"><span class="letter-fallback" data-reactid="62"></span><div class="screenshot" style="background-image:none;" data-reactid="63"></div></div><div class="title " data-reactid="64"><span dir="auto" data-reactid="65"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="66"><a data-reactid="67"><div class="tile" aria-hidden="true" data-reactid="68"><span class="letter-fallback" data-reactid="69"></span><div class="screenshot" style="background-image:none;" data-reactid="70"></div></div><div class="title " data-reactid="71"><span dir="auto" data-reactid="72"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="73"><div class="edit-topsites-button" data-reactid="74"><button class="edit" title=" " data-reactid="75"><span data-reactid="76"> </span></button></div></div></div></section><div class="sections-list" data-reactid="77"><section class="collapsible-section section" data-reactid="78"><div class="section-top-bar" data-reactid="79"><h3 class="section-title" data-reactid="80"><span class="click-target" data-reactid="81"><span class="icon icon-small-spacer icon-pocket" data-reactid="82"></span><span data-reactid="83"> </span><span class="icon icon-arrowhead-down" data-reactid="84"></span></span></h3></div><div class="section-body" data-reactid="85"><ul class="section-list" style="padding:0;" data-reactid="86"><li class="card-outer placeholder" data-reactid="87"><a data-reactid="88"><div class="card" data-reactid="89"><div class="card-details no-image" data-reactid="90"><div class="card-text no-context no-description no-host-name no-image" data-reactid="91"><h4 class="card-title" dir="auto" data-reactid="92"></h4><p class="card-description" dir="auto" data-reactid="93"></p></div><div class="card-context" data-reactid="94"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="95"><a data-reactid="96"><div class="card" data-reactid="97"><div class="card-details no-image" data-reactid="98"><div class="card-text no-context no-description no-host-name no-image" data-reactid="99"><h4 class="card-title" dir="auto" data-reactid="100"></h4><p class="card-description" dir="auto" data-reactid="101"></p></div><div class="card-context" data-reactid="102"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="103"><a data-reactid="104"><div class="card" data-reactid="105"><div class="card-details no-image" data-reactid="106"><div class="card-text no-context no-description no-host-name no-image" data-reactid="107"><h4 class="card-title" dir="auto" data-reactid="108"></h4><p class="card-description" dir="auto" data-reactid="109"></p></div><div class="card-context" data-reactid="110"></div></div></div></a></li></ul><div class="topic" data-reactid="111"><span data-reactid="112"><span data-reactid="113"> </span></span><ul data-reactid="114"></ul></div></div></section><section class="collapsible-section section" data-reactid="115"><div class="section-top-bar" data-reactid="116"><h3 class="section-title" data-reactid="117"><span class="click-target" data-reactid="118"><span class="icon icon-small-spacer icon-highlights" data-reactid="119"></span><span data-reactid="120"> </span><span class="icon icon-arrowhead-down" data-reactid="121"></span></span></h3></div><div class="section-body" data-reactid="122"><ul class="section-list" style="padding:0;" data-reactid="123"><li class="card-outer placeholder" data-reactid="124"><a data-reactid="125"><div class="card" data-reactid="126"><div class="card-details no-image" data-reactid="127"><div class="card-text no-context no-description no-host-name no-image" data-reactid="128"><h4 class="card-title" dir="auto" data-reactid="129"></h4><p class="card-description" dir="auto" data-reactid="130"></p></div><div class="card-context" data-reactid="131"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="132"><a data-reactid="133"><div class="card" data-reactid="134"><div class="card-details no-image" data-reactid="135"><div class="card-text no-context no-description no-host-name no-image" data-reactid="136"><h4 class="card-title" dir="auto" data-reactid="137"></h4><p class="card-description" dir="auto" data-reactid="138"></p></div><div class="card-context" data-reactid="139"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="140"><a data-reactid="141"><div class="card" data-reactid="142"><div class="card-details no-image" data-reactid="143"><div class="card-text no-context no-description no-host-name no-image" data-reactid="144"><h4 class="card-title" dir="auto" data-reactid="145"></h4><p class="card-description" dir="auto" data-reactid="146"></p></div><div class="card-context" data-reactid="147"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 148 --></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/data/content/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/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/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", "LOCALE_UPDATED", "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", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_CHANGED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_DELETED", "PLACES_LINK_BLOCKED", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "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", "LOCALE_UPDATED", "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", "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"]) {
   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) {
@@ -293,22 +293,16 @@ module.exports = React;
 /***/ (function(module, exports) {
 
 module.exports = ReactIntl;
 
 /***/ }),
 /* 3 */
 /***/ (function(module, exports) {
 
-module.exports = ReactRedux;
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
 var g;
 
 // This works in non-strict mode
 g = (function() {
 	return this;
 })();
 
 try {
@@ -323,16 +317,22 @@ try {
 // 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;
 
 
 /***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+module.exports = ReactRedux;
+
+/***/ }),
 /* 5 */
 /***/ (function(module, exports) {
 
 module.exports = {
   TOP_SITES_SOURCE: "TOP_SITES",
   TOP_SITES_CONTEXT_MENU_OPTIONS: ["CheckPinTopSite", "EditTopSite", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl", "DeleteUrl"],
   // minimum size necessary to show a rich icon instead of a screenshot
   MIN_RICH_FAVICON_SIZE: 96,
@@ -980,22 +980,25 @@ class LinkMenu extends React.PureCompone
 
 module.exports = injectIntl(LinkMenu);
 module.exports._unconnected = LinkMenu;
 
 /***/ }),
 /* 9 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+/* WEBPACK VAR INJECTION */(function(global) {var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
 
 const React = __webpack_require__(1);
 const { actionCreators: ac, actionTypes: at } = __webpack_require__(0);
 const { injectIntl, FormattedMessage } = __webpack_require__(2);
 
+const VISIBLE = "visible";
+const VISIBILITY_CHANGE_EVENT = "visibilitychange";
+
 function getFormattedMessage(message) {
   return typeof message === "string" ? React.createElement(
     "span",
     null,
     message
   ) : React.createElement(FormattedMessage, message);
 }
 
@@ -1087,22 +1090,31 @@ const InfoIntl = injectIntl(Info);
 
 class CollapsibleSection extends React.PureComponent {
   constructor(props) {
     super(props);
     this.onInfoEnter = this.onInfoEnter.bind(this);
     this.onInfoLeave = this.onInfoLeave.bind(this);
     this.onHeaderClick = this.onHeaderClick.bind(this);
     this.onTransitionEnd = this.onTransitionEnd.bind(this);
-    this.state = { enableAnimation: false, isAnimating: false, infoActive: false };
+    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);
+    this.state = { enableAnimation: true, isAnimating: false, infoActive: false };
+  }
+
+  componentWillMount() {
+    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);
   }
-  componentDidUpdate(prevProps, prevState) {
-    // Enable animations once we get prefs loaded in to avoid animations running during loading.
-    if (prevProps.Prefs.values[this.props.prefName] === undefined && this.props.Prefs.values[this.props.prefName] !== undefined) {
-      setTimeout(() => this.setState({ enableAnimation: true }), 0);
+  componentWillUnmount() {
+    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);
+  }
+  enableOrDisableAnimation() {
+    // Only animate the collapse/expand for visible tabs.
+    const visible = this.props.document.visibilityState === VISIBLE;
+    if (this.state.enableAnimation !== visible) {
+      this.setState({ enableAnimation: visible });
     }
   }
   _setInfoState(nextActive) {
     // Take a truthy value to conditionally change the infoActive state.
     const infoActive = !!nextActive;
     if (infoActive !== this.state.infoActive) {
       this.setState({ infoActive });
     }
@@ -1133,17 +1145,17 @@ class CollapsibleSection extends React.P
   }
   render() {
     const isCollapsed = this.props.Prefs.values[this.props.prefName];
     const { enableAnimation, isAnimating } = this.state;
     const infoOption = this.props.infoOption;
 
     return React.createElement(
       "section",
-      { className: `collapsible-section ${this.props.className}${isCollapsed ? " collapsed" : ""}` },
+      { className: `collapsible-section ${this.props.className}${enableAnimation ? " animation-enabled" : ""}${isCollapsed ? " collapsed" : ""}` },
       React.createElement(
         "div",
         { className: "section-top-bar" },
         React.createElement(
           "h3",
           { className: "section-title" },
           React.createElement(
             "span",
@@ -1152,29 +1164,37 @@ class CollapsibleSection extends React.P
             this.props.title,
             React.createElement("span", { className: `icon ${isCollapsed ? "icon-arrowhead-forward" : "icon-arrowhead-down"}` })
           )
         ),
         infoOption && React.createElement(InfoIntl, { infoOption: infoOption, dispatch: this.props.dispatch })
       ),
       React.createElement(
         "div",
-        { className: `section-body${enableAnimation ? " animation-enabled" : ""}${isAnimating ? " animating" : ""}`, onTransitionEnd: this.onTransitionEnd },
+        { className: `section-body${isAnimating ? " animating" : ""}`, onTransitionEnd: this.onTransitionEnd },
         this.props.children
       )
     );
   }
 }
 
-CollapsibleSection.defaultProps = { Prefs: { values: {} } };
+CollapsibleSection.defaultProps = {
+  document: global.document || {
+    addEventListener: () => {},
+    removeEventListener: () => {},
+    visibilityState: "hidden"
+  },
+  Prefs: { values: {} }
+};
 
 module.exports = injectIntl(CollapsibleSection);
 module.exports._unconnected = CollapsibleSection;
 module.exports.Info = Info;
 module.exports.InfoIntl = InfoIntl;
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
 
 /***/ }),
 /* 10 */
 /***/ (function(module, exports, __webpack_require__) {
 
 const React = __webpack_require__(1);
 const { actionCreators: ac, actionTypes: at } = __webpack_require__(0);
 const { perfService: perfSvc } = __webpack_require__(11);
@@ -1233,17 +1253,16 @@ class ComponentPerfTimer extends React.C
    * @returns void
    */
   _afterFramePaint(callback) {
     requestAnimationFrame(() => setTimeout(callback, 0));
   }
 
   _maybeSendBadStateEvent() {
     // Follow up bugs:
-    // https://github.com/mozilla/activity-stream/issues/3688
     // https://github.com/mozilla/activity-stream/issues/3691
     if (!this.props.initialized) {
       // Remember to report back when data is available.
       this._reportMissingData = true;
     } else if (this._reportMissingData) {
       this._reportMissingData = false;
       // Report how long it took for component to become initialized.
       this._sendBadStateEvent();
@@ -1290,23 +1309,19 @@ class ComponentPerfTimer extends React.C
     const dataReadyKey = `${this.props.id}_data_ready_ts`;
     this.perfSvc.mark(dataReadyKey);
 
     try {
       const firstRenderKey = `${this.props.id}_first_render_ts`;
       // value has to be Int32.
       const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) - this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);
       this.props.dispatch(ac.SendToMain({
-        type: at.TELEMETRY_UNDESIRED_EVENT,
-        data: {
-          source: this.props.id.toUpperCase(),
-          // highlights_data_late_by_ms, topsites_data_late_by_ms.
-          event: `${this.props.id}_data_late_by_ms`,
-          value
-        }
+        type: at.SAVE_SESSION_PERF_DATA,
+        // highlights_data_late_by_ms, topsites_data_late_by_ms.
+        data: { [`${this.props.id}_data_late_by_ms`]: value }
       }));
     } catch (ex) {
       // If this failed, it's likely because the `privacy.resistFingerprinting`
       // pref is true.
     }
   }
 
   _sendPaintedEvent() {
@@ -1483,17 +1498,17 @@ module.exports = {
 
 /***/ }),
 /* 12 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /* WEBPACK VAR INJECTION */(function(global) {const React = __webpack_require__(1);
 const ReactDOM = __webpack_require__(13);
 const Base = __webpack_require__(14);
-const { Provider } = __webpack_require__(3);
+const { Provider } = __webpack_require__(4);
 const initStore = __webpack_require__(31);
 const { reducers } = __webpack_require__(6);
 const DetectUserSessionStart = __webpack_require__(33);
 const { addSnippetsSubscriber } = __webpack_require__(34);
 const { actionTypes: at, actionCreators: ac } = __webpack_require__(0);
 
 new DetectUserSessionStart().sendEventOrAddListener();
 
@@ -1508,60 +1523,67 @@ if (!global.gActivityStreamPrerenderedSt
 
 ReactDOM.render(React.createElement(
   Provider,
   { store: store },
   React.createElement(Base, { isPrerendered: !!global.gActivityStreamPrerenderedState })
 ), document.getElementById("root"));
 
 addSnippetsSubscriber(store);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
 
 /***/ }),
 /* 13 */
 /***/ (function(module, exports) {
 
 module.exports = ReactDOM;
 
 /***/ }),
 /* 14 */
 /***/ (function(module, exports, __webpack_require__) {
 
-const React = __webpack_require__(1);
-const { connect } = __webpack_require__(3);
+/* WEBPACK VAR INJECTION */(function(global) {const React = __webpack_require__(1);
+const { connect } = __webpack_require__(4);
 const { addLocaleData, IntlProvider } = __webpack_require__(2);
 const TopSites = __webpack_require__(15);
 const Search = __webpack_require__(21);
 const ConfirmDialog = __webpack_require__(23);
 const ManualMigration = __webpack_require__(24);
 const PreferencesPane = __webpack_require__(25);
 const Sections = __webpack_require__(26);
 const { actionTypes: at, actionCreators: ac } = __webpack_require__(0);
 const { PrerenderData } = __webpack_require__(30);
 
 // Add the locale data for pluralization and relative-time formatting for now,
 // this just uses english locale data. We can make this more sophisticated if
 // more features are needed.
 function addLocaleDataForReactIntl({ locale, textDirection }) {
   addLocaleData([{ locale, parentLocale: "en" }]);
-  document.documentElement.lang = locale;
-  document.documentElement.dir = textDirection;
+  if (global.document) {
+    global.document.documentElement.lang = locale;
+    global.document.documentElement.dir = textDirection;
+  }
 }
 
 class Base extends React.PureComponent {
   componentWillMount() {
-    this.sendNewTabRehydrated(this.props.App);
+    const { App } = this.props;
+    this.sendNewTabRehydrated(App);
+    if (App.locale) {
+      addLocaleDataForReactIntl(App);
+    }
   }
 
   componentDidMount() {
     // Request state AFTER the first render to ensure we don't cause the
     // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is
     // dispatched right after the store is ready.
     if (this.props.isPrerendered) {
       this.props.dispatch(ac.SendToMain({ type: at.NEW_TAB_STATE_REQUEST }));
+      this.props.dispatch(ac.SendToMain({ type: at.PAGE_PRERENDERED }));
     }
 
     // Also wait for the preloaded page to show, so the tab's title and favicon updates
     addEventListener("visibilitychange", () => {
       this.updateTitle(this.props.App);
       document.getElementById("favicon").href += "#";
     }, { once: true });
   }
@@ -1630,23 +1652,24 @@ class Base extends React.PureComponent {
         initialized && React.createElement(PreferencesPane, null)
       )
     );
   }
 }
 
 module.exports = connect(state => ({ App: state.App, Prefs: state.Prefs }))(Base);
 module.exports._unconnected = Base;
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
 
 /***/ }),
 /* 15 */
 /***/ (function(module, exports, __webpack_require__) {
 
 const React = __webpack_require__(1);
-const { connect } = __webpack_require__(3);
+const { connect } = __webpack_require__(4);
 const { FormattedMessage } = __webpack_require__(2);
 
 const TopSitesEdit = __webpack_require__(16);
 const { TopSite, TopSitePlaceholder } = __webpack_require__(7);
 const CollapsibleSection = __webpack_require__(9);
 const ComponentPerfTimer = __webpack_require__(10);
 
 const TopSites = props => {
@@ -2305,17 +2328,17 @@ module.exports = {
 /* 21 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
 /* globals ContentSearchUIController */
 
 
 const React = __webpack_require__(1);
-const { connect } = __webpack_require__(3);
+const { connect } = __webpack_require__(4);
 const { FormattedMessage, injectIntl } = __webpack_require__(2);
 const { actionCreators: ac } = __webpack_require__(0);
 const { IS_NEWTAB } = __webpack_require__(22);
 
 class Search extends React.PureComponent {
   constructor(props) {
     super(props);
     this.onClick = this.onClick.bind(this);
@@ -2415,24 +2438,24 @@ module.exports._unconnected = Search;
 /***/ }),
 /* 22 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /* WEBPACK VAR INJECTION */(function(global) {module.exports = {
   // constant to know if the page is about:newtab or about:home
   IS_NEWTAB: global.document && global.document.documentURI === "about:newtab"
 };
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
 
 /***/ }),
 /* 23 */
 /***/ (function(module, exports, __webpack_require__) {
 
 const React = __webpack_require__(1);
-const { connect } = __webpack_require__(3);
+const { connect } = __webpack_require__(4);
 const { FormattedMessage } = __webpack_require__(2);
 const { actionTypes, actionCreators: ac } = __webpack_require__(0);
 
 /**
  * ConfirmDialog component.
  * One primary action button, one cancel button.
  *
  * Content displayed is controlled by `data` prop the component receives.
@@ -2445,34 +2468,31 @@ const { actionTypes, actionCreators: ac 
  *   // Primary button USerEvent action.
  *   userEvent: "DELETE",
  *   // Array of locale ids to display.
  *   message_body: ["confirm_history_delete_p1", "confirm_history_delete_notice_p2"],
  *   // Text for primary button.
  *   confirm_button_string_id: "menu_action_delete"
  * },
  */
-const ConfirmDialog = React.createClass({
-  displayName: "ConfirmDialog",
-
-  getDefaultProps() {
-    return {
-      visible: false,
-      data: {}
-    };
-  },
+class ConfirmDialog extends React.PureComponent {
+  constructor(props) {
+    super(props);
+    this._handleCancelBtn = this._handleCancelBtn.bind(this);
+    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);
+  }
 
   _handleCancelBtn() {
     this.props.dispatch({ type: actionTypes.DIALOG_CANCEL });
     this.props.dispatch(ac.UserEvent({ event: actionTypes.DIALOG_CANCEL }));
-  },
+  }
 
   _handleConfirmBtn() {
     this.props.data.onConfirm.forEach(this.props.dispatch);
-  },
+  }
 
   _renderModalMessage() {
     const message_body = this.props.data.body_string_id;
 
     if (!message_body) {
       return null;
     }
 
@@ -2480,17 +2500,17 @@ const ConfirmDialog = React.createClass(
       "span",
       null,
       message_body.map(msg => React.createElement(
         "p",
         { key: msg },
         React.createElement(FormattedMessage, { id: msg })
       ))
     );
-  },
+  }
 
   render() {
     if (!this.props.visible) {
       return null;
     }
 
     return React.createElement(
       "div",
@@ -2516,28 +2536,28 @@ const ConfirmDialog = React.createClass(
             "button",
             { className: "done", onClick: this._handleConfirmBtn },
             React.createElement(FormattedMessage, { id: this.props.data.confirm_button_string_id })
           )
         )
       )
     );
   }
-});
+}
 
 module.exports = connect(state => state.Dialog)(ConfirmDialog);
 module.exports._unconnected = ConfirmDialog;
 module.exports.Dialog = ConfirmDialog;
 
 /***/ }),
 /* 24 */
 /***/ (function(module, exports, __webpack_require__) {
 
 const React = __webpack_require__(1);
-const { connect } = __webpack_require__(3);
+const { connect } = __webpack_require__(4);
 const { FormattedMessage } = __webpack_require__(2);
 const { actionTypes: at, actionCreators: ac } = __webpack_require__(0);
 
 /**
  * Manual migration component used to start the profile import wizard.
  * Message is presented temporarily and will go away if:
  * 1.  User clicks "No Thanks"
  * 2.  User completed the data import
@@ -2591,17 +2611,17 @@ class ManualMigration extends React.Pure
 module.exports = connect()(ManualMigration);
 module.exports._unconnected = ManualMigration;
 
 /***/ }),
 /* 25 */
 /***/ (function(module, exports, __webpack_require__) {
 
 const React = __webpack_require__(1);
-const { connect } = __webpack_require__(3);
+const { connect } = __webpack_require__(4);
 const { injectIntl, FormattedMessage } = __webpack_require__(2);
 const { actionCreators: ac, actionTypes: at } = __webpack_require__(0);
 const { TOP_SITES_DEFAULT_LENGTH, TOP_SITES_SHOWMORE_LENGTH } = __webpack_require__(6);
 
 const getFormattedMessage = message => typeof message === "string" ? React.createElement(
   "span",
   null,
   message
@@ -2790,17 +2810,17 @@ module.exports.PreferencesInput = Prefer
 
 /***/ }),
 /* 26 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /* WEBPACK VAR INJECTION */(function(global) {var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
 
 const React = __webpack_require__(1);
-const { connect } = __webpack_require__(3);
+const { connect } = __webpack_require__(4);
 const { injectIntl, FormattedMessage } = __webpack_require__(2);
 const Card = __webpack_require__(27);
 const { PlaceholderCard } = Card;
 const Topics = __webpack_require__(29);
 const { actionCreators: ac } = __webpack_require__(0);
 const CollapsibleSection = __webpack_require__(9);
 const ComponentPerfTimer = __webpack_require__(10);
 
@@ -2990,17 +3010,17 @@ class Sections extends React.PureCompone
     );
   }
 }
 
 module.exports = connect(state => ({ Sections: state.Sections, Prefs: state.Prefs }))(Sections);
 module.exports._unconnected = Sections;
 module.exports.SectionIntl = SectionIntl;
 module.exports._unconnectedSection = Section;
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
 
 /***/ }),
 /* 27 */
 /***/ (function(module, exports, __webpack_require__) {
 
 const React = __webpack_require__(1);
 const LinkMenu = __webpack_require__(8);
 const { FormattedMessage } = __webpack_require__(2);
@@ -3326,26 +3346,29 @@ class _PrerenderData {
 }
 
 var PrerenderData = new _PrerenderData({
   initialPrefs: {
     "migrationExpired": true,
     "showTopSites": true,
     "showSearch": true,
     "topSitesCount": 6,
+    "collapseTopSites": false,
+    "section.highlights.collapsed": false,
+    "section.topstories.collapsed": false,
     "feeds.section.topstories": true,
     "feeds.section.highlights": true
   },
   // Prefs listed as invalidating will prevent the prerendered version
   // of AS from being used if their value is something other than what is listed
   // here. This is required because some preferences cause the page layout to be
   // too different for the prerendered version to be used. Unfortunately, this
   // will result in users who have modified some of their preferences not being
   // able to get the benefits of prerendering.
-  validation: ["showTopSites", "showSearch",
+  validation: ["showTopSites", "showSearch", "collapseTopSites", "section.highlights.collapsed", "section.topstories.collapsed",
   // This means if either of these are set to their default values,
   // prerendering can be used.
   { oneOf: ["feeds.section.topstories", "feeds.section.highlights"] }],
   initialSections: [{
     enabled: true,
     icon: "pocket",
     id: "topstories",
     order: 1,
@@ -3471,17 +3494,17 @@ module.exports = function initStore(redu
 
   return store;
 };
 
 module.exports.rehydrationMiddleware = rehydrationMiddleware;
 module.exports.MERGE_STORE_ACTION = MERGE_STORE_ACTION;
 module.exports.OUTGOING_MESSAGE_NAME = OUTGOING_MESSAGE_NAME;
 module.exports.INCOMING_MESSAGE_NAME = INCOMING_MESSAGE_NAME;
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
 
 /***/ }),
 /* 32 */
 /***/ (function(module, exports) {
 
 module.exports = Redux;
 
 /***/ }),
@@ -3547,17 +3570,17 @@ module.exports = class DetectUserSession
    */
   _onVisibilityChange() {
     if (this.document.visibilityState === VISIBLE) {
       this._sendEvent();
       this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
     }
   }
 };
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
 
 /***/ }),
 /* 34 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /* WEBPACK VAR INJECTION */(function(global) {const DATABASE_NAME = "snippets_db";
 const DATABASE_VERSION = 1;
 const SNIPPETS_OBJECTSTORE_NAME = "snippets";
@@ -3904,12 +3927,12 @@ function addSnippetsSubscriber(store) {
 }
 
 module.exports = {
   addSnippetsSubscriber,
   SnippetsMap,
   SnippetsProvider,
   SNIPPETS_UPDATE_INTERVAL_MS
 };
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
 
 /***/ })
-/******/ ]);
+/******/ ]);
\ No newline at end of file
--- a/browser/extensions/activity-stream/data/content/activity-stream.css
+++ b/browser/extensions/activity-stream/data/content/activity-stream.css
@@ -218,22 +218,24 @@ main {
   text-transform: uppercase; }
   .section-title span {
     color: #737373;
     fill: #737373;
     vertical-align: middle; }
 
 
 .body-wrapper .section-title,
-.body-wrapper .sections-list .section:last-of-type {
+.body-wrapper .sections-list .section:last-of-type,
+.body-wrapper .topic {
   opacity: 0; }
 
 
 .body-wrapper.on .section-title,
-.body-wrapper.on .sections-list .section:last-of-type {
+.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; }
@@ -625,25 +627,24 @@ section.top-sites:hover .edit-topsites-b
   .topic .topic-read-more {
     color: #008EA4; }
     @media (min-width: 800px) {
       .topic .topic-read-more {
         float: right; }
         .topic .topic-read-more:dir(rtl) {
           float: left; } }
     .topic .topic-read-more::after {
-      background-image: url("assets/topic-show-more-12.svg");
-      background-repeat: no-repeat;
+      background: url("assets/topic-show-more-12.svg") no-repeat center center;
       content: '';
       -moz-context-properties: fill;
       display: inline-block;
       fill: #008EA4;
       height: 16px;
       margin-inline-start: 5px;
-      vertical-align: middle;
+      vertical-align: top;
       width: 12px; }
     .topic .topic-read-more:dir(rtl)::after {
       transform: scaleX(-1); }
   .topic::after {
     content: "";
     display: table;
     clear: both; }
 
@@ -1097,18 +1098,17 @@ section.top-sites:hover .edit-topsites-b
 
 .collapsible-section .section-title .click-target {
   cursor: pointer;
   vertical-align: top; }
 
 .collapsible-section .section-title .icon-arrowhead-down,
 .collapsible-section .section-title .icon-arrowhead-forward {
   margin-top: -1px;
-  margin-inline-start: 8px;
-  transition: transform 0.5s cubic-bezier(0.07, 0.95, 0, 1); }
+  margin-inline-start: 8px; }
 
 .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 {
@@ -1206,19 +1206,24 @@ section.top-sites:hover .edit-topsites-b
         width: 12px; }
       .collapsible-section .section-top-bar .info-option-manage button:dir(rtl)::after {
         transform: scaleX(-1); }
 
 .collapsible-section .section-body {
   max-height: 900px;
   margin: 0 -7px;
   padding: 0 7px; }
-  .collapsible-section .section-body.animation-enabled {
-    transition: max-height 0.5s cubic-bezier(0.07, 0.95, 0, 1); }
   .collapsible-section .section-body.animating {
     overflow: hidden; }
 
+.collapsible-section.animation-enabled .section-title .icon-arrowhead-down,
+.collapsible-section.animation-enabled .section-title .icon-arrowhead-forward {
+  transition: transform 0.5s cubic-bezier(0.07, 0.95, 0, 1); }
+
+.collapsible-section.animation-enabled .section-body {
+  transition: max-height 0.5s cubic-bezier(0.07, 0.95, 0, 1); }
+
 .collapsible-section.collapsed .section-body {
   max-height: 0;
   overflow: hidden; }
 
 .collapsible-section:hover .info-option-icon {
   opacity: 1; }
deleted file mode 100644
--- a/browser/extensions/activity-stream/data/content/activity-stream.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!doctype html>
-<html lang="" 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">
-    <title></title>
-    <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/data/content/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/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/data/locales.json
+++ b/browser/extensions/activity-stream/data/locales.json
@@ -605,16 +605,65 @@
     "pocket_feedback_header": "ওয়েব জগতের সেরা, যা ২.৫ লক্ষ মানুষ রক্ষণাবেক্ষণ করে।",
     "pocket_description": "Pocket এর সাহায্যে, যা এখন Mozilla এর অংশ, উচ্চ মানের বিষয়বস্তু আবিষ্কার করুন যা আপনি অন্যথায় পেতেন না।",
     "highlights_empty_state": "ব্রাউজি করা শুরু করুন, এবং কিছু গুরুত্বপূর্ণ নিবন্ধ, ভিডিও, এবং আপনি সম্প্রতি পরিদর্শন বা বুকমার্ক করেছেন এমন কিছু পৃষ্ঠা আমরা এখানে প্রদর্শন করব।",
     "topstories_empty_state": "কিছু একটা ঠিক নেই। {provider} এর শীর্ষ গল্পগুলো পেতে কিছুক্ষণ পর আবার দেখুন। অপেক্ষা করতে চান না? বিশ্বের সেরা গল্পগুলো পেতে কোন জনপ্রিয় বিষয় নির্বাচন করুন।",
     "manual_migration_explanation2": "অন্য ব্রাউজার থেকে আনা বুকমার্ক, ইতিহাস এবং পাসওয়ার্ডগুলির সাথে ফায়ারফক্স ব্যবহার করে দেখুন।",
     "manual_migration_cancel_button": "প্রয়োজন নেই",
     "manual_migration_import_button": "এখনই ইম্পোর্ট করুন"
   },
+  "bn-IN": {
+    "newtab_page_title": "নতুন ট্যাব",
+    "default_label_loading": "লোড করা হচ্ছে…",
+    "header_top_sites": "শীর্ষ সাইটগুলি",
+    "type_label_visited": "দেখা হয়েছে",
+    "type_label_bookmarked": "বুকমার্ক করা হয়েছে",
+    "type_label_synced": "অন্য ডিভাইস থেকে সিঙ্ক করা হয়েছে",
+    "type_label_open": "খুলুন",
+    "type_label_topic": "বিষয়",
+    "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": "তালিকা থেকে মুছে ফেলুন",
+    "search_for_something_with": "{search_term} এর জন্য খুঁজুন সাথে:",
+    "search_button": "অনুসন্ধান",
+    "search_header": "{search_engine_name} এ অনুসন্ধান করুন",
+    "search_web_placeholder": "ওয়েবে সন্ধান করুন",
+    "search_settings": "সার্চ সেটিংস বদল করুন",
+    "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": "আপনার নতুন ট্যাব পেজটি কাস্টমাইজ করুন",
+    "settings_pane_header": "নতুন ট্যাব পছন্দসমূহ",
+    "settings_pane_search_header": "অনুসন্ধান",
+    "settings_pane_search_body": "আপনার নতুন ট্যাব থেকে ওয়েবে খুঁজুন।",
+    "settings_pane_topsites_header": "শীর্ষ সাইট",
+    "settings_pane_topsites_body": "আপনি যেসব সাইটে বেশি যান সেসব সাইটে প্রবেশ করুন।",
+    "settings_pane_topsites_options_showmore": "দুটি সারি দেখান",
+    "settings_pane_done_button": "হয়েছে",
+    "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_edit_button": "সাইটটি সম্পাদনা করুন",
+    "edit_topsites_dismiss_button": "সাইটটি মুছে দিন",
+    "edit_topsites_add_button": "যুক্ত করুন",
+    "topsites_form_title_placeholder": "একটি শিরোনাম লিখুন",
+    "topsites_form_cancel_button": "বাতিল করুন"
+  },
   "br": {
     "newtab_page_title": "Ivinell nevez",
     "default_label_loading": "O kargañ…",
     "header_top_sites": "Lec'hiennoù pennañ",
     "header_stories": "Istorioù pennañ",
     "header_highlights": "Mareoù pouezus",
     "header_visit_again": "Gweladenniñ en-dro",
     "header_bookmarks": "Sinedoù nevez",
@@ -3085,16 +3134,17 @@
     "manual_migration_cancel_button": "לא תודה",
     "manual_migration_import_button": "ייבוא כעת"
   },
   "hi-IN": {
     "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": "किसी अन्य उपकरण से समकालीन किया गया",
@@ -3115,32 +3165,42 @@
     "confirm_history_delete_notice_p2": "इस क्रिया को पहले जैसा नहीं किया जा सकता है.",
     "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": "सूचना",
+    "section_info_send_feedback": "प्रतिक्रिया भेजें",
+    "section_info_privacy_notice": "गोपनीयता सूचना",
     "welcome_title": "नए टैब में आपका स्वागत है",
     "welcome_body": "Firefox यह जगह आपके सर्वाधिक प्रासंगिक पुस्तचिन्ह, लेख, वीडियो और पृष्ठों जिनका आपने हाल ही में दौरा किया है उनको दर्शाने के लिए करेगा, ताकि आप बाद में उन तक आसानी से वापस जा सकें.",
     "welcome_label": "आपके प्रमुखताओं की पहचान की जा रही है",
     "time_label_less_than_minute": "<1मि0",
     "time_label_minute": "{number}मि0",
     "time_label_hour": "{number}मि0",
     "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_highlights_header": "झलकियाँ",
+    "settings_pane_highlights_body2": "हाल ही में देखी गयी या पुस्तचिंहित की गयी रोचक चीज़ों पर वापस जाएँ.",
+    "settings_pane_highlights_options_bookmarks": "पुस्तचिह्न",
+    "settings_pane_highlights_options_visited": "देखी गयीं साइटें",
+    "settings_pane_snippets_header": "अंश",
+    "settings_pane_snippets_body": "Firefox, इंटरनेट संस्कृति और यादृच्छिक मीम के बारे में Mozilla के संक्षिप्त और प्यारे अपडेट पढ़ें.",
     "settings_pane_done_button": "संपन्न",
     "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": "इस साइट को पिन मुक्त करें",
@@ -3151,17 +3211,24 @@
     "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_read_even_more": "और कहानियाँ देखें",
+    "pocket_feedback_header": "वेब का सबसे बढ़िया हिस्सा, 25 लाख लोगों द्वारा निरीक्षित.",
+    "pocket_description": "पॉकेट, जो अब Mozilla का हिस्सा है, की मदद से अन्यथा आपसे छूटने वाली उच्च-गुणवत्ता सामग्रियों को खोजें.",
+    "highlights_empty_state": "ब्राउज़िंग प्रारंभ करें, और हम कुछ प्रमुख आलेख, विडियो, तथा अन्य पृष्ठों को प्रदर्शित करेंगे जिन्हें आपने हाल ही में देखा या पुस्तचिन्हित किया है.",
+    "topstories_empty_state": "आप अंत तक आ गए हैं. {provider} से और शीर्ष घटनाओं के लिए कुछ समय में पुनः आइए. इंतज़ार नहीं कर सकते? वेब से और प्रमुख घटनाएं ढूंढने के लिए एक लोकप्रिय विषय चुनें.",
+    "manual_migration_explanation2": "Firefox को किसी अन्य ब्राउज़र के पुस्तचिह्नों, इतिहास और पासवर्डों के साथ आज़माएं.",
+    "manual_migration_cancel_button": "नहीं शुक्रिया",
+    "manual_migration_import_button": "अब आयात करें"
   },
   "hr": {
     "newtab_page_title": "Nova kartica",
     "default_label_loading": "Učitavanje…",
     "header_top_sites": "Najbolje stranice",
     "header_stories": "Najbolje priče",
     "header_highlights": "Istaknuto",
     "header_visit_again": "Posjetite ponovno",
@@ -4151,84 +4218,147 @@
   "kn": {
     "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": "ಪ್ರಚಲಿತ",
     "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_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": "ಅಭಿಪ್ರಾಯವನ್ನು ಕಳುಹಿಸಿ",
+    "section_info_privacy_notice": "ಗೌಪ್ಯತಾ ಸೂಚನೆ",
+    "welcome_title": "ಹೊಸ ಹಾಳೆಗೆ ಸುಸ್ವಾಗತ",
+    "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_visit_again_header": "ಮತ್ತೆ ಭೇಟಿಕೊಡು",
+    "settings_pane_highlights_header": "ಮುಖ್ಯಾಂಶಗಳು",
+    "settings_pane_highlights_options_bookmarks": "ಪುಟಗುರುತುಗಳು",
+    "settings_pane_highlights_options_visited": "ಭೇಟಿ ನೀಡಿದ ತಾಣಗಳು",
+    "settings_pane_snippets_header": "ಉಲ್ಲೇಖಗಳು",
+    "settings_pane_done_button": "ಆಯಿತು",
     "edit_topsites_button_text": "‍ತಿದ್ದು",
     "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_cancel_button": "ರದ್ದು ಮಾಡು",
+    "topsites_form_url_validation": "ಸರಿಯಾದ URL ಬೇಕಾಗಿದೆ",
+    "pocket_read_more": "ಜನಪ್ರಿಯವಾದ ವಿಷಯಗಳು:",
+    "pocket_read_even_more": "ಹೆಚ್ಚು ಕತೆಗಳನ್ನು ನೋಡಿರಿ",
+    "highlights_empty_state": "ವೀಕ್ಷಣೆ ಮಾಡಲು ಶುರುಮಾಡಿ, ಮತ್ತು ನಾವು ಇತ್ತೀಚೆಗೆ ಭೇಟಿ ನೀಡಿದ ಅಥವಾ ಬುಕ್‌ಮಾರ್ಕ್ ಮಾಡಲಾದ ಕೆಲವು ಶ್ರೇಷ್ಠ ಲೇಖನಗಳು, ವೀಡಿಯೊಗಳು ಮತ್ತು ಇತರ ಪುಟಗಳನ್ನು ನಾವು ತೋರಿಸುತ್ತೇವೆ.",
+    "manual_migration_cancel_button": "ಪರವಾಗಿಲ್ಲ",
+    "manual_migration_import_button": "ಈಗ ಆಮದು ಮಾಡು"
   },
   "ko": {
     "newtab_page_title": "새 탭",
     "default_label_loading": "읽는 중…",
     "header_top_sites": "상위 사이트",
+    "header_stories": "상위 이야기",
     "header_highlights": "하이라이트",
-    "header_stories": "상위 이야기",
+    "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": "트랜드",
     "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": "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": "개인 정보 보호 정책",
     "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": "새 탭 페이지 꾸미기",
     "settings_pane_header": "새 탭 설정",
-    "settings_pane_body": "새 탭을 열 때 어떤 화면을 볼지 선택하세요.",
+    "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_highlights_header": "하이라이트",
-    "settings_pane_highlights_body": "최근 방문 기록과 북마크를 살펴보세요.",
-    "settings_pane_pocketstories_header": "상위 이야기",
-    "settings_pane_pocketstories_body": "Mozilla 가족의 일원인 Pocket으로 다른 곳에서는 찾아보기 힘든 고 품질의 콘텐츠를 연결할 수 있습니다.",
     "settings_pane_done_button": "완료",
     "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": "이 사이트 고정 취소",
@@ -4241,18 +4371,20 @@
     "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": "2천 5백만 명에 의해 추천되는 최고의 웹입니다.",
-    "pocket_feedback_body": "Mozilla 가족의 일원인 Pocket으로 다른 곳에서는 찾아보기 힘든 고 품질의 콘텐츠를 연결할 수 있습니다.",
-    "pocket_send_feedback": "의견 보내기"
+    "pocket_description": "Mozilla와 하나가 된 Pocket의 도움으로 놓칠지도 모르는 고품질의 컨텐츠를 접해보세요.",
+    "manual_migration_explanation2": "다른 브라우저에 있는 북마크, 기록, 비밀번호를 사용해 Firefox를 이용해 보세요.",
+    "manual_migration_cancel_button": "괜찮습니다",
+    "manual_migration_import_button": "지금 가져오기"
   },
   "lij": {
     "newtab_page_title": "Neuvo Feuggio",
     "default_label_loading": "Carego…",
     "header_top_sites": "I megio sciti",
     "header_highlights": "In evidensa",
     "type_label_visited": "Vixitou",
     "type_label_bookmarked": "Azonto a-i segnalibbri",
@@ -4542,16 +4674,17 @@
   "ml": {
     "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": "ട്രെൻഡിംഗ്",
     "type_label_open": "തുറക്കുക",
     "type_label_topic": "വിഷയം",
@@ -4570,34 +4703,43 @@
     "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": "ഫീഡ്ബാക്ക് അയയ്ക്കുക",
+    "section_info_privacy_notice": "സ്വകാര്യതാ അറിയിപ്പ്",
     "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": "നിങ്ങളുടെ പുതിയ ടാബ് താള് ഇഷ്ടാനുസൃതമാക്കുക",
     "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": "നിങ്ങൾ ഓർത്തുവയ്ക്കാനോ അല്ലെങ്കിൽ തിരികെ ചെല്ലാനോ ആഗ്രഹിക്കുന്ന ബ്രൌസിംഗ് ചരിത്രത്തിന്റെ ഭാഗങ്ങൾ നിങ്ങൾക്ക് ഫയർഫോക്സ് കാണിച്ച് തരും.",
     "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": "തീർന്നു",
     "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": "ഈ സൈറ്റ് അണ്‍പിന്‍ ചെയ്യുക",
@@ -4610,16 +4752,20 @@
     "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": "250 ലക്ഷം പേരാൽ തെരഞ്ഞെടുക്കപ്പെട്ട വെബിലെ ഏറ്റവും മികച്ചവയാണിവ.",
+    "pocket_description": "മോസില്ലയുടെ ഭാഗമായ, പോക്കറ്റിന്റെ സഹായം കൊണ്ട്, നിങ്ങൾക്ക് കണ്ടെത്താനാവാത്ത ഉയർന്ന നിലവാരമുള്ള ഉള്ളടക്കം കണ്ടെത്തുക.",
+    "highlights_empty_state": "ബ്രൗസിംഗ് ആരംഭിക്കുക, നിങ്ങൾ സമീപകാലത്ത് സന്ദർശിച്ചതോ ബുക്ക്മാർക്ക് ചെയ്തതോ ആയ മികച്ച ലേഖനങ്ങളിൽ നിന്നോ, വീഡിയോകളിൽ നിന്നോ, മറ്റു പേജുകളിൽ നിന്നോ ചിലത് ഞങ്ങൾ ഇവിടെ കാണിക്കും.",
+    "topstories_empty_state": "നിങ്ങൾ ഇവിടെ വരെ എത്തി. {Provider}ൽ നിന്നുള്ള കൂടുതൽ പ്രധാന വാർത്തകൾക്കായി പിന്നീട് വീണ്ടും പരിശോധിക്കുക. കാത്തിരിക്കാൻ പറ്റില്ലേ? വെബിൽ നിന്ന് കൂടുതൽ മികച്ച കഥകൾ കണ്ടെത്തുന്നതിന് ഒരു ജനപ്രിയ വിഷയം തിരഞ്ഞെടുക്കുക.",
+    "manual_migration_explanation2": "മറ്റൊരു ബ്രൗസറിൽ നിന്നുള്ള ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ എന്നിവ ഉപയോഗിച്ച് ഫയർഫോക്സ് പരീക്ഷിക്കുക.",
     "manual_migration_cancel_button": "വേണ്ട, നന്ദി",
     "manual_migration_import_button": "ഇപ്പോൾ ഇറക്കുമതി ചെയ്യുക"
   },
   "mr": {
     "newtab_page_title": "नवीन टॅब",
     "default_label_loading": "दाखल करीत आहे…",
     "header_top_sites": "खास साईट्स",
     "header_highlights": "ठळक",
@@ -5313,17 +5459,17 @@
     "settings_pane_topsites_header": "Popularne",
     "settings_pane_topsites_body": "Otwieraj najczęściej odwiedzane strony.",
     "settings_pane_topsites_options_showmore": "Dwa rzędy",
     "settings_pane_bookmarks_header": "Najnowsze zakładki",
     "settings_pane_bookmarks_body": "Nowo utworzone zakładki w jednym miejscu.",
     "settings_pane_visit_again_header": "Odwiedź ponownie",
     "settings_pane_visit_again_body": "Firefox pokaże strony z historii, do których warto wrócić.",
     "settings_pane_highlights_header": "Wyróżnione",
-    "settings_pane_highlights_body2": "Umożliwia szybki powrót do niedawno odwiedzonych stron lub dodanych zakładek.",
+    "settings_pane_highlights_body2": "Szybko wracaj do niedawno odwiedzonych stron i dodanych zakładek.",
     "settings_pane_highlights_options_bookmarks": "Zakładki",
     "settings_pane_highlights_options_visited": "Odwiedzone",
     "settings_pane_snippets_header": "Notki",
     "settings_pane_snippets_body": "Krótkie informacje od Mozilli o Firefoksie i kulturze internetowej, a od czasu do czasu także jakiś żart.",
     "settings_pane_done_button": "Gotowe",
     "edit_topsites_button_text": "Edytuj",
     "edit_topsites_button_label": "Dostosuj często odwiedzane strony",
     "edit_topsites_showmore_button": "Więcej",
@@ -5340,17 +5486,17 @@
     "topsites_form_url_placeholder": "Wpisz lub wklej adres",
     "topsites_form_add_button": "Dodaj",
     "topsites_form_save_button": "Zapisz",
     "topsites_form_cancel_button": "Anuluj",
     "topsites_form_url_validation": "Wymagany jest prawidłowy adres",
     "pocket_read_more": "Popularne tematy:",
     "pocket_read_even_more": "Więcej artykułów",
     "pocket_feedback_header": "Najlepsze, co oferuje Internet, wybrane przez ponad 25 milionów osób.",
-    "pocket_description": "Umożliwia odkrywanie wysokiej jakości treści dzięki serwisowi Pocket, będącego teraz częścią Mozilli.",
+    "pocket_description": "Odkrywaj wysokiej jakości treści dzięki serwisowi Pocket, będącego teraz częścią Mozilli.",
     "highlights_empty_state": "Zacznij przeglądać Internet, a pojawią się tutaj niedawno dodane zakładki i odwiedzone artykuły, filmy i inne strony.",
     "topstories_empty_state": "To na razie wszystko. {provider} później będzie mieć więcej popularnych artykułów. Nie możesz się doczekać? Wybierz popularny temat, aby znaleźć więcej artykułów z całego Internetu.",
     "manual_migration_explanation2": "Używaj Firefoksa z zakładkami, historią i hasłami z innej przeglądarki.",
     "manual_migration_cancel_button": "Nie, dziękuję",
     "manual_migration_import_button": "Importuj teraz"
   },
   "pt-BR": {
     "newtab_page_title": "Nova aba",
@@ -6425,26 +6571,26 @@
     "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": "บันทึกไปยัง Pocket",
-    "search_for_something_with": "ค้นหาสำหรับ {search_term} ด้วย:",
+    "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": "ประกาศความเป็นส่วนตัว",
     "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": "เลือกสิ่งที่คุณเห็นในหน้านี้",
@@ -6453,17 +6599,17 @@
     "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 จะแสดงประวัติการท่องเว็บที่คุณอาจต้องการให้จดจำหรือกลับไปเยี่ยมชมอีกครั้งที่นี่",
     "settings_pane_highlights_header": "รายการเด่น",
-    "settings_pane_highlights_body2": "ค้นหาทางของคุณกลับไปยังสิ่งที่น่าสนใจที่คุณได้เยี่ยมชมหรือเพิ่มที่คั่นหน้าไว้เมื่อเร็ว ๆ นี้",
+    "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": "เสร็จสิ้น",
     "edit_topsites_button_text": "แก้ไข",
     "edit_topsites_button_label": "ปรับแต่งส่วนไซต์เด่นของคุณ",
     "edit_topsites_showmore_button": "แสดงเพิ่มเติม",
@@ -6728,16 +6874,17 @@
     "manual_migration_cancel_button": "Ні, дякую",
     "manual_migration_import_button": "Імпортувати зараз"
   },
   "ur": {
     "newtab_page_title": "نیا ٹیب",
     "default_label_loading": "لوڈ کر رہا ہے…",
     "header_top_sites": "بہترین سائٹیں",
     "header_stories": "بہترین کہانیاں",
+    "header_highlights": "شہ سرخياں",
     "header_visit_again": "دوبارہ دورہ کریں",
     "header_bookmarks": "حالیہ نشانیاں",
     "header_recommended_by": "{provider} کی جانب سے تجویز کردہ",
     "header_stories_from": "من جانب",
     "type_label_visited": "دورہ شدہ",
     "type_label_bookmarked": "نشان شدہ",
     "type_label_synced": "کسی دوسرے آلے سے ہمہ وقت ساز کیا گیا ہے",
     "type_label_recommended": "رجحان سازی",
@@ -6767,25 +6914,26 @@
     "welcome_body": "اس جگہ کا استعمال کرنے ہوئے Firefox آپکی متعلقہ نشانیاں، عبارات، وڈیوز اور صفحات جن کا حال ہی میں ص آُپ نے دورہ کیا ہے دکھائے گا۔ تاکہ آپ ان تک واپس آسانی سے پہنچ سکیں۔",
     "welcome_label": "آپکی جھلکیوں کی نشاندہی کر رہا ہے",
     "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": "اپنے نئے ٹیب کہ صفحہ کی تخصیص کریں",
     "settings_pane_header": "نئے َٹیب کی ترجیحات",
-    "settings_pane_body": "انتخاب کریں آپ کیا دیکھنا چاہتےہیں جب آپ نیا ٹیب کھولیں گے۔",
     "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_visit_again_header": "دوبارہ دورہ کریں",
-    "settings_pane_pocketstories_header": "بہترین کہانیاں",
+    "settings_pane_highlights_header": "شہ سرخياں",
+    "settings_pane_highlights_options_bookmarks": "نشانیاں",
+    "settings_pane_snippets_header": "سنپیٹ",
     "settings_pane_done_button": "ہوگیا",
     "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": "اس سائٹ کو انپن کریں",
@@ -6797,18 +6945,16 @@
     "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_body": "Pocket ایک جصہ ہے Mozilla کے خاندان کا،آپ کو اعلی میعار کے مواد سے جڑنے میں مدد دے گا جو شاید آپ بصورت دیگر نہ ڈھونڈ سکتے۔",
-    "pocket_send_feedback": "جواب الجواب ارسال کریں",
     "manual_migration_cancel_button": "نہیں شکریہ",
     "manual_migration_import_button": "ابھی درآمد کری"
   },
   "uz": {
     "newtab_page_title": "Yangi ichki oyna",
     "default_label_loading": "Yuklanmoqda…",
     "header_top_sites": "Ommabop saytlar",
     "manual_migration_cancel_button": "Yoʻq, kerak emas"
@@ -6923,17 +7069,17 @@
     "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_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 在此显示您可能想记住或将再次访问的浏览记录。",
     "settings_pane_highlights_header": "集锦",
     "settings_pane_highlights_body2": "根据您最近访问的页面和添加的书签推荐您感兴趣的东西。",
     "settings_pane_highlights_options_bookmarks": "书签",
--- 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.10.13.1281-6245c446</em:version>
+    <em:version>2017.10.20.1325-95b4c353</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/jar.mn
+++ b/browser/extensions/activity-stream/jar.mn
@@ -12,8 +12,390 @@
 #ifndef RELEASE_OR_BETA
   content/vendor/react-dev.js (./vendor/react-dev.js)
   content/vendor/react-dom-dev.js (./vendor/react-dom-dev.js)
 #endif
   content/vendor/react-intl.js (./vendor/react-intl.js)
   content/vendor/redux.js (./vendor/redux.js)
   content/vendor/react-redux.js (./vendor/react-redux.js)
   content/data/ (./data/*)
+#ifndef RELEASE_OR_BETA
+  content/data/content/activity-stream-debug.html (./prerendered/en-US/activity-stream-debug.html)
+  content/data/content/activity-stream-prerendered-debug.html (./prerendered/en-US/activity-stream-prerendered-debug.html)
+#endif
+
+# These defines and ifs below are generated by https://github.com/mozilla/activity-stream/blob/master/bin/render-activity-stream-html.js
+#define bn_BD bn-BD
+#define bn_IN bn-IN
+#define en_GB en-GB
+#define es_AR es-AR
+#define es_CL es-CL
+#define es_ES es-ES
+#define es_MX es-MX
+#define fy_NL fy-NL
+#define ga_IE ga-IE
+#define gu_IN gu-IN
+#define hi_IN hi-IN
+#define hy_AM hy-AM
+#define ja_JP_mac ja-JP-mac
+#define nb_NO nb-NO
+#define ne_NP ne-NP
+#define nn_NO nn-NO
+#define pa_IN pa-IN
+#define pt_BR pt-BR
+#define pt_PT pt-PT
+#define sv_SE sv-SE
+#define ta_LK ta-LK
+#define zh_CN zh-CN
+#define zh_TW zh-TW
+#if AB_CD == ach
+  content/data/content/activity-stream-initial-state.js (./prerendered/ach/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ach/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ach/activity-stream.html)
+#elif AB_CD == ar
+  content/data/content/activity-stream-initial-state.js (./prerendered/ar/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ar/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ar/activity-stream.html)
+#elif AB_CD == ast
+  content/data/content/activity-stream-initial-state.js (./prerendered/ast/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ast/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ast/activity-stream.html)
+#elif AB_CD == az
+  content/data/content/activity-stream-initial-state.js (./prerendered/az/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/az/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/az/activity-stream.html)
+#elif AB_CD == be
+  content/data/content/activity-stream-initial-state.js (./prerendered/be/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/be/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/be/activity-stream.html)
+#elif AB_CD == bg
+  content/data/content/activity-stream-initial-state.js (./prerendered/bg/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/bg/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/bg/activity-stream.html)
+#elif AB_CD == bn_BD
+  content/data/content/activity-stream-initial-state.js (./prerendered/bn-BD/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/bn-BD/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/bn-BD/activity-stream.html)
+#elif AB_CD == bn_IN
+  content/data/content/activity-stream-initial-state.js (./prerendered/bn-IN/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/bn-IN/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/bn-IN/activity-stream.html)
+#elif AB_CD == br
+  content/data/content/activity-stream-initial-state.js (./prerendered/br/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/br/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/br/activity-stream.html)
+#elif AB_CD == bs
+  content/data/content/activity-stream-initial-state.js (./prerendered/bs/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/bs/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/bs/activity-stream.html)
+#elif AB_CD == ca
+  content/data/content/activity-stream-initial-state.js (./prerendered/ca/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ca/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ca/activity-stream.html)
+#elif AB_CD == cak
+  content/data/content/activity-stream-initial-state.js (./prerendered/cak/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/cak/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/cak/activity-stream.html)
+#elif AB_CD == cs
+  content/data/content/activity-stream-initial-state.js (./prerendered/cs/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/cs/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/cs/activity-stream.html)
+#elif AB_CD == cy
+  content/data/content/activity-stream-initial-state.js (./prerendered/cy/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/cy/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/cy/activity-stream.html)
+#elif AB_CD == da
+  content/data/content/activity-stream-initial-state.js (./prerendered/da/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/da/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/da/activity-stream.html)
+#elif AB_CD == de
+  content/data/content/activity-stream-initial-state.js (./prerendered/de/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/de/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/de/activity-stream.html)
+#elif AB_CD == dsb
+  content/data/content/activity-stream-initial-state.js (./prerendered/dsb/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/dsb/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/dsb/activity-stream.html)
+#elif AB_CD == el
+  content/data/content/activity-stream-initial-state.js (./prerendered/el/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/el/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/el/activity-stream.html)
+#elif AB_CD == en_GB
+  content/data/content/activity-stream-initial-state.js (./prerendered/en-GB/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/en-GB/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/en-GB/activity-stream.html)
+#elif AB_CD == eo
+  content/data/content/activity-stream-initial-state.js (./prerendered/eo/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/eo/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/eo/activity-stream.html)
+#elif AB_CD == es_AR
+  content/data/content/activity-stream-initial-state.js (./prerendered/es-AR/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/es-AR/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/es-AR/activity-stream.html)
+#elif AB_CD == es_CL
+  content/data/content/activity-stream-initial-state.js (./prerendered/es-CL/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/es-CL/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/es-CL/activity-stream.html)
+#elif AB_CD == es_ES
+  content/data/content/activity-stream-initial-state.js (./prerendered/es-ES/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/es-ES/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/es-ES/activity-stream.html)
+#elif AB_CD == es_MX
+  content/data/content/activity-stream-initial-state.js (./prerendered/es-MX/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/es-MX/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/es-MX/activity-stream.html)
+#elif AB_CD == et
+  content/data/content/activity-stream-initial-state.js (./prerendered/et/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/et/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/et/activity-stream.html)
+#elif AB_CD == eu
+  content/data/content/activity-stream-initial-state.js (./prerendered/eu/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/eu/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/eu/activity-stream.html)
+#elif AB_CD == fa
+  content/data/content/activity-stream-initial-state.js (./prerendered/fa/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/fa/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/fa/activity-stream.html)
+#elif AB_CD == fi
+  content/data/content/activity-stream-initial-state.js (./prerendered/fi/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/fi/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/fi/activity-stream.html)
+#elif AB_CD == fr
+  content/data/content/activity-stream-initial-state.js (./prerendered/fr/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/fr/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/fr/activity-stream.html)
+#elif AB_CD == fy_NL
+  content/data/content/activity-stream-initial-state.js (./prerendered/fy-NL/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/fy-NL/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/fy-NL/activity-stream.html)
+#elif AB_CD == ga_IE
+  content/data/content/activity-stream-initial-state.js (./prerendered/ga-IE/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ga-IE/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ga-IE/activity-stream.html)
+#elif AB_CD == gd
+  content/data/content/activity-stream-initial-state.js (./prerendered/gd/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/gd/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/gd/activity-stream.html)
+#elif AB_CD == gu_IN
+  content/data/content/activity-stream-initial-state.js (./prerendered/gu-IN/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/gu-IN/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/gu-IN/activity-stream.html)
+#elif AB_CD == he
+  content/data/content/activity-stream-initial-state.js (./prerendered/he/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/he/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/he/activity-stream.html)
+#elif AB_CD == hi_IN
+  content/data/content/activity-stream-initial-state.js (./prerendered/hi-IN/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/hi-IN/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/hi-IN/activity-stream.html)
+#elif AB_CD == hr
+  content/data/content/activity-stream-initial-state.js (./prerendered/hr/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/hr/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/hr/activity-stream.html)
+#elif AB_CD == hsb
+  content/data/content/activity-stream-initial-state.js (./prerendered/hsb/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/hsb/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/hsb/activity-stream.html)
+#elif AB_CD == hu
+  content/data/content/activity-stream-initial-state.js (./prerendered/hu/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/hu/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/hu/activity-stream.html)
+#elif AB_CD == hy_AM
+  content/data/content/activity-stream-initial-state.js (./prerendered/hy-AM/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/hy-AM/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/hy-AM/activity-stream.html)
+#elif AB_CD == ia
+  content/data/content/activity-stream-initial-state.js (./prerendered/ia/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ia/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ia/activity-stream.html)
+#elif AB_CD == id
+  content/data/content/activity-stream-initial-state.js (./prerendered/id/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/id/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/id/activity-stream.html)
+#elif AB_CD == it
+  content/data/content/activity-stream-initial-state.js (./prerendered/it/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/it/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/it/activity-stream.html)
+#elif AB_CD == ja
+  content/data/content/activity-stream-initial-state.js (./prerendered/ja/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ja/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ja/activity-stream.html)
+#elif AB_CD == ja_JP_mac
+  content/data/content/activity-stream-initial-state.js (./prerendered/ja-JP-mac/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ja-JP-mac/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ja-JP-mac/activity-stream.html)
+#elif AB_CD == ka
+  content/data/content/activity-stream-initial-state.js (./prerendered/ka/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ka/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ka/activity-stream.html)
+#elif AB_CD == kab
+  content/data/content/activity-stream-initial-state.js (./prerendered/kab/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/kab/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/kab/activity-stream.html)
+#elif AB_CD == kk
+  content/data/content/activity-stream-initial-state.js (./prerendered/kk/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/kk/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/kk/activity-stream.html)
+#elif AB_CD == km
+  content/data/content/activity-stream-initial-state.js (./prerendered/km/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/km/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/km/activity-stream.html)
+#elif AB_CD == kn
+  content/data/content/activity-stream-initial-state.js (./prerendered/kn/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/kn/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/kn/activity-stream.html)
+#elif AB_CD == ko
+  content/data/content/activity-stream-initial-state.js (./prerendered/ko/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ko/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ko/activity-stream.html)
+#elif AB_CD == lij
+  content/data/content/activity-stream-initial-state.js (./prerendered/lij/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/lij/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/lij/activity-stream.html)
+#elif AB_CD == lo
+  content/data/content/activity-stream-initial-state.js (./prerendered/lo/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/lo/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/lo/activity-stream.html)
+#elif AB_CD == lt
+  content/data/content/activity-stream-initial-state.js (./prerendered/lt/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/lt/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/lt/activity-stream.html)
+#elif AB_CD == lv
+  content/data/content/activity-stream-initial-state.js (./prerendered/lv/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/lv/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/lv/activity-stream.html)
+#elif AB_CD == mk
+  content/data/content/activity-stream-initial-state.js (./prerendered/mk/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/mk/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/mk/activity-stream.html)
+#elif AB_CD == ml
+  content/data/content/activity-stream-initial-state.js (./prerendered/ml/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ml/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ml/activity-stream.html)
+#elif AB_CD == mr
+  content/data/content/activity-stream-initial-state.js (./prerendered/mr/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/mr/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/mr/activity-stream.html)
+#elif AB_CD == ms
+  content/data/content/activity-stream-initial-state.js (./prerendered/ms/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ms/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ms/activity-stream.html)
+#elif AB_CD == my
+  content/data/content/activity-stream-initial-state.js (./prerendered/my/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/my/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/my/activity-stream.html)
+#elif AB_CD == nb_NO
+  content/data/content/activity-stream-initial-state.js (./prerendered/nb-NO/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/nb-NO/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/nb-NO/activity-stream.html)
+#elif AB_CD == ne_NP
+  content/data/content/activity-stream-initial-state.js (./prerendered/ne-NP/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ne-NP/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ne-NP/activity-stream.html)
+#elif AB_CD == nl
+  content/data/content/activity-stream-initial-state.js (./prerendered/nl/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/nl/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/nl/activity-stream.html)
+#elif AB_CD == nn_NO
+  content/data/content/activity-stream-initial-state.js (./prerendered/nn-NO/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/nn-NO/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/nn-NO/activity-stream.html)
+#elif AB_CD == pa_IN
+  content/data/content/activity-stream-initial-state.js (./prerendered/pa-IN/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/pa-IN/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/pa-IN/activity-stream.html)
+#elif AB_CD == pl
+  content/data/content/activity-stream-initial-state.js (./prerendered/pl/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/pl/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/pl/activity-stream.html)
+#elif AB_CD == pt_BR
+  content/data/content/activity-stream-initial-state.js (./prerendered/pt-BR/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/pt-BR/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/pt-BR/activity-stream.html)
+#elif AB_CD == pt_PT
+  content/data/content/activity-stream-initial-state.js (./prerendered/pt-PT/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/pt-PT/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/pt-PT/activity-stream.html)
+#elif AB_CD == rm
+  content/data/content/activity-stream-initial-state.js (./prerendered/rm/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/rm/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/rm/activity-stream.html)
+#elif AB_CD == ro
+  content/data/content/activity-stream-initial-state.js (./prerendered/ro/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ro/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ro/activity-stream.html)
+#elif AB_CD == ru
+  content/data/content/activity-stream-initial-state.js (./prerendered/ru/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ru/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ru/activity-stream.html)
+#elif AB_CD == sk
+  content/data/content/activity-stream-initial-state.js (./prerendered/sk/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/sk/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/sk/activity-stream.html)
+#elif AB_CD == sl
+  content/data/content/activity-stream-initial-state.js (./prerendered/sl/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/sl/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/sl/activity-stream.html)
+#elif AB_CD == sq
+  content/data/content/activity-stream-initial-state.js (./prerendered/sq/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/sq/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/sq/activity-stream.html)
+#elif AB_CD == sr
+  content/data/content/activity-stream-initial-state.js (./prerendered/sr/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/sr/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/sr/activity-stream.html)
+#elif AB_CD == sv_SE
+  content/data/content/activity-stream-initial-state.js (./prerendered/sv-SE/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/sv-SE/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/sv-SE/activity-stream.html)
+#elif AB_CD == ta
+  content/data/content/activity-stream-initial-state.js (./prerendered/ta/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ta/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ta/activity-stream.html)
+#elif AB_CD == ta_LK
+  content/data/content/activity-stream-initial-state.js (./prerendered/ta-LK/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ta-LK/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ta-LK/activity-stream.html)
+#elif AB_CD == te
+  content/data/content/activity-stream-initial-state.js (./prerendered/te/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/te/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/te/activity-stream.html)
+#elif AB_CD == th
+  content/data/content/activity-stream-initial-state.js (./prerendered/th/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/th/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/th/activity-stream.html)
+#elif AB_CD == tl
+  content/data/content/activity-stream-initial-state.js (./prerendered/tl/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/tl/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/tl/activity-stream.html)
+#elif AB_CD == tr
+  content/data/content/activity-stream-initial-state.js (./prerendered/tr/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/tr/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/tr/activity-stream.html)
+#elif AB_CD == uk
+  content/data/content/activity-stream-initial-state.js (./prerendered/uk/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/uk/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/uk/activity-stream.html)
+#elif AB_CD == ur
+  content/data/content/activity-stream-initial-state.js (./prerendered/ur/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/ur/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/ur/activity-stream.html)
+#elif AB_CD == uz
+  content/data/content/activity-stream-initial-state.js (./prerendered/uz/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/uz/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/uz/activity-stream.html)
+#elif AB_CD == vi
+  content/data/content/activity-stream-initial-state.js (./prerendered/vi/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/vi/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/vi/activity-stream.html)
+#elif AB_CD == zh_CN
+  content/data/content/activity-stream-initial-state.js (./prerendered/zh-CN/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/zh-CN/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/zh-CN/activity-stream.html)
+#elif AB_CD == zh_TW
+  content/data/content/activity-stream-initial-state.js (./prerendered/zh-TW/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/zh-TW/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/zh-TW/activity-stream.html)
+#else
+  content/data/content/activity-stream-initial-state.js (./prerendered/en-US/activity-stream-initial-state.js)
+  content/data/content/activity-stream-prerendered.html (./prerendered/en-US/activity-stream-prerendered.html)
+  content/data/content/activity-stream.html (./prerendered/en-US/activity-stream.html)
+#endif
--- a/browser/extensions/activity-stream/lib/ActivityStream.jsm
+++ b/browser/extensions/activity-stream/lib/ActivityStream.jsm
@@ -231,17 +231,16 @@ const FEEDS_DATA = [
 const FEEDS_CONFIG = new Map();
 for (const config of FEEDS_DATA) {
   const pref = `feeds.${config.name}`;
   FEEDS_CONFIG.set(pref, config.factory);
   PREFS_CONFIG.set(pref, config);
 }
 
 this.ActivityStream = class ActivityStream {
-
   /**
    * constructor - Initializes an instance of ActivityStream
    *
    * @param  {object} options Options for the ActivityStream instance
    * @param  {string} options.id Add-on ID. e.g. "activity-stream@mozilla.org".
    * @param  {string} options.version Version of the add-on. e.g. "0.1.0"
    * @param  {string} options.newTabURL URL of New Tab page on which A.S. is displayed. e.g. "about:newtab"
    */
--- a/browser/extensions/activity-stream/lib/ActivityStreamMessageChannel.jsm
+++ b/browser/extensions/activity-stream/lib/ActivityStreamMessageChannel.jsm
@@ -18,17 +18,16 @@ const DEFAULT_OPTIONS = {
     throw new Error(`\nMessageChannel: Received action ${action.type}, but no dispatcher was defined.\n`);
   },
   pageURL: ABOUT_NEW_TAB_URL,
   outgoingMessageName: "ActivityStream:MainToContent",
   incomingMessageName: "ActivityStream:ContentToMain"
 };
 
 this.ActivityStreamMessageChannel = class ActivityStreamMessageChannel {
-
   /**
    * ActivityStreamMessageChannel - This module connects a Redux store to a RemotePageManager in Firefox.
    *                  Call .createChannel to start the connection, and .destroyChannel to destroy it.
    *                  You should use the BroadcastToContent, SendToContent, and SendToMain action creators
    *                  in common/Actions.jsm to help you create actions that will be automatically routed
    *                  to the correct location.
    *
    * @param  {object} options
@@ -133,17 +132,19 @@ this.ActivityStreamMessageChannel = clas
   createChannel() {
     //  Receive AboutNewTab's Remote Pages instance, if it exists, on override
     const channel = this.pageURL === ABOUT_NEW_TAB_URL && AboutNewTab.override(true);
     this.channel = channel || new RemotePages([ABOUT_HOME_URL, ABOUT_NEW_TAB_URL]);
     this.channel.addMessageListener("RemotePage:Init", this.onNewTabInit);
     this.channel.addMessageListener("RemotePage:Load", this.onNewTabLoad);
     this.channel.addMessageListener("RemotePage:Unload", this.onNewTabUnload);
     this.channel.addMessageListener(this.incomingMessageName, this.onMessage);
+  }
 
+  simulateMessagesForExistingTabs() {
     // Some pages might have already loaded, so we won't get the usual message
     for (const target of this.channel.messagePorts) {
       const simulatedMsg = {target};
       this.onNewTabInit(simulatedMsg);
       if (target.loaded) {
         this.onNewTabLoad(simulatedMsg);
       }
     }
--- a/browser/extensions/activity-stream/lib/ActivityStreamPrefs.jsm
+++ b/browser/extensions/activity-stream/lib/ActivityStreamPrefs.jsm
@@ -5,17 +5,16 @@
 
 const {utils: Cu} = Components;
 Cu.import("resource://gre/modules/Preferences.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 const ACTIVITY_STREAM_PREF_BRANCH = "browser.newtabpage.activity-stream.";
 
 this.Prefs = class Prefs extends Preferences {
-
   /**
    * Prefs - A wrapper around Preferences that always sets the branch to
    *         ACTIVITY_STREAM_PREF_BRANCH
    */
   constructor(branch = ACTIVITY_STREAM_PREF_BRANCH) {
     super({branch});
     this._branchName = branch;
     this._branchObservers = new Map();
@@ -33,17 +32,16 @@ this.Prefs = class Prefs extends Prefere
       listener.onPrefChanged(pref, this.get(pref));
     };
     this._prefBranch.addObserver("", observer);
     this._branchObservers.set(listener, observer);
   }
 };
 
 this.DefaultPrefs = class DefaultPrefs {
-
   /**
    * DefaultPrefs - A helper for setting and resetting default prefs for the add-on
    *
    * @param  {Map} config A Map with {string} key of the pref name and {object}
    *                      value with the following pref properties:
    *         {string} .title (optional) A description of the pref
    *         {bool|string|number} .value The default value for the pref
    * @param  {string} branch (optional) The pref branch (defaults to ACTIVITY_STREAM_PREF_BRANCH)
--- a/browser/extensions/activity-stream/lib/HighlightsFeed.jsm
+++ b/browser/extensions/activity-stream/lib/HighlightsFeed.jsm
@@ -18,63 +18,57 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyModuleGetter(this, "LinksCache",
   "resource://activity-stream/lib/LinksCache.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "NewTabUtils",
   "resource://gre/modules/NewTabUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "Screenshots",
   "resource://activity-stream/lib/Screenshots.jsm");
 
 const HIGHLIGHTS_MAX_LENGTH = 9;
-const HIGHLIGHTS_UPDATE_TIME = 15 * 60 * 1000; // 15 minutes
 const MANY_EXTRA_LENGTH = HIGHLIGHTS_MAX_LENGTH * 5 + TOP_SITES_SHOWMORE_LENGTH;
 const SECTION_ID = "highlights";
 
 this.HighlightsFeed = class HighlightsFeed {
   constructor() {
-    this.highlightsLastUpdated = 0;
-    this.highlightsLength = 0;
     this.dedupe = new Dedupe(this._dedupeKey);
     this.linksCache = new LinksCache(NewTabUtils.activityStreamLinks,
       "getHighlights", ["image"]);
   }
 
   _dedupeKey(site) {
     // Treat bookmarks as un-dedupable, otherwise show one of a url
     return site && (site.type === "bookmark" ? {} : site.url);
   }
 
   init() {
     SectionsManager.onceInitialized(this.postInit.bind(this));
   }
 
   postInit() {
     SectionsManager.enableSection(SECTION_ID);
-    this.fetchHighlights(true);
+    this.fetchHighlights({broadcast: true});
   }
 
   uninit() {
     SectionsManager.disableSection(SECTION_ID);
   }
 
-  async fetchHighlights(broadcast = false) {
-    // We broadcast when we want to force an update, so get fresh links
-    if (broadcast) {
-      this.linksCache.expire();
+  /**
+   * Refresh the highlights data for content.
+   * @param {bool} options.broadcast Should the update be broadcasted.
+   */
+  async fetchHighlights(options = {}) {
+    // We need TopSites for deduping, so wait for TOP_SITES_UPDATED.
+    if (!this.store.getState().TopSites.initialized) {
+      return;
     }
 
-    // We need TopSites to have been initialised for deduping
-    if (!this.store.getState().TopSites.initialized) {
-      await new Promise(resolve => {
-        const unsubscribe = this.store.subscribe(() => {
-          if (this.store.getState().TopSites.initialized) {
-            unsubscribe();
-            resolve();
-          }
-        });
-      });
+    // We broadcast when we want to force an update, so get fresh links
+    if (options.broadcast) {
+      this.linksCache.expire();
     }
 
     // Request more than the expected length to allow for items being removed by
     // deduping against Top Sites or multiple history from the same domain, etc.
     const manyPages = await this.linksCache.request({numItems: MANY_EXTRA_LENGTH});
 
     // Remove adult highlights if we need to
     const checkedAdult = this.store.getState().Prefs.values.filterAdult ?
@@ -114,19 +108,22 @@ this.HighlightsFeed = class HighlightsFe
       delete page.__sharedCache;
 
       // Skip the rest if we have enough items
       if (highlights.length === HIGHLIGHTS_MAX_LENGTH) {
         break;
       }
     }
 
-    SectionsManager.updateSection(SECTION_ID, {rows: highlights}, broadcast);
-    this.highlightsLastUpdated = Date.now();
-    this.highlightsLength = highlights.length;
+    const sectionIndex = SectionsManager.sections.get(SECTION_ID).order;
+    const {initialized} = this.store.getState().Sections[sectionIndex];
+    // Broadcast when required or if it is the first update.
+    const shouldBroadcast = options.broadcast || !initialized;
+
+    SectionsManager.updateSection(SECTION_ID, {rows: highlights}, shouldBroadcast);
   }
 
   /**
    * Fetch an image for a given highlight and update the card with it. If no
    * image is available then fallback to fetching a screenshot.
    */
   async fetchImage(page) {
     // Request a screenshot if we don't already have one pending
@@ -136,40 +133,33 @@ this.HighlightsFeed = class HighlightsFe
     });
   }
 
   onAction(action) {
     switch (action.type) {
       case at.INIT:
         this.init();
         break;
-      case at.NEW_TAB_LOAD:
-        if (this.highlightsLength < HIGHLIGHTS_MAX_LENGTH) {
-          // If we haven't filled the highlights grid yet, fetch again.
-          this.fetchHighlights(true);
-        } else if (Date.now() - this.highlightsLastUpdated >= HIGHLIGHTS_UPDATE_TIME) {
-          // If the last time we refreshed the data is greater than 15 minutes, fetch again.
-          this.fetchHighlights(false);
-        }
+      case at.SYSTEM_TICK:
+        this.fetchHighlights({broadcast: false});
         break;
       case at.MIGRATION_COMPLETED:
       case at.PLACES_HISTORY_CLEARED:
       case at.PLACES_LINKS_DELETED:
       case at.PLACES_LINK_BLOCKED:
-        this.fetchHighlights(true);
+        this.fetchHighlights({broadcast: true});
         break;
       case at.PLACES_BOOKMARK_ADDED:
       case at.PLACES_BOOKMARK_REMOVED:
         this.linksCache.expire();
-        this.fetchHighlights(false);
+        this.fetchHighlights({broadcast: false});
         break;
       case at.TOP_SITES_UPDATED:
-        this.fetchHighlights(false);
+        this.fetchHighlights({broadcast: false});
         break;
       case at.UNINIT:
         this.uninit();
         break;
     }
   }
 };
 
-this.HIGHLIGHTS_UPDATE_TIME = HIGHLIGHTS_UPDATE_TIME;
-this.EXPORTED_SYMBOLS = ["HighlightsFeed", "HIGHLIGHTS_UPDATE_TIME", "SECTION_ID"];
+this.EXPORTED_SYMBOLS = ["HighlightsFeed", "SECTION_ID"];
--- a/browser/extensions/activity-stream/lib/LinksCache.jsm
+++ b/browser/extensions/activity-stream/lib/LinksCache.jsm
@@ -1,24 +1,29 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 this.EXPORTED_SYMBOLS = ["LinksCache"];
 
-const EXPIRATION_TIME = 5 * 60 * 1000; // 5 minutes
+// This should be slightly less than SYSTEM_TICK_INTERVAL as timer
+// comparisons are too exact while the async/await functionality will make the
+// last recorded time a little bit later. This causes the comparasion to skip
+// updates.
+// It should be 10% less than SYSTEM_TICK to update at least once every 5 mins.
+// https://github.com/mozilla/activity-stream/pull/3695#discussion_r144678214
+const EXPIRATION_TIME = 4.5 * 60 * 1000; // 4.5 minutes
 
 /**
  * Cache link results from a provided object property and refresh after some
  * amount of time has passed. Allows for migrating data from previously cached
  * links to the new links with the same url.
  */
 this.LinksCache = class LinksCache {
-
   /**
    * Create a links cache for a given object property.
    *
    * @param {object} linkObject Object containing the link property
    * @param {string} linkProperty Name of property on object to access
    * @param {array} properties Optional properties list to migrate to new links.
    * @param {function} shouldRefresh Optional callback receiving the old and new
    *                                 options to refresh even when not expired.
--- a/browser/extensions/activity-stream/lib/PersistentCache.jsm
+++ b/browser/extensions/activity-stream/lib/PersistentCache.jsm
@@ -8,17 +8,16 @@ Cu.import("resource://gre/modules/XPCOMU
 
 XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm");
 XPCOMUtils.defineLazyGetter(this, "gTextDecoder", () => new TextDecoder());
 
 /**
  * A file (disk) based persistent cache of a JSON serializable object.
  */
 this.PersistentCache = class PersistentCache {
-
   /**
    * Create a cache object based on a name.
    *
    * @param {string} name Name of the cache. It will be used to create the filename.
    * @param {boolean} preload (optional). Whether the cache should be preloaded from file. Defaults to false.
    */
   constructor(name, preload = false) {
     this.name = name;
--- a/browser/extensions/activity-stream/lib/Store.jsm
+++ b/browser/extensions/activity-stream/lib/Store.jsm
@@ -13,17 +13,16 @@ const {redux} = Cu.import("resource://ac
 /**
  * Store - This has a similar structure to a redux store, but includes some extra
  *         functionality to allow for routing of actions between the Main processes
  *         and child processes via a ActivityStreamMessageChannel.
  *         It also accepts an array of "Feeds" on inititalization, which
  *         can listen for any action that is dispatched through the store.
  */
 this.Store = class Store {
-
   /**
    * constructor - The redux store and message manager are created here,
    *               but no listeners are added until "init" is called.
    */
   constructor() {
     this._middleware = this._middleware.bind(this);
     // Bind each redux method so we can call it directly from the Store. E.g.,
     // store.dispatch() will call store._store.dispatch();
@@ -133,16 +132,19 @@ this.Store = class Store {
 
     this._prefs.observeBranch(this);
     this._messageChannel.createChannel();
 
     // Dispatch an initial action after all enabled feeds are ready
     if (initAction) {
       this.dispatch(initAction);
     }
+
+    // Dispatch NEW_TAB_INIT/NEW_TAB_LOAD events after INIT event.
+    this._messageChannel.simulateMessagesForExistingTabs();
   }
 
   /**
    * uninit -  Uninitalizes each feed, clears them, and destroys the message
    *           manager channel.
    *
    * @return {type}  description
    */
--- a/browser/extensions/activity-stream/lib/TelemetryFeed.jsm
+++ b/browser/extensions/activity-stream/lib/TelemetryFeed.jsm
@@ -237,17 +237,21 @@ this.TelemetryFeed = class TelemetryFeed
       // that there are more direct ways to measure that.
       load_trigger_ts = perfService.timeOrigin;
     }
 
     const session = {
       session_id: String(gUUIDGenerator.generateUUID()),
       // "unknown" will be overwritten when appropriate
       page: url ? url : "unknown",
-      perf: {load_trigger_type}
+      perf: {
+        load_trigger_type,
+        is_preloaded: false,
+        is_prerendered: false
+      }
     };
 
     if (load_trigger_ts) {
       session.perf.load_trigger_ts = load_trigger_ts;
     }
 
     this.sessions.set(id, session);
     return session;
@@ -270,16 +274,43 @@ this.TelemetryFeed = class TelemetryFeed
       session.session_duration = Math.round(perfService.absNow() - session.perf.visibility_event_rcvd_ts);
     }
 
     this.sendEvent(this.createSessionEndEvent(session));
     this.sessions.delete(portID);
   }
 
   /**
+   * handlePagePrerendered - Set the session as prerendered
+   *
+   * @param  {string} portID the portID of the target session
+   */
+  handlePagePrerendered(portID) {
+    const session = this.sessions.get(portID);
+
+    if (!session) {
+      // It's possible the tab was never visible – in which case, there was no user session.
+      return;
+    }
+
+    session.perf.is_prerendered = true;
+  }
+
+  /**
+   * handleNewTabInit - Handle NEW_TAB_INIT, which creates a new session and sets the a flag
+   *                    for session.perf based on whether or not this new tab is preloaded
+   *
+   * @param  {obj} action the Action object
+   */
+  handleNewTabInit(action) {
+    const session = this.addSession(au.getPortIdOfSender(action), action.data.url);
+    session.perf.is_preloaded = action.data.browser.getAttribute("isPreloadBrowser") === "true";
+  }
+
+  /**
    * createPing - Create a ping with common properties
    *
    * @param  {string} id The portID of the session, if a session is relevant (optional)
    * @return {obj}    A telemetry ping
    */
   createPing(portID) {
     const appInfo = this.store.getState().App;
     const ping = {
@@ -409,21 +440,24 @@ this.TelemetryFeed = class TelemetryFeed
   }
 
   onAction(action) {
     switch (action.type) {
       case at.INIT:
         this.init();
         break;
       case at.NEW_TAB_INIT:
-        this.addSession(au.getPortIdOfSender(action), action.data.url);
+        this.handleNewTabInit(action);
         break;
       case at.NEW_TAB_UNLOAD:
         this.endSession(au.getPortIdOfSender(action));
         break;
+      case at.PAGE_PRERENDERED:
+        this.handlePagePrerendered(au.getPortIdOfSender(action));
+        break;
       case at.SAVE_SESSION_PERF_DATA:
         this.saveSessionPerfData(au.getPortIdOfSender(action), action.data);
         break;
       case at.SYSTEM_TICK:
         if (Date.now() - this._impressionStatsLastReset >= IMPRESSION_STATS_RESET_TIME) {
           this.resetImpressionStats();
         }
         break;
--- a/browser/extensions/activity-stream/lib/TopSitesFeed.jsm
+++ b/browser/extensions/activity-stream/lib/TopSitesFeed.jsm
@@ -16,25 +16,23 @@ XPCOMUtils.defineLazyModuleGetter(this, 
   "resource://activity-stream/lib/FilterAdult.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "LinksCache",
   "resource://activity-stream/lib/LinksCache.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "NewTabUtils",
   "resource://gre/modules/NewTabUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "Screenshots",
   "resource://activity-stream/lib/Screenshots.jsm");
 
-const UPDATE_TIME = 15 * 60 * 1000; // 15 minutes
 const DEFAULT_SITES_PREF = "default.sites";
 const DEFAULT_TOP_SITES = [];
 const FRECENCY_THRESHOLD = 100 + 1; // 1 visit (skip first-run/one-time pages)
 const MIN_FAVICON_SIZE = 96;
 
 this.TopSitesFeed = class TopSitesFeed {
   constructor() {
-    this.lastUpdated = 0;
     this._tippyTopProvider = new TippyTopProvider();
     this.dedupe = new Dedupe(this._dedupeKey);
     this.frecentCache = new LinksCache(NewTabUtils.activityStreamLinks,
       "getTopSites", ["screenshot"], (oldOptions, newOptions) =>
         // Refresh if no old options or requesting more items
         !(oldOptions.numItems >= newOptions.numItems));
     this.pinnedCache = new LinksCache(NewTabUtils.pinnedLinks, "links",
       ["favicon", "faviconSize", "screenshot"]);
@@ -122,36 +120,33 @@ this.TopSitesFeed = class TopSitesFeed {
         delete link.__sharedCache;
       }
     }
 
     return withPinned;
   }
 
   /**
-   * Refresh the top sites data for content
-   *
-   * @param target Optional port/channel to receive the update. If not provided,
-   *               the update will be broadcasted.
+   * Refresh the top sites data for content.
+   * @param {bool} options.broadcast Should the update be broadcasted.
    */
-  async refresh(target = null) {
+  async refresh(options = {}) {
     if (!this._tippyTopProvider.initialized) {
       await this._tippyTopProvider.init();
     }
 
     const links = await this.getLinksWithDefaults();
     const newAction = {type: at.TOP_SITES_UPDATED, data: links};
-    if (target) {
-      // Send an update to content so the preloaded tab can get the updated content
-      this.store.dispatch(ac.SendToContent(newAction, target));
-    } else {
+    if (options.broadcast) {
       // Broadcast an update to all open content pages
       this.store.dispatch(ac.BroadcastToContent(newAction));
+    } else {
+      // Don't broadcast only update the state.
+      this.store.dispatch(ac.SendToMain(newAction));
     }
-    this.lastUpdated = Date.now();
   }
 
   /**
    * Get an image for the link preferring tippy top, rich favicon, screenshots.
    */
   async _fetchIcon(link) {
     // Check for tippy top icon or a rich icon.
     this._tippyTopProvider.processSite(link);
@@ -170,17 +165,17 @@ this.TopSitesFeed = class TopSitesFeed {
   /**
    * Inform others that top sites data has been updated due to pinned changes.
    */
   _broadcastPinnedSitesUpdated() {
     // Pinned data changed, so make sure we get latest
     this.pinnedCache.expire();
 
     // Refresh to update pinned sites with screenshots, trigger deduping, etc.
-    this.refresh();
+    this.refresh({broadcast: true});
   }
 
   /**
    * Pin a site at a specific position saving only the desired keys.
    */
   _pinSiteAt({label, url}, index) {
     const toPin = {url};
     if (label) {
@@ -227,38 +222,32 @@ this.TopSitesFeed = class TopSitesFeed {
     // pinned in the slot.
     this._insertPin(action.data.site, 0);
     this._broadcastPinnedSitesUpdated();
   }
 
   async onAction(action) {
     switch (action.type) {
       case at.INIT:
-        this.refresh();
+        this.refresh({broadcast: true});
         break;
-      case at.NEW_TAB_LOAD:
-        if (
-          // When a new tab is opened, if the last time we refreshed the data
-          // is greater than 15 minutes, refresh the data.
-          (Date.now() - this.lastUpdated >= UPDATE_TIME)
-        ) {
-          this.refresh(action.meta.fromTarget);
-        }
+      case at.SYSTEM_TICK:
+        this.refresh({broadcast: false});
         break;
       // All these actions mean we need new top sites
       case at.MIGRATION_COMPLETED:
       case at.PLACES_HISTORY_CLEARED:
       case at.PLACES_LINKS_DELETED:
         this.frecentCache.expire();
-        this.refresh();
+        this.refresh({broadcast: true});
         break;
       case at.PLACES_LINK_BLOCKED:
         this.frecentCache.expire();
         this.pinnedCache.expire();
-        this.refresh();
+        this.refresh({broadcast: true});
         break;
       case at.PREF_CHANGED:
         if (action.data.name === DEFAULT_SITES_PREF) {
           this.refreshDefaults(action.data.value);
         }
         break;
       case at.PREFS_INITIAL_VALUES:
         this.refreshDefaults(action.data[DEFAULT_SITES_PREF]);
@@ -271,11 +260,10 @@ this.TopSitesFeed = class TopSitesFeed {
         break;
       case at.TOP_SITES_ADD:
         this.add(action);
         break;
     }
   }
 };
 
-this.UPDATE_TIME = UPDATE_TIME;
 this.DEFAULT_TOP_SITES = DEFAULT_TOP_SITES;
-this.EXPORTED_SYMBOLS = ["TopSitesFeed", "UPDATE_TIME", "DEFAULT_TOP_SITES"];
+this.EXPORTED_SYMBOLS = ["TopSitesFeed", "DEFAULT_TOP_SITES"];
--- a/browser/extensions/activity-stream/lib/TopStoriesFeed.jsm
+++ b/browser/extensions/activity-stream/lib/TopStoriesFeed.jsm
@@ -15,26 +15,29 @@ const {shortURL} = Cu.import("resource:/
 const {SectionsManager} = Cu.import("resource://activity-stream/lib/SectionsManager.jsm", {});
 const {UserDomainAffinityProvider} = Cu.import("resource://activity-stream/lib/UserDomainAffinityProvider.jsm", {});
 const {PersistentCache} = Cu.import("resource://activity-stream/lib/PersistentCache.jsm", {});
 
 XPCOMUtils.defineLazyModuleGetter(this, "perfService", "resource://activity-stream/common/PerfService.jsm");
 
 const STORIES_UPDATE_TIME = 30 * 60 * 1000; // 30 minutes
 const TOPICS_UPDATE_TIME = 3 * 60 * 60 * 1000; // 3 hours
-const DOMAIN_AFFINITY_UPDATE_TIME = 24 * 60 * 60 * 1000; // 24 hours
 const STORIES_NOW_THRESHOLD = 24 * 60 * 60 * 1000; // 24 hours
 const SECTION_ID = "topstories";
+const SPOC_IMPRESSION_TRACKING_PREF = "feeds.section.topstories.spoc.impressions";
+const MAX_LIFETIME_CAP = 100; // Guard against misconfiguration on the server
 
 this.TopStoriesFeed = class TopStoriesFeed {
   constructor() {
     this.spocsPerNewTabs = 0;
     this.newTabsSinceSpoc = 0;
+    this.spocCampaignMap = new Map();
     this.contentUpdateQueue = [];
     this.cache = new PersistentCache(SECTION_ID, true);
+    this._prefs = new Prefs();
   }
 
   init() {
     const initFeed = () => {
       SectionsManager.enableSection(SECTION_ID);
       try {
         const options = SectionsManager.sections.get(SECTION_ID).options;
         const apiKey = this.getApiKeyFromPref(options.api_key_pref);
@@ -42,62 +45,82 @@ this.TopStoriesFeed = class TopStoriesFe
         this.topics_endpoint = this.produceFinalEndpointUrl(options.topics_endpoint, apiKey);
         this.read_more_endpoint = options.read_more_endpoint;
         this.stories_referrer = options.stories_referrer;
         this.personalized = options.personalized;
         this.show_spocs = options.show_spocs;
         this.maxHistoryQueryResults = options.maxHistoryQueryResults;
         this.storiesLastUpdated = 0;
         this.topicsLastUpdated = 0;
-        this.affinityLastUpdated = 0;
 
         this.loadCachedData();
         this.fetchStories();
         this.fetchTopics();
+
+        Services.obs.addObserver(this, "idle-daily");
       } catch (e) {
         Cu.reportError(`Problem initializing top stories feed: ${e.message}`);
       }
     };
     SectionsManager.onceInitialized(initFeed);
   }
 
+  observe(subject, topic, data) {
+    switch (topic) {
+      case "idle-daily":
+        this.updateDomainAffinityScores();
+        break;
+    }
+  }
+
   uninit() {
+    Services.obs.removeObserver(this, "idle-daily");
     SectionsManager.disableSection(SECTION_ID);
   }
 
   async fetchStories() {
     if (!this.stories_endpoint) {
       return;
     }
     try {
       const response = await fetch(this.stories_endpoint);
       if (!response.ok) {
         throw new Error(`Stories endpoint returned unexpected status: ${response.status}`);
       }
 
       const body = await response.json();
       this.updateSettings(body.settings);
       this.stories = this.rotate(this.transform(body.recommendations));
-      this.spocs = this.show_spocs && this.transform(body.spocs).filter(s => s.score >= s.min_score);
+
+      if (this.show_spocs && body.spocs) {
+        this.spocCampaignMap = new Map(body.spocs.map(s => [s.id, `${s.campaign_id}`]));
+        this.spocs = this.transform(body.spocs).filter(s => s.score >= s.min_score);
+        this.cleanUpCampaignImpressionPref();
+      }
 
       this.dispatchUpdateEvent(this.storiesLastUpdated, {rows: this.stories});
       body._timestamp = this.storiesLastUpdated = Date.now();
       // This is filtered so an update function can return true to retry on the next run
       this.contentUpdateQueue = this.contentUpdateQueue.filter(update => update());
 
       this.cache.set("stories", body);
     } catch (error) {
       Cu.reportError(`Failed to fetch content: ${error.message}`);
     }
   }
 
   async loadCachedData() {
     const data = await this.cache.get();
     let stories = data.stories && data.stories.recommendations;
     let topics = data.topics && data.topics.topics;
+    let affinities = data.domainAffinities;
+    if (this.personalized && affinities && affinities.scores) {
+      this.affinityProvider = new UserDomainAffinityProvider(affinities.timeSegments,
+        affinities.parameterSets, affinities.maxHistoryQueryResults, affinities.version, affinities.scores);
+    }
     if (stories && stories.length > 0 && this.storiesLastUpdated === 0) {
       this.updateSettings(data.stories.settings);
       const rows = this.transform(stories);
       this.dispatchUpdateEvent(this.storiesLastUpdated, {rows});
       this.storiesLastUpdated = data.stories._timestamp;
     }
     if (topics && topics.length > 0 && this.topicsLastUpdated === 0) {
       this.dispatchUpdateEvent(this.topicsLastUpdated, {topics, read_more_endpoint: this.read_more_endpoint});
@@ -119,17 +142,18 @@ this.TopStoriesFeed = class TopStoriesFe
         "context": s.context,
         "icon": s.icon,
         "title": s.title,
         "description": s.excerpt,
         "image": this.normalizeUrl(s.image_src),
         "referrer": this.stories_referrer,
         "url": s.url,
         "min_score": s.min_score || 0,
-        "score": this.personalized ? this.affinityProvider.calculateItemRelevanceScore(s) : 1
+        "score": this.personalized && this.affinityProvider ? this.affinityProvider.calculateItemRelevanceScore(s) : s.item_score || 1,
+        "spoc_meta": this.show_spocs ? {campaign_id: s.campaign_id, caps: s.caps} : {}
       }))
       .sort(this.personalized ? this.compareScore : (a, b) => 0);
   }
 
   async fetchTopics() {
     if (!this.topics_endpoint) {
       return;
     }
@@ -159,30 +183,49 @@ this.TopStoriesFeed = class TopStoriesFe
   }
 
   updateSettings(settings) {
     if (!this.personalized) {
       return;
     }
 
     this.spocsPerNewTabs = settings.spocsPerNewTabs;
+    this.timeSegments = settings.timeSegments;
+    this.domainAffinityParameterSets = settings.domainAffinityParameterSets;
+    this.version = settings.version;
 
-    if (!this.affinityProvider || (Date.now() - this.affinityLastUpdated >= DOMAIN_AFFINITY_UPDATE_TIME)) {
-      const start = perfService.absNow();
-      this.affinityProvider = new UserDomainAffinityProvider(
-        settings.timeSegments,
-        settings.domainAffinityParameterSets,
-        this.maxHistoryQueryResults);
+    if (this.affinityProvider && (this.affinityProvider.version !== this.version)) {
+      this.resetDomainAffinityScores();
+    }
+  }
+
+  updateDomainAffinityScores() {
+    if (!this.personalized || !this.domainAffinityParameterSets) {
+      return;
+    }
+
+    const start = perfService.absNow();
 
-      this.store.dispatch(ac.PerfEvent({
-        event: "topstories.domain.affinity.calculation.ms",
-        value: Math.round(perfService.absNow() - start)
-      }));
-      this.affinityLastUpdated = Date.now();
-    }
+    this.affinityProvider = new UserDomainAffinityProvider(
+      this.timeSegments,
+      this.domainAffinityParameterSets,
+      this.maxHistoryQueryResults,
+      this.version);
+
+    this.store.dispatch(ac.PerfEvent({
+      event: "topstories.domain.affinity.calculation.ms",
+      value: Math.round(perfService.absNow() - start)
+    }));
+
+    this.cache.set("domainAffinities", this.affinityProvider.getAffinities());
+  }
+
+  resetDomainAffinityScores() {
+    delete this.affinityProvider;
+    this.cache.set("domainAffinities", {});
   }
 
   // If personalization is turned on we have to rotate stories on the client.
   // An item can only be on top for two iterations (1hr) before it gets moved
   // to the end. This will later be improved based on interactions/impressions.
   rotate(items) {
     if (!this.personalized || items.length <= 3) {
       return items;
@@ -213,17 +256,17 @@ this.TopStoriesFeed = class TopStoriesFe
     return items;
   }
 
   getApiKeyFromPref(apiKeyPref) {
     if (!apiKeyPref) {
       return apiKeyPref;
     }
 
-    return new Prefs().get(apiKeyPref) || Services.prefs.getCharPref(apiKeyPref);
+    return this._prefs.get(apiKeyPref) || Services.prefs.getCharPref(apiKeyPref);
   }
 
   produceFinalEndpointUrl(url, apiKey) {
     if (!url) {
       return url;
     }
     if (url.includes("$apiKey") && !apiKey) {
       throw new Error(`An API key was specified but none configured: ${url}`);
@@ -235,34 +278,46 @@ this.TopStoriesFeed = class TopStoriesFe
   // fail to render them properly as part of the card template.
   normalizeUrl(url) {
     if (url) {
       return url.replace(/\(/g, "%28").replace(/\)/g, "%29");
     }
     return url;
   }
 
+  shouldShowSpocs() {
+    return this.show_spocs && this.store.getState().Prefs.values.showSponsored;
+  }
+
   maybeAddSpoc(target) {
-    if (!this.show_spocs || !this.store.getState().Prefs.values.showSponsored) {
+    if (!this.shouldShowSpocs()) {
       return;
     }
 
     if (this.newTabsSinceSpoc === 0 || this.newTabsSinceSpoc === this.spocsPerNewTabs) {
       const updateContent = () => {
         if (!this.spocs || !this.spocs.length) {
           // We have stories but no spocs so there's nothing to do and this update can be
           // removed from the queue.
           return false;
         }
 
+        // Filter spocs based on frequency caps
+        const impressions = this.readCampaignImpressionsPref();
+        const spocs = this.spocs.filter(s => this.isBelowFrequencyCap(impressions, s));
+
+        if (!spocs.length) {
+          // There's currently no spoc left to display
+          return false;
+        }
+
         // Create a new array with a spoc inserted at index 2
-        // For now we're using the top scored spoc until we can support viewability based rotation
         const position = SectionsManager.sections.get(SECTION_ID).order;
         let rows = this.store.getState().Sections[position].rows.slice(0, this.stories.length);
-        rows.splice(2, 0, this.spocs[0]);
+        rows.splice(2, 0, spocs[0]);
 
         // Send a content update to the target tab
         const action = {type: at.SECTION_UPDATE, meta: {skipMain: true}, data: Object.assign({rows}, {id: SECTION_ID})};
         this.store.dispatch(ac.SendToContent(action, target));
         return false;
       };
 
       if (this.stories) {
@@ -272,16 +327,91 @@ this.TopStoriesFeed = class TopStoriesFe
         this.contentUpdateQueue.push(updateContent);
       }
 
       this.newTabsSinceSpoc = 0;
     }
     this.newTabsSinceSpoc++;
   }
 
+  // Frequency caps are based on campaigns, which may include multiple spocs.
+  // We currently support two types of frequency caps:
+  // - lifetime: Indicates how many times spocs from a campaign can be shown in total
+  // - period: Indicates how many times spocs from a campaign can be shown within a period
+  //
+  // So, for example, the feed configuration below defines that for campaign 1 no more
+  // than 5 spocs can be show in total, and no more than 2 per hour.
+  // "campaign_id": 1,
+  // "caps": {
+  //  "lifetime": 5,
+  //  "campaign": {
+  //    "count": 2,
+  //    "period": 3600
+  //  }
+  // }
+  isBelowFrequencyCap(impressions, spoc) {
+    const campaignImpressions = impressions[spoc.spoc_meta.campaign_id];
+    if (!campaignImpressions) {
+      return true;
+    }
+
+    const lifeTimeCap = Math.min(spoc.spoc_meta.caps && spoc.spoc_meta.caps.lifetime, MAX_LIFETIME_CAP);
+    const lifeTimeCapExceeded = campaignImpressions.length >= lifeTimeCap;
+    if (lifeTimeCapExceeded) {
+      return false;
+    }
+
+    const campaignCap = (spoc.spoc_meta.caps && spoc.spoc_meta.caps.campaign) || {};
+    const campaignCapExceeded = campaignImpressions
+      .filter(i => (Date.now() - i) < (campaignCap.period * 1000)).length >= campaignCap.count;
+    return !campaignCapExceeded;
+  }
+
+  // Clean up campaign impression pref by removing all campaigns that are no
+  // longer part of the response, and are therefore considered inactive.
+  cleanUpCampaignImpressionPref() {
+    const impressions = this.readCampaignImpressionsPref();
+    const campaignIds = new Set(this.spocCampaignMap.values());
+    let changed = false;
+
+    Object
+      .keys(impressions)
+      .forEach(cId => {
+        if (!campaignIds.has(cId)) {
+          changed = true;
+          delete impressions[cId];
+        }
+      });
+
+    if (changed) {
+      this.writeCampaignImpressionsPref(impressions);
+    }
+  }
+
+  // Sets a pref mapping campaign IDs to timestamp arrays.
+  // The timestamps represent impressions which we use to calculate frequency caps.
+  recordCampaignImpression(campaignId) {
+    let impressions = this.readCampaignImpressionsPref();
+
+    const timeStamps = impressions[campaignId] || [];
+    timeStamps.push(Date.now());
+    impressions = Object.assign(impressions, {[campaignId]: timeStamps});
+
+    this.writeCampaignImpressionsPref(impressions);
+  }
+
+  readCampaignImpressionsPref() {
+    const prefVal = this._prefs.get(SPOC_IMPRESSION_TRACKING_PREF);
+    return prefVal ? JSON.parse(prefVal) : {};
+  }
+
+  writeCampaignImpressionsPref(impressions) {
+    this._prefs.set(SPOC_IMPRESSION_TRACKING_PREF, JSON.stringify(impressions));
+  }
+
   onAction(action) {
     switch (action.type) {
       case at.INIT:
         this.init();
         break;
       case at.SYSTEM_TICK:
         if (Date.now() - this.storiesLastUpdated >= STORIES_UPDATE_TIME) {
           this.fetchStories();
@@ -302,16 +432,34 @@ this.TopStoriesFeed = class TopStoriesFe
           this.init();
         }
         break;
       case at.PLACES_LINK_BLOCKED:
         if (this.spocs) {
           this.spocs = this.spocs.filter(s => s.url !== action.data.url);
         }
         break;
+      case at.PLACES_HISTORY_CLEARED:
+        if (this.personalized) {
+          this.resetDomainAffinityScores();
+        }
+        break;
+      case at.TELEMETRY_IMPRESSION_STATS: {
+        const payload = action.data;
+        const viewImpression = !("click" in payload || "block" in payload || "pocket" in payload);
+        if (this.shouldShowSpocs() && payload.tiles && viewImpression) {
+          payload.tiles.forEach(t => {
+            if (this.spocCampaignMap.has(t.id)) {
+              this.recordCampaignImpression(this.spocCampaignMap.get(t.id));
+            }
+          });
+        }
+        break;
+      }
     }
   }
 };
 
 this.STORIES_UPDATE_TIME = STORIES_UPDATE_TIME;
 this.TOPICS_UPDATE_TIME = TOPICS_UPDATE_TIME;
 this.SECTION_ID = SECTION_ID;
-this.EXPORTED_SYMBOLS = ["TopStoriesFeed", "STORIES_UPDATE_TIME", "TOPICS_UPDATE_TIME", "DOMAIN_AFFINITY_UPDATE_TIME", "SECTION_ID"];
+this.SPOC_IMPRESSION_TRACKING_PREF = SPOC_IMPRESSION_TRACKING_PREF;
+this.EXPORTED_SYMBOLS = ["TopStoriesFeed", "STORIES_UPDATE_TIME", "TOPICS_UPDATE_TIME", "SECTION_ID", "SPOC_IMPRESSION_TRACKING_PREF"];
--- a/browser/extensions/activity-stream/lib/UserDomainAffinityProvider.jsm
+++ b/browser/extensions/activity-stream/lib/UserDomainAffinityProvider.jsm
@@ -50,17 +50,17 @@ function merge(...args) {
  *
  * - These visit counts are transformed to domain affinity scores for all
  * provided parameter sets: {"mozilla.org": {"paramSet1": 0.8,
  * "paramSet2": 0.9}, "mozilla.org": {"paramSet1": 1, "paramSet2": 0.9}}
  * (see UserDomainAffinityProvider#calculateScoresForParameterSets)
  *
  * - The parameter sets provide factors for weighting which allows for
  * flexible targeting. The functionality to calculate final scores can
- * be seen in UserDomainAffinityProvider#calcuateScores
+ * be seen in UserDomainAffinityProvider#calculateScores
  *
  * - The user domain affinity scores are summed up across all time segments
  * see UserDomainAffinityProvider#calculateAllUserDomainAffinityScores
  *
  * - An item's domain affinities are matched to the user's domain affinity
  * scores by calculating an item relevance score
  * (see UserDomainAffinityProvider#calculateItemRelevanceScore)
  *
@@ -69,21 +69,32 @@ function merge(...args) {
  *
  * - The data structure was chosen to allow for fast cache lookups during
  * relevance score calculation. While user domain affinities are calculated
  * infrequently (i.e. only once a day), the item relevance score (potentially)
  * needs to be calculated every time the feed updates. Therefore allowing cache
  * lookups of scores[domain][parameterSet] is beneficial
  */
 this.UserDomainAffinityProvider = class UserDomainAffinityProvider {
-  constructor(timeSegments = DEFAULT_TIME_SEGMENTS, parameterSets = DEFAULT_PARAMETER_SETS, maxHistoryQueryResults = DEFAULT_MAX_HISTORY_QUERY_RESULTS) {
+  constructor(
+    timeSegments = DEFAULT_TIME_SEGMENTS,
+    parameterSets = DEFAULT_PARAMETER_SETS,
+    maxHistoryQueryResults = DEFAULT_MAX_HISTORY_QUERY_RESULTS,
+    version,
+    scores) {
     this.timeSegments = timeSegments;
     this.maxHistoryQueryResults = maxHistoryQueryResults;
-    this.parameterSets = this.prepareParameterSets(parameterSets);
-    this.scores = this.calculateAllUserDomainAffinityScores();
+    this.version = version;
+    if (scores) {
+      this.parameterSets = parameterSets;
+      this.scores = scores;
+    } else {
+      this.parameterSets = this.prepareParameterSets(parameterSets);
+      this.scores = this.calculateAllUserDomainAffinityScores();
+    }
   }
 
   /**
    * Adds dynamic parameters to the given parameter sets that need to be
    * computed based on time segments.
    *
    * @param ps The parameter sets
    * @return Updated parameter sets with additional fields (i.e. timeSegmentWeights)
@@ -266,17 +277,17 @@ this.UserDomainAffinityProvider = class 
    * @param item the item (story), must contain domain affinities, otherwise a
    * score of 1 is returned.
    * @return the calculated item's score or 1 if item has no domain_affinities
    * or references an unknown parameter set.
    */
   calculateItemRelevanceScore(item) {
     const params = this.parameterSets[item.parameter_set];
     if (!item.domain_affinities || !params) {
-      return 1;
+      return item.item_score;
     }
 
     const scores = Object
       .keys(item.domain_affinities)
       .reduce((acc, d) => {
         let userDomainAffinityScore = this.scores[d] ? this.scores[d][item.parameter_set] : false;
         if (userDomainAffinityScore) {
           acc.combinedDomainScore += userDomainAffinityScore * item.domain_affinities[d];
@@ -297,11 +308,23 @@ this.UserDomainAffinityProvider = class 
     // Calculate the final relevance score using the itemScoreFactor. The itemScoreFactor
     // allows weighting the item score in relation to the normalizedCombinedDomainScore:
     // An itemScoreFactor of 1 results in the item score and ignores the combined domain score
     // An itemScoreFactor of 0.5 results in the the average of item score and combined domain score
     // An itemScoreFactor of 0 results in the combined domain score and ignores the item score
     return params.itemScoreFactor * (item.item_score - normalizedCombinedDomainScore) + normalizedCombinedDomainScore;
   }
 
+  /**
+   * Returns an object holding the settings and affinity scores of this provider instance.
+   */
+  getAffinities() {
+    return {
+      timeSegments: this.timeSegments,
+      parameterSets: this.parameterSets,
+      maxHistoryQueryResults: this.maxHistoryQueryResults,
+      version: this.version,
+      scores: this.scores
+    };
+  }
 };
 
 this.EXPORTED_SYMBOLS = ["UserDomainAffinityProvider"];
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/ach/activity-stream-initial-state.js
@@ -0,0 +1,162 @@
+// Note - this is a generated file.
+  window.gActivityStreamPrerenderedState = {
+  "TopSites": {
+    "initialized": false,
+    "rows": [],
+    "editForm": {
+      "visible": false,
+      "site": null
+    }
+  },
+  "App": {
+    "initialized": false,
+    "locale": "ach",
+    "strings": {
+      "newtab_page_title": "Dirica matidi manyen",
+      "default_label_loading": "Tye ka cano…",
+      "header_top_sites": "Kakube maloyo",
+      "header_stories": "Lok madito",
+      "header_highlights": "Wiye madito",
+      "header_visit_again": "Lim doki",
+      "header_bookmarks": "Alamabuk ma cok coki",
+      "header_recommended_by": "Lami tam obedo {provider}",
+      "header_bookmarks_placeholder": "Pud i pee ki alamabuk.",
+      "header_stories_from": "ki bot",
+      "type_label_visited": "Kilimo",
+      "type_label_bookmarked": "Kiketo alamabuk",
+      "type_label_synced": "Kiribo ki i nyonyo mukene",
+      "type_label_recommended": "Ma cuke lamal",
+      "type_label_open": "Tye ayaba",
+      "type_label_topic": "Lok",
+      "type_label_now": "Kombedi",
+      "menu_action_bookmark": "Alamabuk",
+      "menu_action_remove_bookmark": "Kwany alamabuk",
+      "menu_action_copy_address": "Lok kabedo",
+      "menu_action_email_link": "Kakube me email…",
+      "menu_action_open_new_window": "Yab i dirica manyen",
+      "menu_action_open_private_window": "Yab i dirica manyen me mung",
+      "menu_action_dismiss": "Kwer",
+      "menu_action_delete": "Kwany ki ii gin mukato",
+      "menu_action_pin": "Mwon",
+      "menu_action_unpin": "War",
+      "confirm_history_delete_p1": "Imoko ni imito kwanyo nyig jami weng me potbuk man ki i gin mukato mamegi?",
+      "confirm_history_delete_notice_p2": "Pe ki twero gonyo tic man.",
+      "menu_action_save_to_pocket": "Gwoki i jaba",
+      "search_for_something_with": "Yeny pi {search_term} ki:",
+      "search_button": "Yeny",
+      "search_header": "Yeny me {search_engine_name}",
+      "search_web_placeholder": "Yeny kakube",
+      "search_settings": "Lok ter me yeny",
+      "section_info_option": "Ngec",
+      "section_info_send_feedback": "Cwal adwogi",
+      "section_info_privacy_notice": "Ngec me mung",
+      "welcome_title": "Wajoli i dirica matidi manyen",
+      "welcome_body": "Firefox bi tic ki kabedo man me nyuto alamabukke mamegi, coc akwana, vidio, ki potbukke ma ilimo cokcoki ma pi gi tego loyo, wek i dok ii gi ma yot.",
+      "welcome_label": "Tye ka kube ki wiye madito mamegi",
+      "time_label_less_than_minute": "<dakika1",
+      "time_label_minute": "dakika{number}",
+      "time_label_hour": "cawa{number}",
+      "time_label_day": "nino{number}",
+      "settings_pane_button_label": "Yub potbuk me dirica matidi mamegi manyen",
+      "settings_pane_header": "Ter me dirica matidi manyen",
+      "settings_pane_body2": "Yer ngo ma i neno i potbuk man.",
+      "settings_pane_search_header": "Yeny",
+      "settings_pane_search_body": "Yeny Kakube ki i dirica ni matidi manyen.",
+      "settings_pane_topsites_header": "Kakube ma gi loyo",
+      "settings_pane_topsites_body": "Nong kakube ma ilimo loyo.",
+      "settings_pane_topsites_options_showmore": "Nyut rek ariyo",
+      "settings_pane_bookmarks_header": "Alamabuk ma cocoki",
+      "settings_pane_bookmarks_body": "Alamabukke ni ma kicweyo manyen i kabedo acel macek.",
+      "settings_pane_visit_again_header": "Lim Kidoco",
+      "settings_pane_visit_again_body": "Firefox bi nyuti but gin mukato me yeny mamegi ma itwero mito me poo ikome onyo dok cen iyie.",
+      "settings_pane_highlights_header": "Wiye madito",
+      "settings_pane_highlights_body2": "Nong yoo ni cen i jami mamit ma ilimo gi cokcokki onyo iketo alamabuk.",
+      "settings_pane_highlights_options_bookmarks": "Alamabuk",
+      "settings_pane_highlights_options_visited": "Kakube ma kilimo",
+      "settings_pane_snippets_header": "Kwena macek",
+      "settings_pane_snippets_body": "Kwan ngec manyen macego dok mamit ki bot Mozilla ikom Firefox, kwo me intanet, ki meme mabino atata.",
+      "settings_pane_done_button": "Otum",
+      "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+      "edit_topsites_button_text": "Yubi",
+      "edit_topsites_button_label": "Yub bute pi kakubi ni ma giloyo",
+      "edit_topsites_showmore_button": "Nyut mukene",
+      "edit_topsites_showless_button": "Nyut manok",
+      "edit_topsites_done_button": "Otum",
+      "edit_topsites_pin_button": "Mwon kakube man",
+      "edit_topsites_unpin_button": "War kakube man",
+      "edit_topsites_edit_button": "Yub kakube man",
+      "edit_topsites_dismiss_button": "Kwer kakube man",
+      "edit_topsites_add_button": "Medi",
+      "topsites_form_add_header": "Kakube maloyo manyen",
+      "topsites_form_edit_header": "Yub Kakube maloyo",
+      "topsites_form_title_placeholder": "Ket wiye",
+      "topsites_form_url_placeholder": "Coo onyo mwon URL",
+      "topsites_form_add_button": "Medi",
+      "topsites_form_save_button": "Gwoki",
+      "topsites_form_cancel_button": "Kwer",
+      "topsites_form_url_validation": "URL ma tye atir mite",
+      "pocket_read_more": "Lok macuk gi lamal:",
+      "pocket_read_even_more": "Nen Lok mapol",
+      "pocket_feedback_header": "Kakube maber loyo, dano makato milion 25 aye oyubo.",
+      "pocket_description": "Nong jami me rwom ma lamal ma itwero keng woko, ki kony ma aa ki bot Pocket, dong tye but Mozilla.",
+      "highlights_empty_state": "Cak yeny, ka wa binyuto coc akwana mabeco, video, ki potbuk mukene ma ilimo cokcokki onyo ma kiketo alamabuk kany.",
+      "topstories_empty_state": "Ityeko weng. Rot doki lacen pi lok madito mapol ki bot {provider}. Pe itwero kuro? Yer lok macuke lamal me nongo lok mabeco mapol ki i but kakube.",
+      "manual_migration_explanation2": "Tem Firefox ki alamabuk, gin mukato ki mung me donyo ki ii layeny mukene.",
+      "manual_migration_cancel_button": "Pe Apwoyo",
+      "manual_migration_import_button": "Kel kombedi"
+    },
+    "textDirection": "ltr",
+    "version": null
+  },
+  "Snippets": {
+    "initialized": false
+  },
+  "Prefs": {
+    "initialized": true,
+    "values": {
+      "migrationExpired": true,
+      "showTopSites": true,
+      "showSearch": true,
+      "topSitesCount": 6,
+      "collapseTopSites": false,
+      "section.highlights.collapsed": false,
+      "section.topstories.collapsed": false,
+      "feeds.section.topstories": true,
+      "feeds.section.highlights": true
+    }
+  },
+  "Dialog": {
+    "visible": false,
+    "data": {}
+  },
+  "Sections": [
+    {
+      "title": {
+        "id": "header_recommended_by",
+        "values": {
+          "provider": "Pocket"
+        }
+      },
+      "rows": [],
+      "order": 1,
+      "enabled": true,
+      "icon": "pocket",
+      "id": "topstories",
+      "initialized": false
+    },
+    {
+      "title": {
+        "id": "header_highlights"
+      },
+      "rows": [],
+      "order": 2,
+      "enabled": true,
+      "id": "highlights",
+      "icon": "highlights",
+      "initialized": false
+    }
+  ],
+  "PreferencesPane": {
+    "visible": false
+  }
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/ach/activity-stream-prerendered.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="ach" 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">
+    <title>Dirica matidi manyen</title>
+    <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/data/content/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="746324792"><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">Yeny kakube</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="Yeny kakube" title="Yeny kakube" data-reactid="7"/><button id="searchSubmit" class="search-button" title="Yeny" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">Yeny</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">Kakube maloyo</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="Ngec" 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">Kakube ma gi loyo</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">Nong kakube ma ilimo loyo.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">Ter me dirica matidi manyen</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"><span class="letter-fallback" data-reactid="34"></span><div class="screenshot" style="background-image:none;" data-reactid="35"></div></div><div class="title " data-reactid="36"><span dir="auto" data-reactid="37"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="38"><a data-reactid="39"><div class="tile" aria-hidden="true" data-reactid="40"><span class="letter-fallback" data-reactid="41"></span><div class="screenshot" style="background-image:none;" data-reactid="42"></div></div><div class="title " data-reactid="43"><span dir="auto" data-reactid="44"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="45"><a data-reactid="46"><div class="tile" aria-hidden="true" data-reactid="47"><span class="letter-fallback" data-reactid="48"></span><div class="screenshot" style="background-image:none;" data-reactid="49"></div></div><div class="title " data-reactid="50"><span dir="auto" data-reactid="51"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="52"><a data-reactid="53"><div class="tile" aria-hidden="true" data-reactid="54"><span class="letter-fallback" data-reactid="55"></span><div class="screenshot" style="background-image:none;" data-reactid="56"></div></div><div class="title " data-reactid="57"><span dir="auto" data-reactid="58"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="59"><a data-reactid="60"><div class="tile" aria-hidden="true" data-reactid="61"><span class="letter-fallback" data-reactid="62"></span><div class="screenshot" style="background-image:none;" data-reactid="63"></div></div><div class="title " data-reactid="64"><span dir="auto" data-reactid="65"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="66"><a data-reactid="67"><div class="tile" aria-hidden="true" data-reactid="68"><span class="letter-fallback" data-reactid="69"></span><div class="screenshot" style="background-image:none;" data-reactid="70"></div></div><div class="title " data-reactid="71"><span dir="auto" data-reactid="72"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="73"><div class="edit-topsites-button" data-reactid="74"><button class="edit" title="Yub bute pi kakubi ni ma giloyo" data-reactid="75"><span data-reactid="76">Yubi</span></button></div></div></div></section><div class="sections-list" data-reactid="77"><section class="collapsible-section section animation-enabled" data-reactid="78"><div class="section-top-bar" data-reactid="79"><h3 class="section-title" data-reactid="80"><span class="click-target" data-reactid="81"><span class="icon icon-small-spacer icon-pocket" data-reactid="82"></span><span data-reactid="83">Lami tam obedo Pocket</span><span class="icon icon-arrowhead-down" data-reactid="84"></span></span></h3></div><div class="section-body" data-reactid="85"><ul class="section-list" style="padding:0;" data-reactid="86"><li class="card-outer placeholder" data-reactid="87"><a data-reactid="88"><div class="card" data-reactid="89"><div class="card-details no-image" data-reactid="90"><div class="card-text no-context no-description no-host-name no-image" data-reactid="91"><h4 class="card-title" dir="auto" data-reactid="92"></h4><p class="card-description" dir="auto" data-reactid="93"></p></div><div class="card-context" data-reactid="94"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="95"><a data-reactid="96"><div class="card" data-reactid="97"><div class="card-details no-image" data-reactid="98"><div class="card-text no-context no-description no-host-name no-image" data-reactid="99"><h4 class="card-title" dir="auto" data-reactid="100"></h4><p class="card-description" dir="auto" data-reactid="101"></p></div><div class="card-context" data-reactid="102"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="103"><a data-reactid="104"><div class="card" data-reactid="105"><div class="card-details no-image" data-reactid="106"><div class="card-text no-context no-description no-host-name no-image" data-reactid="107"><h4 class="card-title" dir="auto" data-reactid="108"></h4><p class="card-description" dir="auto" data-reactid="109"></p></div><div class="card-context" data-reactid="110"></div></div></div></a></li></ul><div class="topic" data-reactid="111"><span data-reactid="112"><span data-reactid="113">Lok macuk gi lamal:</span></span><ul data-reactid="114"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="115"><div class="section-top-bar" data-reactid="116"><h3 class="section-title" data-reactid="117"><span class="click-target" data-reactid="118"><span class="icon icon-small-spacer icon-highlights" data-reactid="119"></span><span data-reactid="120">Wiye madito</span><span class="icon icon-arrowhead-down" data-reactid="121"></span></span></h3></div><div class="section-body" data-reactid="122"><ul class="section-list" style="padding:0;" data-reactid="123"><li class="card-outer placeholder" data-reactid="124"><a data-reactid="125"><div class="card" data-reactid="126"><div class="card-details no-image" data-reactid="127"><div class="card-text no-context no-description no-host-name no-image" data-reactid="128"><h4 class="card-title" dir="auto" data-reactid="129"></h4><p class="card-description" dir="auto" data-reactid="130"></p></div><div class="card-context" data-reactid="131"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="132"><a data-reactid="133"><div class="card" data-reactid="134"><div class="card-details no-image" data-reactid="135"><div class="card-text no-context no-description no-host-name no-image" data-reactid="136"><h4 class="card-title" dir="auto" data-reactid="137"></h4><p class="card-description" dir="auto" data-reactid="138"></p></div><div class="card-context" data-reactid="139"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="140"><a data-reactid="141"><div class="card" data-reactid="142"><div class="card-details no-image" data-reactid="143"><div class="card-text no-context no-description no-host-name no-image" data-reactid="144"><h4 class="card-title" dir="auto" data-reactid="145"></h4><p class="card-description" dir="auto" data-reactid="146"></p></div><div class="card-context" data-reactid="147"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 148 --></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/data/content/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/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/ach/activity-stream.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="ach" 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">
+    <title>Dirica matidi manyen</title>
+    <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/data/content/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/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/ar/activity-stream-initial-state.js
@@ -0,0 +1,162 @@
+// Note - this is a generated file.
+  window.gActivityStreamPrerenderedState = {
+  "TopSites": {
+    "initialized": false,
+    "rows": [],
+    "editForm": {
+      "visible": false,
+      "site": null
+    }
+  },
+  "App": {
+    "initialized": false,
+    "locale": "ar",
+    "strings": {
+      "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": "مُتداول",
+      "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": "احفظ في 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": "تنويه الخصوصية",
+      "welcome_title": "مرحبًا في لسان جديد",
+      "welcome_body": "سيستخدم فيرفكس هذا المكان لعرض أكثر العلامات، و المقالات، و الفيديوهات والصفحات التي زرتها مؤخرا، ليمكنك العودة إليها بسهولة.",
+      "welcome_label": "تعرّف على أهم الأخبار",
+      "time_label_less_than_minute": "< دقيقة",
+      "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": "سيعرض لك فَيَرفُكس بعضًا من تأريخ تصفحك الذي قد تود تذكّره لاحقًا.",
+      "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",
+      "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": "حرّر هذا الموقع",
+      "edit_topsites_dismiss_button": "احذف هذا الموقع",
+      "edit_topsites_add_button": "أضِفْ",
+      "topsites_form_add_header": "موقع شائع جديد",
+      "topsites_form_edit_header": "حرّر الموقع الشائع",
+      "topsites_form_title_placeholder": "أدخل عنوانًا",
+      "topsites_form_url_placeholder": "اكتب أو ألصق مسارًا",
+      "topsites_form_add_button": "أضِفْ",
+      "topsites_form_save_button": "احفظ",
+      "topsites_form_cancel_button": "ألغِ",
+      "topsites_form_url_validation": "مطلوب مسار صالح",
+      "pocket_read_more": "المواضيع الشائعة:",
+      "pocket_read_even_more": "اعرض المزيد من الأخبار",
+      "pocket_feedback_header": "أفضل ما في الوِب، انتقاها أكثر من ٢٥ مليون شخص.",
+      "pocket_description": "اكتشف محتوى عالي الجودة لربما قد فاتك دون هذا، بماسعدة من Pocket الذي أصبح الآن جزءا من موزيلا.",
+      "highlights_empty_state": "ابدأ التصفح وسنعرض أمامك بعض المقالات والفيديوهات والمواقع الأخرى التي زرتها حديثا أو أضفتها إلى العلامات هنا.",
+      "topstories_empty_state": "لا جديد. تحقق لاحقًا للحصول على مزيد من أهم الأخبار من {provider}. لا يمكنك الانتظار؟ اختر موضوعًا شائعًا للعثور على المزيد من القصص الرائعة من جميع أنحاء الوِب.",
+      "manual_migration_explanation2": "جرب فَيَرفُكس مع العلامات، و التأريخ، و كلمات السر من متصفح آخر.",
+      "manual_migration_cancel_button": "لا شكرًا",
+      "manual_migration_import_button": "استورد الآن"
+    },
+    "textDirection": "rtl",
+    "version": null
+  },
+  "Snippets": {
+    "initialized": false
+  },
+  "Prefs": {
+    "initialized": true,
+    "values": {
+      "migrationExpired": true,
+      "showTopSites": true,
+      "showSearch": true,
+      "topSitesCount": 6,
+      "collapseTopSites": false,
+      "section.highlights.collapsed": false,
+      "section.topstories.collapsed": false,
+      "feeds.section.topstories": true,
+      "feeds.section.highlights": true
+    }
+  },
+  "Dialog": {
+    "visible": false,
+    "data": {}
+  },
+  "Sections": [
+    {
+      "title": {
+        "id": "header_recommended_by",
+        "values": {
+          "provider": "Pocket"
+        }
+      },
+      "rows": [],
+      "order": 1,
+      "enabled": true,
+      "icon": "pocket",
+      "id": "topstories",
+      "initialized": false
+    },
+    {
+      "title": {
+        "id": "header_highlights"
+      },
+      "rows": [],
+      "order": 2,
+      "enabled": true,
+      "id": "highlights",
+      "icon": "highlights",
+      "initialized": false
+    }
+  ],
+  "PreferencesPane": {
+    "visible": false
+  }
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/ar/activity-stream-prerendered.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="ar" dir="rtl">
+  <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">
+    <title>لسان جديد</title>
+    <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/data/content/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="-2098303095"><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"><span class="letter-fallback" data-reactid="34"></span><div class="screenshot" style="background-image:none;" data-reactid="35"></div></div><div class="title " data-reactid="36"><span dir="auto" data-reactid="37"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="38"><a data-reactid="39"><div class="tile" aria-hidden="true" data-reactid="40"><span class="letter-fallback" data-reactid="41"></span><div class="screenshot" style="background-image:none;" data-reactid="42"></div></div><div class="title " data-reactid="43"><span dir="auto" data-reactid="44"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="45"><a data-reactid="46"><div class="tile" aria-hidden="true" data-reactid="47"><span class="letter-fallback" data-reactid="48"></span><div class="screenshot" style="background-image:none;" data-reactid="49"></div></div><div class="title " data-reactid="50"><span dir="auto" data-reactid="51"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="52"><a data-reactid="53"><div class="tile" aria-hidden="true" data-reactid="54"><span class="letter-fallback" data-reactid="55"></span><div class="screenshot" style="background-image:none;" data-reactid="56"></div></div><div class="title " data-reactid="57"><span dir="auto" data-reactid="58"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="59"><a data-reactid="60"><div class="tile" aria-hidden="true" data-reactid="61"><span class="letter-fallback" data-reactid="62"></span><div class="screenshot" style="background-image:none;" data-reactid="63"></div></div><div class="title " data-reactid="64"><span dir="auto" data-reactid="65"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="66"><a data-reactid="67"><div class="tile" aria-hidden="true" data-reactid="68"><span class="letter-fallback" data-reactid="69"></span><div class="screenshot" style="background-image:none;" data-reactid="70"></div></div><div class="title " data-reactid="71"><span dir="auto" data-reactid="72"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="73"><div class="edit-topsites-button" data-reactid="74"><button class="edit" title="خصص قسم المواقع الأكثر زيارة" data-reactid="75"><span data-reactid="76">حرِّر</span></button></div></div></div></section><div class="sections-list" data-reactid="77"><section class="collapsible-section section animation-enabled" data-reactid="78"><div class="section-top-bar" data-reactid="79"><h3 class="section-title" data-reactid="80"><span class="click-target" data-reactid="81"><span class="icon icon-small-spacer icon-pocket" data-reactid="82"></span><span data-reactid="83">ينصح به Pocket</span><span class="icon icon-arrowhead-down" data-reactid="84"></span></span></h3></div><div class="section-body" data-reactid="85"><ul class="section-list" style="padding:0;" data-reactid="86"><li class="card-outer placeholder" data-reactid="87"><a data-reactid="88"><div class="card" data-reactid="89"><div class="card-details no-image" data-reactid="90"><div class="card-text no-context no-description no-host-name no-image" data-reactid="91"><h4 class="card-title" dir="auto" data-reactid="92"></h4><p class="card-description" dir="auto" data-reactid="93"></p></div><div class="card-context" data-reactid="94"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="95"><a data-reactid="96"><div class="card" data-reactid="97"><div class="card-details no-image" data-reactid="98"><div class="card-text no-context no-description no-host-name no-image" data-reactid="99"><h4 class="card-title" dir="auto" data-reactid="100"></h4><p class="card-description" dir="auto" data-reactid="101"></p></div><div class="card-context" data-reactid="102"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="103"><a data-reactid="104"><div class="card" data-reactid="105"><div class="card-details no-image" data-reactid="106"><div class="card-text no-context no-description no-host-name no-image" data-reactid="107"><h4 class="card-title" dir="auto" data-reactid="108"></h4><p class="card-description" dir="auto" data-reactid="109"></p></div><div class="card-context" data-reactid="110"></div></div></div></a></li></ul><div class="topic" data-reactid="111"><span data-reactid="112"><span data-reactid="113">المواضيع الشائعة:</span></span><ul data-reactid="114"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="115"><div class="section-top-bar" data-reactid="116"><h3 class="section-title" data-reactid="117"><span class="click-target" data-reactid="118"><span class="icon icon-small-spacer icon-highlights" data-reactid="119"></span><span data-reactid="120">أهم الأحداث</span><span class="icon icon-arrowhead-down" data-reactid="121"></span></span></h3></div><div class="section-body" data-reactid="122"><ul class="section-list" style="padding:0;" data-reactid="123"><li class="card-outer placeholder" data-reactid="124"><a data-reactid="125"><div class="card" data-reactid="126"><div class="card-details no-image" data-reactid="127"><div class="card-text no-context no-description no-host-name no-image" data-reactid="128"><h4 class="card-title" dir="auto" data-reactid="129"></h4><p class="card-description" dir="auto" data-reactid="130"></p></div><div class="card-context" data-reactid="131"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="132"><a data-reactid="133"><div class="card" data-reactid="134"><div class="card-details no-image" data-reactid="135"><div class="card-text no-context no-description no-host-name no-image" data-reactid="136"><h4 class="card-title" dir="auto" data-reactid="137"></h4><p class="card-description" dir="auto" data-reactid="138"></p></div><div class="card-context" data-reactid="139"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="140"><a data-reactid="141"><div class="card" data-reactid="142"><div class="card-details no-image" data-reactid="143"><div class="card-text no-context no-description no-host-name no-image" data-reactid="144"><h4 class="card-title" dir="auto" data-reactid="145"></h4><p class="card-description" dir="auto" data-reactid="146"></p></div><div class="card-context" data-reactid="147"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 148 --></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/data/content/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/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/ar/activity-stream.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="ar" dir="rtl">
+  <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">
+    <title>لسان جديد</title>
+    <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/data/content/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/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/ast/activity-stream-initial-state.js
@@ -0,0 +1,162 @@
+// Note - this is a generated file.
+  window.gActivityStreamPrerenderedState = {
+  "TopSites": {
+    "initialized": false,
+    "rows": [],
+    "editForm": {
+      "visible": false,
+      "site": null
+    }
+  },
+  "App": {
+    "initialized": false,
+    "locale": "ast",
+    "strings": {
+      "newtab_page_title": "Llingüeta nueva",
+      "default_label_loading": "Cargando…",
+      "header_top_sites": "Sitios destacaos",
+      "header_stories": "Histories destacaes",
+      "header_highlights": "Los destacaos",
+      "header_visit_again": "Visitar de nueves",
+      "header_bookmarks": "Marcadores recientes",
+      "header_recommended_by": "Recommended by {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",
+      "type_label_now": "Agora",
+      "menu_action_bookmark": "Amestar a marcadores",
+      "menu_action_remove_bookmark": "Desaniciar marcador",
+      "menu_action_copy_address": "Copiar direición",
+      "menu_action_email_link": "Unviar enllaz per corréu…",
+      "menu_action_open_new_window": "Abrir nuna ventana nueva",
+      "menu_action_open_private_window": "Abrir nuna ventana privada nueva",
+      "menu_action_dismiss": "Escartar",
+      "menu_action_delete": "Desaniciar del historial",
+      "menu_action_pin": "Fixar",
+      "menu_action_unpin": "Desfixar",
+      "confirm_history_delete_p1": "¿De xuru que quies desaniciar cada instancia d'esta páxina del to historial?",
+      "confirm_history_delete_notice_p2": "Esta aición nun pue desfacese.",
+      "menu_action_save_to_pocket": "Guardar en Pocket",
+      "search_for_something_with": "Guetar {search_term} con:",
+      "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á",
+      "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",
+      "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_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_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",
+      "edit_topsites_showmore_button": "Amosar más",
+      "edit_topsites_showless_button": "Show Fewer",
+      "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",
+      "topsites_form_add_button": "Amestar",
+      "topsites_form_save_button": "Guardar",
+      "topsites_form_cancel_button": "Encaboxar",
+      "topsites_form_url_validation": "Valid URL required",
+      "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"
+    },
+    "textDirection": "ltr",
+    "version": null
+  },
+  "Snippets": {
+    "initialized": false
+  },
+  "Prefs": {
+    "initialized": true,
+    "values": {
+      "migrationExpired": true,
+      "showTopSites": true,
+      "showSearch": true,
+      "topSitesCount": 6,
+      "collapseTopSites": false,
+      "section.highlights.collapsed": false,
+      "section.topstories.collapsed": false,
+      "feeds.section.topstories": true,
+      "feeds.section.highlights": true
+    }
+  },
+  "Dialog": {
+    "visible": false,
+    "data": {}
+  },
+  "Sections": [
+    {
+      "title": {
+        "id": "header_recommended_by",
+        "values": {
+          "provider": "Pocket"
+        }
+      },
+      "rows": [],
+      "order": 1,
+      "enabled": true,
+      "icon": "pocket",
+      "id": "topstories",
+      "initialized": false
+    },
+    {
+      "title": {
+        "id": "header_highlights"
+      },
+      "rows": [],
+      "order": 2,
+      "enabled": true,
+      "id": "highlights",
+      "icon": "highlights",
+      "initialized": false
+    }
+  ],
+  "PreferencesPane": {
+    "visible": false
+  }
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/ast/activity-stream-prerendered.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="ast" 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">
+    <title>Llingüeta nueva</title>
+    <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/data/content/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="-178976077"><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"><span class="letter-fallback" data-reactid="34"></span><div class="screenshot" style="background-image:none;" data-reactid="35"></div></div><div class="title " data-reactid="36"><span dir="auto" data-reactid="37"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="38"><a data-reactid="39"><div class="tile" aria-hidden="true" data-reactid="40"><span class="letter-fallback" data-reactid="41"></span><div class="screenshot" style="background-image:none;" data-reactid="42"></div></div><div class="title " data-reactid="43"><span dir="auto" data-reactid="44"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="45"><a data-reactid="46"><div class="tile" aria-hidden="true" data-reactid="47"><span class="letter-fallback" data-reactid="48"></span><div class="screenshot" style="background-image:none;" data-reactid="49"></div></div><div class="title " data-reactid="50"><span dir="auto" data-reactid="51"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="52"><a data-reactid="53"><div class="tile" aria-hidden="true" data-reactid="54"><span class="letter-fallback" data-reactid="55"></span><div class="screenshot" style="background-image:none;" data-reactid="56"></div></div><div class="title " data-reactid="57"><span dir="auto" data-reactid="58"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="59"><a data-reactid="60"><div class="tile" aria-hidden="true" data-reactid="61"><span class="letter-fallback" data-reactid="62"></span><div class="screenshot" style="background-image:none;" data-reactid="63"></div></div><div class="title " data-reactid="64"><span dir="auto" data-reactid="65"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="66"><a data-reactid="67"><div class="tile" aria-hidden="true" data-reactid="68"><span class="letter-fallback" data-reactid="69"></span><div class="screenshot" style="background-image:none;" data-reactid="70"></div></div><div class="title " data-reactid="71"><span dir="auto" data-reactid="72"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="73"><div class="edit-topsites-button" data-reactid="74"><button class="edit" title="Customize your Top Sites section" data-reactid="75"><span data-reactid="76">Edit</span></button></div></div></div></section><div class="sections-list" data-reactid="77"><section class="collapsible-section section animation-enabled" data-reactid="78"><div class="section-top-bar" data-reactid="79"><h3 class="section-title" data-reactid="80"><span class="click-target" data-reactid="81"><span class="icon icon-small-spacer icon-pocket" data-reactid="82"></span><span data-reactid="83">Recommended by Pocket</span><span class="icon icon-arrowhead-down" data-reactid="84"></span></span></h3></div><div class="section-body" data-reactid="85"><ul class="section-list" style="padding:0;" data-reactid="86"><li class="card-outer placeholder" data-reactid="87"><a data-reactid="88"><div class="card" data-reactid="89"><div class="card-details no-image" data-reactid="90"><div class="card-text no-context no-description no-host-name no-image" data-reactid="91"><h4 class="card-title" dir="auto" data-reactid="92"></h4><p class="card-description" dir="auto" data-reactid="93"></p></div><div class="card-context" data-reactid="94"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="95"><a data-reactid="96"><div class="card" data-reactid="97"><div class="card-details no-image" data-reactid="98"><div class="card-text no-context no-description no-host-name no-image" data-reactid="99"><h4 class="card-title" dir="auto" data-reactid="100"></h4><p class="card-description" dir="auto" data-reactid="101"></p></div><div class="card-context" data-reactid="102"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="103"><a data-reactid="104"><div class="card" data-reactid="105"><div class="card-details no-image" data-reactid="106"><div class="card-text no-context no-description no-host-name no-image" data-reactid="107"><h4 class="card-title" dir="auto" data-reactid="108"></h4><p class="card-description" dir="auto" data-reactid="109"></p></div><div class="card-context" data-reactid="110"></div></div></div></a></li></ul><div class="topic" data-reactid="111"><span data-reactid="112"><span data-reactid="113">Temes populares:</span></span><ul data-reactid="114"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="115"><div class="section-top-bar" data-reactid="116"><h3 class="section-title" data-reactid="117"><span class="click-target" data-reactid="118"><span class="icon icon-small-spacer icon-highlights" data-reactid="119"></span><span data-reactid="120">Los destacaos</span><span class="icon icon-arrowhead-down" data-reactid="121"></span></span></h3></div><div class="section-body" data-reactid="122"><ul class="section-list" style="padding:0;" data-reactid="123"><li class="card-outer placeholder" data-reactid="124"><a data-reactid="125"><div class="card" data-reactid="126"><div class="card-details no-image" data-reactid="127"><div class="card-text no-context no-description no-host-name no-image" data-reactid="128"><h4 class="card-title" dir="auto" data-reactid="129"></h4><p class="card-description" dir="auto" data-reactid="130"></p></div><div class="card-context" data-reactid="131"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="132"><a data-reactid="133"><div class="card" data-reactid="134"><div class="card-details no-image" data-reactid="135"><div class="card-text no-context no-description no-host-name no-image" data-reactid="136"><h4 class="card-title" dir="auto" data-reactid="137"></h4><p class="card-description" dir="auto" data-reactid="138"></p></div><div class="card-context" data-reactid="139"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="140"><a data-reactid="141"><div class="card" data-reactid="142"><div class="card-details no-image" data-reactid="143"><div class="card-text no-context no-description no-host-name no-image" data-reactid="144"><h4 class="card-title" dir="auto" data-reactid="145"></h4><p class="card-description" dir="auto" data-reactid="146"></p></div><div class="card-context" data-reactid="147"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 148 --></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/data/content/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/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/ast/activity-stream.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="ast" 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">
+    <title>Llingüeta nueva</title>
+    <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/data/content/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/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/az/activity-stream-initial-state.js
@@ -0,0 +1,162 @@
+// Note - this is a generated file.
+  window.gActivityStreamPrerenderedState = {
+  "TopSites": {
+    "initialized": false,
+    "rows": [],
+    "editForm": {
+      "visible": false,
+      "site": null
+    }
+  },
+  "App": {
+    "initialized": false,
+    "locale": "az",
+    "strings": {
+      "newtab_page_title": "Yeni Vərəq",
+      "default_label_loading": "Yüklənir…",
+      "header_top_sites": "Qabaqcıl Saytlar",
+      "header_stories": "Qabaqcıl Hekayələr",
+      "header_highlights": "Seçilmişlər",
+      "header_visit_again": "Təkrar ziyarət et",
+      "header_bookmarks": "Son Əlfəcinlər",
+      "header_recommended_by": "{provider} məsləhət görür",
+      "header_bookmarks_placeholder": "Hələlik heç əlfəcininiz yoxdur.",
+      "header_stories_from": "qaynaq:",
+      "type_label_visited": "Ziyarət edilib",
+      "type_label_bookmarked": "Əlfəcinlənib",
+      "type_label_synced": "Digər cihazdan sync edilib",
+      "type_label_recommended": "Populyar",
+      "type_label_open": "Açıq",
+      "type_label_topic": "Mövzu",
+      "type_label_now": "İndi",
+      "menu_action_bookmark": "Əlfəcinlə",
+      "menu_action_remove_bookmark": "Əlfəcini sil",
+      "menu_action_copy_address": "Ünvanı köçür",
+      "menu_action_email_link": "Keçidi e-poçt ilə göndər…",
+      "menu_action_open_new_window": "Yeni Pəncərədə Aç",
+      "menu_action_open_private_window": "Yeni Məxfi Pəncərədə Aç",
+      "menu_action_dismiss": "Rədd et",
+      "menu_action_delete": "Tarixçədən Sil",
+      "menu_action_pin": "Bərkid",
+      "menu_action_unpin": "Çıxart",
+      "confirm_history_delete_p1": "Bu səhifənin bütün parçalarını tarixçənizdən silmək istədiyinizə əminsiniz?",
+      "confirm_history_delete_notice_p2": "Bu əməliyyat geri alına bilməz.",
+      "menu_action_save_to_pocket": "Pocket-ə Saxla",
+      "search_for_something_with": "{search_term} üçün bununla axtar:",
+      "search_button": "Axtar",
+      "search_header": "{search_engine_name} Axtarış",
+      "search_web_placeholder": "İnternetdə Axtar",
+      "search_settings": "Axtarış Tənzimləmələrini Dəyiş",
+      "section_info_option": "Məlumat",
+      "section_info_send_feedback": "Əks-əlaqə göndər",
+      "section_info_privacy_notice": "Məxfilik Bildirişi",
+      "welcome_title": "Yeni vərəqə xoş gəldiniz",
+      "welcome_body": "Firefox bu səhifədə ən uyğun əlfəcin, məqalə, video və son ziyarət etdiyiniz səhifələri göstərərək onları rahat tapmağınıza kömək edəcək.",
+      "welcome_label": "Seçilmişləriniz təyin edilir",
+      "time_label_less_than_minute": "<1d",
+      "time_label_minute": "{number}d",
+      "time_label_hour": "{number}s",
+      "time_label_day": "{number}g",
+      "settings_pane_button_label": "Yeni Vərəq səhifənizi özəlləşdirin",
+      "settings_pane_header": "Yeni Vərəq Nizamlamaları",
+      "settings_pane_body2": "Bu səhifədə nə görəcəyinizi seçin.",
+      "settings_pane_search_header": "Axtar",
+      "settings_pane_search_body": "Yeni vərəqinizdən Web-də axtarış edin.",
+      "settings_pane_topsites_header": "Qabaqcıl Saytlar",
+      "settings_pane_topsites_body": "Ən çox ziyarət etdiyiniz saytları görün.",
+      "settings_pane_topsites_options_showmore": "İki sətir göstər",
+      "settings_pane_bookmarks_header": "Son Əlfəcinlər",
+      "settings_pane_bookmarks_body": "Yeni yaradılan əlfəcinlər tək bir əlverişli yerdə.",
+      "settings_pane_visit_again_header": "Təkrar ziyarət et",
+      "settings_pane_visit_again_body": "Firefox tarixçənizdən yadda saxlamaq və ya geri qayıtmaq istəyə biləcəyiniz hissələri göstərəcək.",
+      "settings_pane_highlights_header": "Seçilmişlər",
+      "settings_pane_highlights_body2": "Son ziyarət etdiyiniz və ya əlfəcinlədiyiniz maraqlı məzmunlara rahat qayıdın.",
+      "settings_pane_highlights_options_bookmarks": "Əlfəcinlər",
+      "settings_pane_highlights_options_visited": "Baxılmış Saytlar",
+      "settings_pane_snippets_header": "Hissələr",
+      "settings_pane_snippets_body": "Mozilladan Firefox, internet mədəniyyəti və digər yeniliklər haqqında qısa bildirişlər oxuyun.",
+      "settings_pane_done_button": "Oldu",
+      "settings_pane_topstories_options_sponsored": "Show Sponsored Stories",
+      "edit_topsites_button_text": "Redaktə et",
+      "edit_topsites_button_label": "Qabaqcıl Saytlar bölümünüzü fərdiləşdirin",
+      "edit_topsites_showmore_button": "Daha çox göstər",
+      "edit_topsites_showless_button": "Daha az göstər",
+      "edit_topsites_done_button": "Oldu",
+      "edit_topsites_pin_button": "Bu saytı sabitlə",
+      "edit_topsites_unpin_button": "Bu saytı çıxart",
+      "edit_topsites_edit_button": "Bu saytı düzəlt",
+      "edit_topsites_dismiss_button": "Bu saytı çıxart",
+      "edit_topsites_add_button": "Əlavə et",
+      "topsites_form_add_header": "Yeni Qabaqcıl Saytlar",
+      "topsites_form_edit_header": "Qabaqcıl Saytları Dəyişdir",
+      "topsites_form_title_placeholder": "Başlıq daxil et",
+      "topsites_form_url_placeholder": "Ünvanı yazın və ya yapışdırın",
+      "topsites_form_add_button": "Əlavə et",
+      "topsites_form_save_button": "Saxla",
+      "topsites_form_cancel_button": "Ləğv et",
+      "topsites_form_url_validation": "Doğru ünvan tələb olunur",
+      "pocket_read_more": "Məşhur Mövzular:",
+      "pocket_read_even_more": "Daha çox hekayə gör",
+      "pocket_feedback_header": "25 milyon nəfərin dəstəyi ilə internetin ən yaxşıları.",
+      "pocket_description": "Mozilla ailəsinin yeni üzvü olan Pocket ilə yüksək keyfiyyətli məzmunları kəşf edin.",
+      "highlights_empty_state": "İnternetdə gəzməyə başlayın, burada ziyarət edəcəyiniz və ya əlfəcinləyəcəyiniz məqalə, video və digər səhifələri göstərəcəyik.",
+      "topstories_empty_state": "Hamısını oxudunuz. Yeni {provider} məqalələri üçün daha sonra təkrar yoxlayın. Gözləyə bilmirsiz? Məşhur mövzu seçərək internetdən daha çox gözəl məqalələr tapın.",
+      "manual_migration_explanation2": "Firefox səyyahını digər səyyahlardan olan əlfəcin, tarixçə və parollar ilə yoxlayın.",
+      "manual_migration_cancel_button": "Xeyr, Təşəkkürlər",
+      "manual_migration_import_button": "İndi idxal et"
+    },
+    "textDirection": "ltr",
+    "version": null
+  },
+  "Snippets": {
+    "initialized": false
+  },
+  "Prefs": {
+    "initialized": true,
+    "values": {
+      "migrationExpired": true,
+      "showTopSites": true,
+      "showSearch": true,
+      "topSitesCount": 6,
+      "collapseTopSites": false,
+      "section.highlights.collapsed": false,
+      "section.topstories.collapsed": false,
+      "feeds.section.topstories": true,
+      "feeds.section.highlights": true
+    }
+  },
+  "Dialog": {
+    "visible": false,
+    "data": {}
+  },
+  "Sections": [
+    {
+      "title": {
+        "id": "header_recommended_by",
+        "values": {
+          "provider": "Pocket"
+        }
+      },
+      "rows": [],
+      "order": 1,
+      "enabled": true,
+      "icon": "pocket",
+      "id": "topstories",
+      "initialized": false
+    },
+    {
+      "title": {
+        "id": "header_highlights"
+      },
+      "rows": [],
+      "order": 2,
+      "enabled": true,
+      "id": "highlights",
+      "icon": "highlights",
+      "initialized": false
+    }
+  ],
+  "PreferencesPane": {
+    "visible": false
+  }
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/az/activity-stream-prerendered.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="az" 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">
+    <title>Yeni Vərəq</title>
+    <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/data/content/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="1921992494"><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">İnternetdə Axtar</span></span></label><input type="search" id="newtab-search-text" maxlength="256" placeholder="İnternetdə Axtar" title="İnternetdə Axtar" data-reactid="7"/><button id="searchSubmit" class="search-button" title="Axtar" data-reactid="8"><span class="sr-only" data-reactid="9"><span data-reactid="10">Axtar</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">Qabaqcıl Saytlar</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="Məlumat" 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">Qabaqcıl Saytlar</span></div><p class="info-option-body" data-reactid="24"><span data-reactid="25">Ən çox ziyarət etdiyiniz saytları görün.</span></p><div class="info-option-manage" data-reactid="26"><button data-reactid="27"><span data-reactid="28">Yeni Vərəq Nizamlamaları</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"><span class="letter-fallback" data-reactid="34"></span><div class="screenshot" style="background-image:none;" data-reactid="35"></div></div><div class="title " data-reactid="36"><span dir="auto" data-reactid="37"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="38"><a data-reactid="39"><div class="tile" aria-hidden="true" data-reactid="40"><span class="letter-fallback" data-reactid="41"></span><div class="screenshot" style="background-image:none;" data-reactid="42"></div></div><div class="title " data-reactid="43"><span dir="auto" data-reactid="44"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="45"><a data-reactid="46"><div class="tile" aria-hidden="true" data-reactid="47"><span class="letter-fallback" data-reactid="48"></span><div class="screenshot" style="background-image:none;" data-reactid="49"></div></div><div class="title " data-reactid="50"><span dir="auto" data-reactid="51"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="52"><a data-reactid="53"><div class="tile" aria-hidden="true" data-reactid="54"><span class="letter-fallback" data-reactid="55"></span><div class="screenshot" style="background-image:none;" data-reactid="56"></div></div><div class="title " data-reactid="57"><span dir="auto" data-reactid="58"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="59"><a data-reactid="60"><div class="tile" aria-hidden="true" data-reactid="61"><span class="letter-fallback" data-reactid="62"></span><div class="screenshot" style="background-image:none;" data-reactid="63"></div></div><div class="title " data-reactid="64"><span dir="auto" data-reactid="65"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="66"><a data-reactid="67"><div class="tile" aria-hidden="true" data-reactid="68"><span class="letter-fallback" data-reactid="69"></span><div class="screenshot" style="background-image:none;" data-reactid="70"></div></div><div class="title " data-reactid="71"><span dir="auto" data-reactid="72"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="73"><div class="edit-topsites-button" data-reactid="74"><button class="edit" title="Qabaqcıl Saytlar bölümünüzü fərdiləşdirin" data-reactid="75"><span data-reactid="76">Redaktə et</span></button></div></div></div></section><div class="sections-list" data-reactid="77"><section class="collapsible-section section animation-enabled" data-reactid="78"><div class="section-top-bar" data-reactid="79"><h3 class="section-title" data-reactid="80"><span class="click-target" data-reactid="81"><span class="icon icon-small-spacer icon-pocket" data-reactid="82"></span><span data-reactid="83">Pocket məsləhət görür</span><span class="icon icon-arrowhead-down" data-reactid="84"></span></span></h3></div><div class="section-body" data-reactid="85"><ul class="section-list" style="padding:0;" data-reactid="86"><li class="card-outer placeholder" data-reactid="87"><a data-reactid="88"><div class="card" data-reactid="89"><div class="card-details no-image" data-reactid="90"><div class="card-text no-context no-description no-host-name no-image" data-reactid="91"><h4 class="card-title" dir="auto" data-reactid="92"></h4><p class="card-description" dir="auto" data-reactid="93"></p></div><div class="card-context" data-reactid="94"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="95"><a data-reactid="96"><div class="card" data-reactid="97"><div class="card-details no-image" data-reactid="98"><div class="card-text no-context no-description no-host-name no-image" data-reactid="99"><h4 class="card-title" dir="auto" data-reactid="100"></h4><p class="card-description" dir="auto" data-reactid="101"></p></div><div class="card-context" data-reactid="102"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="103"><a data-reactid="104"><div class="card" data-reactid="105"><div class="card-details no-image" data-reactid="106"><div class="card-text no-context no-description no-host-name no-image" data-reactid="107"><h4 class="card-title" dir="auto" data-reactid="108"></h4><p class="card-description" dir="auto" data-reactid="109"></p></div><div class="card-context" data-reactid="110"></div></div></div></a></li></ul><div class="topic" data-reactid="111"><span data-reactid="112"><span data-reactid="113">Məşhur Mövzular:</span></span><ul data-reactid="114"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="115"><div class="section-top-bar" data-reactid="116"><h3 class="section-title" data-reactid="117"><span class="click-target" data-reactid="118"><span class="icon icon-small-spacer icon-highlights" data-reactid="119"></span><span data-reactid="120">Seçilmişlər</span><span class="icon icon-arrowhead-down" data-reactid="121"></span></span></h3></div><div class="section-body" data-reactid="122"><ul class="section-list" style="padding:0;" data-reactid="123"><li class="card-outer placeholder" data-reactid="124"><a data-reactid="125"><div class="card" data-reactid="126"><div class="card-details no-image" data-reactid="127"><div class="card-text no-context no-description no-host-name no-image" data-reactid="128"><h4 class="card-title" dir="auto" data-reactid="129"></h4><p class="card-description" dir="auto" data-reactid="130"></p></div><div class="card-context" data-reactid="131"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="132"><a data-reactid="133"><div class="card" data-reactid="134"><div class="card-details no-image" data-reactid="135"><div class="card-text no-context no-description no-host-name no-image" data-reactid="136"><h4 class="card-title" dir="auto" data-reactid="137"></h4><p class="card-description" dir="auto" data-reactid="138"></p></div><div class="card-context" data-reactid="139"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="140"><a data-reactid="141"><div class="card" data-reactid="142"><div class="card-details no-image" data-reactid="143"><div class="card-text no-context no-description no-host-name no-image" data-reactid="144"><h4 class="card-title" dir="auto" data-reactid="145"></h4><p class="card-description" dir="auto" data-reactid="146"></p></div><div class="card-context" data-reactid="147"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 148 --></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/data/content/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/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/az/activity-stream.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="az" 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">
+    <title>Yeni Vərəq</title>
+    <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/data/content/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/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/be/activity-stream-initial-state.js
@@ -0,0 +1,162 @@
+// Note - this is a generated file.
+  window.gActivityStreamPrerenderedState = {
+  "TopSites": {
+    "initialized": false,
+    "rows": [],
+    "editForm": {
+      "visible": false,
+      "site": null
+    }
+  },
+  "App": {
+    "initialized": false,
+    "locale": "be",
+    "strings": {
+      "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": "Тэндэнцыі",
+      "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": "Захаваць у 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": "Паведамленне аб прыватнасці",
+      "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": "Наладзіць вашу старонку новай карткі",
+      "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 пакажа вам элементы гісторыі прагляду, якія вы, магчыма, захочаце запомніць або наведаць зноў.",
+      "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",
+      "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": "Рэдагаваць гэты сайт",
+      "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": "Адкрыйце для сябе высакаякасны кантэнт, які вы маглі б прапусціць, з дапамогай Pocket, які стаў часткай Mozilla.",
+      "highlights_empty_state": "Пачніце агляданне, і мы пакажам вам тут некаторыя з найлепшых артыкулаў, відэаролікаў і іншых старонак, якія вы нядаўна наведалі або дадалі ў закладкі.",
+      "topstories_empty_state": "Гатова. Праверце пазней, каб убачыць больш матэрыялаў ад {provider}. Не жадаеце чакаць? Выберыце папулярную тэму, каб знайсці больш цікавых матэрыялаў з усяго Інтэрнэту.",
+      "manual_migration_explanation2": "Паспрабуйце Firefox з закладкамі, гісторыяй і паролямі з іншага браўзера.",
+      "manual_migration_cancel_button": "Не, дзякуй",
+      "manual_migration_import_button": "Імпартаваць зараз"
+    },
+    "textDirection": "ltr",
+    "version": null
+  },
+  "Snippets": {
+    "initialized": false
+  },
+  "Prefs": {
+    "initialized": true,
+    "values": {
+      "migrationExpired": true,
+      "showTopSites": true,
+      "showSearch": true,
+      "topSitesCount": 6,
+      "collapseTopSites": false,
+      "section.highlights.collapsed": false,
+      "section.topstories.collapsed": false,
+      "feeds.section.topstories": true,
+      "feeds.section.highlights": true
+    }
+  },
+  "Dialog": {
+    "visible": false,
+    "data": {}
+  },
+  "Sections": [
+    {
+      "title": {
+        "id": "header_recommended_by",
+        "values": {
+          "provider": "Pocket"
+        }
+      },
+      "rows": [],
+      "order": 1,
+      "enabled": true,
+      "icon": "pocket",
+      "id": "topstories",
+      "initialized": false
+    },
+    {
+      "title": {
+        "id": "header_highlights"
+      },
+      "rows": [],
+      "order": 2,
+      "enabled": true,
+      "id": "highlights",
+      "icon": "highlights",
+      "initialized": false
+    }
+  ],
+  "PreferencesPane": {
+    "visible": false
+  }
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/be/activity-stream-prerendered.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="be" 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">
+    <title>Новая картка</title>
+    <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/data/content/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="1387356516"><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"><span class="letter-fallback" data-reactid="34"></span><div class="screenshot" style="background-image:none;" data-reactid="35"></div></div><div class="title " data-reactid="36"><span dir="auto" data-reactid="37"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="38"><a data-reactid="39"><div class="tile" aria-hidden="true" data-reactid="40"><span class="letter-fallback" data-reactid="41"></span><div class="screenshot" style="background-image:none;" data-reactid="42"></div></div><div class="title " data-reactid="43"><span dir="auto" data-reactid="44"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="45"><a data-reactid="46"><div class="tile" aria-hidden="true" data-reactid="47"><span class="letter-fallback" data-reactid="48"></span><div class="screenshot" style="background-image:none;" data-reactid="49"></div></div><div class="title " data-reactid="50"><span dir="auto" data-reactid="51"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="52"><a data-reactid="53"><div class="tile" aria-hidden="true" data-reactid="54"><span class="letter-fallback" data-reactid="55"></span><div class="screenshot" style="background-image:none;" data-reactid="56"></div></div><div class="title " data-reactid="57"><span dir="auto" data-reactid="58"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="59"><a data-reactid="60"><div class="tile" aria-hidden="true" data-reactid="61"><span class="letter-fallback" data-reactid="62"></span><div class="screenshot" style="background-image:none;" data-reactid="63"></div></div><div class="title " data-reactid="64"><span dir="auto" data-reactid="65"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="66"><a data-reactid="67"><div class="tile" aria-hidden="true" data-reactid="68"><span class="letter-fallback" data-reactid="69"></span><div class="screenshot" style="background-image:none;" data-reactid="70"></div></div><div class="title " data-reactid="71"><span dir="auto" data-reactid="72"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="73"><div class="edit-topsites-button" data-reactid="74"><button class="edit" title="Наладзіць раздзел папулярных сайтаў" data-reactid="75"><span data-reactid="76">Правіць</span></button></div></div></div></section><div class="sections-list" data-reactid="77"><section class="collapsible-section section animation-enabled" data-reactid="78"><div class="section-top-bar" data-reactid="79"><h3 class="section-title" data-reactid="80"><span class="click-target" data-reactid="81"><span class="icon icon-small-spacer icon-pocket" data-reactid="82"></span><span data-reactid="83">Рэкамендавана Pocket</span><span class="icon icon-arrowhead-down" data-reactid="84"></span></span></h3></div><div class="section-body" data-reactid="85"><ul class="section-list" style="padding:0;" data-reactid="86"><li class="card-outer placeholder" data-reactid="87"><a data-reactid="88"><div class="card" data-reactid="89"><div class="card-details no-image" data-reactid="90"><div class="card-text no-context no-description no-host-name no-image" data-reactid="91"><h4 class="card-title" dir="auto" data-reactid="92"></h4><p class="card-description" dir="auto" data-reactid="93"></p></div><div class="card-context" data-reactid="94"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="95"><a data-reactid="96"><div class="card" data-reactid="97"><div class="card-details no-image" data-reactid="98"><div class="card-text no-context no-description no-host-name no-image" data-reactid="99"><h4 class="card-title" dir="auto" data-reactid="100"></h4><p class="card-description" dir="auto" data-reactid="101"></p></div><div class="card-context" data-reactid="102"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="103"><a data-reactid="104"><div class="card" data-reactid="105"><div class="card-details no-image" data-reactid="106"><div class="card-text no-context no-description no-host-name no-image" data-reactid="107"><h4 class="card-title" dir="auto" data-reactid="108"></h4><p class="card-description" dir="auto" data-reactid="109"></p></div><div class="card-context" data-reactid="110"></div></div></div></a></li></ul><div class="topic" data-reactid="111"><span data-reactid="112"><span data-reactid="113">Папулярныя тэмы:</span></span><ul data-reactid="114"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="115"><div class="section-top-bar" data-reactid="116"><h3 class="section-title" data-reactid="117"><span class="click-target" data-reactid="118"><span class="icon icon-small-spacer icon-highlights" data-reactid="119"></span><span data-reactid="120">Выбранае</span><span class="icon icon-arrowhead-down" data-reactid="121"></span></span></h3></div><div class="section-body" data-reactid="122"><ul class="section-list" style="padding:0;" data-reactid="123"><li class="card-outer placeholder" data-reactid="124"><a data-reactid="125"><div class="card" data-reactid="126"><div class="card-details no-image" data-reactid="127"><div class="card-text no-context no-description no-host-name no-image" data-reactid="128"><h4 class="card-title" dir="auto" data-reactid="129"></h4><p class="card-description" dir="auto" data-reactid="130"></p></div><div class="card-context" data-reactid="131"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="132"><a data-reactid="133"><div class="card" data-reactid="134"><div class="card-details no-image" data-reactid="135"><div class="card-text no-context no-description no-host-name no-image" data-reactid="136"><h4 class="card-title" dir="auto" data-reactid="137"></h4><p class="card-description" dir="auto" data-reactid="138"></p></div><div class="card-context" data-reactid="139"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="140"><a data-reactid="141"><div class="card" data-reactid="142"><div class="card-details no-image" data-reactid="143"><div class="card-text no-context no-description no-host-name no-image" data-reactid="144"><h4 class="card-title" dir="auto" data-reactid="145"></h4><p class="card-description" dir="auto" data-reactid="146"></p></div><div class="card-context" data-reactid="147"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 148 --></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/data/content/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/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/be/activity-stream.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="be" 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">
+    <title>Новая картка</title>
+    <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/data/content/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/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/bg/activity-stream-initial-state.js
@@ -0,0 +1,162 @@
+// Note - this is a generated file.
+  window.gActivityStreamPrerenderedState = {
+  "TopSites": {
+    "initialized": false,
+    "rows": [],
+    "editForm": {
+      "visible": false,
+      "site": null
+    }
+  },
+  "App": {
+    "initialized": false,
+    "locale": "bg",
+    "strings": {
+      "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": "Тенденции",
+      "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": "Запазване в 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": "Политика на поверителност",
+      "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": "Настройки на новия раздел",
+      "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 ще ви показва части от вашата история на разглеждане, към която бихте желали да се върнете или запомните.",
+      "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",
+      "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": "Редактиране",
+      "edit_topsites_dismiss_button": "Изтриване",
+      "edit_topsites_add_button": "Добавяне",
+      "topsites_form_add_header": "Нов най-посещаван сайт",
+      "topsites_form_edit_header": "Редактиране на най-посещаван сайт",
+      "topsites_form_title_placeholder": "Заглавие",
+      "topsites_form_url_placeholder": "Адрес",
+      "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": "Открийте висококачествено съдържание, което иначе може да пропуснете, с помощта на Pocket, вече част от Mozilla.",
+      "highlights_empty_state": "Разглеждайте и тук ще ви покажем някои от най-добрите статии, видео и други страници, които сте посетили или отметнали наскоро.",
+      "topstories_empty_state": "Разгледахте всичко. Проверете по-късно за повече истории от {provider}. Нямате търпение? Изберете популярна тема, за да откриете повече истории из цялата Мрежа.",
+      "manual_migration_explanation2": "Опитайте Firefox с отметките, историята и паролите от друг четец.",
+      "manual_migration_cancel_button": "Не, благодаря",
+      "manual_migration_import_button": "Внасяне"
+    },
+    "textDirection": "ltr",
+    "version": null
+  },
+  "Snippets": {
+    "initialized": false
+  },
+  "Prefs": {
+    "initialized": true,
+    "values": {
+      "migrationExpired": true,
+      "showTopSites": true,
+      "showSearch": true,
+      "topSitesCount": 6,
+      "collapseTopSites": false,
+      "section.highlights.collapsed": false,
+      "section.topstories.collapsed": false,
+      "feeds.section.topstories": true,
+      "feeds.section.highlights": true
+    }
+  },
+  "Dialog": {
+    "visible": false,
+    "data": {}
+  },
+  "Sections": [
+    {
+      "title": {
+        "id": "header_recommended_by",
+        "values": {
+          "provider": "Pocket"
+        }
+      },
+      "rows": [],
+      "order": 1,
+      "enabled": true,
+      "icon": "pocket",
+      "id": "topstories",
+      "initialized": false
+    },
+    {
+      "title": {
+        "id": "header_highlights"
+      },
+      "rows": [],
+      "order": 2,
+      "enabled": true,
+      "id": "highlights",
+      "icon": "highlights",
+      "initialized": false
+    }
+  ],
+  "PreferencesPane": {
+    "visible": false
+  }
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/activity-stream/prerendered/bg/activity-stream-prerendered.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="bg" 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">
+    <title>Нов раздел</title>
+    <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/data/content/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="1284144541"><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"><span class="letter-fallback" data-reactid="34"></span><div class="screenshot" style="background-image:none;" data-reactid="35"></div></div><div class="title " data-reactid="36"><span dir="auto" data-reactid="37"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="38"><a data-reactid="39"><div class="tile" aria-hidden="true" data-reactid="40"><span class="letter-fallback" data-reactid="41"></span><div class="screenshot" style="background-image:none;" data-reactid="42"></div></div><div class="title " data-reactid="43"><span dir="auto" data-reactid="44"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="45"><a data-reactid="46"><div class="tile" aria-hidden="true" data-reactid="47"><span class="letter-fallback" data-reactid="48"></span><div class="screenshot" style="background-image:none;" data-reactid="49"></div></div><div class="title " data-reactid="50"><span dir="auto" data-reactid="51"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="52"><a data-reactid="53"><div class="tile" aria-hidden="true" data-reactid="54"><span class="letter-fallback" data-reactid="55"></span><div class="screenshot" style="background-image:none;" data-reactid="56"></div></div><div class="title " data-reactid="57"><span dir="auto" data-reactid="58"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="59"><a data-reactid="60"><div class="tile" aria-hidden="true" data-reactid="61"><span class="letter-fallback" data-reactid="62"></span><div class="screenshot" style="background-image:none;" data-reactid="63"></div></div><div class="title " data-reactid="64"><span dir="auto" data-reactid="65"></span></div></a></li><li class="top-site-outer placeholder" data-reactid="66"><a data-reactid="67"><div class="tile" aria-hidden="true" data-reactid="68"><span class="letter-fallback" data-reactid="69"></span><div class="screenshot" style="background-image:none;" data-reactid="70"></div></div><div class="title " data-reactid="71"><span dir="auto" data-reactid="72"></span></div></a></li></ul><div class="edit-topsites-wrapper" data-reactid="73"><div class="edit-topsites-button" data-reactid="74"><button class="edit" title="Настройки на най-посещаваните" data-reactid="75"><span data-reactid="76">Редактиране</span></button></div></div></div></section><div class="sections-list" data-reactid="77"><section class="collapsible-section section animation-enabled" data-reactid="78"><div class="section-top-bar" data-reactid="79"><h3 class="section-title" data-reactid="80"><span class="click-target" data-reactid="81"><span class="icon icon-small-spacer icon-pocket" data-reactid="82"></span><span data-reactid="83">Препоръчано от Pocket</span><span class="icon icon-arrowhead-down" data-reactid="84"></span></span></h3></div><div class="section-body" data-reactid="85"><ul class="section-list" style="padding:0;" data-reactid="86"><li class="card-outer placeholder" data-reactid="87"><a data-reactid="88"><div class="card" data-reactid="89"><div class="card-details no-image" data-reactid="90"><div class="card-text no-context no-description no-host-name no-image" data-reactid="91"><h4 class="card-title" dir="auto" data-reactid="92"></h4><p class="card-description" dir="auto" data-reactid="93"></p></div><div class="card-context" data-reactid="94"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="95"><a data-reactid="96"><div class="card" data-reactid="97"><div class="card-details no-image" data-reactid="98"><div class="card-text no-context no-description no-host-name no-image" data-reactid="99"><h4 class="card-title" dir="auto" data-reactid="100"></h4><p class="card-description" dir="auto" data-reactid="101"></p></div><div class="card-context" data-reactid="102"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="103"><a data-reactid="104"><div class="card" data-reactid="105"><div class="card-details no-image" data-reactid="106"><div class="card-text no-context no-description no-host-name no-image" data-reactid="107"><h4 class="card-title" dir="auto" data-reactid="108"></h4><p class="card-description" dir="auto" data-reactid="109"></p></div><div class="card-context" data-reactid="110"></div></div></div></a></li></ul><div class="topic" data-reactid="111"><span data-reactid="112"><span data-reactid="113">Популярни теми:</span></span><ul data-reactid="114"></ul></div></div></section><section class="collapsible-section section animation-enabled" data-reactid="115"><div class="section-top-bar" data-reactid="116"><h3 class="section-title" data-reactid="117"><span class="click-target" data-reactid="118"><span class="icon icon-small-spacer icon-highlights" data-reactid="119"></span><span data-reactid="120">Акценти</span><span class="icon icon-arrowhead-down" data-reactid="121"></span></span></h3></div><div class="section-body" data-reactid="122"><ul class="section-list" style="padding:0;" data-reactid="123"><li class="card-outer placeholder" data-reactid="124"><a data-reactid="125"><div class="card" data-reactid="126"><div class="card-details no-image" data-reactid="127"><div class="card-text no-context no-description no-host-name no-image" data-reactid="128"><h4 class="card-title" dir="auto" data-reactid="129"></h4><p class="card-description" dir="auto" data-reactid="130"></p></div><div class="card-context" data-reactid="131"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="132"><a data-reactid="133"><div class="card" data-reactid="134"><div class="card-details no-image" data-reactid="135"><div class="card-text no-context no-description no-host-name no-image" data-reactid="136"><h4 class="card-title" dir="auto" data-reactid="137"></h4><p class="card-description" dir="auto" data-reactid="138"></p></div><div class="card-context" data-reactid="139"></div></div></div></a></li><li class="card-outer placeholder" data-reactid="140"><a data-reactid="141"><div class="card" data-reactid="142"><div class="card-details no-image" data-reactid="143"><div class="card-text no-context no-description no-host-name no-image" data-reactid="144"><h4 class="card-title" dir="auto" data-reactid="145"></h4><p class="card-description" dir="auto" data-reactid="146"></p></div><div class="card-context" data-reactid="147"></div></div></div></a></li></ul></div></section></div></div><!-- react-empty: 148 --></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/data/content/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/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/bg/activity-stream.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="bg" 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">
+    <title>Нов раздел</title>
+    <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/data/content/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/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/bn-BD/activity-stream-initial-state.js
@@ -0,0 +1,162 @@
+// Note - this is a generated file.
+  window.gActivityStreamPrerenderedState = {
+  "TopSites": {
+    "initialized": false,
+    "rows": [],
+    "editForm": {
+      "visible": false,
+      "site": null
+    }
+  },
+  "App": {
+    "initialized": false,
+    "locale": "bn-BD",
+    "strings": {
+      "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": "ঝোঁক",
+      "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": "