Merge m-c to autoland, a=merge
authorWes Kocher <wkocher@mozilla.com>
Wed, 17 Aug 2016 17:25:57 -0700
changeset 310106 ba84914a7e70aa4d61aa1b8ca4796fae7172dfa7
parent 310104 535bd44df96a10dba1cd0d7a6743c46d104f9f11 (current diff)
parent 309901 97a52326b06a07930216ebefa5af333271578904 (diff)
child 310108 c50cb95d1f42420df51b190835aa82e2ec7fd552
push id80771
push userkwierso@gmail.com
push dateThu, 18 Aug 2016 23:33:08 +0000
treeherdermozilla-inbound@cb1295738c37 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone51.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 m-c to autoland, a=merge
devtools/client/inspector/inspector.css
gfx/layers/ipc/CompositorBridgeParent.h
mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoEvent.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/JavaPanZoomController.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/Layer.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/PluginLayer.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/ScrollbarLayer.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/TextureGenerator.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/TextureReaper.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/TouchEventHandler.java
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/VirtualLayer.java
mobile/android/themes/core/scrollbar-nonapz.css
modules/libpref/init/all.js
old-configure.in
taskcluster/ci/desktop-test/tests.yml
testing/web-platform/meta/html/semantics/embedded-content/the-img-element/invalid-src.html.ini
--- a/accessible/base/nsAccessibilityService.cpp
+++ b/accessible/base/nsAccessibilityService.cpp
@@ -1285,16 +1285,18 @@ nsAccessibilityService::Init()
 #endif
 
   gIsShutdown = false;
 
   // Now its safe to start platform accessibility.
   if (XRE_IsParentProcess())
     PlatformInit();
 
+  statistics::A11yInitialized();
+
   return true;
 }
 
 void
 nsAccessibilityService::Shutdown()
 {
   // Application is going to be closed, shutdown accessibility and mark
   // accessibility service as shutdown to prevent calls of its methods.
--- a/b2g/confvars.sh
+++ b/b2g/confvars.sh
@@ -14,29 +14,20 @@ MOZ_B2G_VERSION=2.6.0.0-prerelease
 MOZ_B2G_OS_NAME=Boot2Gecko
 
 MOZ_BRANDING_DIRECTORY=b2g/branding/unofficial
 MOZ_OFFICIAL_BRANDING_DIRECTORY=b2g/branding/official
 # MOZ_APP_DISPLAYNAME is set by branding/configure.sh
 
 MOZ_SAFE_BROWSING=1
 
-MOZ_WEBSMS_BACKEND=1
 MOZ_NO_SMART_CARDS=1
 MOZ_APP_STATIC_INI=1
-NSS_DISABLE_DBM=1
 MOZ_NO_EV_CERTS=1
 
-MOZ_WEBSPEECH=1
-if test -n "$NIGHTLY_BUILD"; then
-MOZ_WEBSPEECH_MODELS=1
-MOZ_WEBSPEECH_POCKETSPHINX=1
-fi
-MOZ_WEBSPEECH_TEST_BACKEND=1
-
 if test "$OS_TARGET" = "Android"; then
 MOZ_CAPTURE=1
 MOZ_RAW=1
 MOZ_AUDIO_CHANNEL_MANAGER=1
 fi
 
 # use custom widget for html:select
 MOZ_USE_NATIVE_POPUP_WINDOWS=1
--- a/b2g/graphene/confvars.sh
+++ b/b2g/graphene/confvars.sh
@@ -22,21 +22,19 @@ MOZ_B2G_OS_NAME=Boot2Gecko
 
 MOZ_BRANDING_DIRECTORY=b2g/branding/unofficial
 MOZ_OFFICIAL_BRANDING_DIRECTORY=b2g/branding/official
 # MOZ_APP_DISPLAYNAME is set by branding/configure.sh
 
 MOZ_SAFE_BROWSING=1
 MOZ_CAPTIVEDETECT=1
 
-MOZ_WEBSMS_BACKEND=1
 MOZ_NO_SMART_CARDS=1
 MOZ_APP_STATIC_INI=1
 NSS_NO_LIBPKIX=1
-NSS_DISABLE_DBM=1
 
 if test "$OS_TARGET" = "Android"; then
 MOZ_CAPTURE=1
 MOZ_RAW=1
 MOZ_AUDIO_CHANNEL_MANAGER=1
 fi
 
 MOZ_APP_ID={d1bfe7d9-c01e-4237-998b-7b5f960a4314}
--- a/browser/base/content/aboutDialog.js
+++ b/browser/base/content/aboutDialog.js
@@ -37,17 +37,17 @@ function init(aEvent)
   catch (e) {
     // Pref is unset
   }
 
   // Include the build ID and display warning if this is an "a#" (nightly or aurora) build
   let version = Services.appinfo.version;
   if (/a\d+$/.test(version)) {
     let buildID = Services.appinfo.appBuildID;
-    let buildDate = buildID.slice(0,4) + "-" + buildID.slice(4,6) + "-" + buildID.slice(6,8);
+    let buildDate = buildID.slice(0, 4) + "-" + buildID.slice(4, 6) + "-" + buildID.slice(6, 8);
     document.getElementById("version").textContent += " (" + buildDate + ")";
     document.getElementById("experimental").hidden = false;
     document.getElementById("communityDesc").hidden = true;
   }
 
   if (AppConstants.MOZ_UPDATER) {
     gAppUpdater = new appUpdater();
 
--- a/browser/base/content/abouthealthreport/abouthealth.js
+++ b/browser/base/content/abouthealthreport/abouthealth.js
@@ -145,17 +145,17 @@ var healthReportWrapper = {
         Cu.reportError("Unexpected remote command received: " + evt.detail.command + ". Ignoring command.");
         break;
     }
   },
 
   initRemotePage: function () {
     let iframe = document.getElementById("remote-report").contentDocument;
     iframe.addEventListener("RemoteHealthReportCommand",
-                            function onCommand(e) {healthReportWrapper.handleRemoteCommand(e);},
+                            function onCommand(e) { healthReportWrapper.handleRemoteCommand(e); },
                             false);
     healthReportWrapper.updatePrefState();
   },
 
   // error handling
   ERROR_INIT_FAILED:    1,
   ERROR_PAYLOAD_FAILED: 2,
   ERROR_PREFS_FAILED:   3,
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -49,17 +49,17 @@ Cu.import("resource://gre/modules/Notifi
   ["TelemetryStopwatch", "resource://gre/modules/TelemetryStopwatch.jsm"],
   ["Translation", "resource:///modules/translation/Translation.jsm"],
   ["UITour", "resource:///modules/UITour.jsm"],
   ["UpdateUtils", "resource://gre/modules/UpdateUtils.jsm"],
   ["Weave", "resource://services-sync/main.js"],
   ["fxAccounts", "resource://gre/modules/FxAccounts.jsm"],
   ["gDevTools", "resource://devtools/client/framework/gDevTools.jsm"],
   ["gDevToolsBrowser", "resource://devtools/client/framework/gDevTools.jsm"],
-  ["webrtcUI", "resource:///modules/webrtcUI.jsm",],
+  ["webrtcUI", "resource:///modules/webrtcUI.jsm", ]
 ].forEach(([name, resource]) => XPCOMUtils.defineLazyModuleGetter(this, name, resource));
 
 if (AppConstants.MOZ_SAFE_BROWSING) {
   XPCOMUtils.defineLazyModuleGetter(this, "SafeBrowsing",
     "resource://gre/modules/SafeBrowsing.jsm");
 }
 
 if (AppConstants.MOZ_CRASHREPORTER) {
@@ -736,17 +736,17 @@ function gKeywordURIFixup({ target: brow
         accessKey: gNavigatorBundle.getString("keywordURIFixup.dismiss.accesskey"),
         callback: function() {
           let notification = notificationBox.getNotificationWithValue("keyword-uri-fixup");
           notificationBox.removeNotification(notification, true);
         }
       }
     ];
     let notification =
-      notificationBox.appendNotification(message,"keyword-uri-fixup", null,
+      notificationBox.appendNotification(message, "keyword-uri-fixup", null,
                                          notificationBox.PRIORITY_INFO_HIGH,
                                          buttons);
     notification.persistence = 1;
   };
 
   try {
     gDNSService.asyncResolve(hostName, 0, onLookupComplete, Services.tm.mainThread);
   } catch (ex) {
@@ -880,16 +880,27 @@ addEventListener("DOMContentLoaded", fun
         .QueryInterface(Ci.nsIInterfaceRequestor)
         .getInterface(Ci.nsIXULWindow)
         .XULBrowserWindow = window.XULBrowserWindow;
   window.QueryInterface(Ci.nsIDOMChromeWindow).browserDOMWindow =
     new nsBrowserAccess();
 
   let initBrowser =
     document.getAnonymousElementByAttribute(gBrowser, "anonid", "initialBrowser");
+
+  // The window's first argument is a tab if and only if we are swapping tabs.
+  // We must set the browser's usercontextid before updateBrowserRemoteness(),
+  // so that the newly created remote tab child has the correct usercontextid.
+  if (window.arguments) {
+    let tabToOpen = window.arguments[0];
+    if (tabToOpen instanceof XULElement && tabToOpen.hasAttribute("usercontextid")) {
+      initBrowser.setAttribute("usercontextid", tabToOpen.getAttribute("usercontextid"));
+    }
+  }
+
   gBrowser.updateBrowserRemoteness(initBrowser, gMultiProcessBrowser);
 });
 
 var gBrowserInit = {
   delayedStartupFinished: false,
 
   onLoad: function() {
     gBrowser.addEventListener("DOMUpdatePageReport", gPopupBlockerObserver, false);
@@ -2834,17 +2845,17 @@ var BrowserOnClick = {
             case 1 : // Pre-populate
               params.location = location;
           }
         } catch (e) {
           Components.utils.reportError("Couldn't get ssl_override pref: " + e);
         }
 
         window.openDialog('chrome://pippki/content/exceptionDialog.xul',
-                          '','chrome,centerscreen,modal', params);
+                          '', 'chrome,centerscreen,modal', params);
 
         // If the user added the exception cert, attempt to reload the page
         if (params.exceptionAdded) {
           browser.reload();
         }
         break;
 
       case "returnButton":
@@ -5189,17 +5200,17 @@ var gHomeButton = {
   },
 
   updateTooltip: function (homeButton)
   {
     if (!homeButton)
       homeButton = document.getElementById("home-button");
     if (homeButton) {
       var homePage = this.getHomePage();
-      homePage = homePage.replace(/\|/g,', ');
+      homePage = homePage.replace(/\|/g, ', ');
       if (homePage.toLowerCase() == "about:home")
         homeButton.setAttribute("tooltiptext", homeButton.getAttribute("aboutHomeOverrideTooltip"));
       else
         homeButton.setAttribute("tooltiptext", homePage);
     }
   },
 
   getHomePage: function ()
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -1189,17 +1189,17 @@ var PageInfoListener = {
         if (val.primitiveType == content.CSSPrimitiveValue.CSS_URI) {
           addImage(val.getStringValue(), label, strings.notSet, elem, true);
         }
         else if (val.primitiveType == content.CSSPrimitiveValue.CSS_STRING) {
           // This is for -moz-image-rect.
           // TODO: Reimplement once bug 714757 is fixed.
           let strVal = val.getStringValue();
           if (strVal.search(/^.*url\(\"?/) > -1) {
-            let url = strVal.replace(/^.*url\(\"?/,"").replace(/\"?\).*$/,"");
+            let url = strVal.replace(/^.*url\(\"?/, "").replace(/\"?\).*$/, "");
             addImage(url, label, strings.notSet, elem, true);
           }
         }
         else if (val.cssValueType == content.CSSValue.CSS_VALUE_LIST) {
           // Recursively resolve multiple nested CSS value lists.
           for (let i = 0; i < val.length; i++) {
             addImgFunc(label, val.item(i));
           }
--- a/browser/base/content/pageinfo/pageInfo.js
+++ b/browser/base/content/pageinfo/pageInfo.js
@@ -638,17 +638,17 @@ function addImage(imageViewRow)
 
 //******** Link Stuff
 function openURL(target)
 {
   var url = target.parentNode.childNodes[2].value;
   window.open(url, "_blank", "chrome");
 }
 
-function onBeginLinkDrag(event,urlField,descField)
+function onBeginLinkDrag(event, urlField, descField)
 {
   if (event.originalTarget.localName != "treechildren")
     return;
 
   var tree = event.target;
   if (!("treeBoxObject" in tree))
     tree = tree.parentNode;
 
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -4656,18 +4656,18 @@
             childNodes: [null, this.tabContextMenu, this.tabContainer],
             firstChild: { nextSibling: this.tabContextMenu },
             getElementsByAttribute: function (attr, attrValue) {
               if (attr == "anonid" && attrValue == "tabContextMenu")
                 return [this.self.tabContextMenu];
               return [];
             },
             // Also support adding event listeners (forward to the tab container)
-            addEventListener: function (a,b,c) { this.self.tabContainer.addEventListener(a,b,c); },
-            removeEventListener: function (a,b,c) { this.self.tabContainer.removeEventListener(a,b,c); }
+            addEventListener: function (a, b, c) { this.self.tabContainer.addEventListener(a, b, c); },
+            removeEventListener: function (a, b, c) { this.self.tabContainer.removeEventListener(a, b, c); }
           });
         ]]>
         </getter>
       </property>
     </implementation>
 
     <handlers>
       <handler event="DOMWindowClose" phase="capturing">
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -538,17 +538,17 @@ function isBidiEnabled() {
     return true;
 
   // now see if the system locale is an RTL one.
   var rv = false;
 
   try {
     var localeService = Components.classes["@mozilla.org/intl/nslocaleservice;1"]
                                   .getService(Components.interfaces.nsILocaleService);
-    var systemLocale = localeService.getSystemLocale().getCategory("NSILOCALE_CTYPE").substr(0,3);
+    var systemLocale = localeService.getSystemLocale().getCategory("NSILOCALE_CTYPE").substr(0, 3);
 
     switch (systemLocale) {
       case "ar-":
       case "he-":
       case "fa-":
       case "ug-":
       case "ur-":
       case "syr":
index f4642caeddd0d6a6766edb1f8017a05564c41fa1..92370ee7aa3cebc210eaea98e99ef927b692e1c5
GIT binary patch
literal 46222
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
XzPVE|Y;sft__ySxm8B{rOoIOhH8Nq4
index 97de0c2e4fcfc08a7cdd382b6447a52473632cce..aa206c51e3bbe5370382f235d2c3bcc08626600f
GIT binary patch
literal 14051
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
ZDN>gvB|p1`&<XLM$w(?nRErq}{vY|mspS9w
index 06cef2920eb49e0cac0518aca9fcac924ecb1cfc..461961e8d4760ead749ad27290ed1e3fbaf023c9
GIT binary patch
literal 37693
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
Wnnb;~9P&2)t&wWFs#S2Ci2nhMQI3HC
index efe2eedef90361c6c17830303c0c4f75e4c53f74..aad81f40d066b9cd6387a800df7029fadc57f220
GIT binary patch
literal 11763
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
index 7dcb71d7fd3200d8eea67e4483319a35eaeab071..f46b957c2f883ef2b0a454f14140647fc072e5bf
GIT binary patch
literal 36640
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
L&qTLg$2s<Y?eZ9-
index bd77310f8ddb52be3a4ad886487f1cd099fb499c..b45a3400f794ea6e44c9291cebb55b599abe7b48
GIT binary patch
literal 12083
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
aub7fg7V~o<b+}0Xjf#S%e1q)Q$o~Tv_)$p!
index 06cef2920eb49e0cac0518aca9fcac924ecb1cfc..461961e8d4760ead749ad27290ed1e3fbaf023c9
GIT binary patch
literal 37693
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
Wnnb;~9P&2)t&wWFs#S2Ci2nhMQI3HC
index efe2eedef90361c6c17830303c0c4f75e4c53f74..aad81f40d066b9cd6387a800df7029fadc57f220
GIT binary patch
literal 11763
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
--- a/browser/components/customizableui/CustomizableUI.jsm
+++ b/browser/components/customizableui/CustomizableUI.jsm
@@ -1069,17 +1069,17 @@ var CustomizableUIInternal = {
             node.overflowable.uninit();
             node.overflowable = null;
           }
           areaNodes.delete(node);
         }
       }
     }
 
-    for (let [,widget] of gPalette) {
+    for (let [, widget] of gPalette) {
       widget.instances.delete(document);
       this.notifyListeners("onWidgetInstanceRemoved", widget.id, document);
     }
 
     for (let [area, areaMap] of gPendingBuildAreas) {
       let toDelete = [];
       for (let [areaNode, ] of areaMap) {
         if (areaNode.ownerDocument == document) {
@@ -2540,17 +2540,17 @@ var CustomizableUIInternal = {
 
     // Reset placements to make restoring default placements possible.
     gPlacements = new Map();
     gDirtyAreaCache = new Set();
     gSeenWidgets = new Set();
     // Clear the saved state to ensure that defaults will be used.
     gSavedState = null;
     // Restore the state for each area to its defaults
-    for (let [areaId,] of gAreas) {
+    for (let [areaId, ] of gAreas) {
       this.restoreStateForArea(areaId);
     }
   },
 
   _resetExtraToolbars: function(aFilter = null) {
     let firstWindow = true; // Only need to unregister and persist once
     for (let [win, ] of gBuildWindows) {
       let toolbox = win.gNavToolbox;
@@ -2660,17 +2660,17 @@ var CustomizableUIInternal = {
       if (gBuildWindows.size == 0) {
         // We don't have any build windows to look at, so just assume for now
         // that its removable.
         return true;
       }
 
       if (!widgetNode) {
         // Pick any of the build windows to look at.
-        let [window,] = [...gBuildWindows][0];
+        let [window, ] = [...gBuildWindows][0];
         [, widgetNode] = this.getWidgetNode(widgetId, window);
       }
       // If we don't have a node, we assume it's removable. This can happen because
       // getWidgetProvider returns PROVIDER_XUL by default, but this will also happen
       // for API-provided widgets which have been destroyed.
       if (!widgetNode) {
         return true;
       }
@@ -2894,17 +2894,17 @@ this.CustomizableUI = {
 
   /**
    * An iteratable property of windows managed by CustomizableUI.
    * Note that this can *only* be used as an iterator. ie:
    *     for (let window of CustomizableUI.windows) { ... }
    */
   windows: {
     *[Symbol.iterator]() {
-      for (let [window,] of gBuildWindows)
+      for (let [window, ] of gBuildWindows)
         yield window;
     }
   },
 
   /**
    * Add a listener object that will get fired for various events regarding
    * customization.
    *
@@ -3766,17 +3766,17 @@ function WidgetGroupWrapper(aWidget) {
     this.__defineGetter__(propertyName, () => aWidget[propertyName]);
   }
 
   this.__defineGetter__("provider", () => CustomizableUI.PROVIDER_API);
 
   this.__defineSetter__("disabled", function(aValue) {
     aValue = !!aValue;
     aWidget.disabled = aValue;
-    for (let [,instance] of aWidget.instances) {
+    for (let [, instance] of aWidget.instances) {
       instance.disabled = aValue;
     }
   });
 
   this.forWindow = function WidgetGroupWrapper_forWindow(aWindow) {
     let wrapperMap;
     if (!gSingleWrapperCache.has(aWindow)) {
       wrapperMap = new Map();
--- a/browser/components/migration/IEProfileMigrator.js
+++ b/browser/components/migration/IEProfileMigrator.js
@@ -358,17 +358,17 @@ Settings.prototype = {
     // Converts from yes/no to a boolean.
     let yesNoToBoolean = v => v == "yes";
 
     // Converts source format like "en-us,ar-kw;q=0.7,ar-om;q=0.3" into
     // destination format like "en-us, ar-kw, ar-om".
     // Final string is sorted by quality (q=) param.
     function parseAcceptLanguageList(v) {
       return v.match(/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/gi)
-              .sort(function (a , b) {
+              .sort(function (a, b) {
                 let qA = parseFloat(a.split(";q=")[1]) || 1.0;
                 let qB = parseFloat(b.split(";q=")[1]) || 1.0;
                 return qB - qA;
               })
               .map(a => a.split(";")[0]);
     }
 
     // For reference on some of the available IE Registry settings:
--- a/browser/components/newtab/tests/xpcshell/test_PlacesProvider.js
+++ b/browser/components/newtab/tests/xpcshell/test_PlacesProvider.js
@@ -65,17 +65,17 @@ add_task(function test_LinkChecker_secur
     {url: "javascript:alert('hello')", expected: false}, // jshint ignore:line
     {url: "data:image/png;base64,XXX", expected: false},
     {url: "about:newtab", expected: true},
     {url: "https://example.com", expected: true},
     {url: "ftp://example.com", expected: true},
   ];
   for (let {url, expected} of urls) {
     let observed = PlacesProvider.LinkChecker.checkLoadURI(url);
-    equal(observed , expected, `can load "${url}"?`);
+    equal(observed, expected, `can load "${url}"?`);
   }
 });
 
 /** Test Provider **/
 
 add_task(function* test_Links_getLinks() {
   yield PlacesTestUtils.clearHistory();
   let provider = PlacesProvider.links;
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -722,22 +722,22 @@ BrowserGlue.prototype = {
   _checkForOldBuildUpdates: function () {
     // check for update if our build is old
     if (AppConstants.MOZ_UPDATER &&
         Services.prefs.getBoolPref("app.update.enabled") &&
         Services.prefs.getBoolPref("app.update.checkInstallTime")) {
 
       let buildID = Services.appinfo.appBuildID;
       let today = new Date().getTime();
-      let buildDate = new Date(buildID.slice(0,4),     // year
-                               buildID.slice(4,6) - 1, // months are zero-based.
-                               buildID.slice(6,8),     // day
-                               buildID.slice(8,10),    // hour
-                               buildID.slice(10,12),   // min
-                               buildID.slice(12,14))   // ms
+      let buildDate = new Date(buildID.slice(0, 4),     // year
+                               buildID.slice(4, 6) - 1, // months are zero-based.
+                               buildID.slice(6, 8),     // day
+                               buildID.slice(8, 10),    // hour
+                               buildID.slice(10, 12),   // min
+                               buildID.slice(12, 14))   // ms
       .getTime();
 
       const millisecondsIn24Hours = 86400000;
       let acceptableAge = Services.prefs.getIntPref("app.update.checkInstallTime.days") * millisecondsIn24Hours;
 
       if (buildDate + acceptableAge < today) {
         Cc["@mozilla.org/updates/update-service;1"].getService(Ci.nsIApplicationUpdateService).checkForBackgroundUpdates();
       }
--- a/browser/components/places/content/places.js
+++ b/browser/components/places/content/places.js
@@ -731,17 +731,17 @@ var PlacesOrganizer = {
     ctx.save();
     ctx.fillStyle = "-moz-Dialog";
     ctx.fillRect(0, 0, width, height);
     ctx.translate(width/2, height/2);
 
     ctx.fillStyle = "GrayText";
     ctx.mozTextStyle = "12pt sans serif";
     var len = ctx.mozMeasureText(notAvailableText);
-    ctx.translate(-len/2,0);
+    ctx.translate(-len/2, 0);
     ctx.mozDrawText(notAvailableText);
     ctx.restore();
   },
 
   toggleAdditionalInfoFields: function PO_toggleAdditionalInfoFields() {
     var infoBox = document.getElementById("infoBox");
     var infoBoxExpander = document.getElementById("infoBoxExpander");
     var infoBoxExpanderLabel = document.getElementById("infoBoxExpanderLabel");
--- a/browser/components/places/tests/browser/browser_bookmarkProperties_addKeywordForThisSearch.js
+++ b/browser/components/places/tests/browser/browser_bookmarkProperties_addKeywordForThisSearch.js
@@ -25,17 +25,17 @@ add_task(function* () {
       yield promiseKeywordNotification;
 
       // After the notification, the keywords cache will update asynchronously.
       info("Check the keyword entry has been created");
       let entry;
       yield waitForCondition(function* () {
         entry = yield PlacesUtils.keywords.fetch("kw");
         return !!entry;
-      },"Unable to find the expected keyword");
+      }, "Unable to find the expected keyword");
       is(entry.keyword, "kw", "keyword is correct");
       is(entry.url.href, TEST_URL, "URL is correct");
       is(entry.postData, "accenti%3D%E0%E8%EC%F2%F9&search%3D%25s", "POST data is correct");
 
       info("Check the charset has been saved");
       let charset = yield PlacesUtils.getCharsetForURI(NetUtil.newURI(TEST_URL));
       is(charset, "windows-1252", "charset is correct");
 
--- a/browser/components/places/tests/browser/browser_drag_bookmarks_on_toolbar.js
+++ b/browser/components/places/tests/browser/browser_drag_bookmarks_on_toolbar.js
@@ -67,17 +67,17 @@ function synthesizeDragWithDirection(aEl
     aElement.removeEventListener("click", prevent, false);
 
     // Cleanup eventually opened menus.
     if (aElement.localName == "menu" && aElement.open)
       aElement.open = false;
     aCallback()
   }, false);
 
-  var prevent = function(aEvent) {aEvent.preventDefault();}
+  var prevent = function(aEvent) { aEvent.preventDefault(); }
 
   var xIncrement = 0;
   var yIncrement = 0;
 
   switch (aDirection) {
     case dragDirections.LEFT:
       xIncrement = -1;
       break;
--- a/browser/components/preferences/connection.js
+++ b/browser/components/preferences/connection.js
@@ -15,17 +15,17 @@ var gConnectionsDialog = {
     if (proxyTypePref.value != 1)
       return true;
 
     var httpProxyURLPref = document.getElementById("network.proxy.http");
     var httpProxyPortPref = document.getElementById("network.proxy.http_port");
     var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
 
     // If the port is 0 and the proxy server is specified, focus on the port and cancel submission.
-    for (let prefName of ["http","ssl","ftp","socks"]) {
+    for (let prefName of ["http", "ssl", "ftp", "socks"]) {
       let proxyPortPref = document.getElementById("network.proxy." + prefName + "_port");
       let proxyPref = document.getElementById("network.proxy." + prefName);
       // Only worry about ports which are currently active. If the share option is on, then ignore
       // all ports except the HTTP port
       if (proxyPref.value != "" && proxyPortPref.value == 0 &&
             (prefName == "http" || !shareProxiesPref.value)) {
         document.getElementById("networkProxy" + prefName.toUpperCase() + "_Port").focus();
         return false;
--- a/browser/components/preferences/in-content/preferences.js
+++ b/browser/components/preferences/in-content/preferences.js
@@ -162,17 +162,17 @@ function helpButtonCommand() {
   let helpTopic = categories.querySelector(".category[value=" + pane + "]")
                             .getAttribute("helpTopic");
   openHelpLink(helpTopic);
 }
 
 function friendlyPrefCategoryNameToInternalName(aName) {
   if (aName.startsWith("pane"))
     return aName;
-  return "pane" + aName.substring(0,1).toUpperCase() + aName.substr(1);
+  return "pane" + aName.substring(0, 1).toUpperCase() + aName.substr(1);
 }
 
 // This function is duplicated inside of utilityOverlay.js's openPreferences.
 function internalPrefCategoryNameToFriendlyName(aName) {
   return (aName || "").replace(/^pane./, function(toReplace) { return toReplace[4].toLowerCase(); });
 }
 
 // Put up a confirm dialog with "ok to restart", "revert without restarting"
--- a/browser/components/preferences/in-content/tests/browser_bug705422.js
+++ b/browser/components/preferences/in-content/tests/browser_bug705422.js
@@ -13,23 +13,23 @@ function initTest() {
 
     var cm =  Components.classes["@mozilla.org/cookiemanager;1"]
                         .getService(Components.interfaces.nsICookieManager);
 
     // delete all cookies (might be left over from other tests)
     cm.removeAll();
 
     // data for cookies
-    var vals = [[searchTerm+".com", dummyTerm, dummyTerm],          // match
-                [searchTerm+".org", dummyTerm, dummyTerm],          // match
-                [dummyTerm+".com", searchTerm, dummyTerm],          // match
-                [dummyTerm+".edu", searchTerm+dummyTerm, dummyTerm],// match
-                [dummyTerm+".net", dummyTerm, searchTerm],          // match
-                [dummyTerm+".org", dummyTerm, searchTerm+dummyTerm],// match
-                [dummyTerm+".int", dummyTerm, dummyTerm]];          // no match
+    var vals = [[searchTerm+".com", dummyTerm, dummyTerm],           // match
+                [searchTerm+".org", dummyTerm, dummyTerm],           // match
+                [dummyTerm+".com", searchTerm, dummyTerm],           // match
+                [dummyTerm+".edu", searchTerm+dummyTerm, dummyTerm], // match
+                [dummyTerm+".net", dummyTerm, searchTerm],           // match
+                [dummyTerm+".org", dummyTerm, searchTerm+dummyTerm], // match
+                [dummyTerm+".int", dummyTerm, dummyTerm]];           // no match
 
     // matches must correspond to above data
     const matches = 6;
 
     var ios = Components.classes["@mozilla.org/network/io-service;1"]
                         .getService(Components.interfaces.nsIIOService);
     var cookieSvc = Components.classes["@mozilla.org/cookieService;1"]
                               .getService(Components.interfaces.nsICookieService);
@@ -41,17 +41,17 @@ function initTest() {
         cookieSvc.setCookieString(cookieUri, null, name+"="+value+";", null);
     }
 
     // open cookie manager
     var cmd = window.openDialog("chrome://browser/content/preferences/cookies.xul",
                                 "Browser:Cookies", "", {});
 
     // when it has loaded, run actual tests
-    cmd.addEventListener("load", function() {executeSoon(function() {runTest(cmd, searchTerm, vals.length, matches);});}, false);
+    cmd.addEventListener("load", function() { executeSoon(function() { runTest(cmd, searchTerm, vals.length, matches); }); }, false);
 }
 
 function isDisabled(win, expectation) {
     var disabled = win.document.getElementById("removeAllCookies").disabled;
     is(disabled, expectation, "Remove all cookies button has correct state: "+(expectation?"disabled":"enabled"));
 }
 
 function runTest(win, searchTerm, cookies, matches) {
--- a/browser/components/preferences/permissions.js
+++ b/browser/components/preferences/permissions.js
@@ -46,17 +46,17 @@ var gPermissionManager = {
     isContainer: function(aIndex) { return false; },
     setTree: function(aTree) {},
     getImageSrc: function(aRow, aColumn) {},
     getProgressMode: function(aRow, aColumn) {},
     getCellValue: function(aRow, aColumn) {},
     cycleHeader: function(column) {},
     getRowProperties: function(row) { return ""; },
     getColumnProperties: function(column) { return ""; },
-    getCellProperties: function(row,column) {
+    getCellProperties: function(row, column) {
       if (column.element.getAttribute("id") == "siteCol")
         return "ltr";
 
       return "";
     }
   },
 
   _getCapabilityString: function (aCapability)
--- a/browser/components/sessionstore/SessionStore.jsm
+++ b/browser/components/sessionstore/SessionStore.jsm
@@ -4212,17 +4212,16 @@ var SessionStoreInternal = {
    *
    * @param aTab
    *        The tab that will be "reset"
    */
   _resetLocalTabRestoringState: function (aTab) {
     NS_ASSERT(aTab.linkedBrowser.__SS_restoreState,
               "given tab is not restoring");
 
-    let window = aTab.ownerGlobal;
     let browser = aTab.linkedBrowser;
 
     // Keep the tab's previous state for later in this method
     let previousState = browser.__SS_restoreState;
 
     // The browser is no longer in any sort of restoring state.
     delete browser.__SS_restoreState;
 
--- a/browser/components/syncedtabs/test/browser/browser_sidebar_syncedtabslist.js
+++ b/browser/components/syncedtabs/test/browser/browser_sidebar_syncedtabslist.js
@@ -86,22 +86,22 @@ add_task(function* testSyncedTabsSidebar
   let SyncedTabs = SidebarUI.browser.contentWindow.SyncedTabs;
 
   Assert.ok(syncedTabsDeckComponent, "component exists");
 
   originalSyncedTabsInternal = SyncedTabs._internal;
   SyncedTabs._internal = {
     isConfiguredToSyncTabs: true,
     hasSyncedThisSession: true,
-    getTabClients() { return Promise.resolve([])},
-    syncTabs() {return Promise.resolve();},
+    getTabClients() { return Promise.resolve([]) },
+    syncTabs() { return Promise.resolve(); },
   };
 
-  sinon.stub(syncedTabsDeckComponent, "_accountStatus", ()=> Promise.resolve(true));
-  sinon.stub(SyncedTabs._internal, "getTabClients", ()=> Promise.resolve(Cu.cloneInto(FIXTURE, {})));
+  sinon.stub(syncedTabsDeckComponent, "_accountStatus", () => Promise.resolve(true));
+  sinon.stub(SyncedTabs._internal, "getTabClients", () => Promise.resolve(Cu.cloneInto(FIXTURE, {})));
 
   yield syncedTabsDeckComponent.updatePanel();
   // This is a hacky way of waiting for the view to render. The view renders
   // after the following promise (a different instance of which is triggered
   // in updatePanel) resolves, so we wait for it here as well
   yield syncedTabsDeckComponent.tabListComponent._store.getData();
 
   Assert.ok(SyncedTabs._internal.getTabClients.called, "get clients called");
@@ -139,22 +139,22 @@ add_task(function* testSyncedTabsSidebar
   let SyncedTabs = window.SidebarUI.browser.contentWindow.SyncedTabs;
 
   Assert.ok(syncedTabsDeckComponent, "component exists");
 
   originalSyncedTabsInternal = SyncedTabs._internal;
   SyncedTabs._internal = {
     isConfiguredToSyncTabs: true,
     hasSyncedThisSession: true,
-    getTabClients() { return Promise.resolve([])},
-    syncTabs() {return Promise.resolve();},
+    getTabClients() { return Promise.resolve([]) },
+    syncTabs() { return Promise.resolve(); },
   };
 
-  sinon.stub(syncedTabsDeckComponent, "_accountStatus", ()=> Promise.resolve(true));
-  sinon.stub(SyncedTabs._internal, "getTabClients", ()=> Promise.resolve(Cu.cloneInto(FIXTURE, {})));
+  sinon.stub(syncedTabsDeckComponent, "_accountStatus", () => Promise.resolve(true));
+  sinon.stub(SyncedTabs._internal, "getTabClients", () => Promise.resolve(Cu.cloneInto(FIXTURE, {})));
 
   yield syncedTabsDeckComponent.updatePanel();
   // This is a hacky way of waiting for the view to render. The view renders
   // after the following promise (a different instance of which is triggered
   // in updatePanel) resolves, so we wait for it here as well
   yield syncedTabsDeckComponent.tabListComponent._store.getData();
 
   let filterInput = syncedTabsDeckComponent._window.document.querySelector(".tabsFilter");
@@ -199,33 +199,33 @@ add_task(function* testSyncedTabsSidebar
   let syncedTabsDeckComponent = window.SidebarUI.browser.contentWindow.syncedTabsDeckComponent;
   let SyncedTabs = window.SidebarUI.browser.contentWindow.SyncedTabs;
 
   originalSyncedTabsInternal = SyncedTabs._internal;
   SyncedTabs._internal = {
     isConfiguredToSyncTabs: false,
     hasSyncedThisSession: false,
     getTabClients() {},
-    syncTabs() {return Promise.resolve();},
+    syncTabs() { return Promise.resolve(); },
   };
 
   Assert.ok(syncedTabsDeckComponent, "component exists");
 
   sinon.spy(syncedTabsDeckComponent, "updatePanel");
   sinon.spy(syncedTabsDeckComponent, "observe");
 
-  sinon.stub(syncedTabsDeckComponent, "_accountStatus", ()=> Promise.reject("Test error"));
+  sinon.stub(syncedTabsDeckComponent, "_accountStatus", () => Promise.reject("Test error"));
   yield syncedTabsDeckComponent.updatePanel();
 
   let selectedPanel = syncedTabsDeckComponent.container.querySelector(".sync-state.selected");
   Assert.ok(selectedPanel.classList.contains("notAuthedInfo"),
     "not-authed panel is selected on auth error");
 
   syncedTabsDeckComponent._accountStatus.restore();
-  sinon.stub(syncedTabsDeckComponent, "_accountStatus", ()=> Promise.resolve(accountExists));
+  sinon.stub(syncedTabsDeckComponent, "_accountStatus", () => Promise.resolve(accountExists));
   yield syncedTabsDeckComponent.updatePanel();
   selectedPanel = syncedTabsDeckComponent.container.querySelector(".sync-state.selected");
   Assert.ok(selectedPanel.classList.contains("notAuthedInfo"),
     "not-authed panel is selected");
 
   accountExists = true;
   yield syncedTabsDeckComponent.updatePanel();
   selectedPanel = syncedTabsDeckComponent.container.querySelector(".sync-state.selected");
@@ -234,24 +234,24 @@ add_task(function* testSyncedTabsSidebar
 
   SyncedTabs._internal.isConfiguredToSyncTabs = true;
   yield syncedTabsDeckComponent.updatePanel();
   selectedPanel = syncedTabsDeckComponent.container.querySelector(".sync-state.selected");
   Assert.ok(selectedPanel.classList.contains("tabs-fetching"),
     "tabs fetch panel is selected");
 
   SyncedTabs._internal.hasSyncedThisSession = true;
-  sinon.stub(SyncedTabs._internal, "getTabClients", ()=> Promise.resolve([]));
+  sinon.stub(SyncedTabs._internal, "getTabClients", () => Promise.resolve([]));
   yield syncedTabsDeckComponent.updatePanel();
   selectedPanel = syncedTabsDeckComponent.container.querySelector(".sync-state.selected");
   Assert.ok(selectedPanel.classList.contains("singleDeviceInfo"),
     "tabs fetch panel is selected");
 
   SyncedTabs._internal.getTabClients.restore();
-  sinon.stub(SyncedTabs._internal, "getTabClients", ()=> Promise.resolve([{id: "mock"}]));
+  sinon.stub(SyncedTabs._internal, "getTabClients", () => Promise.resolve([{id: "mock"}]));
   yield syncedTabsDeckComponent.updatePanel();
   selectedPanel = syncedTabsDeckComponent.container.querySelector(".sync-state.selected");
   Assert.ok(selectedPanel.classList.contains("tabs-container"),
     "tabs panel is selected");
 });
 
 add_task(testClean);
 
@@ -261,22 +261,22 @@ add_task(function* testSyncedTabsSidebar
   let SyncedTabs = window.SidebarUI.browser.contentWindow.SyncedTabs;
 
   Assert.ok(syncedTabsDeckComponent, "component exists");
 
   originalSyncedTabsInternal = SyncedTabs._internal;
   SyncedTabs._internal = {
     isConfiguredToSyncTabs: true,
     hasSyncedThisSession: true,
-    getTabClients() { return Promise.resolve([])},
-    syncTabs() {return Promise.resolve();},
+    getTabClients() { return Promise.resolve([]) },
+    syncTabs() { return Promise.resolve(); },
   };
 
-  sinon.stub(syncedTabsDeckComponent, "_accountStatus", ()=> Promise.resolve(true));
-  sinon.stub(SyncedTabs._internal, "getTabClients", ()=> Promise.resolve(Cu.cloneInto(FIXTURE, {})));
+  sinon.stub(syncedTabsDeckComponent, "_accountStatus", () => Promise.resolve(true));
+  sinon.stub(SyncedTabs._internal, "getTabClients", () => Promise.resolve(Cu.cloneInto(FIXTURE, {})));
 
   yield syncedTabsDeckComponent.updatePanel();
   // This is a hacky way of waiting for the view to render. The view renders
   // after the following promise (a different instance of which is triggered
   // in updatePanel) resolves, so we wait for it here as well
   yield syncedTabsDeckComponent.tabListComponent._store.getData();
 
   info("Right-clicking the search box should show text-related actions");
--- a/browser/components/syncedtabs/test/xpcshell/test_SyncedTabsDeckComponent.js
+++ b/browser/components/syncedtabs/test/xpcshell/test_SyncedTabsDeckComponent.js
@@ -12,17 +12,17 @@ let { DeckView } = Cu.import("resource:/
 add_task(function* testInitUninit() {
   let deckStore = new SyncedTabsDeckStore();
   let listComponent = {};
 
   let ViewMock = sinon.stub();
   let view = {render: sinon.spy(), destroy: sinon.spy(), container: {}};
   ViewMock.returns(view);
 
-  sinon.stub(SyncedTabs, "syncTabs", ()=> Promise.resolve());
+  sinon.stub(SyncedTabs, "syncTabs", () => Promise.resolve());
 
   sinon.spy(deckStore, "on");
   sinon.stub(deckStore, "setPanels");
 
   let component = new SyncedTabsDeckComponent({
     window,
     deckStore,
     listComponent,
@@ -81,17 +81,17 @@ add_task(function* testObserver() {
   let deckStore = new SyncedTabsDeckStore();
   let listStore = new SyncedTabsListStore(SyncedTabs);
   let listComponent = {};
 
   let ViewMock = sinon.stub();
   let view = {render: sinon.spy(), destroy: sinon.spy(), container: {}};
   ViewMock.returns(view);
 
-  sinon.stub(SyncedTabs, "syncTabs", ()=> Promise.resolve());
+  sinon.stub(SyncedTabs, "syncTabs", () => Promise.resolve());
 
   sinon.spy(deckStore, "on");
   sinon.stub(deckStore, "setPanels");
 
   sinon.stub(listStore, "getData");
 
   let component = new SyncedTabsDeckComponent({
     window,
@@ -141,17 +141,17 @@ add_task(function* testPanelStatus() {
   let component = new SyncedTabsDeckComponent({
     fxAccounts,
     deckStore,
     listComponent,
     SyncedTabs: SyncedTabsMock,
   });
 
   let isAuthed = false;
-  sinon.stub(fxAccounts, "accountStatus", ()=> Promise.resolve(isAuthed));
+  sinon.stub(fxAccounts, "accountStatus", () => Promise.resolve(isAuthed));
   let result = yield component.getPanelStatus();
   Assert.equal(result, component.PANELS.NOT_AUTHED_INFO);
 
   isAuthed = true;
 
   SyncedTabsMock.isConfiguredToSyncTabs = false;
   result = yield component.getPanelStatus();
   Assert.equal(result, component.PANELS.TABS_DISABLED);
@@ -160,30 +160,30 @@ add_task(function* testPanelStatus() {
 
   SyncedTabsMock.hasSyncedThisSession = false;
   result = yield component.getPanelStatus();
   Assert.equal(result, component.PANELS.TABS_FETCHING);
 
   SyncedTabsMock.hasSyncedThisSession = true;
 
   let clients = [];
-  sinon.stub(SyncedTabsMock, "getTabClients", ()=> Promise.resolve(clients));
+  sinon.stub(SyncedTabsMock, "getTabClients", () => Promise.resolve(clients));
   result = yield component.getPanelStatus();
   Assert.equal(result, component.PANELS.SINGLE_DEVICE_INFO);
 
   clients = ["mock-client"];
   result = yield component.getPanelStatus();
   Assert.equal(result, component.PANELS.TABS_CONTAINER);
 
   fxAccounts.accountStatus.restore();
-  sinon.stub(fxAccounts, "accountStatus", ()=> Promise.reject("err"));
+  sinon.stub(fxAccounts, "accountStatus", () => Promise.reject("err"));
   result = yield component.getPanelStatus();
   Assert.equal(result, component.PANELS.NOT_AUTHED_INFO);
 
-  sinon.stub(component, "getPanelStatus", ()=> Promise.resolve("mock-panelId"));
+  sinon.stub(component, "getPanelStatus", () => Promise.resolve("mock-panelId"));
   sinon.spy(deckStore, "selectPanel");
   yield component.updatePanel();
   Assert.ok(deckStore.selectPanel.calledWith("mock-panelId"));
 });
 
 add_task(function* testActions() {
   let listComponent = {};
   let windowMock = {
--- a/browser/components/uitour/test/head.js
+++ b/browser/components/uitour/test/head.js
@@ -55,17 +55,17 @@ function taskify(fun) {
 
 function is_hidden(element) {
   var style = element.ownerGlobal.getComputedStyle(element);
   if (style.display == "none")
     return true;
   if (style.visibility != "visible")
     return true;
   if (style.display == "-moz-popup")
-    return ["hiding","closed"].indexOf(element.state) != -1;
+    return ["hiding", "closed"].indexOf(element.state) != -1;
 
   // Hiding a parent element will hide all its children
   if (element.parentNode != element.ownerDocument)
     return is_hidden(element.parentNode);
 
   return false;
 }
 
--- a/browser/experiments/test/xpcshell/test_conditions.js
+++ b/browser/experiments/test/xpcshell/test_conditions.js
@@ -240,17 +240,17 @@ add_task(function* test_times() {
     // "expected applicable?", rejection reason or null, fake now date, manifest data
 
     // start time
 
     [true,  null, now,
       {startTime: nowSec -  5 * SEC_IN_ONE_DAY,
          endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
     [true,  null, now,
-      {startTime: nowSec ,
+      {startTime: nowSec,
          endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
     [false,  "startTime", now,
       {startTime: nowSec +  5 * SEC_IN_ONE_DAY,
          endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
 
     // end time
 
     [false,  "endTime", now,
--- a/browser/extensions/pocket/content/panels/js/messages.js
+++ b/browser/extensions/pocket/content/panels/js/messages.js
@@ -23,17 +23,17 @@ var pktPanelMessaging = (function() {
  function addMessageListener(panelId, messageId, callback) {
    document.addEventListener(panelPrefixedMessageId(panelId, messageId), function(e) {
 
 			callback(JSON.parse(e.target.getAttribute("payload"))[0]);
 
 			// TODO: Figure out why e.target.parentNode is null
 			// e.target.parentNode.removeChild(e.target);
 
-		},false);
+		}, false);
 
 	}
 
 	function removeMessageListener(panelId, messageId, callback) {
    document.removeEventListener(panelPrefixedMessageId(panelId, messageId), callback);
 	}
 
  function sendMessage(panelId, messageId, payload, callback) {
--- a/browser/extensions/pocket/content/panels/js/saved.js
+++ b/browser/extensions/pocket/content/panels/js/saved.js
@@ -22,29 +22,29 @@ var PKT_SAVED_OVERLAY = function (option
     this.autocloseTimingFinalState = 2000;
     this.mouseInside = false;
     this.userTags = [];
     this.cxt_suggested_available = 0;
     this.cxt_entered = 0;
     this.cxt_suggested = 0;
     this.cxt_removed = 0;
     this.justaddedsuggested = false;
-    this.fillTagContainer = function(tags,container,tagclass) {
+    this.fillTagContainer = function(tags, container, tagclass) {
         var newtagleft = 0;
         container.children().remove();
         for (var i = 0; i < tags.length; i++) {
             var newtag = $('<li><a href="#" class="token_tag ' + tagclass + '">' + tags[i] + '</a></li>');
             container.append(newtag);
             var templeft = newtag.position().left;
             this.cxt_suggested_available++;
             newtagleft = templeft;
         }
     };
     this.fillUserTags = function() {
-        thePKT_SAVED.sendMessage("getTags",{},function(resp)
+        thePKT_SAVED.sendMessage("getTags", {}, function(resp)
         {
             if (typeof resp == 'object' && typeof resp.tags == 'object')
             {
                 myself.userTags = resp.tags;
             }
         });
     };
     this.fillSuggestedTags = function()
@@ -68,39 +68,39 @@ var PKT_SAVED_OVERLAY = function (option
                 for (var i = 0; i < resp.value.suggestedTags.length; i++)
                 {
                     newtags.push(resp.value.suggestedTags[i].tag);
                 }
                 myself.suggestedTagsLoaded = true;
                 if (!myself.mouseInside) {
                     myself.startCloseTimer();
                 }
-                myself.fillTagContainer(newtags,$('.pkt_ext_suggestedtag_detail ul'),'token_suggestedtag');
+                myself.fillTagContainer(newtags, $('.pkt_ext_suggestedtag_detail ul'), 'token_suggestedtag');
             }
             else if (resp.status == 'error') {
                 var msg = $('<p class="suggestedtag_msg">');
                 msg.text(resp.error.message);
                 $('.pkt_ext_suggestedtag_detail').append(msg);
                 this.suggestedTagsLoaded = true;
                 if (!myself.mouseInside) {
                     myself.startCloseTimer();
                 }
             }
         });
     }
     this.initAutoCloseEvents = function() {
-        this.wrapper.on('mouseenter',function() {
+        this.wrapper.on('mouseenter', function() {
             myself.mouseInside = true;
             myself.stopCloseTimer();
         });
-        this.wrapper.on('mouseleave',function() {
+        this.wrapper.on('mouseleave', function() {
             myself.mouseInside = false;
             myself.startCloseTimer();
         });
-        this.wrapper.on('click',function(e) {
+        this.wrapper.on('click', function(e) {
             myself.closeValid = false;
         });
     };
     this.startCloseTimer = function(manualtime)
     {
         var settime = manualtime ? manualtime : myself.autocloseTiming;
         if (typeof myself.autocloseTimer == 'number')
         {
@@ -143,31 +143,31 @@ var PKT_SAVED_OVERLAY = function (option
         var inputleft = $('.token-input-input-token input').position().left;
         var listleft = $('.token-input-list').position().left;
         var listleftmanual = parseInt($('.token-input-list').css('left'));
         var listleftnatural = listleft - listleftmanual;
         var leftwidth = $('.pkt_ext_tag_input_wrapper').outerWidth();
 
         if ((inputleft + listleft + 20) > leftwidth)
         {
-            $('.token-input-list').css('left',Math.min(((inputleft + listleftnatural - leftwidth + 20)*-1),0) + 'px');
+            $('.token-input-list').css('left', Math.min(((inputleft + listleftnatural - leftwidth + 20)*-1), 0) + 'px');
         }
         else
         {
-            $('.token-input-list').css('left','0');
+            $('.token-input-list').css('left', '0');
         }
     };
     this.checkPlaceholderStatus = function() {
         if (this.wrapper.find('.pkt_ext_tag_input_wrapper').find('.token-input-token').length)
         {
-            this.wrapper.find('.token-input-input-token input').attr('placeholder','');
+            this.wrapper.find('.token-input-input-token input').attr('placeholder', '');
         }
         else
         {
-            this.wrapper.find('.token-input-input-token input').attr('placeholder',$('.pkt_ext_tag_input').attr('placeholder')).css('width','200px');
+            this.wrapper.find('.token-input-input-token input').attr('placeholder', $('.pkt_ext_tag_input').attr('placeholder')).css('width', '200px');
         }
     };
     this.initTagInput = function() {
         var inputwrapper = $('.pkt_ext_tag_input_wrapper');
         inputwrapper.find('.pkt_ext_tag_input').tokenInput([], {
             searchDelay: 200,
             minChars: 1,
             animateDropdown: false,
@@ -182,63 +182,63 @@ var PKT_SAVED_OVERLAY = function (option
                     for (var i = 0; i < myself.userTags.length; i++) {
                         if (r.test(myself.userTags[i]) && limit > 0) {
                             returnlist.push({name:myself.userTags[i]});
                             limit--;
                         }
                     }
                 }
                 if (!$('.token-input-dropdown-tag').data('init')) {
-                    $('.token-input-dropdown-tag').css('width',inputwrapper.outerWidth()).data('init');
+                    $('.token-input-dropdown-tag').css('width', inputwrapper.outerWidth()).data('init');
                     inputwrapper.append($('.token-input-dropdown-tag'));
                 }
                 cb(returnlist);
             },
             textToData: function(text) {
                 if ($.trim(text).length > 25 || !$.trim(text).length) {
                     if (text.length > 25) {
                         myself.showTagsError(myself.dictJSON.maxtaglength);
                         changestamp = Date.now();
                         setTimeout(function() {
                             $('.token-input-input-token input').val(text).focus();
-                        },10);
+                        }, 10);
                     }
                     return null;
                 }
                 myself.hideTagsError();
                 return {name:myself.sanitizeText(text.toLowerCase())};
             },
             onReady: function() {
                 $('.token-input-dropdown').addClass('token-input-dropdown-tag');
-                inputwrapper.find('.token-input-input-token input').attr('placeholder',$('.tag-input').attr('placeholder')).css('width','200px');
+                inputwrapper.find('.token-input-input-token input').attr('placeholder', $('.tag-input').attr('placeholder')).css('width', '200px');
                 if ($('.pkt_ext_suggestedtag_detail').length) {
-                    myself.wrapper.find('.pkt_ext_suggestedtag_detail').on('click','.token_tag',function(e) {
+                    myself.wrapper.find('.pkt_ext_suggestedtag_detail').on('click', '.token_tag', function(e) {
                         e.preventDefault();
                         var tag = $(e.target);
                         if ($(this).parents('.pkt_ext_suggestedtag_detail_disabled').length) {
                             return;
                         }
                         myself.justaddedsuggested = true;
-                        inputwrapper.find('.pkt_ext_tag_input').tokenInput('add',{id:inputwrapper.find('.token-input-token').length,name:tag.text()});
+                        inputwrapper.find('.pkt_ext_tag_input').tokenInput('add', {id:inputwrapper.find('.token-input-token').length, name:tag.text()});
                         tag.addClass('token-suggestedtag-inactive');
                         $('.token-input-input-token input').focus();
                     });
                 }
-                $('.token-input-list').on('keydown','input',function(e) {
+                $('.token-input-list').on('keydown', 'input', function(e) {
                     if (e.which == 37) {
                         myself.updateSlidingTagList();
                     }
-                }).on('keypress','input',function(e) {
+                }).on('keypress', 'input', function(e) {
                     if (e.which == 13) {
                         if (typeof changestamp == 'undefined' || (Date.now() - changestamp > 250)) {
                             e.preventDefault();
                             myself.wrapper.find('.pkt_ext_btn').trigger('click');
                         }
                     }
-                }).on('keyup','input',function(e) {
+                }).on('keyup', 'input', function(e) {
                     myself.checkValidTagSubmit();
                 });
                 myself.checkPlaceholderStatus();
             },
             onAdd: function() {
                 myself.checkValidTagSubmit();
                 changestamp = Date.now();
                 myself.hideInactiveTags();
@@ -252,24 +252,24 @@ var PKT_SAVED_OVERLAY = function (option
             },
             onShowDropdown: function() {
                 thePKT_SAVED.sendMessage("expandSavePanel");
             },
             onHideDropdown: function() {
                 thePKT_SAVED.sendMessage("collapseSavePanel");
             }
         });
-        $('body').on('keydown',function(e) {
+        $('body').on('keydown', function(e) {
             var key = e.keyCode || e.which;
             if (key == 8) {
                 var selected = $('.token-input-selected-token');
                 if (selected.length) {
                     e.preventDefault();
                     e.stopImmediatePropagation();
-                    inputwrapper.find('.pkt_ext_tag_input').tokenInput('remove',{name:selected.find('p').text()});
+                    inputwrapper.find('.pkt_ext_tag_input').tokenInput('remove', {name:selected.find('p').text()});
                 }
             }
             else if ($(e.target).parent().hasClass('token-input-input-token')) {
                 e.stopImmediatePropagation();
             }
         });
     };
     this.disableInput = function() {
@@ -333,17 +333,17 @@ var PKT_SAVED_OVERLAY = function (option
             if ($(this).hasClass('pkt_ext_removeitem')) {
                 e.preventDefault();
                 myself.disableInput();
                 $('.pkt_ext_containersaved').find('.pkt_ext_detail h2').text(myself.dictJSON.processingremove);
 
                 thePKT_SAVED.sendMessage("deleteItem",
                 {
                     itemId: myself.savedItemId
-                },function(resp) {
+                }, function(resp) {
                     if (resp.status == 'success') {
                         myself.showStateFinalMsg(myself.dictJSON.pageremoved);
                     }
                     else if (resp.status == 'error') {
                         $('.pkt_ext_edit_msg').addClass('pkt_ext_edit_msg_error pkt_ext_edit_msg_active').text(resp.error.message);
                     }
                 });
             }
@@ -374,32 +374,32 @@ var PKT_SAVED_OVERLAY = function (option
             return;
         }
         var activetokenstext = '|';
         $('.token-input-token').each(function(index, element) {
             activetokenstext += $(element).find('p').text() + '|';
         });
 
         var inactivetags = $('.pkt_ext_suggestedtag_detail').find('.token_tag_inactive');
-        inactivetags.each(function(index,element) {
+        inactivetags.each(function(index, element) {
             if (activetokenstext.indexOf('|' + $(element).text() + '|') == -1) {
                 $(element).removeClass('token_tag_inactive');
             }
         });
     };
     this.hideInactiveTags = function() {
         if (!$('.pkt_ext_suggestedtag_detail').length) {
             return;
         }
         var activetokenstext = '|';
         $('.token-input-token').each(function(index, element) {
             activetokenstext += $(element).find('p').text() + '|';
         });
         var activesuggestedtags = $('.token_tag').not('.token_tag_inactive');
-        activesuggestedtags.each(function(index,element) {
+        activesuggestedtags.each(function(index, element) {
             if (activetokenstext.indexOf('|' + $(element).text() + '|') > -1) {
                 $(element).addClass('token_tag_inactive');
             }
         });
     };
     this.showStateSaved = function(initobj) {
         this.wrapper.find('.pkt_ext_detail h2').text(this.dictJSON.pagesaved);
         this.wrapper.find('.pkt_ext_btn').addClass('pkt_ext_btn_disabled');
@@ -430,26 +430,26 @@ var PKT_SAVED_OVERLAY = function (option
         {
             return '';
         }
         return String(s).replace(/[&<>"']/g, function (str) {
             return sanitizeMap[str];
         });
     };
     this.showStateFinalMsg = function(msg) {
-        this.wrapper.find('.pkt_ext_tag_detail').one('webkitTransitionEnd transitionend msTransitionEnd oTransitionEnd',function(e)
+        this.wrapper.find('.pkt_ext_tag_detail').one('webkitTransitionEnd transitionend msTransitionEnd oTransitionEnd', function(e)
         {
             $(this).off('webkitTransitionEnd transitionend msTransitionEnd oTransitionEnd');
             myself.preventCloseTimerCancel = true;
             myself.startCloseTimer(myself.autocloseTimingFinalState);
             myself.wrapper.find('.pkt_ext_detail h2').text(msg);
         });
         this.wrapper.addClass('pkt_ext_container_finalstate');
     };
-    this.showStateError = function(headline,detail) {
+    this.showStateError = function(headline, detail) {
         this.wrapper.find('.pkt_ext_detail h2').text(headline);
         this.wrapper.find('.pkt_ext_detail h3').text(detail);
         this.wrapper.addClass('pkt_ext_container_detailactive pkt_ext_container_finalstate pkt_ext_container_finalerrorstate');
         this.preventCloseTimerCancel = true;
         this.startCloseTimer(myself.autocloseTimingFinalState);
     }
     this.getTranslations = function()
     {
@@ -555,33 +555,33 @@ PKT_SAVED.prototype = {
         }
 
         myself.overlay.create();
 
         // tell back end we're ready
         thePKT_SAVED.sendMessage("show");
 
         // wait confirmation of save before flipping to final saved state
-        thePKT_SAVED.addMessageListener("saveLink",function(resp)
+        thePKT_SAVED.addMessageListener("saveLink", function(resp)
         {
             if (resp.status == 'error') {
                 if (typeof resp.error == 'object')
                 {
                     if (resp.error.localizedKey)
                     {
-                        myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,myself.overlay.dictJSON[resp.error.localizedKey]);
+                        myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved, myself.overlay.dictJSON[resp.error.localizedKey]);
                     }
                     else
                     {
-                        myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,resp.error.message);
+                        myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved, resp.error.message);
                     }
                 }
                 else
                 {
-                    myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,myself.overlay.dictJSON.errorgeneric);
+                    myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved, myself.overlay.dictJSON.errorgeneric);
                 }
                 return;
             }
 
             myself.overlay.showStateSaved(resp);
         });
 
     }
--- a/browser/extensions/pocket/content/panels/js/tmpl.js
+++ b/browser/extensions/pocket/content/panels/js/tmpl.js
@@ -1,150 +1,150 @@
 (function() {
   var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
-templates['saved_premiumextras'] = template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
+templates['saved_premiumextras'] = template({"compiler":[6, ">= 2.0.0-beta.1"], "main":function(depth0, helpers, partials, data) {
   return "<div class=\"pkt_ext_suggestedtag_detailshown\">\n</div>";
-  },"useData":true});
-templates['saved_premiumshell'] = template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
+  }, "useData":true});
+templates['saved_premiumshell'] = template({"compiler":[6, ">= 2.0.0-beta.1"], "main":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "<div class=\"pkt_ext_suggestedtag_detail pkt_ext_suggestedtag_detail_loading\">\n    <h4>"
-    + escapeExpression(((helper = (helper = helpers.suggestedtags || (depth0 != null ? depth0.suggestedtags : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"suggestedtags","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.suggestedtags || (depth0 != null ? depth0.suggestedtags : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"suggestedtags", "hash":{}, "data":data}) : helper)))
     + "</h4>\n    <div class=\"pkt_ext_loadingspinner\"><div></div></div>\n    <ul class=\"pkt_ext_cf\">\n    </ul>\n</div>";
-},"useData":true});
-templates['saved_shell'] = template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
+}, "useData":true});
+templates['saved_shell'] = template({"compiler":[6, ">= 2.0.0-beta.1"], "main":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "<div class=\"pkt_ext_initload\">\n    <div class=\"pkt_ext_logo\"></div> \n    <div class=\"pkt_ext_topdetail\">\n        <h2>"
-    + escapeExpression(((helper = (helper = helpers.saving || (depth0 != null ? depth0.saving : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"saving","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.saving || (depth0 != null ? depth0.saving : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"saving", "hash":{}, "data":data}) : helper)))
     + "</h2>\n    </div>                     \n    <div class=\"pkt_ext_loadingspinner\"><div></div></div>\n</div>                                      \n<div class=\"pkt_ext_detail\">                        \n    <div class=\"pkt_ext_logo\"></div>\n    <div class=\"pkt_ext_topdetail\">\n        <h2>"
-    + escapeExpression(((helper = (helper = helpers.pagesaved || (depth0 != null ? depth0.pagesaved : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pagesaved","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pagesaved || (depth0 != null ? depth0.pagesaved : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pagesaved", "hash":{}, "data":data}) : helper)))
     + "</h2>\n        <h3 class=\"pkt_ext_errordetail\"></h3>\n        <nav class=\"pkt_ext_item_actions pkt_ext_cf\">\n            <ul>\n                <li><a class=\"pkt_ext_removeitem\" href=\"#\">"
-    + escapeExpression(((helper = (helper = helpers.removepage || (depth0 != null ? depth0.removepage : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"removepage","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.removepage || (depth0 != null ? depth0.removepage : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"removepage", "hash":{}, "data":data}) : helper)))
     + "</a></li>\n                <li class=\"pkt_ext_actions_separator\"></li>                                \n                <li><a class=\"pkt_ext_openpocket\" href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/a?src=ff_ext_saved\" target=\"_blank\">"
-    + escapeExpression(((helper = (helper = helpers.viewlist || (depth0 != null ? depth0.viewlist : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"viewlist","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.viewlist || (depth0 != null ? depth0.viewlist : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"viewlist", "hash":{}, "data":data}) : helper)))
     + "</a></li>\n            </ul>\n        </nav>                        \n    </div>\n    <div class=\"pkt_ext_tag_detail pkt_ext_cf\">\n        <div class=\"pkt_ext_tag_input_wrapper\">\n            <div class=\"pkt_ext_tag_input_blocker\"></div>\n            <input class=\"pkt_ext_tag_input\" type=\"text\" placeholder=\""
-    + escapeExpression(((helper = (helper = helpers.addtags || (depth0 != null ? depth0.addtags : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"addtags","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.addtags || (depth0 != null ? depth0.addtags : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"addtags", "hash":{}, "data":data}) : helper)))
     + "\">\n        </div>\n        <a href=\"#\" class=\"pkt_ext_btn pkt_ext_btn_disabled\">"
-    + escapeExpression(((helper = (helper = helpers.save || (depth0 != null ? depth0.save : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"save","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.save || (depth0 != null ? depth0.save : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"save", "hash":{}, "data":data}) : helper)))
     + "</a>\n    </div>\n    <p class=\"pkt_ext_edit_msg\"></p>                        \n</div>";
-},"useData":true});
-templates['signup_shell'] = template({"1":function(depth0,helpers,partials,data) {
+}, "useData":true});
+templates['signup_shell'] = template({"1":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "	<p class=\"pkt_ext_learnmorecontainer\"><a class=\"pkt_ext_learnmore\" href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "?s=ffi&t=learnmore&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\">"
-    + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"learnmore", "hash":{}, "data":data}) : helper)))
     + "</a></p>\n";
-},"3":function(depth0,helpers,partials,data) {
+}, "3":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "	<p class=\"pkt_ext_learnmorecontainer\"><a class=\"pkt_ext_learnmore pkt_ext_learnmoreinactive\" href=\"#\">"
-    + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"learnmore", "hash":{}, "data":data}) : helper)))
     + "</a></p>\n";
-},"5":function(depth0,helpers,partials,data) {
+}, "5":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "	<p class=\"btn-container\"><a href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/ff_signup?s=ffi&t=signupff&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\" class=\"btn signup-btn-firefox\"><span class=\"logo\"></span><span class=\"text\">"
-    + escapeExpression(((helper = (helper = helpers.signinfirefox || (depth0 != null ? depth0.signinfirefox : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signinfirefox","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.signinfirefox || (depth0 != null ? depth0.signinfirefox : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"signinfirefox", "hash":{}, "data":data}) : helper)))
     + "</span></a></p>\n";
-},"7":function(depth0,helpers,partials,data) {
+}, "7":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "	<p class=\"btn-container\"><a href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/ff_signup?s=ffi&t=signupff&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\" class=\"btn signup-btn-firefox\"><span class=\"logo\"></span><span class=\"text\">"
-    + escapeExpression(((helper = (helper = helpers.signupfirefox || (depth0 != null ? depth0.signupfirefox : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signupfirefox","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.signupfirefox || (depth0 != null ? depth0.signupfirefox : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"signupfirefox", "hash":{}, "data":data}) : helper)))
     + "</span></a></p>\n	<p class=\"btn-container\"><a href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/signup?force=email&src=extension&s=ffi&t=signupemail&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\" class=\"btn btn-secondary signup-btn-email signup-btn-initstate\">"
-    + escapeExpression(((helper = (helper = helpers.signupemail || (depth0 != null ? depth0.signupemail : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signupemail","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.signupemail || (depth0 != null ? depth0.signupemail : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"signupemail", "hash":{}, "data":data}) : helper)))
     + "</a></p>\n";
-},"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
+}, "compiler":[6, ">= 2.0.0-beta.1"], "main":function(depth0, helpers, partials, data) {
   var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "<div class=\"pkt_ext_introdetail pkt_ext_introdetailhero\">\n	<h2 class=\"pkt_ext_logo\">Pocket</h2>\n	<p class=\"pkt_ext_tagline\">"
-    + escapeExpression(((helper = (helper = helpers.tagline || (depth0 != null ? depth0.tagline : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"tagline","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.tagline || (depth0 != null ? depth0.tagline : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"tagline", "hash":{}, "data":data}) : helper)))
     + "</p>\n";
-  stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.showlearnmore : depth0), {"name":"if","hash":{},"fn":this.program(1, data),"inverse":this.program(3, data),"data":data});
+  stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.showlearnmore : depth0), {"name":"if", "hash":{}, "fn":this.program(1, data), "inverse":this.program(3, data), "data":data});
   if (stack1 != null) { buffer += stack1; }
   buffer += "	<div class=\"pkt_ext_introimg\"></div>\n</div>\n<div class=\"pkt_ext_signupdetail pkt_ext_signupdetail_hero\">\n	<h4>"
-    + escapeExpression(((helper = (helper = helpers.signuptosave || (depth0 != null ? depth0.signuptosave : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signuptosave","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.signuptosave || (depth0 != null ? depth0.signuptosave : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"signuptosave", "hash":{}, "data":data}) : helper)))
     + "</h4>\n";
-  stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.fxasignedin : depth0), {"name":"if","hash":{},"fn":this.program(5, data),"inverse":this.program(7, data),"data":data});
+  stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.fxasignedin : depth0), {"name":"if", "hash":{}, "fn":this.program(5, data), "inverse":this.program(7, data), "data":data});
   if (stack1 != null) { buffer += stack1; }
   return buffer + "	<p class=\"alreadyhave\">"
-    + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct", "hash":{}, "data":data}) : helper)))
     + " <a href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/login?ep=3&src=extension&s=ffi&t=login&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\">"
-    + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"loginnow","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"loginnow", "hash":{}, "data":data}) : helper)))
     + "</a>.</p>\n</div>";
-},"useData":true});
-templates['signupstoryboard_shell'] = template({"1":function(depth0,helpers,partials,data) {
+}, "useData":true});
+templates['signupstoryboard_shell'] = template({"1":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "			<p><a class=\"pkt_ext_learnmore\" href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "?s=ffi&t=learnmore&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\">"
-    + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"learnmore", "hash":{}, "data":data}) : helper)))
     + "</a></p>\n";
-},"3":function(depth0,helpers,partials,data) {
+}, "3":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "			<p><a class=\"pkt_ext_learnmore pkt_ext_learnmoreinactive\" href=\"#\">"
-    + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"learnmore", "hash":{}, "data":data}) : helper)))
     + "</a></p>\n";
-},"5":function(depth0,helpers,partials,data) {
+}, "5":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "	<p class=\"btn-container\"><a href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/ff_signup?s=ffi&t=signupff&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\" class=\"btn signup-btn-firefox\"><span class=\"logo\"></span><span class=\"text\">"
-    + escapeExpression(((helper = (helper = helpers.signinfirefox || (depth0 != null ? depth0.signinfirefox : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signinfirefox","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.signinfirefox || (depth0 != null ? depth0.signinfirefox : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"signinfirefox", "hash":{}, "data":data}) : helper)))
     + "</span></a></p>\n";
-},"7":function(depth0,helpers,partials,data) {
+}, "7":function(depth0, helpers, partials, data) {
   var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
   return "	<p class=\"btn-container\"><a href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/ff_signup?s=ffi&t=signupff&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\" class=\"btn signup-btn-firefox\"><span class=\"logo\"></span><span class=\"text\">"
-    + escapeExpression(((helper = (helper = helpers.signupfirefox || (depth0 != null ? depth0.signupfirefox : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signupfirefox","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.signupfirefox || (depth0 != null ? depth0.signupfirefox : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"signupfirefox", "hash":{}, "data":data}) : helper)))
     + "</span></a></p>\n	<p class=\"btn-container\"><a href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/signup?force=email&src=extension&s=ffi&t=signupemail&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\" class=\"btn btn-secondary signup-btn-email signup-btn-initstate\">"
-    + escapeExpression(((helper = (helper = helpers.signupemail || (depth0 != null ? depth0.signupemail : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signupemail","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.signupemail || (depth0 != null ? depth0.signupemail : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"signupemail", "hash":{}, "data":data}) : helper)))
     + "</a></p>\n";
-},"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
+}, "compiler":[6, ">= 2.0.0-beta.1"], "main":function(depth0, helpers, partials, data) {
   var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "<div class=\"pkt_ext_introdetail pkt_ext_introdetailstoryboard\">\n	<div class=\"pkt_ext_introstory pkt_ext_introstoryone\">\n		<div class=\"pkt_ext_introstory_text\">\n			<p class=\"pkt_ext_tagline\">"
-    + escapeExpression(((helper = (helper = helpers.taglinestory_one || (depth0 != null ? depth0.taglinestory_one : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"taglinestory_one","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.taglinestory_one || (depth0 != null ? depth0.taglinestory_one : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"taglinestory_one", "hash":{}, "data":data}) : helper)))
     + "</p>\n		</div>\n		<div class=\"pkt_ext_introstoryone_img\"></div>\n	</div>\n	<div class=\"pkt_ext_introstorydivider\"></div>\n	<div class=\"pkt_ext_introstory pkt_ext_introstorytwo\">\n		<div class=\"pkt_ext_introstory_text\">\n			<p class=\"pkt_ext_tagline\">"
-    + escapeExpression(((helper = (helper = helpers.taglinestory_two || (depth0 != null ? depth0.taglinestory_two : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"taglinestory_two","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.taglinestory_two || (depth0 != null ? depth0.taglinestory_two : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"taglinestory_two", "hash":{}, "data":data}) : helper)))
     + "</p>\n";
-  stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.showlearnmore : depth0), {"name":"if","hash":{},"fn":this.program(1, data),"inverse":this.program(3, data),"data":data});
+  stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.showlearnmore : depth0), {"name":"if", "hash":{}, "fn":this.program(1, data), "inverse":this.program(3, data), "data":data});
   if (stack1 != null) { buffer += stack1; }
   buffer += "		</div>\n		<div class=\"pkt_ext_introstorytwo_img\"></div>\n	</div>\n</div>\n<div class=\"pkt_ext_signupdetail\">\n	<h4>"
-    + escapeExpression(((helper = (helper = helpers.signuptosave || (depth0 != null ? depth0.signuptosave : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signuptosave","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.signuptosave || (depth0 != null ? depth0.signuptosave : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"signuptosave", "hash":{}, "data":data}) : helper)))
     + "</h4>\n";
-  stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.fxasignedin : depth0), {"name":"if","hash":{},"fn":this.program(5, data),"inverse":this.program(7, data),"data":data});
+  stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.fxasignedin : depth0), {"name":"if", "hash":{}, "fn":this.program(5, data), "inverse":this.program(7, data), "data":data});
   if (stack1 != null) { buffer += stack1; }
   return buffer + "	<p class=\"alreadyhave\">"
-    + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct", "hash":{}, "data":data}) : helper)))
     + " <a href=\"https://"
-    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"pockethost", "hash":{}, "data":data}) : helper)))
     + "/login?ep=3&src=extension&s=ffi&t=login&v="
-    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"variant", "hash":{}, "data":data}) : helper)))
     + "\" target=\"_blank\">"
-    + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"loginnow","hash":{},"data":data}) : helper)))
+    + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing), (typeof helper === functionType ? helper.call(depth0, {"name":"loginnow", "hash":{}, "data":data}) : helper)))
     + "</a>.</p>\n</div>";
-},"useData":true});
+}, "useData":true});
 })();
--- a/browser/extensions/pocket/content/pktApi.jsm
+++ b/browser/extensions/pocket/content/pktApi.jsm
@@ -290,17 +290,17 @@ var pktApi = (function() {
                     var error = {message: errorMessage};
                     options.error(error, request);
                 }
             }
         };
 
         // Set headers
         request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
-        request.setRequestHeader('X-Accept',' application/json');
+        request.setRequestHeader('X-Accept', ' application/json');
 
         // Serialize and Fire off the request
         var str = [];
         for (var p in data) {
             if (data.hasOwnProperty(p)) {
                 str.push(encodeURIComponent(p) + "=" + encodeURIComponent(data[p]));
             }
         }
--- a/browser/modules/DirectoryLinksProvider.jsm
+++ b/browser/modules/DirectoryLinksProvider.jsm
@@ -1201,17 +1201,17 @@ var DirectoryLinksProvider = {
 
   /**
    * Removes clicked flag from frequency cap entry for tile landing url
    * @param url String url of the suggested link
    * @return promise resolved upon disk write completion
    */
   _removeTileClick: function DirectoryLinksProvider_removeTileClick(url = "") {
     // remove trailing slash, to accomodate Places sending site urls ending with '/'
-    let noTrailingSlashUrl = url.replace(/\/$/,"");
+    let noTrailingSlashUrl = url.replace(/\/$/, "");
     let capObject = this._frequencyCaps[url] || this._frequencyCaps[noTrailingSlashUrl];
     // return resolved promise if capObject is not found
     if (!capObject) {
       return Promise.resolve();
     }
     // otherwise remove clicked flag
     delete capObject.clicked;
     return this._writeFrequencyCapFile();
--- a/browser/modules/ReaderParent.jsm
+++ b/browser/modules/ReaderParent.jsm
@@ -8,17 +8,17 @@
 const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
 this.EXPORTED_SYMBOLS = [ "ReaderParent" ];
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 
-XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils","resource://gre/modules/PlacesUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "ReaderMode", "resource://gre/modules/ReaderMode.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "UITour", "resource:///modules/UITour.jsm");
 
 const gStringBundle = Services.strings.createBundle("chrome://global/locale/aboutReader.properties");
 
 var ReaderParent = {
   _readerModeInfoPanelOpen: false,
 
--- a/browser/modules/test/browser_taskbar_preview.js
+++ b/browser/modules/test/browser_taskbar_preview.js
@@ -37,17 +37,17 @@ function test() {
   gPrefService.setBoolPref(ENABLE_PREF_NAME, false);
   is(0, AeroPeek.previews.length, "Should have 0 previews when disabled");
 
   gPrefService.setBoolPref(ENABLE_PREF_NAME, true);
   checkPreviews(4, "Previews are back when re-enabling");
   for (let preview of AeroPeek.previews)
     ok(preview.visible, "Preview is shown as expected after re-enabling");
 
-  [1,2,3,4].forEach(function (idx) {
+  [1, 2, 3, 4].forEach(function (idx) {
     gBrowser.selectedTab = gBrowser.tabs[idx];
     ok(checkSelectedTab(), "Current tab is correctly selected");
   });
 
   // Close #4
   getPreviewForTab(gBrowser.selectedTab).controller.onClose();
   checkPreviews(3, "Expected number of previews after closing selected tab via controller");
   ok(gBrowser.tabs.length == 3, "Successfully closed a tab");
--- a/browser/modules/test/browser_urlBar_zoom.js
+++ b/browser/modules/test/browser_urlBar_zoom.js
@@ -47,17 +47,17 @@ add_task(function* () {
 });
 
 add_task(function* asyncCleanup() {
   // reset zoom level and customizable widget
   ZoomManager.zoom = initialPageZoom;
   is(ZoomManager.zoom, 1, "Zoom level was restored");
   if (document.getElementById("zoom-controls")) {
     CustomizableUI.removeWidgetFromArea("zoom-controls", CustomizableUI.AREA_NAVBAR);
-    ok(!document.getElementById("zoom-controls"),"Customizable zoom widget removed from toolbar");
+    ok(!document.getElementById("zoom-controls"), "Customizable zoom widget removed from toolbar");
   }
 
 });
 
 function promiseObserverNotification(aObserver) {
   let deferred = Promise.defer();
   function notificationCallback(e) {
     Services.obs.removeObserver(notificationCallback, aObserver, false);
--- a/browser/modules/test/xpcshell/test_DirectoryLinksProvider.js
+++ b/browser/modules/test/xpcshell/test_DirectoryLinksProvider.js
@@ -25,17 +25,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesTestUtils",
   "resource://testing-common/PlacesTestUtils.jsm");
 
 do_get_profile();
 
 const DIRECTORY_LINKS_FILE = "directoryLinks.json";
 const DIRECTORY_FRECENCY = 1000;
 const SUGGESTED_FRECENCY = Infinity;
-const kURLData = {"directory": [{"url":"http://example.com","title":"LocalSource"}]};
+const kURLData = {"directory": [{"url":"http://example.com", "title":"LocalSource"}]};
 const kTestURL = 'data:application/json,' + JSON.stringify(kURLData);
 
 // DirectoryLinksProvider preferences
 const kLocalePref = DirectoryLinksProvider._observedPrefs.prefSelectedLocale;
 const kSourceUrlPref = DirectoryLinksProvider._observedPrefs.linksURL;
 const kPingUrlPref = "browser.newtabpage.directory.ping";
 const kNewtabEnhancedPref = "browser.newtabpage.enhanced";
 
@@ -52,17 +52,17 @@ const kPingUrl = kBaseUrl + kPingPath;
 
 // app/profile/firefox.js are not avaialble in xpcshell: hence, preset them
 Services.prefs.setCharPref(kLocalePref, "en-US");
 Services.prefs.setCharPref(kSourceUrlPref, kTestURL);
 Services.prefs.setCharPref(kPingUrlPref, kPingUrl);
 Services.prefs.setBoolPref(kNewtabEnhancedPref, true);
 
 const kHttpHandlerData = {};
-kHttpHandlerData[kExamplePath] = {"directory": [{"url":"http://example.com","title":"RemoteSource"}]};
+kHttpHandlerData[kExamplePath] = {"directory": [{"url":"http://example.com", "title":"RemoteSource"}]};
 
 const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1",
                               "nsIBinaryInputStream",
                               "setInputStream");
 
 var gLastRequestPath;
 
 var suggestedTile1 = {
@@ -1433,17 +1433,17 @@ add_task(function* test_DirectoryLinksPr
   // exhaust daily views
   DirectoryLinksProvider._addFrequencyCapView("1")
   do_check_true(DirectoryLinksProvider._testFrequencyCapLimits("1"));
   DirectoryLinksProvider._addFrequencyCapView("1")
   do_check_false(DirectoryLinksProvider._testFrequencyCapLimits("1"));
 
   // now step into the furture
   let _wasTodayOrig = DirectoryLinksProvider._wasToday;
-  DirectoryLinksProvider._wasToday = function () {return false;}
+  DirectoryLinksProvider._wasToday = function () { return false; }
   // exhaust total views
   DirectoryLinksProvider._addFrequencyCapView("1")
   do_check_true(DirectoryLinksProvider._testFrequencyCapLimits("1"));
   DirectoryLinksProvider._addFrequencyCapView("1")
   // reached totalViews 4, should return false
   do_check_false(DirectoryLinksProvider._testFrequencyCapLimits("1"));
 
   // add more views by updating configuration
@@ -1482,17 +1482,17 @@ add_task(function* test_DirectoryLinksPr
 
   do_check_true(DirectoryLinksProvider._testFrequencyCapLimits("bar.com"));
   // report site action
   yield DirectoryLinksProvider.reportSitesAction([{
     link: {
       targetedSite: "foo.com",
       url: "bar.com"
     },
-    isPinned: function() {return false;},
+    isPinned: function() { return false; },
   }], "view", 0);
 
   // read file content and ensure that view counters are updated
   let data = yield readJsonFile(DirectoryLinksProvider._frequencyCapFilePath);
   do_check_eq(data["bar.com"].dailyViews, 1);
   do_check_eq(data["bar.com"].totalViews, 1);
 
   yield promiseCleanDirectoryLinksProvider();
@@ -1526,19 +1526,19 @@ add_task(function* test_DirectoryLinksPr
         uri: NetUtil.newURI(landingUrl),
         title: "HELLO",
         visits: [{
           visitDate: Date.now()*1000,
           transitionType: Ci.nsINavHistoryService.TRANSITION_LINK
         }]
       },
       {
-        handleError: function () {do_check_true(false);},
+        handleError: function () { do_check_true(false); },
         handleResult: function () {},
-        handleCompletion: function () {resolve();}
+        handleCompletion: function () { resolve(); }
       }
     );
   });
 
   function UrlDeletionTester() {
     this.promise = new Promise(resolve => {
       this.onDeleteURI = (directoryLinksProvider, link) => {
         resolve();
@@ -1823,18 +1823,18 @@ add_task(function* test_blockSuggestedTi
   });
 
   // ensure that tile is suggested
   let suggestedLink = DirectoryLinksProvider._updateSuggestedTile();
   do_check_true(suggestedLink.frecent_sites);
 
   // block suggested tile in a regular way
   DirectoryLinksProvider.reportSitesAction([{
-      isPinned: function() {return false;},
-      link: Object.assign({frecency: 1000},suggestedLink)
+      isPinned: function() { return false; },
+      link: Object.assign({frecency: 1000}, suggestedLink)
   }], "block", 0);
 
   // suggested tile still must be recommended
   suggestedLink = DirectoryLinksProvider._updateSuggestedTile();
   do_check_true(suggestedLink.frecent_sites);
 
   // timestamp suggested_block in the frequency cap object
   DirectoryLinksProvider.handleSuggestedTileBlock();
--- a/browser/modules/test/xpcshell/test_SitePermissions.js
+++ b/browser/modules/test/xpcshell/test_SitePermissions.js
@@ -3,18 +3,18 @@
  */
 "use strict";
 
 Components.utils.import("resource:///modules/SitePermissions.jsm");
 Components.utils.import("resource://gre/modules/Services.jsm");
 
 add_task(function* testPermissionsListing() {
   Assert.deepEqual(SitePermissions.listPermissions().sort(),
-    ["camera","cookie","desktop-notification","geo","image",
-     "indexedDB","install","microphone","popup", "screen"],
+    ["camera", "cookie", "desktop-notification", "geo", "image",
+     "indexedDB", "install", "microphone", "popup", "screen"],
     "Correct list of all permissions");
 });
 
 add_task(function* testGetAllByURI() {
   // check that it returns an empty array on an invalid URI
   // like a file URI, which doesn't support site permissions
   let wrongURI = Services.io.newURI("file:///example.js", null, null)
   Assert.deepEqual(SitePermissions.getAllByURI(wrongURI), []);
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -1066,21 +1066,16 @@ toolbar .toolbarbutton-1 > .toolbarbutto
 
   #sidebar-button@toolbarButtonPressed@ {
     -moz-image-region: rect(36px, 1368px, 72px, 1332px);
   }
 
   #panic-button@toolbarButtonPressed@ {
     -moz-image-region: rect(36px, 1404px, 72px, 1368px);
   }
-
-  #add-share-provider {
-    list-style-image: url(chrome://browser/skin/menuPanel-small@2x.png);
-    -moz-image-region: rect(0px, 192px, 32px, 160px);
-  }
 }
 
 toolbar .toolbarbutton-1:not([type="menu-button"]),
 toolbar .toolbarbutton-1 > .toolbarbutton-menubutton-button {
   min-width: 28px;
 }
 
 #main-window:not([customizing]) .toolbarbutton-1[disabled="true"] > .toolbarbutton-icon,
--- a/browser/themes/shared/identity-block/identity-block.inc.css
+++ b/browser/themes/shared/identity-block/identity-block.inc.css
@@ -19,21 +19,23 @@
   font-size: .9em;
   padding: 3px 5px;
   overflow: hidden;
   /* The padding-left and padding-right transitions handle the delayed hiding of
      the forward button when hovered. */
   transition: padding-left, padding-right;
 }
 
-#urlbar[pageproxystate="valid"] > #identity-box.verifiedIdentity {
+#urlbar[pageproxystate="valid"] > #identity-box.verifiedIdentity > #connection-icon,
+#urlbar[pageproxystate="valid"] > #identity-box.verifiedIdentity > #identity-icon-labels {
   color: var(--identity-box-verified-color);
 }
 
-#urlbar[pageproxystate="valid"] > #identity-box.chromeUI {
+#urlbar[pageproxystate="valid"] > #identity-box.chromeUI > #connection-icon,
+#urlbar[pageproxystate="valid"] > #identity-box.chromeUI > #identity-icon-labels {
   color: var(--identity-box-chrome-color);
 }
 
 #identity-icon-labels:-moz-locale-dir(ltr) {
   padding-left: 2px;
 }
 
 #identity-icon-labels:-moz-locale-dir(rtl) {
@@ -43,17 +45,17 @@
 @conditionalForwardWithUrlbar@ > #forward-button[disabled] + #urlbar > #identity-box {
   padding-inline-start: calc(var(--backbutton-urlbar-overlap) + 5px);
 }
 
 @conditionalForwardWithUrlbar@:hover:not([switchingtabs]) > #forward-button[disabled] + #urlbar > #identity-box {
   /* Forward button hiding is delayed when hovered, so we should use the same
      delay for the identity box. We handle both horizontal paddings (for LTR and
      RTL), the latter two delays here are for padding-left and padding-right. */
-  transition-delay: 0s, 100s, 100s;
+  transition-delay: 100s, 100s;
 }
 
 @conditionalForwardWithUrlbar@:not(:hover) > #forward-button[disabled] + #urlbar > #identity-box {
   /* when not hovered anymore, trigger a new non-delayed transition to react to the forward button hiding */
   padding-inline-start: calc(var(--backbutton-urlbar-overlap) + 5.01px);
 }
 
 /* MAIN IDENTITY ICON */
--- a/browser/themes/shared/menupanel.inc.css
+++ b/browser/themes/shared/menupanel.inc.css
@@ -309,16 +309,21 @@
   toolbarpaletteitem[place="palette"] > #panic-button {
     -moz-image-region: rect(0, 1792px, 64px, 1728px);
   }
 
   toolbaritem[sdkstylewidget="true"] > toolbarbutton {
     -moz-image-region: rect(0, 1664px, 64px, 1600px);
   }
 
+  #add-share-provider {
+    list-style-image: url(chrome://browser/skin/menuPanel-small@2x.png);
+    -moz-image-region: rect(0px, 192px, 32px, 160px);
+  }
+
   /* Footer and wide panel control icons */
   #edit-controls@inAnyPanel@ > toolbarbutton,
   #zoom-controls@inAnyPanel@ > toolbarbutton,
   toolbarpaletteitem[place="palette"] > #edit-controls > toolbarbutton,
   toolbarpaletteitem[place="palette"] > #zoom-controls > toolbarbutton {
     list-style-image: url(chrome://browser/skin/menuPanel-small@2x.png);
   }
 
--- a/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/Buttons.jsm
+++ b/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/Buttons.jsm
@@ -15,17 +15,17 @@ Cu.import("resource://gre/modules/Task.j
 this.Buttons = {
 
   init(libDir) {
     createWidget();
   },
 
   configurations: {
     navBarButtons: {
-      applyConfig: Task.async(() =>{
+      applyConfig: Task.async(() => {
         let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");
         CustomizableUI.addWidgetToArea("screenshot-widget", CustomizableUI.AREA_NAVBAR);
       }),
     },
 
     tabsToolbarButtons: {
       applyConfig: Task.async(() => {
         let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");
--- a/build/moz.configure/old.configure
+++ b/build/moz.configure/old.configure
@@ -165,17 +165,16 @@ def old_configure_options(*options):
     '--enable-b2g-ril',
     '--enable-bundled-fonts',
     '--enable-clang-plugin',
     '--enable-content-sandbox',
     '--enable-cookies',
     '--enable-cpp-rtti',
     '--enable-crashreporter',
     '--enable-ctypes',
-    '--enable-dbm',
     '--enable-dbus',
     '--enable-debug-js-modules',
     '--enable-directshow',
     '--enable-dtrace',
     '--enable-dump-painting',
     '--enable-elf-hack',
     '--enable-extensions',
     '--enable-faststripe',
@@ -186,17 +185,16 @@ def old_configure_options(*options):
     '--enable-gio',
     '--enable-gnomeui',
     '--enable-gold',
     '--enable-hardware-aec-ns',
     '--enable-icf',
     '--enable-install-strip',
     '--enable-ion',
     '--enable-ios-target',
-    '--enable-ipdl-tests',
     '--enable-jitspew',
     '--enable-libjpeg-turbo',
     '--enable-libproxy',
     '--enable-llvm-hacks',
     '--enable-logrefcnt',
     '--enable-maintenance-service',
     '--enable-memory-sanitizer',
     '--enable-mobile-optimize',
@@ -211,17 +209,16 @@ def old_configure_options(*options):
     '--enable-oom-breakpoint',
     '--enable-optimize',
     '--enable-parental-controls',
     '--enable-permissions',
     '--enable-pie',
     '--enable-png-arm-neon-support',
     '--enable-posix-nspr-emulation',
     '--enable-pref-extensions',
-    '--enable-printing',
     '--enable-pulseaudio',
     '--enable-raw',
     '--enable-readline',
     '--enable-reflow-perf',
     '--enable-release',
     '--enable-require-all-d3dc-versions',
     '--enable-safe-browsing',
     '--enable-sandbox',
@@ -230,36 +227,32 @@ def old_configure_options(*options):
     '--enable-skia',
     '--enable-skia-gpu',
     '--enable-small-chunk-size',
     '--enable-startup-notification',
     '--enable-startupcache',
     '--enable-stdcxx-compat',
     '--enable-strip',
     '--enable-synth-pico',
-    '--enable-synth-speechd',
     '--enable-system-cairo',
     '--enable-system-extension-dirs',
     '--enable-system-ffi',
     '--enable-system-pixman',
     '--enable-system-sqlite',
     '--enable-tasktracer',
     '--enable-thread-sanitizer',
     '--enable-trace-logging',
     '--enable-tree-freetype',
     '--enable-ui-locale',
     '--enable-universalchardet',
     '--enable-updater',
     '--enable-url-classifier',
     '--enable-valgrind',
     '--enable-verify-mar',
     '--enable-webrtc',
-    '--enable-websms-backend',
-    '--enable-webspeech',
-    '--enable-webspeechtestbackend',
     '--enable-xul',
     '--enable-zipwriter',
     '--includedir',
     '--libdir',
     '--no-create',
     '--prefix',
     '--with-android-cxx-stl',
     '--with-android-distribution-directory',
@@ -313,18 +306,16 @@ def old_configure_options(*options):
     '--x-includes',
     '--x-libraries',
 
     # Below are the configure flags used by comm-central.
     '--enable-ldap',
     '--enable-mapi',
     '--enable-calendar',
     '--enable-incomplete-external-linkage',
-
-    '--enable-ipc-fuzzer',
 )
 @imports(_from='__builtin__', _import='compile')
 @imports(_from='__builtin__', _import='open')
 @imports('logging')
 @imports('os')
 @imports('subprocess')
 @imports('sys')
 @imports(_from='mozbuild.shellutil', _import='quote')
deleted file mode 100644
--- a/devtools/client/inspector/inspector.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/* vim:set ts=2 sw=2 sts=2 et: */
-/* 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/. */
-
-/* Set the minimum width for the side bar so, all tabs are
-  properly visible. The value can be decreased when bug 1281789
-  is fixed and the all-tabs-menu is available again. */
-#inspector-sidebar-container {
-  overflow: hidden;
-  min-width: 450px;
-  position: relative;
-}
-
-#inspector-sidebar {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-}
-
-/* Override `-moz-user-focus:ignore;` from toolkit/content/minimal-xul.css */
-.inspector-tabpanel > * {
-  -moz-user-focus: normal;
-}
-
-#inspector-sidebar-toggle-box {
-  line-height: initial;
-}
--- a/devtools/client/inspector/inspector.xul
+++ b/devtools/client/inspector/inspector.xul
@@ -1,15 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/content/inspector/inspector.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/skin/inspector.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/skin/rules.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/skin/computed.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/skin/fonts.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/skin/layout.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/skin/animationinspector.css" type="text/css"?>
 <?xml-stylesheet href="resource://devtools/client/shared/components/sidebar-toggle.css" type="text/css"?>
--- a/devtools/client/jar.mn
+++ b/devtools/client/jar.mn
@@ -138,17 +138,16 @@ devtools.jar:
     content/framework/toolbox-init.js (framework/toolbox-init.js)
     content/framework/options-panel.css (framework/options-panel.css)
     content/framework/toolbox-process-window.xul (framework/toolbox-process-window.xul)
 *   content/framework/toolbox-process-window.js (framework/toolbox-process-window.js)
     content/framework/dev-edition-promo/dev-edition-promo.xul (framework/dev-edition-promo/dev-edition-promo.xul)
 *   content/framework/dev-edition-promo/dev-edition-promo.css (framework/dev-edition-promo/dev-edition-promo.css)
     content/framework/dev-edition-promo/dev-edition-logo.png (framework/dev-edition-promo/dev-edition-logo.png)
     content/inspector/inspector.xul (inspector/inspector.xul)
-    content/inspector/inspector.css (inspector/inspector.css)
     content/framework/connect/connect.xhtml (framework/connect/connect.xhtml)
     content/framework/connect/connect.css (framework/connect/connect.css)
     content/framework/connect/connect.js (framework/connect/connect.js)
     content/shared/widgets/graphs-frame.xhtml (shared/widgets/graphs-frame.xhtml)
     content/shared/widgets/cubic-bezier.css (shared/widgets/cubic-bezier.css)
     content/shared/widgets/mdn-docs.css (shared/widgets/mdn-docs.css)
     content/shared/widgets/filter-widget.css (shared/widgets/filter-widget.css)
     content/shared/widgets/spectrum.css (shared/widgets/spectrum.css)
--- a/devtools/client/responsive.html/manager.js
+++ b/devtools/client/responsive.html/manager.js
@@ -1,25 +1,31 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
+const { Ci } = require("chrome");
 const promise = require("promise");
 const { Task } = require("devtools/shared/task");
 const EventEmitter = require("devtools/shared/event-emitter");
-const { TouchEventSimulator } = require("devtools/shared/touch/simulator");
 const { getOwnerWindow } = require("sdk/tabs/utils");
 const { startup } = require("sdk/window/helpers");
 const message = require("./utils/message");
 const { swapToInnerBrowser } = require("./browser/swap");
+const { EmulationFront } = require("devtools/shared/fronts/emulation");
 
 const TOOL_URL = "chrome://devtools/content/responsive.html/index.xhtml";
 
+loader.lazyRequireGetter(this, "DebuggerClient",
+                         "devtools/shared/client/main", true);
+loader.lazyRequireGetter(this, "DebuggerServer",
+                         "devtools/server/main", true);
+
 /**
  * ResponsiveUIManager is the external API for the browser UI, etc. to use when
  * opening and closing the responsive UI.
  *
  * While the HTML UI is in an experimental stage, the older ResponsiveUIManager
  * from devtools/client/responsivedesign/responsivedesign.jsm delegates to this
  * object when the pref "devtools.responsive.html.enabled" is true.
  */
@@ -244,21 +250,16 @@ ResponsiveUI.prototype = {
    * design tool.  It is safe to reference this window directly even with e10s,
    * as the tool UI is always loaded in the parent process.  The web content
    * contained *within* the tool UI on the other hand is loaded in the child
    * process.
    */
   toolWindow: null,
 
   /**
-   * Touch event simulator.
-   */
-  touchEventSimulator: null,
-
-  /**
    * Open RDM while preserving the state of the page.  We use `swapFrameLoaders`
    * to ensure all in-page state is preserved, just like when you move a tab to
    * a new window.
    *
    * For more details, see /devtools/docs/responsive-design-mode.md.
    */
   init: Task.async(function* () {
     let ui = this;
@@ -279,17 +280,18 @@ ResponsiveUI.prototype = {
         return ui.getViewportBrowser();
       })
     });
     yield this.swap.start();
 
     // Notify the inner browser to start the frame script
     yield message.request(this.toolWindow, "start-frame-script");
 
-    this.touchEventSimulator = new TouchEventSimulator(this.getViewportBrowser());
+    // Get the protocol ready to speak with emulation actor
+    yield this.connectToServer();
   }),
 
   /**
    * Close RDM and restore page content back into a regular tab.
    *
    * @param object
    *        Destroy options, which currently includes a `reason` string.
    * @return boolean
@@ -310,43 +312,60 @@ ResponsiveUI.prototype = {
     // Ensure init has finished before starting destroy
     if (!isTabClosing) {
       yield this.inited;
     }
 
     this.tab.removeEventListener("TabClose", this);
     this.toolWindow.removeEventListener("message", this);
 
-    // Stop the touch event simulator if it was running
     if (!isTabClosing) {
-      yield this.touchEventSimulator.stop();
-    }
+      // Stop the touch event simulator if it was running
+      yield this.emulationFront.clearTouchEventsOverride();
 
-    // Notify the inner browser to stop the frame script
-    if (!isTabClosing) {
+      // Notify the inner browser to stop the frame script
       yield message.request(this.toolWindow, "stop-frame-script");
     }
 
     // Destroy local state
     let swap = this.swap;
     this.browserWindow = null;
     this.tab = null;
     this.inited = null;
     this.toolWindow = null;
-    this.touchEventSimulator = null;
     this.swap = null;
 
+    // Close the debugger client used to speak with emulation actor
+    let clientClosed = new Promise((resolve, reject) => {
+      this.client.close(resolve);
+      this.client = this.emulationFront = null;
+    });
+    if (!isTabClosing) {
+      yield clientClosed;
+    }
+
     // Undo the swap and return the content back to a normal tab
     swap.stop();
 
     this.destroyed = true;
 
     return true;
   }),
 
+  connectToServer: Task.async(function* () {
+    if (!DebuggerServer.initialized) {
+      DebuggerServer.init();
+      DebuggerServer.addBrowserActors();
+    }
+    this.client = new DebuggerClient(DebuggerServer.connectPipe());
+    yield this.client.connect();
+    let { tab } = yield this.client.getTab();
+    this.emulationFront = EmulationFront(this.client, tab);
+  }),
+
   handleEvent(event) {
     let { browserWindow, tab } = this;
 
     switch (event.type) {
       case "message":
         this.handleMessage(event);
         break;
       case "TabClose":
@@ -379,22 +398,24 @@ ResponsiveUI.prototype = {
         let { enabled } = event.data;
         this.updateTouchSimulation(enabled);
         break;
     }
   },
 
   updateTouchSimulation: Task.async(function* (enabled) {
     if (enabled) {
-      let reloadNeeded = yield this.touchEventSimulator.start();
+      let reloadNeeded = yield this.emulationFront.setTouchEventsOverride(
+        Ci.nsIDocShell.TOUCHEVENTS_OVERRIDE_ENABLED
+      );
       if (reloadNeeded) {
         this.getViewportBrowser().reload();
       }
     } else {
-      this.touchEventSimulator.stop();
+      this.emulationFront.clearTouchEventsOverride();
     }
   }),
 
   /**
    * Helper for tests. Assumes a single viewport for now.
    */
   getViewportSize() {
     return this.toolWindow.getViewportSize();
--- a/devtools/client/responsive.html/test/browser/browser_shutdown_close_sync.js
+++ b/devtools/client/responsive.html/test/browser/browser_shutdown_close_sync.js
@@ -2,37 +2,49 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Verify RDM closes synchronously when tabs are closed.
 
 const TEST_URL = "http://example.com/";
 
+function waitForClientClose(ui) {
+  return new Promise(resolve => {
+    info("RDM's debugger client is now closed");
+    ui.client.addOneTimeListener("closed", resolve);
+  });
+}
+
 add_task(function* () {
   let tab = yield addTab(TEST_URL);
 
   let { ui } = yield openRDM(tab);
+  let clientClosed = waitForClientClose(ui);
 
   closeRDM(tab, {
     reason: "TabClose",
   });
 
   // This flag is set at the end of `ResponsiveUI.destroy`.  If it is true
   // without yielding on `closeRDM` above, then we must have closed
   // synchronously.
   is(ui.destroyed, true, "RDM closed synchronously");
 
+  yield clientClosed;
   yield removeTab(tab);
 });
 
 add_task(function* () {
   let tab = yield addTab(TEST_URL);
 
   let { ui } = yield openRDM(tab);
+  let clientClosed = waitForClientClose(ui);
 
   yield removeTab(tab);
 
   // This flag is set at the end of `ResponsiveUI.destroy`.  If it is true without
   // yielding on `closeRDM` itself and only removing the tab, then we must have closed
   // synchronously in response to tab closing.
   is(ui.destroyed, true, "RDM closed synchronously");
+
+  yield clientClosed;
 });
--- a/devtools/client/shared/widgets/filter-widget.css
+++ b/devtools/client/shared/widgets/filter-widget.css
@@ -37,20 +37,16 @@
   /* Make sure that when the presets list is shown, it has a fixed width */
   width: 200px;
   padding-left: 6px;
   transition: width .1s;
   flex-shrink: 0;
   border-left: 1px solid var(--theme-splitter-color);
 }
 
-.presets-list .add {
-  margin-top: 4px;
-}
-
 #filter-container:not(.show-presets) .presets-list {
   width: 0;
   border-left: none;
   padding-left: 0;
 }
 
 #filter-container.show-presets .filters-list {
   width: 300px;
@@ -68,16 +64,17 @@
 
 /* The filters and presets list both have footers displayed at the bottom.
    These footers have some input (taking up as much space as possible) and an
    add button next */
 
 .footer {
   display: flex;
   margin: 10px 3px;
+  align-items: center;
 }
 
 .footer :not(button) {
   flex-grow: 1;
   margin-right: 3px;
 }
 
 /* Styles for 1 filter function item */
--- a/devtools/client/themes/inspector.css
+++ b/devtools/client/themes/inspector.css
@@ -20,16 +20,23 @@
   display: flex;
 }
 
 #inspector-toolbar.devtools-toolbar .devtools-toolbar-spacer {
   flex-grow: 1;
   display: inline-block;
 }
 
+/* Add element toolbar button */
+#inspector-element-add-button::before {
+  background-image: url("chrome://devtools/skin/images/add.svg");
+  list-style-image: url("chrome://devtools/skin/images/add.svg");
+  -moz-user-focus: normal;
+}
+
 #inspector-searchlabel {
   overflow: hidden;
   margin-inline-end: 2px;
 }
 
 #inspector-search {
   flex: unset;
 }
@@ -47,16 +54,31 @@
 .theme-dark #inspector-searchbox,
 .theme-light #inspector-searchbox {
   line-height: 19px;
 }
 .theme-firebug #inspector-searchbox {
   line-height: 17px;
 }
 
+/* Eyedropper toolbar button */
+
+#inspector-eyedropper-toggle {
+  /* hidden by default, until we can check that the required highlighter exists */
+  display: none;
+}
+
+#inspector-eyedropper-toggle::before {
+  background-image: var(--eyedropper-image);
+}
+
+#inspector-sidebar-toggle-box {
+  line-height: initial;
+}
+
 #inspector-breadcrumbs-toolbar {
   padding: 0px;
   border-bottom-width: 0px;
   border-top-width: 1px;
   display: block;
   position: relative;
 }
 
@@ -92,31 +114,35 @@
 }
 
 #inspector-breadcrumbs .breadcrumbs-widget-item {
   white-space: nowrap;
   flex-shrink: 0;
   font: message-box;
 }
 
-/* Eyedropper toolbar button */
-
-#inspector-eyedropper-toggle {
-  /* hidden by default, until we can check that the required highlighter exists */
-  display: none;
+/* Set the minimum width for the side bar so, all tabs are
+  properly visible. The value can be decreased when bug 1281789
+  is fixed and the all-tabs-menu is available again. */
+#inspector-sidebar-container {
+  overflow: hidden;
+  min-width: 450px;
+  position: relative;
 }
 
-#inspector-eyedropper-toggle::before {
-  background-image: var(--eyedropper-image);
+#inspector-sidebar {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
 }
 
-/* Add element toolbar button */
-#inspector-element-add-button::before {
-  background-image: url("chrome://devtools/skin/images/add.svg");
-  list-style-image: url("chrome://devtools/skin/images/add.svg");
+/* Override `-moz-user-focus:ignore;` from toolkit/content/minimal-xul.css */
+.inspector-tabpanel > * {
   -moz-user-focus: normal;
 }
 
 /* "no results" warning message displayed in the ruleview and in the computed view */
 
 #ruleview-no-results,
 #computedview-no-results {
   color: var(--theme-body-color-inactive);
--- a/devtools/client/webconsole/test/browser_webconsole_output_06.js
+++ b/devtools/client/webconsole/test/browser_webconsole_output_06.js
@@ -151,16 +151,25 @@ var inputTests = [
     input: '({0: "a", 1: "b", 2: "c", 3: "d", 4: "e", 5: "f", 6: "g", ' +
            '7: "h", 8: "i", 9: "j", 10: "k", 11: "l", m: "n"})',
     output: 'Object { 0: "a", 1: "b", 2: "c", 3: "d", 4: "e", 5: "f", ' +
             '6: "g", 7: "h", 8: "i", 9: "j", 3 more\u2026 }',
     printOutput: "[object Object]",
     inspectable: true,
     variablesViewLabel: "Object",
   },
+
+  // 17
+  {
+    input: '({" ": "a"})',
+    output: 'Object {  : "a" }',
+    printOutput: "[object Object]",
+    inspectable: true,
+    variablesViewLabel: "Object",
+  },
 ];
 
 function test() {
   requestLongerTimeout(2);
   Task.spawn(function* () {
     let {tab} = yield loadTab(TEST_URI);
     let hud = yield openConsole(tab);
     return checkOutputForInputs(hud, inputTests);
new file mode 100644
--- /dev/null
+++ b/devtools/server/actors/emulation.js
@@ -0,0 +1,62 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { Ci } = require("chrome");
+const protocol = require("devtools/shared/protocol");
+const { emulationSpec } = require("devtools/shared/specs/emulation");
+const { SimulatorCore } = require("devtools/shared/touch/simulator-core");
+
+let EmulationActor = protocol.ActorClass(emulationSpec, {
+  initialize(conn, tabActor) {
+    protocol.Actor.prototype.initialize.call(this, conn);
+    this.docShell = tabActor.docShell;
+    this.simulatorCore = new SimulatorCore(tabActor.chromeEventHandler);
+  },
+
+  _previousTouchEventsOverride: null,
+
+  setTouchEventsOverride(flag) {
+    if (this.docShell.touchEventsOverride == flag) {
+      return false;
+    }
+    if (this._previousTouchEventsOverride === null) {
+      this._previousTouchEventsOverride = this.docShell.touchEventsOverride;
+    }
+
+    // Start or stop the touch simulator depending on the override flag
+    if (flag == Ci.nsIDocShell.TOUCHEVENTS_OVERRIDE_ENABLED) {
+      this.simulatorCore.start();
+    } else {
+      this.simulatorCore.stop();
+    }
+
+    this.docShell.touchEventsOverride = flag;
+    return true;
+  },
+
+  getTouchEventsOverride() {
+    return this.docShell.touchEventsOverride;
+  },
+
+  clearTouchEventsOverride() {
+    if (this._previousTouchEventsOverride !== null) {
+      this.setTouchEventsOverride(this._previousTouchEventsOverride);
+    }
+  },
+
+  disconnect() {
+    this.destroy();
+  },
+
+  destroy() {
+    this.clearTouchEventsOverride();
+    this.docShell = null;
+    this.simulatorCore = null;
+    protocol.Actor.prototype.destroy.call(this);
+  },
+});
+
+exports.EmulationActor = EmulationActor;
--- a/devtools/server/actors/moz.build
+++ b/devtools/server/actors/moz.build
@@ -21,16 +21,17 @@ DevToolsModules(
     'childtab.js',
     'chrome.js',
     'common.js',
     'css-properties.js',
     'csscoverage.js',
     'device.js',
     'director-manager.js',
     'director-registry.js',
+    'emulation.js',
     'environment.js',
     'errordocs.js',
     'eventlooplag.js',
     'frame.js',
     'framerate.js',
     'gcli.js',
     'heap-snapshot-file.js',
     'highlighters.css',
--- a/devtools/server/actors/object.js
+++ b/devtools/server/actors/object.js
@@ -1790,23 +1790,28 @@ DebuggerServer.ObjectActorPreviewers.Obj
     };
 
     return true;
   },
 
   function PseudoArray({obj, hooks}, grip, rawObj) {
     let length = 0;
 
-    // Making sure all keys are numbers from 0 to length-1
     let keys = obj.getOwnPropertyNames();
     if (keys.length == 0) {
       return false;
     }
+
+    // Making sure that all keys are array indices, that is:
+    // `ToString(ToUint32(key)) === key  &&  key !== "4294967295"`.
+    // Also ensuring that the keys are consecutive and start at "0",
+    // this implies checking `key !== "4294967295"` is not necessary.
     for (let key of keys) {
-      if (isNaN(key) || key != length++) {
+      let numKey = key >>> 0; // ToUint32(key)
+      if (numKey + '' != key || numKey != length++) {
         return false;
       }
     }
 
     grip.preview = {
       kind: "ArrayLike",
       length: length,
     };
--- a/devtools/server/main.js
+++ b/devtools/server/main.js
@@ -564,16 +564,21 @@ var DebuggerServer = {
       constructor: "PromisesActor",
       type: { tab: true }
     });
     this.registerModule("devtools/server/actors/performance-entries", {
       prefix: "performanceEntries",
       constructor: "PerformanceEntriesActor",
       type: { tab: true }
     });
+    this.registerModule("devtools/server/actors/emulation", {
+      prefix: "emulation",
+      constructor: "EmulationActor",
+      type: { tab: true }
+    });
   },
 
   /**
    * Passes a set of options to the BrowserAddonActors for the given ID.
    *
    * @param id string
    *        The ID of the add-on to pass the options to
    * @param options object
new file mode 100644
--- /dev/null
+++ b/devtools/shared/fronts/emulation.js
@@ -0,0 +1,24 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const { Front, FrontClass } = require("devtools/shared/protocol");
+const { emulationSpec } = require("devtools/shared/specs/emulation");
+
+/**
+ * The corresponding Front object for the EmulationActor.
+ */
+const EmulationFront = FrontClass(emulationSpec, {
+  initialize: function (client, form) {
+    Front.prototype.initialize.call(this, client);
+    this.actorID = form.emulationActor;
+    this.manage(this);
+  },
+
+  destroy: function () {
+    Front.prototype.destroy.call(this);
+  },
+});
+
+exports.EmulationFront = EmulationFront;
--- a/devtools/shared/fronts/moz.build
+++ b/devtools/shared/fronts/moz.build
@@ -10,16 +10,17 @@ DevToolsModules(
     'animation.js',
     'call-watcher.js',
     'canvas.js',
     'css-properties.js',
     'csscoverage.js',
     'device.js',
     'director-manager.js',
     'director-registry.js',
+    'emulation.js',
     'eventlooplag.js',
     'framerate.js',
     'gcli.js',
     'highlighters.js',
     'inspector.js',
     'layout.js',
     'memory.js',
     'performance-entries.js',
new file mode 100644
--- /dev/null
+++ b/devtools/shared/specs/emulation.js
@@ -0,0 +1,35 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const { Arg, RetVal, generateActorSpec } = require("devtools/shared/protocol");
+
+const emulationSpec = generateActorSpec({
+  typeName: "emulation",
+
+  methods: {
+    setTouchEventsOverride: {
+      request: {
+        flag: Arg(0, "number")
+      },
+      response: {
+        reload: RetVal("boolean")
+      }
+    },
+
+    getTouchEventsOverride: {
+      request: {},
+      response: {
+        flag: RetVal("number")
+      }
+    },
+
+    clearTouchEventsOverride: {
+      request: {},
+      response: {}
+    },
+  }
+});
+
+exports.emulationSpec = emulationSpec;
--- a/devtools/shared/specs/moz.build
+++ b/devtools/shared/specs/moz.build
@@ -11,16 +11,17 @@ DevToolsModules(
     'breakpoint.js',
     'call-watcher.js',
     'canvas.js',
     'css-properties.js',
     'csscoverage.js',
     'device.js',
     'director-manager.js',
     'director-registry.js',
+    'emulation.js',
     'environment.js',
     'eventlooplag.js',
     'frame.js',
     'framerate.js',
     'gcli.js',
     'heap-snapshot-file.js',
     'highlighters.js',
     'inspector.js',
--- a/devtools/shared/touch/moz.build
+++ b/devtools/shared/touch/moz.build
@@ -1,10 +1,11 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # 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/.
 
 DevToolsModules(
     'simulator-content.js',
+    'simulator-core.js',
     'simulator.js',
 )
--- a/devtools/shared/touch/simulator-content.js
+++ b/devtools/shared/touch/simulator-content.js
@@ -1,371 +1,43 @@
 /* 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/. */
-/* globals addMessageListener, sendAsyncMessage, addEventListener,
-   removeEventListener */
+ /* globals addMessageListener, sendAsyncMessage */
 "use strict";
 
-const { interfaces: Ci, utils: Cu } = Components;
-const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
-
-var systemAppOrigin = (function () {
-  let systemOrigin = "_";
-  try {
-    systemOrigin = Services.io.newURI(
-      Services.prefs.getCharPref("b2g.system_manifest_url"), null, null)
-      .prePath;
-  } catch (e) {
-    // Fall back to default value
-  }
-  return systemOrigin;
-})();
-
-var threshold = 25;
-try {
-  threshold = Services.prefs.getIntPref("ui.dragThresholdX");
-} catch (e) {
-  // Fall back to default value
-}
-
-var delay = 500;
-try {
-  delay = Services.prefs.getIntPref("ui.click_hold_context_menus.delay");
-} catch (e) {
-  // Fall back to default value
-}
+const { utils: Cu } = Components;
+const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
+const { SimulatorCore } = require("devtools/shared/touch/simulator-core");
 
 /**
- * Simulate touch events for platforms where they aren't generally available.
+ * Launches SimulatorCore in the content window to simulate touch events
  * This frame script is managed by `simulator.js`.
  */
+
 var simulator = {
-  events: [
-    "mousedown",
-    "mousemove",
-    "mouseup",
-    "touchstart",
-    "touchend",
-    "mouseenter",
-    "mouseover",
-    "mouseout",
-    "mouseleave"
-  ],
-
   messages: [
     "TouchEventSimulator:Start",
     "TouchEventSimulator:Stop",
   ],
 
-  contextMenuTimeout: null,
-
   init() {
+    this.simulatorCore = new SimulatorCore(docShell.chromeEventHandler);
     this.messages.forEach(msgName => {
       addMessageListener(msgName, this);
     });
   },
 
   receiveMessage(msg) {
     switch (msg.name) {
       case "TouchEventSimulator:Start":
-        this.start();
+        this.simulatorCore.start();
+        sendAsyncMessage("TouchEventSimulator:Started");
         break;
       case "TouchEventSimulator:Stop":
-        this.stop();
+        this.simulatorCore.stop();
+        sendAsyncMessage("TouchEventSimulator:Stopped");
         break;
     }
   },
-
-  start() {
-    this.events.forEach(evt => {
-      // Only listen trusted events to prevent messing with
-      // event dispatched manually within content documents
-      addEventListener(evt, this, true, false);
-    });
-    sendAsyncMessage("TouchEventSimulator:Started");
-  },
-
-  stop() {
-    this.events.forEach(evt => {
-      removeEventListener(evt, this, true);
-    });
-    sendAsyncMessage("TouchEventSimulator:Stopped");
-  },
-
-  handleEvent(evt) {
-    // The gaia system window use an hybrid system even on the device which is
-    // a mix of mouse/touch events. So let's not cancel *all* mouse events
-    // if it is the current target.
-    let content = this.getContent(evt.target);
-    if (!content) {
-      return;
-    }
-    let isSystemWindow = content.location.toString()
-                                .startsWith(systemAppOrigin);
-
-    // App touchstart & touchend should also be dispatched on the system app
-    // to match on-device behavior.
-    if (evt.type.startsWith("touch") && !isSystemWindow) {
-      let sysFrame = content.realFrameElement;
-      if (!sysFrame) {
-        return;
-      }
-      let sysDocument = sysFrame.ownerDocument;
-      let sysWindow = sysDocument.defaultView;
-
-      let touchEvent = sysDocument.createEvent("touchevent");
-      let touch = evt.touches[0] || evt.changedTouches[0];
-      let point = sysDocument.createTouch(sysWindow, sysFrame, 0,
-                                          touch.pageX, touch.pageY,
-                                          touch.screenX, touch.screenY,
-                                          touch.clientX, touch.clientY,
-                                          1, 1, 0, 0);
-
-      let touches = sysDocument.createTouchList(point);
-      let targetTouches = touches;
-      let changedTouches = touches;
-      touchEvent.initTouchEvent(evt.type, true, true, sysWindow, 0,
-                                false, false, false, false,
-                                touches, targetTouches, changedTouches);
-      sysFrame.dispatchEvent(touchEvent);
-      return;
-    }
-
-    // Ignore all but real mouse event coming from physical mouse
-    // (especially ignore mouse event being dispatched from a touch event)
-    if (evt.button ||
-        evt.mozInputSource != Ci.nsIDOMMouseEvent.MOZ_SOURCE_MOUSE ||
-        evt.isSynthesized) {
-      return;
-    }
-
-    let eventTarget = this.target;
-    let type = "";
-    switch (evt.type) {
-      case "mouseenter":
-      case "mouseover":
-      case "mouseout":
-      case "mouseleave":
-        // Don't propagate events which are not related to touch events
-        evt.stopPropagation();
-        break;
-
-      case "mousedown":
-        this.target = evt.target;
-
-        this.contextMenuTimeout =
-          this.sendContextMenu(evt.target, evt.pageX, evt.pageY);
-
-        this.cancelClick = false;
-        this.startX = evt.pageX;
-        this.startY = evt.pageY;
-
-        // Capture events so if a different window show up the events
-        // won't be dispatched to something else.
-        evt.target.setCapture(false);
-
-        type = "touchstart";
-        break;
-
-      case "mousemove":
-        if (!eventTarget) {
-          // Don't propagate mousemove event when touchstart event isn't fired
-          evt.stopPropagation();
-          return;
-        }
-
-        if (!this.cancelClick) {
-          if (Math.abs(this.startX - evt.pageX) > threshold ||
-              Math.abs(this.startY - evt.pageY) > threshold) {
-            this.cancelClick = true;
-            content.clearTimeout(this.contextMenuTimeout);
-          }
-        }
-
-        type = "touchmove";
-        break;
-
-      case "mouseup":
-        if (!eventTarget) {
-          return;
-        }
-        this.target = null;
-
-        content.clearTimeout(this.contextMenuTimeout);
-        type = "touchend";
-
-        // Only register click listener after mouseup to ensure
-        // catching only real user click. (Especially ignore click
-        // being dispatched on form submit)
-        if (evt.detail == 1) {
-          addEventListener("click", this, true, false);
-        }
-        break;
-
-      case "click":
-        // Mouse events has been cancelled so dispatch a sequence
-        // of events to where touchend has been fired
-        evt.preventDefault();
-        evt.stopImmediatePropagation();
-
-        removeEventListener("click", this, true, false);
-
-        if (this.cancelClick) {
-          return;
-        }
-
-        content.setTimeout(function dispatchMouseEvents(self) {
-          try {
-            self.fireMouseEvent("mousedown", evt);
-            self.fireMouseEvent("mousemove", evt);
-            self.fireMouseEvent("mouseup", evt);
-          } catch (e) {
-            console.error("Exception in touch event helper: " + e);
-          }
-        }, this.getDelayBeforeMouseEvent(evt), this);
-        return;
-    }
-
-    let target = eventTarget || this.target;
-    if (target && type) {
-      this.sendTouchEvent(evt, target, type);
-    }
-
-    if (!isSystemWindow) {
-      evt.preventDefault();
-      evt.stopImmediatePropagation();
-    }
-  },
-
-  fireMouseEvent(type, evt) {
-    let content = this.getContent(evt.target);
-    let utils = content.QueryInterface(Ci.nsIInterfaceRequestor)
-                       .getInterface(Ci.nsIDOMWindowUtils);
-    utils.sendMouseEvent(type, evt.clientX, evt.clientY, 0, 1, 0, true, 0,
-                         Ci.nsIDOMMouseEvent.MOZ_SOURCE_TOUCH);
-  },
-
-  sendContextMenu(target, x, y) {
-    let doc = target.ownerDocument;
-    let evt = doc.createEvent("MouseEvent");
-    evt.initMouseEvent("contextmenu", true, true, doc.defaultView,
-                       0, x, y, x, y, false, false, false, false,
-                       0, null);
-
-    let content = this.getContent(target);
-    let timeout = content.setTimeout((function contextMenu() {
-      target.dispatchEvent(evt);
-      this.cancelClick = true;
-    }).bind(this), delay);
-
-    return timeout;
-  },
-
-  sendTouchEvent(evt, target, name) {
-    function clone(obj) {
-      return Cu.cloneInto(obj, target);
-    }
-    // When running OOP b2g desktop, we need to send the touch events
-    // using the mozbrowser api on the unwrapped frame.
-    if (target.localName == "iframe" && target.mozbrowser === true) {
-      if (name == "touchstart") {
-        this.touchstartTime = Date.now();
-      } else if (name == "touchend") {
-        // If we have a "fast" tap, don't send a click as both will be turned
-        // into a click and that breaks eg. checkboxes.
-        if (Date.now() - this.touchstartTime < delay) {
-          this.cancelClick = true;
-        }
-      }
-      let unwrapped = XPCNativeWrapper.unwrap(target);
-      unwrapped.sendTouchEvent(name, clone([0]),       // event type, id
-                               clone([evt.clientX]),   // x
-                               clone([evt.clientY]),   // y
-                               clone([1]), clone([1]), // rx, ry
-                               clone([0]), clone([0]), // rotation, force
-                               1);                     // count
-      return;
-    }
-    let document = target.ownerDocument;
-    let content = this.getContent(target);
-    if (!content) {
-      return;
-    }
-
-    let touchEvent = document.createEvent("touchevent");
-    let point = document.createTouch(content, target, 0,
-                                     evt.pageX, evt.pageY,
-                                     evt.screenX, evt.screenY,
-                                     evt.clientX, evt.clientY,
-                                     1, 1, 0, 0);
-
-    let touches = document.createTouchList(point);
-    let targetTouches = touches;
-    let changedTouches = touches;
-    if (name === "touchend" || name === "touchcancel") {
-      // "touchend" and "touchcancel" events should not have the removed touch
-      // neither in touches nor in targetTouches
-      touches = targetTouches = document.createTouchList();
-    }
-
-    touchEvent.initTouchEvent(name, true, true, content, 0,
-                              false, false, false, false,
-                              touches, targetTouches, changedTouches);
-    target.dispatchEvent(touchEvent);
-  },
-
-  getContent(target) {
-    let win = (target && target.ownerDocument)
-      ? target.ownerDocument.defaultView
-      : null;
-    return win;
-  },
-
-  getDelayBeforeMouseEvent(evt) {
-    // On mobile platforms, Firefox inserts a 300ms delay between
-    // touch events and accompanying mouse events, except if the
-    // content window is not zoomable and the content window is
-    // auto-zoomed to device-width.
-
-    // If the preference dom.meta-viewport.enabled is set to false,
-    // we couldn't read viewport's information from getViewportInfo().
-    // So we always simulate 300ms delay when the
-    // dom.meta-viewport.enabled is false.
-    let savedMetaViewportEnabled =
-      Services.prefs.getBoolPref("dom.meta-viewport.enabled");
-    if (!savedMetaViewportEnabled) {
-      return 300;
-    }
-
-    let content = this.getContent(evt.target);
-    if (!content) {
-      return 0;
-    }
-
-    let utils = content.QueryInterface(Ci.nsIInterfaceRequestor)
-                       .getInterface(Ci.nsIDOMWindowUtils);
-
-    let allowZoom = {},
-        minZoom = {},
-        maxZoom = {},
-        autoSize = {};
-
-    utils.getViewportInfo(content.innerWidth, content.innerHeight, {},
-                          allowZoom, minZoom, maxZoom, {}, {}, autoSize);
-
-    // FIXME: On Safari and Chrome mobile platform, if the css property
-    // touch-action set to none or manipulation would also suppress 300ms
-    // delay. But Firefox didn't support this property now, we can't get
-    // this value from utils.getVisitedDependentComputedStyle() to check
-    // if we should suppress 300ms delay.
-    if (!allowZoom.value ||                   // user-scalable = no
-        minZoom.value === maxZoom.value ||    // minimum-scale = maximum-scale
-        autoSize.value                        // width = device-width
-    ) {
-      return 0;
-    } else {
-      return 300;
-    }
-  }
 };
 
 simulator.init();
new file mode 100644
--- /dev/null
+++ b/devtools/shared/touch/simulator-core.js
@@ -0,0 +1,362 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const { Ci, Cu } = require("chrome");
+const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
+
+var systemAppOrigin = (function () {
+  let systemOrigin = "_";
+  try {
+    systemOrigin = Services.io.newURI(
+      Services.prefs.getCharPref("b2g.system_manifest_url"), null, null)
+      .prePath;
+  } catch (e) {
+    // Fall back to default value
+  }
+  return systemOrigin;
+})();
+
+var threshold = 25;
+try {
+  threshold = Services.prefs.getIntPref("ui.dragThresholdX");
+} catch (e) {
+  // Fall back to default value
+}
+
+var delay = 500;
+try {
+  delay = Services.prefs.getIntPref("ui.click_hold_context_menus.delay");
+} catch (e) {
+  // Fall back to default value
+}
+
+function SimulatorCore(simulatorTarget) {
+  this.simulatorTarget = simulatorTarget;
+}
+
+/**
+ * Simulate touch events for platforms where they aren't generally available.
+ */
+SimulatorCore.prototype = {
+  events: [
+    "mousedown",
+    "mousemove",
+    "mouseup",
+    "touchstart",
+    "touchend",
+    "mouseenter",
+    "mouseover",
+    "mouseout",
+    "mouseleave"
+  ],
+
+  contextMenuTimeout: null,
+
+  simulatorTarget: null,
+
+  enabled: false,
+
+  start() {
+    if (this.enabled) {
+      // Simulator is already started
+      return;
+    }
+    this.events.forEach(evt => {
+      // Only listen trusted events to prevent messing with
+      // event dispatched manually within content documents
+      this.simulatorTarget.addEventListener(evt, this, true, false);
+    });
+    this.enabled = true;
+  },
+
+  stop() {
+    if (!this.enabled) {
+      // Simulator isn't running
+      return;
+    }
+    this.events.forEach(evt => {
+      this.simulatorTarget.removeEventListener(evt, this, true);
+    });
+    this.enabled = false;
+  },
+
+  handleEvent(evt) {
+    // The gaia system window use an hybrid system even on the device which is
+    // a mix of mouse/touch events. So let's not cancel *all* mouse events
+    // if it is the current target.
+    let content = this.getContent(evt.target);
+    if (!content) {
+      return;
+    }
+    let isSystemWindow = content.location.toString()
+                                .startsWith(systemAppOrigin);
+
+    // App touchstart & touchend should also be dispatched on the system app
+    // to match on-device behavior.
+    if (evt.type.startsWith("touch") && !isSystemWindow) {
+      let sysFrame = content.realFrameElement;
+      if (!sysFrame) {
+        return;
+      }
+      let sysDocument = sysFrame.ownerDocument;
+      let sysWindow = sysDocument.defaultView;
+
+      let touchEvent = sysDocument.createEvent("touchevent");
+      let touch = evt.touches[0] || evt.changedTouches[0];
+      let point = sysDocument.createTouch(sysWindow, sysFrame, 0,
+                                          touch.pageX, touch.pageY,
+                                          touch.screenX, touch.screenY,
+                                          touch.clientX, touch.clientY,
+                                          1, 1, 0, 0);
+
+      let touches = sysDocument.createTouchList(point);
+      let targetTouches = touches;
+      let changedTouches = touches;
+      touchEvent.initTouchEvent(evt.type, true, true, sysWindow, 0,
+                                false, false, false, false,
+                                touches, targetTouches, changedTouches);
+      sysFrame.dispatchEvent(touchEvent);
+      return;
+    }
+
+    // Ignore all but real mouse event coming from physical mouse
+    // (especially ignore mouse event being dispatched from a touch event)
+    if (evt.button ||
+        evt.mozInputSource != Ci.nsIDOMMouseEvent.MOZ_SOURCE_MOUSE ||
+        evt.isSynthesized) {
+      return;
+    }
+
+    let eventTarget = this.target;
+    let type = "";
+    switch (evt.type) {
+      case "mouseenter":
+      case "mouseover":
+      case "mouseout":
+      case "mouseleave":
+        // Don't propagate events which are not related to touch events
+        evt.stopPropagation();
+        break;
+
+      case "mousedown":
+        this.target = evt.target;
+
+        this.contextMenuTimeout =
+          this.sendContextMenu(evt.target, evt.pageX, evt.pageY);
+
+        this.cancelClick = false;
+        this.startX = evt.pageX;
+        this.startY = evt.pageY;
+
+        // Capture events so if a different window show up the events
+        // won't be dispatched to something else.
+        evt.target.setCapture(false);
+
+        type = "touchstart";
+        break;
+
+      case "mousemove":
+        if (!eventTarget) {
+          // Don't propagate mousemove event when touchstart event isn't fired
+          evt.stopPropagation();
+          return;
+        }
+
+        if (!this.cancelClick) {
+          if (Math.abs(this.startX - evt.pageX) > threshold ||
+              Math.abs(this.startY - evt.pageY) > threshold) {
+            this.cancelClick = true;
+            content.clearTimeout(this.contextMenuTimeout);
+          }
+        }
+
+        type = "touchmove";
+        break;
+
+      case "mouseup":
+        if (!eventTarget) {
+          return;
+        }
+        this.target = null;
+
+        content.clearTimeout(this.contextMenuTimeout);
+        type = "touchend";
+
+        // Only register click listener after mouseup to ensure
+        // catching only real user click. (Especially ignore click
+        // being dispatched on form submit)
+        if (evt.detail == 1) {
+          this.simulatorTarget.addEventListener("click", this, true, false);
+        }
+        break;
+
+      case "click":
+        // Mouse events has been cancelled so dispatch a sequence
+        // of events to where touchend has been fired
+        evt.preventDefault();
+        evt.stopImmediatePropagation();
+
+        this.simulatorTarget.removeEventListener("click", this, true, false);
+
+        if (this.cancelClick) {
+          return;
+        }
+
+        content.setTimeout(function dispatchMouseEvents(self) {
+          try {
+            self.fireMouseEvent("mousedown", evt);
+            self.fireMouseEvent("mousemove", evt);
+            self.fireMouseEvent("mouseup", evt);
+          } catch (e) {
+            console.error("Exception in touch event helper: " + e);
+          }
+        }, this.getDelayBeforeMouseEvent(evt), this);
+        return;
+    }
+
+    let target = eventTarget || this.target;
+    if (target && type) {
+      this.sendTouchEvent(evt, target, type);
+    }
+
+    if (!isSystemWindow) {
+      evt.preventDefault();
+      evt.stopImmediatePropagation();
+    }
+  },
+
+  fireMouseEvent(type, evt) {
+    let content = this.getContent(evt.target);
+    let utils = content.QueryInterface(Ci.nsIInterfaceRequestor)
+                       .getInterface(Ci.nsIDOMWindowUtils);
+    utils.sendMouseEvent(type, evt.clientX, evt.clientY, 0, 1, 0, true, 0,
+                         Ci.nsIDOMMouseEvent.MOZ_SOURCE_TOUCH);
+  },
+
+  sendContextMenu(target, x, y) {
+    let doc = target.ownerDocument;
+    let evt = doc.createEvent("MouseEvent");
+    evt.initMouseEvent("contextmenu", true, true, doc.defaultView,
+                       0, x, y, x, y, false, false, false, false,
+                       0, null);
+
+    let content = this.getContent(target);
+    let timeout = content.setTimeout((function contextMenu() {
+      target.dispatchEvent(evt);
+      this.cancelClick = true;
+    }).bind(this), delay);
+
+    return timeout;
+  },
+
+  sendTouchEvent(evt, target, name) {
+    function clone(obj) {
+      return Cu.cloneInto(obj, target);
+    }
+    // When running OOP b2g desktop, we need to send the touch events
+    // using the mozbrowser api on the unwrapped frame.
+    if (target.localName == "iframe" && target.mozbrowser === true) {
+      if (name == "touchstart") {
+        this.touchstartTime = Date.now();
+      } else if (name == "touchend") {
+        // If we have a "fast" tap, don't send a click as both will be turned
+        // into a click and that breaks eg. checkboxes.
+        if (Date.now() - this.touchstartTime < delay) {
+          this.cancelClick = true;
+        }
+      }
+      let unwrapped = XPCNativeWrapper.unwrap(target);
+      unwrapped.sendTouchEvent(name, clone([0]),       // event type, id
+                               clone([evt.clientX]),   // x
+                               clone([evt.clientY]),   // y
+                               clone([1]), clone([1]), // rx, ry
+                               clone([0]), clone([0]), // rotation, force
+                               1);                     // count
+      return;
+    }
+    let document = target.ownerDocument;
+    let content = this.getContent(target);
+    if (!content) {
+      return;
+    }
+
+    let touchEvent = document.createEvent("touchevent");
+    let point = document.createTouch(content, target, 0,
+                                     evt.pageX, evt.pageY,
+                                     evt.screenX, evt.screenY,
+                                     evt.clientX, evt.clientY,
+                                     1, 1, 0, 0);
+
+    let touches = document.createTouchList(point);
+    let targetTouches = touches;
+    let changedTouches = touches;
+    if (name === "touchend" || name === "touchcancel") {
+      // "touchend" and "touchcancel" events should not have the removed touch
+      // neither in touches nor in targetTouches
+      touches = targetTouches = document.createTouchList();
+    }
+
+    touchEvent.initTouchEvent(name, true, true, content, 0,
+                              false, false, false, false,
+                              touches, targetTouches, changedTouches);
+    target.dispatchEvent(touchEvent);
+  },
+
+  getContent(target) {
+    let win = (target && target.ownerDocument)
+      ? target.ownerDocument.defaultView
+      : null;
+    return win;
+  },
+
+  getDelayBeforeMouseEvent(evt) {
+    // On mobile platforms, Firefox inserts a 300ms delay between
+    // touch events and accompanying mouse events, except if the
+    // content window is not zoomable and the content window is
+    // auto-zoomed to device-width.
+
+    // If the preference dom.meta-viewport.enabled is set to false,
+    // we couldn't read viewport's information from getViewportInfo().
+    // So we always simulate 300ms delay when the
+    // dom.meta-viewport.enabled is false.
+    let savedMetaViewportEnabled =
+      Services.prefs.getBoolPref("dom.meta-viewport.enabled");
+    if (!savedMetaViewportEnabled) {
+      return 300;
+    }
+
+    let content = this.getContent(evt.target);
+    if (!content) {
+      return 0;
+    }
+
+    let utils = content.QueryInterface(Ci.nsIInterfaceRequestor)
+                       .getInterface(Ci.nsIDOMWindowUtils);
+
+    let allowZoom = {},
+        minZoom = {},
+        maxZoom = {},
+        autoSize = {};
+
+    utils.getViewportInfo(content.innerWidth, content.innerHeight, {},
+                          allowZoom, minZoom, maxZoom, {}, {}, autoSize);
+
+    // FIXME: On Safari and Chrome mobile platform, if the css property
+    // touch-action set to none or manipulation would also suppress 300ms
+    // delay. But Firefox didn't support this property now, we can't get
+    // this value from utils.getVisitedDependentComputedStyle() to check
+    // if we should suppress 300ms delay.
+    if (!allowZoom.value ||                   // user-scalable = no
+        minZoom.value === maxZoom.value ||    // minimum-scale = maximum-scale
+        autoSize.value                        // width = device-width
+    ) {
+      return 0;
+    } else {
+      return 300;
+    }
+  }
+};
+
+exports.SimulatorCore = SimulatorCore;
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -10662,27 +10662,16 @@ nsDocShell::DoURILoad(nsIURI* aURI,
   }
 
   nsresult rv;
   nsCOMPtr<nsIURILoader> uriLoader = do_GetService(NS_URI_LOADER_CONTRACTID, &rv);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
-  nsLoadFlags loadFlags = mDefaultLoadFlags;
-  if (aFirstParty) {
-    // tag first party URL loads
-    loadFlags |= nsIChannel::LOAD_INITIAL_DOCUMENT_URI;
-  }
-
-  if (mLoadType == LOAD_ERROR_PAGE) {
-    // Error pages are LOAD_BACKGROUND
-    loadFlags |= nsIChannel::LOAD_BACKGROUND;
-  }
-
   if (IsFrame()) {
 
     MOZ_ASSERT(aContentPolicyType == nsIContentPolicy::TYPE_INTERNAL_IFRAME ||
                aContentPolicyType == nsIContentPolicy::TYPE_INTERNAL_FRAME,
                "DoURILoad thinks this is a frame and InternalLoad does not");
 
     // Only allow view-source scheme in top-level docshells. view-source is
     // the only scheme to which this applies at the moment due to potential
@@ -10789,17 +10778,30 @@ nsDocShell::DoURILoad(nsIURI* aURI,
   } else if (!triggeringPrincipal && aReferrerURI) {
     rv = CreatePrincipalFromReferrer(aReferrerURI,
                                      getter_AddRefs(triggeringPrincipal));
     NS_ENSURE_SUCCESS(rv, rv);
   } else {
     triggeringPrincipal = nsContentUtils::GetSystemPrincipal();
   }
 
+  nsLoadFlags loadFlags = mDefaultLoadFlags;
   nsSecurityFlags securityFlags = nsILoadInfo::SEC_NORMAL;
+
+  if (aFirstParty) {
+    // tag first party URL loads
+    loadFlags |= nsIChannel::LOAD_INITIAL_DOCUMENT_URI;
+  }
+
+  if (mLoadType == LOAD_ERROR_PAGE) {
+    // Error pages are LOAD_BACKGROUND
+    loadFlags |= nsIChannel::LOAD_BACKGROUND;
+    securityFlags |= nsILoadInfo::SEC_LOAD_ERROR_PAGE;
+  }
+
   if (inherit) {
     securityFlags |= nsILoadInfo::SEC_FORCE_INHERIT_PRINCIPAL;
   }
   if (isSandBoxed) {
     securityFlags |= nsILoadInfo::SEC_SANDBOXED;
   }
 
   if (UsePrivateBrowsing()) {
--- a/dom/animation/DocumentTimeline.cpp
+++ b/dom/animation/DocumentTimeline.cpp
@@ -12,18 +12,26 @@
 #include "nsDOMNavigationTiming.h"
 #include "nsIPresShell.h"
 #include "nsPresContext.h"
 #include "nsRefreshDriver.h"
 
 namespace mozilla {
 namespace dom {
 
-NS_IMPL_CYCLE_COLLECTION_INHERITED(DocumentTimeline, AnimationTimeline,
-                                   mDocument)
+NS_IMPL_CYCLE_COLLECTION_CLASS(DocumentTimeline)
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(DocumentTimeline,
+                                                AnimationTimeline)
+  tmp->UnregisterFromRefreshDriver();
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mDocument)
+NS_IMPL_CYCLE_COLLECTION_UNLINK_END
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(DocumentTimeline,
+                                                  AnimationTimeline)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDocument)
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(DocumentTimeline,
                                                AnimationTimeline)
 NS_IMPL_CYCLE_COLLECTION_TRACE_END
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DocumentTimeline)
 NS_INTERFACE_MAP_END_INHERITING(AnimationTimeline)
 
@@ -174,18 +182,17 @@ DocumentTimeline::WillRefresh(mozilla::T
   if (!needsTicks) {
     // We already assert that GetRefreshDriver() is non-null at the beginning
     // of this function but we check it again here to be sure that ticking
     // animations does not have any side effects that cause us to lose the
     // connection with the refresh driver, such as triggering the destruction
     // of mDocument's PresShell.
     MOZ_ASSERT(GetRefreshDriver(),
                "Refresh driver should still be valid at end of WillRefresh");
-    GetRefreshDriver()->RemoveRefreshObserver(this, Flush_Style);
-    mIsObservingRefreshDriver = false;
+    UnregisterFromRefreshDriver();
   }
 }
 
 void
 DocumentTimeline::NotifyRefreshDriverCreated(nsRefreshDriver* aDriver)
 {
   MOZ_ASSERT(!mIsObservingRefreshDriver,
              "Timeline should not be observing the refresh driver before"
@@ -209,21 +216,17 @@ DocumentTimeline::NotifyRefreshDriverDes
 }
 
 void
 DocumentTimeline::RemoveAnimation(Animation* aAnimation)
 {
   AnimationTimeline::RemoveAnimation(aAnimation);
 
   if (mIsObservingRefreshDriver && mAnimations.IsEmpty()) {
-    MOZ_ASSERT(GetRefreshDriver(),
-               "Refresh driver should still be valid when "
-               "mIsObservingRefreshDriver is true");
-    GetRefreshDriver()->RemoveRefreshObserver(this, Flush_Style);
-    mIsObservingRefreshDriver = false;
+    UnregisterFromRefreshDriver();
   }
 }
 
 TimeStamp
 DocumentTimeline::ToTimeStamp(const TimeDuration& aTimeDuration) const
 {
   TimeStamp result;
   RefPtr<nsDOMNavigationTiming> timing = mDocument->GetNavigationTiming();
@@ -247,10 +250,26 @@ DocumentTimeline::GetRefreshDriver() con
   nsPresContext* presContext = presShell->GetPresContext();
   if (MOZ_UNLIKELY(!presContext)) {
     return nullptr;
   }
 
   return presContext->RefreshDriver();
 }
 
+void
+DocumentTimeline::UnregisterFromRefreshDriver()
+{
+  if (!mIsObservingRefreshDriver) {
+    return;
+  }
+
+  nsRefreshDriver* refreshDriver = GetRefreshDriver();
+  if (!refreshDriver) {
+    return;
+  }
+
+  refreshDriver->RemoveRefreshObserver(this, Flush_Style);
+  mIsObservingRefreshDriver = false;
+}
+
 } // namespace dom
 } // namespace mozilla
--- a/dom/animation/DocumentTimeline.h
+++ b/dom/animation/DocumentTimeline.h
@@ -78,16 +78,17 @@ public:
   void WillRefresh(TimeStamp aTime) override;
 
   void NotifyRefreshDriverCreated(nsRefreshDriver* aDriver);
   void NotifyRefreshDriverDestroying(nsRefreshDriver* aDriver);
 
 protected:
   TimeStamp GetCurrentTimeStamp() const;
   nsRefreshDriver* GetRefreshDriver() const;
+  void UnregisterFromRefreshDriver();
 
   nsCOMPtr<nsIDocument> mDocument;
 
   // The most recently used refresh driver time. This is used in cases where
   // we don't have a refresh driver (e.g. because we are in a display:none
   // iframe).
   mutable TimeStamp mLastRefreshDriverTime;
   bool mIsObservingRefreshDriver;
--- a/dom/base/PostMessageEvent.cpp
+++ b/dom/base/PostMessageEvent.cpp
@@ -31,17 +31,17 @@ namespace dom {
 
 PostMessageEvent::PostMessageEvent(nsGlobalWindow* aSource,
                                    const nsAString& aCallerOrigin,
                                    nsGlobalWindow* aTargetWindow,
                                    nsIPrincipal* aProvidedPrincipal,
                                    nsIDocument* aSourceDocument,
                                    bool aTrustedCaller)
 : StructuredCloneHolder(CloningSupported, TransferringSupported,
-                        SameProcessSameThread),
+                        StructuredCloneScope::SameProcessSameThread),
   mSource(aSource),
   mCallerOrigin(aCallerOrigin),
   mTargetWindow(aTargetWindow),
   mProvidedPrincipal(aProvidedPrincipal),
   mSourceDocument(aSourceDocument),
   mTrustedCaller(aTrustedCaller)
 {
   MOZ_COUNT_CTOR(PostMessageEvent);
--- a/dom/base/StructuredCloneHolder.cpp
+++ b/dom/base/StructuredCloneHolder.cpp
@@ -141,19 +141,20 @@ const JSStructuredCloneCallbacks gCallba
   StructuredCloneCallbacksWriteTransfer,
   StructuredCloneCallbacksFreeTransfer
 };
 
 } // anonymous namespace
 
 // StructuredCloneHolderBase class
 
-StructuredCloneHolderBase::StructuredCloneHolderBase()
+StructuredCloneHolderBase::StructuredCloneHolderBase(StructuredCloneScope aScope)
+  : mStructuredCloneScope(aScope)
 #ifdef DEBUG
-  : mClearCalled(false)
+  , mClearCalled(false)
 #endif
 {}
 
 StructuredCloneHolderBase::~StructuredCloneHolderBase()
 {
 #ifdef DEBUG
   MOZ_ASSERT(mClearCalled);
 #endif
@@ -179,17 +180,17 @@ StructuredCloneHolderBase::Write(JSConte
 bool
 StructuredCloneHolderBase::Write(JSContext* aCx,
                                  JS::Handle<JS::Value> aValue,
                                  JS::Handle<JS::Value> aTransfer)
 {
   MOZ_ASSERT(!mBuffer, "Double Write is not allowed");
   MOZ_ASSERT(!mClearCalled, "This method cannot be called after Clear.");
 
-  mBuffer = new JSAutoStructuredCloneBuffer(&gCallbacks, this);
+  mBuffer = new JSAutoStructuredCloneBuffer(mStructuredCloneScope, &gCallbacks, this);
 
   if (!mBuffer->write(aCx, aValue, aTransfer, &gCallbacks, this)) {
     mBuffer = nullptr;
     return false;
   }
 
   return true;
 }
@@ -237,20 +238,20 @@ StructuredCloneHolderBase::CustomFreeTra
 {
   MOZ_CRASH("Nothing to free.");
 }
 
 // StructuredCloneHolder class
 
 StructuredCloneHolder::StructuredCloneHolder(CloningSupport aSupportsCloning,
                                              TransferringSupport aSupportsTransferring,
-                                             ContextSupport aContext)
-  : mSupportsCloning(aSupportsCloning == CloningSupported)
+                                             StructuredCloneScope aScope)
+  : StructuredCloneHolderBase(aScope)
+  , mSupportsCloning(aSupportsCloning == CloningSupported)
   , mSupportsTransferring(aSupportsTransferring == TransferringSupported)
-  , mSupportedContext(aContext)
   , mParent(nullptr)
 #ifdef DEBUG
   , mCreationThread(NS_GetCurrentThread())
 #endif
 {}
 
 StructuredCloneHolder::~StructuredCloneHolder()
 {
@@ -267,41 +268,32 @@ StructuredCloneHolder::Write(JSContext* 
 }
 
 void
 StructuredCloneHolder::Write(JSContext* aCx,
                              JS::Handle<JS::Value> aValue,
                              JS::Handle<JS::Value> aTransfer,
                              ErrorResult& aRv)
 {
-  MOZ_ASSERT_IF(mSupportedContext == SameProcessSameThread,
+  MOZ_ASSERT_IF(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread,
                 mCreationThread == NS_GetCurrentThread());
 
   if (!StructuredCloneHolderBase::Write(aCx, aValue, aTransfer)) {
     aRv.Throw(NS_ERROR_DOM_DATA_CLONE_ERR);
     return;
   }
-
-  if (mSupportedContext != SameProcessSameThread) {
-    for (uint32_t i = 0, len = mBlobImplArray.Length(); i < len; ++i) {
-      if (!mBlobImplArray[i]->MayBeClonedToOtherThreads()) {
-        aRv.Throw(NS_ERROR_DOM_DATA_CLONE_ERR);
-        return;
-      }
-    }
-  }
 }
 
 void
 StructuredCloneHolder::Read(nsISupports* aParent,
                             JSContext* aCx,
                             JS::MutableHandle<JS::Value> aValue,
                             ErrorResult& aRv)
 {
-  MOZ_ASSERT_IF(mSupportedContext == SameProcessSameThread,
+  MOZ_ASSERT_IF(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread,
                 mCreationThread == NS_GetCurrentThread());
   MOZ_ASSERT(aParent);
 
   mozilla::AutoRestore<nsISupports*> guard(mParent);
   mParent = aParent;
 
   if (!StructuredCloneHolderBase::Read(aCx, aValue)) {
     JS_ClearPendingException(aCx);
@@ -332,37 +324,38 @@ void
 StructuredCloneHolder::ReadFromBuffer(nsISupports* aParent,
                                       JSContext* aCx,
                                       uint64_t* aBuffer,
                                       size_t aBufferLength,
                                       uint32_t aAlgorithmVersion,
                                       JS::MutableHandle<JS::Value> aValue,
                                       ErrorResult& aRv)
 {
-  MOZ_ASSERT_IF(mSupportedContext == SameProcessSameThread,
+  MOZ_ASSERT_IF(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread,
                 mCreationThread == NS_GetCurrentThread());
 
   MOZ_ASSERT(!mBuffer, "ReadFromBuffer() must be called without a Write().");
   MOZ_ASSERT(aBuffer);
 
   mozilla::AutoRestore<nsISupports*> guard(mParent);
   mParent = aParent;
 
   if (!JS_ReadStructuredClone(aCx, aBuffer, aBufferLength, aAlgorithmVersion,
-                              aValue, &gCallbacks, this)) {
+                              mStructuredCloneScope, aValue, &gCallbacks,
+                              this)) {
     JS_ClearPendingException(aCx);
     aRv.Throw(NS_ERROR_DOM_DATA_CLONE_ERR);
   }
 }
 
 void
 StructuredCloneHolder::MoveBufferDataToArray(FallibleTArray<uint8_t>& aArray,
                                              ErrorResult& aRv)
 {
-  MOZ_ASSERT_IF(mSupportedContext == SameProcessSameThread,
+  MOZ_ASSERT_IF(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread,
                 mCreationThread == NS_GetCurrentThread());
 
   MOZ_ASSERT(mBuffer, "MoveBuffer() cannot be called without a Write().");
 
   if (NS_WARN_IF(!aArray.SetLength(BufferSize(), mozilla::fallible))) {
     aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
     return;
   }
@@ -698,16 +691,21 @@ bool
 WriteBlob(JSStructuredCloneWriter* aWriter,
           Blob* aBlob,
           StructuredCloneHolder* aHolder)
 {
   MOZ_ASSERT(aWriter);
   MOZ_ASSERT(aBlob);
   MOZ_ASSERT(aHolder);
 
+  if (JS_GetStructuredCloneScope(aWriter) != JS::StructuredCloneScope::SameProcessSameThread &&
+      !aBlob->Impl()->MayBeClonedToOtherThreads()) {
+    return false;
+  }
+
   ErrorResult rv;
   RefPtr<BlobImpl> blobImpl =
     EnsureBlobForBackgroundManager(aBlob->Impl(), nullptr, rv);
   if (NS_WARN_IF(rv.Failed())) {
     rv.SuppressException();
     return false;
   }
 
@@ -1036,18 +1034,18 @@ WriteFormData(JSStructuredCloneWriter* a
 
         closure->mHolder->BlobImpls().AppendElement(blobImpl);
         return true;
       }
 
       if (aValue.IsDirectory()) {
         Directory* directory = aValue.GetAsDirectory();
 
-        if (closure->mHolder->SupportedContext() !=
-              StructuredCloneHolder::SameProcessSameThread &&
+        if (closure->mHolder->CloneScope() !=
+              StructuredCloneHolder::StructuredCloneScope::SameProcessSameThread &&
             !directory->ClonableToDifferentThreadOrProcess()) {
           return false;
         }
 
         return WriteDirectory(closure->mWriter, directory);
       }
 
       size_t charSize = sizeof(nsString::char_type);
@@ -1087,18 +1085,18 @@ StructuredCloneHolder::CustomReadHandler
     return ReadFileList(aCx, aReader, aIndex, this);
   }
 
   if (aTag == SCTAG_DOM_FORMDATA) {
     return ReadFormData(aCx, aReader, aIndex, this);
   }
 
   if (aTag == SCTAG_DOM_IMAGEBITMAP) {
-    MOZ_ASSERT(mSupportedContext == SameProcessSameThread ||
-               mSupportedContext == SameProcessDifferentThread);
+    MOZ_ASSERT(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread ||
+               mStructuredCloneScope == StructuredCloneScope::SameProcessDifferentThread);
 
     // Get the current global object.
     // This can be null.
     nsCOMPtr<nsIGlobalObject> parent = do_QueryInterface(mParent);
     // aIndex is the index of the cloned image.
     return ImageBitmap::ReadStructuredClone(aCx, aReader,
                                             parent, GetSurfaces(), aIndex);
    }
@@ -1122,17 +1120,17 @@ StructuredCloneHolder::CustomWriteHandle
       return WriteBlob(aWriter, blob, this);
     }
   }
 
   // See if this is a Directory object.
   {
     Directory* directory = nullptr;
     if (NS_SUCCEEDED(UNWRAP_OBJECT(Directory, aObj, directory))) {
-      if (mSupportedContext != SameProcessSameThread &&
+      if (mStructuredCloneScope != StructuredCloneScope::SameProcessSameThread &&
           !directory->ClonableToDifferentThreadOrProcess()) {
         return false;
       }
 
       return WriteDirectory(aWriter, directory);
     }
   }
 
@@ -1148,18 +1146,18 @@ StructuredCloneHolder::CustomWriteHandle
   {
     FormData* formData = nullptr;
     if (NS_SUCCEEDED(UNWRAP_OBJECT(FormData, aObj, formData))) {
       return WriteFormData(aWriter, formData, this);
     }
   }
 
   // See if this is an ImageBitmap object.
-  if (mSupportedContext == SameProcessSameThread ||
-      mSupportedContext == SameProcessDifferentThread) {
+  if (mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread ||
+      mStructuredCloneScope == StructuredCloneScope::SameProcessDifferentThread) {
     ImageBitmap* imageBitmap = nullptr;
     if (NS_SUCCEEDED(UNWRAP_OBJECT(ImageBitmap, aObj, imageBitmap))) {
       return ImageBitmap::WriteStructuredClone(aWriter,
                                                GetSurfaces(),
                                                imageBitmap);
     }
   }
 
@@ -1198,18 +1196,18 @@ StructuredCloneHolder::CustomReadTransfe
       return false;
     }
 
     aReturnObject.set(&value.toObject());
     return true;
   }
 
   if (aTag == SCTAG_DOM_CANVAS) {
-    MOZ_ASSERT(mSupportedContext == SameProcessSameThread ||
-               mSupportedContext == SameProcessDifferentThread);
+    MOZ_ASSERT(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread ||
+               mStructuredCloneScope == StructuredCloneScope::SameProcessDifferentThread);
     MOZ_ASSERT(aContent);
     OffscreenCanvasCloneData* data =
       static_cast<OffscreenCanvasCloneData*>(aContent);
     nsCOMPtr<nsIGlobalObject> parent = do_QueryInterface(mParent);
     RefPtr<OffscreenCanvas> canvas = OffscreenCanvas::CreateFromCloneData(parent, data);
     delete data;
 
     JS::Rooted<JS::Value> value(aCx);
@@ -1218,18 +1216,18 @@ StructuredCloneHolder::CustomReadTransfe
       return false;
     }
 
     aReturnObject.set(&value.toObject());
     return true;
   }
 
   if (aTag == SCTAG_DOM_IMAGEBITMAP) {
-    MOZ_ASSERT(mSupportedContext == SameProcessSameThread ||
-               mSupportedContext == SameProcessDifferentThread);
+    MOZ_ASSERT(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread ||
+               mStructuredCloneScope == StructuredCloneScope::SameProcessDifferentThread);
     MOZ_ASSERT(aContent);
     ImageBitmapCloneData* data =
       static_cast<ImageBitmapCloneData*>(aContent);
     nsCOMPtr<nsIGlobalObject> parent = do_QueryInterface(mParent);
     RefPtr<ImageBitmap> bitmap = ImageBitmap::CreateFromCloneData(parent, data);
     delete data;
 
     JS::Rooted<JS::Value> value(aCx);
@@ -1269,18 +1267,18 @@ StructuredCloneHolder::CustomWriteTransf
 
       *aTag = SCTAG_DOM_MAP_MESSAGEPORT;
       *aOwnership = JS::SCTAG_TMO_CUSTOM;
       *aContent = nullptr;
 
       return true;
     }
 
-    if (mSupportedContext == SameProcessSameThread ||
-        mSupportedContext == SameProcessDifferentThread) {
+    if (mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread ||
+        mStructuredCloneScope == StructuredCloneScope::SameProcessDifferentThread) {
       OffscreenCanvas* canvas = nullptr;
       rv = UNWRAP_OBJECT(OffscreenCanvas, aObj, canvas);
       if (NS_SUCCEEDED(rv)) {
         MOZ_ASSERT(canvas);
 
         *aExtraData = 0;
         *aTag = SCTAG_DOM_CANVAS;
         *aOwnership = JS::SCTAG_TMO_CUSTOM;
@@ -1322,28 +1320,28 @@ StructuredCloneHolder::CustomFreeTransfe
   if (aTag == SCTAG_DOM_MAP_MESSAGEPORT) {
     MOZ_ASSERT(!aContent);
     MOZ_ASSERT(aExtraData < mPortIdentifiers.Length());
     MessagePort::ForceClose(mPortIdentifiers[aExtraData]);
     return;
   }
 
   if (aTag == SCTAG_DOM_CANVAS) {
-    MOZ_ASSERT(mSupportedContext == SameProcessSameThread ||
-               mSupportedContext == SameProcessDifferentThread);
+    MOZ_ASSERT(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread ||
+               mStructuredCloneScope == StructuredCloneScope::SameProcessDifferentThread);
     MOZ_ASSERT(aContent);
     OffscreenCanvasCloneData* data =
       static_cast<OffscreenCanvasCloneData*>(aContent);
     delete data;
     return;
   }
 
   if (aTag == SCTAG_DOM_IMAGEBITMAP) {
-    MOZ_ASSERT(mSupportedContext == SameProcessSameThread ||
-               mSupportedContext == SameProcessDifferentThread);
+    MOZ_ASSERT(mStructuredCloneScope == StructuredCloneScope::SameProcessSameThread ||
+               mStructuredCloneScope == StructuredCloneScope::SameProcessDifferentThread);
     MOZ_ASSERT(aContent);
     ImageBitmapCloneData* data =
       static_cast<ImageBitmapCloneData*>(aContent);
     delete data;
     return;
   }
 }
 
--- a/dom/base/StructuredCloneHolder.h
+++ b/dom/base/StructuredCloneHolder.h
@@ -26,17 +26,19 @@ namespace gfx {
 class DataSourceSurface;
 }
 
 namespace dom {
 
 class StructuredCloneHolderBase
 {
 public:
-  StructuredCloneHolderBase();
+  typedef JS::StructuredCloneScope StructuredCloneScope;
+
+  StructuredCloneHolderBase(StructuredCloneScope aScope = StructuredCloneScope::SameProcessSameThread);
   virtual ~StructuredCloneHolderBase();
 
   // These methods should be implemented in order to clone data.
   // Read more documentation in js/public/StructuredClone.h.
 
   virtual JSObject* CustomReadHandler(JSContext* aCx,
                                       JSStructuredCloneReader* aReader,
                                       uint32_t aTag,
@@ -110,16 +112,18 @@ public:
   {
     MOZ_ASSERT(mBuffer, "Write() has never been called.");
     return mBuffer->nbytes();
   }
 
 protected:
   nsAutoPtr<JSAutoStructuredCloneBuffer> mBuffer;
 
+  StructuredCloneScope mStructuredCloneScope;
+
 #ifdef DEBUG
   bool mClearCalled;
 #endif
 };
 
 class BlobImpl;
 class MessagePort;
 class MessagePortIdentifier;
@@ -134,34 +138,27 @@ public:
   };
 
   enum TransferringSupport
   {
     TransferringSupported,
     TransferringNotSupported
   };
 
-  enum ContextSupport
-  {
-    SameProcessSameThread,
-    SameProcessDifferentThread,
-    DifferentProcess
-  };
-
   // If cloning is supported, this object will clone objects such as Blobs,
   // FileList, ImageData, etc.
   // If transferring is supported, we will transfer MessagePorts and in the
   // future other transferrable objects.
-  // The ContextSupport is useful to know where the cloned/transferred data can
-  // be read and written. Additional checks about the nature of the objects
-  // will be done based on this context value because not all the objects can
-  // be sent between threads or processes.
+  // The StructuredCloneScope is useful to know where the cloned/transferred
+  // data can be read and written. Additional checks about the nature of the
+  // objects will be done based on this scope value because not all the
+  // objects can be sent between threads or processes.
   explicit StructuredCloneHolder(CloningSupport aSupportsCloning,
                                  TransferringSupport aSupportsTransferring,
-                                 ContextSupport aContextSupport);
+                                 StructuredCloneScope aStructuredCloneScope);
   virtual ~StructuredCloneHolder();
 
   // Normally you should just use Write() and Read().
 
   void Write(JSContext* aCx,
              JS::Handle<JS::Value> aValue,
              ErrorResult &aRv);
 
@@ -189,19 +186,19 @@ public:
   }
 
   nsTArray<RefPtr<BlobImpl>>& BlobImpls()
   {
     MOZ_ASSERT(mSupportsCloning, "Blobs cannot be taken/set if cloning is not supported.");
     return mBlobImplArray;
   }
 
-  ContextSupport SupportedContext() const
+  StructuredCloneScope CloneScope() const
   {
-    return mSupportedContext;
+    return mStructuredCloneScope;
   }
 
   // The parent object is set internally just during the Read(). This method
   // can be used by read functions to retrieve it.
   nsISupports* ParentDuringRead() const
   {
     return mParent;
   }
@@ -289,17 +286,16 @@ protected:
                       ErrorResult &aRv);
 
   // Use this method to free a buffer generated by MoveToBuffer().
   void FreeBuffer(uint64_t* aBuffer,
                   size_t aBufferLength);
 
   bool mSupportsCloning;
   bool mSupportsTransferring;
-  ContextSupport mSupportedContext;
 
   // Used for cloning blobs in the structured cloning algorithm.
   nsTArray<RefPtr<BlobImpl>> mBlobImplArray;
 
   // This is used for sharing the backend of ImageBitmaps.
   // The DataSourceSurface object must be thread-safely reference-counted.
   // The DataSourceSurface object will not be written ever via any ImageBitmap
   // instance, so no race condition will occur.
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -2558,17 +2558,19 @@ nsDocument::StartDocumentLoad(const char
     }
   }
 
   // If this document is being loaded by a docshell, copy its sandbox flags
   // to the document, and store the fullscreen enabled flag. These are
   // immutable after being set here.
   nsCOMPtr<nsIDocShell> docShell = do_QueryInterface(aContainer);
 
-  if (docShell) {
+  // If this is an error page, don't inherit sandbox flags from docshell
+  nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo();
+  if (docShell && !(loadInfo && loadInfo->GetLoadErrorPage())) {
     nsresult rv = docShell->GetSandboxFlags(&mSandboxFlags);
     NS_ENSURE_SUCCESS(rv, rv);
     WarnIfSandboxIneffective(docShell, mSandboxFlags, GetChannel());
   }
 
   // The CSP directive upgrade-insecure-requests not only applies to the
   // toplevel document, but also to nested documents. Let's propagate that
   // flag from the parent to the nested document.
--- a/dom/base/nsImageLoadingContent.cpp
+++ b/dom/base/nsImageLoadingContent.cpp
@@ -225,18 +225,25 @@ nsImageLoadingContent::OnLoadComplete(im
     MakePendingRequestCurrent();
   }
   MOZ_ASSERT(aRequest == mCurrentRequest,
              "One way or another, we should be current by now");
 
   // Fire the appropriate DOM event.
   if (NS_SUCCEEDED(aStatus)) {
     FireEvent(NS_LITERAL_STRING("load"));
+
+    // Do not fire loadend event for multipart/x-mixed-replace image streams.
+    bool isMultipart;
+    if (NS_FAILED(aRequest->GetMultipart(&isMultipart)) || !isMultipart) {
+      FireEvent(NS_LITERAL_STRING("loadend"));
+    }
   } else {
     FireEvent(NS_LITERAL_STRING("error"));
+    FireEvent(NS_LITERAL_STRING("loadend"));
   }
 
   nsCOMPtr<nsINode> thisNode = do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
   nsSVGEffects::InvalidateDirectRenderingObservers(thisNode->AsElement());
 
   return NS_OK;
 }
 
@@ -623,17 +630,19 @@ nsImageLoadingContent::LoadImageWithChan
     TrackImage(req);
     ResetAnimationIfNeeded();
   } else {
     MOZ_ASSERT(!req, "Shouldn't have non-null request here");
     // If we don't have a current URI, we might as well store this URI so people
     // know what we tried (and failed) to load.
     if (!mCurrentRequest)
       aChannel->GetURI(getter_AddRefs(mCurrentURI));
+
     FireEvent(NS_LITERAL_STRING("error"));
+    FireEvent(NS_LITERAL_STRING("loadend"));
     aError.Throw(rv);
   }
   return listener.forget();
 }
 
 NS_IMETHODIMP
 nsImageLoadingContent::LoadImageWithChannel(nsIChannel* aChannel,
                                             nsIStreamListener** aListener)
@@ -659,17 +668,17 @@ nsImageLoadingContent::ForceReload(const
   // defaults to true
   bool notify = !aNotify.WasPassed() || aNotify.Value();
 
   // We keep this flag around along with the old URI even for failed requests
   // without a live request object
   ImageLoadType loadType = \
     (mCurrentRequestFlags & REQUEST_IS_IMAGESET) ? eImageLoadType_Imageset
                                                  : eImageLoadType_Normal;
-  nsresult rv = LoadImage(currentURI, true, notify, loadType, nullptr,
+  nsresult rv = LoadImage(currentURI, true, notify, loadType, true, nullptr,
                           nsIRequest::VALIDATE_ALWAYS);
   if (NS_FAILED(rv)) {
     aError.Throw(rv);
   }
 }
 
 NS_IMETHODIMP
 nsImageLoadingContent::ForceReload(bool aNotify /* = true */,
@@ -743,23 +752,27 @@ nsImageLoadingContent::LoadImage(const n
 {
   // First, get a document (needed for security checks and the like)
   nsIDocument* doc = GetOurOwnerDoc();
   if (!doc) {
     // No reason to bother, I think...
     return NS_OK;
   }
 
-  // Second, parse the URI string to get image URI
+  // Fire loadstart event
+  FireEvent(NS_LITERAL_STRING("loadstart"));
+
+  // Parse the URI string to get image URI
   nsCOMPtr<nsIURI> imageURI;
   nsresult rv = StringToURI(aNewURI, doc, getter_AddRefs(imageURI));
   if (NS_FAILED(rv)) {
-    // Cancel image requests and fire error event per spec
+    // Cancel image requests and then fire error and loadend events per spec
     CancelImageRequests(aNotify);
     FireEvent(NS_LITERAL_STRING("error"));
+    FireEvent(NS_LITERAL_STRING("loadend"));
     return NS_OK;
   }
 
   bool equal;
 
   if (aNewURI.IsEmpty() &&
       doc->GetDocumentURI() &&
       NS_SUCCEEDED(doc->GetDocumentURI()->EqualsExceptRef(imageURI, &equal)) &&
@@ -773,31 +786,38 @@ nsImageLoadingContent::LoadImage(const n
     // In light of that, just skip loading it..
     // Do make sure to drop our existing image, if any
     CancelImageRequests(aNotify);
     return NS_OK;
   }
 
   NS_TryToSetImmutable(imageURI);
 
-  return LoadImage(imageURI, aForce, aNotify, aImageLoadType, doc);
+  return LoadImage(imageURI, aForce, aNotify, aImageLoadType, false, doc);
 }
 
 nsresult
 nsImageLoadingContent::LoadImage(nsIURI* aNewURI,
                                  bool aForce,
                                  bool aNotify,
                                  ImageLoadType aImageLoadType,
+                                 bool aLoadStart,
                                  nsIDocument* aDocument,
                                  nsLoadFlags aLoadFlags)
 {
+  // Fire loadstart event if required
+  if (aLoadStart) {
+    FireEvent(NS_LITERAL_STRING("loadstart"));
+  }
+
   if (!mLoadingEnabled) {
     // XXX Why fire an error here? seems like the callers to SetLoadingEnabled
     // don't want/need it.
     FireEvent(NS_LITERAL_STRING("error"));
+    FireEvent(NS_LITERAL_STRING("loadend"));
     return NS_OK;
   }
 
   NS_ASSERTION(!aDocument || aDocument == GetOurOwnerDoc(),
                "Bogus document passed in");
   // First, get a document (needed for security checks and the like)
   if (!aDocument) {
     aDocument = GetOurOwnerDoc();
@@ -844,16 +864,17 @@ nsImageLoadingContent::LoadImage(nsIURI*
   nsContentUtils::CanLoadImage(aNewURI,
                                static_cast<nsIImageLoadingContent*>(this),
                                aDocument,
                                aDocument->NodePrincipal(),
                                &cpDecision,
                                policyType);
   if (!NS_CP_ACCEPTED(cpDecision)) {
     FireEvent(NS_LITERAL_STRING("error"));
+    FireEvent(NS_LITERAL_STRING("loadend"));
     SetBlockedRequest(aNewURI, cpDecision);
     return NS_OK;
   }
 
   nsLoadFlags loadFlags = aLoadFlags;
   int32_t corsmode = GetCORSMode();
   if (corsmode == CORS_ANONYMOUS) {
     loadFlags |= imgILoader::LOAD_CORS_ANONYMOUS;
@@ -916,17 +937,19 @@ nsImageLoadingContent::LoadImage(nsIURI*
       }
     }
   } else {
     MOZ_ASSERT(!req, "Shouldn't have non-null request here");
     // If we don't have a current URI, we might as well store this URI so people
     // know what we tried (and failed) to load.
     if (!mCurrentRequest)
       mCurrentURI = aNewURI;
+
     FireEvent(NS_LITERAL_STRING("error"));
+    FireEvent(NS_LITERAL_STRING("loadend"));
     return NS_OK;
   }
 
   return NS_OK;
 }
 
 nsresult
 nsImageLoadingContent::ForceImageState(bool aForce,
--- a/dom/base/nsImageLoadingContent.h
+++ b/dom/base/nsImageLoadingContent.h
@@ -128,23 +128,25 @@ protected:
    * URI object already available, they should use this method.
    *
    * @param aNewURI the URI to be loaded
    * @param aForce If true, make sure to load the URI.  If false, only
    *        load if the URI is different from the currently loaded URI.
    * @param aNotify If true, nsIDocumentObserver state change notifications
    *                will be sent as needed.
    * @param aImageLoadType The ImageLoadType for this request
+   * @param aLoadStart If true, dispatch "loadstart" event.
    * @param aDocument Optional parameter giving the document this node is in.
    *        This is purely a performance optimization.
    * @param aLoadFlags Optional parameter specifying load flags to use for
    *        the image load
    */
   nsresult LoadImage(nsIURI* aNewURI, bool aForce, bool aNotify,
-                     ImageLoadType aImageLoadType, nsIDocument* aDocument = nullptr,
+                     ImageLoadType aImageLoadType, bool aLoadStart = true,
+                     nsIDocument* aDocument = nullptr,
                      nsLoadFlags aLoadFlags = nsIRequest::LOAD_NORMAL);
 
   /**
    * helpers to get the document for this content (from the nodeinfo
    * and such).  Not named GetOwnerDoc/GetCurrentDoc to prevent ambiguous
    * method names in subclasses
    *
    * @return the document we belong to
@@ -258,17 +260,18 @@ private:
    * content and updates what ImageState() returns accordingly.  It will also
    * fire a ContentStatesChanged() notification as needed if aNotify is true.
    */
   void UpdateImageState(bool aNotify);
 
   /**
    * Method to fire an event once we know what's going on with the image load.
    *
-   * @param aEventType "load" or "error" depending on how things went
+   * @param aEventType "loadstart", "loadend", "load", or "error" depending on
+   *                   how things went
    */
   nsresult FireEvent(const nsAString& aEventType);
 
 protected:
   /**
    * Method to create an nsIURI object from the given string (will
    * handle getting the right charset, base, etc).  You MUST pass in a
    * non-null document to this function.
@@ -313,17 +316,17 @@ protected:
   /**
    * Switch our pending request to be our current request.
    * mPendingRequest must be non-null!
    */
   void MakePendingRequestCurrent();
 
   /**
    * Cancels and nulls-out the "current" and "pending" requests if they exist.
-   * 
+   *
    * @param aNonvisibleAction An action to take if the image is no longer
    *                          visible as a result; see |UntrackImage|.
    */
   void ClearCurrentRequest(nsresult aReason,
                            const Maybe<OnNonvisible>& aNonvisibleAction = Nothing());
   void ClearPendingRequest(nsresult aReason,
                            const Maybe<OnNonvisible>& aNonvisibleAction = Nothing());
 
--- a/dom/battery/BatteryManager.cpp
+++ b/dom/battery/BatteryManager.cpp
@@ -144,16 +144,21 @@ BatteryManager::UpdateFromBatteryInfo(co
   mRemainingTime = aBatteryInfo.remainingTime();
 
   if (!nsContentUtils::IsChromeDoc(doc) &&
       status != nsIPrincipal::APP_STATUS_CERTIFIED)
   {
     mLevel = lround(mLevel * 10.0) / 10.0;
     if (mLevel == 1.0) {
       mRemainingTime = mCharging ? kDefaultRemainingTime : kUnknownRemainingTime;
+    } else if (mRemainingTime != kUnknownRemainingTime) {
+      // Round the remaining time to a multiple of 15 minutes and never zero
+      const double MINUTES_15 = 15.0 * 60.0;
+      mRemainingTime = fmax(lround(mRemainingTime / MINUTES_15) * MINUTES_15,
+                            MINUTES_15);
     }
   }
 
   // Add some guards to make sure the values are coherent.
   if (mLevel == 1.0 && mCharging == true &&
       mRemainingTime != kDefaultRemainingTime) {
     mRemainingTime = kDefaultRemainingTime;
     NS_ERROR("Battery API: When charging and level at 1.0, remaining time "
--- a/dom/bluetooth/common/BluetoothService.cpp
+++ b/dom/bluetooth/common/BluetoothService.cpp
@@ -119,17 +119,17 @@ GetAllBluetoothActors(InfallibleTArray<B
 }
 
 } // namespace
 
 BluetoothService::ToggleBtAck::ToggleBtAck(bool aEnabled)
   : mEnabled(aEnabled)
 { }
 
-NS_METHOD
+NS_IMETHODIMP
 BluetoothService::ToggleBtAck::Run()
 {
   BluetoothService::AcknowledgeToggleBt(mEnabled);
 
   return NS_OK;
 }
 
 class BluetoothService::StartupTask final : public nsISettingsServiceCallback
--- a/dom/broadcastchannel/BroadcastChannel.cpp
+++ b/dom/broadcastchannel/BroadcastChannel.cpp
@@ -35,17 +35,17 @@ using namespace workers;
 
 class BroadcastChannelMessage final : public StructuredCloneHolder
 {
 public:
   NS_INLINE_DECL_REFCOUNTING(BroadcastChannelMessage)
 
   BroadcastChannelMessage()
     : StructuredCloneHolder(CloningSupported, TransferringNotSupported,
-                            DifferentProcess)
+                            StructuredCloneScope::DifferentProcess)
   {}
 
 private:
   ~BroadcastChannelMessage()
   {}
 };
 
 namespace {
--- a/dom/cache/ReadStream.cpp
+++ b/dom/cache/ReadStream.cpp
@@ -53,30 +53,30 @@ public:
 
   virtual bool
   MatchId(const nsID& aId) const override;
 
   virtual bool
   HasEverBeenRead() const override;
 
   // Simulate nsIInputStream methods, but we don't actually inherit from it
-  NS_METHOD
+  nsresult
   Close();
 
-  NS_METHOD
+  nsresult
   Available(uint64_t *aNumAvailableOut);
 
-  NS_METHOD
+  nsresult
   Read(char *aBuf, uint32_t aCount, uint32_t *aNumReadOut);
 
-  NS_METHOD
+  nsresult
   ReadSegments(nsWriteSegmentFun aWriter, void *aClosure, uint32_t aCount,
                uint32_t *aNumReadOut);
 
-  NS_METHOD
+  nsresult
   IsNonBlocking(bool *aNonBlockingOut);
 
 private:
   class NoteClosedRunnable;
   class ForgetRunnable;
 
   ~Inner();
 
@@ -261,39 +261,39 @@ ReadStream::Inner::MatchId(const nsID& a
 
 bool
 ReadStream::Inner::HasEverBeenRead() const
 {
   MOZ_ASSERT(NS_GetCurrentThread() == mOwningThread);
   return mHasEverBeenRead;
 }
 
-NS_IMETHODIMP
+nsresult
 ReadStream::Inner::Close()
 {
   // stream ops can happen on any thread
   nsresult rv = mStream->Close();
   NoteClosed();
   return rv;
 }
 
-NS_IMETHODIMP
+nsresult
 ReadStream::Inner::Available(uint64_t* aNumAvailableOut)
 {
   // stream ops can happen on any thread
   nsresult rv = mSnappyStream->Available(aNumAvailableOut);
 
   if (NS_FAILED(rv)) {
     Close();
   }
 
   return rv;
 }
 
-NS_IMETHODIMP
+nsresult
 ReadStream::Inner::Read(char* aBuf, uint32_t aCount, uint32_t* aNumReadOut)
 {
   // stream ops can happen on any thread
   MOZ_ASSERT(aNumReadOut);
 
   nsresult rv = mSnappyStream->Read(aBuf, aCount, aNumReadOut);
 
   if ((NS_FAILED(rv) && rv != NS_BASE_STREAM_WOULD_BLOCK) ||
@@ -301,17 +301,17 @@ ReadStream::Inner::Read(char* aBuf, uint
     Close();
   }
 
   mHasEverBeenRead = true;
 
   return rv;
 }
 
-NS_IMETHODIMP
+nsresult
 ReadStream::Inner::ReadSegments(nsWriteSegmentFun aWriter, void* aClosure,
                                 uint32_t aCount, uint32_t* aNumReadOut)
 {
   // stream ops can happen on any thread
   MOZ_ASSERT(aNumReadOut);
 
   if (aCount) {
     mHasEverBeenRead = true;
@@ -331,17 +331,17 @@ ReadStream::Inner::ReadSegments(nsWriteS
   // want to trigger on that.
   if (*aNumReadOut) {
     mHasEverBeenRead = true;
   }
 
   return rv;
 }
 
-NS_IMETHODIMP
+nsresult
 ReadStream::Inner::IsNonBlocking(bool* aNonBlockingOut)
 {
   // stream ops can happen on any thread
   return mSnappyStream->IsNonBlocking(aNonBlockingOut);
 }
 
 ReadStream::Inner::~Inner()
 {
--- a/dom/canvas/CanvasRenderingContext2D.cpp
+++ b/dom/canvas/CanvasRenderingContext2D.cpp
@@ -156,16 +156,18 @@ using namespace mozilla::ipc;
 using namespace mozilla::layers;
 
 namespace mozilla {
 namespace dom {
 
 // Cap sigma to avoid overly large temp surfaces.
 const Float SIGMA_MAX = 100;
 
+const size_t MAX_STYLE_STACK_SIZE = 1024;
+
 /* Memory reporter stuff */
 static int64_t gCanvasAzureMemoryUsed = 0;
 
 // This is KIND_OTHER because it's not always clear where in memory the pixels
 // of a canvas are stored.  Furthermore, this memory will be tracked by the
 // underlying surface implementations.  See bug 655638 for details.
 class Canvas2dPixelsReporter final : public nsIMemoryReporter
 {
@@ -1955,16 +1957,22 @@ CanvasRenderingContext2D::GetSurfaceForm
 
 void
 CanvasRenderingContext2D::Save()
 {
   EnsureTarget();
   mStyleStack[mStyleStack.Length() - 1].transform = mTarget->GetTransform();
   mStyleStack.SetCapacity(mStyleStack.Length() + 1);
   mStyleStack.AppendElement(CurrentState());
+
+  if (mStyleStack.Length() > MAX_STYLE_STACK_SIZE) {
+    // This is not fast, but is better than OOMing and shouldn't be hit by
+    // reasonable code.
+    mStyleStack.RemoveElementAt(0);
+  }
 }
 
 void
 CanvasRenderingContext2D::Restore()
 {
   if (mStyleStack.Length() - 1 == 0)
     return;
 
--- a/dom/events/Event.cpp
+++ b/dom/events/Event.cpp
@@ -250,17 +250,17 @@ bool
 Event::IsChrome(JSContext* aCx) const
 {
   return mIsMainThreadEvent ?
     xpc::AccessCheck::isChrome(js::GetContextCompartment(aCx)) :
     mozilla::dom::workers::IsCurrentThreadRunningChromeWorker();
 }
 
 // nsIDOMEventInterface
-NS_METHOD
+NS_IMETHODIMP
 Event::GetType(nsAString& aType)
 {
   if (!mIsMainThreadEvent || !mEvent->mSpecifiedEventTypeString.IsEmpty()) {
     aType = mEvent->mSpecifiedEventTypeString;
     return NS_OK;
   }
   const char* name = GetEventName(mEvent->mMessage);
 
@@ -286,17 +286,17 @@ GetDOMEventTarget(nsIDOMEventTarget* aTa
 }
 
 EventTarget*
 Event::GetTarget() const
 {
   return GetDOMEventTarget(mEvent->mTarget);
 }
 
-NS_METHOD
+NS_IMETHODIMP
 Event::GetTarget(nsIDOMEventTarget** aTarget)
 {
   NS_IF_ADDREF(*aTarget = GetTarget());
   return NS_OK;
 }
 
 EventTarget*
 Event::GetCurrentTarget() const
--- a/dom/events/EventNameList.h
+++ b/dom/events/EventNameList.h
@@ -281,16 +281,20 @@ NON_IDL_EVENT(mozaccesskeynotfound,
 EVENT(loadeddata,
       eLoadedData,
       EventNameType_HTML,
       eBasicEventClass)
 EVENT(loadedmetadata,
       eLoadedMetaData,
       EventNameType_HTML,
       eBasicEventClass)
+EVENT(loadend,
+      eLoadEnd,
+      EventNameType_HTML,
+      eBasicEventClass)
 EVENT(loadstart,
       eLoadStart,
       EventNameType_HTML,
       eBasicEventClass)
 EVENT(mousedown,
       eMouseDown,
       EventNameType_All,
       eMouseEventClass)
@@ -700,26 +704,26 @@ NON_IDL_EVENT(DOMActivate,
 NON_IDL_EVENT(DOMFocusIn,
               eLegacyDOMFocusIn,
               EventNameType_HTMLXUL,
               eUIEventClass)
 NON_IDL_EVENT(DOMFocusOut,
               eLegacyDOMFocusOut,
               EventNameType_HTMLXUL,
               eUIEventClass)
-                                  
+
 NON_IDL_EVENT(DOMMouseScroll,
               eLegacyMouseLineOrPageScroll,
               EventNameType_HTMLXUL,
               eMouseScrollEventClass)
 NON_IDL_EVENT(MozMousePixelScroll,
               eLegacyMousePixelScroll,
               EventNameType_HTMLXUL,
               eMouseScrollEventClass)
-                                                
+
 NON_IDL_EVENT(open,
               eOpen,
               EventNameType_None,
               eBasicEventClass)
 
 NON_IDL_EVENT(dataavailable,
               eMediaRecorderDataAvailable,
               EventNameType_None,
--- a/dom/html/HTMLInputElement.cpp
+++ b/dom/html/HTMLInputElement.cpp
@@ -4821,22 +4821,32 @@ HTMLInputElement::HandleTypeChange(uint8
   ValueModeType aOldValueMode = GetValueMode();
   uint8_t oldType = mType;
   nsAutoString aOldValue;
 
   if (aOldValueMode == VALUE_MODE_VALUE) {
     GetValue(aOldValue);
   }
 
+  nsTextEditorState::SelectionProperties sp;
+
+  if (GetEditorState()) {
+    sp = mInputData.mState->GetSelectionProperties();
+  }
+
   // We already have a copy of the value, lets free it and changes the type.
   FreeData();
   mType = aNewType;
 
   if (IsSingleLineTextControl()) {
+
     mInputData.mState = new nsTextEditorState(this);
+    if (!sp.IsDefault()) {
+      mInputData.mState->SetSelectionProperties(sp);
+    }
   }
 
   /**
    * The following code is trying to reproduce the algorithm described here:
    * http://www.whatwg.org/specs/web-apps/current-work/complete.html#input-type-change
    */
   switch (GetValueMode()) {
     case VALUE_MODE_DEFAULT:
--- a/dom/html/nsTextEditorState.cpp
+++ b/dom/html/nsTextEditorState.cpp
@@ -1531,16 +1531,29 @@ nsTextEditorState::GetSelectionPropertie
     HTMLInputElement* number = GetParentNumberControl(mBoundFrame);
     if (number) {
       return number->GetSelectionProperties();
     }
   }
   return mSelectionProperties;
 }
 
+void
+nsTextEditorState::SetSelectionProperties(nsTextEditorState::SelectionProperties& aProps)
+{
+  if (mBoundFrame) {
+    mBoundFrame->SetSelectionRange(aProps.GetStart(),
+                                   aProps.GetEnd(),
+                                   aProps.GetDirection());
+  } else {
+    mSelectionProperties = aProps;
+  }
+}
+
+
 HTMLInputElement*
 nsTextEditorState::GetParentNumberControl(nsFrame* aFrame) const
 {
   MOZ_ASSERT(aFrame);
   nsIContent* content = aFrame->GetContent();
   MOZ_ASSERT(content);
   nsIContent* parent = content->GetParent();
   if (!parent) {
--- a/dom/html/nsTextEditorState.h
+++ b/dom/html/nsTextEditorState.h
@@ -255,16 +255,17 @@ public:
     private:
       int32_t mStart, mEnd;
       bool mIsDirty = false;
       nsITextControlFrame::SelectionDirection mDirection;
   };
 
   bool IsSelectionCached() const;
   SelectionProperties& GetSelectionProperties();
+  void SetSelectionProperties(SelectionProperties& aProps);
   void WillInitEagerly() { mSelectionRestoreEagerInit = true; }
   bool HasNeverInitializedBefore() const { return !mEverInited; }
 
   void UpdateEditableState(bool aNotify) {
     if (mRootNode) {
       mRootNode->UpdateEditableState(aNotify);
     }
   }
--- a/dom/html/test/forms/mochitest.ini
+++ b/dom/html/test/forms/mochitest.ini
@@ -1,15 +1,16 @@
 [DEFAULT]
 support-files =
   save_restore_radio_groups.sjs
   test_input_number_data.js
   !/dom/html/test/reflect.js
 
 [test_bug1039548.html]
+[test_bug1283915.html]
 [test_bug1286509.html]
 skip-if = os == "android" || appname == "b2g" # up/down arrow keys not supported on android/b2g
 [test_button_attributes_reflection.html]
 [test_input_radio_radiogroup.html]
 [test_input_radio_required.html]
 [test_change_event.html]
 skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
 [test_datalist_element.html]
new file mode 100644
--- /dev/null
+++ b/dom/html/test/forms/test_bug1283915.html
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1283915
+-->
+<head>
+  <meta charset="utf-8">
+  <title>Test for Bug 1283915</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+  <script type="application/javascript">
+
+  /** Test for Bug 1283915 **/
+
+  SimpleTest.waitForExplicitFinish();
+
+  function isCursorAtEnd(field){
+    is(field.selectionStart, field.value.length);
+    is(field.selectionEnd, field.value.length);
+  }
+
+  function test() {
+    var tField = document.getElementById("textField");
+    tField.focus();
+
+    synthesizeKey("a", {});
+    is(tField.value, "a");
+    isCursorAtEnd(tField);
+    document.body.offsetWidth; // frame must be created after type change
+
+    synthesizeKey("b", {});
+    is(tField.value, "ab");
+    isCursorAtEnd(tField);
+
+    synthesizeKey("c", {});
+    is(tField.value, "abc");
+    isCursorAtEnd(tField);
+
+    var nField = document.getElementById("numField");
+    nField.focus();
+
+    synthesizeKey("1", {});
+    is(nField.value, "1");
+    isCursorAtEnd(nField);
+    document.body.offsetWidth;
+
+    synthesizeKey("2", {});
+    is(nField.value, "12");
+    isCursorAtEnd(nField);
+
+    synthesizeKey("3", {});
+    is(nField.value, "123");
+    isCursorAtEnd(nField);
+
+    SimpleTest.finish();
+  }
+
+  SimpleTest.waitForFocus(test);
+  </script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1283915">Mozilla Bug 1283915</a>
+<p id="display"></p>
+<input id="textField" type="text" oninput="if (this.type !='password') this.type = 'password';">
+<input id="numField" type="text" oninput="if (this.type !='number') this.type = 'number';">
+<pre id="test">
+</pre>
+</body>
+</html>
--- a/dom/indexedDB/ActorsParent.cpp
+++ b/dom/indexedDB/ActorsParent.cpp
@@ -144,21 +144,21 @@ class TransactionDatabaseOperationBase;
 class VersionChangeTransaction;
 
 /*******************************************************************************
  * Constants
  ******************************************************************************/
 
 // If JS_STRUCTURED_CLONE_VERSION changes then we need to update our major
 // schema version.
-static_assert(JS_STRUCTURED_CLONE_VERSION == 6,
+static_assert(JS_STRUCTURED_CLONE_VERSION == 7,
               "Need to update the major schema version.");
 
 // Major schema version. Bump for almost everything.
-const uint32_t kMajorSchemaVersion = 23;
+const uint32_t kMajorSchemaVersion = 24;
 
 // Minor schema version. Should almost always be 0 (maybe bump on release
 // branches if we have to).
 const uint32_t kMinorSchemaVersion = 0;
 
 // The schema version we store in the SQLite database is a (signed) 32-bit
 // integer. The major version is left-shifted 4 bits so the max value is
 // 0xFFFFFFF. The minor version occupies the lower 4 bits and its max is 0xF.
@@ -4097,16 +4097,29 @@ UpgradeSchemaFrom22_0To23_0(mozIStorageC
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return rv;
   }
 
   return NS_OK;
 }
 
 nsresult
+UpgradeSchemaFrom23_0To24_0(mozIStorageConnection* aConnection)
+{
+  // The only change between 23 and 24 was a different structured clone format,
+  // but it's backwards-compatible.
+  nsresult rv = aConnection->SetSchemaVersion(MakeSchemaVersion(24, 0));
+  if (NS_WARN_IF(NS_FAILED(rv))) {
+    return rv;
+  }
+
+  return NS_OK;
+}
+
+nsresult
 GetDatabaseFileURL(nsIFile* aDatabaseFile,
                    PersistenceType aPersistenceType,
                    const nsACString& aGroup,
                    const nsACString& aOrigin,
                    uint32_t aTelemetryId,
                    nsIFileURL** aResult)
 {
   MOZ_ASSERT(aDatabaseFile);
@@ -4602,17 +4615,17 @@ CreateStorageConnection(nsIFile* aDBFile
       }
 
       rv = stmt->Execute();
       if (NS_WARN_IF(NS_FAILED(rv))) {
         return rv;
       }
     } else  {
       // This logic needs to change next time we change the schema!
-      static_assert(kSQLiteSchemaVersion == int32_t((23 << 4) + 0),
+      static_assert(kSQLiteSchemaVersion == int32_t((24 << 4) + 0),
                     "Upgrade function needed due to schema version increase.");
 
       while (schemaVersion != kSQLiteSchemaVersion) {
         if (schemaVersion == 4) {
           rv = UpgradeSchemaFrom4To5(connection);
         } else if (schemaVersion == 5) {
           rv = UpgradeSchemaFrom5To6(connection);
         } else if (schemaVersion == 6) {
@@ -4646,16 +4659,18 @@ CreateStorageConnection(nsIFile* aDBFile
         } else if (schemaVersion == MakeSchemaVersion(19, 0)) {
           rv = UpgradeSchemaFrom19_0To20_0(aFMDirectory, connection);
         } else if (schemaVersion == MakeSchemaVersion(20, 0)) {
           rv = UpgradeSchemaFrom20_0To21_0(connection);
         } else if (schemaVersion == MakeSchemaVersion(21, 0)) {
           rv = UpgradeSchemaFrom21_0To22_0(connection);
         } else if (schemaVersion == MakeSchemaVersion(22, 0)) {
           rv = UpgradeSchemaFrom22_0To23_0(connection, aOrigin);
+        } else if (schemaVersion == MakeSchemaVersion(23, 0)) {
+          rv = UpgradeSchemaFrom23_0To24_0(connection);
         } else {
           IDB_WARNING("Unable to open IndexedDB database, no upgrade path is "
                       "available!");
           return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
         }
 
         if (NS_WARN_IF(NS_FAILED(rv))) {
           return rv;
--- a/dom/indexedDB/IDBObjectStore.cpp
+++ b/dom/indexedDB/IDBObjectStore.cpp
@@ -75,17 +75,19 @@ struct IDBObjectStore::StructuredCloneWr
   };
 
   JSAutoStructuredCloneBuffer mCloneBuffer;
   nsTArray<BlobOrMutableFile> mBlobOrMutableFiles;
   IDBDatabase* mDatabase;
   uint64_t mOffsetToKeyProp;
 
   explicit StructuredCloneWriteInfo(IDBDatabase* aDatabase)
-    : mDatabase(aDatabase)
+    : mCloneBuffer(JS::StructuredCloneScope::SameProcessSameThread, nullptr,
+                   nullptr)
+    , mDatabase(aDatabase)
     , mOffsetToKeyProp(0)
   {
     MOZ_ASSERT(aDatabase);
 
     MOZ_COUNT_CTOR(StructuredCloneWriteInfo);
   }
 
   StructuredCloneWriteInfo(StructuredCloneWriteInfo&& aCloneWriteInfo)
@@ -1105,16 +1107,17 @@ IDBObjectStore::DeserializeValue(JSConte
     nullptr,
     nullptr,
     nullptr
   };
 
   // FIXME: Consider to use StructuredCloneHolder here and in other
   //        deserializing methods.
   if (!JS_ReadStructuredClone(aCx, data, dataLen, JS_STRUCTURED_CLONE_VERSION,
+                              JS::StructuredCloneScope::SameProcessSameThread,
                               aValue, &callbacks, &aCloneReadInfo)) {
     return false;
   }
 
   return true;
 }
 
 // static
@@ -1143,16 +1146,17 @@ IDBObjectStore::DeserializeIndexValue(JS
 
   static const JSStructuredCloneCallbacks callbacks = {
     CommonStructuredCloneReadCallback<IndexDeserializationHelper>,
     nullptr,
     nullptr
   };
 
   if (!JS_ReadStructuredClone(aCx, data, dataLen, JS_STRUCTURED_CLONE_VERSION,
+                              JS::StructuredCloneScope::SameProcessSameThread,
                               aValue, &callbacks, &aCloneReadInfo)) {
     return false;
   }
 
   return true;
 }
 
 #if !defined(MOZ_B2G)
@@ -1186,16 +1190,17 @@ IDBObjectStore::DeserializeUpgradeValue(
     nullptr,
     nullptr,
     nullptr,
     nullptr,
     nullptr
   };
 
   if (!JS_ReadStructuredClone(aCx, data, dataLen, JS_STRUCTURED_CLONE_VERSION,
+                              JS::StructuredCloneScope::SameProcessSameThread,
                               aValue, &callbacks, &aCloneReadInfo)) {
     return false;
   }
 
   return true;
 }
 
 #endif // MOZ_B2G
--- a/dom/indexedDB/IndexedDatabaseInlines.h
+++ b/dom/indexedDB/IndexedDatabaseInlines.h
@@ -42,25 +42,29 @@ StructuredCloneFile::operator==(const St
          this->mMutableFile == aOther.mMutableFile &&
          this->mFileInfo == aOther.mFileInfo &&
          this->mMutable == aOther.mMutable;
 }
 
 inline
 StructuredCloneReadInfo::StructuredCloneReadInfo()
   : mDatabase(nullptr)
+  , mCloneBuffer(JS::StructuredCloneScope::SameProcessSameThread, nullptr,
+                 nullptr)
 {
   MOZ_COUNT_CTOR(StructuredCloneReadInfo);
 }
 
 inline
 StructuredCloneReadInfo::StructuredCloneReadInfo(
                              SerializedStructuredCloneReadInfo&& aCloneReadInfo)
   : mData(Move(aCloneReadInfo.data()))
   , mDatabase(nullptr)
+  , mCloneBuffer(JS::StructuredCloneScope::SameProcessSameThread, nullptr,
+                 nullptr)
 {
   MOZ_COUNT_CTOR(StructuredCloneReadInfo);
 }
 
 inline
 StructuredCloneReadInfo::~StructuredCloneReadInfo()
 {
   MOZ_COUNT_DTOR(StructuredCloneReadInfo);
--- a/dom/ipc/StructuredCloneData.h
+++ b/dom/ipc/StructuredCloneData.h
@@ -75,17 +75,17 @@ private:
 };
 
 class StructuredCloneData : public StructuredCloneHolder
 {
 public:
   StructuredCloneData()
     : StructuredCloneHolder(StructuredCloneHolder::CloningSupported,
                             StructuredCloneHolder::TransferringSupported,
-                            StructuredCloneHolder::DifferentProcess)
+                            StructuredCloneHolder::StructuredCloneScope::DifferentProcess)
     , mExternalData(nullptr)
     , mExternalDataLength(0)
   {}
 
   StructuredCloneData(const StructuredCloneData&) = delete;
 
   ~StructuredCloneData()
   {
--- a/dom/media/webaudio/AudioEventTimeline.cpp
+++ b/dom/media/webaudio/AudioEventTimeline.cpp
@@ -258,17 +258,17 @@ AudioEventTimeline::GetValuesAtTimeHelpe
   // SetTarget nodes can be handled no matter what their next node is (if
   // they have one)
   if (aPrevious->mType == AudioTimelineEvent::SetTarget) {
     return ExponentialApproach(TimeOf(aPrevious),
                                mLastComputedValue, aPrevious->mValue,
                                aPrevious->mTimeConstant, aTime);
   }
 
-  // SetValueCurve events can be handled no mattar what their next node is
+  // SetValueCurve events can be handled no matter what their next node is
   // (if they have one)
   if (aPrevious->mType == AudioTimelineEvent::SetValueCurve) {
     return ExtractValueFromCurve(TimeOf(aPrevious),
                                  aPrevious->mCurve, aPrevious->mCurveLength,
                                  aPrevious->mDuration, aTime);
   }
 
   // If the requested time is after all of the existing events
--- a/dom/media/webaudio/AudioEventTimeline.h
+++ b/dom/media/webaudio/AudioEventTimeline.h
@@ -336,16 +336,23 @@ public:
     return mEvents.Length();
   }
 
   template<class TimeType>
   void CleanupEventsOlderThan(TimeType aTime)
   {
     while (mEvents.Length() > 1 &&
         aTime > mEvents[1].template Time<TimeType>()) {
+
+      if (mEvents[1].mType == AudioTimelineEvent::SetTarget) {
+        mLastComputedValue = GetValuesAtTimeHelperInternal(
+                                mEvents[1].template Time<TimeType>(),
+                                &mEvents[0], nullptr);
+      }
+
       mEvents.RemoveElementAt(0);
     }
   }
 
 private:
   template<class TimeType>
   void GetValuesAtTimeHelper(TimeType aTime, float* aBuffer, const size_t aSize);
 
--- a/dom/messagechannel/SharedMessagePortMessage.h
+++ b/dom/messagechannel/SharedMessagePortMessage.h
@@ -19,17 +19,17 @@ class SharedMessagePortMessage final : p
 {
 public:
   NS_INLINE_DECL_REFCOUNTING(SharedMessagePortMessage)
 
   nsTArray<uint8_t> mData;
 
   SharedMessagePortMessage()
     : StructuredCloneHolder(CloningSupported, TransferringSupported,
-                            DifferentProcess)
+                            StructuredCloneScope::DifferentProcess)
   {}
 
   void Read(nsISupports* aParent,
             JSContext* aCx,
             JS::MutableHandle<JS::Value> aValue,
             ErrorResult& aRv);
 
   void Write(JSContext* aCx,
--- a/dom/mobilemessage/android/SmsManager.cpp
+++ b/dom/mobilemessage/android/SmsManager.cpp
@@ -10,16 +10,18 @@
 #include "mozilla/dom/mobilemessage/SmsParent.h"
 #include "mozilla/dom/mobilemessage/SmsTypes.h"
 #include "mozilla/dom/mobilemessage/Types.h"
 #include "MobileMessageThreadInternal.h"
 #include "SmsMessageInternal.h"
 #include "mozilla/Services.h"
 #include "nsIMobileMessageDatabaseService.h"
 #include "nsIObserverService.h"
+#include "nsThreadUtils.h"
+#include "AndroidJavaWrappers.h"
 
 using namespace mozilla::dom;
 using namespace mozilla::dom::mobilemessage;
 
 namespace mozilla {
 
 /*static*/
 void
--- a/dom/plugins/base/nsPluginInstanceOwner.cpp
+++ b/dom/plugins/base/nsPluginInstanceOwner.cpp
@@ -1540,32 +1540,32 @@ bool nsPluginInstanceOwner::AddPluginVie
     mJavaView = mInstance->GetJavaSurface();
 
     if (!mJavaView)
       return false;
 
     mJavaView = (void*)jni::GetGeckoThreadEnv()->NewGlobalRef((jobject)mJavaView);
   }
 
-  if (AndroidBridge::Bridge())
-    AndroidBridge::Bridge()->AddPluginView((jobject)mJavaView, aRect, mFullScreen);
-
-  if (mFullScreen)
+  if (mFullScreen) {
+    java::GeckoAppShell::AddFullScreenPluginView(jni::Object::Ref::From(jobject(mJavaView)));
     sFullScreenInstance = this;
+  }
 
   return true;
 }
 
 void nsPluginInstanceOwner::RemovePluginView()
 {
   if (!mInstance || !mJavaView)
     return;
 
-  java::GeckoAppShell::RemovePluginView(
-      jni::Object::Ref::From(jobject(mJavaView)), mFullScreen);
+  if (mFullScreen) {
+    java::GeckoAppShell::RemoveFullScreenPluginView(jni::Object::Ref::From(jobject(mJavaView)));
+  }
   jni::GetGeckoThreadEnv()->DeleteGlobalRef((jobject)mJavaView);
   mJavaView = nullptr;
 
   if (mFullScreen)
     sFullScreenInstance = nullptr;
 }
 
 void
--- a/dom/presentation/PresentationSessionInfo.cpp
+++ b/dom/presentation/PresentationSessionInfo.cpp
@@ -602,16 +602,18 @@ PresentationControllingInfo::Shutdown(ns
 {
   PresentationSessionInfo::Shutdown(aReason);
 
   // Close the server socket if any.
   if (mServerSocket) {
     NS_WARN_IF(NS_FAILED(mServerSocket->Close()));
     mServerSocket = nullptr;
   }
+
+  mIsReconnecting = false;
 }
 
 nsresult
 PresentationControllingInfo::GetAddress()
 {
 #if defined(MOZ_WIDGET_GONK)
   nsCOMPtr<nsINetworkManager> networkManager =
     do_GetService("@mozilla.org/network/manager;1");
@@ -677,16 +679,23 @@ PresentationControllingInfo::GetAddress(
   return NS_OK;
 }
 
 nsresult
 PresentationControllingInfo::OnGetAddress(const nsACString& aAddress)
 {
   MOZ_ASSERT(NS_IsMainThread());
 
+  if (NS_WARN_IF(!mServerSocket)) {
+    return NS_ERROR_FAILURE;
+  }
+  if (NS_WARN_IF(!mControlChannel)) {
+    return NS_ERROR_FAILURE;
+  }
+
   // Prepare and send the offer.
   int32_t port;
   nsresult rv = mServerSocket->GetPort(&port);
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return rv;
   }
 
   RefPtr<TCPPresentationChannelDescription> description =
@@ -755,16 +764,20 @@ PresentationControllingInfo::NotifyConne
 {
   PRES_DEBUG("%s:id[%s], role[%d]\n", __func__,
              NS_ConvertUTF16toUTF8(mSessionId).get(), mRole);
 
   MOZ_ASSERT(NS_IsMainThread());
 
   switch (mState) {
     case nsIPresentationSessionListener::STATE_CONNECTING: {
+      if (mIsReconnecting) {
+        return ContinueReconnect();
+      }
+
       nsresult rv = mControlChannel->Launch(GetSessionId(), GetUrl());
       if (NS_WARN_IF(NS_FAILED(rv))) {
         return rv;
       }
       Unused << NS_WARN_IF(NS_FAILED(BuildTransport()));
       break;
     }
     case nsIPresentationSessionListener::STATE_TERMINATED: {
@@ -782,21 +795,20 @@ NS_IMETHODIMP
 PresentationControllingInfo::NotifyReconnected()
 {
   PRES_DEBUG("%s:id[%s], role[%d]\n", __func__,
              NS_ConvertUTF16toUTF8(mSessionId).get(), mRole);
 
   MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(mReconnectCallback);
 
-  if (NS_WARN_IF(mState == nsIPresentationSessionListener::STATE_TERMINATED)) {
+  if (NS_WARN_IF(mState != nsIPresentationSessionListener::STATE_CONNECTING)) {
     return NS_ERROR_FAILURE;
   }
 
-  SetStateWithReason(nsIPresentationSessionListener::STATE_CONNECTING, NS_OK);
   return mReconnectCallback->NotifySuccess();
 }
 
 nsresult
 PresentationControllingInfo::BuildTransport()
 {
   MOZ_ASSERT(NS_IsMainThread());
 
@@ -931,46 +943,81 @@ PresentationControllingInfo::OnStopListe
   }
 
   // It happens after the session is ready. Change the state to CLOSED.
   SetStateWithReason(nsIPresentationSessionListener::STATE_CLOSED, aStatus);
 
   return NS_OK;
 }
 
+/**
+ * The steps to reconnect a session are summarized below:
+ * 1. Change |mState| to CONNECTING.
+ * 2. Check whether |mControlChannel| is existed or not. Usually we have to
+ *    create a new control cahnnel.
+ * 3.1 |mControlChannel| is null, which means we have to create a new one.
+ *     |EstablishControlChannel| is called to create a new control channel.
+ *     At this point, |mControlChannel| is not able to use yet. Set
+ *     |mIsReconnecting| to true and wait until |NotifyConnected|.
+ * 3.2 |mControlChannel| is not null and is avaliable.
+ *     We can just call |ContinueReconnect| to send reconnect command.
+ * 4. |NotifyReconnected| of |nsIPresentationControlChannelListener| is called
+ *    to indicate the receiver is ready for reconnecting.
+ * 5. Once both step 3 and 4 are done, the rest is to build a new data
+ *    transport channel by following the same steps as starting a
+ *    new session.
+ */
+
 nsresult
 PresentationControllingInfo::Reconnect(nsIPresentationServiceCallback* aCallback)
 {
   if (!aCallback) {
     return NS_ERROR_INVALID_ARG;
   }
 
   mReconnectCallback = aCallback;
 
   if (NS_WARN_IF(mState == nsIPresentationSessionListener::STATE_TERMINATED)) {
     return mReconnectCallback->NotifyError(NS_ERROR_DOM_INVALID_STATE_ERR);
   }
 
+  SetStateWithReason(nsIPresentationSessionListener::STATE_CONNECTING, NS_OK);
+
   nsresult rv = NS_OK;
   if (!mControlChannel) {
     nsCOMPtr<nsIPresentationControlChannel> ctrlChannel;
     rv = mDevice->EstablishControlChannel(getter_AddRefs(ctrlChannel));
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return mReconnectCallback->NotifyError(NS_ERROR_DOM_OPERATION_ERR);
     }
 
     rv = Init(ctrlChannel);
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return mReconnectCallback->NotifyError(NS_ERROR_DOM_OPERATION_ERR);
     }
+
+    mIsReconnecting = true;
+  } else {
+    return ContinueReconnect();
   }
 
-  rv = mControlChannel->Reconnect(mSessionId, GetUrl());
-  if (NS_WARN_IF(NS_FAILED(rv))) {
-    return mReconnectCallback->NotifyError(rv);
+  return NS_OK;
+}
+
+nsresult
+PresentationControllingInfo::ContinueReconnect()
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  MOZ_ASSERT(mControlChannel);
+  MOZ_ASSERT(mReconnectCallback);
+
+  mIsReconnecting = false;
+  if (NS_WARN_IF(NS_FAILED(mControlChannel->Reconnect(mSessionId, GetUrl()))) &&
+      mReconnectCallback) {
+    return mReconnectCallback->NotifyError(NS_ERROR_DOM_OPERATION_ERR);
   }
 
   return NS_OK;
 }
 
 // nsIListNetworkAddressesListener
 NS_IMETHODIMP
 PresentationControllingInfo::OnListedNetworkAddresses(const char** aAddressArray,
--- a/dom/presentation/PresentationSessionInfo.h
+++ b/dom/presentation/PresentationSessionInfo.h
@@ -200,18 +200,21 @@ private:
   }
 
   void Shutdown(nsresult aReason) override;
 
   nsresult GetAddress();
 
   nsresult OnGetAddress(const nsACString& aAddress);
 
+  nsresult ContinueReconnect();
+
   nsCOMPtr<nsIServerSocket> mServerSocket;
   nsCOMPtr<nsIPresentationServiceCallback> mReconnectCallback;
+  bool mIsReconnecting = false;
 };
 
 // Session info with presenting browsing context (receiver side) behaviors.
 class PresentationPresentingInfo final : public PresentationSessionInfo
                                        , public PromiseNativeHandler
                                        , public nsITimerCallback
 {
 public:
--- a/dom/system/mac/CoreLocationLocationProvider.mm
+++ b/dom/system/mac/CoreLocationLocationProvider.mm
@@ -133,17 +133,17 @@ CoreLocationLocationProvider::MLSUpdate:
 NS_IMETHODIMP
 CoreLocationLocationProvider::MLSUpdate::NotifyError(uint16_t error)
 {
   mParentLocationProvider.NotifyError(error);
   return NS_OK;
 }
 class CoreLocationObjects {
 public:
-  NS_METHOD Init(CoreLocationLocationProvider* aProvider) {
+  nsresult Init(CoreLocationLocationProvider* aProvider) {
     mLocationManager = [[CLLocationManager alloc] init];
     NS_ENSURE_TRUE(mLocationManager, NS_ERROR_NOT_AVAILABLE);
 
     mLocationDelegate = [[LocationDelegate alloc] init:aProvider];
     NS_ENSURE_TRUE(mLocationDelegate, NS_ERROR_NOT_AVAILABLE);
 
     mLocationManager.desiredAccuracy = kDEFAULT_ACCURACY;
     mLocationManager.delegate = mLocationDelegate;
--- a/dom/webidl/EventHandler.webidl
+++ b/dom/webidl/EventHandler.webidl
@@ -55,16 +55,17 @@ interface GlobalEventHandlers {
            attribute EventHandler oninput;
            attribute EventHandler oninvalid;
            attribute EventHandler onkeydown;
            attribute EventHandler onkeypress;
            attribute EventHandler onkeyup;
            attribute EventHandler onload;
            attribute EventHandler onloadeddata;
            attribute EventHandler onloadedmetadata;
+           attribute EventHandler onloadend;
            attribute EventHandler onloadstart;
            attribute EventHandler onmousedown;
   [LenientThis] attribute EventHandler onmouseenter;
   [LenientThis] attribute EventHandler onmouseleave;
            attribute EventHandler onmousemove;
            attribute EventHandler onmouseout;
            attribute EventHandler onmouseover;
            attribute EventHandler onmouseup;
--- a/dom/workers/ServiceWorkerClient.cpp
+++ b/dom/workers/ServiceWorkerClient.cpp
@@ -88,17 +88,17 @@ class ServiceWorkerClientPostMessageRunn
   : public Runnable
   , public StructuredCloneHolder
 {
   uint64_t mWindowId;
 
 public:
   explicit ServiceWorkerClientPostMessageRunnable(uint64_t aWindowId)
     : StructuredCloneHolder(CloningSupported, TransferringSupported,
-                            SameProcessDifferentThread)
+                            StructuredCloneScope::SameProcessDifferentThread)
     , mWindowId(aWindowId)
   {}
 
   NS_IMETHOD
   Run() override
   {
     AssertIsOnMainThread();
     nsGlobalWindow* window = nsGlobalWindow::GetInnerWindowWithId(mWindowId);
--- a/dom/workers/ServiceWorkerEvents.cpp
+++ b/dom/workers/ServiceWorkerEvents.cpp
@@ -1086,17 +1086,17 @@ PushMessageData::Blob(ErrorResult& aRv)
       mOwner, EmptyString(), mBytes.Length(), data, aRv);
     if (blob) {
       return blob.forget();
     }
   }
   return nullptr;
 }
 
-NS_METHOD
+nsresult
 PushMessageData::EnsureDecodedText()
 {
   if (mBytes.IsEmpty() || !mDecodedText.IsEmpty()) {
     return NS_OK;
   }
   nsresult rv = BodyUtil::ConsumeText(
     mBytes.Length(),
     reinterpret_cast<uint8_t*>(mBytes.Elements()),
--- a/dom/workers/ServiceWorkerEvents.h
+++ b/dom/workers/ServiceWorkerEvents.h
@@ -209,17 +209,17 @@ public:
 
   PushMessageData(nsISupports* aOwner, nsTArray<uint8_t>&& aBytes);
 private:
   nsCOMPtr<nsISupports> mOwner;
   nsTArray<uint8_t> mBytes;
   nsString mDecodedText;
   ~PushMessageData();
 
-  NS_METHOD EnsureDecodedText();
+  nsresult EnsureDecodedText();
   uint8_t* GetContentsCopy();
 };
 
 class PushEvent final : public ExtendableEvent
 {
   RefPtr<PushMessageData> mData;
 
 protected:
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -669,17 +669,17 @@ class MessageEventRunnable final : publi
 
   RefPtr<PromiseNativeHandler> mHandler;
 
 public:
   MessageEventRunnable(WorkerPrivate* aWorkerPrivate,
                        TargetAndBusyBehavior aBehavior)
   : WorkerRunnable(aWorkerPrivate, aBehavior)
   , StructuredCloneHolder(CloningSupported, TransferringSupported,
-                          SameProcessDifferentThread)
+                          StructuredCloneScope::SameProcessDifferentThread)
   {
   }
 
   void
   SetServiceWorkerData(UniquePtr<ServiceWorkerClientInfo>&& aSource,
                        PromiseNativeHandler* aHandler)
   {
     mEventSource = Move(aSource);
--- a/dom/xhr/XMLHttpRequestWorker.cpp
+++ b/dom/xhr/XMLHttpRequestWorker.cpp
@@ -239,17 +239,17 @@ class SendRunnable final
   nsCOMPtr<nsIEventTarget> mSyncLoopTarget;
   bool mHasUploadListeners;
 
 public:
   SendRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
                const nsAString& aStringBody)
   : WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy)
   , StructuredCloneHolder(CloningSupported, TransferringNotSupported,
-                          SameProcessDifferentThread)
+                          StructuredCloneScope::SameProcessDifferentThread)
   , mStringBody(aStringBody)
   , mHasUploadListeners(false)
   {
   }
 
   void SetHaveUploadListeners(bool aHasUploadListeners)
   {
     mHasUploadListeners = aHasUploadListeners;
@@ -497,30 +497,30 @@ class EventRunnable final : public MainT
   JS::PersistentRooted<JSObject*> mScopeObj;
 
 public:
   EventRunnable(Proxy* aProxy, bool aUploadEvent, const nsString& aType,
                 bool aLengthComputable, uint64_t aLoaded, uint64_t aTotal,
                 JS::Handle<JSObject*> aScopeObj)
   : MainThreadProxyRunnable(aProxy->mWorkerPrivate, aProxy),
     StructuredCloneHolder(CloningSupported, TransferringNotSupported,
-                          SameProcessDifferentThread),
+                          StructuredCloneScope::SameProcessDifferentThread),
     mType(aType), mResponse(JS::UndefinedValue()), mLoaded(aLoaded),
     mTotal(aTotal), mEventStreamId(aProxy->mInnerEventStreamId), mStatus(0),
     mReadyState(0), mUploadEvent(aUploadEvent), mProgressEvent(true),
     mLengthComputable(aLengthComputable), mUseCachedArrayBufferResponse(false),
     mResponseTextResult(NS_OK), mStatusResult(NS_OK), mResponseResult(NS_OK),
     mScopeObj(RootingCx(), aScopeObj)
   { }
 
   EventRunnable(Proxy* aProxy, bool aUploadEvent, const nsString& aType,
                 JS::Handle<JSObject*> aScopeObj)
   : MainThreadProxyRunnable(aProxy->mWorkerPrivate, aProxy),
     StructuredCloneHolder(CloningSupported, TransferringNotSupported,
-                          SameProcessDifferentThread),
+                          StructuredCloneScope::SameProcessDifferentThread),
     mType(aType), mResponse(JS::UndefinedValue()), mLoaded(0), mTotal(0),
     mEventStreamId(aProxy->mInnerEventStreamId), mStatus(0), mReadyState(0),
     mUploadEvent(aUploadEvent), mProgressEvent(false), mLengthComputable(0),
     mUseCachedArrayBufferResponse(false), mResponseTextResult(NS_OK),
     mStatusResult(NS_OK), mResponseResult(NS_OK),
     mScopeObj(RootingCx(), aScopeObj)
   { }
 
--- a/embedding/browser/nsEmbedStream.cpp
+++ b/embedding/browser/nsEmbedStream.cpp
@@ -26,23 +26,23 @@ nsEmbedStream::~nsEmbedStream()
 }
 
 void
 nsEmbedStream::InitOwner(nsIWebBrowser* aOwner)
 {
   mOwner = aOwner;
 }
 
-NS_METHOD
+nsresult
 nsEmbedStream::Init(void)
 {
   return NS_OK;
 }
 
-NS_METHOD
+nsresult
 nsEmbedStream::OpenStream(nsIURI* aBaseURI, const nsACString& aContentType)
 {
   nsresult rv;
   NS_ENSURE_ARG_POINTER(aBaseURI);
   NS_ENSURE_TRUE(IsASCII(aContentType), NS_ERROR_INVALID_ARG);
 
   // if we're already doing a stream, return an error
   if (mOutputStream) {
@@ -63,17 +63,17 @@ nsEmbedStream::OpenStream(nsIURI* aBaseU
   if (NS_FAILED(rv)) {
     return rv;
   }
 
   mOutputStream = outputStream;
   return rv;
 }
 
-NS_METHOD
+nsresult
 nsEmbedStream::AppendToStream(const uint8_t* aData, uint32_t aLen)
 {
   nsresult rv;
   NS_ENSURE_STATE(mOutputStream);
 
   uint32_t bytesWritten = 0;
   rv = mOutputStream->Write(reinterpret_cast<const char*>(aData),
                             aLen, &bytesWritten);
@@ -81,17 +81,17 @@ nsEmbedStream::AppendToStream(const uint
     return rv;
   }
 
   NS_ASSERTION(bytesWritten == aLen,
                "underlying buffer couldn't handle the write");
   return rv;
 }
 
-NS_METHOD
+nsresult
 nsEmbedStream::CloseStream(void)
 {
   nsresult rv = NS_OK;
 
   // NS_ENSURE_STATE returns NS_ERROR_UNEXPECTED if the condition isn't
   // satisfied; this is exactly what we want to return.
   NS_ENSURE_STATE(mOutputStream);
   mOutputStream->Close();
--- a/embedding/browser/nsEmbedStream.h
+++ b/embedding/browser/nsEmbedStream.h
@@ -13,21 +13,21 @@
 #include "nsIWebBrowser.h"
 
 class nsEmbedStream : public nsISupports
 {
 public:
   nsEmbedStream();
 
   void InitOwner(nsIWebBrowser* aOwner);
-  NS_METHOD Init(void);
+  nsresult Init(void);
 
-  NS_METHOD OpenStream(nsIURI* aBaseURI, const nsACString& aContentType);
-  NS_METHOD AppendToStream(const uint8_t* aData, uint32_t aLen);
-  NS_METHOD CloseStream(void);
+  nsresult OpenStream(nsIURI* aBaseURI, const nsACString& aContentType);
+  nsresult AppendToStream(const uint8_t* aData, uint32_t aLen);
+  nsresult CloseStream(void);
 
   NS_DECL_ISUPPORTS
 
 protected:
   virtual ~nsEmbedStream();
 
 private:
   nsIWebBrowser* mOwner;
--- a/extensions/auth/nsHttpNegotiateAuth.cpp
+++ b/extensions/auth/nsHttpNegotiateAuth.cpp
@@ -60,17 +60,37 @@ static const char kNegotiateAuthSSPI[] =
 //-----------------------------------------------------------------------------
 
 // Return false when the channel comes from a Private browsing window.
 static bool
 TestNotInPBMode(nsIHttpAuthenticableChannel *authChannel)
 {
     nsCOMPtr<nsIChannel> bareChannel = do_QueryInterface(authChannel);
     MOZ_ASSERT(bareChannel);
-    return !NS_UsePrivateBrowsing(bareChannel);
+
+    if (!NS_UsePrivateBrowsing(bareChannel)) {
+        return true;
+    }
+
+    nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
+    if (!prefs) {
+        return true;
+    }
+
+    // When the "Never remember history" option is set, all channels are
+    // set PB mode flag, but here we want to make an exception, users
+    // want their credentials go out.
+    bool dontRememberHistory;
+    if (NS_SUCCEEDED(prefs->GetBoolPref("browser.privatebrowsing.autostart",
+                                        &dontRememberHistory)) &&
+        dontRememberHistory) {
+        return true;
+    }
+
+    return false;
 }
 
 NS_IMETHODIMP
 nsHttpNegotiateAuth::GetAuthFlags(uint32_t *flags)
 {
     //
     // Negotiate Auth creds should not be reused across multiple requests.
     // Only perform the negotiation when it is explicitly requested by the
--- a/gfx/2d/FilterNodeSoftware.cpp
+++ b/gfx/2d/FilterNodeSoftware.cpp
@@ -1484,24 +1484,26 @@ FilterNodeFloodSoftware::Render(const In
   int32_t stride = targetMap.GetStride();
 
   if (format == SurfaceFormat::B8G8R8A8) {
     uint32_t color = ColorToBGRA(mColor);
     for (int32_t y = 0; y < aRect.height; y++) {
       for (int32_t x = 0; x < aRect.width; x++) {
         *((uint32_t*)targetData + x) = color;
       }
+      PodZero(&targetData[aRect.width * 4], stride - aRect.width * 4);
       targetData += stride;
     }
   } else if (format == SurfaceFormat::A8) {
     uint8_t alpha = NS_lround(mColor.a * 255.0f);
     for (int32_t y = 0; y < aRect.height; y++) {
       for (int32_t x = 0; x < aRect.width; x++) {
         targetData[x] = alpha;
       }
+      PodZero(&targetData[aRect.width], stride - aRect.width);
       targetData += stride;
     }
   } else {
     gfxDevCrash(LogReason::FilterInputFormat) << "Bad format in flood render " << (int)format;
     return nullptr;
   }
 
   return target.forget();
@@ -1708,24 +1710,30 @@ static void TransferComponents(DataSourc
     return;
   }
 
   uint8_t* sourceData = sourceMap.GetData();
   int32_t sourceStride = sourceMap.GetStride();
   uint8_t* targetData = targetMap.GetData();
   int32_t targetStride = targetMap.GetStride();
 
+  MOZ_ASSERT(sourceStride <= targetStride, "target smaller than source");
+
   for (int32_t y = 0; y < size.height; y++) {
     for (int32_t x = 0; x < size.width; x++) {
       uint32_t sourceIndex = y * sourceStride + x * BytesPerPixel;
       uint32_t targetIndex = y * targetStride + x * BytesPerPixel;
       for (uint32_t i = 0; i < BytesPerPixel; i++) {
         targetData[targetIndex + i] = aLookupTables[i][sourceData[sourceIndex + i]];
       }
     }
+
+    // Zero padding to keep valgrind happy.
+    PodZero(&targetData[y * targetStride + size.width * BytesPerPixel],
+            targetStride - size.width * BytesPerPixel);
   }
 }
 
 bool
 IsAllZero(uint8_t aLookupTable[256])
 {
   for (int32_t i = 0; i < 256; i++) {
     if (aLookupTable[i] != 0) {
@@ -2420,17 +2428,17 @@ already_AddRefed<DataSourceSurface>
 FilterNodeConvolveMatrixSoftware::DoRender(const IntRect& aRect,
                                            CoordType aKernelUnitLengthX,
                                            CoordType aKernelUnitLengthY)
 {
   if (mKernelSize.width <= 0 || mKernelSize.height <= 0 ||
       mKernelMatrix.size() != uint32_t(mKernelSize.width * mKernelSize.height) ||
       !IntRect(IntPoint(0, 0), mKernelSize).Contains(mTarget) ||
       mDivisor == 0) {
-    return Factory::CreateDataSourceSurface(aRect.Size(), SurfaceFormat::B8G8R8A8);
+    return Factory::CreateDataSourceSurface(aRect.Size(), SurfaceFormat::B8G8R8A8, true);
   }
 
   IntRect srcRect = InflatedSourceRect(aRect);
 
   // Inflate the source rect by another pixel because the bilinear filtering in
   // ColorComponentAtPoint may want to access the margins.
   srcRect.Inflate(1);
 
@@ -2634,16 +2642,19 @@ FilterNodeDisplacementMapSoftware::Rende
       uint32_t targIndex = y * targetStride + 4 * x;
       int32_t sourceX = x +
         scaleOver255 * mapData[mapIndex + xChannel] + scaleAdjustment;
       int32_t sourceY = y +
         scaleOver255 * mapData[mapIndex + yChannel] + scaleAdjustment;
       *(uint32_t*)(targetData + targIndex) =
         ColorAtPoint(sourceData, sourceStride, sourceX, sourceY);
     }
+
+    // Keep valgrind happy.
+    PodZero(&targetData[y * targetStride + 4 * aRect.width], targetStride - 4 * aRect.width);
   }
 
   return target.forget();
 }
 
 void
 FilterNodeDisplacementMapSoftware::RequestFromInputsForRect(const IntRect &aRect)
 {
@@ -3530,16 +3541,19 @@ FilterNodeLightingSoftware<LightType, Li
       IntPoint pointInFilterSpace(aRect.x + x, aRect.y + y);
       Float Z = mSurfaceScale * sourceData[sourceIndex] / 255.0f;
       Point3D pt(pointInFilterSpace.x, pointInFilterSpace.y, Z);
       Point3D rayDir = mLight.GetVectorToLight(pt);
       uint32_t color = mLight.GetColor(lightColor, rayDir);
 
       *(uint32_t*)(targetData + targetIndex) = mLighting.LightPixel(normal, rayDir, color);
     }
+
+    // Zero padding to keep valgrind happy.
+    PodZero(&targetData[y * targetStride + 4 * size.width], targetStride - 4 * size.width);
   }
 
   return target.forget();
 }
 
 DiffuseLightingSoftware::DiffuseLightingSoftware()
  : mDiffuseConstant(0)
 {
--- a/gfx/2d/Polygon.h
+++ b/gfx/2d/Polygon.h
@@ -83,9 +83,9 @@ private:
   Point3DTyped<Units> mNormal;
 };
 
 typedef BasePolygon3D<UnknownUnits> Polygon3D;
 
 } // namespace gfx
 } // namespace mozilla
 
-#endif /* MOZILLA_GFX_POLYGON_H */
\ No newline at end of file
+#endif /* MOZILLA_GFX_POLYGON_H */
--- a/gfx/2d/QuartzSupport.mm
+++ b/gfx/2d/QuartzSupport.mm
@@ -2,16 +2,17 @@
 // vim:set ts=2 sts=2 sw=2 et cin:
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "QuartzSupport.h"
 #include "nsDebug.h"
 #include "MacIOSurface.h"
+#include "mozilla/Sprintf.h"
 
 #import <QuartzCore/QuartzCore.h>
 #import <AppKit/NSOpenGL.h>
 #include <dlfcn.h>
 #include "GLDefs.h"
 
 #define IOSURFACE_FRAMEWORK_PATH \
   "/System/Library/Frameworks/IOSurface.framework/IOSurface"
@@ -590,18 +591,17 @@ void nsCARenderer::SaveToDisk(MacIOSurfa
   ::CGDataProviderRelease(dataProvider);
   ::CGColorSpaceRelease(colorSpace);
   if (!cgImage) {
     surf->Unlock();
     return;
   }
 
   char cstr[1000];
-
-  sprintf(cstr, "file:///Users/benoitgirard/debug/iosurface_%i.png", ++sSaveToDiskSequence);
+  SprintfLiteral(cstr, "file:///Users/benoitgirard/debug/iosurface_%i.png", ++sSaveToDiskSequence);
 
   CFStringRef cfStr = ::CFStringCreateWithCString(kCFAllocatorDefault, cstr, kCFStringEncodingMacRoman);
 
   printf("Exporting: %s\n", cstr);
   CFURLRef url = ::CFURLCreateWithString( nullptr, cfStr, nullptr);
   ::CFRelease(cfStr);
 
   CFStringRef type = kUTTypePNG;
--- a/gfx/2d/ScaledFontWin.cpp
+++ b/gfx/2d/ScaledFontWin.cpp
@@ -2,16 +2,17 @@
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "ScaledFontWin.h"
 
 #include "AutoHelpersWin.h"
 #include "Logging.h"
+#include "nsString.h"
 #include "SFNTData.h"
 
 #ifdef USE_SKIA
 #include "skia/include/ports/SkTypeface_win.h"
 #endif
 
 #ifdef USE_CAIRO_SCALED_FONT
 #include "cairo-win32.h"
@@ -63,17 +64,18 @@ ScaledFontWin::GetFontFileData(FontFileD
     }
 
     // We cast here because for VS2015 char16_t != wchar_t, even though they are
     // both 16 bit.
     if (!sfntData->GetIndexForU16Name(
           reinterpret_cast<char16_t*>(mLogFont.lfFaceName), &index, LF_FACESIZE - 1)) {
       gfxWarning() << "Failed to get index for face name.";
       gfxDevCrash(LogReason::GetFontFileDataFailed) <<
-        "Failed to get index for face name |" << mLogFont.lfFaceName << "|.";
+        "Failed to get index for face name |" <<
+        NS_ConvertUTF16toUTF8(mLogFont.lfFaceName).get() << "|.";
       return false;
     }
   }
 
   aDataCallback(fontData.get(), tableSize, index, mSize, aBaton);
   return true;
 }
 
--- a/gfx/config/gfxFeature.cpp
+++ b/gfx/config/gfxFeature.cpp
@@ -1,16 +1,18 @@
 /* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 /* vim: set sts=2 ts=8 sw=2 tw=99 et: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "gfxFeature.h"
+
 #include "mozilla/Preferences.h"
-#include "prprf.h"
-#include "gfxFeature.h"
+#include "mozilla/Sprintf.h"
 #include "nsString.h"
 
 namespace mozilla {
 namespace gfx {
 
 bool
 FeatureState::IsEnabled() const
 {
@@ -259,14 +261,14 @@ FeatureState::GetFailureId() const
   return mFailureId;
 }
 
 void
 FeatureState::Instance::Set(FeatureStatus aStatus, const char* aMessage /* = nullptr */)
 {
   mStatus = aStatus;
   if (aMessage) {
-    PR_snprintf(mMessage, sizeof(mMessage), "%s", aMessage);
+    SprintfLiteral(mMessage, "%s", aMessage);
   }
 }
 
 } // namespace gfx
 } // namespace mozilla
--- a/gfx/layers/BSPTree.h
+++ b/gfx/layers/BSPTree.h
@@ -84,9 +84,9 @@ private:
                     const nsTArray<float>& dots,
                     nsTArray<gfx::Point3D>& backPoints,
                     nsTArray<gfx::Point3D>& frontPoints);
 };
 
 } // namespace layers
 } // namespace mozilla
 
-#endif /* MOZILLA_LAYERS_BSPTREE_H */
\ No newline at end of file
+#endif /* MOZILLA_LAYERS_BSPTREE_H */
--- a/gfx/layers/LayerSorter.cpp
+++ b/gfx/layers/LayerSorter.cpp
@@ -12,16 +12,17 @@
 #include "Layers.h"                     // for Layer
 #include "gfxEnv.h"                     // for gfxEnv
 #include "gfxLineSegment.h"             // for gfxLineSegment
 #include "gfxPoint.h"                   // for gfxPoint
 #include "gfxQuad.h"                    // for gfxQuad
 #include "gfxRect.h"                    // for gfxRect
 #include "gfxTypes.h"                   // for gfxFloat
 #include "mozilla/gfx/BasePoint3D.h"    // for BasePoint3D
+#include "mozilla/Sprintf.h"            // for SprintfLiteral
 #include "nsRegion.h"                   // for nsIntRegion
 #include "nsTArray.h"                   // for nsTArray, etc
 #include "limits.h"
 #include "mozilla/Assertions.h"
 
 namespace mozilla {
 namespace layers {
 
@@ -178,19 +179,19 @@ static const int RESET = 0;
 // static const int REVERSE = 7;
 // static const int HIDDEN = 8;
 
 static void SetTextColor(uint32_t aColor)
 {
   char command[13];
 
   /* Command is the control command to the terminal */
-  sprintf(command, "%c[%d;%d;%dm", 0x1B, RESET,
-          aColor + XTERM_FOREGROUND_COLOR_OFFSET,
-          BLACK + XTERM_BACKGROUND_COLOR_OFFSET);
+  SprintfLiteral(command, "%c[%d;%d;%dm", 0x1B, RESET,
+                 aColor + XTERM_FOREGROUND_COLOR_OFFSET,
+                 BLACK + XTERM_BACKGROUND_COLOR_OFFSET);
   printf("%s", command);
 }
 
 static void print_layer_internal(FILE* aFile, Layer* aLayer, uint32_t aColor)
 {
   SetTextColor(aColor);
   fprintf(aFile, "%p", aLayer);
   SetTextColor(GREEN);
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -1763,17 +1763,17 @@ APZCTreeManager::FindRootContentApzcForL
 
 AsyncPanZoomController*
 APZCTreeManager::FindRootContentOrRootApzc() const
 {
   mTreeLock.AssertCurrentThreadOwns();
 
   // Note: this is intended to find the same "root" that would be found
   // by AsyncCompositionManager::ApplyAsyncContentTransformToTree inside
-  // the MOZ_ANDROID_APZ block. That is, it should find the RCD node if there
+  // the MOZ_WIDGET_ANDROID block. That is, it should find the RCD node if there
   // is one, or the root APZC if there is not.
   // Since BreadthFirstSearch is a pre-order search, we first do a search for
   // the RCD, and then if we don't find one, we do a search for the root APZC.
   HitTestingTreeNode* resultNode = BreadthFirstSearch<ReverseIterator>(mRootNode.get(),
       [](HitTestingTreeNode* aNode) {
         AsyncPanZoomController* apzc = aNode->GetApzc();
         return apzc && apzc->IsRootContent();
       });
--- a/gfx/layers/apz/src/AsyncPanZoomController.cpp
+++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp
@@ -69,19 +69,19 @@
 #include "nsStyleStruct.h"              // for nsTimingFunction
 #include "nsTArray.h"                   // for nsTArray, nsTArray_Impl, etc
 #include "nsThreadUtils.h"              // for NS_IsMainThread
 #include "nsViewportInfo.h"             // for kViewportMinScale, kViewportMaxScale
 #include "prsystem.h"                   // for PR_GetPhysicalMemorySize
 #include "SharedMemoryBasic.h"          // for SharedMemoryBasic
 #include "ScrollSnap.h"                 // for ScrollSnapUtils
 #include "WheelScrollAnimation.h"
-#if defined(MOZ_ANDROID_APZ)
+#if defined(MOZ_WIDGET_ANDROID)
 #include "AndroidAPZ.h"
-#endif // defined(MOZ_ANDROID_APZ)
+#endif // defined(MOZ_WIDGET_ANDROID)
 
 #define ENABLE_APZC_LOGGING 0
 // #define ENABLE_APZC_LOGGING 1
 
 #if ENABLE_APZC_LOGGING
 #  define APZC_LOG(...) printf_stderr("APZC: " __VA_ARGS__)
 #  define APZC_LOG_FM(fm, prefix, ...) \
     { std::stringstream ss; \
@@ -100,17 +100,17 @@ namespace layers {
 typedef mozilla::layers::AllowedTouchBehavior AllowedTouchBehavior;
 typedef GeckoContentController::APZStateChange APZStateChange;
 typedef GeckoContentController::TapType TapType;
 typedef mozilla::gfx::Point Point;
 typedef mozilla::gfx::Matrix4x4 Matrix4x4;
 using mozilla::gfx::PointTyped;
 
 // Choose between platform-specific implementations.
-#ifdef MOZ_ANDROID_APZ
+#ifdef MOZ_WIDGET_ANDROID
 typedef WidgetOverscrollEffect OverscrollEffect;
 typedef AndroidSpecificState PlatformSpecificState;
 typedef AndroidFlingAnimation FlingAnimation;
 #else
 typedef GenericOverscrollEffect OverscrollEffect;
 typedef PlatformSpecificStateBase PlatformSpecificState;  // no extra state, just use the base class
 typedef GenericFlingAnimation FlingAnimation;
 #endif
--- a/gfx/layers/apz/util/APZCCallbackHelper.cpp
+++ b/gfx/layers/apz/util/APZCCallbackHelper.cpp
@@ -562,17 +562,17 @@ GetRootDocumentElementFor(nsIWidget* aWi
     }
   }
   return nullptr;
 }
 
 static nsIFrame*
 UpdateRootFrameForTouchTargetDocument(nsIFrame* aRootFrame)
 {
-#if defined(MOZ_ANDROID_APZ)
+#if defined(MOZ_WIDGET_ANDROID)
   // Re-target so that the hit test is performed relative to the frame for the
   // Root Content Document instead of the Root Document which are different in
   // Android. See bug 1229752 comment 16 for an explanation of why this is necessary.
   if (nsIDocument* doc = aRootFrame->PresContext()->PresShell()->GetTouchEventTargetDocument()) {
     if (nsIPresShell* shell = doc->GetShell()) {
       if (nsIFrame* frame = shell->GetRootFrame()) {
         return frame;
       }
--- a/gfx/layers/apz/util/APZEventState.cpp
+++ b/gfx/layers/apz/util/APZEventState.cpp
@@ -449,17 +449,17 @@ APZEventState::ProcessAPZStateChange(con
   }
 }
 
 void
 APZEventState::ProcessClusterHit()
 {
   // If we hit a cluster of links then we shouldn't activate any of them,
   // as we will be showing the zoomed view. (This is only called on Fennec).
-#ifndef MOZ_ANDROID_APZ
+#ifndef MOZ_WIDGET_ANDROID
   MOZ_ASSERT(false);
 #endif
   mActiveElementManager->ClearActivation();
 }
 
 bool
 APZEventState::SendPendingTouchPreventedResponse(bool aPreventDefault)
 {
--- a/gfx/layers/apz/util/APZThreadUtils.cpp
+++ b/gfx/layers/apz/util/APZThreadUtils.cpp
@@ -1,17 +1,17 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "mozilla/layers/APZThreadUtils.h"
 
 #include "mozilla/layers/Compositor.h"
-#ifdef MOZ_ANDROID_APZ
+#ifdef MOZ_WIDGET_ANDROID
 #include "AndroidBridge.h"
 #endif
 
 namespace mozilla {
 namespace layers {
 
 static bool sThreadAssertionsEnabled = true;
 static MessageLoop* sControllerThread;
@@ -52,17 +52,17 @@ APZThreadUtils::AssertOnCompositorThread
   }
 }
 
 /*static*/ void
 APZThreadUtils::RunOnControllerThread(already_AddRefed<Runnable> aTask)
 {
   RefPtr<Runnable> task = aTask;
 
-#ifdef MOZ_ANDROID_APZ
+#ifdef MOZ_WIDGET_ANDROID
   // This is needed while nsWindow::ConfigureAPZControllerThread is not propper
   // implemented.
   if (AndroidBridge::IsJavaUiThread()) {
     task->Run();
   } else {
     AndroidBridge::Bridge()->PostTaskToUiThread(task.forget(), 0);
   }
 #else
@@ -78,17 +78,17 @@ APZThreadUtils::RunOnControllerThread(al
     sControllerThread->PostTask(task.forget());
   }
 #endif
 }
 
 /*static*/ bool
 APZThreadUtils::IsControllerThread()
 {
-#ifdef MOZ_ANDROID_APZ
+#ifdef MOZ_WIDGET_ANDROID
   return AndroidBridge::IsJavaUiThread();
 #else
   return sControllerThread == MessageLoop::current();
 #endif
 }
 
 NS_IMPL_ISUPPORTS(GenericTimerCallbackBase, nsITimerCallback)
 
--- a/gfx/layers/client/ClientLayerManager.cpp
+++ b/gfx/layers/client/ClientLayerManager.cpp
@@ -88,16 +88,17 @@ ClientLayerManager::MemoryPressureObserv
 }
 
 NS_IMPL_ISUPPORTS(ClientLayerManager::MemoryPressureObserver, nsIObserver)
 
 ClientLayerManager::ClientLayerManager(nsIWidget* aWidget)
   : mPhase(PHASE_NONE)
   , mWidget(aWidget)
   , mLatestTransactionId(0)
+  , mLastPaintTime(TimeDuration::Forever())
   , mTargetRotation(ROTATION_0)
   , mRepeatTransaction(false)
   , mIsRepeatTransaction(false)
   , mTransactionIncomplete(false)
   , mCompositorMightResample(false)
   , mNeedsComposite(false)
   , mPaintSequenceNumber(0)
   , mForwarder(new ShadowLayerForwarder(this))
@@ -278,27 +279,34 @@ ClientLayerManager::EndTransactionIntern
   profiler_tracing("Paint", "Rasterize", TRACING_INTERVAL_START);
 
   NS_ASSERTION(InConstruction(), "Should be in construction phase");
   mPhase = PHASE_DRAWING;
 
   ClientLayer* root = ClientLayer::ToClientLayer(GetRoot());
 
   mTransactionIncomplete = false;
-      
+
   // Apply pending tree updates before recomputing effective
   // properties.
   GetRoot()->ApplyPendingUpdatesToSubtree();
-    
+
   mPaintedLayerCallback = aCallback;
   mPaintedLayerCallbackData = aCallbackData;
 
   GetRoot()->ComputeEffectiveTransforms(Matrix4x4());
 
-  root->RenderLayer();
+  if (gfxPrefs::AlwaysPaint() && XRE_IsContentProcess()) {
+    TimeStamp start = TimeStamp::Now();
+    root->RenderLayer();
+    mLastPaintTime = TimeStamp::Now() - start;
+  } else {
+    root->RenderLayer();
+  }
+
   if (!mRepeatTransaction && !GetRoot()->GetInvalidRegion().IsEmpty()) {
     GetRoot()->Mutated();
   }
 
   if (!mIsRepeatTransaction) {
     mAnimationReadyTime = TimeStamp::Now();
     GetRoot()->StartPendingAnimations(mAnimationReadyTime);
   }
@@ -618,16 +626,20 @@ ClientLayerManager::ForwardTransaction(b
   mLatestTransactionId = mTransactionIdAllocator->GetTransactionId();
   TimeStamp transactionStart;
   if (!mTransactionIdAllocator->GetTransactionStart().IsNull()) {
     transactionStart = mTransactionIdAllocator->GetTransactionStart();
   } else {
     transactionStart = mTransactionStart;
   }
 
+  if (gfxPrefs::AlwaysPaint() && XRE_IsContentProcess()) {
+    mForwarder->SendPaintTime(mLatestTransactionId, mLastPaintTime);
+  }
+
   // forward this transaction's changeset to our LayerManagerComposite
   bool sent;
   AutoTArray<EditReply, 10> replies;
   if (mForwarder->EndTransaction(&replies, mRegionToClear,
         mLatestTransactionId, aScheduleComposite, mPaintSequenceNumber,
         mIsRepeatTransaction, transactionStart, &sent)) {
     for (nsTArray<EditReply>::size_type i = 0; i < replies.Length(); ++i) {
       const EditReply& reply = replies[i];
--- a/gfx/layers/client/ClientLayerManager.h
+++ b/gfx/layers/client/ClientLayerManager.h
@@ -298,17 +298,17 @@ private:
                               void* aCallbackData,
                               EndTransactionFlags);
 
   bool DependsOnStaleDevice() const;
 
   LayerRefArray mKeepAlive;
 
   nsIWidget* mWidget;
-  
+
   /* PaintedLayer callbacks; valid at the end of a transaciton,
    * while rendering */
   DrawPaintedLayerCallback mPaintedLayerCallback;
   void *mPaintedLayerCallbackData;
 
   // When we're doing a transaction in order to draw to a non-default
   // target, the layers transaction is only performed in order to send
   // a PLayers:Update.  We save the original non-default target to
@@ -316,16 +316,17 @@ private:
   // mDummyTarget as the render target.  After the transaction ends,
   // we send a message to our remote side to capture the actual pixels
   // being drawn to the default target, and then copy those pixels
   // back to mShadowTarget.
   RefPtr<gfxContext> mShadowTarget;
 
   RefPtr<TransactionIdAllocator> mTransactionIdAllocator;
   uint64_t mLatestTransactionId;
+  TimeDuration mLastPaintTime;
 
   // Sometimes we draw to targets that don't natively support
   // landscape/portrait orientation.  When we need to implement that
   // ourselves, |mTargetRotation| describes the induced transform we
   // need to apply when compositing content to our target.
   ScreenRotation mTargetRotation;
 
   // Used to repeat the transaction right away (to avoid rebuilding
--- a/gfx/layers/client/TiledContentClient.cpp
+++ b/gfx/layers/client/TiledContentClient.cpp
@@ -1182,40 +1182,24 @@ ClientMultiTiledLayerBuffer::ComputeProg
 
   LayerMetricsWrapper scrollAncestor;
   mPaintedLayer->GetAncestorLayers(&scrollAncestor, nullptr, nullptr);
 
   // Find out the current view transform to determine which tiles to draw
   // first, and see if we should just abort this paint. Aborting is usually
   // caused by there being an incoming, more relevant paint.
   AsyncTransform viewTransform;
-#if defined(MOZ_WIDGET_ANDROID) && !defined(MOZ_ANDROID_APZ)
-  FrameMetrics contentMetrics = scrollAncestor.Metrics();
-  bool abortPaint = false;
-  // On Android, only the primary scrollable layer is async-scrolled, and the only one
-  // that the Java-side code can provide details about. If we're tiling some other layer
-  // then we already have all the information we need about it.
-  if (contentMetrics.GetScrollId() == mManager->GetRootScrollableLayerId()) {
-    FrameMetrics compositorMetrics = contentMetrics;
-    // The ProgressiveUpdateCallback updates the compositorMetrics
-    abortPaint = mManager->ProgressiveUpdateCallback(!staleRegion.Contains(aInvalidRegion),
-                                                     compositorMetrics,
-                                                     !drawingLowPrecision);
-    viewTransform = ComputeViewTransform(contentMetrics, compositorMetrics);
-  }
-#else
   MOZ_ASSERT(mSharedFrameMetricsHelper);
 
   bool abortPaint =
     mSharedFrameMetricsHelper->UpdateFromCompositorFrameMetrics(
       scrollAncestor,
       !staleRegion.Contains(aInvalidRegion),
       drawingLowPrecision,
       viewTransform);
-#endif
 
   TILING_LOG("TILING %p: Progressive update view transform %s zoom %f abort %d\n",
       mPaintedLayer, ToString(viewTransform.mTranslation).c_str(), viewTransform.mScale.scale, abortPaint);
 
   if (abortPaint) {
     // We ignore if front-end wants to abort if this is the first,
     // non-low-precision paint, as in that situation, we're about to override
     // front-end's page/viewport metrics.
--- a/gfx/layers/composite/AsyncCompositionManager.cpp
+++ b/gfx/layers/composite/AsyncCompositionManager.cpp
@@ -788,17 +788,17 @@ ExpandRootClipRect(Layer* aLayer, const 
 #endif
     ParentLayerRect rect(rootClipRect.value());
     rect.Deflate(ViewAs<ParentLayerPixel>(aFixedLayerMargins,
       PixelCastJustification::ScreenIsParentLayerForRoot));
     aLayer->AsLayerComposite()->SetShadowClipRect(Some(RoundedOut(rect)));
   }
 }
 
-#ifdef MOZ_ANDROID_APZ
+#ifdef MOZ_WIDGET_ANDROID
 static void
 MoveScrollbarForLayerMargin(Layer* aRoot, FrameMetrics::ViewID aRootScrollId,
                             const ScreenMargin& aFixedLayerMargins)
 {
   // See bug 1223928 comment 9 - once we can detect the RCD with just the
   // isRootContent flag on the metrics, we can probably move this code into
   // ApplyAsyncTransformToScrollbar rather than having it as a separate
   // adjustment on the layer tree.
@@ -925,17 +925,17 @@ AsyncCompositionManager::ApplyAsyncConte
 
           if (!layer->IsScrollInfoLayer()) {
             controller->MarkAsyncTransformAppliedToContent();
           }
 
           const ScrollMetadata& scrollMetadata = layer->GetScrollMetadata(i);
           const FrameMetrics& metrics = scrollMetadata.GetMetrics();
 
-#if defined(MOZ_ANDROID_APZ)
+#if defined(MOZ_WIDGET_ANDROID)
           // If we find a metrics which is the root content doc, use that. If not, use
           // the root layer. Since this function recurses on children first we should
           // only end up using the root layer if the entire tree was devoid of a
           // root content metrics. This is a temporary solution; in the long term we
           // should not need the root content metrics at all. See bug 1201529 comment
           // 6 for details.
           if (!(*aOutFoundRoot)) {
             *aOutFoundRoot = metrics.IsRootContent() ||       /* RCD */
@@ -1501,17 +1501,17 @@ AsyncCompositionManager::TransformShadow
     // async using Gecko). If this fails, fall back to transforming the
     // primary scrollable layer.  "Failing" here means that we don't
     // find a frame that is async scrollable.  Note that the fallback
     // code also includes Fennec which is rendered async.  Fennec uses
     // its own platform-specific async rendering that is done partially
     // in Gecko and partially in Java.
     bool foundRoot = false;
     if (ApplyAsyncContentTransformToTree(root, &foundRoot)) {
-#if defined(MOZ_ANDROID_APZ)
+#if defined(MOZ_WIDGET_ANDROID)
       MOZ_ASSERT(foundRoot);
       if (foundRoot && mFixedLayerMargins != ScreenMargin()) {
         MoveScrollbarForLayerMargin(root, mRootScrollableId, mFixedLayerMargins);
       }
 #endif
     } else {
       AutoTArray<Layer*,1> scrollableLayers;
 #ifdef MOZ_WIDGET_ANDROID
--- a/gfx/layers/composite/AsyncCompositionManager.h
+++ b/gfx/layers/composite/AsyncCompositionManager.h
@@ -241,17 +241,17 @@ private:
 
   bool mReadyForCompose;
 
   gfx::Matrix mWorldTransform;
   LayerTransformRecorder mLayerTransformRecorder;
 
   TimeStamp mPreviousFrameTimeStamp;
 
-#ifdef MOZ_ANDROID_APZ
+#ifdef MOZ_WIDGET_ANDROID
   // The following two fields are only needed on Fennec with C++ APZ, because
   // then we need to reposition the gecko scrollbar to deal with the
   // dynamic toolbar shifting content around.
   FrameMetrics::ViewID mRootScrollableId;
   ScreenMargin mFixedLayerMargins;
 #endif
 };
 
--- a/gfx/layers/composite/FPSCounter.cpp
+++ b/gfx/layers/composite/FPSCounter.cpp
@@ -389,18 +389,17 @@ static void DrawDigits(unsigned int aVal
     unsigned int digit = aValue % (divisor * 10) / divisor;
     divisor /= 10;
 
     RefPtr<TexturedEffect> texturedEffect = static_cast<TexturedEffect*>(aEffectChain.mPrimaryEffect.get());
     texturedEffect->mTextureCoords = Rect(float(digit * FontWidth) / textureWidth, 0, FontWidth / textureWidth, 1.0f);
 
     Rect drawRect = Rect(aOffsetX + n * FontWidth, aOffsetY, FontWidth, FontHeight);
     IntRect clipRect = IntRect(0, 0, 300, 100);
-    aCompositor->DrawQuad(drawRect, clipRect,
-  aEffectChain, opacity, transform);
+    aCompositor->DrawQuad(drawRect, clipRect, aEffectChain, opacity, transform);
   }
 }
 
 void FPSState::DrawFPS(TimeStamp aNow,
                        int aOffsetX, int aOffsetY,
                        unsigned int aFillRatio,
                        Compositor* aCompositor)
 {
--- a/gfx/layers/composite/LayerManagerComposite.cpp
+++ b/gfx/layers/composite/LayerManagerComposite.cpp
@@ -7,16 +7,17 @@
 #include <stddef.h>                     // for size_t
 #include <stdint.h>                     // for uint16_t, uint32_t
 #include "CanvasLayerComposite.h"       // for CanvasLayerComposite
 #include "ColorLayerComposite.h"        // for ColorLayerComposite
 #include "Composer2D.h"                 // for Composer2D
 #include "CompositableHost.h"           // for CompositableHost
 #include "ContainerLayerComposite.h"    // for ContainerLayerComposite, etc
 #include "FPSCounter.h"                 // for FPSState, FPSCounter
+#include "PaintCounter.h"               // For PaintCounter
 #include "FrameMetrics.h"               // for FrameMetrics
 #include "GeckoProfiler.h"              // for profiler_set_frame_number, etc
 #include "ImageLayerComposite.h"        // for ImageLayerComposite
 #include "Layers.h"                     // for Layer, ContainerLayer, etc
 #include "LayerScope.h"                 // for LayerScope Tool
 #include "protobuf/LayerScopePacket.pb.h" // for protobuf (LayerScope)
 #include "PaintedLayerComposite.h"      // for PaintedLayerComposite
 #include "TiledContentHost.h"
@@ -122,16 +123,18 @@ LayerManagerComposite::LayerManagerCompo
 , mDisabledApzWarning(false)
 , mCompositor(aCompositor)
 , mInTransaction(false)
 , mIsCompositorReady(false)
 , mDebugOverlayWantsNextFrame(false)
 , mGeometryChanged(true)
 , mLastFrameMissedHWC(false)
 , mWindowOverlayChanged(false)
+, mLastPaintTime(TimeDuration::Forever())
+, mRenderStartTime(TimeStamp::Now())
 {
   mTextRenderer = new TextRenderer(aCompositor);
   MOZ_ASSERT(aCompositor);
 }
 
 LayerManagerComposite::~LayerManagerComposite()
 {
   Destroy();
@@ -143,16 +146,17 @@ LayerManagerComposite::Destroy()
 {
   if (!mDestroyed) {
     mCompositor->GetWidget()->CleanupWindowEffects();
     if (mRoot) {
       RootLayer()->Destroy();
     }
     mRoot = nullptr;
     mClonedLayerTreeProperties = nullptr;
+    mPaintCounter = nullptr;
     mDestroyed = true;
   }
 }
 
 void
 LayerManagerComposite::UpdateRenderBounds(const IntRect& aRect)
 {
   mRenderBounds = aRect;
@@ -368,16 +372,17 @@ LayerManagerComposite::PostProcessLayers
 void
 LayerManagerComposite::EndTransaction(const TimeStamp& aTimeStamp,
                                       EndTransactionFlags aFlags)
 {
   NS_ASSERTION(mInTransaction, "Didn't call BeginTransaction?");
   NS_ASSERTION(!(aFlags & END_NO_COMPOSITE),
                "Shouldn't get END_NO_COMPOSITE here");
   mInTransaction = false;
+  mRenderStartTime = TimeStamp::Now();
 
   if (!mIsCompositorReady) {
     return;
   }
   mIsCompositorReady = false;
 
 #ifdef MOZ_LAYERS_HAVE_LOG
   MOZ_LAYERS_LOG(("  ----- (beginning paint)"));
@@ -554,32 +559,48 @@ LayerManagerComposite::RootLayer() const
 #endif
 
 void
 LayerManagerComposite::InvalidateDebugOverlay(nsIntRegion& aInvalidRegion, const IntRect& aBounds)
 {
   bool drawFps = gfxPrefs::LayersDrawFPS();
   bool drawFrameCounter = gfxPrefs::DrawFrameCounter();
   bool drawFrameColorBars = gfxPrefs::CompositorDrawColorBars();
+  bool drawPaintTimes = gfxPrefs::AlwaysPaint();
 
   if (drawFps || drawFrameCounter) {
     aInvalidRegion.Or(aInvalidRegion, nsIntRect(0, 0, 256, 256));
   }
   if (drawFrameColorBars) {
     aInvalidRegion.Or(aInvalidRegion, nsIntRect(0, 0, 10, aBounds.height));
   }
+  if (drawPaintTimes) {
+    aInvalidRegion.Or(aInvalidRegion, nsIntRect(PaintCounter::GetPaintRect()));
+  }
+}
+
+void
+LayerManagerComposite::DrawPaintTimes(Compositor* aCompositor)
+{
+  if (!mPaintCounter) {
+    mPaintCounter = new PaintCounter();
+  }
+
+  TimeDuration compositeTime = TimeStamp::Now() - mRenderStartTime;
+  mPaintCounter->Draw(aCompositor, mLastPaintTime, compositeTime);
 }
 
 static uint16_t sFrameCount = 0;
 void
 LayerManagerComposite::RenderDebugOverlay(const IntRect& aBounds)
 {
   bool drawFps = gfxPrefs::LayersDrawFPS();
   bool drawFrameCounter = gfxPrefs::DrawFrameCounter();
   bool drawFrameColorBars = gfxPrefs::CompositorDrawColorBars();
+  bool drawPaintTimes = gfxPrefs::AlwaysPaint();
 
   TimeStamp now = TimeStamp::Now();
 
   if (drawFps) {
     if (!mFPS) {
       mFPS = MakeUnique<FPSState>();
     }
 
@@ -709,16 +730,20 @@ LayerManagerComposite::RenderDebugOverla
 
   }
 #endif
 
   if (drawFrameColorBars || drawFrameCounter) {
     // We intentionally overflow at 2^16.
     sFrameCount++;
   }
+
+  if (drawPaintTimes) {
+    DrawPaintTimes(mCompositor);
+  }
 }
 
 RefPtr<CompositingRenderTarget>
 LayerManagerComposite::PushGroupForLayerEffects()
 {
   // This is currently true, so just making sure that any new use of this
   // method is flagged for investigation
   MOZ_ASSERT(gfxPrefs::LayersEffectInvert() ||
--- a/gfx/layers/composite/LayerManagerComposite.h
+++ b/gfx/layers/composite/LayerManagerComposite.h
@@ -57,16 +57,17 @@ struct EffectChain;
 class ImageLayer;
 class ImageLayerComposite;
 class LayerComposite;
 class RefLayerComposite;
 class PaintedLayerComposite;
 class TextRenderer;
 class CompositingRenderTarget;
 struct FPSState;
+class PaintCounter;
 
 static const int kVisualWarningDuration = 150; // ms
 
 class LayerManagerComposite final : public LayerManager
 {
   typedef mozilla::gfx::DrawTarget DrawTarget;
   typedef mozilla::gfx::IntSize IntSize;
   typedef mozilla::gfx::SurfaceFormat SurfaceFormat;
@@ -326,16 +327,18 @@ public:
 
   // Indicate that we need to composite even if nothing in our layers has
   // changed, so that the widget can draw something different in its window
   // overlay.
   void SetWindowOverlayChanged() { mWindowOverlayChanged = true; }
 
   void ForcePresent() { mCompositor->ForcePresent(); }
 
+  void SetPaintTime(const TimeDuration& aPaintTime) { mLastPaintTime = aPaintTime; }
+
 private:
   /** Region we're clipping our current drawing to. */
   nsIntRegion mClippingRegion;
   gfx::IntRect mRenderBounds;
 
   /** Current root layer. */
   LayerComposite* RootLayer() const;
 
@@ -348,16 +351,21 @@ private:
    * Render the current layer tree to the active target.
    */
   void Render(const nsIntRegion& aInvalidRegion, const nsIntRegion& aOpaqueRegion);
 #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GONK)
   void RenderToPresentationSurface();
 #endif
 
   /**
+   * Render paint and composite times above the frame.
+   */
+  void DrawPaintTimes(Compositor* aCompositor);
+
+  /**
    * We need to know our invalid region before we're ready to render.
    */
   void InvalidateDebugOverlay(nsIntRegion& aInvalidRegion, const gfx::IntRect& aBounds);
 
   /**
    * Render debug overlays such as the FPS/FrameCounter above the frame.
    */
   void RenderDebugOverlay(const gfx::IntRect& aBounds);
@@ -404,16 +412,19 @@ private:
   RefPtr<TextRenderer> mTextRenderer;
   bool mGeometryChanged;
 
   // Testing property. If hardware composer is supported, this will return
   // true if the last frame was deemed 'too complicated' to be rendered.
   bool mLastFrameMissedHWC;
 
   bool mWindowOverlayChanged;
+  RefPtr<PaintCounter> mPaintCounter;
+  TimeDuration mLastPaintTime;
+  TimeStamp mRenderStartTime;
 };
 
 /**
  * Composite layers are for use with OMTC on the compositor thread only. There
  * must be corresponding Basic layers on the content thread. For composite
  * layers, the layer manager only maintains the layer tree, all rendering is
  * done by a Compositor (see Compositor.h). As such, composite layers are
  * platform-independent and can be used on any platform for which there is a
new file mode 100644
--- /dev/null
+++ b/gfx/layers/composite/PaintCounter.cpp
@@ -0,0 +1,84 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/gfx/Point.h"          // for IntSize, Point
+#include "mozilla/gfx/Rect.h"           // for Rect
+#include "mozilla/gfx/Types.h"          // for Color, SurfaceFormat
+#include "mozilla/layers/Compositor.h"  // for Compositor
+#include "mozilla/layers/CompositorTypes.h"
+#include "mozilla/layers/Effects.h"     // for Effect, EffectChain, etc
+#include "mozilla/TimeStamp.h"          // for TimeStamp, TimeDuration
+#include "mozilla/Sprintf.h"
+
+#include "SkColor.h"
+#include "mozilla/gfx/HelpersSkia.h"
+#include "skia/include/core/SkBitmapDevice.h"
+#include "PaintCounter.h"
+
+namespace mozilla {
+namespace layers {
+
+using namespace mozilla::gfx;
+
+// Positioned below the chrome UI
+IntRect PaintCounter::mRect = IntRect(0, 175, 300, 60);
+
+PaintCounter::PaintCounter()
+{
+  mFormat = SurfaceFormat::B8G8R8A8;
+  mSurface = Factory::CreateDataSourceSurface(mRect.Size(), mFormat);
+  mStride = mSurface->Stride();
+
+  SkBitmap bitmap;
+  bitmap.setInfo(MakeSkiaImageInfo(mRect.Size(), mFormat), mStride);
+  bitmap.setPixels(mSurface->GetData());
+  bitmap.eraseColor(SK_ColorWHITE);
+
+  mCanvas.adopt(new SkCanvas(bitmap));
+}
+
+PaintCounter::~PaintCounter()
+{
+  mSurface = nullptr;
+  mTextureSource = nullptr;
+  mTexturedEffect = nullptr;
+}
+
+void
+PaintCounter::Draw(Compositor* aCompositor, TimeDuration aPaintTime, TimeDuration aCompositeTime) {
+  const int buffer_size = 48;
+  char buffer[buffer_size];
+  snprintf(buffer, buffer_size, "P: %.2f  C: %.2f",
+           aPaintTime.ToMilliseconds(),
+           aCompositeTime.ToMilliseconds());
+
+  SkPaint paint;
+  paint.setTextSize(32);
+  paint.setColor(SkColorSetRGB(0, 255, 0));
+  paint.setAntiAlias(true);
+
+  mCanvas->clear(SK_ColorTRANSPARENT);
+  mCanvas->drawText(buffer, strlen(buffer), 10, 30, paint);
+  mCanvas->flush();
+
+  if (!mTextureSource) {
+    mTextureSource = aCompositor->CreateDataTextureSource();
+    mTexturedEffect = CreateTexturedEffect(mFormat, mTextureSource,
+                                           SamplingFilter::POINT, true);
+    mTexturedEffect->mTextureCoords = Rect(0, 0, 1.0f, 1.0f);
+  }
+
+  mTextureSource->Update(mSurface);
+
+  EffectChain effectChain;
+  effectChain.mPrimaryEffect = mTexturedEffect;
+
+  gfx::Matrix4x4 identity;
+  Rect rect(mRect.x, mRect.y, mRect.width, mRect.height);
+  aCompositor->DrawQuad(rect, mRect, effectChain, 1.0, identity);
+}
+
+} // end namespace layers
+} // end namespace mozilla
new file mode 100644
--- /dev/null
+++ b/gfx/layers/composite/PaintCounter.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_layers_PaintCounter_h_
+#define mozilla_layers_PaintCounter_h_
+
+#include <map>                          // for std::map
+#include "mozilla/RefPtr.h"             // for already_AddRefed, RefCounted
+#include "mozilla/TimeStamp.h"          // for TimeStamp, TimeDuration
+#include "skia/include/core/SkCanvas.h"
+#include "mozilla/gfx/HelpersSkia.h"
+
+namespace mozilla {
+namespace layers {
+
+class Compositor;
+
+using namespace mozilla::gfx;
+using namespace mozilla::gl;
+
+// Keeps track and paints how long a full invalidation paint takes to rasterize
+// and composite.
+class PaintCounter {
+public:
+  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(PaintCounter)
+
+  PaintCounter();
+  void Draw(Compositor* aCompositor, TimeDuration aPaintTime, TimeDuration aCompositeTime);
+  static IntRect GetPaintRect() { return PaintCounter::mRect; }
+
+private:
+  virtual ~PaintCounter();
+
+  SurfaceFormat mFormat;
+  RefPtrSkia<SkCanvas> mCanvas;
+  IntSize mSize;
+  int mStride;
+
+  RefPtr<DataSourceSurface> mSurface;
+  RefPtr<DataTextureSource> mTextureSource;
+  RefPtr<TexturedEffect> mTexturedEffect;
+  static IntRect mRect;
+};
+
+} // namespace layers
+} // namespace mozilla
+
+#endif // mozilla_layers_opengl_PaintCounter_h_
--- a/gfx/layers/ipc/AsyncTransactionTracker.cpp
+++ b/gfx/layers/ipc/AsyncTransactionTracker.cpp
@@ -3,16 +3,17 @@
  */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "AsyncTransactionTracker.h"
 
 #include "mozilla/layers/ImageBridgeChild.h"  // for ImageBridgeChild
+#include "mozilla/gfx/Logging.h"
 
 namespace mozilla {
 namespace layers {
 
 void
 AsyncTransactionWaiter::WaitComplete()
 {
   MOZ_ASSERT(!InImageBridgeChildThread());
@@ -31,17 +32,17 @@ AsyncTransactionWaiter::WaitComplete()
     count++;
   }
 
   if (mWaitCount > 0) {
     printf_stderr("Timeout of waiting transaction complete.");
   }
 
   if (count == maxCount) {
-    gfxDevCrash(LogReason::AsyncTransactionTimeout) << "Bug 1244883: AsyncTransactionWaiter timed out.";
+    gfxDevCrash(gfx::LogReason::AsyncTransactionTimeout) << "Bug 1244883: AsyncTransactionWaiter timed out.";
   }
 }
 
 Atomic<uint64_t> AsyncTransactionTracker::sSerialCounter(0);
 
 AsyncTransactionTracker::AsyncTransactionTracker(AsyncTransactionWaiter* aWaiter)
     : mSerial(GetNextSerial())
     , mWaiter(aWaiter)
--- a/gfx/layers/ipc/CompositorBridgeParent.cpp
+++ b/gfx/layers/ipc/CompositorBridgeParent.cpp
@@ -610,16 +610,17 @@ CompositorBridgeParent::CompositorBridge
   , mPauseCompositionMonitor("PauseCompositionMonitor")
   , mResumeCompositionMonitor("ResumeCompositionMonitor")
   , mResetCompositorMonitor("ResetCompositorMonitor")
   , mRootLayerTreeID(0)
   , mOverrideComposeReadiness(false)
   , mForceCompositionTask(nullptr)
   , mCompositorThreadHolder(CompositorThreadHolder::GetSingleton())
   , mCompositorScheduler(nullptr)
+  , mPaintTime(TimeDuration::Forever())
 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
   , mLastPluginUpdateLayerTreeId(0)
   , mDeferPluginWindows(false)
   , mPluginWindowsHidden(false)
 #endif
 {
   // Always run destructor on the main thread
   MOZ_ASSERT(NS_IsMainThread());
@@ -1074,16 +1075,28 @@ CompositorBridgeParent::ScheduleTask(alr
   if (time == 0) {
     MessageLoop::current()->PostTask(Move(task));
   } else {
     MessageLoop::current()->PostDelayedTask(Move(task), time);
   }
 }
 
 void
+CompositorBridgeParent::UpdatePaintTime(LayerTransactionParent* aLayerTree,
+                                        const TimeDuration& aPaintTime)
+{
+  // We get a lot of paint timings for things with empty transactions.
+  if (!mLayerManager || aPaintTime.ToMilliseconds() < 1.0) {
+    return;
+  }
+
+  mLayerManager->SetPaintTime(aPaintTime);
+}
+
+void
 CompositorBridgeParent::NotifyShadowTreeTransaction(uint64_t aId, bool aIsFirstPaint,
     bool aScheduleComposite, uint32_t aPaintSequenceNumber,
     bool aIsRepeatTransaction, bool aHitTestUpdate)
 {
   if (!aIsRepeatTransaction &&
       mLayerManager &&
       mLayerManager->GetRoot()) {
     // Process plugin data here to give time for them to update before the next
@@ -2125,16 +2138,29 @@ public:
   }
   bool DeallocPCompositorWidgetParent(PCompositorWidgetParent* aActor) override {
     // Not allowed.
     return false;
   }
 
   virtual CompositorBridgeParentIPCAllocator* AsCompositorBridgeParentIPCAllocator() override { return this; }
 
+  virtual void UpdatePaintTime(LayerTransactionParent* aLayerTree, const TimeDuration& aPaintTime) override {
+    uint64_t id = aLayerTree->GetId();
+    MOZ_ASSERT(id != 0);
+
+    CompositorBridgeParent::LayerTreeState* state =
+      CompositorBridgeParent::GetIndirectShadowTree(id);
+    if (!state || !state->mParent) {
+      return;
+    }
+
+    state->mParent->UpdatePaintTime(aLayerTree, aPaintTime);
+  }
+
 protected:
   void OnChannelConnected(int32_t pid) override {
     mCompositorThreadHolder = CompositorThreadHolder::GetSingleton();
   }
 private:
   // Private destructor, to discourage deletion outside of Release():
   virtual ~CrossProcessCompositorBridgeParent();
 
--- a/gfx/layers/ipc/CompositorBridgeParent.h
+++ b/gfx/layers/ipc/CompositorBridgeParent.h
@@ -369,16 +369,19 @@ public:
   bool ScheduleResumeOnCompositorThread();
   bool ScheduleResumeOnCompositorThread(int width, int height);
 
   virtual void ScheduleComposition();
   void NotifyShadowTreeTransaction(uint64_t aId, bool aIsFirstPaint,
       bool aScheduleComposite, uint32_t aPaintSequenceNumber,
       bool aIsRepeatTransaction, bool aHitTestUpdate);
 
+  void UpdatePaintTime(LayerTransactionParent* aLayerTree,
+                       const TimeDuration& aPaintTime) override;
+
   /**
    * Check rotation info and schedule a rendering task if needed.
    * Only can be called from compositor thread.
    */
   void ScheduleRotationOnCompositorThread(const TargetConfig& aTargetConfig, bool aIsFirstPaint);
 
   /**
    * Returns the unique layer tree identifier that corresponds to the root
@@ -627,16 +630,18 @@ protected:
 
   RefPtr<CompositorThreadHolder> mCompositorThreadHolder;
   RefPtr<CompositorVsyncScheduler> mCompositorScheduler;
   // This makes sure the compositorParent is not destroyed before receiving
   // confirmation that the channel is closed.
   // mSelfRef is cleared in DeferredDestroy which is scheduled by ActorDestroy.
   RefPtr<CompositorBridgeParent> mSelfRef;
 
+  TimeDuration mPaintTime;
+
 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
   // cached plugin data used to reduce the number of updates we request.
   uint64_t mLastPluginUpdateLayerTreeId;
   nsIntPoint mPluginsLayerOffset;
   nsIntRegion mPluginsLayerVisibleRegion;
   nsTArray<PluginWindowData> mCachedPluginData;
   // Time until which we will block composition to wait for plugin updates.
   TimeStamp mWaitForPluginsUntil;
--- a/gfx/layers/ipc/LayerTransactionParent.cpp
+++ b/gfx/layers/ipc/LayerTransactionParent.cpp
@@ -224,16 +224,24 @@ public:
     }
   }
 private:
   LayerTransactionParent* mLayerTransaction;
   InfallibleTArray<OpDestroy>* mActorsToDestroy;
 };
 
 bool
+LayerTransactionParent::RecvPaintTime(const uint64_t& aTransactionId,
+                                      const TimeDuration& aPaintTime)
+{
+  mShadowLayersManager->UpdatePaintTime(this, aPaintTime);
+  return true;
+}
+
+bool
 LayerTransactionParent::RecvUpdate(InfallibleTArray<Edit>&& cset,
                                    InfallibleTArray<OpDestroy>&& aToDestroy,
                                    const uint64_t& aFwdTransactionId,
                                    const uint64_t& aTransactionId,
                                    const TargetConfig& targetConfig,
                                    PluginsArray&& aPlugins,
                                    const bool& isFirstPaint,
                                    const bool& scheduleComposite,
--- a/gfx/layers/ipc/LayerTransactionParent.h
+++ b/gfx/layers/ipc/LayerTransactionParent.h
@@ -104,16 +104,19 @@ public:
     mPendingCompositorUpdates--;
   }
 
 protected:
   virtual bool RecvSyncWithCompositor() override { return true; }
 
   virtual bool RecvShutdown() override;
 
+  virtual bool RecvPaintTime(const uint64_t& aTransactionId,
+                             const TimeDuration& aPaintTime) override;
+
   virtual bool RecvUpdate(EditArray&& cset,
                           OpDestroyArray&& aToDestroy,
                           const uint64_t& aFwdTransactionId,
                           const uint64_t& aTransactionId,
                           const TargetConfig& targetConfig,
                           PluginsArray&& aPlugins,
                           const bool& isFirstPaint,
                           const bool& scheduleComposite,
--- a/gfx/layers/ipc/PLayerTransaction.ipdl
+++ b/gfx/layers/ipc/PLayerTransaction.ipdl
@@ -53,16 +53,18 @@ parent:
               uint64_t fwdTransactionId,
               uint64_t id, TargetConfig targetConfig,
               PluginWindowData[] plugins, bool isFirstPaint,
               bool scheduleComposite, uint32_t paintSequenceNumber,
               bool isRepeatTransaction, TimeStamp transactionStart,
               int32_t paintSyncId)
     returns (EditReply[] reply);
 
+  async PaintTime(uint64_t id, TimeDuration paintTime);
+
   // We don't need to send a sync transaction if
   // no transaction operate require a swap.
   async UpdateNoSwap(Edit[] cset, OpDestroy[] toDestroy,
                      uint64_t fwdTransactionId,
                      uint64_t id, TargetConfig targetConfig,
                      PluginWindowData[] plugins, bool isFirstPaint,
                      bool scheduleComposite, uint32_t paintSequenceNumber,
                      bool isRepeatTransaction, TimeStamp transactionStart,
--- a/gfx/layers/ipc/RemoteContentController.cpp
+++ b/gfx/layers/ipc/RemoteContentController.cpp
@@ -85,17 +85,17 @@ RemoteContentController::HandleTap(TapTy
     Unused << SendHandleTap(aTapType, mBrowserParent->AdjustTapToChildWidget(aPoint),
             aModifiers, aGuid, aInputBlockId, callTakeFocusForClickFromTap);
   }
 }
 
 void
 RemoteContentController::PostDelayedTask(already_AddRefed<Runnable> aTask, int aDelayMs)
 {
-#ifdef MOZ_ANDROID_APZ
+#ifdef MOZ_WIDGET_ANDROID
   AndroidBridge::Bridge()->PostTaskToUiThread(Move(aTask), aDelayMs);
 #else
   (MessageLoop::current() ? MessageLoop::current() : mUILoop)->
     PostDelayedTask(Move(aTask), aDelayMs);
 #endif
 }
 
 bool
--- a/gfx/layers/ipc/ShadowLayers.cpp
+++ b/gfx/layers/ipc/ShadowLayers.cpp
@@ -584,16 +584,25 @@ ShadowLayerForwarder::StorePluginWidgetC
     const nsIWidget::Configuration& configuration = aConfigurations[idx];
     mPluginWindowData.AppendElement(PluginWindowData(configuration.mWindowID,
                                                      configuration.mClipRegion,
                                                      configuration.mBounds,
                                                      configuration.mVisible));
   }
 }
 
+void
+ShadowLayerForwarder::SendPaintTime(uint64_t aId, TimeDuration aPaintTime)
+{
+  if (!HasShadowManager() || !mShadowManager->IPCOpen() ||
+      !mShadowManager->SendPaintTime(aId, aPaintTime)) {
+    NS_WARNING("Could not send paint times over IPC");
+  }
+}
+
 bool
 ShadowLayerForwarder::EndTransaction(InfallibleTArray<EditReply>* aReplies,
                                      const nsIntRegion& aRegionToClear,
                                      uint64_t aId,
                                      bool aScheduleComposite,
                                      uint32_t aPaintSequenceNumber,
                                      bool aIsRepeatTransaction,
                                      const mozilla::TimeStamp& aTransactionStart,
--- a/gfx/layers/ipc/ShadowLayers.h
+++ b/gfx/layers/ipc/ShadowLayers.h
@@ -261,16 +261,21 @@ public:
                                          TextureClient* aClientOnWhite) override;
 #ifdef MOZ_WIDGET_GONK
   virtual void UseOverlaySource(CompositableClient* aCompositable,
                                 const OverlaySource& aOverlay,
                                 const nsIntRect& aPictureRect) override;
 #endif
 
   /**
+   * Used for debugging to tell the compositor how long this frame took to paint.
+   */
+  void SendPaintTime(uint64_t aId, TimeDuration aPaintTime);
+
+  /**
    * End the current transaction and forward it to LayerManagerComposite.
    * |aReplies| are directions from the LayerManagerComposite to the
    * caller of EndTransaction().
    */
   bool EndTransaction(InfallibleTArray<EditReply>* aReplies,
                       const nsIntRegion& aRegionToClear,
                       uint64_t aId,
                       bool aScheduleComposite,
--- a/gfx/layers/ipc/ShadowLayersManager.h
+++ b/gfx/layers/ipc/ShadowLayersManager.h
@@ -41,14 +41,15 @@ public:
     virtual void ApplyAsyncProperties(LayerTransactionParent* aLayerTree) = 0;
     virtual void FlushApzRepaints(const LayerTransactionParent* aLayerTree) = 0;
     virtual void GetAPZTestData(const LayerTransactionParent* aLayerTree,
                                 APZTestData* aOutData) { }
     virtual void SetConfirmedTargetAPZC(const LayerTransactionParent* aLayerTree,
                                         const uint64_t& aInputBlockId,
                                         const nsTArray<ScrollableLayerGuid>& aTargets) = 0;
     virtual CompositorBridgeParentIPCAllocator* AsCompositorBridgeParentIPCAllocator() { return nullptr; }
+    virtual void UpdatePaintTime(LayerTransactionParent* aLayerTree, const TimeDuration& aPaintTime) {}
 };
 
 } // namespace layers
 } // namespace mozilla
 
 #endif // mozilla_layers_ShadowLayersManager_h
--- a/gfx/layers/ipc/SharedBufferManagerChild.cpp
+++ b/gfx/layers/ipc/SharedBufferManagerChild.cpp
@@ -5,19 +5,20 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "base/task.h"                  // for NewRunnableFunction, etc
 #include "base/thread.h"                // for Thread
 #include "mozilla/gfx/Logging.h"        // for gfxDebug
 #include "mozilla/layers/SharedBufferManagerChild.h"
 #include "mozilla/layers/SharedBufferManagerParent.h"
+#include "mozilla/Sprintf.h"            // for SprintfLiteral
 #include "mozilla/StaticPtr.h"          // for StaticRefPtr
 #include "mozilla/ReentrantMonitor.h"   // for ReentrantMonitor, etc
-#include "nsThreadUtils.h"              // fo NS_IsMainThread
+#include "nsThreadUtils.h"              // for NS_IsMainThread
 
 #ifdef MOZ_WIDGET_GONK
 #define LOG(args...) __android_log_print(ANDROID_LOG_INFO, "SBMChild", ## args)
 #endif
 
 namespace mozilla {
 namespace layers {
 
@@ -140,17 +141,17 @@ SharedBufferManagerChild::StartUpOnThrea
   }
 
   sSharedBufferManagerChildThread = aThread;
   if (!aThread->IsRunning()) {
     aThread->Start();
   }
   sSharedBufferManagerChildSingleton = new SharedBufferManagerChild();
   char thrname[128];
-  base::snprintf(thrname, 128, "BufMgrParent#%d", base::Process::Current().pid());
+  SprintfLiteral(thrname, "BufMgrParent#%d", base::Process::Current().pid());
   sSharedBufferManagerParentSingleton = new SharedBufferManagerParent(
     base::Process::Current().pid(), new base::Thread(thrname));
   sSharedBufferManagerChildSingleton->ConnectAsync(sSharedBufferManagerParentSingleton);
   return true;
 }
 
 void
 SharedBufferManagerChild::DestroyManager()
--- a/gfx/layers