Merge mozilla-central to mozilla-inbound. a=merge
authorDaniel Varga <dvarga@mozilla.com>
Wed, 08 May 2019 14:19:35 +0300
changeset 534934 eb44ee7510d1ce6ec33e82453d774a91427c04fc
parent 534933 a44f70589c96a0fbcfe065f868393fdec18e0b59 (current diff)
parent 534904 65a693623cee0837b4ad0d23241c84cd3ea23e3a (diff)
child 534935 1ec1cbe74a0ad042b662e6577f709da5639968a6
push id2082
push userffxbld-merge
push dateMon, 01 Jul 2019 08:34:18 +0000
treeherdermozilla-release@2fb19d0466d2 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone68.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to mozilla-inbound. a=merge
browser/base/content/test/performance/browser_startup_content_mainthreadio.js
browser/base/content/test/performance/browser_startup_mainthreadio.js
browser/base/content/test/performance/io/browser.ini
js/src/vm/Debugger.cpp
--- a/accessible/generic/HyperTextAccessible.h
+++ b/accessible/generic/HyperTextAccessible.h
@@ -399,18 +399,19 @@ class HyperTextAccessible : public Acces
   void RangeAtPoint(int32_t aX, int32_t aY, TextRange& aRange) const;
 
   //////////////////////////////////////////////////////////////////////////////
   // EditableTextAccessible
 
   void ReplaceText(const nsAString& aText);
   void InsertText(const nsAString& aText, int32_t aPosition);
   void CopyText(int32_t aStartPos, int32_t aEndPos);
-  void CutText(int32_t aStartPos, int32_t aEndPos);
-  void DeleteText(int32_t aStartPos, int32_t aEndPos);
+  MOZ_CAN_RUN_SCRIPT_BOUNDARY void CutText(int32_t aStartPos, int32_t aEndPos);
+  MOZ_CAN_RUN_SCRIPT_BOUNDARY void DeleteText(int32_t aStartPos,
+                                              int32_t aEndPos);
   MOZ_CAN_RUN_SCRIPT
   void PasteText(int32_t aPosition);
 
   /**
    * Return the editor associated with the accessible.
    * The result may be either TextEditor or HTMLEditor.
    */
   virtual already_AddRefed<TextEditor> GetEditor() const;
deleted file mode 100644
--- a/browser/base/content/test/performance/browser_startup_content_mainthreadio.js
+++ /dev/null
@@ -1,419 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/* This test records I/O syscalls done on the main thread during startup.
- *
- * To run this test similar to try server, you need to run:
- *   ./mach package
- *   ./mach test --appname=dist <path to test>
- *
- * If you made changes that cause this test to fail, it's likely because you
- * are touching more files or directories during startup.
- * Most code has no reason to use main thread I/O.
- * If for some reason accessing the file system on the main thread is currently
- * unavoidable, consider defering the I/O as long as you can, ideally after
- * the end of startup.
- */
-
-"use strict";
-
-/* Set this to true only for debugging purpose; it makes the output noisy. */
-const kDumpAllStacks = false;
-
-// Shortcuts for conditions.
-const LINUX = AppConstants.platform == "linux";
-const WIN = AppConstants.platform == "win";
-const MAC = AppConstants.platform == "macosx";
-
-/* Paths in the whitelist can:
- *  - be a full path, eg. "/etc/mime.types"
- *  - have a prefix which will be resolved using Services.dirsvc
- *    eg. "GreD:omni.ja"
- *    It's possible to have only a prefix, in thise case the directory will
- *    still be resolved, eg. "UAppData:"
- *  - use * at the begining and/or end as a wildcard
- * The folder separator is '/' even for Windows paths, where it'll be
- * automatically converted to '\'.
- *
- * Specifying 'ignoreIfUnused: true' will make the test ignore unused entries;
- * without this the test is strict and will fail if a whitelist entry isn't used.
- *
- * Each entry specifies the maximum number of times an operation is expected to
- * occur.
- * The operations currently reported by the I/O interposer are:
- *   create/open: only supported on Windows currently. The test currently
- *     ignores these markers to have a shorter initial whitelist.
- *     Adding Unix support is bug 1533779.
- *   stat: supported on all platforms when checking the last modified date or
- *     file size. Supported only on Windows when checking if a file exists;
- *     fixing this inconsistency is bug 1536109.
- *   read: supported on all platforms, but unix platforms will only report read
- *     calls going through NSPR.
- *   write: supported on all platforms, but Linux will only report write calls
- *     going through NSPR.
- *   close: supported only on Unix, and only for close calls going through NSPR.
- *     Adding Windows support is bug 1524574.
- *   fsync: supported only on Windows.
- *
- * If an entry specifies more than one operation, if at least one of them is
- * encountered, the test won't report a failure for the entry. This helps when
- * whitelisting cases where the reported operations aren't the same on all
- * platforms due to the I/O interposer inconsistencies across platforms
- * documented above.
- */
-const processes = {
-  "Web Content": [
-    {
-      path: "GreD:omni.ja",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-    },
-    { // bug 1376994
-      path: "XCurProcD:omni.ja",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-    },
-    { // bug 1543761
-      path: "GreD:chrome.manifest",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-      close: 1,
-    },
-    { // bug 1376994, bug 1543761
-      path: "XCurProcD:chrome.manifest",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-      close: 1,
-    },
-    { // Exists call in ScopedXREEmbed::SetAppDir
-      path: "XCurProcD:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1357205
-      path: "XREAppFeat:webcompat@mozilla.org.xpi",
-      condition: !WIN,
-      stat: 1,
-    },
-    { // bug 1357205
-      path: "XREAppFeat:formautofill@mozilla.org.xpi",
-      condition: !WIN,
-      stat: 1,
-    },
-  ],
-  "Privileged Content": [
-    {
-      path: "GreD:omni.ja",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-    },
-    { // bug 1376994
-      path: "XCurProcD:omni.ja",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-    },
-    { // bug 1543761
-      path: "GreD:chrome.manifest",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-      close: 1,
-    },
-    { // bug 1376994, bug 1543761
-      path: "XCurProcD:chrome.manifest",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-      close: 1,
-    },
-    { // Exists call in ScopedXREEmbed::SetAppDir
-      path: "XCurProcD:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1357205
-      path: "XREAppFeat:webcompat@mozilla.org.xpi",
-      condition: !WIN,
-      stat: 1,
-    },
-  ],
-  "WebExtensions": [
-    {
-      path: "GreD:omni.ja",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-    },
-    { // bug 1376994
-      path: "XCurProcD:omni.ja",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-    },
-    { // bug 1543761
-      path: "GreD:chrome.manifest",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-      close: 1,
-    },
-    { // bug 1376994, bug 1543761
-      path: "XCurProcD:chrome.manifest",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-      close: 1,
-    },
-    { // Exists call in ScopedXREEmbed::SetAppDir
-      path: "XCurProcD:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1357205
-      path: "XREAppFeat:webcompat@mozilla.org.xpi",
-      condition: !WIN,
-      stat: 1,
-    },
-    { // bug 1357205
-      path: "XREAppFeat:formautofill@mozilla.org.xpi",
-      condition: !WIN,
-      stat: 1,
-    },
-    { // bug 1357205
-      path: "XREAppFeat:screenshots@mozilla.org.xpi",
-      condition: !WIN,
-      close: 1,
-    },
-  ],
-};
-
-function expandWhitelistPath(path) {
-  if (path.includes(":")) {
-    let [prefix, suffix] = path.split(":");
-    let [key, property] = prefix.split(".");
-    let dir = Services.dirsvc.get(key, Ci.nsIFile);
-    if (property) {
-      dir = dir[property];
-    }
-
-    // Resolve symLinks.
-    let dirPath = dir.path;
-    while (dir && !dir.isSymlink()) {
-      dir = dir.parent;
-    }
-    if (dir) {
-      dirPath = dirPath.replace(dir.path, dir.target);
-    }
-
-    path = dirPath;
-
-    if (suffix) {
-      path += "/" + suffix;
-    }
-  }
-  if (AppConstants.platform == "win") {
-    path = path.replace(/\//g, "\\");
-  }
-  return path;
-}
-
-function getStackFromProfile(profile, stack) {
-  const stackPrefixCol = profile.stackTable.schema.prefix;
-  const stackFrameCol = profile.stackTable.schema.frame;
-  const frameLocationCol = profile.frameTable.schema.location;
-
-  let result = [];
-  while (stack) {
-    let sp = profile.stackTable.data[stack];
-    let frame = profile.frameTable.data[sp[stackFrameCol]];
-    stack = sp[stackPrefixCol];
-    frame = profile.stringTable[frame[frameLocationCol]];
-    if (frame != "js::RunScript" && !frame.startsWith("next (self-hosted:")) {
-      result.push(frame);
-    }
-  }
-  return result;
-}
-
-function getIOMarkersFromProfile(profile) {
-  const nameCol = profile.markers.schema.name;
-  const dataCol = profile.markers.schema.data;
-
-  let markers = [];
-  for (let m of profile.markers.data) {
-    let markerName = profile.stringTable[m[nameCol]];
-
-    if (markerName != "FileIO")
-      continue;
-
-    let markerData = m[dataCol];
-    if (markerData.source == "sqlite-mainthread") {
-      continue;
-    }
-
-    let samples = markerData.stack.samples;
-    let stack = samples.data[0][samples.schema.stack];
-    markers.push({operation: markerData.operation,
-                  filename: markerData.filename,
-                  source: markerData.source,
-                  stackId: stack});
-  }
-
-  return markers;
-}
-
-function pathMatches(path, filename) {
-  path = path.toLowerCase();
-  return path == filename || // Full match
-    // Wildcard on both sides of the path
-    (path.startsWith("*") && path.endsWith("*") &&
-     filename.includes(path.slice(1, -1))) ||
-    // Wildcard suffix
-    (path.endsWith("*") && filename.startsWith(path.slice(0, -1))) ||
-    // Wildcard prefix
-    (path.startsWith("*") && filename.endsWith(path.slice(1)));
-}
-
-add_task(async function() {
-  if (!AppConstants.NIGHTLY_BUILD && !AppConstants.MOZ_DEV_EDITION && !AppConstants.DEBUG) {
-    ok(!("@mozilla.org/test/startuprecorder;1" in Cc),
-       "the startup recorder component shouldn't exist in this non-nightly/non-devedition/" +
-       "non-debug build.");
-    return;
-  }
-
-  {
-    let omniJa = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
-    omniJa.append("omni.ja");
-    if (!omniJa.exists()) {
-      ok(false, "This test requires a packaged build, " +
-                "run 'mach package' and then use --appname=dist");
-      return;
-    }
-  }
-
-  let startupRecorder = Cc["@mozilla.org/test/startuprecorder;1"].getService().wrappedJSObject;
-  await startupRecorder.done;
-
-  for (let process in processes) {
-    processes[process] =
-      processes[process].filter(entry => !("condition" in entry) || entry.condition);
-    processes[process].forEach(entry => {
-      entry.path = expandWhitelistPath(entry.path, entry.canonicalize);
-    });
-  }
-
-  let tmpPath = expandWhitelistPath(MAC ? "TmpD:" : "/dev/shm").toLowerCase();
-  let shouldPass = true;
-  for (let procName in processes) {
-    let whitelist = processes[procName];
-    info(`whitelisted paths for ${procName} process:\n` +
-         whitelist.map(e => {
-           let operations = Object.keys(e).filter(k => !["path", "condition"].includes(k))
-                                  .map(k => `${k}: ${e[k]}`);
-           return `  ${e.path} - ${operations.join(", ")}`;
-         }).join("\n"));
-
-    let profile;
-    for (let process of startupRecorder.data.profile.processes) {
-      if (process.threads[0].processName == procName) {
-        profile = process.threads[0];
-        break;
-      }
-    }
-    if (procName == "Privileged Content" && !profile) {
-      // The Privileged Content is started from an idle task that may not have
-      // been executed yet at the time we captured the startup profile in
-      // startupRecorder.
-      todo(false, `profile for ${procName} process not found`);
-    } else {
-      ok(profile, `Found profile for ${procName} process`);
-    }
-    if (!profile) {
-      continue;
-    }
-
-    let markers = getIOMarkersFromProfile(profile);
-    for (let marker of markers) {
-      if (marker.operation == "create/open") {
-        // TODO: handle these I/O markers once they are supported on
-        // non-Windows platforms.
-        continue;
-      }
-
-      // Convert to lower case before comparing because the OS X test slaves
-      // have the 'Firefox' folder in 'Library/Application Support' created
-      // as 'firefox' for some reason.
-      let filename = marker.filename.toLowerCase();
-
-      if (!filename) {
-        // We are still missing the filename on some mainthreadio markers,
-        // these markers are currently useless for the purpose of this test.
-        continue;
-      }
-
-      if (!WIN) {
-        if (filename == "/dev/urandom") {
-          continue;
-        }
-
-        // Ignore I/O due to IPC. This doesn't really touch the disk.
-        if (filename.startsWith(tmpPath + "/org.chromium.")) {
-          continue;
-        }
-      }
-
-      let expected = false;
-      for (let entry of whitelist) {
-        if (pathMatches(entry.path, filename)) {
-          entry[marker.operation] = (entry[marker.operation] || 0) - 1;
-          entry._used = true;
-          expected = true;
-          break;
-        }
-      }
-      if (!expected) {
-        record(false,
-               `unexpected ${marker.operation} on ${marker.filename} in ${procName} process`,
-               undefined,
-               "  " + getStackFromProfile(profile, marker.stackId).join("\n  "));
-        shouldPass = false;
-      }
-      info(`(${marker.source}) ${marker.operation} - ${marker.filename}`);
-      if (kDumpAllStacks) {
-        info(getStackFromProfile(profile, marker.stackId).map(f => "  " + f)
-                                                         .join("\n"));
-      }
-    }
-
-    for (let entry of whitelist) {
-      for (let op in entry) {
-        if (["path", "condition", "ignoreIfUnused", "_used"].includes(op)) {
-          continue;
-        }
-        let message = `${op} on ${entry.path} `;
-        if (entry[op] == 0) {
-          message += "as many times as expected";
-        } else if (entry[op] > 0) {
-          message += `allowed ${entry[op]} more times`;
-        } else {
-          message += `${entry[op] * -1} more times than expected`;
-        }
-        ok(entry[op] >= 0, `${message} in ${procName} process`);
-      }
-      if (!("_used" in entry) && !entry.ignoreIfUnused) {
-        ok(false, `unused whitelist entry ${procName}: ${entry.path}`);
-      }
-    }
-  }
-
-  if (shouldPass) {
-    ok(shouldPass, "No unexpected main thread I/O during startup");
-  } else {
-    const filename = "child-startup-mainthreadio-profile.json";
-    let path = Cc["@mozilla.org/process/environment;1"]
-                 .getService(Ci.nsIEnvironment)
-                 .get("MOZ_UPLOAD_DIR");
-    let encoder = new TextEncoder();
-    let profilePath = OS.Path.join(path, filename);
-    await OS.File.writeAtomic(profilePath,
-                              encoder.encode(JSON.stringify(startupRecorder.data.profile)));
-    ok(false,
-       "Found some unexpected main thread I/O during child process startup; " +
-       "profile uploaded in " + filename);
-  }
-});
deleted file mode 100644
--- a/browser/base/content/test/performance/browser_startup_mainthreadio.js
+++ /dev/null
@@ -1,933 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/* This test records I/O syscalls done on the main thread during startup.
- *
- * To run this test similar to try server, you need to run:
- *   ./mach package
- *   ./mach test --appname=dist <path to test>
- *
- * If you made changes that cause this test to fail, it's likely because you
- * are touching more files or directories during startup.
- * Most code has no reason to use main thread I/O.
- * If for some reason accessing the file system on the main thread is currently
- * unavoidable, consider defering the I/O as long as you can, ideally after
- * the end of startup.
- * If your code isn't strictly required to show the first browser window,
- * it shouldn't be loaded before we are done with first paint.
- * Finally, if your code isn't really needed during startup, it should not be
- * loaded before we have started handling user events.
- */
-
-"use strict";
-
-const { AddonManager } = ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
-
-/* Set this to true only for debugging purpose; it makes the output noisy. */
-const kDumpAllStacks = false;
-
-// Shortcuts for conditions.
-const LINUX = AppConstants.platform == "linux";
-const WIN = AppConstants.platform == "win";
-const MAC = AppConstants.platform == "macosx";
-
-/* Paths in the whitelist can:
- *  - be a full path, eg. "/etc/mime.types"
- *  - have a prefix which will be resolved using Services.dirsvc
- *    eg. "GreD:omni.ja"
- *    It's possible to have only a prefix, in thise case the directory will
- *    still be resolved, eg. "UAppData:"
- *  - use * at the begining and/or end as a wildcard
- *  - For Windows specific entries that require resolving the path to its
- *    canonical form, ie. the old DOS 8.3 format, use canonicalize: true.
- *    This is needed for stat calls to non-existent files.
- * The folder separator is '/' even for Windows paths, where it'll be
- * automatically converted to '\'.
- *
- * Specifying 'ignoreIfUnused: true' will make the test ignore unused entries;
- * without this the test is strict and will fail if a whitelist entry isn't used.
- *
- * Each entry specifies the maximum number of times an operation is expected to
- * occur.
- * The operations currently reported by the I/O interposer are:
- *   create/open: only supported on Windows currently. The test currently
- *     ignores these markers to have a shorter initial whitelist.
- *     Adding Unix support is bug 1533779.
- *   stat: supported on all platforms when checking the last modified date or
- *     file size. Supported only on Windows when checking if a file exists;
- *     fixing this inconsistency is bug 1536109.
- *   read: supported on all platforms, but unix platforms will only report read
- *     calls going through NSPR.
- *   write: supported on all platforms, but Linux will only report write calls
- *     going through NSPR.
- *   close: supported only on Unix, and only for close calls going through NSPR.
- *     Adding Windows support is bug 1524574.
- *   fsync: supported only on Windows.
- *
- * If an entry specifies more than one operation, if at least one of them is
- * encountered, the test won't report a failure for the entry. This helps when
- * whitelisting cases where the reported operations aren't the same on all
- * platforms due to the I/O interposer inconsistencies across platforms
- * documented above.
- */
-const startupPhases = {
-  // Anything done before or during app-startup must have a compelling reason
-  // to run before we have even selected the user profile.
-  "before profile selection": [
-    { // bug 1541226
-      path: "UAppData:",
-      condition: WIN,
-      stat: 3,
-    },
-    { // bug 1541200
-      path: "UAppData:Crash Reports/InstallTime20*",
-      condition: AppConstants.MOZ_CRASHREPORTER,
-      stat: 1, // only caught on Windows.
-      read: 1,
-      write: 2,
-      close: 1,
-    },
-    { // bug 1541200
-      path: "UAppData:Crash Reports/LastCrash",
-      condition: WIN && AppConstants.MOZ_CRASHREPORTER,
-      stat: 1, // only caught on Windows.
-      read: 1,
-    },
-    { // bug 1541200
-      path: "UAppData:Crash Reports/LastCrash",
-      condition: !WIN && AppConstants.MOZ_CRASHREPORTER,
-      ignoreIfUnused: true, // only if we ever crashed on this machine
-      read: 1,
-      close: 1,
-    },
-    { // bug 1541226
-      path: "DefProfLRt.parent:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // At least the read seems unavoidable for a regular startup.
-      path: "UAppData:profiles.ini",
-      condition: MAC,
-      stat: 1,
-      read: 1,
-      close: 1,
-    },
-    { // bug 1546931
-      path: "UAppData:installs.ini",
-      condition: WIN || MAC,
-      ignoreIfUnused: true, // only if a real profile exists on the system.
-      read: 1,
-      stat: 2,
-      close: 1,
-    },
-    { // At least the read seems unavoidable for a regular startup.
-      path: "UAppData:profiles.ini",
-      condition: WIN,
-      ignoreIfUnused: true, // only if a real profile exists on the system.
-      read: 1,
-      stat: 1,
-    },
-    { // bug 1541226, bug 1363586, bug 1541593
-      path: "ProfD:",
-      condition: WIN,
-      stat: 3,
-    },
-    {
-      path: "ProfLD:.startup-incomplete",
-      condition: !WIN, // Visible on Windows with an open marker
-      close: 1,
-    },
-    { // bug 1541491 to stop using this file, bug 1541494 to write correctly.
-      path: "ProfLD:compatibility.ini",
-      condition: !WIN, // Visible on Windows with an open marker
-      write: 18,
-      close: 1,
-    },
-    {
-      path: "GreD:omni.ja",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-    },
-    { // bug 1376994
-      path: "XCurProcD:omni.ja",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-    },
-    {
-      path: "ProfD:parent.lock",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1541603
-      path: "ProfD:minidumps",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1543746
-      path: "XCurProcD:defaults/preferences",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1544034
-      path: "ProfLDS:startupCache/scriptCache-child-current.bin",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1544034
-      path: "ProfLDS:startupCache/scriptCache-child.bin",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1544034
-      path: "ProfLDS:startupCache/scriptCache-current.bin",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1544034
-      path: "ProfLDS:startupCache/scriptCache.bin",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1544037
-      path: "ProfLDS:startupCache/startupCache." +
-             (Services.appinfo.is64Bit ? 8 : 4) + ".little",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1541601
-      path: "PrfDef:channel-prefs.js",
-      stat: 1,
-      read: 1,
-      close: 1,
-    },
-    { // bug 1543761
-      path: "GreD:chrome.manifest",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-      close: 1,
-    },
-    { // bug 1376994, bug 1543761
-      path: "XCurProcD:chrome.manifest",
-      condition: !WIN, // Visible on Windows with an open marker
-      stat: 1,
-      close: 1,
-    },
-    { // At least the read seems unavoidable
-      path: "PrefD:prefs.js",
-      stat: 1,
-      read: 1,
-      close: 1,
-    },
-    { // bug 1543752
-      path: "PrefD:user.js",
-      stat: 1,
-      read: 1,
-      close: 1,
-    },
-    {
-      path: "*ld.so.conf*",
-      condition: LINUX,
-      ignoreIfUnused: true,
-      read: 22,
-      close: 11,
-    },
-    { // bug 1546838
-      path: "ProfD:xulstore/data.mdb",
-      condition: WIN,
-      write: 1,
-      fsync: 1,
-    },
-  ],
-
-  "before opening first browser window": [
-    { // bug 1541226
-      path: "ProfD:",
-      condition: WIN,
-      stat: 2,
-    },
-    {
-      path: "XCurProcD:blocklist.xml",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1534745
-      path: "ProfD:cookies.sqlite-journal",
-      condition: !LINUX,
-      stat: 3,
-      write: 4,
-    },
-    { // bug 1534745
-      path: "ProfD:cookies.sqlite",
-      condition: !LINUX,
-      stat: 2,
-      read: 2,
-      write: 1,
-    },
-    { // bug 1534745
-      path: "ProfD:cookies.sqlite-wal",
-      condition: WIN,
-      stat: 2,
-    },
-    { // bug 975996
-      path: "ProfD:permissions.sqlite",
-      condition: WIN || MAC,
-      fsync: 7,
-      read: 2,
-      stat: 1,
-      write: 10,
-    },
-    { // bug 975996
-      path: "ProfD:permissions.sqlite-journal",
-      condition: WIN || MAC,
-      fsync: 7,
-      stat: 26,
-      write: 38,
-    },
-    { // bug 975996
-      path: "ProfD:permissions.sqlite-wal",
-      condition: WIN,
-      stat: 20,
-    },
-    { // Seems done by OS X and outside of our control.
-      path: "*.savedState/restorecount.plist",
-      condition: MAC,
-      ignoreIfUnused: true,
-      write: 1,
-    },
-    {
-      path: "*ld.so.conf*",
-      condition: LINUX,
-      ignoreIfUnused: true,
-      read: 22,
-      close: 11,
-    },
-    { // bug 1545167
-      path: "/etc/mime.types",
-      condition: LINUX,
-      read: 3,
-      close: 3,
-    },
-    {
-      path: "UChrm:userChrome.css",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1541233
-      path: "UChrm:userContent.css",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1541246
-      path: "XREUSysExt:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1541246
-      path: "XRESysExtDev:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1541246
-      path: "ProfD:extensions",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1541246
-      path: "XCurProcD:extensions",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1541246
-      path: "UAppData:",
-      ignoreIfUnused: true, // sometimes before opening first browser window,
-                            // sometimes before first paint
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1546838
-      path: "ProfD:xulstore/data.mdb",
-      condition: WIN,
-      read: 1,
-    },
-  ],
-
-  // We reach this phase right after showing the first browser window.
-  // This means that any I/O at this point delayed first paint.
-  "before first paint": [
-    { // bug 1541226
-      path: "ProfD:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545119
-      path: "OldUpdRootD:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1446012
-      path: "UpdRootD:updates/0/update.status",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "ProfD:pluginreg.dat",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "ProfD:pluginreg.dat.tmp",
-      stat: 1,
-      write: 64,
-      close: 1,
-    },
-    { // bug 1545123
-      path: "ProfD:plugins",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "APlugns:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "UserPlugins.parent:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "UserPlugins:",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "ProfD:plugins/nptest.dll",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "ProfD:plugins/npsecondtest.dll",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "ProfD:plugins/npthirdtest.dll",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1545123
-      path: "ProfD:plugins/npswftest.dll",
-      condition: WIN,
-      stat: 1,
-    },
-    {
-      path: "XREAppFeat:formautofill@mozilla.org.xpi",
-      condition: !WIN,
-      stat: 1,
-      close: 1,
-    },
-    { // bug 1545167
-      path: "/etc/mime.types",
-      condition: LINUX,
-      read: 1,
-      close: 1,
-    },
-    { // We only hit this for new profiles.
-      path: "XREAppDist:distribution.ini",
-      condition: WIN,
-      stat: 1,
-    },
-    {
-      path: "*WindowsApps/microsoft.windowscommunicationsapps*",
-      condition: WIN,
-      ignoreIfUnused: true,
-      stat: 3,
-    },
-    { // bug 1545139
-      path: "*Fonts/StaticCache.dat",
-      condition: WIN,
-      ignoreIfUnused: true, // Only on Win7
-      read: 1,
-    },
-    { // bug 1541246
-      path: "UAppData:",
-      ignoreIfUnused: true, // sometimes before opening first browser window,
-                            // sometimes before first paint
-      condition: WIN,
-      stat: 1,
-    },
-    { // Not in packaged builds; useful for artifact builds.
-      path: "GreD:ScalarArtifactDefinitions.json",
-      condition: WIN && !AppConstants.MOZILLA_OFFICIAL,
-      stat: 1,
-    },
-    { // Not in packaged builds; useful for artifact builds.
-      path: "GreD:EventArtifactDefinitions.json",
-      condition: WIN && !AppConstants.MOZILLA_OFFICIAL,
-      stat: 1,
-    },
-    { // bug 1546838
-      path: "ProfD:xulstore/data.mdb",
-      condition: MAC,
-      write: 3,
-    },
-    { // bug 1543090
-      path: "GreD:omni.ja",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1543090
-      path: "XCurProcD:omni.ja",
-      condition: WIN,
-      stat: 2,
-    },
-  ],
-
-  // We are at this phase once we are ready to handle user events.
-  // Any IO at this phase or before gets in the way of the user
-  // interacting with the first browser window.
-  "before handling user events": [
-    {
-      path: "GreD:update.test",
-      ignoreIfUnused: true,
-      condition: LINUX,
-      close: 1,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:cert9.db",
-      condition: WIN,
-      read: 2,
-      stat: 2,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:cert9.db",
-      condition: WIN,
-      ignoreIfUnused: true, // if canonicalize(ProfD) == ProfD, we'll use the previous entry.
-      canonicalize: true,
-      stat: 2,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:cert9.db-journal",
-      condition: WIN,
-      canonicalize: true,
-      stat: 2,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:cert9.db-wal",
-      condition: WIN,
-      canonicalize: true,
-      stat: 2,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:pkcs11.txt",
-      condition: WIN,
-      read: 2,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:key4.db",
-      condition: WIN,
-      read: 2,
-      stat: 2,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:key4.db",
-      condition: WIN,
-      ignoreIfUnused: true, // if canonicalize(ProfD) == ProfD, we'll use the previous entry.
-      canonicalize: true,
-      stat: 2,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:key4.db-journal",
-      condition: WIN,
-      canonicalize: true,
-      stat: 5,
-    },
-    { // bug 1370516 - NSS should be initialized off main thread.
-      path: "ProfD:key4.db-wal",
-      condition: WIN,
-      canonicalize: true,
-      stat: 5,
-    },
-    {
-      path: "XREAppFeat:webcompat-reporter@mozilla.org.xpi",
-      condition: !WIN,
-      ignoreIfUnused: true,
-      stat: 1,
-      close: 1,
-    },
-    { // bug 1003968
-      path: "XREAppDist:searchplugins",
-      condition: WIN,
-      stat: 1,
-    },
-    {
-      path: "XCurProcD:extensions",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1543090
-      path: "GreD:omni.ja",
-      condition: WIN,
-      stat: 1,
-    },
-    { // bug 1543090
-      path: "XCurProcD:omni.ja",
-      condition: WIN,
-      stat: 2,
-    },
-  ],
-
-  // Things that are expected to be completely out of the startup path
-  // and loaded lazily when used for the first time by the user should
-  // be blacklisted here.
-  "before becoming idle": [
-    {
-      path: "XREAppFeat:screenshots@mozilla.org.xpi",
-      ignoreIfUnused: true,
-      close: 1,
-    },
-    {
-      path: "XREAppFeat:webcompat-reporter@mozilla.org.xpi",
-      ignoreIfUnused: true,
-      stat: 1,
-      close: 1,
-    },
-    { // bug 1391590
-      path: "ProfD:places.sqlite-journal",
-      ignoreIfUnused: true,
-      fsync: 1,
-      stat: 4,
-      write: 2,
-    },
-    { // bug 1391590
-      path: "ProfD:places.sqlite-wal",
-      ignoreIfUnused: true,
-      stat: 4,
-      fsync: 3,
-      write: 148,
-    },
-    { // bug 1391590
-      path: "ProfD:places.sqlite-shm",
-      condition: WIN,
-      ignoreIfUnused: true,
-      stat: 1,
-    },
-    { // bug 1391590
-      path: "ProfD:places.sqlite",
-      ignoreIfUnused: true,
-      fsync: 2,
-      read: 1,
-      stat: 3,
-      write: 1310,
-    },
-    { // bug 1391590
-      path: "ProfD:favicons.sqlite-journal",
-      ignoreIfUnused: true,
-      fsync: 2,
-      stat: 7,
-      write: 7,
-    },
-    { // bug 1391590
-      path: "ProfD:favicons.sqlite-wal",
-      ignoreIfUnused: true,
-      fsync: 2,
-      stat: 7,
-      write: 15,
-    },
-    { // bug 1391590
-      path: "ProfD:favicons.sqlite-shm",
-      condition: WIN,
-      ignoreIfUnused: true,
-      stat: 2,
-    },
-    { // bug 1391590
-      path: "ProfD:favicons.sqlite",
-      ignoreIfUnused: true,
-      fsync: 3,
-      read: 4,
-      stat: 4,
-      write: 1300,
-    },
-    {
-      path: "ProfD:key4.db-journal",
-      condition: WIN,
-      canonicalize: true,
-      stat: 2,
-    },
-    {
-      path: "ProfD:key4.db-wal",
-      condition: WIN,
-      canonicalize: true,
-      stat: 2,
-    },
-    {
-      path: "ProfD:",
-      condition: WIN,
-      ignoreIfUnused: true,
-      stat: 3,
-    },
-    { // bug 1543090
-      path: "XCurProcD:omni.ja",
-      condition: WIN,
-      stat: 7,
-    },
-  ],
-};
-
-for (let name of ["d3d11layers", "d3d9video", "glcontext", "d3d11video", "wmfvpxvideo"]) {
-  startupPhases["before first paint"].push({
-    path: `ProfD:${name}.guard`,
-    ignoreIfUnused: true,
-    stat: 1,
-  });
-}
-
-function expandWhitelistPath(path, canonicalize = false) {
-  if (path.includes(":")) {
-    let [prefix, suffix] = path.split(":");
-    let [key, property] = prefix.split(".");
-    let dir = Services.dirsvc.get(key, Ci.nsIFile);
-    if (property) {
-      dir = dir[property];
-    }
-
-    if (canonicalize) {
-      path = dir.QueryInterface(Ci.nsILocalFileWin).canonicalPath;
-    } else {
-      // Resolve symLinks.
-      let dirPath = dir.path;
-      while (dir && !dir.isSymlink()) {
-        dir = dir.parent;
-      }
-      if (dir) {
-        dirPath = dirPath.replace(dir.path, dir.target);
-      }
-
-      path = dirPath;
-    }
-
-    if (suffix) {
-      path += "/" + suffix;
-    }
-  }
-  if (AppConstants.platform == "win") {
-    path = path.replace(/\//g, "\\");
-  }
-  return path;
-}
-
-function getStackFromProfile(profile, stack) {
-  const stackPrefixCol = profile.stackTable.schema.prefix;
-  const stackFrameCol = profile.stackTable.schema.frame;
-  const frameLocationCol = profile.frameTable.schema.location;
-
-  let result = [];
-  while (stack) {
-    let sp = profile.stackTable.data[stack];
-    let frame = profile.frameTable.data[sp[stackFrameCol]];
-    stack = sp[stackPrefixCol];
-    frame = profile.stringTable[frame[frameLocationCol]];
-    if (frame != "js::RunScript" && !frame.startsWith("next (self-hosted:")) {
-      result.push(frame);
-    }
-  }
-  return result;
-}
-
-function pathMatches(path, filename) {
-  path = path.toLowerCase();
-  return path == filename || // Full match
-    // Wildcard on both sides of the path
-    (path.startsWith("*") && path.endsWith("*") &&
-     filename.includes(path.slice(1, -1))) ||
-    // Wildcard suffix
-    (path.endsWith("*") && filename.startsWith(path.slice(0, -1))) ||
-    // Wildcard prefix
-    (path.startsWith("*") && filename.endsWith(path.slice(1)));
-}
-
-add_task(async function() {
-  if (!AppConstants.NIGHTLY_BUILD && !AppConstants.MOZ_DEV_EDITION && !AppConstants.DEBUG) {
-    ok(!("@mozilla.org/test/startuprecorder;1" in Cc),
-       "the startup recorder component shouldn't exist in this non-nightly/non-devedition/" +
-       "non-debug build.");
-    return;
-  }
-
-  {
-    let omniJa = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
-    omniJa.append("omni.ja");
-    if (!omniJa.exists()) {
-      ok(false, "This test requires a packaged build, " +
-                "run 'mach package' and then use --appname=dist");
-      return;
-    }
-  }
-
-  let startupRecorder = Cc["@mozilla.org/test/startuprecorder;1"].getService().wrappedJSObject;
-  await startupRecorder.done;
-
-  // Add system add-ons to the whitelist dynamically.
-  // They should go in the omni.ja file (bug 1357205).
-  {
-    let addons = await AddonManager.getAddonsByTypes(["extension"]);
-    for (let addon of addons) {
-      if (addon.isSystem) {
-        startupPhases["before opening first browser window"].push({
-          path: `XREAppFeat:${addon.id}.xpi`,
-          stat: 3,
-          close: 2,
-        });
-        startupPhases["before handling user events"].push({
-          path: `XREAppFeat:${addon.id}.xpi`,
-          condition: WIN,
-          stat: 2,
-        });
-      }
-    }
-  }
-
-  // Check for main thread I/O markers in the startup profile.
-  let profile = startupRecorder.data.profile.threads[0];
-
-  let phases = {};
-  {
-    const nameCol = profile.markers.schema.name;
-    const dataCol = profile.markers.schema.data;
-
-    let markersForCurrentPhase = [];
-
-    for (let m of profile.markers.data) {
-      let markerName = profile.stringTable[m[nameCol]];
-      if (markerName.startsWith("startupRecorder:")) {
-        phases[markerName.split("startupRecorder:")[1]] = markersForCurrentPhase;
-        markersForCurrentPhase = [];
-        continue;
-      }
-
-      if (markerName != "FileIO")
-        continue;
-
-      let markerData = m[dataCol];
-      if (markerData.source == "sqlite-mainthread") {
-        continue;
-      }
-
-      let samples = markerData.stack.samples;
-      let stack = samples.data[0][samples.schema.stack];
-      markersForCurrentPhase.push({operation: markerData.operation,
-                                   filename: markerData.filename,
-                                   source: markerData.source,
-                                   stackId: stack});
-    }
-  }
-
-  for (let phase in startupPhases) {
-    startupPhases[phase] =
-      startupPhases[phase].filter(entry => !("condition" in entry) || entry.condition);
-    startupPhases[phase].forEach(entry => {
-      entry.path = expandWhitelistPath(entry.path, entry.canonicalize);
-    });
-  }
-
-  let tmpPath = expandWhitelistPath(MAC ? "TmpD:" : "/dev/shm").toLowerCase();
-  let shouldPass = true;
-  for (let phase in phases) {
-    let whitelist = startupPhases[phase];
-    info(`whitelisted paths ${phase}:\n` +
-         whitelist.map(e => {
-           let operations = Object.keys(e).filter(k => k != "path")
-                                  .map(k => `${k}: ${e[k]}`);
-           return `  ${e.path} - ${operations.join(", ")}`;
-         }).join("\n"));
-
-    let markers = phases[phase];
-    for (let marker of markers) {
-      if (marker.operation == "create/open") {
-        // TODO: handle these I/O markers once they are supported on
-        // non-Windows platforms.
-        continue;
-      }
-
-      // Convert to lower case before comparing because the OS X test slaves
-      // have the 'Firefox' folder in 'Library/Application Support' created
-      // as 'firefox' for some reason.
-      let filename = marker.filename.toLowerCase();
-
-      if (!filename) {
-        // We are still missing the filename on some mainthreadio markers,
-        // these markers are currently useless for the purpose of this test.
-        continue;
-      }
-
-      if (!WIN) {
-        if (filename == "/dev/urandom") {
-          continue;
-        }
-
-        // Ignore I/O due to IPC. This doesn't really touch the disk.
-        if (filename.startsWith(tmpPath + "/org.chromium.")) {
-          continue;
-        }
-      }
-
-      let expected = false;
-      for (let entry of whitelist) {
-        if (pathMatches(entry.path, filename)) {
-          entry[marker.operation] = (entry[marker.operation] || 0) - 1;
-          entry._used = true;
-          expected = true;
-          break;
-        }
-      }
-      if (!expected) {
-        record(false,
-               `unexpected ${marker.operation} on ${marker.filename} ${phase}`,
-               undefined,
-               "  " + getStackFromProfile(profile, marker.stackId).join("\n  "));
-        shouldPass = false;
-      }
-      info(`(${marker.source}) ${marker.operation} - ${marker.filename}`);
-      if (kDumpAllStacks) {
-        info(getStackFromProfile(profile, marker.stackId).map(f => "  " + f)
-                                                         .join("\n"));
-      }
-    }
-
-    for (let entry of whitelist) {
-      for (let op in entry) {
-        if (["path", "condition", "canonicalize", "ignoreIfUnused", "_used"].includes(op)) {
-          continue;
-        }
-        let message = `${op} on ${entry.path} `;
-        if (entry[op] == 0) {
-          message += "as many times as expected";
-        } else if (entry[op] > 0) {
-          message += `allowed ${entry[op]} more times`;
-        } else {
-          message += `${entry[op] * -1} more times than expected`;
-        }
-        ok(entry[op] >= 0, `${message} ${phase}`);
-      }
-      if (!("_used" in entry) && !entry.ignoreIfUnused) {
-        ok(false, `unused whitelist entry ${phase}: ${entry.path}`);
-      }
-    }
-  }
-
-  if (shouldPass) {
-    ok(shouldPass, "No unexpected main thread I/O during startup");
-  } else {
-    const filename = "startup-mainthreadio-profile.json";
-    let path = Cc["@mozilla.org/process/environment;1"]
-                 .getService(Ci.nsIEnvironment)
-                 .get("MOZ_UPLOAD_DIR");
-    let encoder = new TextEncoder();
-    let profilePath = OS.Path.join(path, filename);
-    await OS.File.writeAtomic(profilePath,
-                              encoder.encode(JSON.stringify(startupRecorder.data.profile)));
-    ok(false,
-       "Found some unexpected main thread I/O during startup; profile uploaded in " +
-       filename);
-  }
-});
deleted file mode 100644
--- a/browser/base/content/test/performance/io/browser.ini
+++ /dev/null
@@ -1,20 +0,0 @@
-[DEFAULT]
-# Currently disabled on debug due to debug-only failures, see bug 1549723.
-skip-if = debug
-# to avoid overhead when running the browser normally, startupRecorder.js will
-# do almost nothing unless browser.startup.record is true.
-# gfx.canvas.willReadFrequently.enable is just an optimization, but needs to be
-# set during early startup to have an impact as a canvas will be used by
-# startupRecorder.js
-prefs =
-  # Skip migration work in BG__migrateUI for browser_startup.js since it isn't
-  # representative of common startup, and triggers Places I/O.
-  browser.migration.version=9999999
-  browser.startup.record=true
-  gfx.canvas.willReadFrequently.enable=true
-environment =
-  MOZ_PROFILER_STARTUP=1
-  MOZ_PROFILER_STARTUP_FEATURES=js,mainthreadio
-  MOZ_PROFILER_STARTUP_ENTRIES=10000000
-[../browser_startup_mainthreadio.js]
-[../browser_startup_content_mainthreadio.js]
--- a/browser/base/content/test/static/browser_all_files_referenced.js
+++ b/browser/base/content/test/static/browser_all_files_referenced.js
@@ -170,18 +170,16 @@ var whitelist = [
   {file: "chrome://devtools/skin/images/aboutdebugging-firefox-release.svg",
    isFromDevTools: true},
   {file: "chrome://devtools/skin/images/next.svg", isFromDevTools: true},
   // Bug 1526672
   {file: "resource://app/localization/en-US/browser/touchbar/touchbar.ftl",
    platforms: ["linux", "win"]},
   // Referenced by the webcompat system addon for localization
   {file: "resource://gre/localization/en-US/toolkit/about/aboutCompat.ftl"},
-  // Bug 1547016 activity-stream conditionally/dynamically references
-  {file: "resource://app/localization/en-US/browser/branding/brandings.ftl"},
 ];
 
 if (!AppConstants.MOZ_NEW_NOTIFICATION_STORE) {
   // kvstore.jsm wraps the API in nsIKeyValue.idl in a more ergonomic API
   // It landed in bug 1490496, and we expect to start using it shortly.
   whitelist.push({file: "resource://gre/modules/kvstore.jsm"});
 }
 
--- a/browser/base/moz.build
+++ b/browser/base/moz.build
@@ -29,17 +29,16 @@ BROWSER_CHROME_MANIFESTS += [
     'content/test/historySwipeAnimation/browser.ini',
     'content/test/keyboard/browser.ini',
     'content/test/menubar/browser.ini',
     'content/test/metaTags/browser.ini',
     'content/test/pageActions/browser.ini',
     'content/test/pageinfo/browser.ini',
     'content/test/performance/browser.ini',
     'content/test/performance/hidpi/browser.ini',
-    'content/test/performance/io/browser.ini',
     'content/test/performance/legacyurlbar/browser.ini',
     'content/test/performance/lowdpi/browser.ini',
     'content/test/permissions/browser.ini',
     'content/test/plugins/browser.ini',
     'content/test/popupNotifications/browser.ini',
     'content/test/popups/browser.ini',
     'content/test/referrer/browser.ini',
     'content/test/sanitize/browser.ini',
--- a/browser/components/customizableui/PanelMultiView.jsm
+++ b/browser/components/customizableui/PanelMultiView.jsm
@@ -1596,49 +1596,69 @@ var PanelView = class extends Associated
     // check this for keys we potentially care about, not *all* keys.
     let tabOnly = () => {
       // We use the real focus rather than this.selectedElement because focus
       // might have been moved without keyboard navigation (e.g. mouse click)
       // and this.selectedElement is only updated for keyboard navigation.
       return focus && this._isNavigableWithTabOnly(focus);
     };
 
+    // If a context menu is open, we must let it handle all keys.
+    // Normally, this just happens, but because we have a capturing window
+    // keydown listener, our listener takes precedence.
+    // Again, we only want to do this check on demand for performance.
+    let isContextMenuOpen = () => {
+      if (!focus) {
+        return false;
+      }
+      let contextNode = focus.closest("[context]");
+      if (!contextNode) {
+        return false;
+      }
+      let context = contextNode.getAttribute("context");
+      let popup = this.document.getElementById(context);
+      return popup && popup.state == "open";
+    };
+
     let keyCode = event.code;
     switch (keyCode) {
       case "ArrowDown":
       case "ArrowUp":
         if (tabOnly()) {
           break;
         }
         // Fall-through...
       case "Tab": {
+        if (isContextMenuOpen()) {
+          break;
+        }
         stop();
         let isDown = (keyCode == "ArrowDown") ||
                      (keyCode == "Tab" && !event.shiftKey);
         let button = this.moveSelection(isDown, keyCode != "Tab");
         Services.focus.setFocus(button, Services.focus.FLAG_BYKEY);
         break;
       }
       case "Home":
-        if (tabOnly()) {
+        if (tabOnly() || isContextMenuOpen()) {
           break;
         }
         stop();
         this.focusFirstNavigableElement(true);
         break;
       case "End":
-        if (tabOnly()) {
+        if (tabOnly() || isContextMenuOpen()) {
           break;
         }
         stop();
         this.focusLastNavigableElement(true);
         break;
       case "ArrowLeft":
       case "ArrowRight": {
-        if (tabOnly()) {
+        if (tabOnly() || isContextMenuOpen()) {
           break;
         }
         stop();
         if ((!this.window.RTL_UI && keyCode == "ArrowLeft") ||
             (this.window.RTL_UI && keyCode == "ArrowRight")) {
           this.node.panelMultiView.goBack();
           break;
         }
@@ -1648,17 +1668,17 @@ var PanelView = class extends Associated
         if (!button || !button.classList.contains("subviewbutton-nav")) {
           break;
         }
         // Fall-through...
       }
       case "Space":
       case "NumpadEnter":
       case "Enter": {
-        if (tabOnly()) {
+        if (tabOnly() || isContextMenuOpen()) {
           break;
         }
         let button = this.selectedElement;
         if (!button)
           break;
         stop();
 
         this._doingKeyboardActivation = true;
--- a/browser/components/customizableui/test/browser_PanelMultiView_keyboard.js
+++ b/browser/components/customizableui/test/browser_PanelMultiView_keyboard.js
@@ -8,16 +8,17 @@
  */
 
 const {PanelMultiView} = ChromeUtils.import("resource:///modules/PanelMultiView.jsm");
 
 let gAnchor;
 let gPanel;
 let gPanelMultiView;
 let gMainView;
+let gMainContext;
 let gMainButton1;
 let gMainMenulist;
 let gMainTextbox;
 let gMainButton2;
 let gMainButton3;
 let gMainTabOrder;
 let gMainArrowOrder;
 let gSubView;
@@ -69,21 +70,26 @@ add_task(async function setup() {
   navBar.appendChild(gPanel);
   gPanelMultiView = document.createXULElement("panelmultiview");
   gPanelMultiView.setAttribute("mainViewId", "testMainView");
   gPanel.appendChild(gPanelMultiView);
 
   gMainView = document.createXULElement("panelview");
   gMainView.id = "testMainView";
   gPanelMultiView.appendChild(gMainView);
+  gMainContext = document.createXULElement("menupopup");
+  gMainContext.id = "gMainContext";
+  gMainView.appendChild(gMainContext);
+  gMainContext.appendChild(document.createXULElement("menuitem"));
   gMainButton1 = document.createXULElement("button");
   gMainButton1.id = "gMainButton1";
   gMainView.appendChild(gMainButton1);
   // We use this for anchoring subviews, so it must have a label.
   gMainButton1.setAttribute("label", "gMainButton1");
+  gMainButton1.setAttribute("context", "gMainContext");
   gMainMenulist = document.createXULElement("menulist");
   gMainMenulist.id = "gMainMenulist";
   gMainView.appendChild(gMainMenulist);
   let menuPopup = document.createXULElement("menupopup");
   gMainMenulist.appendChild(menuPopup);
   let item = document.createXULElement("menuitem");
   item.setAttribute("value", "1");
   item.setAttribute("selected", "true");
@@ -328,8 +334,32 @@ add_task(async function testTabArrowsBro
   is(textarea.selectionStart, 0, "selectionStart 0 after ArrowLeft");
   is(doc.activeElement, textarea, "textarea still focused");
   let docButton = doc.getElementById("docButton");
   expectFocusAfterKey("Tab", docButton);
   // Make sure tab leaves the document and reaches the Back button.
   expectFocusAfterKey("Tab", backButton);
   await hidePopup();
 });
+
+// Test that the arrow keys aren't overridden in context menus.
+add_task(async function testArowsContext() {
+  await openPopup();
+  await expectFocusAfterKey("ArrowDown", gMainButton1);
+  let shown = BrowserTestUtils.waitForEvent(gMainContext, "popupshown");
+  // There's no cross-platform way to open a context menu from the keyboard.
+  gMainContext.openPopup();
+  await shown;
+  let item = gMainContext.children[0];
+  ok(!item.getAttribute("_moz-menuactive"),
+     "First context menu item initially inactive");
+  let active = BrowserTestUtils.waitForEvent(item, "DOMMenuItemActive");
+  EventUtils.synthesizeKey("KEY_ArrowDown");
+  await active;
+  ok(item.getAttribute("_moz-menuactive"),
+     "First context menu item active after ArrowDown");
+  is(document.activeElement, gMainButton1,
+     "gMainButton1 still focused after ArrowDown");
+  let hidden = BrowserTestUtils.waitForEvent(gMainContext, "popuphidden");
+  gMainContext.hidePopup();
+  await hidden;
+  await hidePopup();
+});
--- a/browser/components/extensions/parent/ext-chrome-settings-overrides.js
+++ b/browser/components/extensions/parent/ext-chrome-settings-overrides.js
@@ -186,17 +186,17 @@ this.chrome_settings_overrides = class e
     if (homepageUrl) {
       let inControl;
       if (extension.startupReason == "ADDON_INSTALL" ||
           extension.startupReason == "ADDON_ENABLE") {
         inControl = await ExtensionPreferencesManager.setSetting(
           extension.id, "homepage_override", homepageUrl);
       } else {
         let item = await ExtensionPreferencesManager.getSetting("homepage_override");
-        inControl = item.id == extension.id;
+        inControl = item && item.id == extension.id;
       }
       // We need to add the listener here too since onPrefsChanged won't trigger on a
       // restart (the prefs are already set).
       if (inControl) {
         Services.prefs.setBoolPref(HOMEPAGE_PRIVATE_ALLOWED, extension.privateBrowsingAllowed);
         // Also set this now as an upgraded browser will need this.
         Services.prefs.setBoolPref(HOMEPAGE_EXTENSION_CONTROLLED, true);
         if (extension.startupReason == "APP_STARTUP") {
@@ -206,26 +206,26 @@ this.chrome_settings_overrides = class e
         }
       }
 
       // We need to monitor permission change and update the preferences.
       // eslint-disable-next-line mozilla/balanced-listeners
       extension.on("add-permissions", async (ignoreEvent, permissions) => {
         if (permissions.permissions.includes("internal:privateBrowsingAllowed")) {
           let item = await ExtensionPreferencesManager.getSetting("homepage_override");
-          if (item.id == extension.id) {
+          if (item && item.id == extension.id) {
             Services.prefs.setBoolPref(HOMEPAGE_PRIVATE_ALLOWED, true);
           }
         }
       });
       // eslint-disable-next-line mozilla/balanced-listeners
       extension.on("remove-permissions", async (ignoreEvent, permissions) => {
         if (permissions.permissions.includes("internal:privateBrowsingAllowed")) {
           let item = await ExtensionPreferencesManager.getSetting("homepage_override");
-          if (item.id == extension.id) {
+          if (item && item.id == extension.id) {
             Services.prefs.setBoolPref(HOMEPAGE_PRIVATE_ALLOWED, false);
           }
         }
       });
 
       extension.callOnClose({
         close: () => {
           if (extension.shutdownReason == "ADDON_DISABLE") {
--- a/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_update.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_update.js
@@ -1,30 +1,30 @@
 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set sts=2 sw=2 et tw=80: */
 "use strict";
 
 const {AddonTestUtils} = ChromeUtils.import("resource://testing-common/AddonTestUtils.jsm");
 const {HomePage} = ChromeUtils.import("resource:///modules/HomePage.jsm");
 
-const {
-  createAppInfo,
-  promiseShutdownManager,
-  promiseStartupManager,
-} = AddonTestUtils;
-
 AddonTestUtils.init(this);
 AddonTestUtils.overrideCertDB();
 
-createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
+AddonTestUtils.createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
+
+add_task(async function setup() {
+  await AddonTestUtils.promiseStartupManager();
+});
 
 add_task(async function test_overrides_update_removal() {
   /* This tests the scenario where the manifest key for homepage and/or
    * search_provider are removed between updates and therefore the
-   * settings are expected to revert. */
+   * settings are expected to revert.  It also tests that an extension
+   * can make a builtin extension the default extension without user
+   * interaction.  */
 
   const EXTENSION_ID = "test_overrides_update@tests.mozilla.org";
   const HOMEPAGE_URI = "webext-homepage-1.html";
 
   const HOMEPAGE_URL_PREF = "browser.startup.homepage";
 
   function promisePrefChanged(value) {
     return new Promise((resolve, reject) => {
@@ -32,17 +32,16 @@ add_task(async function test_overrides_u
         if (HomePage.get().endsWith(value)) {
           Services.prefs.removeObserver(HOMEPAGE_URL_PREF, observer);
           resolve();
         }
       });
     });
   }
 
-  await promiseStartupManager();
 
   let extensionInfo = {
     useAddonManager: "permanent",
     manifest: {
       "version": "1.0",
       "applications": {
         "gecko": {
           "id": EXTENSION_ID,
@@ -57,28 +56,30 @@ add_task(async function test_overrides_u
         },
       },
     },
   };
   let extension = ExtensionTestUtils.loadExtension(extensionInfo);
 
   let defaultHomepageURL = HomePage.get();
   let defaultEngineName = (await Services.search.getDefault()).name;
+  ok(defaultEngineName !== "DuckDuckGo",
+     "Default engine is not DuckDuckGo.");
 
   let prefPromise = promisePrefChanged(HOMEPAGE_URI);
   await extension.startup();
   await AddonTestUtils.waitForSearchProviderStartup(extension);
   await prefPromise;
 
   equal(extension.version, "1.0", "The installed addon has the expected version.");
   ok(HomePage.get().endsWith(HOMEPAGE_URI),
      "Home page url is overridden by the extension.");
   equal((await Services.search.getDefault()).name,
         "DuckDuckGo",
-        "Default engine is overridden by the extension");
+        "Builtin default engine was set default by extension");
 
   extensionInfo.manifest = {
     "version": "2.0",
     "applications": {
       "gecko": {
         "id": EXTENSION_ID,
       },
     },
@@ -92,11 +93,80 @@ add_task(async function test_overrides_u
   equal(HomePage.get(),
         defaultHomepageURL,
         "Home page url reverted to the default after update.");
   equal((await Services.search.getDefault()).name,
         defaultEngineName,
         "Default engine reverted to the default after update.");
 
   await extension.unload();
+});
 
-  await promiseShutdownManager();
+add_task(async function test_overrides_update_adding() {
+  /* This tests the scenario where an addon adds support for
+   * a homepage or search service when upgrading. Neither
+   * should override existing entries for those when added
+   * in an upgrade. Also, a search_provider being added
+   * with is_default should not prompt the user or override
+   * the current default engine. */
+
+  const EXTENSION_ID = "test_overrides_update@tests.mozilla.org";
+  const HOMEPAGE_URI = "webext-homepage-1.html";
+
+  let extensionInfo = {
+    useAddonManager: "permanent",
+    manifest: {
+      "version": "1.0",
+      "applications": {
+        "gecko": {
+          "id": EXTENSION_ID,
+        },
+      },
+    },
+  };
+  let extension = ExtensionTestUtils.loadExtension(extensionInfo);
+
+  let defaultHomepageURL = HomePage.get();
+  let defaultEngineName = (await Services.search.getDefault()).name;
+  ok(defaultEngineName !== "DuckDuckGo",
+     "Home page url is not DuckDuckGo.");
+
+  await extension.startup();
+
+  equal(extension.version, "1.0", "The installed addon has the expected version.");
+  equal(HomePage.get(),
+        defaultHomepageURL,
+        "Home page url is the default after startup.");
+  equal((await Services.search.getDefault()).name,
+        defaultEngineName,
+        "Default engine is the default after startup.");
+
+  extensionInfo.manifest = {
+    "version": "2.0",
+    "applications": {
+      "gecko": {
+        "id": EXTENSION_ID,
+      },
+    },
+    "chrome_settings_overrides": {
+      "homepage": HOMEPAGE_URI,
+      "search_provider": {
+        "name": "DuckDuckGo",
+        "search_url": "https://example.com/?q={searchTerms}",
+        "is_default": true,
+      },
+    },
+  };
+
+  await extension.upgrade(extensionInfo);
+  await AddonTestUtils.waitForSearchProviderStartup(extension);
+
+  equal(extension.version, "2.0", "The updated addon has the expected version.");
+  equal(HomePage.get(), defaultHomepageURL,
+        "Home page url is not overridden by the extension during upgrade.");
+  // An upgraded extension adding a search engine cannot override
+  // the default engine.
+  equal((await Services.search.getDefault()).name,
+        defaultEngineName,
+        "Default engine is still the default after startup.");
+
+  await extension.unload();
 });
--- a/browser/components/newtab/bin/render-activity-stream-html.js
+++ b/browser/components/newtab/bin/render-activity-stream-html.js
@@ -95,19 +95,19 @@ function templateHTML(options, html) {
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>${options.strings.newtab_page_title}</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="${options.baseUrl}css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root">${isPrerendered ? html : "<!-- Regular React Rendering -->"}</div>
-    <div id="footer-asrouter-container"></div>${options.noscripts ? "" : scriptRender}
+    <div id="footer-asrouter-container" role="presentation"></div>${options.noscripts ? "" : scriptRender}
   </body>
 </html>
 `;
 }
 
 /**
  * templateJs - Generates a js file that passes the initial state of the prerendered
  * DOM to the React version. This is necessary to ensure the checksum matches when
--- a/browser/components/newtab/common/Actions.jsm
+++ b/browser/components/newtab/common/Actions.jsm
@@ -38,16 +38,17 @@ for (const type of [
   "DELETE_FROM_POCKET",
   "DELETE_HISTORY_URL",
   "DIALOG_CANCEL",
   "DIALOG_OPEN",
   "DISCOVERY_STREAM_CONFIG_CHANGE",
   "DISCOVERY_STREAM_CONFIG_SETUP",
   "DISCOVERY_STREAM_CONFIG_SET_VALUE",
   "DISCOVERY_STREAM_FEEDS_UPDATE",
+  "DISCOVERY_STREAM_FEED_UPDATE",
   "DISCOVERY_STREAM_IMPRESSION_STATS",
   "DISCOVERY_STREAM_LAYOUT_RESET",
   "DISCOVERY_STREAM_LAYOUT_UPDATE",
   "DISCOVERY_STREAM_LINK_BLOCKED",
   "DISCOVERY_STREAM_LOADED_CONTENT",
   "DISCOVERY_STREAM_OPT_OUT",
   "DISCOVERY_STREAM_SPOCS_CAPS",
   "DISCOVERY_STREAM_SPOCS_ENDPOINT",
--- a/browser/components/newtab/common/Reducers.jsm
+++ b/browser/components/newtab/common/Reducers.jsm
@@ -490,20 +490,32 @@ function DiscoveryStream(prevState = INI
       return {...prevState, lastUpdated: action.data.lastUpdated || null, layout: action.data.layout || []};
     case at.DISCOVERY_STREAM_LAYOUT_RESET:
       return {...INITIAL_STATE.DiscoveryStream, config: prevState.config};
     case at.DISCOVERY_STREAM_FEEDS_UPDATE:
       return {
         ...prevState,
         feeds: {
           ...prevState.feeds,
-          data: action.data || prevState.feeds.data,
           loaded: true,
         },
       };
+    case at.DISCOVERY_STREAM_FEED_UPDATE:
+      const newData = {};
+      newData[action.data.url] = action.data.feed;
+      return {
+        ...prevState,
+        feeds: {
+          ...prevState.feeds,
+          data: {
+            ...prevState.feeds.data,
+            ...newData,
+          },
+        },
+      };
     case at.DISCOVERY_STREAM_SPOCS_CAPS:
       return {
         ...prevState,
         spocs: {
           ...prevState.spocs,
           frequency_caps: [...prevState.spocs.frequency_caps, ...action.data],
         },
       };
--- a/browser/components/newtab/content-src/asrouter/asrouter-content.jsx
+++ b/browser/components/newtab/content-src/asrouter/asrouter-content.jsx
@@ -291,16 +291,17 @@ export class ASRouterUISurface extends R
     }
     return null;
   }
 
   renderTrailhead() {
     const {message} = this.state;
     if (message.template === "trailhead") {
       return (<Trailhead
+        document={this.props.document}
         message={message}
         onAction={ASRouterUtils.executeAction}
         onDoneButton={this.dismissBundle(this.state.bundle.bundle)}
         sendUserActionTelemetry={this.sendUserActionTelemetry}
         dispatch={this.props.dispatch}
         fxaEndpoint={this.props.fxaEndpoint} />);
     }
     return null;
--- a/browser/components/newtab/content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx
+++ b/browser/components/newtab/content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx
@@ -21,17 +21,20 @@ export class ModalOverlayWrapper extends
     this.props.document.removeEventListener("keydown", this.onKeyDown);
     this.props.document.body.classList.remove("modal-open");
   }
 
   render() {
     const {props} = this;
     return (<React.Fragment>
       <div className="modalOverlayOuter active" onClick={props.onClose} role="presentation" />
-      <div className={`modalOverlayInner active ${props.innerClassName || ""}`}>
+      <div className={`modalOverlayInner active ${props.innerClassName || ""}`}
+        aria-labelledby={props.headerId}
+        id={props.id}
+        role="dialog">
         {props.children}
       </div>
     </React.Fragment>);
   }
 }
 
 ModalOverlayWrapper.defaultProps = {document: global.document};
 
--- a/browser/components/newtab/content-src/asrouter/templates/StartupOverlay/StartupOverlay.jsx
+++ b/browser/components/newtab/content-src/asrouter/templates/StartupOverlay/StartupOverlay.jsx
@@ -8,31 +8,33 @@ export class _StartupOverlay extends Rea
     super(props);
     this.onInputChange = this.onInputChange.bind(this);
     this.onSubmit = this.onSubmit.bind(this);
     this.clickSkip = this.clickSkip.bind(this);
     this.initScene = this.initScene.bind(this);
     this.removeOverlay = this.removeOverlay.bind(this);
     this.onInputInvalid = this.onInputInvalid.bind(this);
 
+    this.utmParams = "utm_source=activity-stream&utm_campaign=firstrun&utm_medium=referral&utm_term=trailhead-control";
+
     this.state = {
       emailInput: "",
       overlayRemoved: false,
       flowId: "",
       flowBeginTime: 0,
     };
     this.didFetch = false;
   }
 
   async componentWillUpdate() {
     if (this.props.fxa_endpoint && !this.didFetch) {
       try {
         this.didFetch = true;
-        const fxaParams = "entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&form_type=email";
-        const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}`, {credentials: "omit"});
+        const fxaParams = "entrypoint=activity-stream-firstrun&form_type=email";
+        const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}&${this.utmParams}`, {credentials: "omit"});
         if (response.status === 200) {
           const {flowId, flowBeginTime} = await response.json();
           this.setState({flowId, flowBeginTime});
         } else {
           this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: "FXA_METRICS_FETCH_ERROR", value: response.status}}));
         }
       } catch (error) {
         this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: "FXA_METRICS_ERROR"}}));
@@ -101,38 +103,40 @@ export class _StartupOverlay extends Rea
 
   render() {
     // When skipping the onboarding tour we show AS but we are still on
     // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered
     if (this.state.overlayRemoved) {
       return null;
     }
 
-    let termsLink = (<a href={`${this.props.fxa_endpoint}/legal/terms`} target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_terms_of_service" /></a>);
-    let privacyLink = (<a href={`${this.props.fxa_endpoint}/legal/privacy`} target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_privacy_notice" /></a>);
+    let termsLink = (<a href={`${this.props.fxa_endpoint}/legal/terms?${this.utmParams}`} target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_terms_of_service" /></a>);
+    let privacyLink = (<a href={`${this.props.fxa_endpoint}/legal/privacy?${this.utmParams}`} target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_privacy_notice" /></a>);
 
     return (
       <div className={`overlay-wrapper ${this.state.show ? "show" : ""}`}>
         <div className="background" />
         <div className="firstrun-scene">
           <div className="fxaccounts-container">
             <div className="firstrun-left-divider">
               <h1 className="firstrun-title"><FormattedMessage id="firstrun_title" /></h1>
               <p className="firstrun-content"><FormattedMessage id="firstrun_content" /></p>
-              <a className="firstrun-link" href="https://www.mozilla.org/firefox/features/sync/" target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_learn_more_link" /></a>
+              <a className="firstrun-link" href={`https://www.mozilla.org/firefox/features/sync/?${this.utmParams}`} target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_learn_more_link" /></a>
             </div>
             <div className="firstrun-sign-in">
               <p className="form-header"><FormattedMessage id="firstrun_form_header" /><span className="sub-header"><FormattedMessage id="firstrun_form_sub_header" /></span></p>
               <form method="get" action={this.props.fxa_endpoint} target="_blank" rel="noopener noreferrer" onSubmit={this.onSubmit}>
                 <input name="service" type="hidden" value="sync" />
                 <input name="action" type="hidden" value="email" />
                 <input name="context" type="hidden" value="fx_desktop_v3" />
                 <input name="entrypoint" type="hidden" value="activity-stream-firstrun" />
                 <input name="utm_source" type="hidden" value="activity-stream" />
                 <input name="utm_campaign" type="hidden" value="firstrun" />
+                <input name="utm_medium" type="hidden" value="referral" />
+                <input name="utm_term" type="hidden" value="trailhead-control" />
                 <input name="flow_id" type="hidden" value={this.state.flowId} />
                 <input name="flow_begin_time" type="hidden" value={this.state.flowBeginTime} />
                 <span className="error">{this.props.intl.formatMessage({id: "firstrun_invalid_input"})}</span>
                 <input className="email-input" name="email" type="email" required="true" onInvalid={this.onInputInvalid} placeholder={this.props.intl.formatMessage({id: "firstrun_email_input_placeholder"})} onChange={this.onInputChange} />
                 <div className="extra-links">
                   <FormattedMessage
                     id="firstrun_extra_legal_links"
                     values={{
--- a/browser/components/newtab/content-src/asrouter/templates/Trailhead/Trailhead.jsx
+++ b/browser/components/newtab/content-src/asrouter/templates/Trailhead/Trailhead.jsx
@@ -1,105 +1,137 @@
 import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
 import {injectIntl} from "react-intl";
 import {ModalOverlayWrapper} from "../../components/ModalOverlay/ModalOverlay";
 import {OnboardingCard} from "../OnboardingMessage/OnboardingMessage";
 import React from "react";
 
 const FLUENT_FILES = [
   "branding/brand.ftl",
+  "browser/branding/brandings.ftl",
   "browser/branding/sync-brand.ftl",
-  // These are finalized strings exposed to localizers
   "browser/newtab/onboarding.ftl",
-  // These are WIP/in-development strings that only get used if the string
-  // doesn't already exist in onboarding.ftl above
-  "trailhead.ftl",
 ];
 
+// From resource://devtools/client/shared/focus.js
+const FOCUSABLE_SELECTOR = [
+  "a[href]:not([tabindex='-1'])",
+  "button:not([disabled]):not([tabindex='-1'])",
+  "iframe:not([tabindex='-1'])",
+  "input:not([disabled]):not([tabindex='-1'])",
+  "select:not([disabled]):not([tabindex='-1'])",
+  "textarea:not([disabled]):not([tabindex='-1'])",
+  "[tabindex]:not([tabindex='-1'])",
+].join(", ");
+
 export class _Trailhead extends React.PureComponent {
   constructor(props) {
     super(props);
     this.closeModal = this.closeModal.bind(this);
     this.hideCardPanel = this.hideCardPanel.bind(this);
     this.onInputChange = this.onInputChange.bind(this);
+    this.onStartBlur = this.onStartBlur.bind(this);
     this.onSubmit = this.onSubmit.bind(this);
     this.onInputInvalid = this.onInputInvalid.bind(this);
+    this.onCardAction = this.onCardAction.bind(this);
 
     this.state = {
       emailInput: "",
       isModalOpen: true,
       showCardPanel: true,
       showCards: false,
       flowId: "",
       flowBeginTime: 0,
     };
     this.didFetch = false;
   }
 
+  get dialog() {
+    return this.props.document.getElementById("trailheadDialog");
+  }
+
   async componentWillMount() {
     FLUENT_FILES.forEach(file => {
       const link = document.head.appendChild(document.createElement("link"));
       link.href = file;
       link.rel = "localization";
     });
 
     if (this.props.fxaEndpoint && !this.didFetch) {
       try {
         this.didFetch = true;
-        const fxaParams = "entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&utm_term=trailhead&form_type=email";
-        const response = await fetch(`${this.props.fxaEndpoint}/metrics-flow?${fxaParams}`, {credentials: "omit"});
+        const url = new URL(`${this.props.fxaEndpoint}/metrics-flow?entrypoint=activity-stream-firstrun&form_type=email`);
+        this.addUtmParams(url);
+        const response = await fetch(url, {credentials: "omit"});
         if (response.status === 200) {
           const {flowId, flowBeginTime} = await response.json();
           this.setState({flowId, flowBeginTime});
         } else {
           this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: "FXA_METRICS_FETCH_ERROR", value: response.status}}));
         }
       } catch (error) {
         this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: "FXA_METRICS_ERROR"}}));
       }
     }
   }
 
   componentDidMount() {
     // We need to remove hide-main since we should show it underneath everything that has rendered
-    global.document.body.classList.remove("hide-main");
+    this.props.document.body.classList.remove("hide-main");
 
     // Add inline-onboarding class to disable fixed search header and fixed positioned settings icon
-    global.document.body.classList.add("inline-onboarding");
+    this.props.document.body.classList.add("inline-onboarding");
+
+    // The rest of the page is "hidden" when the modal is open
+    if (this.props.message.content) {
+      this.props.document.getElementById("root").setAttribute("aria-hidden", "true");
 
-    if (!this.props.message.content) {
+      // Start with focus in the email input box
+      this.dialog.querySelector("input[name=email]").focus();
+    } else {
       // No modal overlay, let the user scroll and deal them some cards.
-      global.document.body.classList.remove("welcome");
+      this.props.document.body.classList.remove("welcome");
 
       if (this.props.message.includeBundle || this.props.message.cards) {
         this.revealCards();
       }
     }
   }
 
-  componentDidUnmount() {
-    global.document.body.classList.remove("inline-onboarding");
+  componentWillUnmount() {
+    this.props.document.body.classList.remove("inline-onboarding");
   }
 
   onInputChange(e) {
     let error = e.target.previousSibling;
     this.setState({emailInput: e.target.value});
     error.classList.remove("active");
     e.target.classList.remove("invalid");
   }
 
+  onStartBlur(event) {
+    // Make sure focus stays within the dialog when tabbing from the button
+    const {dialog} = this;
+    if (event.relatedTarget &&
+        !(dialog.compareDocumentPosition(event.relatedTarget) &
+          dialog.DOCUMENT_POSITION_CONTAINED_BY)) {
+      dialog.querySelector(FOCUSABLE_SELECTOR).focus();
+    }
+  }
+
   onSubmit() {
     this.props.dispatch(ac.UserEvent({event: "SUBMIT_EMAIL", ...this._getFormInfo()}));
 
     global.addEventListener("visibilitychange", this.closeModal);
   }
 
   closeModal() {
     global.removeEventListener("visibilitychange", this.closeModal);
-    global.document.body.classList.remove("welcome");
+    this.props.document.body.classList.remove("welcome");
+    this.props.document.getElementById("root").removeAttribute("aria-hidden");
     this.setState({isModalOpen: false});
     this.revealCards();
     this.props.dispatch(ac.UserEvent({event: "SKIPPED_SIGNIN", ...this._getFormInfo()}));
   }
 
   /**
    * Report to telemetry additional information about the form submission.
    */
@@ -126,91 +158,131 @@ export class _Trailhead extends React.Pu
 
   getStringValue(str) {
     if (str.property_id) {
       str.value = this.props.intl.formatMessage({id: str.property_id});
     }
     return str.value;
   }
 
+  /**
+   * Takes in a url as a string or URL object and returns a URL object with the
+   * utm_* parameters added to it. If a URL object is passed in, the paraemeters
+   * are added to it (the return value can be ignored in that case as it's the
+   * same object).
+   */
+  addUtmParams(url, isCard = false) {
+    let returnUrl = url;
+    if (typeof returnUrl === "string") {
+      returnUrl = new URL(url);
+    }
+    returnUrl.searchParams.append("utm_source", "activity-stream");
+    returnUrl.searchParams.append("utm_campaign", "firstrun");
+    returnUrl.searchParams.append("utm_medium", "referral");
+    returnUrl.searchParams.append("utm_term", `${this.props.message.utm_term}${isCard ? "-card" : ""}`);
+    return returnUrl;
+  }
+
+  onCardAction(action) {
+    let actionUpdates = {};
+
+    if (action.type === "OPEN_URL") {
+      let url = new URL(action.data.args);
+      this.addUtmParams(url, true);
+
+      if (action.addFlowParams) {
+        url.searchParams.append("flow_id", this.state.flowId);
+        url.searchParams.append("flow_begin_time", this.state.flowBeginTime);
+      }
+
+      actionUpdates = {data: {...action.data, args: url}};
+    }
+
+    this.props.onAction({...action, ...actionUpdates});
+  }
+
   render() {
     const {props} = this;
-    const {bundle: cards, content} = props.message;
+    const {bundle: cards, content, utm_term} = props.message;
     const innerClassName = [
       "trailhead",
       content && content.className,
     ].filter(v => v).join(" ");
     return (<>
-    {this.state.isModalOpen && content ? <ModalOverlayWrapper innerClassName={innerClassName} onClose={this.closeModal}>
+    {this.state.isModalOpen && content ? <ModalOverlayWrapper innerClassName={innerClassName} onClose={this.closeModal} id="trailheadDialog" headerId="trailheadHeader">
       <div className="trailheadInner">
         <div className="trailheadContent">
-          <h1 data-l10n-id={content.title.string_id}>{this.getStringValue(content.title)}</h1>
+          <h1 data-l10n-id={content.title.string_id}
+            id="trailheadHeader">{this.getStringValue(content.title)}</h1>
           {content.subtitle &&
             <p data-l10n-id={content.subtitle.string_id}>{this.getStringValue(content.subtitle)}</p>
           }
           <ul className="trailheadBenefits">
             {content.benefits.map(item => (
               <li key={item.id} className={item.id}>
                 <h3 data-l10n-id={item.title.string_id}>{this.getStringValue(item.title)}</h3>
                 <p data-l10n-id={item.text.string_id}>{this.getStringValue(item.text)}</p>
               </li>
             ))}
           </ul>
-          <a className="trailheadLearn" data-l10n-id={content.learn.text.string_id} href={content.learn.url}>
+          <a className="trailheadLearn" data-l10n-id={content.learn.text.string_id} href={this.addUtmParams(content.learn.url)}>
             {this.getStringValue(content.learn.text)}
           </a>
         </div>
         <div className="trailheadForm">
           <h3 data-l10n-id={content.form.title.string_id}>{this.getStringValue(content.form.title)}</h3>
           <p data-l10n-id={content.form.text.string_id}>{this.getStringValue(content.form.text)}</p>
           <form method="get" action={this.props.fxaEndpoint} target="_blank" rel="noopener noreferrer" onSubmit={this.onSubmit}>
             <input name="service" type="hidden" value="sync" />
             <input name="action" type="hidden" value="email" />
             <input name="context" type="hidden" value="fx_desktop_v3" />
             <input name="entrypoint" type="hidden" value="activity-stream-firstrun" />
             <input name="utm_source" type="hidden" value="activity-stream" />
             <input name="utm_campaign" type="hidden" value="firstrun" />
-            <input name="utm_term" type="hidden" value="trailhead" />
+            <input name="utm_term" type="hidden" value={utm_term} />
             <input name="flow_id" type="hidden" value={this.state.flowId} />
             <input name="flow_begin_time" type="hidden" value={this.state.flowBeginTime} />
+            <input name="style" type="hidden" value="trailhead" />
             <p data-l10n-id="onboarding-join-form-email-error" className="error" />
             <input
               data-l10n-id={content.form.email.string_id}
               placeholder={this.getStringValue(content.form.email)}
               name="email"
               type="email"
               required="true"
               onInvalid={this.onInputInvalid}
               onChange={this.onInputChange} />
             <p className="trailheadTerms" data-l10n-id="onboarding-join-form-legal">
               <a data-l10n-name="terms"
-                href="https://accounts.firefox.com/legal/terms" />
+                href={this.addUtmParams("https://accounts.firefox.com/legal/terms")} />
               <a data-l10n-name="privacy"
-                href="https://accounts.firefox.com/legal/privacy" />
+                href={this.addUtmParams("https://accounts.firefox.com/legal/privacy")} />
             </p>
             <button data-l10n-id={content.form.button.string_id} type="submit">
               {this.getStringValue(content.form.button)}
             </button>
           </form>
         </div>
       </div>
 
       <button className="trailheadStart"
         data-l10n-id={content.skipButton.string_id}
+        onBlur={this.onStartBlur}
         onClick={this.closeModal}>{this.getStringValue(content.skipButton)}</button>
     </ModalOverlayWrapper> : null}
     {(cards && cards.length) ? <div className={`trailheadCards ${this.state.showCardPanel ? "expanded" : "collapsed"}`}>
-      <div className="trailheadCardsInner">
+      <div className="trailheadCardsInner"
+        aria-hidden={!this.state.showCards}>
         <h1 data-l10n-id="onboarding-welcome-header" />
         <div className={`trailheadCardGrid${this.state.showCards ? " show" : ""}`}>
         {cards.map(card => (
           <OnboardingCard key={card.id}
             className="trailheadCard"
             sendUserActionTelemetry={props.sendUserActionTelemetry}
-            onAction={props.onAction}
+            onAction={this.onCardAction}
             UISurface="TRAILHEAD"
             {...card} />
         ))}
         </div>
         {this.state.showCardPanel &&
           <button
             className="icon icon-dismiss" onClick={this.hideCardPanel}
             title={props.intl.formatMessage({id: "menu_action_dismiss"})}
--- a/browser/components/newtab/content-src/asrouter/templates/Trailhead/_Trailhead.scss
+++ b/browser/components/newtab/content-src/asrouter/templates/Trailhead/_Trailhead.scss
@@ -5,21 +5,16 @@
   $benefit-icon-spacing-small: $benefit-icon-size-small + 12px;
   $responsive-breakpoint: 850px;
 
   background: url('#{$image-path}trailhead/accounts-form-bg.jpg') bottom / cover;
   color: $white;
   height: auto;
   top: 100px;
 
-  @media (max-height: 700px) {
-    position: absolute;
-    top: 20px;
-  }
-
   a {
     color: $white;
     text-decoration: underline;
   }
 
   input,
   button {
     border-radius: 4px;
@@ -178,28 +173,48 @@
       .error.active {
         inset-inline-start: 0;
         z-index: 0;
       }
     }
 
     button,
     input {
-      border: 0;
       width: 100%;
     }
 
     input {
       background-color: $white;
+      border: 1px solid $grey-50;
+      box-shadow: none;
       color: $grey-70;
       font-size: 15px;
+      transition: border-color 150ms, box-shadow 150ms;
+
+      &:hover {
+        border-color: $grey-90;
+      }
+
+      &:focus {
+        border-color: $blue-50;
+        box-shadow: 0 0 0 3px $email-input-focus;
+      }
+
+      &.invalid {
+        border-color: $red-60;
+      }
+
+      &.invalid:focus {
+        box-shadow: 0 0 0 3px $email-input-invalid;
+      }
     }
 
     button {
       background-color: $blue-60;
+      border: 0;
       cursor: pointer;
       display: block;
       font-size: 15px;
       font-weight: 400;
       padding: 14px;
 
       &:hover,
       &:focus {
@@ -396,14 +411,19 @@
     }
   }
 
   .asrouter-toggle {
     position: absolute;
   }
 }
 
-// If the window is too short, we need to allow scrolling so user can get to Start Browsing button.
-@media (max-height: 700px) {
+// If the window is too short or narrow, we need to allow scrolling so user can get to Start Browsing button.
+@media (max-height: 760px), (max-width: 924px) {
   .activity-stream.welcome.inline-onboarding {
     overflow: auto;
   }
+
+  .trailhead {
+    position: absolute;
+    top: 20px;
+  }
 }
--- a/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
@@ -165,24 +165,21 @@ export class _DiscoveryStreamBase extend
     if (this.props.DiscoveryStream.layout !== oldProps.DiscoveryStream.layout) {
       rickRollCache = [];
     }
   }
 
   render() {
     // Select layout render data by adding spocs and position to recommendations
     const {layoutRender, spocsFill} = selectLayoutRender(this.props.DiscoveryStream, this.props.Prefs.values, rickRollCache);
-    const {config, feeds, spocs} = this.props.DiscoveryStream;
-    if (!spocs.loaded || !feeds.loaded) {
-      return null;
-    }
+    const {config, spocs, feeds} = this.props.DiscoveryStream;
 
     // Send SPOCS Fill if any. Note that it should not send it again if the same
     // page gets re-rendered by state changes.
-    if (spocsFill.length && !this._spocsFillSent) {
+    if (spocs.loaded && feeds.loaded && spocsFill.length && !this._spocsFillSent) {
       this.props.dispatch(ac.DiscoveryStreamSpocsFill({spoc_fills: spocsFill}));
       this._spocsFillSent = true;
     }
 
     // Allow rendering without extracting special components
     if (!config.collapsible) {
       return this.renderLayout(layoutRender);
     }
@@ -203,16 +200,20 @@ export class _DiscoveryStreamBase extend
         }
       }
       return null;
     };
 
     // Get "topstories" Section state for default values
     const topStories = this.props.Sections.find(s => s.id === "topstories");
 
+    if (!topStories) {
+      return null;
+    }
+
     // Extract TopSites to render before the rest and Message to use for header
     const topSites = extractComponent("TopSites");
     const message = extractComponent("Message") || {
       header: {
         link_text: topStories.learnMore.link.id,
         link_url: topStories.learnMore.link.href,
         title: topStories.title,
       },
@@ -250,16 +251,19 @@ export class _DiscoveryStreamBase extend
   renderLayout(layoutRender) {
     const styles = [];
     return (
       <div className="discovery-stream ds-layout">
         {layoutRender.map((row, rowIndex) => (
           <div key={`row-${rowIndex}`} className={`ds-column ds-column-${row.width}`}>
             <div className="ds-column-grid">
               {row.components.map((component, componentIndex) => {
+                if (!component) {
+                  return null;
+                }
                 styles[rowIndex] = [...styles[rowIndex] || [], component.styles];
                 return (<div key={`component-${componentIndex}`}>
                   {this.renderComponent(component, row.width)}
                 </div>);
               })}
             </div>
           </div>
         ))}
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/CardGrid/_CardGrid.scss
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/CardGrid/_CardGrid.scss
@@ -44,17 +44,17 @@
     }
   }
 
   &.ds-card-grid-no-border {
     .ds-card {
       background: none;
 
       .meta {
-        padding: 16px 0;
+        padding: 12px 0;
       }
     }
   }
 
   // "2/3 width layout"
   .ds-column-5 &,
   .ds-column-6 &,
   .ds-column-7 &,
@@ -74,16 +74,16 @@
 
       .title {
         font-size: 17px;
         line-height: 24px;
       }
     }
 
     &.ds-card-grid-divisible-by-4 .title {
-      @include limit-visibile-lines(3, 20, 14);
+      @include limit-visibile-lines(3, 20, 15);
     }
   }
 
   &.empty {
     grid-template-columns: auto;
   }
 }
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss
@@ -67,57 +67,58 @@
       @include ds-fade-in;
     }
   }
 
   .meta {
     display: flex;
     flex-direction: column;
     flex-grow: 1;
-    padding: 16px;
+    padding: 12px;
 
     .info-wrap {
       flex-grow: 1;
+      margin: 0 0 12px;
     }
 
     .title {
       // show only 3 lines of copy
       @include limit-visibile-lines(3, $header-line-height, $header-font-size);
       font-weight: 600;
     }
 
     .excerpt {
       // show only 3 lines of copy
       @include limit-visibile-lines(3, $excerpt-line-height, $excerpt-font-size);
     }
 
     .context,
     .source {
       @include dark-theme-only {
-        color: $teal-10;
+        color: $grey-40;
       }
 
       font-size: 13px;
-      color: $teal-80;
+      color: $grey-50;
     }
   }
 
   header {
     @include dark-theme-only {
       color: $grey-10;
     }
 
     line-height: $header-line-height * 1px;
     font-size: $header-font-size * 1px;
     color: $grey-90;
   }
 
   p {
     @include dark-theme-only {
-      color: $grey-30;
+      color: $grey-10;
     }
 
     font-size: $excerpt-font-size * 1px;
     line-height: $excerpt-line-height * 1px;
-    color: $grey-50;
-    margin: 8px 0 0;
+    color: $grey-90;
+    margin: 0;
   }
 }
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/Hero/_Hero.scss
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/Hero/_Hero.scss
@@ -10,17 +10,22 @@
 
   p {
     line-height: 1.538;
     margin: 8px 0;
   }
 
   .excerpt {
     @include limit-visibile-lines(3, 20, 14);
-    margin: 4px 0 8px;
+    @include dark-theme-only {
+      color: $grey-10;
+    }
+
+    color: $grey-90;
+    margin: 0 0 10px;
   }
 
   .ds-card:not(.placeholder) {
     border: 0;
     padding-bottom: 20px;
 
     p {
       margin-top: 4px;
@@ -114,34 +119,34 @@
 
       header {
         @include dark-theme-only {
           color: $white;
         }
 
         @include limit-visibile-lines(4, 28, 22);
         color: $grey-90;
-        margin-bottom: 8px;
+        margin-bottom: 0;
       }
 
       .context {
         @include dark-theme-only {
           color: $teal-10;
         }
 
         color: $teal-70;
       }
 
       .source {
         @include dark-theme-only {
-          color: $teal-10;
+          color: $grey-40;
         }
 
         font-size: 13px;
-        color: $teal-80;
+        color: $grey-50;
         margin-bottom: 0;
         overflow-x: hidden;
         text-overflow: ellipsis;
       }
     }
   }
 
   // "2/3 width layout"
@@ -207,17 +212,17 @@
       display: flex;
       flex-direction: column;
 
       .img-wrapper {
         margin: 0;
       }
 
       .img {
-        margin-bottom: 16px;
+        margin-bottom: 12px;
         height: 0;
         padding-top: 50%; // 2:1 aspect ratio
       }
 
       .meta {
         flex-grow: 1;
         display: flex;
         padding: 0 24px 0 0;
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/List/_List.scss
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/List/_List.scss
@@ -215,20 +215,20 @@
     line-height: $item-line-height * 1px;
     margin: 0;
   }
 
   .ds-list-item-info,
   .ds-list-item-context {
     @include limit-visibile-lines(1, $item-line-height, $item-font-size);
     @include dark-theme-only {
-      color: $teal-10;
+      color: $grey-40;
     }
 
-    color: $teal-80;
+    color: $grey-50;
     font-size: 13px;
     text-overflow: ellipsis;
   }
 
   .ds-list-item-title {
     font-weight: 600;
     margin-bottom: 4px;
   }
--- a/browser/components/newtab/content-src/lib/selectLayoutRender.js
+++ b/browser/components/newtab/content-src/lib/selectLayoutRender.js
@@ -1,54 +1,59 @@
 export const selectLayoutRender = (state, prefs, rickRollCache) => {
   const {layout, feeds, spocs} = state;
   let spocIndex = 0;
   let bufferRollCache = [];
   // Records the chosen and unchosen spocs by the probability selection.
   let chosenSpocs = new Set();
   let unchosenSpocs = new Set();
 
-  // rickRollCache stores random probability values for each spoc position. This cache is empty
-  // on page refresh and gets filled with random values on first render inside maybeInjectSpocs.
-  const isFirstRun = !rickRollCache.length;
+  function rollForSpocs(data, spocsConfig) {
+    const recommendations = [...data.recommendations];
+    for (let position of spocsConfig.positions) {
+      const spoc = spocs.data.spocs[spocIndex];
+      if (!spoc) {
+        break;
+      }
+
+      // Cache random number for a position
+      let rickRoll;
+      if (!rickRollCache.length) {
+        rickRoll = Math.random();
+        bufferRollCache.push(rickRoll);
+      } else {
+        rickRoll = rickRollCache.shift();
+        bufferRollCache.push(rickRoll);
+      }
+
+      if (rickRoll <= spocsConfig.probability) {
+        spocIndex++;
+        recommendations.splice(position.index, 0, spoc);
+        chosenSpocs.add(spoc);
+      } else {
+        unchosenSpocs.add(spoc);
+      }
+    }
+
+    return {
+      ...data,
+      recommendations,
+    };
+  }
 
   function maybeInjectSpocs(data, spocsConfig) {
-    if (data &&
-        spocsConfig && spocsConfig.positions && spocsConfig.positions.length &&
-        spocs.data.spocs && spocs.data.spocs.length) {
-      const recommendations = [...data.recommendations];
-      for (let position of spocsConfig.positions) {
-        const spoc = spocs.data.spocs[spocIndex];
-        if (!spoc) {
-          break;
-        }
-
-        // Cache random number for a position
-        let rickRoll;
-        if (isFirstRun) {
-          rickRoll = Math.random();
-          rickRollCache.push(rickRoll);
-        } else {
-          rickRoll = rickRollCache.shift();
-          bufferRollCache.push(rickRoll);
-        }
-
-        if (rickRoll <= spocsConfig.probability) {
-          spocIndex++;
-          recommendations.splice(position.index, 0, spoc);
-          chosenSpocs.add(spoc);
-        } else {
-          unchosenSpocs.add(spoc);
-        }
+    // Do we ever expect to possibly have a spoc.
+    if (data && spocsConfig && spocsConfig.positions && spocsConfig.positions.length) {
+      // We expect a spoc, spocs are loaded, but the server returned no spocs.
+      if (!spocs.data.spocs || !spocs.data.spocs.length) {
+        return data;
       }
 
-      return {
-        ...data,
-        recommendations,
-      };
+      // We expect a spoc, spocs are loaded, and we have spocs available.
+      return rollForSpocs(data, spocsConfig);
     }
 
     return data;
   }
 
   const positions = {};
   const DS_COMPONENTS = ["Message", "SectionTitle", "Navigation",
     "CardGrid", "Hero", "HorizontalRule", "List"];
@@ -58,66 +63,83 @@ export const selectLayoutRender = (state
   if (!prefs["feeds.topsites"]) {
     filterArray.push("TopSites");
   }
 
   if (!prefs["feeds.section.topstories"]) {
     filterArray.push(...DS_COMPONENTS);
   }
 
-  const layoutRender = layout.map(row => ({
-    ...row,
+  const handleComponent = component => {
+    positions[component.type] = positions[component.type] || 0;
+
+    let {data} = feeds.data[component.feed.url];
 
-    // Loops through desired components and adds a .data property
-    // containing data from feeds
-    components: row.components.filter(c => !filterArray.includes(c.type)).map(component => {
-      if (!component.feed || !feeds.data[component.feed.url]) {
-        return component;
-      }
+    if (component && component.properties && component.properties.offset) {
+      data = {
+        ...data,
+        recommendations: data.recommendations.slice(component.properties.offset),
+      };
+    }
+
+    data = maybeInjectSpocs(data, component.spocs);
 
-      positions[component.type] = positions[component.type] || 0;
-
-      let {data} = feeds.data[component.feed.url];
+    let items = 0;
+    if (component.properties && component.properties.items) {
+      items = Math.min(component.properties.items, data.recommendations.length);
+    }
 
-      if (component && component.properties && component.properties.offset) {
-        data = {
-          ...data,
-          recommendations: data.recommendations.slice(component.properties.offset),
-        };
-      }
+    // loop through a component items
+    // Store the items position sequentially for multiple components of the same type.
+    // Example: A second card grid starts pos offset from the last card grid.
+    for (let i = 0; i < items; i++) {
+      data.recommendations[i].pos = positions[component.type]++;
+    }
+
+    return {...component, data};
+  };
 
-      data = maybeInjectSpocs(data, component.spocs);
-
-      // If empty, fill rickRollCache with random probability values from bufferRollCache
-      if (!rickRollCache.length) {
-        rickRollCache.push(...bufferRollCache);
-      }
-
-      let items = 0;
-      if (component.properties && component.properties.items) {
-        items = Math.min(component.properties.items, data.recommendations.length);
+  const renderLayout = () => {
+    const renderedLayoutArray = [];
+    for (const row of layout.filter(r => r.components.length)) {
+      let components = [];
+      renderedLayoutArray.push({
+        ...row,
+        components,
+      });
+      for (const component of row.components.filter(c => !filterArray.includes(c.type))) {
+        if (component.feed) {
+          const spocsConfig = component.spocs;
+          // Are we still waiting on a feed/spocs, render what we have, and bail out early.
+          if (!feeds.data[component.feed.url] ||
+            (spocsConfig && spocsConfig.positions && spocsConfig.positions.length && !spocs.loaded)) {
+            return renderedLayoutArray;
+          }
+          components.push(handleComponent(component));
+        } else {
+          components.push(component);
+        }
       }
+    }
+    return renderedLayoutArray;
+  };
 
-      // loop through a component items
-      // Store the items position sequentially for multiple components of the same type.
-      // Example: A second card grid starts pos offset from the last card grid.
-      for (let i = 0; i < items; i++) {
-        data.recommendations[i].pos = positions[component.type]++;
-      }
+  const layoutRender = renderLayout(layout);
 
-      return {...component, data};
-    }),
-  })).filter(row => row.components.length);
+  // If empty, fill rickRollCache with random probability values from bufferRollCache
+  if (!rickRollCache.length) {
+    rickRollCache.push(...bufferRollCache);
+  }
 
   // Generate the payload for the SPOCS Fill ping. Note that a SPOC could be rejected
   // by the `probability_selection` first, then gets chosen for the next position. For
   // all other SPOCS that never went through the probabilistic selection, its reason will
   // be "out_of_position".
   let spocsFill = [];
-  if (spocs.data.spocs) {
+  if (spocs.loaded && feeds.loaded && spocs.data.spocs) {
     const chosenSpocsFill = [...chosenSpocs]
       .map(spoc => ({id: spoc.id, reason: "n/a", displayed: 1, full_recalc: 0}));
     const unchosenSpocsFill = [...unchosenSpocs]
       .filter(spoc => !chosenSpocs.has(spoc))
       .map(spoc => ({id: spoc.id, reason: "probability_selection", displayed: 0, full_recalc: 0}));
     const outOfPositionSpocsFill = spocs.data.spocs.slice(spocIndex)
       .filter(spoc => !unchosenSpocs.has(spoc))
       .map(spoc => ({id: spoc.id, reason: "out_of_position", displayed: 0, full_recalc: 0}));
--- a/browser/components/newtab/content-src/styles/_theme.scss
+++ b/browser/components/newtab/content-src/styles/_theme.scss
@@ -143,12 +143,12 @@ body {
     // Snippets
     --newtab-snippets-background-color: #{$grey-70};
     --newtab-snippets-hairline-color: #{$white-10};
 
     // Trailhead
     --trailhead-header-text-color: #{$white-60};
     --trailhead-cards-background-color: #{$grey-90-10};
     --trailhead-card-button-background-color: #{$grey-90-30};
-    --trailhead-card-button-background-hover-color: #{$grey-90-40};
-    --trailhead-card-button-background-active-color: #{$grey-90-50};
+    --trailhead-card-button-background-hover-color: #{$grey-90-50};
+    --trailhead-card-button-background-active-color: #{$grey-90-70};
   }
 }
--- a/browser/components/newtab/css/activity-stream-linux.css
+++ b/browser/components/newtab/css/activity-stream-linux.css
@@ -115,18 +115,18 @@ body {
     --newtab-card-hairline-color: rgba(249, 249, 250, 0.1);
     --newtab-card-placeholder-color: #4A4A4F;
     --newtab-card-shadow: 0 1px 8px 0 rgba(12, 12, 13, 0.2);
     --newtab-snippets-background-color: #38383D;
     --newtab-snippets-hairline-color: rgba(255, 255, 255, 0.1);
     --trailhead-header-text-color: rgba(255, 255, 255, 0.6);
     --trailhead-cards-background-color: rgba(12, 12, 13, 0.1);
     --trailhead-card-button-background-color: rgba(12, 12, 13, 0.3);
-    --trailhead-card-button-background-hover-color: rgba(12, 12, 13, 0.4);
-    --trailhead-card-button-background-active-color: rgba(12, 12, 13, 0.5); }
+    --trailhead-card-button-background-hover-color: rgba(12, 12, 13, 0.5);
+    --trailhead-card-button-background-active-color: rgba(12, 12, 13, 0.7); }
 
 .icon {
   background-position: center center;
   background-repeat: no-repeat;
   background-size: 16px;
   -moz-context-properties: fill;
   display: inline-block;
   fill: var(--newtab-icon-primary-color);
@@ -1915,17 +1915,17 @@ main {
       outline: none; }
       [lwt-newtab-brighttext] .ds-card-grid.ds-card-grid-border .ds-card:not(.placeholder):hover {
         box-shadow: 0 0 0 5px #4A4A4F; }
     .ds-card-grid.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img {
       border-radius: 4px 4px 0 0; }
   .ds-card-grid.ds-card-grid-no-border .ds-card {
     background: none; }
     .ds-card-grid.ds-card-grid-no-border .ds-card .meta {
-      padding: 16px 0; }
+      padding: 12px 0; }
   .ds-column-5 .ds-card-grid,
   .ds-column-6 .ds-card-grid,
   .ds-column-7 .ds-card-grid,
   .ds-column-8 .ds-card-grid {
     grid-template-columns: repeat(2, 1fr); }
   .ds-column-9 .ds-card-grid,
   .ds-column-10 .ds-card-grid,
   .ds-column-11 .ds-card-grid,
@@ -1941,36 +1941,39 @@ main {
       .ds-column-11 .ds-card-grid.ds-card-grid-divisible-by-3 .title,
       .ds-column-12 .ds-card-grid.ds-card-grid-divisible-by-3 .title {
         font-size: 17px;
         line-height: 24px; }
     .ds-column-9 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-10 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-11 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-12 .ds-card-grid.ds-card-grid-divisible-by-4 .title {
-      font-size: 14px;
+      font-size: 15px;
       line-height: 20px;
-      max-height: 4.28571em;
+      max-height: 4em;
       overflow: hidden; }
   .ds-card-grid.empty {
     grid-template-columns: auto; }
 
 .ds-hero {
   position: relative; }
   .ds-hero header {
     font-weight: 600; }
   .ds-hero p {
     line-height: 1.538;
     margin: 8px 0; }
   .ds-hero .excerpt {
     font-size: 14px;
     line-height: 20px;
     max-height: 4.28571em;
     overflow: hidden;
-    margin: 4px 0 8px; }
+    color: #0C0C0D;
+    margin: 0 0 10px; }
+    [lwt-newtab-brighttext] .ds-hero .excerpt {
+      color: #F9F9FA; }
   .ds-hero .ds-card:not(.placeholder) {
     border: 0;
     padding-bottom: 20px; }
     .ds-hero .ds-card:not(.placeholder) p {
       margin-top: 4px; }
     .ds-hero .ds-card:not(.placeholder):hover {
       border: 0;
       box-shadow: none;
@@ -2027,31 +2030,31 @@ main {
       flex-direction: column;
       justify-content: space-between; }
       .ds-hero .wrapper .meta header {
         font-size: 22px;
         line-height: 28px;
         max-height: 5.09091em;
         overflow: hidden;
         color: #0C0C0D;
-        margin-bottom: 8px; }
+        margin-bottom: 0; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta header {
           color: #FFF; }
       .ds-hero .wrapper .meta .context {
         color: #008EA4; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta .context {
           color: #A7FFFE; }
       .ds-hero .wrapper .meta .source {
         font-size: 13px;
-        color: #005A71;
+        color: #737373;
         margin-bottom: 0;
         overflow-x: hidden;
         text-overflow: ellipsis; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta .source {
-          color: #A7FFFE; }
+          color: #B1B1B3; }
   .ds-column-5 .ds-hero .wrapper,
   .ds-column-6 .ds-hero .wrapper,
   .ds-column-7 .ds-hero .wrapper,
   .ds-column-8 .ds-hero .wrapper {
     display: grid;
     grid-template-columns: repeat(2, 1fr);
     grid-column-gap: 24px; }
     .ds-column-5 .ds-hero .wrapper .img-wrapper,
@@ -2125,17 +2128,17 @@ main {
       .ds-column-10 .ds-hero .wrapper .img-wrapper,
       .ds-column-11 .ds-hero .wrapper .img-wrapper,
       .ds-column-12 .ds-hero .wrapper .img-wrapper {
         margin: 0; }
       .ds-column-9 .ds-hero .wrapper .img,
       .ds-column-10 .ds-hero .wrapper .img,
       .ds-column-11 .ds-hero .wrapper .img,
       .ds-column-12 .ds-hero .wrapper .img {
-        margin-bottom: 16px;
+        margin-bottom: 12px;
         height: 0;
         padding-top: 50%; }
       .ds-column-9 .ds-hero .wrapper .meta,
       .ds-column-10 .ds-hero .wrapper .meta,
       .ds-column-11 .ds-hero .wrapper .meta,
       .ds-column-12 .ds-hero .wrapper .meta {
         flex-grow: 1;
         display: flex;
@@ -2361,22 +2364,22 @@ main {
     line-height: 20px;
     margin: 0; }
   .ds-list-item .ds-list-item-info,
   .ds-list-item .ds-list-item-context {
     font-size: 14px;
     line-height: 20px;
     max-height: 1.42857em;
     overflow: hidden;
-    color: #005A71;
+    color: #737373;
     font-size: 13px;
     text-overflow: ellipsis; }
     [lwt-newtab-brighttext] .ds-list-item .ds-list-item-info, [lwt-newtab-brighttext]
     .ds-list-item .ds-list-item-context {
-      color: #A7FFFE; }
+      color: #B1B1B3; }
   .ds-list-item .ds-list-item-title {
     font-weight: 600;
     margin-bottom: 4px; }
   .ds-list-item .ds-list-item-text {
     display: flex;
     flex-direction: column;
     justify-content: space-between; }
   .ds-list-item .ds-list-image {
@@ -2620,50 +2623,51 @@ main {
       box-shadow: 0 0 0 1px #0A84FF inset, 0 0 0 1px #0A84FF, 0 0 0 5px rgba(10, 132, 255, 0.3);
       transition: box-shadow 150ms;
       border-radius: 4px;
       outline: none; }
   .ds-card .meta {
     display: flex;
     flex-direction: column;
     flex-grow: 1;
-    padding: 16px; }
+    padding: 12px; }
     .ds-card .meta .info-wrap {
-      flex-grow: 1; }
+      flex-grow: 1;
+      margin: 0 0 12px; }
     .ds-card .meta .title {
       font-size: 17px;
       line-height: 24px;
       max-height: 4.23529em;
       overflow: hidden;
       font-weight: 600; }
     .ds-card .meta .excerpt {
       font-size: 14px;
       line-height: 20px;
       max-height: 4.28571em;
       overflow: hidden; }
     .ds-card .meta .context,
     .ds-card .meta .source {
       font-size: 13px;
-      color: #005A71; }
+      color: #737373; }
       [lwt-newtab-brighttext] .ds-card .meta .context, [lwt-newtab-brighttext]
       .ds-card .meta .source {
-        color: #A7FFFE; }
+        color: #B1B1B3; }
   .ds-card header {
     line-height: 24px;
     font-size: 17px;
     color: #0C0C0D; }
     [lwt-newtab-brighttext] .ds-card header {
       color: #F9F9FA; }
   .ds-card p {
     font-size: 14px;
     line-height: 20px;
-    color: #737373;
-    margin: 8px 0 0; }
+    color: #0C0C0D;
+    margin: 0; }
     [lwt-newtab-brighttext] .ds-card p {
-      color: #D7D7DB; }
+      color: #F9F9FA; }
 
 .ds-image {
   display: block;
   position: relative; }
   .ds-image img,
   .ds-image .broken-image {
     background-color: var(--newtab-card-placeholder-color);
     position: absolute;
@@ -3704,20 +3708,16 @@ a.firstrun-link {
     opacity: 1;
     transform: translateY(0); } }
 
 .trailhead {
   background: url("../data/content/assets/trailhead/accounts-form-bg.jpg") bottom/cover;
   color: #FFF;
   height: auto;
   top: 100px; }
-  @media (max-height: 700px) {
-    .trailhead {
-      position: absolute;
-      top: 20px; } }
   .trailhead a {
     color: #FFF;
     text-decoration: underline; }
   .trailhead input,
   .trailhead button {
     border-radius: 4px;
     padding: 10px; }
   .trailhead .trailheadInner {
@@ -3815,24 +3815,36 @@ a.firstrun-link {
         line-height: 20px; }
     .trailhead .trailheadForm form {
       position: relative; }
       .trailhead .trailheadForm form .error.active {
         inset-inline-start: 0;
         z-index: 0; }
     .trailhead .trailheadForm button,
     .trailhead .trailheadForm input {
-      border: 0;
       width: 100%; }
     .trailhead .trailheadForm input {
       background-color: #FFF;
+      border: 1px solid #737373;
+      box-shadow: none;
       color: #38383D;
-      font-size: 15px; }
+      font-size: 15px;
+      transition: border-color 150ms, box-shadow 150ms; }
+      .trailhead .trailheadForm input:hover {
+        border-color: #0C0C0D; }
+      .trailhead .trailheadForm input:focus {
+        border-color: #0A84FF;
+        box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
+      .trailhead .trailheadForm input.invalid {
+        border-color: #D70022; }
+      .trailhead .trailheadForm input.invalid:focus {
+        box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
     .trailhead .trailheadForm button {
       background-color: #0060DF;
+      border: 0;
       cursor: pointer;
       display: block;
       font-size: 15px;
       font-weight: 400;
       padding: 14px; }
       .trailhead .trailheadForm button:hover, .trailhead .trailheadForm button:focus {
         background-color: #0250BB; }
       .trailhead .trailheadForm button:focus {
@@ -3961,11 +3973,14 @@ a.firstrun-link {
 .inline-onboarding .outer-wrapper {
   position: relative; }
   .inline-onboarding .outer-wrapper .prefs-button button {
     position: absolute; }
 
 .inline-onboarding .asrouter-toggle {
   position: absolute; }
 
-@media (max-height: 700px) {
+@media (max-height: 760px), (max-width: 924px) {
   .activity-stream.welcome.inline-onboarding {
-    overflow: auto; } }
+    overflow: auto; }
+  .trailhead {
+    position: absolute;
+    top: 20px; } }
--- a/browser/components/newtab/css/activity-stream-mac.css
+++ b/browser/components/newtab/css/activity-stream-mac.css
@@ -118,18 +118,18 @@ body {
     --newtab-card-hairline-color: rgba(249, 249, 250, 0.1);
     --newtab-card-placeholder-color: #4A4A4F;
     --newtab-card-shadow: 0 1px 8px 0 rgba(12, 12, 13, 0.2);
     --newtab-snippets-background-color: #38383D;
     --newtab-snippets-hairline-color: rgba(255, 255, 255, 0.1);
     --trailhead-header-text-color: rgba(255, 255, 255, 0.6);
     --trailhead-cards-background-color: rgba(12, 12, 13, 0.1);
     --trailhead-card-button-background-color: rgba(12, 12, 13, 0.3);
-    --trailhead-card-button-background-hover-color: rgba(12, 12, 13, 0.4);
-    --trailhead-card-button-background-active-color: rgba(12, 12, 13, 0.5); }
+    --trailhead-card-button-background-hover-color: rgba(12, 12, 13, 0.5);
+    --trailhead-card-button-background-active-color: rgba(12, 12, 13, 0.7); }
 
 .icon {
   background-position: center center;
   background-repeat: no-repeat;
   background-size: 16px;
   -moz-context-properties: fill;
   display: inline-block;
   fill: var(--newtab-icon-primary-color);
@@ -1918,17 +1918,17 @@ main {
       outline: none; }
       [lwt-newtab-brighttext] .ds-card-grid.ds-card-grid-border .ds-card:not(.placeholder):hover {
         box-shadow: 0 0 0 5px #4A4A4F; }
     .ds-card-grid.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img {
       border-radius: 4px 4px 0 0; }
   .ds-card-grid.ds-card-grid-no-border .ds-card {
     background: none; }
     .ds-card-grid.ds-card-grid-no-border .ds-card .meta {
-      padding: 16px 0; }
+      padding: 12px 0; }
   .ds-column-5 .ds-card-grid,
   .ds-column-6 .ds-card-grid,
   .ds-column-7 .ds-card-grid,
   .ds-column-8 .ds-card-grid {
     grid-template-columns: repeat(2, 1fr); }
   .ds-column-9 .ds-card-grid,
   .ds-column-10 .ds-card-grid,
   .ds-column-11 .ds-card-grid,
@@ -1944,36 +1944,39 @@ main {
       .ds-column-11 .ds-card-grid.ds-card-grid-divisible-by-3 .title,
       .ds-column-12 .ds-card-grid.ds-card-grid-divisible-by-3 .title {
         font-size: 17px;
         line-height: 24px; }
     .ds-column-9 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-10 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-11 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-12 .ds-card-grid.ds-card-grid-divisible-by-4 .title {
-      font-size: 14px;
+      font-size: 15px;
       line-height: 20px;
-      max-height: 4.28571em;
+      max-height: 4em;
       overflow: hidden; }
   .ds-card-grid.empty {
     grid-template-columns: auto; }
 
 .ds-hero {
   position: relative; }
   .ds-hero header {
     font-weight: 600; }
   .ds-hero p {
     line-height: 1.538;
     margin: 8px 0; }
   .ds-hero .excerpt {
     font-size: 14px;
     line-height: 20px;
     max-height: 4.28571em;
     overflow: hidden;
-    margin: 4px 0 8px; }
+    color: #0C0C0D;
+    margin: 0 0 10px; }
+    [lwt-newtab-brighttext] .ds-hero .excerpt {
+      color: #F9F9FA; }
   .ds-hero .ds-card:not(.placeholder) {
     border: 0;
     padding-bottom: 20px; }
     .ds-hero .ds-card:not(.placeholder) p {
       margin-top: 4px; }
     .ds-hero .ds-card:not(.placeholder):hover {
       border: 0;
       box-shadow: none;
@@ -2030,31 +2033,31 @@ main {
       flex-direction: column;
       justify-content: space-between; }
       .ds-hero .wrapper .meta header {
         font-size: 22px;
         line-height: 28px;
         max-height: 5.09091em;
         overflow: hidden;
         color: #0C0C0D;
-        margin-bottom: 8px; }
+        margin-bottom: 0; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta header {
           color: #FFF; }
       .ds-hero .wrapper .meta .context {
         color: #008EA4; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta .context {
           color: #A7FFFE; }
       .ds-hero .wrapper .meta .source {
         font-size: 13px;
-        color: #005A71;
+        color: #737373;
         margin-bottom: 0;
         overflow-x: hidden;
         text-overflow: ellipsis; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta .source {
-          color: #A7FFFE; }
+          color: #B1B1B3; }
   .ds-column-5 .ds-hero .wrapper,
   .ds-column-6 .ds-hero .wrapper,
   .ds-column-7 .ds-hero .wrapper,
   .ds-column-8 .ds-hero .wrapper {
     display: grid;
     grid-template-columns: repeat(2, 1fr);
     grid-column-gap: 24px; }
     .ds-column-5 .ds-hero .wrapper .img-wrapper,
@@ -2128,17 +2131,17 @@ main {
       .ds-column-10 .ds-hero .wrapper .img-wrapper,
       .ds-column-11 .ds-hero .wrapper .img-wrapper,
       .ds-column-12 .ds-hero .wrapper .img-wrapper {
         margin: 0; }
       .ds-column-9 .ds-hero .wrapper .img,
       .ds-column-10 .ds-hero .wrapper .img,
       .ds-column-11 .ds-hero .wrapper .img,
       .ds-column-12 .ds-hero .wrapper .img {
-        margin-bottom: 16px;
+        margin-bottom: 12px;
         height: 0;
         padding-top: 50%; }
       .ds-column-9 .ds-hero .wrapper .meta,
       .ds-column-10 .ds-hero .wrapper .meta,
       .ds-column-11 .ds-hero .wrapper .meta,
       .ds-column-12 .ds-hero .wrapper .meta {
         flex-grow: 1;
         display: flex;
@@ -2364,22 +2367,22 @@ main {
     line-height: 20px;
     margin: 0; }
   .ds-list-item .ds-list-item-info,
   .ds-list-item .ds-list-item-context {
     font-size: 14px;
     line-height: 20px;
     max-height: 1.42857em;
     overflow: hidden;
-    color: #005A71;
+    color: #737373;
     font-size: 13px;
     text-overflow: ellipsis; }
     [lwt-newtab-brighttext] .ds-list-item .ds-list-item-info, [lwt-newtab-brighttext]
     .ds-list-item .ds-list-item-context {
-      color: #A7FFFE; }
+      color: #B1B1B3; }
   .ds-list-item .ds-list-item-title {
     font-weight: 600;
     margin-bottom: 4px; }
   .ds-list-item .ds-list-item-text {
     display: flex;
     flex-direction: column;
     justify-content: space-between; }
   .ds-list-item .ds-list-image {
@@ -2623,50 +2626,51 @@ main {
       box-shadow: 0 0 0 1px #0A84FF inset, 0 0 0 1px #0A84FF, 0 0 0 5px rgba(10, 132, 255, 0.3);
       transition: box-shadow 150ms;
       border-radius: 4px;
       outline: none; }
   .ds-card .meta {
     display: flex;
     flex-direction: column;
     flex-grow: 1;
-    padding: 16px; }
+    padding: 12px; }
     .ds-card .meta .info-wrap {
-      flex-grow: 1; }
+      flex-grow: 1;
+      margin: 0 0 12px; }
     .ds-card .meta .title {
       font-size: 17px;
       line-height: 24px;
       max-height: 4.23529em;
       overflow: hidden;
       font-weight: 600; }
     .ds-card .meta .excerpt {
       font-size: 14px;
       line-height: 20px;
       max-height: 4.28571em;
       overflow: hidden; }
     .ds-card .meta .context,
     .ds-card .meta .source {
       font-size: 13px;
-      color: #005A71; }
+      color: #737373; }
       [lwt-newtab-brighttext] .ds-card .meta .context, [lwt-newtab-brighttext]
       .ds-card .meta .source {
-        color: #A7FFFE; }
+        color: #B1B1B3; }
   .ds-card header {
     line-height: 24px;
     font-size: 17px;
     color: #0C0C0D; }
     [lwt-newtab-brighttext] .ds-card header {
       color: #F9F9FA; }
   .ds-card p {
     font-size: 14px;
     line-height: 20px;
-    color: #737373;
-    margin: 8px 0 0; }
+    color: #0C0C0D;
+    margin: 0; }
     [lwt-newtab-brighttext] .ds-card p {
-      color: #D7D7DB; }
+      color: #F9F9FA; }
 
 .ds-image {
   display: block;
   position: relative; }
   .ds-image img,
   .ds-image .broken-image {
     background-color: var(--newtab-card-placeholder-color);
     position: absolute;
@@ -3707,20 +3711,16 @@ a.firstrun-link {
     opacity: 1;
     transform: translateY(0); } }
 
 .trailhead {
   background: url("../data/content/assets/trailhead/accounts-form-bg.jpg") bottom/cover;
   color: #FFF;
   height: auto;
   top: 100px; }
-  @media (max-height: 700px) {
-    .trailhead {
-      position: absolute;
-      top: 20px; } }
   .trailhead a {
     color: #FFF;
     text-decoration: underline; }
   .trailhead input,
   .trailhead button {
     border-radius: 4px;
     padding: 10px; }
   .trailhead .trailheadInner {
@@ -3818,24 +3818,36 @@ a.firstrun-link {
         line-height: 20px; }
     .trailhead .trailheadForm form {
       position: relative; }
       .trailhead .trailheadForm form .error.active {
         inset-inline-start: 0;
         z-index: 0; }
     .trailhead .trailheadForm button,
     .trailhead .trailheadForm input {
-      border: 0;
       width: 100%; }
     .trailhead .trailheadForm input {
       background-color: #FFF;
+      border: 1px solid #737373;
+      box-shadow: none;
       color: #38383D;
-      font-size: 15px; }
+      font-size: 15px;
+      transition: border-color 150ms, box-shadow 150ms; }
+      .trailhead .trailheadForm input:hover {
+        border-color: #0C0C0D; }
+      .trailhead .trailheadForm input:focus {
+        border-color: #0A84FF;
+        box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
+      .trailhead .trailheadForm input.invalid {
+        border-color: #D70022; }
+      .trailhead .trailheadForm input.invalid:focus {
+        box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
     .trailhead .trailheadForm button {
       background-color: #0060DF;
+      border: 0;
       cursor: pointer;
       display: block;
       font-size: 15px;
       font-weight: 400;
       padding: 14px; }
       .trailhead .trailheadForm button:hover, .trailhead .trailheadForm button:focus {
         background-color: #0250BB; }
       .trailhead .trailheadForm button:focus {
@@ -3964,11 +3976,14 @@ a.firstrun-link {
 .inline-onboarding .outer-wrapper {
   position: relative; }
   .inline-onboarding .outer-wrapper .prefs-button button {
     position: absolute; }
 
 .inline-onboarding .asrouter-toggle {
   position: absolute; }
 
-@media (max-height: 700px) {
+@media (max-height: 760px), (max-width: 924px) {
   .activity-stream.welcome.inline-onboarding {
-    overflow: auto; } }
+    overflow: auto; }
+  .trailhead {
+    position: absolute;
+    top: 20px; } }
--- a/browser/components/newtab/css/activity-stream-windows.css
+++ b/browser/components/newtab/css/activity-stream-windows.css
@@ -115,18 +115,18 @@ body {
     --newtab-card-hairline-color: rgba(249, 249, 250, 0.1);
     --newtab-card-placeholder-color: #4A4A4F;
     --newtab-card-shadow: 0 1px 8px 0 rgba(12, 12, 13, 0.2);
     --newtab-snippets-background-color: #38383D;
     --newtab-snippets-hairline-color: rgba(255, 255, 255, 0.1);
     --trailhead-header-text-color: rgba(255, 255, 255, 0.6);
     --trailhead-cards-background-color: rgba(12, 12, 13, 0.1);
     --trailhead-card-button-background-color: rgba(12, 12, 13, 0.3);
-    --trailhead-card-button-background-hover-color: rgba(12, 12, 13, 0.4);
-    --trailhead-card-button-background-active-color: rgba(12, 12, 13, 0.5); }
+    --trailhead-card-button-background-hover-color: rgba(12, 12, 13, 0.5);
+    --trailhead-card-button-background-active-color: rgba(12, 12, 13, 0.7); }
 
 .icon {
   background-position: center center;
   background-repeat: no-repeat;
   background-size: 16px;
   -moz-context-properties: fill;
   display: inline-block;
   fill: var(--newtab-icon-primary-color);
@@ -1915,17 +1915,17 @@ main {
       outline: none; }
       [lwt-newtab-brighttext] .ds-card-grid.ds-card-grid-border .ds-card:not(.placeholder):hover {
         box-shadow: 0 0 0 5px #4A4A4F; }
     .ds-card-grid.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img {
       border-radius: 4px 4px 0 0; }
   .ds-card-grid.ds-card-grid-no-border .ds-card {
     background: none; }
     .ds-card-grid.ds-card-grid-no-border .ds-card .meta {
-      padding: 16px 0; }
+      padding: 12px 0; }
   .ds-column-5 .ds-card-grid,
   .ds-column-6 .ds-card-grid,
   .ds-column-7 .ds-card-grid,
   .ds-column-8 .ds-card-grid {
     grid-template-columns: repeat(2, 1fr); }
   .ds-column-9 .ds-card-grid,
   .ds-column-10 .ds-card-grid,
   .ds-column-11 .ds-card-grid,
@@ -1941,36 +1941,39 @@ main {
       .ds-column-11 .ds-card-grid.ds-card-grid-divisible-by-3 .title,
       .ds-column-12 .ds-card-grid.ds-card-grid-divisible-by-3 .title {
         font-size: 17px;
         line-height: 24px; }
     .ds-column-9 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-10 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-11 .ds-card-grid.ds-card-grid-divisible-by-4 .title,
     .ds-column-12 .ds-card-grid.ds-card-grid-divisible-by-4 .title {
-      font-size: 14px;
+      font-size: 15px;
       line-height: 20px;
-      max-height: 4.28571em;
+      max-height: 4em;
       overflow: hidden; }
   .ds-card-grid.empty {
     grid-template-columns: auto; }
 
 .ds-hero {
   position: relative; }
   .ds-hero header {
     font-weight: 600; }
   .ds-hero p {
     line-height: 1.538;
     margin: 8px 0; }
   .ds-hero .excerpt {
     font-size: 14px;
     line-height: 20px;
     max-height: 4.28571em;
     overflow: hidden;
-    margin: 4px 0 8px; }
+    color: #0C0C0D;
+    margin: 0 0 10px; }
+    [lwt-newtab-brighttext] .ds-hero .excerpt {
+      color: #F9F9FA; }
   .ds-hero .ds-card:not(.placeholder) {
     border: 0;
     padding-bottom: 20px; }
     .ds-hero .ds-card:not(.placeholder) p {
       margin-top: 4px; }
     .ds-hero .ds-card:not(.placeholder):hover {
       border: 0;
       box-shadow: none;
@@ -2027,31 +2030,31 @@ main {
       flex-direction: column;
       justify-content: space-between; }
       .ds-hero .wrapper .meta header {
         font-size: 22px;
         line-height: 28px;
         max-height: 5.09091em;
         overflow: hidden;
         color: #0C0C0D;
-        margin-bottom: 8px; }
+        margin-bottom: 0; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta header {
           color: #FFF; }
       .ds-hero .wrapper .meta .context {
         color: #008EA4; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta .context {
           color: #A7FFFE; }
       .ds-hero .wrapper .meta .source {
         font-size: 13px;
-        color: #005A71;
+        color: #737373;
         margin-bottom: 0;
         overflow-x: hidden;
         text-overflow: ellipsis; }
         [lwt-newtab-brighttext] .ds-hero .wrapper .meta .source {
-          color: #A7FFFE; }
+          color: #B1B1B3; }
   .ds-column-5 .ds-hero .wrapper,
   .ds-column-6 .ds-hero .wrapper,
   .ds-column-7 .ds-hero .wrapper,
   .ds-column-8 .ds-hero .wrapper {
     display: grid;
     grid-template-columns: repeat(2, 1fr);
     grid-column-gap: 24px; }
     .ds-column-5 .ds-hero .wrapper .img-wrapper,
@@ -2125,17 +2128,17 @@ main {
       .ds-column-10 .ds-hero .wrapper .img-wrapper,
       .ds-column-11 .ds-hero .wrapper .img-wrapper,
       .ds-column-12 .ds-hero .wrapper .img-wrapper {
         margin: 0; }
       .ds-column-9 .ds-hero .wrapper .img,
       .ds-column-10 .ds-hero .wrapper .img,
       .ds-column-11 .ds-hero .wrapper .img,
       .ds-column-12 .ds-hero .wrapper .img {
-        margin-bottom: 16px;
+        margin-bottom: 12px;
         height: 0;
         padding-top: 50%; }
       .ds-column-9 .ds-hero .wrapper .meta,
       .ds-column-10 .ds-hero .wrapper .meta,
       .ds-column-11 .ds-hero .wrapper .meta,
       .ds-column-12 .ds-hero .wrapper .meta {
         flex-grow: 1;
         display: flex;
@@ -2361,22 +2364,22 @@ main {
     line-height: 20px;
     margin: 0; }
   .ds-list-item .ds-list-item-info,
   .ds-list-item .ds-list-item-context {
     font-size: 14px;
     line-height: 20px;
     max-height: 1.42857em;
     overflow: hidden;
-    color: #005A71;
+    color: #737373;
     font-size: 13px;
     text-overflow: ellipsis; }
     [lwt-newtab-brighttext] .ds-list-item .ds-list-item-info, [lwt-newtab-brighttext]
     .ds-list-item .ds-list-item-context {
-      color: #A7FFFE; }
+      color: #B1B1B3; }
   .ds-list-item .ds-list-item-title {
     font-weight: 600;
     margin-bottom: 4px; }
   .ds-list-item .ds-list-item-text {
     display: flex;
     flex-direction: column;
     justify-content: space-between; }
   .ds-list-item .ds-list-image {
@@ -2620,50 +2623,51 @@ main {
       box-shadow: 0 0 0 1px #0A84FF inset, 0 0 0 1px #0A84FF, 0 0 0 5px rgba(10, 132, 255, 0.3);
       transition: box-shadow 150ms;
       border-radius: 4px;
       outline: none; }
   .ds-card .meta {
     display: flex;
     flex-direction: column;
     flex-grow: 1;
-    padding: 16px; }
+    padding: 12px; }
     .ds-card .meta .info-wrap {
-      flex-grow: 1; }
+      flex-grow: 1;
+      margin: 0 0 12px; }
     .ds-card .meta .title {
       font-size: 17px;
       line-height: 24px;
       max-height: 4.23529em;
       overflow: hidden;
       font-weight: 600; }
     .ds-card .meta .excerpt {
       font-size: 14px;
       line-height: 20px;
       max-height: 4.28571em;
       overflow: hidden; }
     .ds-card .meta .context,
     .ds-card .meta .source {
       font-size: 13px;
-      color: #005A71; }
+      color: #737373; }
       [lwt-newtab-brighttext] .ds-card .meta .context, [lwt-newtab-brighttext]
       .ds-card .meta .source {
-        color: #A7FFFE; }
+        color: #B1B1B3; }
   .ds-card header {
     line-height: 24px;
     font-size: 17px;
     color: #0C0C0D; }
     [lwt-newtab-brighttext] .ds-card header {
       color: #F9F9FA; }
   .ds-card p {
     font-size: 14px;
     line-height: 20px;
-    color: #737373;
-    margin: 8px 0 0; }
+    color: #0C0C0D;
+    margin: 0; }
     [lwt-newtab-brighttext] .ds-card p {
-      color: #D7D7DB; }
+      color: #F9F9FA; }
 
 .ds-image {
   display: block;
   position: relative; }
   .ds-image img,
   .ds-image .broken-image {
     background-color: var(--newtab-card-placeholder-color);
     position: absolute;
@@ -3704,20 +3708,16 @@ a.firstrun-link {
     opacity: 1;
     transform: translateY(0); } }
 
 .trailhead {
   background: url("../data/content/assets/trailhead/accounts-form-bg.jpg") bottom/cover;
   color: #FFF;
   height: auto;
   top: 100px; }
-  @media (max-height: 700px) {
-    .trailhead {
-      position: absolute;
-      top: 20px; } }
   .trailhead a {
     color: #FFF;
     text-decoration: underline; }
   .trailhead input,
   .trailhead button {
     border-radius: 4px;
     padding: 10px; }
   .trailhead .trailheadInner {
@@ -3815,24 +3815,36 @@ a.firstrun-link {
         line-height: 20px; }
     .trailhead .trailheadForm form {
       position: relative; }
       .trailhead .trailheadForm form .error.active {
         inset-inline-start: 0;
         z-index: 0; }
     .trailhead .trailheadForm button,
     .trailhead .trailheadForm input {
-      border: 0;
       width: 100%; }
     .trailhead .trailheadForm input {
       background-color: #FFF;
+      border: 1px solid #737373;
+      box-shadow: none;
       color: #38383D;
-      font-size: 15px; }
+      font-size: 15px;
+      transition: border-color 150ms, box-shadow 150ms; }
+      .trailhead .trailheadForm input:hover {
+        border-color: #0C0C0D; }
+      .trailhead .trailheadForm input:focus {
+        border-color: #0A84FF;
+        box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
+      .trailhead .trailheadForm input.invalid {
+        border-color: #D70022; }
+      .trailhead .trailheadForm input.invalid:focus {
+        box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
     .trailhead .trailheadForm button {
       background-color: #0060DF;
+      border: 0;
       cursor: pointer;
       display: block;
       font-size: 15px;
       font-weight: 400;
       padding: 14px; }
       .trailhead .trailheadForm button:hover, .trailhead .trailheadForm button:focus {
         background-color: #0250BB; }
       .trailhead .trailheadForm button:focus {
@@ -3961,11 +3973,14 @@ a.firstrun-link {
 .inline-onboarding .outer-wrapper {
   position: relative; }
   .inline-onboarding .outer-wrapper .prefs-button button {
     position: absolute; }
 
 .inline-onboarding .asrouter-toggle {
   position: absolute; }
 
-@media (max-height: 700px) {
+@media (max-height: 760px), (max-width: 924px) {
   .activity-stream.welcome.inline-onboarding {
-    overflow: auto; } }
+    overflow: auto; }
+  .trailhead {
+    position: absolute;
+    top: 20px; } }
--- a/browser/components/newtab/data/content/activity-stream.bundle.js
+++ b/browser/components/newtab/data/content/activity-stream.bundle.js
@@ -192,17 +192,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 ["ADDONS_INFO_REQUEST", "ADDONS_INFO_RESPONSE", "ARCHIVE_FROM_POCKET", "AS_ROUTER_INITIALIZED", "AS_ROUTER_PREF_CHANGED", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISCOVERY_STREAM_CONFIG_CHANGE", "DISCOVERY_STREAM_CONFIG_SETUP", "DISCOVERY_STREAM_CONFIG_SET_VALUE", "DISCOVERY_STREAM_FEEDS_UPDATE", "DISCOVERY_STREAM_IMPRESSION_STATS", "DISCOVERY_STREAM_LAYOUT_RESET", "DISCOVERY_STREAM_LAYOUT_UPDATE", "DISCOVERY_STREAM_LINK_BLOCKED", "DISCOVERY_STREAM_LOADED_CONTENT", "DISCOVERY_STREAM_OPT_OUT", "DISCOVERY_STREAM_SPOCS_CAPS", "DISCOVERY_STREAM_SPOCS_ENDPOINT", "DISCOVERY_STREAM_SPOCS_FILL", "DISCOVERY_STREAM_SPOCS_UPDATE", "DISCOVERY_STREAM_SPOC_IMPRESSION", "DOWNLOAD_CHANGED", "FAKE_FOCUS_SEARCH", "FILL_SEARCH_TERM", "HANDOFF_SEARCH_TO_AWESOMEBAR", "HIDE_SEARCH", "INIT", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "POCKET_CTA", "POCKET_LINK_DELETED_OR_ARCHIVED", "POCKET_LOGGED_IN", "POCKET_WAITING_FOR_SPOC", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SHOW_SEARCH", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_PREVIEW_MODE", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_EDIT", "TOP_SITES_INSERT", "TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_PIN", "TOP_SITES_PREFS_UPDATED", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "TOTAL_BOOKMARKS_REQUEST", "TOTAL_BOOKMARKS_RESPONSE", "UNINIT", "UPDATE_PINNED_SEARCH_SHORTCUTS", "UPDATE_SEARCH_SHORTCUTS", "UPDATE_SECTION_PREFS", "WEBEXT_CLICK", "WEBEXT_DISMISS"]) {
+for (const type of ["ADDONS_INFO_REQUEST", "ADDONS_INFO_RESPONSE", "ARCHIVE_FROM_POCKET", "AS_ROUTER_INITIALIZED", "AS_ROUTER_PREF_CHANGED", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISCOVERY_STREAM_CONFIG_CHANGE", "DISCOVERY_STREAM_CONFIG_SETUP", "DISCOVERY_STREAM_CONFIG_SET_VALUE", "DISCOVERY_STREAM_FEEDS_UPDATE", "DISCOVERY_STREAM_FEED_UPDATE", "DISCOVERY_STREAM_IMPRESSION_STATS", "DISCOVERY_STREAM_LAYOUT_RESET", "DISCOVERY_STREAM_LAYOUT_UPDATE", "DISCOVERY_STREAM_LINK_BLOCKED", "DISCOVERY_STREAM_LOADED_CONTENT", "DISCOVERY_STREAM_OPT_OUT", "DISCOVERY_STREAM_SPOCS_CAPS", "DISCOVERY_STREAM_SPOCS_ENDPOINT", "DISCOVERY_STREAM_SPOCS_FILL", "DISCOVERY_STREAM_SPOCS_UPDATE", "DISCOVERY_STREAM_SPOC_IMPRESSION", "DOWNLOAD_CHANGED", "FAKE_FOCUS_SEARCH", "FILL_SEARCH_TERM", "HANDOFF_SEARCH_TO_AWESOMEBAR", "HIDE_SEARCH", "INIT", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "POCKET_CTA", "POCKET_LINK_DELETED_OR_ARCHIVED", "POCKET_LOGGED_IN", "POCKET_WAITING_FOR_SPOC", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SHOW_SEARCH", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_PREVIEW_MODE", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_EDIT", "TOP_SITES_INSERT", "TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_PIN", "TOP_SITES_PREFS_UPDATED", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "TOTAL_BOOKMARKS_REQUEST", "TOTAL_BOOKMARKS_RESPONSE", "UNINIT", "UPDATE_PINNED_SEARCH_SHORTCUTS", "UPDATE_SEARCH_SHORTCUTS", "UPDATE_SECTION_PREFS", "WEBEXT_CLICK", "WEBEXT_DISMISS"]) {
   actionTypes[type] = type;
 } // These are acceptable actions for AS Router messages to have. They can show up
 // as call-to-action buttons in snippets, onboarding tour, etc.
 
 
 const ASRouterActions = {};
 
 for (const type of ["INSTALL_ADDON_FROM_URL", "OPEN_APPLICATIONS_MENU", "OPEN_PRIVATE_BROWSER_WINDOW", "OPEN_URL", "OPEN_ABOUT_PAGE", "OPEN_PREFERENCES_PAGE", "SHOW_FIREFOX_ACCOUNTS", "PIN_CURRENT_TAB"]) {
@@ -2196,16 +2196,17 @@ class ASRouterUISurface extends react__W
 
   renderTrailhead() {
     const {
       message
     } = this.state;
 
     if (message.template === "trailhead") {
       return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(_templates_Trailhead_Trailhead__WEBPACK_IMPORTED_MODULE_13__["Trailhead"], {
+        document: this.props.document,
         message: message,
         onAction: ASRouterUtils.executeAction,
         onDoneButton: this.dismissBundle(this.state.bundle.bundle),
         sendUserActionTelemetry: this.sendUserActionTelemetry,
         dispatch: this.props.dispatch,
         fxaEndpoint: this.props.fxaEndpoint
       });
     }
@@ -2724,17 +2725,20 @@ class ModalOverlayWrapper extends react_
     const {
       props
     } = this;
     return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
       className: "modalOverlayOuter active",
       onClick: props.onClose,
       role: "presentation"
     }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
-      className: `modalOverlayInner active ${props.innerClassName || ""}`
+      className: `modalOverlayInner active ${props.innerClassName || ""}`,
+      "aria-labelledby": props.headerId,
+      id: props.id,
+      role: "dialog"
     }, props.children));
   }
 
 }
 ModalOverlayWrapper.defaultProps = {
   document: global.document
 };
 class ModalOverlay extends react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent {
@@ -2983,31 +2987,32 @@ class _StartupOverlay extends react__WEB
   constructor(props) {
     super(props);
     this.onInputChange = this.onInputChange.bind(this);
     this.onSubmit = this.onSubmit.bind(this);
     this.clickSkip = this.clickSkip.bind(this);
     this.initScene = this.initScene.bind(this);
     this.removeOverlay = this.removeOverlay.bind(this);
     this.onInputInvalid = this.onInputInvalid.bind(this);
+    this.utmParams = "utm_source=activity-stream&utm_campaign=firstrun&utm_medium=referral&utm_term=trailhead-control";
     this.state = {
       emailInput: "",
       overlayRemoved: false,
       flowId: "",
       flowBeginTime: 0
     };
     this.didFetch = false;
   }
 
   async componentWillUpdate() {
     if (this.props.fxa_endpoint && !this.didFetch) {
       try {
         this.didFetch = true;
-        const fxaParams = "entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&form_type=email";
-        const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}`, {
+        const fxaParams = "entrypoint=activity-stream-firstrun&form_type=email";
+        const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}&${this.utmParams}`, {
           credentials: "omit"
         });
 
         if (response.status === 200) {
           const {
             flowId,
             flowBeginTime
           } = await response.json();
@@ -3116,24 +3121,24 @@ class _StartupOverlay extends react__WEB
   render() {
     // When skipping the onboarding tour we show AS but we are still on
     // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered
     if (this.state.overlayRemoved) {
       return null;
     }
 
     let termsLink = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("a", {
-      href: `${this.props.fxa_endpoint}/legal/terms`,
+      href: `${this.props.fxa_endpoint}/legal/terms?${this.utmParams}`,
       target: "_blank",
       rel: "noopener noreferrer"
     }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
       id: "firstrun_terms_of_service"
     }));
     let privacyLink = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("a", {
-      href: `${this.props.fxa_endpoint}/legal/privacy`,
+      href: `${this.props.fxa_endpoint}/legal/privacy?${this.utmParams}`,
       target: "_blank",
       rel: "noopener noreferrer"
     }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
       id: "firstrun_privacy_notice"
     }));
     return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
       className: `overlay-wrapper ${this.state.show ? "show" : ""}`
     }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
@@ -3149,17 +3154,17 @@ class _StartupOverlay extends react__WEB
     }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
       id: "firstrun_title"
     })), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("p", {
       className: "firstrun-content"
     }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
       id: "firstrun_content"
     })), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("a", {
       className: "firstrun-link",
-      href: "https://www.mozilla.org/firefox/features/sync/",
+      href: `https://www.mozilla.org/firefox/features/sync/?${this.utmParams}`,
       target: "_blank",
       rel: "noopener noreferrer"
     }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
       id: "firstrun_learn_more_link"
     }))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
       className: "firstrun-sign-in"
     }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("p", {
       className: "form-header"
@@ -3195,16 +3200,24 @@ class _StartupOverlay extends react__WEB
       name: "utm_source",
       type: "hidden",
       value: "activity-stream"
     }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", {
       name: "utm_campaign",
       type: "hidden",
       value: "firstrun"
     }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", {
+      name: "utm_medium",
+      type: "hidden",
+      value: "referral"
+    }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", {
+      name: "utm_term",
+      type: "hidden",
+      value: "trailhead-control"
+    }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", {
       name: "flow_id",
       type: "hidden",
       value: this.state.flowId
     }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", {
       name: "flow_begin_time",
       type: "hidden",
       value: this.state.flowBeginTime
     }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("span", {
@@ -3274,51 +3287,57 @@ module.exports = ReactRedux;
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
 function _extends() { _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; }; return _extends.apply(this, arguments); }
 
 
 
 
 
 
-const FLUENT_FILES = ["branding/brand.ftl", "browser/branding/sync-brand.ftl", // These are finalized strings exposed to localizers
-"browser/newtab/onboarding.ftl", // These are WIP/in-development strings that only get used if the string
-// doesn't already exist in onboarding.ftl above
-"trailhead.ftl"];
+const FLUENT_FILES = ["branding/brand.ftl", "browser/branding/brandings.ftl", "browser/branding/sync-brand.ftl", "browser/newtab/onboarding.ftl"]; // From resource://devtools/client/shared/focus.js
+
+const FOCUSABLE_SELECTOR = ["a[href]:not([tabindex='-1'])", "button:not([disabled]):not([tabindex='-1'])", "iframe:not([tabindex='-1'])", "input:not([disabled]):not([tabindex='-1'])", "select:not([disabled]):not([tabindex='-1'])", "textarea:not([disabled]):not([tabindex='-1'])", "[tabindex]:not([tabindex='-1'])"].join(", ");
 class _Trailhead extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureComponent {
   constructor(props) {
     super(props);
     this.closeModal = this.closeModal.bind(this);
     this.hideCardPanel = this.hideCardPanel.bind(this);
     this.onInputChange = this.onInputChange.bind(this);
+    this.onStartBlur = this.onStartBlur.bind(this);
     this.onSubmit = this.onSubmit.bind(this);
     this.onInputInvalid = this.onInputInvalid.bind(this);
+    this.onCardAction = this.onCardAction.bind(this);
     this.state = {
       emailInput: "",
       isModalOpen: true,
       showCardPanel: true,
       showCards: false,
       flowId: "",
       flowBeginTime: 0
     };
     this.didFetch = false;
   }
 
+  get dialog() {
+    return this.props.document.getElementById("trailheadDialog");
+  }
+
   async componentWillMount() {
     FLUENT_FILES.forEach(file => {
       const link = document.head.appendChild(document.createElement("link"));
       link.href = file;
       link.rel = "localization";
     });
 
     if (this.props.fxaEndpoint && !this.didFetch) {
       try {
         this.didFetch = true;
-        const fxaParams = "entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&utm_term=trailhead&form_type=email";
-        const response = await fetch(`${this.props.fxaEndpoint}/metrics-flow?${fxaParams}`, {
+        const url = new URL(`${this.props.fxaEndpoint}/metrics-flow?entrypoint=activity-stream-firstrun&form_type=email`);
+        this.addUtmParams(url);
+        const response = await fetch(url, {
           credentials: "omit"
         });
 
         if (response.status === 200) {
           const {
             flowId,
             flowBeginTime
           } = await response.json();
@@ -3343,54 +3362,70 @@ class _Trailhead extends react__WEBPACK_
           }
         }));
       }
     }
   }
 
   componentDidMount() {
     // We need to remove hide-main since we should show it underneath everything that has rendered
-    global.document.body.classList.remove("hide-main"); // Add inline-onboarding class to disable fixed search header and fixed positioned settings icon
-
-    global.document.body.classList.add("inline-onboarding");
-
-    if (!this.props.message.content) {
+    this.props.document.body.classList.remove("hide-main"); // Add inline-onboarding class to disable fixed search header and fixed positioned settings icon
+
+    this.props.document.body.classList.add("inline-onboarding"); // The rest of the page is "hidden" when the modal is open
+
+    if (this.props.message.content) {
+      this.props.document.getElementById("root").setAttribute("aria-hidden", "true"); // Start with focus in the email input box
+
+      this.dialog.querySelector("input[name=email]").focus();
+    } else {
       // No modal overlay, let the user scroll and deal them some cards.
-      global.document.body.classList.remove("welcome");
+      this.props.document.body.classList.remove("welcome");
 
       if (this.props.message.includeBundle || this.props.message.cards) {
         this.revealCards();
       }
     }
   }
 
-  componentDidUnmount() {
-    global.document.body.classList.remove("inline-onboarding");
+  componentWillUnmount() {
+    this.props.document.body.classList.remove("inline-onboarding");
   }
 
   onInputChange(e) {
     let error = e.target.previousSibling;
     this.setState({
       emailInput: e.target.value
     });
     error.classList.remove("active");
     e.target.classList.remove("invalid");
   }
 
+  onStartBlur(event) {
+    // Make sure focus stays within the dialog when tabbing from the button
+    const {
+      dialog
+    } = this;
+
+    if (event.relatedTarget && !(dialog.compareDocumentPosition(event.relatedTarget) & dialog.DOCUMENT_POSITION_CONTAINED_BY)) {
+      dialog.querySelector(FOCUSABLE_SELECTOR).focus();
+    }
+  }
+
   onSubmit() {
     this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({
       event: "SUBMIT_EMAIL",
       ...this._getFormInfo()
     }));
     global.addEventListener("visibilitychange", this.closeModal);
   }
 
   closeModal() {
     global.removeEventListener("visibilitychange", this.closeModal);
-    global.document.body.classList.remove("welcome");
+    this.props.document.body.classList.remove("welcome");
+    this.props.document.getElementById("root").removeAttribute("aria-hidden");
     this.setState({
       isModalOpen: false
     });
     this.revealCards();
     this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({
       event: "SKIPPED_SIGNIN",
       ...this._getFormInfo()
     }));
@@ -3434,50 +3469,99 @@ class _Trailhead extends react__WEBPACK_
     if (str.property_id) {
       str.value = this.props.intl.formatMessage({
         id: str.property_id
       });
     }
 
     return str.value;
   }
+  /**
+   * Takes in a url as a string or URL object and returns a URL object with the
+   * utm_* parameters added to it. If a URL object is passed in, the paraemeters
+   * are added to it (the return value can be ignored in that case as it's the
+   * same object).
+   */
+
+
+  addUtmParams(url, isCard = false) {
+    let returnUrl = url;
+
+    if (typeof returnUrl === "string") {
+      returnUrl = new URL(url);
+    }
+
+    returnUrl.searchParams.append("utm_source", "activity-stream");
+    returnUrl.searchParams.append("utm_campaign", "firstrun");
+    returnUrl.searchParams.append("utm_medium", "referral");
+    returnUrl.searchParams.append("utm_term", `${this.props.message.utm_term}${isCard ? "-card" : ""}`);
+    return returnUrl;
+  }
+
+  onCardAction(action) {
+    let actionUpdates = {};
+
+    if (action.type === "OPEN_URL") {
+      let url = new URL(action.data.args);
+      this.addUtmParams(url, true);
+
+      if (action.addFlowParams) {
+        url.searchParams.append("flow_id", this.state.flowId);
+        url.searchParams.append("flow_begin_time", this.state.flowBeginTime);
+      }
+
+      actionUpdates = {
+        data: { ...action.data,
+          args: url
+        }
+      };
+    }
+
+    this.props.onAction({ ...action,
+      ...actionUpdates
+    });
+  }
 
   render() {
     const {
       props
     } = this;
     const {
       bundle: cards,
-      content
+      content,
+      utm_term
     } = props.message;
     const innerClassName = ["trailhead", content && content.className].filter(v => v).join(" ");
     return react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_4___default.a.Fragment, null, this.state.isModalOpen && content ? react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_components_ModalOverlay_ModalOverlay__WEBPACK_IMPORTED_MODULE_2__["ModalOverlayWrapper"], {
       innerClassName: innerClassName,
-      onClose: this.closeModal
+      onClose: this.closeModal,
+      id: "trailheadDialog",
+      headerId: "trailheadHeader"
     }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", {
       className: "trailheadInner"
     }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", {
       className: "trailheadContent"
     }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("h1", {
-      "data-l10n-id": content.title.string_id
+      "data-l10n-id": content.title.string_id,
+      id: "trailheadHeader"
     }, this.getStringValue(content.title)), content.subtitle && react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("p", {
       "data-l10n-id": content.subtitle.string_id
     }, this.getStringValue(content.subtitle)), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("ul", {
       className: "trailheadBenefits"
     }, content.benefits.map(item => react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("li", {
       key: item.id,
       className: item.id
     }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("h3", {
       "data-l10n-id": item.title.string_id
     }, this.getStringValue(item.title)), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("p", {
       "data-l10n-id": item.text.string_id
     }, this.getStringValue(item.text))))), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("a", {
       className: "trailheadLearn",
       "data-l10n-id": content.learn.text.string_id,
-      href: content.learn.url
+      href: this.addUtmParams(content.learn.url)
     }, this.getStringValue(content.learn.text))), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", {
       className: "trailheadForm"
     }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("h3", {
       "data-l10n-id": content.form.title.string_id
     }, this.getStringValue(content.form.title)), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("p", {
       "data-l10n-id": content.form.text.string_id
     }, this.getStringValue(content.form.text)), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("form", {
       method: "get",
@@ -3507,65 +3591,71 @@ class _Trailhead extends react__WEBPACK_
       value: "activity-stream"
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", {
       name: "utm_campaign",
       type: "hidden",
       value: "firstrun"
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", {
       name: "utm_term",
       type: "hidden",
-      value: "trailhead"
+      value: utm_term
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", {
       name: "flow_id",
       type: "hidden",
       value: this.state.flowId
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", {
       name: "flow_begin_time",
       type: "hidden",
       value: this.state.flowBeginTime
+    }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", {
+      name: "style",
+      type: "hidden",
+      value: "trailhead"
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("p", {
       "data-l10n-id": "onboarding-join-form-email-error",
       className: "error"
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", {
       "data-l10n-id": content.form.email.string_id,
       placeholder: this.getStringValue(content.form.email),
       name: "email",
       type: "email",
       required: "true",
       onInvalid: this.onInputInvalid,
       onChange: this.onInputChange
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("p", {
       className: "trailheadTerms",
       "data-l10n-id": "onboarding-join-form-legal"
     }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("a", {
       "data-l10n-name": "terms",
-      href: "https://accounts.firefox.com/legal/terms"
+      href: this.addUtmParams("https://accounts.firefox.com/legal/terms")
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("a", {
       "data-l10n-name": "privacy",
-      href: "https://accounts.firefox.com/legal/privacy"
+      href: this.addUtmParams("https://accounts.firefox.com/legal/privacy")
     })), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("button", {
       "data-l10n-id": content.form.button.string_id,
       type: "submit"
     }, this.getStringValue(content.form.button))))), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("button", {
       className: "trailheadStart",
       "data-l10n-id": content.skipButton.string_id,
+      onBlur: this.onStartBlur,
       onClick: this.closeModal
     }, this.getStringValue(content.skipButton))) : null, cards && cards.length ? react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", {
       className: `trailheadCards ${this.state.showCardPanel ? "expanded" : "collapsed"}`
     }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", {
-      className: "trailheadCardsInner"
+      className: "trailheadCardsInner",
+      "aria-hidden": !this.state.showCards
     }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("h1", {
       "data-l10n-id": "onboarding-welcome-header"
     }), react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", {
       className: `trailheadCardGrid${this.state.showCards ? " show" : ""}`
     }, cards.map(card => react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_OnboardingMessage_OnboardingMessage__WEBPACK_IMPORTED_MODULE_3__["OnboardingCard"], _extends({
       key: card.id,
       className: "trailheadCard",
       sendUserActionTelemetry: props.sendUserActionTelemetry,
-      onAction: props.onAction,
+      onAction: this.onCardAction,
       UISurface: "TRAILHEAD"
     }, card)))), this.state.showCardPanel && react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("button", {
       className: "icon icon-dismiss",
       onClick: this.hideCardPanel,
       title: props.intl.formatMessage({
         id: "menu_action_dismiss"
       }),
       "aria-label": props.intl.formatMessage({
@@ -8333,55 +8423,63 @@ const selectLayoutRender = (state, prefs
     layout,
     feeds,
     spocs
   } = state;
   let spocIndex = 0;
   let bufferRollCache = []; // Records the chosen and unchosen spocs by the probability selection.
 
   let chosenSpocs = new Set();
-  let unchosenSpocs = new Set(); // rickRollCache stores random probability values for each spoc position. This cache is empty
-  // on page refresh and gets filled with random values on first render inside maybeInjectSpocs.
-
-  const isFirstRun = !rickRollCache.length;
+  let unchosenSpocs = new Set();
+
+  function rollForSpocs(data, spocsConfig) {
+    const recommendations = [...data.recommendations];
+
+    for (let position of spocsConfig.positions) {
+      const spoc = spocs.data.spocs[spocIndex];
+
+      if (!spoc) {
+        break;
+      } // Cache random number for a position
+
+
+      let rickRoll;
+
+      if (!rickRollCache.length) {
+        rickRoll = Math.random();
+        bufferRollCache.push(rickRoll);
+      } else {
+        rickRoll = rickRollCache.shift();
+        bufferRollCache.push(rickRoll);
+      }
+
+      if (rickRoll <= spocsConfig.probability) {
+        spocIndex++;
+        recommendations.splice(position.index, 0, spoc);
+        chosenSpocs.add(spoc);
+      } else {
+        unchosenSpocs.add(spoc);
+      }
+    }
+
+    return { ...data,
+      recommendations
+    };
+  }
 
   function maybeInjectSpocs(data, spocsConfig) {
-    if (data && spocsConfig && spocsConfig.positions && spocsConfig.positions.length && spocs.data.spocs && spocs.data.spocs.length) {
-      const recommendations = [...data.recommendations];
-
-      for (let position of spocsConfig.positions) {
-        const spoc = spocs.data.spocs[spocIndex];
-
-        if (!spoc) {
-          break;
-        } // Cache random number for a position
-
-
-        let rickRoll;
-
-        if (isFirstRun) {
-          rickRoll = Math.random();
-          rickRollCache.push(rickRoll);
-        } else {
-          rickRoll = rickRollCache.shift();
-          bufferRollCache.push(rickRoll);
-        }
-
-        if (rickRoll <= spocsConfig.probability) {
-          spocIndex++;
-          recommendations.splice(position.index, 0, spoc);
-          chosenSpocs.add(spoc);
-        } else {
-          unchosenSpocs.add(spoc);
-        }
-      }
-
-      return { ...data,
-        recommendations
-      };
+    // Do we ever expect to possibly have a spoc.
+    if (data && spocsConfig && spocsConfig.positions && spocsConfig.positions.length) {
+      // We expect a spoc, spocs are loaded, but the server returned no spocs.
+      if (!spocs.data.spocs || !spocs.data.spocs.length) {
+        return data;
+      } // We expect a spoc, spocs are loaded, and we have spocs available.
+
+
+      return rollForSpocs(data, spocsConfig);
     }
 
     return data;
   }
 
   const positions = {};
   const DS_COMPONENTS = ["Message", "SectionTitle", "Navigation", "CardGrid", "Hero", "HorizontalRule", "List"];
   const filterArray = [];
@@ -8389,66 +8487,87 @@ const selectLayoutRender = (state, prefs
   if (!prefs["feeds.topsites"]) {
     filterArray.push("TopSites");
   }
 
   if (!prefs["feeds.section.topstories"]) {
     filterArray.push(...DS_COMPONENTS);
   }
 
-  const layoutRender = layout.map(row => ({ ...row,
-    // Loops through desired components and adds a .data property
-    // containing data from feeds
-    components: row.components.filter(c => !filterArray.includes(c.type)).map(component => {
-      if (!component.feed || !feeds.data[component.feed.url]) {
-        return component;
-      }
-
-      positions[component.type] = positions[component.type] || 0;
-      let {
-        data
-      } = feeds.data[component.feed.url];
-
-      if (component && component.properties && component.properties.offset) {
-        data = { ...data,
-          recommendations: data.recommendations.slice(component.properties.offset)
-        };
-      }
-
-      data = maybeInjectSpocs(data, component.spocs); // If empty, fill rickRollCache with random probability values from bufferRollCache
-
-      if (!rickRollCache.length) {
-        rickRollCache.push(...bufferRollCache);
-      }
-
-      let items = 0;
-
-      if (component.properties && component.properties.items) {
-        items = Math.min(component.properties.items, data.recommendations.length);
-      } // loop through a component items
-      // Store the items position sequentially for multiple components of the same type.
-      // Example: A second card grid starts pos offset from the last card grid.
-
-
-      for (let i = 0; i < items; i++) {
-        data.recommendations[i].pos = positions[component.type]++;
-      }
-
-      return { ...component,
-        data
+  const handleComponent = component => {
+    positions[component.type] = positions[component.type] || 0;
+    let {
+      data
+    } = feeds.data[component.feed.url];
+
+    if (component && component.properties && component.properties.offset) {
+      data = { ...data,
+        recommendations: data.recommendations.slice(component.properties.offset)
       };
-    })
-  })).filter(row => row.components.length); // Generate the payload for the SPOCS Fill ping. Note that a SPOC could be rejected
+    }
+
+    data = maybeInjectSpocs(data, component.spocs);
+    let items = 0;
+
+    if (component.properties && component.properties.items) {
+      items = Math.min(component.properties.items, data.recommendations.length);
+    } // loop through a component items
+    // Store the items position sequentially for multiple components of the same type.
+    // Example: A second card grid starts pos offset from the last card grid.
+
+
+    for (let i = 0; i < items; i++) {
+      data.recommendations[i].pos = positions[component.type]++;
+    }
+
+    return { ...component,
+      data
+    };
+  };
+
+  const renderLayout = () => {
+    const renderedLayoutArray = [];
+
+    for (const row of layout.filter(r => r.components.length)) {
+      let components = [];
+      renderedLayoutArray.push({ ...row,
+        components
+      });
+
+      for (const component of row.components.filter(c => !filterArray.includes(c.type))) {
+        if (component.feed) {
+          const spocsConfig = component.spocs; // Are we still waiting on a feed/spocs, render what we have, and bail out early.
+
+          if (!feeds.data[component.feed.url] || spocsConfig && spocsConfig.positions && spocsConfig.positions.length && !spocs.loaded) {
+            return renderedLayoutArray;
+          }
+
+          components.push(handleComponent(component));
+        } else {
+          components.push(component);
+        }
+      }
+    }
+
+    return renderedLayoutArray;
+  };
+
+  const layoutRender = renderLayout(layout); // If empty, fill rickRollCache with random probability values from bufferRollCache
+
+  if (!rickRollCache.length) {
+    rickRollCache.push(...bufferRollCache);
+  } // Generate the payload for the SPOCS Fill ping. Note that a SPOC could be rejected
   // by the `probability_selection` first, then gets chosen for the next position. For
   // all other SPOCS that never went through the probabilistic selection, its reason will
   // be "out_of_position".
 
+
   let spocsFill = [];
 
-  if (spocs.data.spocs) {
+  if (spocs.loaded && feeds.loaded && spocs.data.spocs) {
     const chosenSpocsFill = [...chosenSpocs].map(spoc => ({
       id: spoc.id,
       reason: "n/a",
       displayed: 1,
       full_recalc: 0
     }));
     const unchosenSpocsFill = [...unchosenSpocs].filter(spoc => !chosenSpocs.has(spoc)).map(spoc => ({
       id: spoc.id,
@@ -8674,27 +8793,22 @@ class DiscoveryStreamBase_DiscoveryStrea
   render() {
     // Select layout render data by adding spocs and position to recommendations
     const {
       layoutRender,
       spocsFill
     } = selectLayoutRender(this.props.DiscoveryStream, this.props.Prefs.values, rickRollCache);
     const {
       config,
-      feeds,
-      spocs
-    } = this.props.DiscoveryStream;
-
-    if (!spocs.loaded || !feeds.loaded) {
-      return null;
-    } // Send SPOCS Fill if any. Note that it should not send it again if the same
+      spocs,
+      feeds
+    } = this.props.DiscoveryStream; // Send SPOCS Fill if any. Note that it should not send it again if the same
     // page gets re-rendered by state changes.
 
-
-    if (spocsFill.length && !this._spocsFillSent) {
+    if (spocs.loaded && feeds.loaded && spocsFill.length && !this._spocsFillSent) {
       this.props.dispatch(Actions["actionCreators"].DiscoveryStreamSpocsFill({
         spoc_fills: spocsFill
       }));
       this._spocsFillSent = true;
     } // Allow rendering without extracting special components
 
 
     if (!config.collapsible) {
@@ -8717,17 +8831,22 @@ class DiscoveryStreamBase_DiscoveryStrea
           }
         }
       }
 
       return null;
     }; // Get "topstories" Section state for default values
 
 
-    const topStories = this.props.Sections.find(s => s.id === "topstories"); // Extract TopSites to render before the rest and Message to use for header
+    const topStories = this.props.Sections.find(s => s.id === "topstories");
+
+    if (!topStories) {
+      return null;
+    } // Extract TopSites to render before the rest and Message to use for header
+
 
     const topSites = extractComponent("TopSites");
     const message = extractComponent("Message") || {
       header: {
         link_text: topStories.learnMore.link.id,
         link_url: topStories.learnMore.link.href,
         title: topStories.title
       }
@@ -8760,16 +8879,20 @@ class DiscoveryStreamBase_DiscoveryStrea
     return external_React_default.a.createElement("div", {
       className: "discovery-stream ds-layout"
     }, layoutRender.map((row, rowIndex) => external_React_default.a.createElement("div", {
       key: `row-${rowIndex}`,
       className: `ds-column ds-column-${row.width}`
     }, external_React_default.a.createElement("div", {
       className: "ds-column-grid"
     }, row.components.map((component, componentIndex) => {
+      if (!component) {
+        return null;
+      }
+
       styles[rowIndex] = [...(styles[rowIndex] || []), component.styles];
       return external_React_default.a.createElement("div", {
         key: `component-${componentIndex}`
       }, this.renderComponent(component, row.width));
     })))), this.renderStyles(styles));
   }
 
 }
@@ -11781,17 +11904,17 @@ class CachedIterable {
 
     if (seen.length === 0 || seen[seen.length - 1].done === false) {
       seen.push(iterator.next());
     }
   }
 
 }
 // CONCATENATED MODULE: ./node_modules/fluent/src/fallback.js
-function _asyncIterator(iterable) { var method; if (typeof Symbol !== "undefined") { if (Symbol.asyncIterator) { method = iterable[Symbol.asyncIterator]; if (method != null) return method.call(iterable); } if (Symbol.iterator) { method = iterable[Symbol.iterator]; if (method != null) return method.call(iterable); } } throw new TypeError("Object is not async iterable"); }
+function _asyncIterator(iterable) { var method; if (typeof Symbol === "function") { if (Symbol.asyncIterator) { method = iterable[Symbol.asyncIterator]; if (method != null) return method.call(iterable); } if (Symbol.iterator) { method = iterable[Symbol.iterator]; if (method != null) return method.call(iterable); } } throw new TypeError("Object is not async iterable"); }
 
 /*
  * @overview
  *
  * Functions for managing ordered sequences of MessageContexts.
  *
  * An ordered iterable of MessageContext instances can represent the current
  * negotiated fallback chain of languages.  This iterable can be used to find
@@ -13226,21 +13349,31 @@ function DiscoveryStream(prevState = INI
     case Actions["actionTypes"].DISCOVERY_STREAM_LAYOUT_RESET:
       return { ...INITIAL_STATE.DiscoveryStream,
         config: prevState.config
       };
 
     case Actions["actionTypes"].DISCOVERY_STREAM_FEEDS_UPDATE:
       return { ...prevState,
         feeds: { ...prevState.feeds,
-          data: action.data || prevState.feeds.data,
           loaded: true
         }
       };
 
+    case Actions["actionTypes"].DISCOVERY_STREAM_FEED_UPDATE:
+      const newData = {};
+      newData[action.data.url] = action.data.feed;
+      return { ...prevState,
+        feeds: { ...prevState.feeds,
+          data: { ...prevState.feeds.data,
+            ...newData
+          }
+        }
+      };
+
     case Actions["actionTypes"].DISCOVERY_STREAM_SPOCS_CAPS:
       return { ...prevState,
         spocs: { ...prevState.spocs,
           frequency_caps: [...prevState.spocs.frequency_caps, ...action.data]
         }
       };
 
     case Actions["actionTypes"].DISCOVERY_STREAM_SPOCS_ENDPOINT:
--- a/browser/components/newtab/docs/v2-system-addon/data_events.md
+++ b/browser/components/newtab/docs/v2-system-addon/data_events.md
@@ -995,33 +995,33 @@ This reports the user's interaction with
   "client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
   "action": "cfr_user_event",
   "addon_version": "20180710100040",
   "impression_id": "n/a",
   "locale": "en-US",
   "source": "CFR",
   // message_id could be the ID of the recommendation, such as "wikipedia_addon"
   "message_id": "wikipedia_addon",
-  "event": "[INSTALL | PIN | BLOCK | DISMISS | RATIONALE | LEARN_MORE | CLICK_DOORHANGER | MANAGE]"
+  "event": "[IMPRESSION | INSTALL | PIN | BLOCK | DISMISS | RATIONALE | LEARN_MORE | CLICK | CLICK_DOORHANGER | MANAGE]"
 }
 ```
 
 #### CFR interaction pings for release channel
 ```js
 {
   "client_id": "n/a",
   "action": "cfr_user_event",
   "addon_version": "20180710100040",
   "impression_id": "{005deed0-e3e4-4c02-a041-17405fd703f6}",
   "locale": "en-US",
   "source": "CFR",
   // message_id should be a bucket ID in the release channel, we may not use the
   // individual ID, such as addon ID, per legal's request
   "message_id": "bucket_id",
-  "event": "[INSTALL | PIN | BLOCK | DISMISS | RATIONALE | LEARN_MORE | CLICK_DOORHANGER | MANAGE]"
+  "event": "[IMPRESSION | INSTALL | PIN | BLOCK | DISMISS | RATIONALE | LEARN_MORE | CLICK | CLICK_DOORHANGER | MANAGE]"
 }
 ```
 
 ### Targeting error pings
 
 This reports when an error has occurred when parsing/evaluating a JEXL targeting string in a message.
 
 ```js
--- a/browser/components/newtab/jar.mn
+++ b/browser/components/newtab/jar.mn
@@ -1,15 +1,12 @@
 # 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/.
 
-[localization] en-US.jar:
-  trailhead.ftl (./data/trailhead.wip)
-
 browser.jar:
 % resource activity-stream %res/activity-stream/ contentaccessible=yes
   res/activity-stream/lib/ (./lib/*)
   res/activity-stream/common/ (./common/*)
   res/activity-stream/vendor/Redux.jsm (./vendor/Redux.jsm)
   res/activity-stream/vendor/react.js (./vendor/react.js)
   res/activity-stream/vendor/react-dom.js (./vendor/react-dom.js)
 #ifndef RELEASE_OR_BETA
--- a/browser/components/newtab/lib/ASRouter.jsm
+++ b/browser/components/newtab/lib/ASRouter.jsm
@@ -36,16 +36,17 @@ ChromeUtils.defineModuleGetter(this, "Te
 ChromeUtils.defineModuleGetter(this, "ClientEnvironment",
   "resource://normandy/lib/ClientEnvironment.jsm");
 ChromeUtils.defineModuleGetter(this, "Sampling",
   "resource://gre/modules/components-utils/Sampling.jsm");
 
 const TRAILHEAD_CONFIG = {
   OVERRIDE_PREF: "trailhead.firstrun.branches",
   DID_SEE_ABOUT_WELCOME_PREF: "trailhead.firstrun.didSeeAboutWelcome",
+  INTERRUPTS_EXPERIMENT_PREF: "trailhead.firstrun.interruptsExperiment",
   BRANCHES: {
     interrupts: [
       ["control"],
       ["join"],
       ["sync"],
       ["nofirstrun"],
       ["cards"],
     ],
@@ -564,17 +565,17 @@ class _ASRouter {
     this.messageChannel.addMessageListener(INCOMING_MESSAGE_NAME, this.onMessage);
     this._storage = storage;
     this.WHITELIST_HOSTS = this._loadSnippetsWhitelistHosts();
     this.dispatchToAS = dispatchToAS;
     this.dispatch = this.dispatch.bind(this);
 
     ASRouterPreferences.init();
     ASRouterPreferences.addListener(this.onPrefChange);
-    BookmarkPanelHub.init(this.handleMessageRequest, this.addImpression);
+    BookmarkPanelHub.init(this.handleMessageRequest, this.addImpression, this.dispatch);
 
     this._loadLocalProviders();
 
     // We need to check whether to set up telemetry for trailhead
     await this.setupTrailhead();
 
     const messageBlockList = await this._storage.get("messageBlockList") || [];
     const providerBlockList = await this._storage.get("providerBlockList") || [];
@@ -742,16 +743,23 @@ class _ASRouter {
 
     if (experiment) {
       TelemetryEnvironment.setExperimentActive(
         // In order for ping centre to pick this up, it MUST start with activity-stream
         `activity-stream-firstrun-trailhead-${experiment}`,
         experiment === "interrupts" ? interrupt : triplet,
         {type: "as-firstrun"}
       );
+
+      // On the first time setting the interrupts experiment, expose the branch
+      // for normandy to target for survey study.
+      if (experiment === "interrupts" &&
+          !Services.prefs.prefHasUserValue(TRAILHEAD_CONFIG.INTERRUPTS_EXPERIMENT_PREF)) {
+        Services.prefs.setStringPref(TRAILHEAD_CONFIG.INTERRUPTS_EXPERIMENT_PREF, interrupt);
+      }
     }
   }
 
   // Return an object containing targeting parameters used to select messages
   _getMessagesContext() {
     const {previousSessionEnd, trailheadInterrupt, trailheadTriplet} = this.state;
 
     return {
--- a/browser/components/newtab/lib/ActivityStream.jsm
+++ b/browser/components/newtab/lib/ActivityStream.jsm
@@ -155,17 +155,17 @@ const PREFS_CONFIG = new Map([
     title: "Number of rows of Top Stories to display",
     value: 1,
   }],
   ["sectionOrder", {
     title: "The rendering order for the sections",
     value: "topsites,topstories,highlights",
   }],
   ["improvesearch.noDefaultSearchTile", {
-    title: "Experiment to remove tiles that are the same as the default search",
+    title: "Remove tiles that are the same as the default search",
     value: true,
   }],
   ["improvesearch.topSiteSearchShortcuts.searchEngines", {
     title: "An ordered, comma-delimited list of search shortcuts that we should try and pin",
     // This pref is dynamic as the shortcuts vary depending on the region
     getValue: ({geo}) => {
       if (!geo) {
         return "";
@@ -210,17 +210,17 @@ const PREFS_CONFIG = new Map([
       // Block specific messages from this local provider
       exclude: [],
     }),
   }],
   ["asrouter.providers.cfr-fxa", {
     title: "Configuration for CFR FxA Messages provider",
     value: JSON.stringify({
       id: "cfr-fxa",
-      enabled: false,
+      enabled: true,
       type: "remote-settings",
       bucket: "cfr-fxa",
       frequency: {custom: [{period: "daily", cap: 1}]},
     }),
   }],
   // See browser/app/profile/firefox.js for other ASR preferences. They must be defined there to enable roll-outs.
   ["discoverystream.config", {
     title: "Configuration for the new pocket new tab",
--- a/browser/components/newtab/lib/BookmarkPanelHub.jsm
+++ b/browser/components/newtab/lib/BookmarkPanelHub.jsm
@@ -11,44 +11,49 @@ ChromeUtils.defineModuleGetter(this, "Se
   "resource://gre/modules/Services.jsm");
 
 class _BookmarkPanelHub {
   constructor() {
     this._id = "BookmarkPanelHub";
     this._trigger = {id: "bookmark-panel"};
     this._handleMessageRequest = null;
     this._addImpression = null;
+    this._dispatch = null;
     this._initalized = false;
     this._response = null;
     this._l10n = null;
 
     this.messageRequest = this.messageRequest.bind(this);
     this.toggleRecommendation = this.toggleRecommendation.bind(this);
+    this.sendUserEventTelemetry = this.sendUserEventTelemetry.bind(this);
     this.collapseMessage = this.collapseMessage.bind(this);
   }
 
   /**
    * @param {function} handleMessageRequest
    * @param {function} addImpression
+   * @param {function} dispatch - Used for sending user telemetry information
    */
-  init(handleMessageRequest, addImpression) {
+  init(handleMessageRequest, addImpression, dispatch) {
     this._handleMessageRequest = handleMessageRequest;
     this._addImpression = addImpression;
+    this._dispatch = dispatch;
     this._l10n = new DOMLocalization([
       "browser/branding/sync-brand.ftl",
       "browser/newtab/asrouter.ftl",
     ]);
     this._initalized = true;
   }
 
   uninit() {
     this._l10n = null;
     this._initalized = false;
     this._handleMessageRequest = null;
     this._addImpression = null;
+    this._dispatch = null;
     this._response = null;
   }
 
   /**
    * Checks if a similar cached requests exists before forwarding the request
    * to ASRouter. Caches only 1 request, unique identifier is `request.url`.
    * Caching ensures we don't duplicate requests and telemetry pings.
    * Return value is important for the caller to know if a message will be
@@ -78,16 +83,17 @@ class _BookmarkPanelHub {
       target,
       win,
       url: target.url,
     };
 
     if (response && response.content) {
       this.showMessage(response.content, target, win);
       this.sendImpression();
+      this.sendUserEventTelemetry("IMPRESSION");
     } else {
       this.hideMessage(target);
     }
 
     target.infoButton.disabled = !response;
 
     return !!response;
   }
@@ -106,24 +112,26 @@ class _BookmarkPanelHub {
       recommendation.addEventListener("click", async e => {
         target.hidePopup();
         const url = await FxAccounts.config.promiseEmailFirstURI("bookmark");
         win.ownerGlobal.openLinkIn(url, "tabshifted", {
           private: false,
           triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}),
           csp: null,
         });
+        this.sendUserEventTelemetry("CLICK");
       });
       recommendation.style.color = message.color;
       recommendation.style.background = `-moz-linear-gradient(-45deg, ${message.background_color_1} 0%, ${message.background_color_2} 70%)`;
       const close = createElement("a");
       close.setAttribute("id", "cfrClose");
       close.setAttribute("aria-label", "close");
       this._l10n.setAttributes(close, message.close_button.tooltiptext);
       close.addEventListener("click", e => {
+        this.sendUserEventTelemetry("DISMISS");
         this.collapseMessage();
         target.close(e);
       });
       const title = createElement("h1");
       title.setAttribute("id", "editBookmarkPanelRecommendationTitle");
       this._l10n.setAttributes(title, message.title);
       const content = createElement("p");
       content.setAttribute("id", "editBookmarkPanelRecommendationContent");
@@ -176,16 +184,27 @@ class _BookmarkPanelHub {
   _forceShowMessage(message) {
     this.toggleRecommendation(true);
     this.showMessage(message.content, this._response.target, this._response.win);
   }
 
   sendImpression() {
     this._addImpression(this._response);
   }
+
+  sendUserEventTelemetry(event) {
+    this._sendTelemetry({message_id: this._response.id, bucket_id: this._response.id, event});
+  }
+
+  _sendTelemetry(ping) {
+    this._dispatch({
+      type: "DOORHANGER_TELEMETRY",
+      data: {action: "cfr_user_event", source: "CFR", ...ping},
+    });
+  }
 }
 
 this._BookmarkPanelHub = _BookmarkPanelHub;
 
 /**
  * BookmarkPanelHub - singleton instance of _BookmarkPanelHub that can initiate
  * message requests and render messages.
  */
--- a/browser/components/newtab/lib/DiscoveryStreamFeed.jsm
+++ b/browser/components/newtab/lib/DiscoveryStreamFeed.jsm
@@ -261,44 +261,51 @@ this.DiscoveryStreamFeed = class Discove
    * buildFeedPromise - Adds the promise result to newFeeds and
    *                    pushes a promise to newsFeedsPromises.
    * @param {Object} Has both newFeedsPromises (Array) and newFeeds (Object)
    * @param {Boolean} isStartup We have different cache handling for startup.
    * @returns {Function} We return a function so we can contain
    *                     the scope for isStartup and the promises object.
    *                     Combines feed results and promises for each component with a feed.
    */
-  buildFeedPromise({newFeedsPromises, newFeeds}, isStartup) {
+  buildFeedPromise({newFeedsPromises, newFeeds}, isStartup, sendUpdate) {
     return component => {
       const {url} = component.feed;
 
       if (!newFeeds[url]) {
         // We initially stub this out so we don't fetch dupes,
         // we then fill in with the proper object inside the promise.
         newFeeds[url] = {};
         const feedPromise = this.getComponentFeed(url, isStartup);
+
         feedPromise.then(feed => {
           newFeeds[url] = this.filterRecommendations(feed);
+          sendUpdate({
+            type: at.DISCOVERY_STREAM_FEED_UPDATE,
+            data: {
+              feed: newFeeds[url],
+              url,
+            },
+          });
 
           // We grab affinities off the first feed for the moment.
           // Ideally this would be returned from the server on the layout,
           // or from another endpoint.
           if (!this.affinities) {
             const {settings} = feed.data;
             this.affinities = {
               timeSegments: settings.timeSegments,
               parameterSets: settings.domainAffinityParameterSets,
               maxHistoryQueryResults: settings.maxHistoryQueryResults || DEFAULT_MAX_HISTORY_QUERY_RESULTS,
               version: settings.version,
             };
           }
         }).catch(/* istanbul ignore next */ error => {
           Cu.reportError(`Error trying to load component feed ${url}: ${error}`);
         });
-
         newFeedsPromises.push(feedPromise);
       }
     };
   }
 
   filterRecommendations(feed) {
     if (feed && feed.data && feed.data.recommendations && feed.data.recommendations.length) {
       const {data} = this.filterBlocked(feed.data, "recommendations");
@@ -312,65 +319,67 @@ this.DiscoveryStreamFeed = class Discove
 
   /**
    * reduceFeedComponents - Filters out components with no feeds, and combines
    *                        all feeds on this component with the feeds from other components.
    * @param {Boolean} isStartup We have different cache handling for startup.
    * @returns {Function} We return a function so we can contain the scope for isStartup.
    *                     Reduces feeds into promises and feed data.
    */
-  reduceFeedComponents(isStartup) {
+  reduceFeedComponents(isStartup, sendUpdate) {
     return (accumulator, row) => {
       row.components
         .filter(component => component && component.feed)
-        .forEach(this.buildFeedPromise(accumulator, isStartup));
+        .forEach(this.buildFeedPromise(accumulator, isStartup, sendUpdate));
       return accumulator;
     };
   }
 
   /**
    * buildFeedPromises - Filters out rows with no components,
    *                     and gets us a promise for each unique feed.
    * @param {Object} layout This is the Discovery Stream layout object.
    * @param {Boolean} isStartup We have different cache handling for startup.
    * @returns {Object} An object with newFeedsPromises (Array) and newFeeds (Object),
    *                   we can Promise.all newFeedsPromises to get completed data in newFeeds.
    */
-  buildFeedPromises(layout, isStartup) {
+  buildFeedPromises(layout, isStartup, sendUpdate) {
     const initialData = {
       newFeedsPromises: [],
       newFeeds: {},
     };
     return layout
       .filter(row => row && row.components)
-      .reduce(this.reduceFeedComponents(isStartup), initialData);
+      .reduce(this.reduceFeedComponents(isStartup, sendUpdate), initialData);
   }
 
   async loadComponentFeeds(sendUpdate, isStartup) {
     const {DiscoveryStream} = this.store.getState();
 
     if (!DiscoveryStream || !DiscoveryStream.layout) {
       return;
     }
 
     // Reset the flag that indicates whether or not at least one API request
     // was issued to fetch the component feed in `getComponentFeed()`.
     this.componentFeedFetched = false;
     const start = perfService.absNow();
-    const {newFeedsPromises, newFeeds} = this.buildFeedPromises(DiscoveryStream.layout, isStartup);
+    const {newFeedsPromises, newFeeds} = this.buildFeedPromises(DiscoveryStream.layout, isStartup, sendUpdate);
 
     // Each promise has a catch already built in, so no need to catch here.
     await Promise.all(newFeedsPromises);
 
     if (this.componentFeedFetched) {
       this.cleanUpTopRecImpressionPref(newFeeds);
       this.componentFeedRequestTime = Math.round(perfService.absNow() - start);
     }
     await this.cache.set("feeds", newFeeds);
-    sendUpdate({type: at.DISCOVERY_STREAM_FEEDS_UPDATE, data: newFeeds});
+    sendUpdate({
+      type: at.DISCOVERY_STREAM_FEEDS_UPDATE,
+    });
   }
 
   async loadSpocs(sendUpdate, isStartup) {
     const cachedData = await this.cache.get() || {};
     let spocs;
 
     if (this.showSpocs) {
       spocs = cachedData.spocs;
@@ -610,28 +619,29 @@ this.DiscoveryStreamFeed = class Discove
       return !campaignCapExceeded;
     }
     return true;
   }
 
   async getComponentFeed(feedUrl, isStartup) {
     const cachedData = await this.cache.get() || {};
     const {feeds} = cachedData;
+
     let feed = feeds ? feeds[feedUrl] : null;
     if (this.isExpired({cachedData, key: "feed", url: feedUrl, isStartup})) {
       const feedResponse = await this.fetchFromEndpoint(feedUrl);
       if (feedResponse) {
         const {data: scoredItems} = this.scoreItems(feedResponse.recommendations);
         const {recsExpireTime} = feedResponse.settings;
         const recommendations = this.rotate(scoredItems, recsExpireTime);
         this.componentFeedFetched = true;
         feed = {
           lastUpdated: Date.now(),
           data: {
-            ...feedResponse,
+            settings: feedResponse.settings,
             recommendations,
           },
         };
       } else {
         Cu.reportError("No response for feed");
       }
     }
 
@@ -668,18 +678,18 @@ this.DiscoveryStreamFeed = class Discove
     const {updateOpenTabs, isStartup} = options;
     const dispatch = updateOpenTabs ?
       action => this.store.dispatch(ac.BroadcastToContent(action)) :
       this.store.dispatch;
 
     this.loadAffinityScoresCache();
     await this.loadLayout(dispatch, isStartup);
     await Promise.all([
+      this.loadSpocs(dispatch, isStartup).catch(error => Cu.reportError(`Error trying to load spocs feed: ${error}`)),
       this.loadComponentFeeds(dispatch, isStartup).catch(error => Cu.reportError(`Error trying to load component feeds: ${error}`)),
-      this.loadSpocs(dispatch, isStartup).catch(error => Cu.reportError(`Error trying to load spocs feed: ${error}`)),
     ]);
     if (isStartup) {
       await this._maybeUpdateCachedData();
     }
   }
 
   // We have to rotate stories on the client so that
   // active stories are at the front of the list, followed by stories that have expired
@@ -1027,103 +1037,109 @@ defaultLayoutResp = {
       ],
     },
     {
       "width": 12,
       "components": [
         {
           "type": "CardGrid",
           "properties": {
-            "items": 4,
+            "items": 3,
           },
           "header": {
             "title": "",
           },
           "feed": {
             "embed_reference": null,
             "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?version=3&consumer_key=$apiKey&locale_lang=en-US",
           },
           "spocs": {
             "probability": 1,
             "positions": [
               {
-                "index": 3,
+                "index": 2,
               },
             ],
           },
         },
       ],
     },
     {
       "width": 12,
       "components": [
         {
           "type": "CardGrid",
           "header": {
             "title": "Health & Fitness 💪",
           },
           "feed": {
             "embed_reference": null,
-            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=4&duration=2592000&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
+            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=4&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
           },
           "properties": {
             "items": 4,
             "has_numbers": false,
             "has_images": true,
-            "border": "no-border",
+          },
+          "styles": {
+            ".ds-header": "margin-top: 4px;",
           },
           "spocs": {
             "probability": 1,
             "positions": [
               {
-                "index": 3,
+                "index": 2,
               },
             ],
           },
         },
       ],
     },
     {
       "width": 12,
       "components": [
         {
           "type": "CardGrid",
           "header": {
             "title": "Tech 🖥",
           },
           "feed": {
             "embed_reference": null,
-            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=5&duration=2592000&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
+            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=5&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
           },
           "properties": {
             "items": 4,
             "has_numbers": false,
             "has_images": true,
-            "border": "no-border",
+          },
+          "styles": {
+            ".ds-header": "margin-top: 4px;",
           },
         },
       ],
     },
     {
       "width": 12,
       "components": [
         {
           "type": "CardGrid",
           "header": {
             "title": "Entertainment 🍿",
           },
           "feed": {
             "embed_reference": null,
-            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=8&duration=2592000&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
+            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=8&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
           },
           "properties": {
             "items": 4,
             "has_numbers": false,
             "has_images": true,
-            "border": "no-border",
+          },
+          "styles": {
+            ".ds-header": "margin-top: 4px;",
           },
           "spocs": {
             "probability": 1,
             "positions": [
               {
                 "index": 3,
               },
             ],
@@ -1136,65 +1152,71 @@ defaultLayoutResp = {
       "components": [
         {
           "type": "CardGrid",
           "header": {
             "title": "Personal Finance 💰",
           },
           "feed": {
             "embed_reference": null,
-            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=2&duration=2592000&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
+            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=2&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
+          },
+          "styles": {
+            ".ds-header": "margin-top: 4px;",
           },
           "properties": {
             "items": 4,
             "has_numbers": false,
             "has_images": true,
-            "border": "no-border",
           },
         },
       ],
     },
     {
       "width": 12,
       "components": [
         {
           "type": "CardGrid",
           "header": {
             "title": "Business 💼",
           },
           "feed": {
             "embed_reference": null,
-            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=1&duration=2592000&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
+            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=1&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
           },
           "properties": {
             "items": 4,
             "has_numbers": false,
             "has_images": true,
-            "border": "no-border",
+          },
+          "styles": {
+            ".ds-header": "margin-top: 4px;",
           },
         },
       ],
     },
     {
       "width": 12,
       "components": [
         {
           "type": "CardGrid",
           "header": {
             "title": "Science 🔬",
           },
           "feed": {
             "embed_reference": null,
-            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=7&duration=2592000&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
+            "url": "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?topic_id=7&end_time_offset=172800&version=3&consumer_key=$apiKey&locale_lang=en-US&feed_variant=OptimalCuratedLinksForLocaleFeed&model_id=external_time_live",
           },
           "properties": {
             "items": 4,
             "has_numbers": false,
             "has_images": true,
-            "border": "no-border",
+          },
+          "styles": {
+            ".ds-header": "margin-top: 4px;",
           },
           "spocs": {
             "probability": 1,
             "positions": [
               {
                 "index": 3,
               },
             ],
--- a/browser/components/newtab/lib/OnboardingMessageProvider.jsm
+++ b/browser/components/newtab/lib/OnboardingMessageProvider.jsm
@@ -37,16 +37,17 @@ async function getAddonInfo() {
   } catch (e) {
     Cu.reportError("Failed to get the latest add-on version for Return to AMO");
     return null;
   }
 }
 
 const L10N = new Localization([
   "branding/brand.ftl",
+  "browser/branding/brandings.ftl",
   "browser/branding/sync-brand.ftl",
   "browser/newtab/onboarding.ftl",
 ]);
 
 const ONBOARDING_MESSAGES = async () => ([
   {
     id: "ONBOARDING_1",
     template: "onboarding",
@@ -143,16 +144,17 @@ const ONBOARDING_MESSAGES = async () => 
     trigger: {id: "showOnboarding"},
   },
   {
     id: "TRAILHEAD_1",
     template: "trailhead",
     targeting: "trailheadInterrupt == 'join'",
     trigger: {id: "firstRun"},
     includeBundle: {length: 3, template: "onboarding", trigger: {id: "showOnboarding"}},
+    utm_term: "trailhead-join",
     content: {
       className: "joinCohort",
       title: {string_id: "onboarding-welcome-body"},
       benefits: ["products", "knowledge", "privacy"].map(id => (
         {
           id,
           title: {string_id: `onboarding-benefit-${id}-title`},
           text: {string_id: `onboarding-benefit-${id}-text`},
@@ -172,16 +174,17 @@ const ONBOARDING_MESSAGES = async () => 
     },
   },
   {
     id: "TRAILHEAD_2",
     template: "trailhead",
     targeting: "trailheadInterrupt == 'sync'",
     trigger: {id: "firstRun"},
     includeBundle: {length: 3, template: "onboarding", trigger: {id: "showOnboarding"}},
+    utm_term: "trailhead-sync",
     content: {
       className: "syncCohort",
       title: {property_id: "firstrun_title"},
       subtitle: {property_id: "firstrun_content"},
       benefits: [],
       learn: {
         text: {property_id: "firstrun_learn_more_link"},
         url: "https://www.mozilla.org/firefox/accounts/",
@@ -196,16 +199,17 @@ const ONBOARDING_MESSAGES = async () => 
     },
   },
   {
     id: "TRAILHEAD_3",
     template: "trailhead",
     targeting: "trailheadInterrupt == 'cards'",
     trigger: {id: "firstRun"},
     includeBundle: {length: 3, template: "onboarding", trigger: {id: "showOnboarding"}},
+    utm_term: "trailhead-cards",
   },
   {
     id: "TRAILHEAD_4",
     template: "trailhead",
     targeting: "trailheadInterrupt == 'nofirstrun'",
     trigger: {id: "firstRun"},
   },
   {
@@ -236,17 +240,18 @@ const ONBOARDING_MESSAGES = async () => 
     content: {
       title: {string_id: "onboarding-data-sync-title"},
       text: {string_id: "onboarding-data-sync-text"},
       icon: "devices",
       primary_button: {
         label: {string_id: "onboarding-data-sync-button"},
         action: {
           type: "OPEN_URL",
-          data: {args: "https://accounts.firefox.com/?service=sync&action=email&context=fx_desktop_v3&entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun", where: "tabshifted"},
+          addFlowParams: true,
+          data: {args: "https://accounts.firefox.com/?service=sync&action=email&context=fx_desktop_v3&entrypoint=activity-stream-firstrun&style=trailhead", where: "tabshifted"},
         },
       },
     },
     targeting: "trailheadTriplet == 'supercharge'",
     trigger: {id: "showOnboarding"},
   },
   {
     id: "TRAILHEAD_CARD_3",
@@ -269,21 +274,21 @@ const ONBOARDING_MESSAGES = async () => 
     trigger: {id: "showOnboarding"},
   },
   {
     id: "TRAILHEAD_CARD_4",
     template: "onboarding",
     bundled: 3,
     order: 1,
     content: {
-      title: {string_id: "onboarding-private-browsing-title"},
-      text: {string_id: "onboarding-private-browsing-text"},
+      title: {string_id: "onboarding-browse-privately-title"},
+      text: {string_id: "onboarding-browse-privately-text"},
       icon: "private",
       primary_button: {
-        label: {string_id: "onboarding-private-browsing-button"},
+        label: {string_id: "onboarding-browse-privately-button"},
         action: {type: "OPEN_PRIVATE_BROWSER_WINDOW"},
       },
     },
     targeting: "trailheadTriplet == 'privacy'",
     trigger: {id: "showOnboarding"},
   },
   {
     id: "TRAILHEAD_CARD_5",
@@ -293,17 +298,17 @@ const ONBOARDING_MESSAGES = async () => 
     content: {
       title: {string_id: "onboarding-firefox-send-title"},
       text: {string_id: "onboarding-firefox-send-text"},
       icon: "ffsend",
       primary_button: {
         label: {string_id: "onboarding-firefox-send-button"},
         action: {
           type: "OPEN_URL",
-          data: {args: "https://send.firefox.com/?utm_source=activity-stream?utm_medium=referral?utm_campaign=firstrun", where: "tabshifted"},
+          data: {args: "https://send.firefox.com/", where: "tabshifted"},
         },
       },
     },
     targeting: "trailheadTriplet == 'payoff'",
     trigger: {id: "showOnboarding"},
   },
   {
     id: "TRAILHEAD_CARD_6",
@@ -324,35 +329,16 @@ const ONBOARDING_MESSAGES = async () => 
     },
     targeting: "trailheadTriplet in ['supercharge', 'multidevice']",
     trigger: {id: "showOnboarding"},
   },
   {
     id: "TRAILHEAD_CARD_7",
     template: "onboarding",
     bundled: 3,
-    content: {
-      title: {string_id: "onboarding-privacy-right-title"},
-      text: {string_id: "onboarding-privacy-right-text"},
-      icon: "pledge",
-      primary_button: {
-        label: {string_id: "onboarding-privacy-right-button"},
-        action: {
-          type: "OPEN_URL",
-          data: {args: "https://www.mozilla.org/?privacy-right", where: "tabshifted"},
-        },
-      },
-    },
-    targeting: "trailheadTriplet == 'unused'",
-    trigger: {id: "showOnboarding"},
-  },
-  {
-    id: "TRAILHEAD_CARD_8",
-    template: "onboarding",
-    bundled: 3,
     order: 3,
     content: {
       title: {string_id: "onboarding-send-tabs-title"},
       text: {string_id: "onboarding-send-tabs-text"},
       icon: "sendtab",
       primary_button: {
         label: {string_id: "onboarding-send-tabs-button"},
         action: {
@@ -360,17 +346,17 @@ const ONBOARDING_MESSAGES = async () => 
           data: {args: "https://blog.mozilla.org/firefox/send-tabs-a-better-way/", where: "tabshifted"},
         },
       },
     },
     targeting: "trailheadTriplet == 'multidevice'",
     trigger: {id: "showOnboarding"},
   },
   {
-    id: "TRAILHEAD_CARD_9",
+    id: "TRAILHEAD_CARD_8",
     template: "onboarding",
     bundled: 3,
     order: 2,
     content: {
       title: {string_id: "onboarding-pocket-anywhere-title"},
       text: {string_id: "onboarding-pocket-anywhere-text"},
       icon: "pocket",
       primary_button: {
@@ -380,17 +366,17 @@ const ONBOARDING_MESSAGES = async () => 
           data: {args: "https://getpocket.com/firefox_learnmore", where: "tabshifted"},
         },
       },
     },
     targeting: "trailheadTriplet == 'multidevice'",
     trigger: {id: "showOnboarding"},
   },
   {
-    id: "TRAILHEAD_CARD_10",
+    id: "TRAILHEAD_CARD_9",
     template: "onboarding",
     bundled: 3,
     order: 3,
     content: {
       title: {string_id: "onboarding-lockwise-passwords-title"},
       text: {string_id: "onboarding-lockwise-passwords-text"},
       icon: "lockwise",
       primary_button: {
@@ -400,17 +386,17 @@ const ONBOARDING_MESSAGES = async () => 
           data: {args: "https://lockwise.firefox.com/", where: "tabshifted"},
         },
       },
     },
     targeting: "trailheadTriplet == 'privacy'",
     trigger: {id: "showOnboarding"},
   },
   {
-    id: "TRAILHEAD_CARD_11",
+    id: "TRAILHEAD_CARD_10",
     template: "onboarding",
     bundled: 3,
     order: 4,
     content: {
       title: {string_id: "onboarding-facebook-container-title"},
       text: {string_id: "onboarding-facebook-container-text"},
       icon: "fbcont",
       primary_button: {
--- a/browser/components/newtab/lib/TopSitesFeed.jsm
+++ b/browser/components/newtab/lib/TopSitesFeed.jsm
@@ -37,17 +37,17 @@ const DEFAULT_TOP_SITES = [];
 const FRECENCY_THRESHOLD = 100 + 1; // 1 visit (skip first-run/one-time pages)
 const MIN_FAVICON_SIZE = 96;
 const CACHED_LINK_PROPS_TO_MIGRATE = ["screenshot", "customScreenshot"];
 const PINNED_FAVICON_PROPS_TO_MIGRATE = ["favicon", "faviconRef", "faviconSize"];
 const SECTION_ID = "topsites";
 const ROWS_PREF = "topSitesRows";
 
 // Search experiment stuff
-const NO_DEFAULT_SEARCH_TILE_EXP_PREF = "improvesearch.noDefaultSearchTile";
+const FILTER_DEFAULT_SEARCH_PREF = "improvesearch.noDefaultSearchTile";
 const SEARCH_FILTERS = [
   "google",
   "search.yahoo",
   "yahoo",
   "bing",
   "ask",
   "duckduckgo",
 ];
@@ -82,17 +82,17 @@ this.TopSitesFeed = class TopSitesFeed {
   uninit() {
     PageThumbs.removeExpirationFilter(this);
     Services.obs.removeObserver(this, "browser-search-engine-modified");
   }
 
   observe(subj, topic, data) {
     // We should update the current top sites if the search engine has been changed since
     // the search engine that gets filtered out of top sites has changed.
-    if (topic === "browser-search-engine-modified" && data === "engine-default" && this.store.getState().Prefs.values[NO_DEFAULT_SEARCH_TILE_EXP_PREF]) {
+    if (topic === "browser-search-engine-modified" && data === "engine-default" && this.store.getState().Prefs.values[FILTER_DEFAULT_SEARCH_PREF]) {
       delete this._currentSearchHostname;
       this._currentSearchHostname = getShortURLForCurrentSearch();
       this.refresh({broadcast: true});
     }
   }
 
   _dedupeKey(site) {
     return site && site.hostname;
@@ -122,30 +122,24 @@ this.TopSitesFeed = class TopSitesFeed {
       if (site.customScreenshotURL) {
         acc.push(site.customScreenshotURL);
       }
       return acc;
     }, []));
   }
 
   /**
-   * isExperimentOnAndLinkFilteredSearch - is the experiment on and does a given hostname match the user's default search engine?
+   * shouldFilterSearchTile - is default filtering enabled and does a given hostname match the user's default search engine?
    *
    * @param {string} hostname a top site hostname, such as "amazon" or "foo"
    * @returns {bool}
    */
-  isExperimentOnAndLinkFilteredSearch(hostname) {
-    if (!this.store.getState().Prefs.values[NO_DEFAULT_SEARCH_TILE_EXP_PREF]) {
-      return false;
-    }
-    // If TopSite Search Shortcuts is enabled we don't want to filter those sites out
-    if (this.store.getState().Prefs.values[SEARCH_SHORTCUTS_EXPERIMENT] && getSearchProvider(hostname)) {
-      return false;
-    }
-    if (SEARCH_FILTERS.includes(hostname) || hostname === this._currentSearchHostname) {
+  shouldFilterSearchTile(hostname) {
+    if (this.store.getState().Prefs.values[FILTER_DEFAULT_SEARCH_PREF] &&
+      (SEARCH_FILTERS.includes(hostname) || hostname === this._currentSearchHostname)) {
       return true;
     }
     return false;
   }
 
   /**
    * _maybeInsertSearchShortcuts - if the search shortcuts experiment is running,
    *                               insert search shortcuts if needed
@@ -222,31 +216,31 @@ this.TopSitesFeed = class TopSitesFeed {
     let frecent = [];
     const cache = await this.frecentCache.request({
       // We need to overquery due to the top 5 alexa search + default search possibly being removed
       numItems: numItems + SEARCH_FILTERS.length + 1,
       topsiteFrecency: FRECENCY_THRESHOLD,
     });
     for (let link of cache) {
       const hostname = shortURL(link);
-      if (!this.isExperimentOnAndLinkFilteredSearch(hostname)) {
+      if (!this.shouldFilterSearchTile(hostname)) {
         frecent.push({
           ...(searchShortcutsExperiment ? await this.topSiteToSearchTopSite(link) : link),
           hostname,
         });
       }
     }
 
     // Remove any defaults that have been blocked.
     let notBlockedDefaultSites = [];
     for (let link of DEFAULT_TOP_SITES) {
       const searchProvider = getSearchProvider(shortURL(link));
       if (NewTabUtils.blockedLinks.isBlocked({url: link.url})) {
         continue;
-      } else if (this.isExperimentOnAndLinkFilteredSearch(link.hostname)) {
+      } else if (this.shouldFilterSearchTile(link.hostname)) {
         continue;
         // If we've previously blocked a search shortcut, remove the default top site
         // that matches the hostname
       } else if (searchProvider && NewTabUtils.blockedLinks.isBlocked({url: searchProvider.url})) {
         continue;
       }
       notBlockedDefaultSites.push(
         searchShortcutsExperiment ? await this.topSiteToSearchTopSite(link) : link,
@@ -665,17 +659,17 @@ this.TopSitesFeed = class TopSitesFeed {
         this.refresh({broadcast: true});
         break;
       case at.PREF_CHANGED:
         switch (action.data.name) {
           case DEFAULT_SITES_PREF:
             this.refreshDefaults(action.data.value);
             break;
           case ROWS_PREF:
-          case NO_DEFAULT_SEARCH_TILE_EXP_PREF:
+          case FILTER_DEFAULT_SEARCH_PREF:
           case SEARCH_SHORTCUTS_SEARCH_ENGINES_PREF:
             this.refresh({broadcast: true});
             break;
           case SEARCH_SHORTCUTS_EXPERIMENT:
             if (action.data.value) {
               this.updateCustomSearchShortcuts();
             } else {
               this.disableSearchImprovements();
--- a/browser/components/newtab/prerendered/locales/ach/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/ach/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Dirica matidi manyen</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/ach/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/ach/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Dirica matidi manyen</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Yeny kakube</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Yeny kakube" title="Yeny kakube"/><button id="searchSubmit" class="search-button" title="Yeny"><span class="sr-only"><span>Yeny</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Kakube maloyo</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Yab jami ayera"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Lami tam obedo Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Yab jami ayera"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Wiye madito</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Yab jami ayera"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Yub potbuk me dirica matidi mamegi manyen"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/ach/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/ach/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Dirica matidi manyen</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Yeny kakube</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Yeny kakube" title="Yeny kakube"/><button id="searchSubmit" class="search-button" title="Yeny"><span class="sr-only"><span>Yeny</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Kakube maloyo</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Yab jami ayera"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Yub kakube man"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Lami tam obedo Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Yab jami ayera"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Wiye madito</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Yab jami ayera"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Yub potbuk me dirica matidi mamegi manyen"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/ach/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/ach/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Dirica matidi manyen</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/an/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/an/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nueva Pestanya</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/an/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/an/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nueva Pestanya</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Mirar en o Web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Mirar en o Web" title="Mirar en o Web"/><button id="searchSubmit" class="search-button" title="Mirar"><span class="sr-only"><span>Mirar</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Mas freqüents</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Ubrir lo menú contextual d&#x27;a sección</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recomendau per Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Ubrir lo menú contextual d&#x27;a sección</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Destacaus</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Ubrir lo menú contextual d&#x27;a sección</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Personaliza la tuya pachina de Nueva Pestanya"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/an/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/an/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nueva Pestanya</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Mirar en o Web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Mirar en o Web" title="Mirar en o Web"/><button id="searchSubmit" class="search-button" title="Mirar"><span class="sr-only"><span>Mirar</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Mas freqüents</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Ubrir lo menú contextual d&#x27;a sección</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar este puesto"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recomendau per Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Ubrir lo menú contextual d&#x27;a sección</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Destacaus</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Ubrir lo menú contextual d&#x27;a sección</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Personaliza la tuya pachina de Nueva Pestanya"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/an/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/an/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nueva Pestanya</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/ar/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/ar/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>لسان جديد</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/ar/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/ar/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>لسان جديد</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ابحث في الوِب</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ابحث في الوِب" title="ابحث في الوِب"/><button id="searchSubmit" class="search-button" title="ابحث"><span class="sr-only"><span>ابحث</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>المواقع الأكثر زيارة</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="افتح القائمة"><span class="sr-only"><span>افتح قائمة القسم السياقية</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>ينصح به Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="افتح القائمة"><span class="sr-only"><span>افتح قائمة القسم السياقية</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>أهم الأحداث</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="افتح القائمة"><span class="sr-only"><span>افتح قائمة القسم السياقية</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="خصص صفحة اللسان الجديد"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/ar/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/ar/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>لسان جديد</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ابحث في الوِب</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ابحث في الوِب" title="ابحث في الوِب"/><button id="searchSubmit" class="search-button" title="ابحث"><span class="sr-only"><span>ابحث</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>المواقع الأكثر زيارة</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="افتح القائمة"><span class="sr-only"><span>افتح قائمة القسم السياقية</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="حرّر هذا الموقع"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>ينصح به Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="افتح القائمة"><span class="sr-only"><span>افتح قائمة القسم السياقية</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>أهم الأحداث</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="افتح القائمة"><span class="sr-only"><span>افتح قائمة القسم السياقية</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="خصص صفحة اللسان الجديد"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/ar/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/ar/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>لسان جديد</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/ast/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/ast/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Llingüeta nueva</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/ast/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/ast/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Llingüeta nueva</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Guetar na web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Guetar na web" title="Guetar na web"/><button id="searchSubmit" class="search-button" title="Guetar"><span class="sr-only"><span>Guetar</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Más visitaos</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recomendáu por Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Destacaos</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Personalizar páxina Llingüeta nueva"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/ast/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/ast/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Llingüeta nueva</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Guetar na web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Guetar na web" title="Guetar na web"/><button id="searchSubmit" class="search-button" title="Guetar"><span class="sr-only"><span>Guetar</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Más visitaos</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Editar esti sitiu"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recomendáu por Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Destacaos</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Personalizar páxina Llingüeta nueva"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/ast/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/ast/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Llingüeta nueva</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/az/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/az/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Yeni Vərəq</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/az/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/az/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Yeni Vərəq</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>İnternetdə Axtar</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="İnternetdə Axtar" title="İnternetdə Axtar"/><button id="searchSubmit" class="search-button" title="Axtar"><span class="sr-only"><span>Axtar</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Qabaqcıl Saytlar</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Menyunu aç"><span class="sr-only"><span>Kontekst menyusu bölməsini aç</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Pocket məsləhət görür</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Menyunu aç"><span class="sr-only"><span>Kontekst menyusu bölməsini aç</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Seçilmişlər</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Menyunu aç"><span class="sr-only"><span>Kontekst menyusu bölməsini aç</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Yeni Vərəq səhifənizi fərdiləşdirin"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/az/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/az/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Yeni Vərəq</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>İnternetdə Axtar</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="İnternetdə Axtar" title="İnternetdə Axtar"/><button id="searchSubmit" class="search-button" title="Axtar"><span class="sr-only"><span>Axtar</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Qabaqcıl Saytlar</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Menyunu aç"><span class="sr-only"><span>Kontekst menyusu bölməsini aç</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytı düzəlt"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Pocket məsləhət görür</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Menyunu aç"><span class="sr-only"><span>Kontekst menyusu bölməsini aç</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Seçilmişlər</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Menyunu aç"><span class="sr-only"><span>Kontekst menyusu bölməsini aç</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Yeni Vərəq səhifənizi fərdiləşdirin"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/az/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/az/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Yeni Vərəq</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/be/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/be/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Новая картка</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/be/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/be/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Новая картка</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Пошук у Інтэрнэце</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Пошук у Інтэрнэце" title="Пошук у Інтэрнэце"/><button id="searchSubmit" class="search-button" title="Шукаць"><span class="sr-only"><span>Шукаць</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Папулярныя сайты</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Адкрыць меню"><span class="sr-only"><span>Адкрыць кантэкстнае меню раздзела</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Рэкамендавана Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Адкрыць меню"><span class="sr-only"><span>Адкрыць кантэкстнае меню раздзела</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Выбранае</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Адкрыць меню"><span class="sr-only"><span>Адкрыць кантэкстнае меню раздзела</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Наладзіць вашу старонку новай карткі"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/be/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/be/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Новая картка</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Пошук у Інтэрнэце</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Пошук у Інтэрнэце" title="Пошук у Інтэрнэце"/><button id="searchSubmit" class="search-button" title="Шукаць"><span class="sr-only"><span>Шукаць</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Папулярныя сайты</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Адкрыць меню"><span class="sr-only"><span>Адкрыць кантэкстнае меню раздзела</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Рэдагаваць гэты сайт"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Рэкамендавана Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Адкрыць меню"><span class="sr-only"><span>Адкрыць кантэкстнае меню раздзела</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Выбранае</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Адкрыць меню"><span class="sr-only"><span>Адкрыць кантэкстнае меню раздзела</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Наладзіць вашу старонку новай карткі"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/be/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/be/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Новая картка</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/bg/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/bg/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Нов раздел</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/bg/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/bg/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Нов раздел</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Търсене в интернет</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Търсене в интернет" title="Търсене в интернет"/><button id="searchSubmit" class="search-button" title="Търсене"><span class="sr-only"><span>Търсене</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Често посещавани страници</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Отваряне на контекстното меню на раздела</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Препоръчано от Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Отваряне на контекстното меню на раздела</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Акценти</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Отваряне на контекстното меню на раздела</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Настройки на новия раздел"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/bg/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/bg/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Нов раздел</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Търсене в интернет</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Търсене в интернет" title="Търсене в интернет"/><button id="searchSubmit" class="search-button" title="Търсене"><span class="sr-only"><span>Търсене</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Често посещавани страници</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Отваряне на контекстното меню на раздела</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Променяне"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Препоръчано от Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Отваряне на контекстното меню на раздела</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Акценти</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Отваряне на контекстното меню на раздела</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Настройки на новия раздел"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/bg/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/bg/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Нов раздел</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/bn/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/bn/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>নতুন ট্যাব</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/bn/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/bn/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>নতুন ট্যাব</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ওয়েবে সন্ধান করুন</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ওয়েবে সন্ধান করুন" title="ওয়েবে সন্ধান করুন"/><button id="searchSubmit" class="search-button" title="অনুসন্ধান"><span class="sr-only"><span>অনুসন্ধান</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>শীর্ঘ সাইট</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="মেনু খুলুন"><span class="sr-only"><span>কনটেক্স মেন্যু তে সেকশনটি খুলুন</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Pocket দ্বারা সুপারিশকৃত</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="মেনু খুলুন"><span class="sr-only"><span>কনটেক্স মেন্যু তে সেকশনটি খুলুন</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>হাইলাইটস</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="মেনু খুলুন"><span class="sr-only"><span>কনটেক্স মেন্যু তে সেকশনটি খুলুন</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="আপনার নতুন ট্যাব পেজটি কাস্টমাইজ করুন"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/bn/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/bn/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>নতুন ট্যাব</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ওয়েবে সন্ধান করুন</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ওয়েবে সন্ধান করুন" title="ওয়েবে সন্ধান করুন"/><button id="searchSubmit" class="search-button" title="অনুসন্ধান"><span class="sr-only"><span>অনুসন্ধান</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>শীর্ঘ সাইট</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="মেনু খুলুন"><span class="sr-only"><span>কনটেক্স মেন্যু তে সেকশনটি খুলুন</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="সাইটটি সম্পাদনা করুন"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Pocket দ্বারা সুপারিশকৃত</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="মেনু খুলুন"><span class="sr-only"><span>কনটেক্স মেন্যু তে সেকশনটি খুলুন</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>হাইলাইটস</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="মেনু খুলুন"><span class="sr-only"><span>কনটেক্স মেন্যু তে সেকশনটি খুলুন</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="আপনার নতুন ট্যাব পেজটি কাস্টমাইজ করুন"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/bn/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/bn/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>নতুন ট্যাব</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/br/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/br/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Ivinell nevez</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/br/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/br/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Ivinell nevez</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Klask er web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Klask er web" title="Klask er web"/><button id="searchSubmit" class="search-button" title="Klask"><span class="sr-only"><span>Klask</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Lec&#x27;hiennoù pennañ</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Digeriñ al lañser"><span class="sr-only"><span>Digeriñ lañser kemperzhel al lodenn-mañ</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Erbedet gant Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Digeriñ al lañser"><span class="sr-only"><span>Digeriñ lañser kemperzhel al lodenn-mañ</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Mareoù pouezus</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Digeriñ al lañser"><span class="sr-only"><span>Digeriñ lañser kemperzhel al lodenn-mañ</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Personelait ho pajenn Ivinell Nevez"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/br/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/br/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Ivinell nevez</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Klask er web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Klask er web" title="Klask er web"/><button id="searchSubmit" class="search-button" title="Klask"><span class="sr-only"><span>Klask</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Lec&#x27;hiennoù pennañ</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Digeriñ al lañser"><span class="sr-only"><span>Digeriñ lañser kemperzhel al lodenn-mañ</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Embann al lec&#x27;hienn-mañ"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Erbedet gant Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Digeriñ al lañser"><span class="sr-only"><span>Digeriñ lañser kemperzhel al lodenn-mañ</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Mareoù pouezus</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Digeriñ al lañser"><span class="sr-only"><span>Digeriñ lañser kemperzhel al lodenn-mañ</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Personelait ho pajenn Ivinell Nevez"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/br/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/br/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Ivinell nevez</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/bs/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/bs/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Novi tab</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/bs/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/bs/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Novi tab</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Pretraži web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Pretraži web" title="Pretraži web"/><button id="searchSubmit" class="search-button" title="Traži"><span class="sr-only"><span>Traži</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Najposjećenije stranice</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Otvorite kontekstni meni sekcije</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Preporučeno od Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Otvorite kontekstni meni sekcije</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Istaknuto</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Otvorite kontekstni meni sekcije</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Prilagodite svoju početnu stranicu novog taba"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/bs/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/bs/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Novi tab</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Pretraži web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Pretraži web" title="Pretraži web"/><button id="searchSubmit" class="search-button" title="Traži"><span class="sr-only"><span>Traži</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Najposjećenije stranice</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Otvorite kontekstni meni sekcije</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Uredi ovu stranicu"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Preporučeno od Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Otvorite kontekstni meni sekcije</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Istaknuto</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Otvorite kontekstni meni sekcije</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Prilagodite svoju početnu stranicu novog taba"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/bs/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/bs/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Novi tab</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/ca/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/ca/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Pestanya nova</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/ca/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/ca/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Pestanya nova</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Cerca al web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Cerca al web" title="Cerca al web"/><button id="searchSubmit" class="search-button" title="Cerca"><span class="sr-only"><span>Cerca</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Llocs principals</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Obre el menú"><span class="sr-only"><span>Obre el menú contextual de la secció</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recomanat per Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Obre el menú"><span class="sr-only"><span>Obre el menú contextual de la secció</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Destacats</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Obre el menú"><span class="sr-only"><span>Obre el menú contextual de la secció</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Personalitzeu la pàgina de pestanya nova"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/ca/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/ca/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Pestanya nova</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Cerca al web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Cerca al web" title="Cerca al web"/><button id="searchSubmit" class="search-button" title="Cerca"><span class="sr-only"><span>Cerca</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Llocs principals</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Obre el menú"><span class="sr-only"><span>Obre el menú contextual de la secció</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edita aquest lloc"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recomanat per Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Obre el menú"><span class="sr-only"><span>Obre el menú contextual de la secció</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Destacats</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Obre el menú"><span class="sr-only"><span>Obre el menú contextual de la secció</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Personalitzeu la pàgina de pestanya nova"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/ca/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/ca/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Pestanya nova</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/cak/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/cak/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>K'ak'a' ruwi'</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/cak/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/cak/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>K'ak'a' ruwi'</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Tikanöx pa Ajk&#x27;amaya&#x27;l</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Tikanöx pa Ajk&#x27;amaya&#x27;l" title="Tikanöx pa Ajk&#x27;amaya&#x27;l"/><button id="searchSubmit" class="search-button" title="Tikanöx"><span class="sr-only"><span>Tikanöx</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Jeb&#x27;ël Taq Ruxaq</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Tijaq k&#x27;utüy samaj"><span class="sr-only"><span>Tijaq ruperaj rokem k&#x27;utsamaj</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Chilab&#x27;en ruma Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Tijaq k&#x27;utüy samaj"><span class="sr-only"><span>Tijaq ruperaj rokem k&#x27;utsamaj</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Ya&#x27;on kiq&#x27;ij</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Tijaq k&#x27;utüy samaj"><span class="sr-only"><span>Tijaq ruperaj rokem k&#x27;utsamaj</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Tawichinaj ri ruxaq richin K&#x27;ak&#x27;a&#x27; Ruwi&#x27;"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/cak/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/cak/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>K'ak'a' ruwi'</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Tikanöx pa Ajk&#x27;amaya&#x27;l</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Tikanöx pa Ajk&#x27;amaya&#x27;l" title="Tikanöx pa Ajk&#x27;amaya&#x27;l"/><button id="searchSubmit" class="search-button" title="Tikanöx"><span class="sr-only"><span>Tikanöx</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Jeb&#x27;ël Taq Ruxaq</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Tijaq k&#x27;utüy samaj"><span class="sr-only"><span>Tijaq ruperaj rokem k&#x27;utsamaj</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Tinuk&#x27; re ruxaq k&#x27;amaya&#x27;l re&#x27;"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Chilab&#x27;en ruma Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Tijaq k&#x27;utüy samaj"><span class="sr-only"><span>Tijaq ruperaj rokem k&#x27;utsamaj</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Ya&#x27;on kiq&#x27;ij</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Tijaq k&#x27;utüy samaj"><span class="sr-only"><span>Tijaq ruperaj rokem k&#x27;utsamaj</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Tawichinaj ri ruxaq richin K&#x27;ak&#x27;a&#x27; Ruwi&#x27;"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/cak/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/cak/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>K'ak'a' ruwi'</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/crh/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/crh/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Yañı İlmek</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/crh/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/crh/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Yañı İlmek</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Ağ&#x27;da qıdır</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Ağ&#x27;da qıdır" title="Ağ&#x27;da qıdır"/><button id="searchSubmit" class="search-button" title="Qıdır"><span class="sr-only"><span>Qıdır</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Zirvedeki Saytlar</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Bölüm bağlam menüsini aç</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Pocket tevsiyeli</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Bölüm bağlam menüsini aç</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Yüksek-ışıtmalar</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Bölüm bağlam menüsini aç</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Yañı İlmek saifeñizni Özelleştiriñiz"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/crh/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/crh/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Yañı İlmek</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Ağ&#x27;da qıdır</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Ağ&#x27;da qıdır" title="Ağ&#x27;da qıdır"/><button id="searchSubmit" class="search-button" title="Qıdır"><span class="sr-only"><span>Qıdır</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Zirvedeki Saytlar</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Bölüm bağlam menüsini aç</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Bu saytnı tahrir et"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Pocket tevsiyeli</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Bölüm bağlam menüsini aç</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Yüksek-ışıtmalar</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Open menu"><span class="sr-only"><span>Bölüm bağlam menüsini aç</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Yañı İlmek saifeñizni Özelleştiriñiz"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/crh/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/crh/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Yañı İlmek</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/cs/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/cs/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nový panel</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/cs/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/cs/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nový panel</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Vyhledat na webu</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Vyhledat na webu" title="Vyhledat na webu"/><button id="searchSubmit" class="search-button" title="Vyhledat"><span class="sr-only"><span>Vyhledat</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Top stránky</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Otevře nabídku"><span class="sr-only"><span>Otevřít kontextovou nabídku sekce</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Doporučení ze služby Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Otevře nabídku"><span class="sr-only"><span>Otevřít kontextovou nabídku sekce</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Vybrané</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Otevře nabídku"><span class="sr-only"><span>Otevřít kontextovou nabídku sekce</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Přizpůsobení stránky nového panelu"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/cs/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/cs/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nový panel</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Vyhledat na webu</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Vyhledat na webu" title="Vyhledat na webu"/><button id="searchSubmit" class="search-button" title="Vyhledat"><span class="sr-only"><span>Vyhledat</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Top stránky</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Otevře nabídku"><span class="sr-only"><span>Otevřít kontextovou nabídku sekce</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Upravit tuto stránku"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Doporučení ze služby Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Otevře nabídku"><span class="sr-only"><span>Otevřít kontextovou nabídku sekce</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Vybrané</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Otevře nabídku"><span class="sr-only"><span>Otevřít kontextovou nabídku sekce</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Přizpůsobení stránky nového panelu"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/cs/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/cs/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nový panel</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/cy/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/cy/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Tab Newydd</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/cy/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/cy/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Tab Newydd</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Chwilio&#x27;r We</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Chwilio&#x27;r We" title="Chwilio&#x27;r We"/><button id="searchSubmit" class="search-button" title="Chwilio"><span class="sr-only"><span>Chwilio</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Hoff Wefannau</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Agor y ddewislen"><span class="sr-only"><span>Agor dewislen cyd-destun yr adran</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Argymhellwyd gan Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Agor y ddewislen"><span class="sr-only"><span>Agor dewislen cyd-destun yr adran</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Goreuon</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Agor y ddewislen"><span class="sr-only"><span>Agor dewislen cyd-destun yr adran</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Cyfaddasu eich tudalen Tab Newydd"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/cy/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/cy/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Tab Newydd</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Chwilio&#x27;r We</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Chwilio&#x27;r We" title="Chwilio&#x27;r We"/><button id="searchSubmit" class="search-button" title="Chwilio"><span class="sr-only"><span>Chwilio</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Hoff Wefannau</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Agor y ddewislen"><span class="sr-only"><span>Agor dewislen cyd-destun yr adran</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Golygu&#x27;r wefan"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Argymhellwyd gan Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Agor y ddewislen"><span class="sr-only"><span>Agor dewislen cyd-destun yr adran</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Goreuon</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Agor y ddewislen"><span class="sr-only"><span>Agor dewislen cyd-destun yr adran</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Cyfaddasu eich tudalen Tab Newydd"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="resource://activity-stream/prerendered/static/activity-stream-initial-state.js"></script>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/cy/activity-stream.html
+++ b/browser/components/newtab/prerendered/locales/cy/activity-stream.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Tab Newydd</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
     <script src="chrome://browser/content/contentSearchUI.js"></script>
     <script src="chrome://browser/content/contentTheme.js"></script>
     <script src="resource://activity-stream/vendor/react.js"></script>
     <script src="resource://activity-stream/vendor/react-dom.js"></script>
     <script src="resource://activity-stream/vendor/prop-types.js"></script>
     <script src="resource://activity-stream/vendor/react-intl.js"></script>
     <script src="resource://activity-stream/vendor/redux.js"></script>
     <script src="resource://activity-stream/vendor/react-redux.js"></script>
--- a/browser/components/newtab/prerendered/locales/da/activity-stream-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/da/activity-stream-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nyt faneblad</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><!-- Regular React Rendering --></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/da/activity-stream-prerendered-noscripts.html
+++ b/browser/components/newtab/prerendered/locales/da/activity-stream-prerendered-noscripts.html
@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nyt faneblad</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Søg på internettet</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Søg på internettet" title="Søg på internettet"/><button id="searchSubmit" class="search-button" title="Søg"><span class="sr-only"><span>Søg</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Mest besøgte websider</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Åbn menu"><span class="sr-only"><span>Åbn genvejsmenuen afsnit</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Anbefalet af Pocket</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Åbn menu"><span class="sr-only"><span>Åbn genvejsmenuen afsnit</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="top-stories-bottom-container"><div class="wrapper-more-recommendations"></div></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Fremhævede</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Åbn menu"><span class="sr-only"><span>Åbn genvejsmenuen afsnit</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Tilpas siden Nyt faneblad"></button></div></div></main></div></div></div>
-    <div id="footer-asrouter-container"></div>
+    <div id="footer-asrouter-container" role="presentation"></div>
   </body>
 </html>
--- a/browser/components/newtab/prerendered/locales/da/activity-stream-prerendered.html
+++ b/browser/components/newtab/prerendered/locales/da/activity-stream-prerendered.html
@@ -4,19 +4,19 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>Nyt faneblad</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="header-asrouter-container"></div>
+    <div id="header-asrouter-container" role="presentation"></div>
     <div id="root"><div><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><div class="search-inner-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Søg på internettet</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Søg på internettet" title="Søg på internettet"/><button id="searchSubmit" class="search-button" title="Søg"><span class="sr-only"><span>Søg</span></span></button></div></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target-container"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Mest besøgte websider</span></span><span class="click-target"></span><span class="learn-more-link-wrapper"></span></span></h3><div><button class="context-menu-button icon" title="Åbn menu"><span class="sr-only"><span>Åbn genvejsmenuen afsnit</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Rediger denne webside"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a tabindex="0" draggable="true"><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div><