Merge mozilla-central to mozilla-inbound
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Fri, 22 Jul 2016 11:59:06 +0200
changeset 346383 30745bed2567f484ff609a6d389a0e57a1b4a8d5
parent 346382 457be633b6cc5b3a11ef8e5814a04024d57b59d3 (current diff)
parent 346263 e0bc88708ffed39aaab1fbc0ac461d93561195de (diff)
child 346384 d53ccef42be42f705c1fb6cffe6c979e3451977e
push id6389
push userraliiev@mozilla.com
push dateMon, 19 Sep 2016 13:38:22 +0000
treeherdermozilla-beta@01d67bfe6c81 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone50.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to mozilla-inbound
browser/app/moz.build
devtools/client/shared/components/reps/grip.js
dom/bindings/Bindings.conf
dom/geolocation/moz.build
dom/system/moz.build
dom/webidl/moz.build
toolkit/moz.configure
--- a/accessible/atk/moz.build
+++ b/accessible/atk/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS.mozilla.a11y += [
     'AccessibleWrap.h',
     'HyperTextAccessibleWrap.h',
--- a/accessible/base/moz.build
+++ b/accessible/base/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS += [
     'AccEvent.h',
     'nsAccessibilityService.h'
--- a/accessible/generic/moz.build
+++ b/accessible/generic/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS.mozilla.a11y += [
     'Accessible.h',
     'DocAccessible.h',
--- a/accessible/html/moz.build
+++ b/accessible/html/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 UNIFIED_SOURCES += [
     'HTMLCanvasAccessible.cpp',
     'HTMLElementAccessibles.cpp',
--- a/accessible/interfaces/ia2/moz.build
+++ b/accessible/interfaces/ia2/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 GeckoSharedLibrary('IA2Marshal', linkage=None)
 
 DEFINES['REGISTER_PROXY_DLL'] = True
--- a/accessible/interfaces/moz.build
+++ b/accessible/interfaces/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows' and CONFIG['COMPILE_ENVIRONMENT']:
     DIRS += ['msaa', 'ia2']
 
--- a/accessible/interfaces/msaa/moz.build
+++ b/accessible/interfaces/msaa/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 GeckoSharedLibrary('AccessibleMarshal', linkage=None)
 
 SOURCES += [
--- a/accessible/ipc/moz.build
+++ b/accessible/ipc/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 IPDL_SOURCES += ['PDocAccessible.ipdl']
 
 # with --disable-accessibility we need to compile PDocAccessible.ipdl, but not
--- a/accessible/jsat/moz.build
+++ b/accessible/jsat/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXTRA_JS_MODULES.accessibility += [
     'AccessFu.jsm',
     'Constants.jsm',
--- a/accessible/mac/moz.build
+++ b/accessible/mac/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS += [
     'mozAccessibleProtocol.h',
 ]
--- a/accessible/moz.build
+++ b/accessible/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 toolkit = CONFIG['MOZ_WIDGET_TOOLKIT']
 
 if 'gtk' in toolkit:
--- a/accessible/other/moz.build
+++ b/accessible/other/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS.mozilla.a11y += [
     'AccessibleWrap.h',
     'HyperTextAccessibleWrap.h',
--- a/accessible/tests/mochitest/moz.build
+++ b/accessible/tests/mochitest/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 A11Y_MANIFESTS += [
     'a11y.ini',
     'actions/a11y.ini',
--- a/accessible/windows/ia2/moz.build
+++ b/accessible/windows/ia2/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS += [
     'ia2Accessible.h',
     'ia2AccessibleAction.h',
--- a/accessible/windows/moz.build
+++ b/accessible/windows/moz.build
@@ -1,8 +1,8 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['msaa', 'ia2', 'sdn', 'uia']
 
--- a/accessible/windows/msaa/moz.build
+++ b/accessible/windows/msaa/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS += [
     'IUnknownImpl.h',
 ]
--- a/accessible/windows/sdn/moz.build
+++ b/accessible/windows/sdn/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 UNIFIED_SOURCES += [
     'sdnAccessible.cpp',
     'sdnDocAccessible.cpp',
--- a/accessible/windows/uia/moz.build
+++ b/accessible/windows/uia/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 SOURCES += [
     'uiaRawElmProvider.cpp',
 ]
--- a/accessible/xpcom/moz.build
+++ b/accessible/xpcom/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 UNIFIED_SOURCES += [
     'nsAccessibleRelation.cpp',
     'xpcAccessible.cpp',
--- a/accessible/xul/moz.build
+++ b/accessible/xul/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 UNIFIED_SOURCES += [
     'XULAlertAccessible.cpp',
     'XULColorPickerAccessible.cpp',
--- a/addon-sdk/moz.build
+++ b/addon-sdk/moz.build
@@ -1,14 +1,14 @@
 # AUTOMATICALLY GENERATED FROM mozbuild.template AND mach.  DO NOT EDIT.
 # 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/.
 
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # Makefile.in uses a misc target through test_addons_TARGET.
 HAS_MISC_RULE = True
 
--- a/addon-sdk/mozbuild.template
+++ b/addon-sdk/mozbuild.template
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # Makefile.in uses a misc target through test_addons_TARGET.
 HAS_MISC_RULE = True
 
--- a/addon-sdk/source/lib/dev/panel.js
+++ b/addon-sdk/source/lib/dev/panel.js
@@ -159,16 +159,20 @@ validate.define(Panel, contract({
     map: x => resolve(x.toString()),
     is: ["string"],
     ok: x => isLocalURL(x),
     msg: "The `options.url` must be a valid local URI."
   },
   invertIconForLightTheme: {
     is: ["boolean", "undefined"],
     msg: "The `options.invertIconForLightTheme` must be a boolean."
+  },
+  invertIconForDarkTheme: {
+    is: ["boolean", "undefined"],
+    msg: "The `options.invertIconForDarkTheme` must be a boolean."
   }
 }));
 
 setup.define(Panel, (panel, {window, toolbox, url}) => {
   // Hack: Given that iframe created by devtools API is no good for us,
   // we obtain original iframe and replace it with the one that has
   // desired configuration.
   const original = getFrameElement(window);
--- a/addon-sdk/source/lib/dev/toolbox.js
+++ b/addon-sdk/source/lib/dev/toolbox.js
@@ -37,27 +37,28 @@ const Tool = Class({
   setup: function(params={}) {
     const { panels } = validate(this, params);
     const { themes } = validate(this, params);
 
     this.panels = panels;
     this.themes = themes;
 
     each(([key, Panel]) => {
-      const { url, label, tooltip, icon,
-             invertIconForLightTheme } = validate(Panel.prototype);
+      const { url, label, tooltip, icon, invertIconForLightTheme,
+              invertIconForDarkTheme } = validate(Panel.prototype);
       const { id } = Panel.prototype;
 
       gDevTools.registerTool({
         id: id,
         url: "about:blank",
         label: label,
         tooltip: tooltip,
         icon: icon,
         invertIconForLightTheme: invertIconForLightTheme,
+        invertIconForDarkTheme: invertIconForDarkTheme,
         isTargetSupported: target => target.isLocalTab,
         build: (window, toolbox) => {
           const panel = new Panel();
           setup(panel, { window: window,
                          toolbox: toolbox,
                          url: url });
 
           return panel.ready();
--- a/addon-sdk/source/modules/system/moz.build
+++ b/addon-sdk/source/modules/system/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXTRA_JS_MODULES.sdk.system += [
     'Startup.js',
 ]
--- a/b2g/app/moz.build
+++ b/b2g/app/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['GAIADIR']:
     GeckoProgram(CONFIG['MOZ_APP_NAME'] + "-bin")
 else:
--- a/b2g/branding/branding-common.mozbuild
+++ b/b2g/branding/branding-common.mozbuild
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 @template
 def B2GBranding():
     if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
--- a/b2g/branding/browserhtml/content/moz.build
+++ b/b2g/branding/browserhtml/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/branding/browserhtml/locales/moz.build
+++ b/b2g/branding/browserhtml/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/branding/browserhtml/moz.build
+++ b/b2g/branding/browserhtml/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['content', 'locales']
 
 include('../branding-common.mozbuild')
--- a/b2g/branding/horizon/content/moz.build
+++ b/b2g/branding/horizon/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/branding/horizon/locales/moz.build
+++ b/b2g/branding/horizon/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/branding/horizon/moz.build
+++ b/b2g/branding/horizon/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['content', 'locales']
 
 include('../branding-common.mozbuild')
--- a/b2g/branding/official/content/moz.build
+++ b/b2g/branding/official/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/branding/official/locales/moz.build
+++ b/b2g/branding/official/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/branding/official/moz.build
+++ b/b2g/branding/official/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['content', 'locales']
 
 include('../branding-common.mozbuild')
--- a/b2g/branding/unofficial/content/moz.build
+++ b/b2g/branding/unofficial/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/branding/unofficial/locales/moz.build
+++ b/b2g/branding/unofficial/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/branding/unofficial/moz.build
+++ b/b2g/branding/unofficial/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['content', 'locales']
 
 include('../branding-common.mozbuild')
--- a/b2g/chrome/content/test/mochitest/moz.build
+++ b/b2g/chrome/content/test/mochitest/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 MOCHITEST_MANIFESTS += ['mochitest.ini']
--- a/b2g/chrome/moz.build
+++ b/b2g/chrome/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['AB_CD'] = CONFIG['MOZ_UI_LOCALE']
 DEFINES['PACKAGE'] = 'b2g'
 DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
--- a/b2g/common.configure
+++ b/b2g/common.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # Truetype fonts for B2G
 # ==============================================================
 option(env='MOZTTDIR', nargs=1, help='Path to truetype fonts for B2G')
--- a/b2g/components/moz.build
+++ b/b2g/components/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['test']
 
 EXTRA_COMPONENTS += [
--- a/b2g/components/test/moz.build
+++ b/b2g/components/test/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini']
 MOCHITEST_MANIFESTS += ['mochitest/mochitest.ini']
 MOCHITEST_CHROME_MANIFESTS += ['mochitest/chrome.ini']
--- a/b2g/dev/moz.configure
+++ b/b2g/dev/moz.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 imply_option('MOZ_SERVICES_SYNC', True)
 
 include('../common.configure')
--- a/b2g/gaia/moz.build
+++ b/b2g/gaia/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Program(CONFIG['MOZ_APP_NAME'])
 
 if CONFIG['OS_ARCH'] == 'WINNT':
--- a/b2g/graphene/moz.configure
+++ b/b2g/graphene/moz.configure
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 include('../common.configure')
--- a/b2g/installer/moz.build
+++ b/b2g/installer/moz.build
@@ -1,6 +1,6 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
--- a/b2g/locales/moz.build
+++ b/b2g/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/b2g/moz.build
+++ b/b2g/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 CONFIGURE_SUBST_FILES += ['installer/Makefile']
 
 DIRS += ['chrome', 'components', 'locales']
--- a/b2g/moz.configure
+++ b/b2g/moz.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 option('--with-gonk', nargs=1, help='Path to the gonk base directory')
 
 @depends_if('--with-gonk', '--help')
--- a/browser/app/moz.build
+++ b/browser/app/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['profile/extensions']
 
 GeckoProgram(CONFIG['MOZ_APP_NAME'])
--- a/browser/app/profile/extensions/moz.build
+++ b/browser/app/profile/extensions/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['{972ce4c6-7e08-4474-a285-3208198ce6fd}']
--- a/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/moz.build
+++ b/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 FINAL_TARGET = 'dist/bin/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}'
 
 FINAL_TARGET_PP_FILES += [
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -1879,16 +1879,17 @@
                                              userContextId: aParams.userContextId});
             }
 
             let notificationbox = this.getNotificationBox(browser);
             let uniqueId = this._generateUniquePanelID();
             notificationbox.id = uniqueId;
             aTab.linkedPanel = uniqueId;
             aTab.linkedBrowser = browser;
+            aTab.hasBrowser = true;
             this._tabForBrowser.set(browser, aTab);
 
             // Inject the <browser> into the DOM if necessary.
             if (!notificationbox.parentNode) {
               // NB: this appendChild call causes us to run constructors for the
               // browser element, which fires off a bunch of notifications. Some
               // of those notifications can cause code to run that inspects our
               // state, so it is important that the tab element is fully
@@ -4465,16 +4466,17 @@
           this.mPanelContainer.childNodes[0].id = uniqueId;
           this.mCurrentTab.linkedPanel = uniqueId;
           this.mCurrentTab.permanentKey = this.mCurrentBrowser.permanentKey;
           this.mCurrentTab._tPos = 0;
           this.mCurrentTab._fullyOpen = true;
           this.mCurrentTab.lastAccessed = Infinity;
           this.mCurrentTab.cachePosition = 0;
           this.mCurrentTab.linkedBrowser = this.mCurrentBrowser;
+          this.mCurrentTab.hasBrowser = true;
           this._tabForBrowser.set(this.mCurrentBrowser, this.mCurrentTab);
 
           // set up the shared autoscroll popup
           this._autoScrollPopup = this.mCurrentBrowser._createAutoScrollPopup();
           this._autoScrollPopup.id = "autoscroller";
           this.appendChild(this._autoScrollPopup);
           this.mCurrentBrowser.setAttribute("autoscrollpopup", this._autoScrollPopup.id);
           this.mCurrentBrowser.droppedLinkHandler = handleDroppedLink;
--- a/browser/base/content/test/general/browser_parsable_css.js
+++ b/browser/base/content/test/general/browser_parsable_css.js
@@ -4,64 +4,74 @@
 /* This list allows pre-existing or 'unfixable' CSS issues to remain, while we
  * detect newly occurring issues in shipping CSS. It is a list of objects
  * specifying conditions under which an error should be ignored.
  *
  * Every property of the objects in it needs to consist of a regular expression
  * matching the offending error. If an object has multiple regex criteria, they
  * ALL need to match an error in order for that error not to cause a test
  * failure. */
-const kWhitelist = [
+let whitelist = [
   // CodeMirror is imported as-is, see bug 1004423.
-  {sourceName: /codemirror\.css$/i},
+  {sourceName: /codemirror\.css$/i,
+   isFromDevTools: true},
   // PDFjs is futureproofing its pseudoselectors, and those rules are dropped.
   {sourceName: /web\/viewer\.css$/i,
-   errorMessage: /Unknown pseudo-class.*(fullscreen|selection)/i},
+   errorMessage: /Unknown pseudo-class.*(fullscreen|selection)/i,
+   isFromDevTools: false},
   // Tracked in bug 1004428.
-  {sourceName: /aboutaccounts\/(main|normalize)\.css$/i},
+  {sourceName: /aboutaccounts\/(main|normalize)\.css$/i,
+    isFromDevTools: false},
   // TokBox SDK assets, see bug 1032469.
-  {sourceName: /loop\/.*sdk-content\/.*\.css$/i},
+  {sourceName: /loop\/.*sdk-content\/.*\.css$/i,
+    isFromDevTools: false},
   // Loop standalone client CSS uses placeholder cross browser pseudo-element
   {sourceName: /loop\/.*\.css$/i,
-   errorMessage: /Unknown pseudo-class.*placeholder/i},
+   errorMessage: /Unknown pseudo-class.*placeholder/i,
+   isFromDevTools: false},
   {sourceName: /loop\/.*shared\/css\/common.css$/i,
-   errorMessage: /Unknown property .user-select./i},
+   errorMessage: /Unknown property .user-select./i,
+   isFromDevTools: false},
   // Highlighter CSS uses a UA-only pseudo-class, see bug 985597.
   {sourceName: /highlighters\.css$/i,
-   errorMessage: /Unknown pseudo-class.*moz-native-anonymous/i},
+   errorMessage: /Unknown pseudo-class.*moz-native-anonymous/i,
+   isFromDevTools: true},
   // Responsive Design Mode CSS uses a UA-only pseudo-class, see Bug 1241714.
   {sourceName: /responsive-ua\.css$/i,
-   errorMessage: /Unknown pseudo-class.*moz-dropdown-list/i},
+   errorMessage: /Unknown pseudo-class.*moz-dropdown-list/i,
+   isFromDevTools: true},
 ];
 
 var moduleLocation = gTestPath.replace(/\/[^\/]*$/i, "/parsingTestHelpers.jsm");
 var {generateURIsFromDirTree} = Cu.import(moduleLocation, {});
 
 // Add suffix to stylesheets' URI so that we always load them here and
 // have them parsed. Add a random number so that even if we run this
 // test multiple times, it would be unlikely to affect each other.
 const kPathSuffix = "?always-parse-css-" + Math.random();
 
 /**
  * Check if an error should be ignored due to matching one of the whitelist
- * objects defined in kWhitelist
+ * objects defined in whitelist
  *
  * @param aErrorObject the error to check
  * @return true if the error should be ignored, false otherwise.
  */
 function ignoredError(aErrorObject) {
-  for (let whitelistItem of kWhitelist) {
+  for (let whitelistItem of whitelist) {
     let matches = true;
-    for (let prop in whitelistItem) {
-      if (!whitelistItem[prop].test(aErrorObject[prop] || "")) {
+    for (let prop of ["sourceName", "errorMessage"]) {
+      if (whitelistItem.hasOwnProperty(prop) &&
+          !whitelistItem[prop].test(aErrorObject[prop] || "")) {
         matches = false;
         break;
       }
     }
     if (matches) {
+      whitelistItem.used = true;
       return true;
     }
   }
   return false;
 }
 
 function once(target, name) {
   return new Promise((resolve, reject) => {
@@ -145,17 +155,17 @@ function convertToChromeUri(fileUri) {
 
 function messageIsCSSError(msg) {
   // Only care about CSS errors generated by our iframe:
   if ((msg instanceof Ci.nsIScriptError) &&
       msg.category.includes("CSS") &&
       msg.sourceName.endsWith(kPathSuffix)) {
     let sourceName = msg.sourceName.slice(0, -kPathSuffix.length);
     let msgInfo = { sourceName, errorMessage: msg.errorMessage };
-    // Check if this error is whitelisted in kWhitelist
+    // Check if this error is whitelisted in whitelist
     if (!ignoredError(msgInfo)) {
       ok(false, `Got error message for ${sourceName}: ${msg.errorMessage}`);
       return true;
     }
     info(`Ignored error for ${sourceName} because of filter.`);
   }
   return false;
 }
@@ -229,16 +239,25 @@ add_task(function* checkAllTheCSS() {
   yield Promise.all(allPromises);
 
   let messages = Services.console.getMessageArray();
   // Count errors (the test output will list actual issues for us, as well
   // as the ok(false) in messageIsCSSError.
   let errors = messages.filter(messageIsCSSError);
   is(errors.length, 0, "All the styles (" + allPromises.length + ") loaded without errors.");
 
+  // Confirm that all whitelist rules have been used.
+  for (let item of whitelist) {
+    if (!item.used && isDevtools == item.isFromDevTools) {
+      ok(false, "Unused whitelist item. " +
+                (item.sourceName ? " sourceName: " + item.sourceName : "") +
+                (item.errorMessage ? " errorMessage: " + item.errorMessage : ""));
+    }
+  }
+
   // Clean up to avoid leaks:
   iframe.remove();
   doc.head.innerHTML = '';
   doc = null;
   iframe = null;
   windowless.close();
   windowless = null;
 });
--- a/browser/base/content/test/social/browser_addons.js
+++ b/browser/base/content/test/social/browser_addons.js
@@ -19,16 +19,20 @@ var manifestUpgrade = { // used for test
   origin: "https://test2.example.com",
   sidebarURL: "https://test2.example.com/browser/browser/base/content/test/social/social_sidebar.html",
   iconURL: "https://test2.example.com/browser/browser/base/content/test/general/moz.png",
   version: "1.0"
 };
 
 function test() {
   waitForExplicitFinish();
+  PopupNotifications.panel.setAttribute("animate", "false");
+  registerCleanupFunction(function () {
+    PopupNotifications.panel.removeAttribute("animate");
+  });
 
   let prefname = getManifestPrefname(manifest);
   // ensure that manifest2 is NOT showing as builtin
   is(SocialService.getOriginActivationType(manifest.origin), "foreign", "manifest is foreign");
   is(SocialService.getOriginActivationType(manifest2.origin), "foreign", "manifest2 is foreign");
 
   Services.prefs.setBoolPref("social.remote-install.enabled", true);
   runSocialTests(tests, undefined, undefined, function () {
@@ -184,17 +188,17 @@ var tests = {
         Services.prefs.clearUserPref(prefname);
         next();
       });
     });
   },
   testDirectoryInstall: function(next) {
     AddonManager.addAddonListener(installListener(next, manifest2));
 
-    ensureEventFired(PopupNotifications.panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown").then(() => {
       let panel = document.getElementById("servicesInstall-notification");
       info("servicesInstall-notification panel opened");
       panel.button.click();
     });
 
     let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
     Services.prefs.setCharPref("social.directories", manifest2.origin);
     is(SocialService.getOriginActivationType(manifest2.origin), "directory", "testing directory install");
--- a/browser/base/content/test/social/browser_blocklist.js
+++ b/browser/base/content/test/social/browser_blocklist.js
@@ -17,49 +17,79 @@ var manifest = { // normal provider
 };
 var manifest_bad = { // normal provider
   name: "provider blocked",
   origin: "https://test1.example.com",
   sidebarURL: "https://test1.example.com/browser/browser/base/content/test/social/social_sidebar.html",
   iconURL: "https://test1.example.com/browser/browser/base/content/test/general/moz.png"
 };
 
+// blocklist testing
+function updateBlocklist() {
+  var blocklistNotifier = Cc["@mozilla.org/extensions/blocklist;1"]
+                          .getService(Ci.nsITimerCallback);
+  let promise = promiseObserverNotified("blocklist-updated");
+  blocklistNotifier.notify(null);
+  return promise;
+}
+
+var _originalTestBlocklistURL = null;
+function setAndUpdateBlocklist(aURL) {
+  if (!_originalTestBlocklistURL)
+    _originalTestBlocklistURL = Services.prefs.getCharPref("extensions.blocklist.url");
+  Services.prefs.setCharPref("extensions.blocklist.url", aURL);
+  return updateBlocklist();
+}
+
+function resetBlocklist() {
+  // XXX - this has "forked" from the head.js helpers in our parent directory :(
+  // But let's reuse their blockNoPlugins.xml.  Later, we should arrange to
+  // use their head.js helpers directly
+  let noBlockedURL = "http://example.com/browser/browser/base/content/test/plugins/blockNoPlugins.xml";
+  return new Promise(resolve => {
+    setAndUpdateBlocklist(noBlockedURL).then(() => {
+      Services.prefs.setCharPref("extensions.blocklist.url", _originalTestBlocklistURL);
+      resolve();
+    });
+  });
+}
+
 function test() {
   waitForExplicitFinish();
   // turn on logging for nsBlocklistService.js
   Services.prefs.setBoolPref("extensions.logging.enabled", true);
   registerCleanupFunction(function () {
     Services.prefs.clearUserPref("extensions.logging.enabled");
   });
 
   runSocialTests(tests, undefined, undefined, function () {
-    resetBlocklist(finish); //restore to original pref
+    resetBlocklist().then(finish); //restore to original pref
   });
 }
 
 var tests = {
   testSimpleBlocklist: function(next) {
     // this really just tests adding and clearing our blocklist for later tests
-    setAndUpdateBlocklist(blocklistURL, function() {
+    setAndUpdateBlocklist(blocklistURL).then(() => {
       ok(Services.blocklist.isAddonBlocklisted(SocialService.createWrapper(manifest_bad)), "blocking 'blocked'");
       ok(!Services.blocklist.isAddonBlocklisted(SocialService.createWrapper(manifest)), "not blocking 'good'");
-      resetBlocklist(function() {
+      resetBlocklist().then(() => {
         ok(!Services.blocklist.isAddonBlocklisted(SocialService.createWrapper(manifest_bad)), "blocklist cleared");
         next();
       });
     });
   },
   testAddingNonBlockedProvider: function(next) {
     function finishTest(isgood) {
       ok(isgood, "adding non-blocked provider ok");
       Services.prefs.clearUserPref("social.manifest.good");
-      resetBlocklist(next);
+      resetBlocklist().then(next);
     }
     setManifestPref("social.manifest.good", manifest);
-    setAndUpdateBlocklist(blocklistURL, function() {
+    setAndUpdateBlocklist(blocklistURL).then(() => {
       try {
         SocialService.addProvider(manifest, function(provider) {
           try {
             SocialService.disableProvider(provider.origin, function() {
               ok(true, "added and removed provider");
               finishTest(true);
             });
           } catch(e) {
@@ -72,65 +102,55 @@ var tests = {
         finishTest(false);
       }
     });
   },
   testAddingBlockedProvider: function(next) {
     function finishTest(good) {
       ok(good, "Unable to add blocklisted provider");
       Services.prefs.clearUserPref("social.manifest.blocked");
-      resetBlocklist(next);
+      resetBlocklist().then(next);
     }
     setManifestPref("social.manifest.blocked", manifest_bad);
-    setAndUpdateBlocklist(blocklistURL, function() {
+    setAndUpdateBlocklist(blocklistURL).then(() => {
       try {
         SocialService.addProvider(manifest_bad, function(provider) {
           SocialService.disableProvider(provider.origin, function() {
             ok(false, "SocialService.addProvider should throw blocklist exception");
             finishTest(false);
           });
         });
       } catch(e) {
         ok(true, "SocialService.addProvider should throw blocklist exception: " + e);
         finishTest(true);
       }
     });
   },
   testInstallingBlockedProvider: function(next) {
     function finishTest(good) {
-      ok(good, "Unable to add blocklisted provider");
-      Services.prefs.clearUserPref("social.whitelist");
-      resetBlocklist(next);
+      ok(good, "Unable to install blocklisted provider");
+      resetBlocklist().then(next);
     }
     let activationURL = manifest_bad.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
-      let doc = tab.linkedBrowser.contentDocument;
-      let installFrom = doc.nodePrincipal.origin;
-      // whitelist to avoid the 3rd party install dialog, we only want to test
-      // the blocklist inside installProvider.
-      Services.prefs.setCharPref("social.whitelist", installFrom);
-      setAndUpdateBlocklist(blocklistURL, function() {
-        try {
-          // expecting an exception when attempting to install a hard blocked
-          // provider
-          let data = {
-            origin: doc.nodePrincipal.origin,
-            url: doc.location.href,
-            manifest: manifest_bad,
-            window: window
-          }
-          Social.installProvider(data, function(addonManifest) {
-            gBrowser.removeTab(tab);
-            finishTest(false);
-          });
-        } catch(e) {
-          gBrowser.removeTab(tab);
-          finishTest(true);
+    setAndUpdateBlocklist(blocklistURL).then(() => {
+      try {
+        // expecting an exception when attempting to install a hard blocked
+        // provider
+        let data = {
+          origin: manifest_bad.origin,
+          url: activationURL,
+          manifest: manifest_bad,
+          window: window
         }
-      });
+        Social.installProvider(data, function(addonManifest) {
+          finishTest(false);
+        });
+      } catch(e) {
+        finishTest(true);
+      }
     });
   },
   testBlockingExistingProvider: function(next) {
     let listener = {
       _window: null,
       onOpenWindow: function(aXULWindow) {
         Services.wm.removeListener(this);
         this._window = aXULWindow;
--- a/browser/base/content/test/social/browser_share.js
+++ b/browser/base/content/test/social/browser_share.js
@@ -162,28 +162,27 @@ var tests = {
     // starting from *some* page, share should be visible and enabled when
     // activating provider
     // initialize the button into the navbar
     CustomizableUI.addWidgetToArea("social-share-button", CustomizableUI.AREA_NAVBAR);
     // ensure correct state
     SocialUI.onCustomizeEnd(window);
 
     let testData = corpus[0];
-    addTab(testData.url, function(tab) {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, testData.url).then(tab => {
       SocialService.addProvider(manifest, function(provider) {
         is(SocialUI.enabled, true, "SocialUI is enabled");
         checkSocialUI();
         // share should not be enabled since we only have about:blank page
         let shareButton = SocialShare.shareButton;
         // verify the attribute for proper css
         ok(!shareButton.hasAttribute("disabled"), "share button is enabled");
         // button should be visible
         is(shareButton.hidden, false, "share button is visible");
-        gBrowser.removeTab(tab);
-        next();
+        BrowserTestUtils.removeTab(tab).then(next);
       });
     });
   },
   testSharePage: function(next) {
     let provider = Social._getProviderFromOrigin(manifest.origin);
 
     let testTab;
     let testIndex = 0;
@@ -191,32 +190,33 @@ var tests = {
 
     // initialize the button into the navbar
     CustomizableUI.addWidgetToArea("social-share-button", CustomizableUI.AREA_NAVBAR);
     // ensure correct state
     SocialUI.onCustomizeEnd(window);
 
     let mm = getGroupMessageManager("social");
     mm.addMessageListener("sharedata", function handler(msg) {
-      gBrowser.removeTab(testTab);
-      hasoptions(testData.options, JSON.parse(msg.data));
-      testData = corpus[testIndex++];
-      BrowserTestUtils.waitForCondition(() => { return SocialShare.currentShare == null; },"share panel closed").then(() => {
-        if (testData) {
-          runOneTest();
-        } else {
-          mm.removeMessageListener("sharedata", handler);
-          SocialService.disableProvider(manifest.origin, next);
-        }
+      BrowserTestUtils.removeTab(testTab).then(() => {
+        hasoptions(testData.options, JSON.parse(msg.data));
+        testData = corpus[testIndex++];
+        BrowserTestUtils.waitForCondition(() => { return SocialShare.currentShare == null; },"share panel closed").then(() => {
+          if (testData) {
+            runOneTest();
+          } else {
+            mm.removeMessageListener("sharedata", handler);
+            SocialService.disableProvider(manifest.origin, next);
+          }
+        });
+        SocialShare.iframe.messageManager.sendAsyncMessage("closeself", {});
       });
-      SocialShare.iframe.messageManager.sendAsyncMessage("closeself", {});
     });
 
     function runOneTest() {
-      addTab(testData.url, function(tab) {
+      BrowserTestUtils.openNewForegroundTab(gBrowser, testData.url).then(tab => {
         testTab = tab;
 
         let shareButton = SocialShare.shareButton;
         // verify the attribute for proper css
         ok(!shareButton.hasAttribute("disabled"), "share button is enabled");
         // button should be visible
         is(shareButton.hidden, false, "share button is visible");
 
@@ -279,25 +279,26 @@ var tests = {
         }
       });
 
       let mm = getGroupMessageManager("social");
       mm.addMessageListener("sharedata", function handler(msg) {
         is(msg.data, expecting, "microformats data ok");
         BrowserTestUtils.waitForCondition(() => { return SocialShare.currentShare == null; },
                                           "share panel closed").then(() => {
-          gBrowser.removeTab(testTab);
           mm.removeMessageListener("sharedata", handler);
-          SocialService.disableProvider(manifest.origin, next);
+          BrowserTestUtils.removeTab(testTab).then(() => {
+            SocialService.disableProvider(manifest.origin, next);
+          });
         });
         SocialShare.iframe.messageManager.sendAsyncMessage("closeself", {});
       });
 
       let url = "https://example.com/browser/browser/base/content/test/social/microformats.html"
-      addTab(url, function(tab) {
+      BrowserTestUtils.openNewForegroundTab(gBrowser, url).then(tab => {
         testTab = tab;
 
         let shareButton = SocialShare.shareButton;
         // verify the attribute for proper css
         ok(!shareButton.hasAttribute("disabled"), "share button is enabled");
         // button should be visible
         is(shareButton.hidden, false, "share button is visible");
 
@@ -316,39 +317,39 @@ var tests = {
     SocialShare._createFrame();
     let iframe = SocialShare.iframe;
 
     // initialize the button into the navbar
     CustomizableUI.addWidgetToArea("social-share-button", CustomizableUI.AREA_NAVBAR);
     // ensure correct state
     SocialUI.onCustomizeEnd(window);
 
-    ensureEventFired(iframe, "load").then(() => {
+    ensureFrameLoaded(iframe).then(() => {
       let subframe = iframe.contentDocument.getElementById("activation-frame");
       ensureFrameLoaded(subframe, activationPage).then(() => {
         is(subframe.contentDocument.location.href, activationPage, "activation page loaded");
         promiseObserverNotified("social:provider-enabled").then(() => {
           let mm = getGroupMessageManager("social");
           mm.addMessageListener("sharedata", function handler(msg) {
             ok(true, "share completed");
 
             BrowserTestUtils.waitForCondition(() => { return SocialShare.currentShare == null; },
                                               "share panel closed").then(() => {
-              ensureBrowserTabClosed(testTab).then(() => {
+              BrowserTestUtils.removeTab(testTab).then(() => {
                 mm.removeMessageListener("sharedata", handler);
                 SocialService.uninstallProvider(manifest.origin, next);
               });
             });
             SocialShare.iframe.messageManager.sendAsyncMessage("closeself", {});
           });
         });
         sendActivationEvent(subframe);
       });
     });
-    addTab(activationPage, function(tab) {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, activationPage).then(tab => {
       let shareButton = SocialShare.shareButton;
       // verify the attribute for proper css
       ok(!shareButton.hasAttribute("disabled"), "share button is enabled");
       // button should be visible
       is(shareButton.hidden, false, "share button is visible");
 
       testTab = tab;
       SocialShare.sharePage();
@@ -358,31 +359,31 @@ var tests = {
     let testTab;
     // initialize the button into the navbar
     CustomizableUI.addWidgetToArea("social-share-button", CustomizableUI.AREA_NAVBAR);
     // ensure correct state
     SocialUI.onCustomizeEnd(window);
     SocialShare._createFrame();
 
     SocialService.addProvider(manifest, () => {
-      addTab(activationPage, (tab) => {
-        ensureEventFired(SocialShare.iframe, "load").then(() => {
+      BrowserTestUtils.openNewForegroundTab(gBrowser, activationPage).then(tab => {
+        ensureFrameLoaded(SocialShare.iframe).then(() => {
           // send keys to the input field.  An unexpected failure will happen
           // if the onbeforeunload handler is fired.
           EventUtils.sendKey("f");
           EventUtils.sendKey("a");
           EventUtils.sendKey("i");
           EventUtils.sendKey("l");
   
           SocialShare.panel.addEventListener("popuphidden", function hidden(evt) {
             SocialShare.panel.removeEventListener("popuphidden", hidden);
             let topwin = Services.wm.getMostRecentWindow(null);
             is(topwin, window, "no dialog is open");
 
-            ensureBrowserTabClosed(testTab).then(() => {
+            BrowserTestUtils.removeTab(testTab).then(() => {
               SocialService.disableProvider(manifest.origin, next);
             });
           });
           SocialShare.iframe.messageManager.sendAsyncMessage("closeself", {});
         });
 
         let shareButton = SocialShare.shareButton;
         // verify the attribute for proper css
--- a/browser/base/content/test/social/browser_social_activation.js
+++ b/browser/base/content/test/social/browser_social_activation.js
@@ -9,98 +9,79 @@
 //
 thisTestLeaksUncaughtRejectionsAndShouldBeFixed("TypeError: Assert is null");
 
 
 var SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
 
 var tabsToRemove = [];
 
-
-function removeAllProviders(callback) {
-  // all the providers may have been added.
-  function removeProviders() {
-    if (Social.providers.length < 1) {
-      executeSoon(function() {
-        is(Social.providers.length, 0, "all providers removed");
-        executeSoon(callback);
-      });
-      return;
-    }
-
+function removeProvider(provider) {
+  return new Promise(resolve => {
     // a full install sets the manifest into a pref, addProvider alone doesn't,
     // make sure we uninstall if the manifest was added.
-    if (Social.providers[0].manifest) {
-      SocialService.uninstallProvider(Social.providers[0].origin, removeProviders);
+    if (provider.manifest) {
+      SocialService.uninstallProvider(provider.origin, resolve);
     } else {
-      SocialService.disableProvider(Social.providers[0].origin, removeProviders);
+      SocialService.disableProvider(provider.origin, resolve);
     }
-  }
-  removeProviders();
+  });
 }
 
 function postTestCleanup(callback) {
-  // any tabs opened by the test.
-  for (let tab of tabsToRemove)
-    gBrowser.removeTab(tab);
-  tabsToRemove = [];
-  // theses tests use the notification panel but don't bother waiting for it
-  // to fully open - the end result is that the panel might stay open
-  //SocialUI.activationPanel.hidePopup();
-
-  // all the providers may have been added.
-  removeAllProviders(callback);
+  Task.spawn(function () {
+    // any tabs opened by the test.
+    for (let tab of tabsToRemove) {
+      yield BrowserTestUtils.removeTab(tab);
+    }
+    tabsToRemove = [];
+    // all the providers may have been added.
+    while (Social.providers.length > 0) {
+      yield removeProvider(Social.providers[0]);
+    }
+  }).then(callback);
 }
 
-function addTab(url, callback) {
-  let tab = gBrowser.selectedTab = gBrowser.addTab(url, {skipAnimation: true});
-  tab.linkedBrowser.addEventListener("load", function tabLoad(event) {
-    tab.linkedBrowser.removeEventListener("load", tabLoad, true);
-    tabsToRemove.push(tab);
-    executeSoon(function() {callback(tab)});
-  }, true);
+function newTab(url) {
+  return new Promise(resolve => {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, url).then(tab => {
+      tabsToRemove.push(tab);
+      resolve(tab);
+    });
+  });
 }
 
 function sendActivationEvent(tab, callback, nullManifest) {
   // hack Social.lastEventReceived so we don't hit the "too many events" check.
   Social.lastEventReceived = 0;
   BrowserTestUtils.synthesizeMouseAtCenter("#activation", {}, tab.linkedBrowser);
   executeSoon(callback);
 }
 
 function activateProvider(domain, callback, nullManifest) {
   let activationURL = domain+"/browser/browser/base/content/test/social/social_activate_basic.html"
-  addTab(activationURL, function(tab) {
+  newTab(activationURL).then(tab => {
     sendActivationEvent(tab, callback, nullManifest);
   });
 }
 
 function activateIFrameProvider(domain, callback) {
   let activationURL = domain+"/browser/browser/base/content/test/social/social_activate_iframe.html"
-  addTab(activationURL, function(tab) {
+  newTab(activationURL).then(tab => {
     sendActivationEvent(tab, callback, false);
   });
 }
 
-function waitForProviderLoad(cb) {
-    waitForCondition(function() {
-      let sbrowser = document.getElementById("social-sidebar-browser");
-      let provider = SocialSidebar.provider;
-      let postActivation = provider && gBrowser.currentURI &&
-                            gBrowser.currentURI.spec == provider.origin + "/browser/browser/base/content/test/social/social_postActivation.html";
-
-      return postActivation && sbrowser.docShellIsActive;
-    }, function() {
-      // executeSoon to let the browser UI observers run first
-      executeSoon(cb);
-    },
-    "waitForProviderLoad: provider was not loaded");
+function waitForProviderLoad(origin) {
+  return Promise.all([
+    ensureFrameLoaded(gBrowser, origin + "/browser/browser/base/content/test/social/social_postActivation.html"),
+    ensureFrameLoaded(SocialSidebar.browser)
+  ]);
 }
 
-
 function getAddonItemInList(aId, aList) {
   var item = aList.firstChild;
   while (item) {
     if ("mAddon" in item && item.mAddon.id == aId) {
       aList.ensureElementIsVisible(item);
       return item;
     }
     item = item.nextSibling;
@@ -128,32 +109,30 @@ function clickAddonRemoveButton(tab, aCa
     });
 
     BrowserTestUtils.synthesizeMouseAtCenter(button, {}, tab.linkedBrowser);
   });
 }
 
 function activateOneProvider(manifest, finishActivation, aCallback) {
   let panel = document.getElementById("servicesInstall-notification");
-  PopupNotifications.panel.addEventListener("popupshown", function onpopupshown() {
-    PopupNotifications.panel.removeEventListener("popupshown", onpopupshown);
+  BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown").then(() => {
     ok(!panel.hidden, "servicesInstall-notification panel opened");
     if (finishActivation)
       panel.button.click();
     else
       panel.closebutton.click();
   });
-  PopupNotifications.panel.addEventListener("popuphidden", function _hidden() {
-    PopupNotifications.panel.removeEventListener("popuphidden", _hidden);
+  BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popuphidden").then(() => {
     ok(panel.hidden, "servicesInstall-notification panel hidden");
     if (!finishActivation) {
       ok(panel.hidden, "activation panel is not showing");
       executeSoon(aCallback);
     } else {
-      waitForProviderLoad(function() {
+      waitForProviderLoad(manifest.origin).then(() => {
         is(SocialSidebar.provider.origin, manifest.origin, "new provider is active");
         ok(SocialSidebar.opened, "sidebar is open");
         checkSocialUI();
         executeSoon(aCallback);
       });
     }
   });
 
@@ -182,52 +161,56 @@ var gProviders = [
     origin: "https://test2.example.com",
     sidebarURL: "https://test2.example.com/browser/browser/base/content/test/social/social_sidebar_empty.html?provider2",
     iconURL: "chrome://branding/content/about-logo.png"
   }
 ];
 
 
 function test() {
+  PopupNotifications.panel.setAttribute("animate", "false");
+  registerCleanupFunction(function () {
+    PopupNotifications.panel.removeAttribute("animate");
+  });
   waitForExplicitFinish();
   runSocialTests(tests, undefined, postTestCleanup);
 }
 
 var tests = {
   testActivationWrongOrigin: function(next) {
     // At this stage none of our providers exist, so we expect failure.
     Services.prefs.setBoolPref("social.remote-install.enabled", false);
     activateProvider(gTestDomains[0], function() {
       is(SocialUI.enabled, false, "SocialUI is not enabled");
       let panel = document.getElementById("servicesInstall-notification");
       ok(panel.hidden, "activation panel still hidden");
       checkSocialUI();
       Services.prefs.clearUserPref("social.remote-install.enabled");
-      removeAllProviders(next);
+      next();
     });
   },
   
   testIFrameActivation: function(next) {
     activateIFrameProvider(gTestDomains[0], function() {
       is(SocialUI.enabled, false, "SocialUI is not enabled");
       ok(!SocialSidebar.provider, "provider is not installed");
       let panel = document.getElementById("servicesInstall-notification");
       ok(panel.hidden, "activation panel still hidden");
       checkSocialUI();
-      removeAllProviders(next);
+      next();
     });
   },
   
   testActivationFirstProvider: function(next) {
     // first up we add a manifest entry for a single provider.
     activateOneProvider(gProviders[0], false, function() {
       // we deactivated leaving no providers left, so Social is disabled.
       ok(!SocialSidebar.provider, "should be no provider left after disabling");
       checkSocialUI();
-      removeAllProviders(next);
+      next();
     });
   },
   
   testActivationMultipleProvider: function(next) {
     // The trick with this test is to make sure that Social.providers[1] is
     // the current provider when doing the undo - this makes sure that the
     // Social code doesn't fallback to Social.providers[0], which it will
     // do in some cases (but those cases do not include what this test does)
@@ -235,68 +218,57 @@ var tests = {
     SocialService.addProvider(gProviders[0], function() {
       SocialService.addProvider(gProviders[1], function() {
         checkSocialUI();
         // activate the last provider.
         activateOneProvider(gProviders[2], false, function() {
           // we deactivated - the first provider should be enabled.
           is(SocialSidebar.provider.origin, Social.providers[1].origin, "original provider should have been reactivated");
           checkSocialUI();
-          removeAllProviders(next);
+          next();
         });
       });
     });
   },
 
   testAddonManagerDoubleInstall: function(next) {
     // Create a new tab and load about:addons
-    let blanktab = gBrowser.addTab();
-    gBrowser.selectedTab = blanktab;
+    let addonsTab = gBrowser.addTab();
+    gBrowser.selectedTab = addonsTab;
     BrowserOpenAddonsMgr('addons://list/service');
-
-    is(blanktab, gBrowser.selectedTab, "Current tab should be blank tab");
-
     gBrowser.selectedBrowser.addEventListener("load", function tabLoad() {
       gBrowser.selectedBrowser.removeEventListener("load", tabLoad, true);
-      let browser = blanktab.linkedBrowser;
-      is(browser.currentURI.spec, "about:addons", "about:addons should load into blank tab.");
+      is(addonsTab.linkedBrowser.currentURI.spec, "about:addons", "about:addons should load into blank tab.");
 
       activateOneProvider(gProviders[0], true, function() {
         info("first activation completed");
         is(gBrowser.contentDocument.location.href, gProviders[0].origin + "/browser/browser/base/content/test/social/social_postActivation.html", "postActivationURL loaded");
-        gBrowser.removeTab(gBrowser.selectedTab);
-        is(gBrowser.contentDocument.location.href, gProviders[0].origin + "/browser/browser/base/content/test/social/social_activate_basic.html", "activation page selected");
-        gBrowser.removeTab(gBrowser.selectedTab);
-        tabsToRemove.pop();
-        // uninstall the provider
-        clickAddonRemoveButton(blanktab, function(addon) {
-          checkSocialUI();
-          activateOneProvider(gProviders[0], true, function() {
-            info("second activation completed");
-            is(gBrowser.contentDocument.location.href, gProviders[0].origin + "/browser/browser/base/content/test/social/social_postActivation.html", "postActivationURL loaded");
-            gBrowser.removeTab(gBrowser.selectedTab);
+        BrowserTestUtils.removeTab(gBrowser.selectedTab).then(() => {
+          is(gBrowser.contentDocument.location.href, gProviders[0].origin + "/browser/browser/base/content/test/social/social_activate_basic.html", "activation page selected");
+          BrowserTestUtils.removeTab(gBrowser.selectedTab).then(() => {
+            tabsToRemove.pop();
+            // uninstall the provider
+            clickAddonRemoveButton(addonsTab, function(addon) {
+              checkSocialUI();
+              activateOneProvider(gProviders[0], true, function() {
+                info("second activation completed");
+                is(gBrowser.contentDocument.location.href, gProviders[0].origin + "/browser/browser/base/content/test/social/social_postActivation.html", "postActivationURL loaded");
+                BrowserTestUtils.removeTab(gBrowser.selectedTab).then(() => {
 
-            // after closing the addons tab, verify provider is still installed
-            gBrowser.tabContainer.addEventListener("TabClose", function onTabClose() {
-              gBrowser.tabContainer.removeEventListener("TabClose", onTabClose);
-              AddonManager.getAddonsByTypes(["service"], function(aAddons) {
-                is(aAddons.length, 1, "there can be only one");
-                removeAllProviders(next);
+                  // after closing the addons tab, verify provider is still installed
+                  AddonManager.getAddonsByTypes(["service"], function(aAddons) {
+                    is(aAddons.length, 1, "there can be only one");
+
+                    let doc = addonsTab.linkedBrowser.contentDocument;
+                    let list = doc.getElementById("addon-list");
+                    is(list.childNodes.length, 1, "only one addon is displayed");
+
+                    BrowserTestUtils.removeTab(addonsTab).then(next);
+                  });
+                });
               });
             });
-
-            // verify only one provider in list
-            AddonManager.getAddonsByTypes(["service"], function(aAddons) {
-              is(aAddons.length, 1, "there can be only one");
-
-              let doc = blanktab.linkedBrowser.contentDocument;
-              let list = doc.getElementById("addon-list");
-              is(list.childNodes.length, 1, "only one addon is displayed");
-
-              gBrowser.removeTab(blanktab);
-            });
-
           });
         });
       });
     }, true);
   }
 }
--- a/browser/base/content/test/social/browser_social_chatwindow.js
+++ b/browser/base/content/test/social/browser_social_chatwindow.js
@@ -22,22 +22,22 @@ var manifests = [
     origin: "https://test2.example.com",
     sidebarURL: "https://test2.example.com/browser/browser/base/content/test/social/social_sidebar.html?test2",
     iconURL: "chrome://branding/content/icon48.png"
   }
 ];
 
 var chatId = 0;
 function openChat(provider) {
-  let deferred = Promise.defer();
-  SocialSidebar.provider = provider;
-  let chatUrl = provider.origin + "/browser/browser/base/content/test/social/social_chat.html";
-  let url = chatUrl + "?id=" + (chatId++);
-  makeChat("normal", "chat " + chatId, (cb) => { deferred.resolve(cb); });
-  return deferred.promise;
+  return new Promise(resolve => {
+    SocialSidebar.provider = provider;
+    let chatUrl = provider.origin + "/browser/browser/base/content/test/social/social_chat.html";
+    let url = chatUrl + "?id=" + (chatId++);
+    makeChat("normal", "chat " + chatId, (cb) => { resolve(cb); });
+  });
 }
 
 function windowHasChats(win) {
   return !!getChatBar().firstElementChild;
 }
 
 function test() {
   requestLongerTimeout(2); // only debug builds seem to need more time...
@@ -69,33 +69,29 @@ function test() {
       finishcb();
     });
   });
 }
 
 var tests = {
   testOpenCloseChat: function(next) {
     openChat(SocialSidebar.provider).then((cb) => {
-      waitForCondition(function() {
-        return cb.minimized;
-      }, function() {
+      BrowserTestUtils.waitForCondition(() => { return cb.minimized; },
+                                        "chatbox is minimized").then(() => {
         ok(cb.minimized, "chat is minimized after toggle");
-        waitForCondition(function() {
-          return !cb.minimized;
-        }, function() {
+        BrowserTestUtils.waitForCondition(() => { return !cb.minimized; },
+                                          "chatbox is not minimized").then(() => {
           ok(!cb.minimized, "chat is not minimized after toggle");
           promiseNodeRemoved(cb).then(next);
           let mm = cb.content.messageManager;
           mm.sendAsyncMessage("socialTest-CloseSelf", {});
           info("close chat window requested");
-        },
-        "chatbox is not minimized");
+        });
         cb.toggle();
-      },
-      "chatbox is minimized");
+      });
 
       ok(!cb.minimized, "chat is not minimized on open");
       // toggle to minimize chat
       cb.toggle();
     });
   },
 
   // Check what happens when you close the only visible chat.
--- a/browser/base/content/test/social/browser_social_chatwindowfocus.js
+++ b/browser/base/content/test/social/browser_social_chatwindowfocus.js
@@ -37,29 +37,30 @@ function test() {
     }
     let postSubTest = function(cb) {
       Task.spawn(closeAllChats).then(cb);
     }
     // and run the tests.
     runSocialTestWithProvider(manifest, function (finishcb) {
       SocialSidebar.show();
       runSocialTests(tests, preSubTest, postSubTest, function () {
-        ensureBrowserTabClosed(tab).then(finishcb);
+        BrowserTestUtils.removeTab(tab).then(finishcb);
       });
     });
   }, true);
 }
 
 var tests = {
   // In this test we arrange for the sidebar to open the chat via a simulated
   // click.  This should cause the new chat to be opened and focused.
   testFocusWhenViaUser: function(next) {
     ensureFrameLoaded(document.getElementById("social-sidebar-browser")).then(() => {
       let chatbar = getChatBar();
       openChatViaUser();
       ok(chatbar.firstElementChild, "chat opened");
-      waitForCondition(() => isChatFocused(chatbar.selectedChat), function() {
+      BrowserTestUtils.waitForCondition(() => isChatFocused(chatbar.selectedChat),
+                                        "chat should be focused").then(() => {
         is(chatbar.selectedChat, chatbar.firstElementChild, "chat is selected");
         next();
-      }, "chat should be focused");
+      });
     });
   },
 };
--- a/browser/base/content/test/social/browser_social_contextmenu.js
+++ b/browser/base/content/test/social/browser_social_contextmenu.js
@@ -53,23 +53,22 @@ var tests = {
         ],
         "rels": {},
         "rel-urls": {}
       }
     });
 
     let mm = getGroupMessageManager("social");
     mm.addMessageListener("sharedata", function handler(msg) {
-      gBrowser.removeTab(testTab);
       is(msg.data, expecting, "microformats data ok");
       mm.removeMessageListener("sharedata", handler);
-      next();
+      BrowserTestUtils.removeTab(testTab).then(next);
     });
 
     let url = "https://example.com/browser/browser/base/content/test/social/microformats.html"
-    addTab(url, function(tab) {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, url).then(tab => {
       testTab = tab;
       let doc = tab.linkedBrowser.contentDocument;
       target = doc.getElementById("test-review");
       SocialMarks.markLink(manifest.origin, url, target);
     });
   }
 }
--- a/browser/base/content/test/social/browser_social_errorPage.js
+++ b/browser/base/content/test/social/browser_social_errorPage.js
@@ -12,22 +12,20 @@ function gc() {
 var openChatWindow = Cu.import("resource://gre/modules/MozSocialAPI.jsm", {}).openChatWindow;
 
 function openPanel(url, panelCallback, loadCallback) {
   // open a flyout
   SocialFlyout.open(url, 0, panelCallback);
   // wait for both open and loaded before callback. Since the test doesn't close
   // the panel between opens, we cannot rely on events here. We need to ensure
   // popupshown happens before we finish out the tests.
-  waitForCondition(function() {
+  BrowserTestUtils.waitForCondition(function() {
                     return SocialFlyout.panel.state == "open" &&
                            SocialFlyout.iframe.contentDocument.readyState == "complete";
-                   },
-                   function () { executeSoon(loadCallback) },
-                   "flyout is open and loaded");
+                   },"flyout is open and loaded").then(() => { executeSoon(loadCallback) });
 }
 
 function openChat(url, panelCallback, loadCallback) {
   // open a chat window
   let chatbar = getChatBar();
   openChatWindow(null, SocialSidebar.provider, url, panelCallback);
   chatbar.firstChild.addEventListener("DOMContentLoaded", function panelLoad() {
     chatbar.firstChild.removeEventListener("DOMContentLoaded", panelLoad, true);
@@ -133,22 +131,21 @@ var tests = {
       openChat(
         manifest.sidebarURL, /* empty html page */
         function() { // the panel api callback
           panelCallbackCount++;
         },
         function() { // the "load" callback.
           todo_is(panelCallbackCount, 0, "Bug 833207 - should be no callback when error page loads.");
           let chat = getChatBar().selectedChat;
-          waitForCondition(() => chat.content != null && chat.contentDocument.documentURI.indexOf("about:socialerror?mode=tryAgainOnly")==0,
-                           function() {
-                            chat.close();
-                            next();
-                            },
-                           "error page didn't appear");
+          BrowserTestUtils.waitForCondition(() => chat.content != null && chat.contentDocument.documentURI.indexOf("about:socialerror?mode=tryAgainOnly")==0,
+                           "error page didn't appear").then(() => {
+                              chat.close();
+                              next();
+                            });
         }
       );
     });
   },
 
   testChatWindowAfterTearOff: function(next) {
     todo(false, "Bug 1245799 is needed to make error pages work again for chat windows.");
     next();
@@ -162,32 +159,29 @@ var tests = {
     // open a chat while we are still online.
     openChat(
       url,
       null,
       function() { // the "load" callback.
         let chat = getChatBar().selectedChat;
         is(chat.contentDocument.documentURI, url, "correct url loaded");
         // toggle to a detached window.
-        chat.swapWindows().then(
-          chat => {
-            ok(!!chat.content, "we have chat content 1");
-            waitForCondition(() => chat.content != null && chat.contentDocument.readyState == "complete",
-                             function() {
-              // now go offline and reload the chat - about:socialerror should be loaded.
-              goOffline().then(function() {
-                ok(!!chat.content, "we have chat content 2");
-                chat.contentDocument.location.reload();
-                info("chat reload called");
-                waitForCondition(() => chat.contentDocument.documentURI.indexOf("about:socialerror?mode=tryAgainOnly")==0,
-                                 function() {
-                                  chat.close();
-                                  next();
-                                  },
-                                 "error page didn't appear");
+        chat.swapWindows().then(chat => {
+          ok(!!chat.content, "we have chat content 1");
+          BrowserTestUtils.waitForCondition(() => chat.content != null && chat.contentDocument.readyState == "complete",
+                                            "swapped window loaded").then(() => {
+            // now go offline and reload the chat - about:socialerror should be loaded.
+            goOffline().then(() => {
+              ok(!!chat.content, "we have chat content 2");
+              chat.contentDocument.location.reload();
+              info("chat reload called");
+              BrowserTestUtils.waitForCondition(() => chat.contentDocument.documentURI.indexOf("about:socialerror?mode=tryAgainOnly")==0,
+                                                "error page didn't appear").then(() => {
+                chat.close();
+                next();
               });
-            }, "swapped window loaded");
-          }
-        );
+            });
+          });
+        });
       }
     );
   }
 }
--- a/browser/base/content/test/social/browser_social_flyout.js
+++ b/browser/base/content/test/social/browser_social_flyout.js
@@ -3,19 +3,16 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 function test() {
   waitForExplicitFinish();
   let frameScript = "data:,(" + function frame_script() {
     addMessageListener("socialTest-CloseSelf", function(e) {
       content.close();
     });
-    addEventListener("visibilitychange", function() {
-      sendAsyncMessage("social-visibility", content.document.hidden ? "hidden" : "shown");
-    });
     addMessageListener("socialTest-sendEvent", function(msg) {
       let data = msg.data;
       let evt = content.document.createEvent("CustomEvent");
       evt.initCustomEvent(data.name, true, true, JSON.stringify(data.data));
       content.document.documentElement.dispatchEvent(evt);
     });
 
   }.toString() + ")();";
@@ -25,105 +22,81 @@ function test() {
   let manifest = { // normal provider
     name: "provider 1",
     origin: "https://example.com",
     sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
     iconURL: "https://example.com/browser/browser/base/content/test/general/moz.png"
   };
   runSocialTestWithProvider(manifest, function (finishcb) {
     SocialSidebar.show();
-    ensureFrameLoaded(document.getElementById("social-sidebar-browser")).then(() => {
+    ensureFrameLoaded(SocialSidebar.browser, manifest.sidebarURL).then(() => {
       // disable transitions for the test
-      let panel = document.getElementById("social-flyout-panel");
       registerCleanupFunction(function () {
-        panel.removeAttribute("animate");
+        SocialFlyout.panel.removeAttribute("animate");
       });
-      panel.setAttribute("animate", "false");
+      SocialFlyout.panel.setAttribute("animate", "false");
       runSocialTests(tests, undefined, undefined, finishcb);
     });
   });
 }
 
 var tests = {
-  testOpenCloseFlyout: function(next) {
-    let panel = document.getElementById("social-flyout-panel");
-    ensureEventFired(panel, "popupshown").then(() => {
-      is(panel.firstChild.contentDocument.readyState, "complete", "panel is loaded prior to showing");
-    });
-    let sidebar = document.getElementById("social-sidebar-browser")
-    let mm = getGroupMessageManager("social");
-    mm.addMessageListener("social-visibility", function handler(msg) {
-      if (msg.data == "shown") {
-        sidebar.messageManager.sendAsyncMessage("socialTest-sendEvent", { name: "test-flyout-close", data: {} });
-      } else if (msg.data == "hidden") {
-        mm.removeMessageListener("social-visibility", handler);
-        next();
-      }
-    });
-    sidebar.messageManager.sendAsyncMessage("socialTest-sendEvent", { name: "test-flyout-open", data: {} });
-  },
-
   testResizeFlyout: function(next) {
     let panel = document.getElementById("social-flyout-panel");
 
-    ensureEventFired(panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(panel, "popupshown").then(() => {
       is(panel.firstChild.contentDocument.readyState, "complete", "panel is loaded prior to showing");
       // The width of the flyout should be 400px initially
       let iframe = panel.firstChild;
       let body = iframe.contentDocument.body;
       let cs = iframe.contentWindow.getComputedStyle(body);
 
       is(cs.width, "400px", "should be 400px wide");
       is(iframe.boxObject.width, 400, "iframe should now be 400px wide");
       is(cs.height, "400px", "should be 400px high");
       is(iframe.boxObject.height, 400, "iframe should now be 400px high");
 
-      ensureEventFired(iframe.contentWindow, "resize").then(() => {
+      BrowserTestUtils.waitForEvent(iframe.contentWindow, "resize").then(() => {
         cs = iframe.contentWindow.getComputedStyle(body);
 
         is(cs.width, "500px", "should now be 500px wide");
         is(iframe.boxObject.width, 500, "iframe should now be 500px wide");
         is(cs.height, "500px", "should now be 500px high");
         is(iframe.boxObject.height, 500, "iframe should now be 500px high");
-        ensureEventFired(panel, "popuphidden").then(next);
+        BrowserTestUtils.waitForEvent(panel, "popuphidden").then(next);
         panel.hidePopup();
       });
       SocialFlyout.dispatchPanelEvent("socialTest-MakeWider");
     });
 
-    let sidebar = document.getElementById("social-sidebar-browser");
-    sidebar.messageManager.sendAsyncMessage("socialTest-sendEvent", { name: "test-flyout-open", data: {} });
+    SocialSidebar.browser.messageManager.sendAsyncMessage("socialTest-sendEvent", { name: "test-flyout-open", data: {} });
   },
 
   testCloseSelf: function(next) {
     let panel = document.getElementById("social-flyout-panel");
-    ensureEventFired(panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(panel, "popupshown").then(() => {
       is(panel.firstChild.contentDocument.readyState, "complete", "panel is loaded prior to showing");
-      ensureEventFired(panel, "popuphidden").then(next);
+      BrowserTestUtils.waitForEvent(panel, "popuphidden").then(next);
       let mm = panel.firstChild.messageManager;
       mm.sendAsyncMessage("socialTest-CloseSelf", {});
     });
-    let sidebar = document.getElementById("social-sidebar-browser");
-    sidebar.messageManager.sendAsyncMessage("socialTest-sendEvent", { name: "test-flyout-open", data: {} });
+    SocialSidebar.browser.messageManager.sendAsyncMessage("socialTest-sendEvent", { name: "test-flyout-open", data: {} });
   },
 
   testCloseOnLinkTraversal: function(next) {
 
-    function onTabOpen(event) {
-      gBrowser.tabContainer.removeEventListener("TabOpen", onTabOpen, true);
-      waitForCondition(function() { return panel.state == "closed" }, function() {
-        gBrowser.removeTab(event.target);
-        next();
-      }, "panel should close after tab open");
-    }
+    BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabOpen", true).then(event => {
+      BrowserTestUtils.waitForCondition(function() { return panel.state == "closed" },
+                                        "panel should close after tab open").then(() => {
+        BrowserTestUtils.removeTab(event.target).then(next);
+      });
+    });
 
     let panel = document.getElementById("social-flyout-panel");
-    ensureEventFired(panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(panel, "popupshown").then(() => {
       is(panel.firstChild.contentDocument.readyState, "complete", "panel is loaded prior to showing");
       is(panel.state, "open", "flyout should be open");
-      gBrowser.tabContainer.addEventListener("TabOpen", onTabOpen, true);
       let iframe = panel.firstChild;
       iframe.contentDocument.getElementById('traversal').click();
     });
-    let sidebar = document.getElementById("social-sidebar-browser");
-    sidebar.messageManager.sendAsyncMessage("socialTest-sendEvent", { name: "test-flyout-open", data: {} });
+    SocialSidebar.browser.messageManager.sendAsyncMessage("socialTest-sendEvent", { name: "test-flyout-open", data: {} });
   }
 }
--- a/browser/base/content/test/social/browser_social_marks.js
+++ b/browser/base/content/test/social/browser_social_marks.js
@@ -28,17 +28,19 @@ function test() {
   let frameScript = "data:,(" + function frame_script() {
     addEventListener("visibilitychange", function() {
       sendAsyncMessage("visibility", content.document.hidden ? "hidden" : "shown");
     });
   }.toString() + ")();";
   let mm = getGroupMessageManager("social");
   mm.loadFrameScript(frameScript, true);
 
+  PopupNotifications.panel.setAttribute("animate", "false");
   registerCleanupFunction(function () {
+    PopupNotifications.panel.removeAttribute("animate");
     mm.removeDelayedFrameScript(frameScript);
   });
 
   runSocialTests(tests, undefined, undefined, finish);
 }
 
 var tests = {
   testButtonDisabledOnActivate: function(next) {
@@ -62,56 +64,56 @@ var tests = {
       checkSocialUI(window);
       SocialService.disableProvider(manifest2.origin, next);
     });
   },
   testNoButtonOnEnable: function(next) {
     // we expect the addon install dialog to appear, we need to accept the
     // install from the dialog.
     let panel = document.getElementById("servicesInstall-notification");
-    ensureEventFired(PopupNotifications.panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown").then(() => {
       info("servicesInstall-notification panel opened");
       panel.button.click();
     });
 
     let activationURL = manifest3.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, activationURL).then(tab => {
       let doc = tab.linkedBrowser.contentDocument;
       let data = {
         origin: doc.nodePrincipal.origin,
         url: doc.location.href,
         manifest: manifest3,
         window: window
       }
 
       Social.installProvider(data, function(addonManifest) {
         // enable the provider so we know the button would have appeared
         SocialService.enableProvider(manifest3.origin, function(provider) {
           is(provider.origin, manifest3.origin, "provider is installed");
           let id = SocialMarks._toolbarHelper.idFromOrigin(provider.origin);
           let widget = CustomizableUI.getWidget(id);
           ok(!widget || !widget.forWindow(window).node, "no button added to widget set");
           Social.uninstallProvider(manifest3.origin, function() {
-            ensureBrowserTabClosed(tab).then(next);
+            BrowserTestUtils.removeTab(tab).then(next);
           });
         });
       });
     });
   },
 
   testButtonOnEnable: function(next) {
     let panel = document.getElementById("servicesInstall-notification");
-    ensureEventFired(PopupNotifications.panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown").then(() => {
       info("servicesInstall-notification panel opened");
       panel.button.click();
     });
 
     // enable the provider now
     let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, activationURL).then(tab => {
       let doc = tab.linkedBrowser.contentDocument;
       let data = {
         origin: doc.nodePrincipal.origin,
         url: doc.location.href,
         manifest: manifest2,
         window: window
       }
 
@@ -126,106 +128,105 @@ var tests = {
           let button = document.getElementById(id);
           is(button.disabled, false, "mark button is disabled");
           // verify the attribute for proper css
           ok(!button.hasAttribute("disabled"), "mark button attribute is disabled");
           // button should be visible
           is(button.hidden, false, "mark button is visible");
 
           checkSocialUI(window);
-          ensureBrowserTabClosed(tab).then(next);
+          BrowserTestUtils.removeTab(tab).then(next);
         });
       });
     });
   },
 
   testMarkPanel: function(next) {
     // click on panel to open and wait for visibility
     let provider = Social._getProviderFromOrigin(manifest2.origin);
     ok(provider.enabled, "provider is enabled");
     let id = SocialMarks._toolbarHelper.idFromOrigin(manifest2.origin);
     let widget = CustomizableUI.getWidget(id);
     let btn = widget.forWindow(window).node;
     ok(btn, "got a mark button");
     let ourTab;
 
-    ensureEventFired(btn.panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(btn.panel, "popupshown").then(() => {
       info("marks panel shown");
       let doc = btn.contentDocument;
       let unmarkBtn = doc.getElementById("unmark");
       ok(unmarkBtn, "testMarkPanel - got the panel unmark button");
       EventUtils.sendMouseEvent({type: "click"}, unmarkBtn, btn.contentWindow);
     });
 
-    ensureEventFired(btn.panel, "popuphidden").then(() => {
-      ensureBrowserTabClosed(ourTab).then(() => {
+    BrowserTestUtils.waitForEvent(btn.panel, "popuphidden").then(() => {
+      BrowserTestUtils.removeTab(ourTab).then(() => {
         ok(btn.disabled, "button is disabled");
         next();
       });
     });
 
     // verify markbutton is disabled when there is no browser url
     ok(btn.disabled, "button is disabled");
     let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, activationURL).then(tab => {
       ourTab = tab;
       ok(!btn.disabled, "button is enabled");
       // first click marks the page, second click opens the page. We have to
       // synthesize so the command event happens
       EventUtils.synthesizeMouseAtCenter(btn, {});
       // wait for the button to be marked, click to open panel
       is(btn.panel.state, "closed", "panel should not be visible yet");
-      waitForCondition(() => btn.isMarked, function() {
+      BrowserTestUtils.waitForCondition(() => btn.isMarked, "button is marked").then(() => {
         EventUtils.synthesizeMouseAtCenter(btn, {});
-      }, "button is marked");
+      });
     });
   },
 
   testMarkPanelOffline: function(next) {
     // click on panel to open and wait for visibility
     let provider = Social._getProviderFromOrigin(manifest2.origin);
     ok(provider.enabled, "provider is enabled");
     let id = SocialMarks._toolbarHelper.idFromOrigin(manifest2.origin);
     let widget = CustomizableUI.getWidget(id);
     let btn = widget.forWindow(window).node;
     ok(btn, "got a mark button");
 
     // verify markbutton is disabled when there is no browser url
     ok(btn.disabled, "button is disabled");
-    let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
+    let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html";
+    BrowserTestUtils.openNewForegroundTab(gBrowser, activationURL).then(tab => {
       ok(!btn.disabled, "button is enabled");
       goOffline().then(function() {
         info("testing offline error page");
         // wait for popupshown
-        ensureEventFired(btn.panel, "popupshown").then(() => {
+        BrowserTestUtils.waitForEvent(btn.panel, "popupshown").then(() => {
           info("marks panel is open");
           ensureFrameLoaded(btn.content).then(() => {
             is(btn.contentDocument.documentURI.indexOf("about:socialerror?mode=tryAgainOnly"), 0, "social error page is showing "+btn.contentDocument.documentURI);
             // cleanup after the page has been unmarked
-            ensureBrowserTabClosed(tab).then(() => {
+            BrowserTestUtils.removeTab(tab).then(() => {
               ok(btn.disabled, "button is disabled");
               goOnline().then(next);
             });
           });
         });
         btn.markCurrentPage();
       });
     });
   },
 
   testButtonOnDisable: function(next) {
     // enable the provider now
     let provider = Social._getProviderFromOrigin(manifest2.origin);
     ok(provider, "provider is installed");
     SocialService.disableProvider(manifest2.origin, function() {
       let id = SocialMarks._toolbarHelper.idFromOrigin(manifest2.origin);
-      waitForCondition(function() {
+      BrowserTestUtils.waitForCondition(() => {
                         // getWidget now returns null since we've destroyed the widget
                         return !CustomizableUI.getWidget(id)
-                       },
-                       function() {
+                       }, "button does not exist after disabling the provider").then(() => {
                          checkSocialUI(window);
                          Social.uninstallProvider(manifest2.origin, next);
-                       }, "button does not exist after disabling the provider");
+                       });
     });
   }
 }
--- a/browser/base/content/test/social/browser_social_marks_context.js
+++ b/browser/base/content/test/social/browser_social_marks_context.js
@@ -9,16 +9,20 @@ function makeMarkProvider(origin) {
     unmarkedIcon: "https://" + origin + ".example.com/browser/browser/base/content/test/social/checked.jpg",
     iconURL: "https://" + origin + ".example.com/browser/browser/base/content/test/general/moz.png",
     version: "1.0"
   }
 }
 
 function test() {
   waitForExplicitFinish();
+  PopupNotifications.panel.setAttribute("animate", "false");
+  registerCleanupFunction(function () {
+    PopupNotifications.panel.removeAttribute("animate");
+  });
 
   runSocialTests(tests, undefined, undefined, finish);
 }
 
 var tests = {
   testContextSubmenu: function(next) {
     // install 4 providers to test that the menu's are added as submenus
     let manifests = [
@@ -35,46 +39,47 @@ var tests = {
       let manifest = manifests.pop();
       if (!manifest) {
         info("INSTALLATION FINISHED");
         executeSoon(callback);
         return;
       }
       info("INSTALLING " + manifest.origin);
       let panel = document.getElementById("servicesInstall-notification");
-      ensureEventFired(PopupNotifications.panel, "popupshown").then(() => {
+      BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown").then(() => {
         info("servicesInstall-notification panel opened");
         panel.button.click();
       });
 
       let activationURL = manifest.origin + "/browser/browser/base/content/test/social/social_activate.html"
       let id = SocialMarks._toolbarHelper.idFromOrigin(manifest.origin);
       let toolbar = document.getElementById("nav-bar");
-      addTab(activationURL, function(tab) {
+      BrowserTestUtils.openNewForegroundTab(gBrowser, activationURL).then(tab => {
         let doc = tab.linkedBrowser.contentDocument;
         let data = {
           origin: doc.nodePrincipal.origin,
           url: doc.location.href,
           manifest: manifest,
           window: window
         }
 
         Social.installProvider(data, function(addonManifest) {
           // enable the provider so we know the button would have appeared
           SocialService.enableProvider(manifest.origin, function(provider) {
-            waitForCondition(function() { return CustomizableUI.getWidget(id) },
-                             function() {
-              gBrowser.removeTab(tab);
-              installed.push(manifest.origin);
-              // checkSocialUI will properly check where the menus are located
-              checkSocialUI(window);
-              executeSoon(function() {
-                addProviders(callback);
+            BrowserTestUtils.waitForCondition(() => { return CustomizableUI.getWidget(id) },
+                             "button exists after enabling social").then(() => {
+              BrowserTestUtils.removeTab(tab).then(() => {
+                installed.push(manifest.origin);
+                // checkSocialUI will properly check where the menus are located
+                checkSocialUI(window);
+                executeSoon(function() {
+                  addProviders(callback);
+                });
               });
-            }, "button exists after enabling social");
+            });
           });
         });
       });
     }
 
     function removeProviders(callback) {
       let origin = installed.pop();
       if (!origin) {
--- a/browser/base/content/test/social/browser_social_multiprovider.js
+++ b/browser/base/content/test/social/browser_social_multiprovider.js
@@ -37,33 +37,33 @@ var tests = {
       is(menuProviders.length, gProviders.length, "correct number of providers listed in the menu");
       // Find the selectedProvider's menu item
       let el = menu.getElementsByAttribute("origin", selectedProvider.origin);
       is(el.length, 1, "selected provider menu item exists");
       is(el[0].getAttribute("checked"), "true", "selected provider menu item is checked");
     }
 
     // the menu is not populated until onpopupshowing, so wait for popupshown
-    ensureEventFired(menu, "popupshown").then(()=>{
+    BrowserTestUtils.waitForEvent(menu, "popupshown", true).then(()=>{
       menu.hidePopup(); // doesn't need visibility
       // first provider should already be visible in the sidebar
       is(Social.providers[0].origin, SocialSidebar.provider.origin, "selected provider in sidebar");
       checkProviderMenu(Social.providers[0]);
 
       // Now activate "provider 2"
-      ensureEventFired(sbrowser, "load").then(()=>{
+      BrowserTestUtils.waitForEvent(sbrowser, "load", true).then(()=>{
         checkUIStateMatchesProvider(Social.providers[1]);
 
-        ensureEventFired(sbrowser, "load").then(()=>{
+        BrowserTestUtils.waitForEvent(sbrowser, "load", true).then(()=>{
           checkUIStateMatchesProvider(Social.providers[0]);
           next();
         });
 
         // show the menu again so the menu is updated with the correct commands
-        ensureEventFired(menu, "popupshown").then(()=>{
+        BrowserTestUtils.waitForEvent(menu, "popupshown", true).then(()=>{
           // click on the provider menuitem to switch providers
           let el = menu.getElementsByAttribute("origin", Social.providers[0].origin);
           is(el.length, 1, "selected provider menu item exists");
           EventUtils.synthesizeMouseAtCenter(el[0], {});
         });
         EventUtils.synthesizeMouseAtCenter(button, {});
       });
       SocialSidebar.provider = Social.providers[1];
--- a/browser/base/content/test/social/browser_social_sidebar.js
+++ b/browser/base/content/test/social/browser_social_sidebar.js
@@ -63,17 +63,17 @@ function doTest() {
         // should not have unloaded so will still be the provider URL.
         is(browser.getAttribute('src'), SocialSidebar.provider.sidebarURL, "sidebar url should be set");
       } else {
         // should have been an immediate unload.
         is(browser.getAttribute('src'), "about:blank", "sidebar url should be blank");
       }
     }
   }
-  ensureEventFired(browser, "load").then(() => {
+  ensureFrameLoaded(browser).then(() => {
     // First check the the sidebar is initially visible, and loaded
     ok(!command.hidden, "toggle command should be visible");
     let mm = getGroupMessageManager("social");
     mm.addMessageListener("visibility", function shown(msg) {
       if (msg.data == "shown") {
         mm.removeMessageListener("visibility", shown);
         checkShown(true);
         info("Toggling sidebar to closed");
--- a/browser/base/content/test/social/browser_social_status.js
+++ b/browser/base/content/test/social/browser_social_status.js
@@ -44,17 +44,19 @@ function test() {
       let evt = content.document.createEvent("CustomEvent");
       evt.initCustomEvent(data.name, true, true, JSON.stringify(data.data));
       content.document.documentElement.dispatchEvent(evt);
     });
   }.toString() + ")();";
   let mm = getGroupMessageManager("social");
   mm.loadFrameScript(frameScript, true);
 
+  PopupNotifications.panel.setAttribute("animate", "false");
   registerCleanupFunction(function () {
+    PopupNotifications.panel.removeAttribute("animate");
     mm.removeDelayedFrameScript(frameScript);
   });
 
   runSocialTestWithProvider(manifest, function (finishcb) {
     runSocialTests(tests, undefined, undefined, function () {
       Services.prefs.clearUserPref("social.remote-install.enabled");
       // just in case the tests failed, clear these here as well
       Services.prefs.clearUserPref("social.whitelist");
@@ -64,72 +66,70 @@ function test() {
   });
 }
 
 var tests = {
   testNoButtonOnEnable: function(next) {
     // we expect the addon install dialog to appear, we need to accept the
     // install from the dialog.
     let panel = document.getElementById("servicesInstall-notification");
-    ensureEventFired(PopupNotifications.panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown").then(() => {
       info("servicesInstall-notification panel opened");
       panel.button.click();
     })
 
     let activationURL = manifest3.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, activationURL).then(tab => {
       let doc = tab.linkedBrowser.contentDocument;
       let data = {
         origin: doc.nodePrincipal.origin,
         url: doc.location.href,
         manifest: manifest3,
         window: window
       }
       Social.installProvider(data, function(addonManifest) {
         // enable the provider so we know the button would have appeared
         SocialService.enableProvider(manifest3.origin, function(provider) {
           is(provider.origin, manifest3.origin, "provider is installed");
           let id = SocialStatus._toolbarHelper.idFromOrigin(provider.origin);
           let widget = CustomizableUI.getWidget(id);
           ok(!widget || !widget.forWindow(window).node, "no button added to widget set");
           Social.uninstallProvider(manifest3.origin, function() {
-            gBrowser.removeTab(tab);
-            next();
+            BrowserTestUtils.removeTab(tab).then(next);
           });
         });
       });
     });
   },
   testButtonOnEnable: function(next) {
     let panel = document.getElementById("servicesInstall-notification");
-    ensureEventFired(PopupNotifications.panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown").then(() => {
       info("servicesInstall-notification panel opened");
       panel.button.click();
     });
 
     // enable the provider now
     let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
+    BrowserTestUtils.openNewForegroundTab(gBrowser, activationURL).then(tab => {
       let doc = tab.linkedBrowser.contentDocument;
       let data = {
         origin: doc.nodePrincipal.origin,
         url: doc.location.href,
         manifest: manifest2,
         window: window
       }
 
       Social.installProvider(data, function(addonManifest) {
         SocialService.enableProvider(manifest2.origin, function(provider) {
           is(provider.origin, manifest2.origin, "provider is installed");
           let id = SocialStatus._toolbarHelper.idFromOrigin(manifest2.origin);
           let widget = CustomizableUI.getWidget(id).forWindow(window);
           ok(widget.node, "button added to widget set");
           checkSocialUI(window);
-          gBrowser.removeTab(tab);
-          next();
+          BrowserTestUtils.removeTab(tab).then(next);
         });
       });
     });
   },
   testStatusPanel: function(next) {
     let icon = {
       name: "testIcon",
       iconURL: "chrome://browser/skin/Info.png",
@@ -140,28 +140,28 @@ var tests = {
     let provider = Social._getProviderFromOrigin(manifest2.origin);
     let id = SocialStatus._toolbarHelper.idFromOrigin(manifest2.origin);
     let widget = CustomizableUI.getWidget(id);
     let btn = widget.forWindow(window).node;
 
     // Disable the transition
     let panel = document.getElementById("social-notification-panel");
     panel.setAttribute("animate", "false");
-    ensureEventFired(panel, "popupshown").then(() => {
+    BrowserTestUtils.waitForEvent(panel, "popupshown").then(() => {
       ensureFrameLoaded(panel.firstChild).then(() => {
         let mm = panel.firstChild.messageManager;
         mm.sendAsyncMessage("socialTest-sendEvent", { name: "Social:Notification", data: icon });
-        waitForCondition(function() { return btn.getAttribute("badge"); },
-                   function() {
-                     is(btn.style.listStyleImage, "url(\"" + icon.iconURL + "\")", "notification icon updated");
-                     panel.hidePopup();
-                   }, "button updated by notification");
+        BrowserTestUtils.waitForCondition(
+          () => { return btn.getAttribute("badge"); }, "button updated by notification").then(() => {
+            is(btn.style.listStyleImage, "url(\"" + icon.iconURL + "\")", "notification icon updated");
+            panel.hidePopup();
+          });
         });
     });
-    ensureEventFired(panel, "popuphidden").then(() => {
+    BrowserTestUtils.waitForEvent(panel, "popuphidden").then(() => {
       panel.removeAttribute("animate");
       next();
     });
     btn.click(); // open the panel
   },
 
   testPanelOffline: function(next) {
     // click on panel to open and wait for visibility
@@ -173,44 +173,44 @@ var tests = {
     ok(btn, "got a status button");
     let frameId = btn.getAttribute("notificationFrameId");
     let frame = document.getElementById(frameId);
 
     goOffline().then(function() {
       info("testing offline error page");
       // wait for popupshown
       let panel = document.getElementById("social-notification-panel");
-      ensureEventFired(panel, "popupshown").then(() => {
+      BrowserTestUtils.waitForEvent(panel, "popupshown").then(() => {
         ensureFrameLoaded(frame).then(() => {
           is(frame.contentDocument.documentURI.indexOf("about:socialerror?mode=tryAgainOnly"), 0, "social error page is showing "+frame.contentDocument.documentURI);
           // We got our error page, reset to avoid test leak.
-          ensureEventFired(frame, "load").then(() => {
+          BrowserTestUtils.waitForEvent(frame, "load", true).then(() => {
             is(frame.contentDocument.documentURI, "about:blank", "closing error panel");
-            ensureEventFired(panel, "popuphidden").then(next);
+            BrowserTestUtils.waitForEvent(panel, "popuphidden").then(next);
             panel.hidePopup();
           });
           goOnline().then(() => {
             info("resetting error panel");
             frame.setAttribute("src", "about:blank");
           });
         });
       });
       // reload after going offline, wait for unload to open panel
-      ensureEventFired(frame, "unload").then(() => {
+      BrowserTestUtils.waitForEvent(frame, "unload", true).then(() => {
         btn.click();
       });
       frame.contentDocument.location.reload();
     });
   },
 
   testButtonOnDisable: function(next) {
     // enable the provider now
     let provider = Social._getProviderFromOrigin(manifest2.origin);
     ok(provider, "provider is installed");
     SocialService.disableProvider(manifest2.origin, function() {
       let id = SocialStatus._toolbarHelper.idFromOrigin(manifest2.origin);
-      waitForCondition(function() { return !document.getElementById(id) },
-                       function() {
-                        Social.uninstallProvider(manifest2.origin, next);
-                       }, "button does not exist after disabling the provider");
+      BrowserTestUtils.waitForCondition(() => { return !document.getElementById(id) },
+                                        "button does not exist after disabling the provider").then(() => {
+        Social.uninstallProvider(manifest2.origin, next);
+       });
     });
   }
 }
--- a/browser/base/content/test/social/browser_social_window.js
+++ b/browser/base/content/test/social/browser_social_window.js
@@ -89,18 +89,18 @@ var tests = {
 
   // Check when providers are enabled and social is turned on at startup.
   testEnabledStartup: function(cbnext) {
     setManifestPref("social.manifest.test", manifest);
     ok(!SocialSidebar.opened, "sidebar is closed initially");
     SocialService.addProvider(manifest, function() {
       SocialService.addProvider(manifest2, function (provider) {
         SocialSidebar.show();
-        waitForCondition(() => SocialSidebar.opened,
-                     function() {
+        BrowserTestUtils.waitForCondition(
+          () => SocialSidebar.opened, "sidebar did not open").then(() => {
           ok(SocialSidebar.opened, "first window sidebar is open");
           openWindowAndWaitForInit(window, function(w1) {
             ok(w1.SocialSidebar.opened, "new window sidebar is open");
             ok(SocialService.hasEnabledProviders, "providers are enabled");
             checkSocialUI(w1);
             // now init is complete, open a second window
             openWindowAndWaitForInit(window, function(w2) {
               ok(w1.SocialSidebar.opened, "w1 sidebar is open");
@@ -118,33 +118,32 @@ var tests = {
                   checkSocialUI(w2);
                   checkSocialUI(w1);
                   Services.prefs.clearUserPref("social.manifest.test");
                   cbnext();
                 });
               });
             });
           });
-        }, "sidebar did not open");
+        });
       }, cbnext);
     }, cbnext);
   },
 
   testGlobalState: function(cbnext) {
     setManifestPref("social.manifest.test", manifest);
     ok(!SocialSidebar.opened, "sidebar is closed initially");
     ok(!Services.prefs.prefHasUserValue("social.sidebar.provider"), "global state unset");
     // mimick no session state in opener so we exercise the global state via pref
     SessionStore.deleteWindowValue(window, "socialSidebar");
     ok(!SessionStore.getWindowValue(window, "socialSidebar"), "window state unset");
     SocialService.addProvider(manifest, function() {
       openWindowAndWaitForInit(window, function(w1) {
         w1.SocialSidebar.show();
-        waitForCondition(() => w1.SocialSidebar.opened,
-                     function() {
+        BrowserTestUtils.waitForCondition(() => w1.SocialSidebar.opened, "sidebar opened").then(() => {
           ok(Services.prefs.prefHasUserValue("social.sidebar.provider"), "global state set");
           ok(!SocialSidebar.opened, "1. main sidebar is still closed");
           ok(w1.SocialSidebar.opened, "1. window sidebar is open");
           closeWindow(w1, function() {
             // this time, the global state should cause the sidebar to be opened
             // in the new window
             openWindowAndWaitForInit(window, function(w1) {
               ok(!SocialSidebar.opened, "2. main sidebar is still closed");
--- a/browser/base/content/test/social/head.js
+++ b/browser/base/content/test/social/head.js
@@ -1,63 +1,40 @@
 /* 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/. */
 
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 
-XPCOMUtils.defineLazyModuleGetter(this, "Promise",
-  "resource://gre/modules/Promise.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "Task",
   "resource://gre/modules/Task.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
   "resource://gre/modules/PlacesUtils.jsm");
 
-function waitForCondition(condition, nextTest, errorMsg, numTries = 30) {
-  var tries = 0;
-  var interval = setInterval(function() {
-    if (tries >= numTries) {
-      ok(false, errorMsg);
-      moveOn();
-    }
-    var conditionPassed;
-    try {
-      conditionPassed = condition();
-    } catch (e) {
-      ok(false, e + "\n" + e.stack);
-      conditionPassed = false;
-    }
-    if (conditionPassed) {
-      moveOn();
-    }
-    tries++;
-  }, 100);
-  var moveOn = function() { clearInterval(interval); nextTest(); };
-}
-
 
 function promiseObserverNotified(aTopic) {
-  let deferred = Promise.defer();
-  Services.obs.addObserver(function onNotification(aSubject, aTopic, aData) {
-    Services.obs.removeObserver(onNotification, aTopic);
-      deferred.resolve({subject: aSubject, data: aData});
+  return new Promise(resolve => {
+    Services.obs.addObserver(function onNotification(aSubject, aTopic, aData) {
+      dump("notification promised "+aTopic);
+      Services.obs.removeObserver(onNotification, aTopic);
+      TestUtils.executeSoon(() => resolve({subject: aSubject, data: aData}));
     }, aTopic, false);
-  return deferred.promise;
+  });
 }
 
 // Check that a specified (string) URL hasn't been "remembered" (ie, is not
 // in history, will not appear in about:newtab or auto-complete, etc.)
 function promiseSocialUrlNotRemembered(url) {
-  let deferred = Promise.defer();
-  let uri = Services.io.newURI(url, null, null);
-  PlacesUtils.asyncHistory.isURIVisited(uri, function(aURI, aIsVisited) {
-    ok(!aIsVisited, "social URL " + url + " should not be in global history");
-    deferred.resolve();
+  return new Promise(resolve => {
+    let uri = Services.io.newURI(url, null, null);
+    PlacesUtils.asyncHistory.isURIVisited(uri, function(aURI, aIsVisited) {
+      ok(!aIsVisited, "social URL " + url + " should not be in global history");
+      resolve();
+    });
   });
-  return deferred.promise;
 }
 
 var gURLsNotRemembered = [];
 
 
 function checkProviderPrefsEmpty(isError) {
   let MANIFEST_PREFS = Services.prefs.getBranch("social.manifest.");
   let prefs = MANIFEST_PREFS.getChildList("", []);
@@ -149,21 +126,21 @@ function runSocialTestWithProvider(manif
       }
 
       // If we've added all the providers we need, call the callback to start
       // the tests (and give it a callback it can call to finish them)
       if (providersAdded == manifests.length) {
         registerCleanupFunction(function () {
           finishSocialTest(true);
         });
-        waitForCondition(() => provider.enabled,
-                         function() {
+        BrowserTestUtils.waitForCondition(() => provider.enabled,
+                                          "providers added and enabled").then(() => {
           info("provider has been enabled");
           callback(finishSocialTest);
-        }, "providers added and enabled");
+        });
       }
     });
   });
 }
 
 function runSocialTests(tests, cbPreTest, cbPostTest, cbFinish) {
   let testIter = (function*() {
     for (let name in tests) {
@@ -302,49 +279,16 @@ function checkSocialUI(win) {
 function waitForNotification(topic, cb) {
   function observer(subject, topic, data) {
     Services.obs.removeObserver(observer, topic);
     cb();
   }
   Services.obs.addObserver(observer, topic, false);
 }
 
-// blocklist testing
-function updateBlocklist(aCallback) {
-  var blocklistNotifier = Cc["@mozilla.org/extensions/blocklist;1"]
-                          .getService(Ci.nsITimerCallback);
-  var observer = function() {
-    Services.obs.removeObserver(observer, "blocklist-updated");
-    if (aCallback)
-      executeSoon(aCallback);
-  };
-  Services.obs.addObserver(observer, "blocklist-updated", false);
-  blocklistNotifier.notify(null);
-}
-
-var _originalTestBlocklistURL = null;
-function setAndUpdateBlocklist(aURL, aCallback) {
-  if (!_originalTestBlocklistURL)
-    _originalTestBlocklistURL = Services.prefs.getCharPref("extensions.blocklist.url");
-  Services.prefs.setCharPref("extensions.blocklist.url", aURL);
-  updateBlocklist(aCallback);
-}
-
-function resetBlocklist(aCallback) {
-  // XXX - this has "forked" from the head.js helpers in our parent directory :(
-  // But let's reuse their blockNoPlugins.xml.  Later, we should arrange to
-  // use their head.js helpers directly
-  let noBlockedURL = "http://example.com/browser/browser/base/content/test/plugins/blockNoPlugins.xml";
-  setAndUpdateBlocklist(noBlockedURL, function() {
-    Services.prefs.setCharPref("extensions.blocklist.url", _originalTestBlocklistURL);
-    if (aCallback)
-      aCallback();
-  });
-}
-
 function setManifestPref(name, manifest) {
   let string = Cc["@mozilla.org/supports-string;1"].
                createInstance(Ci.nsISupportsString);
   string.data = JSON.stringify(manifest);
   Services.prefs.setComplexValue(name, Ci.nsISupportsString, string);
 }
 
 function getManifestPrefname(aManifest) {
@@ -370,74 +314,34 @@ function setBuiltinManifestPref(name, ma
 }
 
 function resetBuiltinManifestPref(name) {
   Services.prefs.getDefaultBranch(null).deleteBranch(name);
   is(Services.prefs.getDefaultBranch(null).getPrefType(name),
      Services.prefs.PREF_INVALID, "default manifest removed");
 }
 
-function addTab(url, callback) {
-  let tab = gBrowser.selectedTab = gBrowser.addTab(url, {skipAnimation: true});
-  tab.linkedBrowser.addEventListener("load", function tabLoad(event) {
-    tab.linkedBrowser.removeEventListener("load", tabLoad, true);
-    executeSoon(function() {callback(tab)});
-  }, true);
-}
-
-function selectBrowserTab(tab, callback) {
-  if (gBrowser.selectedTab == tab) {
-    executeSoon(function() {callback(tab)});
-    return;
-  }
-  gBrowser.tabContainer.addEventListener("TabSelect", function onTabSelect() {
-    gBrowser.tabContainer.removeEventListener("TabSelect", onTabSelect, false);
-    is(gBrowser.selectedTab, tab, "browser tab is selected");
-    executeSoon(function() {callback(tab)});
-  });
-  gBrowser.selectedTab = tab;
-}
-
 function ensureEventFired(elem, event) {
-  let deferred = Promise.defer();
-  elem.addEventListener(event, function handler() {
-    elem.removeEventListener(event, handler, true);
-    deferred.resolve()
-  }, true);
-  return deferred.promise;
-}
-
-function loadIntoTab(tab, url, callback) {
-  tab.linkedBrowser.addEventListener("load", function tabLoad(event) {
-    tab.linkedBrowser.removeEventListener("load", tabLoad, true);
-    executeSoon(function() {callback(tab)});
-  }, true);
-  tab.linkedBrowser.loadURI(url);
-}
-
-function ensureBrowserTabClosed(tab) {
-  let promise = ensureEventFired(gBrowser.tabContainer, "TabClose");
-  gBrowser.removeTab(tab);
-  return promise;
+  return BrowserTestUtils.waitForEvent(elem, event, true);
 }
 
 function ensureFrameLoaded(frame, uri) {
-  let deferred = Promise.defer();
-  if (frame.contentDocument && frame.contentDocument.readyState == "complete" &&
-      (!uri || frame.contentDocument.location.href == uri)) {
-    deferred.resolve();
-  } else {
-    frame.addEventListener("load", function handler() {
-      if (uri && frame.contentDocument.location.href != uri)
-        return;
-      frame.removeEventListener("load", handler, true);
-      deferred.resolve()
-    }, true);
-  }
-  return deferred.promise;
+  return new Promise(resolve => {
+    if (frame.contentDocument && frame.contentDocument.readyState == "complete" &&
+        (!uri || frame.contentDocument.location.href == uri)) {
+      resolve();
+    } else {
+      frame.addEventListener("load", function handler() {
+        if (uri && frame.contentDocument.location.href != uri)
+          return;
+        frame.removeEventListener("load", handler, true);
+        resolve()
+      }, true);
+    }
+  });
 }
 
 // chat test help functions
 
 // And lots of helpers for the resize tests.
 function get3ChatsForCollapsing(mode, cb) {
   // We make one chat, then measure its size.  We then resize the browser to
   // ensure a second can be created fully visible but a third can not - then
@@ -625,33 +529,33 @@ function getPopupWidth() {
   let popup = chatbar.menupopup;
   ok(!popup.parentNode.collapsed, "asking for popup width when it is visible");
   let cs = document.defaultView.getComputedStyle(popup.parentNode);
   let margins = parseInt(cs.marginLeft) + parseInt(cs.marginRight);
   return popup.parentNode.getBoundingClientRect().width + margins;
 }
 
 function promiseNodeRemoved(aNode) {
-  let deferred = Promise.defer();
-  let parent = aNode.parentNode;
+  return new Promise(resolve => {
+    let parent = aNode.parentNode;
 
-  let observer = new MutationObserver(function onMutatations(mutations) {
-    for (let mutation of mutations) {
-      for (let i = 0; i < mutation.removedNodes.length; i++) {
-        let node = mutation.removedNodes.item(i);
-        if (node != aNode) {
-          continue;
+    let observer = new MutationObserver(function onMutatations(mutations) {
+      for (let mutation of mutations) {
+        for (let i = 0; i < mutation.removedNodes.length; i++) {
+          let node = mutation.removedNodes.item(i);
+          if (node != aNode) {
+            continue;
+          }
+          observer.disconnect();
+          resolve();
         }
-        observer.disconnect();
-        deferred.resolve();
       }
-    }
+    });
+    observer.observe(parent, {childList: true});
   });
-  observer.observe(parent, {childList: true});
-  return deferred.promise;
 }
 
 function promiseCloseChat(chat) {
   let promise = promiseNodeRemoved(chat);
   chat.close();
   return promise;
 }
 
@@ -673,39 +577,39 @@ function openChatViaUser() {
 
 
 // Support for going on and offline.
 // (via browser/base/content/test/browser_bookmark_titles.js)
 var origProxyType = Services.prefs.getIntPref('network.proxy.type');
 
 function toggleOfflineStatus(goOffline) {
   // Bug 968887 fix.  when going on/offline, wait for notification before continuing
-  let deferred = Promise.defer();
-  if (!goOffline) {
-    Services.prefs.setIntPref('network.proxy.type', origProxyType);
-  }
-  if (goOffline != Services.io.offline) {
-    info("initial offline state " + Services.io.offline);
-    let expect = !Services.io.offline;
-    Services.obs.addObserver(function offlineChange(subject, topic, data) {
-      Services.obs.removeObserver(offlineChange, "network:offline-status-changed");
-      info("offline state changed to " + Services.io.offline);
-      is(expect, Services.io.offline, "network:offline-status-changed successful toggle");
-      deferred.resolve();
-    }, "network:offline-status-changed", false);
-    BrowserOffline.toggleOfflineStatus();
-  } else {
-    deferred.resolve();
-  }
-  if (goOffline) {
-    Services.prefs.setIntPref('network.proxy.type', 0);
-    // LOAD_FLAGS_BYPASS_CACHE isn't good enough. So clear the cache.
-    Services.cache2.clear();
-  }
-  return deferred.promise;
+  return new Promise(resolve => {
+    if (!goOffline) {
+      Services.prefs.setIntPref('network.proxy.type', origProxyType);
+    }
+    if (goOffline != Services.io.offline) {
+      info("initial offline state " + Services.io.offline);
+      let expect = !Services.io.offline;
+      Services.obs.addObserver(function offlineChange(subject, topic, data) {
+        Services.obs.removeObserver(offlineChange, "network:offline-status-changed");
+        info("offline state changed to " + Services.io.offline);
+        is(expect, Services.io.offline, "network:offline-status-changed successful toggle");
+        resolve();
+      }, "network:offline-status-changed", false);
+      BrowserOffline.toggleOfflineStatus();
+    } else {
+      resolve();
+    }
+    if (goOffline) {
+      Services.prefs.setIntPref('network.proxy.type', 0);
+      // LOAD_FLAGS_BYPASS_CACHE isn't good enough. So clear the cache.
+      Services.cache2.clear();
+    }
+  });
 }
 
 function goOffline() {
   // Simulate a network outage with offline mode. (Localhost is still
   // accessible in offline mode, so disable the test proxy as well.)
   return toggleOfflineStatus(true);
 }
 
--- a/browser/base/content/test/social/social_activate_basic.html
+++ b/browser/base/content/test/social/social_activate_basic.html
@@ -1,11 +1,12 @@
 <html>
 <head>
-	<title>Activation test</title>
+    <meta charset="utf-8">
+    <title>Activation test</title>
 </head>
 <script>
 // icons from http://findicons.com/icon/158311/firefox?id=356182 by ipapun
 var data = {
   // currently required
   "name": "Demo Social Service",
   "iconURL": "chrome://branding/content/icon16.png",
   "icon32URL": "chrome://branding/content/favicon32.png",
--- a/browser/base/moz.build
+++ b/browser/base/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 SPHINX_TREES['sslerrorreport'] = 'content/docs/sslerrorreport'
 
 MOCHITEST_MANIFESTS += [
--- a/browser/branding/aurora/content/moz.build
+++ b/browser/branding/aurora/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/branding/aurora/locales/moz.build
+++ b/browser/branding/aurora/locales/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['MOZ_DISTRIBUTION_ID_UNQUOTED'] = CONFIG['MOZ_DISTRIBUTION_ID']
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/branding/aurora/moz.build
+++ b/browser/branding/aurora/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['content', 'locales']
 
 DIST_SUBDIR = 'browser'
--- a/browser/branding/branding-common.mozbuild
+++ b/browser/branding/branding-common.mozbuild
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 @template
 def FirefoxBranding():
     JS_PREFERENCE_FILES += [
--- a/browser/branding/nightly/content/moz.build
+++ b/browser/branding/nightly/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/branding/nightly/locales/moz.build
+++ b/browser/branding/nightly/locales/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['MOZ_DISTRIBUTION_ID_UNQUOTED'] = CONFIG['MOZ_DISTRIBUTION_ID']
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/branding/nightly/moz.build
+++ b/browser/branding/nightly/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['content', 'locales']
 
 DIST_SUBDIR = 'browser'
--- a/browser/branding/official/content/moz.build
+++ b/browser/branding/official/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/branding/official/locales/moz.build
+++ b/browser/branding/official/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/branding/official/moz.build
+++ b/browser/branding/official/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['content', 'locales']
 
 DIST_SUBDIR = 'browser'
--- a/browser/branding/unofficial/content/moz.build
+++ b/browser/branding/unofficial/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/branding/unofficial/locales/moz.build
+++ b/browser/branding/unofficial/locales/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['MOZ_DISTRIBUTION_ID_UNQUOTED'] = CONFIG['MOZ_DISTRIBUTION_ID']
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/branding/unofficial/moz.build
+++ b/browser/branding/unofficial/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['content', 'locales']
 
 DIST_SUBDIR = 'browser'
--- a/browser/components/about/moz.build
+++ b/browser/components/about/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS.mozilla.browser += [
     'AboutRedirector.h',
 ]
--- a/browser/components/build/moz.build
+++ b/browser/components/build/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS += [
     'nsBrowserCompsCID.h',
 ]
--- a/browser/components/contextualidentity/moz.build
+++ b/browser/components/contextualidentity/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += [
     'test/browser/browser.ini',
 ]
--- a/browser/components/customizableui/content/moz.build
+++ b/browser/components/customizableui/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/components/customizableui/moz.build
+++ b/browser/components/customizableui/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'content',
 ]
--- a/browser/components/dirprovider/moz.build
+++ b/browser/components/dirprovider/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXPORTS.mozilla.browser += [
     'DirectoryProvider.h',
 ]
--- a/browser/components/downloads/moz.build
+++ b/browser/components/downloads/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 with Files('*'):
     BUG_COMPONENT = ('Firefox', 'Downloads Panel')
 
--- a/browser/components/extensions/moz.build
+++ b/browser/components/extensions/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
 
 DIRS += ['schemas']
--- a/browser/components/extensions/schemas/moz.build
+++ b/browser/components/extensions/schemas/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
--- a/browser/components/feeds/moz.build
+++ b/browser/components/feeds/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
 MOCHITEST_CHROME_MANIFESTS += ['test/chrome/chrome.ini']
 MOCHITEST_MANIFESTS += ['test/mochitest.ini']
--- a/browser/components/migration/moz.build
+++ b/browser/components/migration/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
 
 MARIONETTE_UNIT_MANIFESTS += ['tests/marionette/manifest.ini']
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'about',
     'contextualidentity',
--- a/browser/components/newtab/moz.build
+++ b/browser/components/newtab/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
 
 XPCSHELL_TESTS_MANIFESTS += [
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -2786,27 +2786,27 @@ ContentPermissionPrompt.prototype = {
 
     var requestingPrincipal = request.principal;
     var requestingURI = requestingPrincipal.URI;
 
     // Ignore requests from non-nsIStandardURLs
     if (!(requestingURI instanceof Ci.nsIStandardURL))
       return;
 
-    var autoAllow = false;
     var permissionKey = kFeatureKeys[perm.type];
     var result = Services.perms.testExactPermissionFromPrincipal(requestingPrincipal, permissionKey);
 
     if (result == Ci.nsIPermissionManager.DENY_ACTION) {
       request.cancel();
       return;
     }
 
     if (result == Ci.nsIPermissionManager.ALLOW_ACTION) {
-      autoAllow = true;
+      request.allow();
+      return;
     }
 
     var browser = this._getBrowserForRequest(request);
     var chromeWin = browser.ownerGlobal;
     if (!chromeWin.PopupNotifications)
       // Ignore requests from browsers hosted in windows that don't support
       // PopupNotifications.
       return;
--- a/browser/components/places/moz.build
+++ b/browser/components/places/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
 MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.ini']
 BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
--- a/browser/components/preferences/in-content/moz.build
+++ b/browser/components/preferences/in-content/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 for var in ('MOZ_APP_NAME', 'MOZ_MACBUNDLE_NAME'):
     DEFINES[var] = CONFIG[var]
 
--- a/browser/components/preferences/moz.build
+++ b/browser/components/preferences/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['in-content']
 
 BROWSER_CHROME_MANIFESTS += [
--- a/browser/components/privatebrowsing/moz.build
+++ b/browser/components/privatebrowsing/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += [
     'test/browser/browser.ini',
 ]
--- a/browser/components/search/moz.build
+++ b/browser/components/search/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += [
     'test/browser.ini',
 ]
--- a/browser/components/selfsupport/moz.build
+++ b/browser/components/selfsupport/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXTRA_COMPONENTS += [
     'SelfSupportService.js',
     'SelfSupportService.manifest',
--- a/browser/components/sessionstore/moz.build
+++ b/browser/components/sessionstore/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 
--- a/browser/components/shell/moz.build
+++ b/browser/components/shell/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 
--- a/browser/extensions/e10srollout/moz.build
+++ b/browser/extensions/e10srollout/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
 DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION']
 
--- a/browser/extensions/flyweb/moz.build
+++ b/browser/extensions/flyweb/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
 DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION']
 
--- a/browser/extensions/loop/chrome/locale/moz.build
+++ b/browser/extensions/loop/chrome/locale/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
--- a/browser/extensions/loop/moz.build
+++ b/browser/extensions/loop/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['chrome/locale']
 
 DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION']
--- a/browser/extensions/moz.build
+++ b/browser/extensions/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'e10srollout',
     'loop',
--- a/browser/extensions/pdfjs/moz.build
+++ b/browser/extensions/pdfjs/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 
 JAR_MANIFESTS += ['jar.mn']
--- a/browser/extensions/pocket/locales/moz.build
+++ b/browser/extensions/pocket/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
--- a/browser/extensions/pocket/moz.build
+++ b/browser/extensions/pocket/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
 DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION']
 
--- a/browser/extensions/webcompat/moz.build
+++ b/browser/extensions/webcompat/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
 DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION']
 
--- a/browser/fonts/moz.build
+++ b/browser/fonts/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['OS_ARCH'] in ('WINNT', 'Linux'):
     DIST_SUBDIR = ''
     FINAL_TARGET_FILES.fonts += [
--- a/browser/installer/windows/moz.build
+++ b/browser/installer/windows/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES['APP_VERSION'] = CONFIG['FIREFOX_VERSION']
 
 DEFINES['MOZ_APP_NAME'] = CONFIG['MOZ_APP_NAME']
--- a/browser/locales/moz.build
+++ b/browser/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 XPCSHELL_TESTS_MANIFESTS += [
     'test/unit/social/xpcshell.ini',
--- a/browser/moz.build
+++ b/browser/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 CONFIGURE_SUBST_FILES += ['installer/Makefile']
 
 SPHINX_TREES['browser'] = 'docs'
--- a/browser/moz.configure
+++ b/browser/moz.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 imply_option('MOZ_PLACES', True)
 imply_option('MOZ_SERVICES_HEALTHREPORT', True)
 imply_option('MOZ_SERVICES_SYNC', True)
--- a/browser/themes/linux/communicator/moz.build
+++ b/browser/themes/linux/communicator/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/themes/linux/moz.build
+++ b/browser/themes/linux/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['communicator']
 
 JAR_MANIFESTS += ['jar.mn']
--- a/browser/themes/moz.build
+++ b/browser/themes/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 toolkit = CONFIG['MOZ_WIDGET_TOOLKIT']
 
 if toolkit == 'cocoa':
--- a/browser/themes/osx/communicator/moz.build
+++ b/browser/themes/osx/communicator/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/themes/osx/moz.build
+++ b/browser/themes/osx/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['communicator']
 
 JAR_MANIFESTS += ['jar.mn']
--- a/browser/themes/tab-svgs.mozbuild
+++ b/browser/themes/tab-svgs.mozbuild
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 script = '/browser/themes/preprocess-tab-svgs.py'
 input = ['/browser/themes/shared/tab-selected.svg']
 
--- a/browser/themes/windows/communicator/moz.build
+++ b/browser/themes/windows/communicator/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/browser/themes/windows/moz.build
+++ b/browser/themes/windows/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['communicator']
 
 JAR_MANIFESTS += ['jar.mn']
--- a/browser/tools/mozscreenshots/moz.build
+++ b/browser/tools/mozscreenshots/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += [
     # Each test is in it's own directory so it gets run in a clean profile with
     # run-by-dir.
--- a/browser/tools/mozscreenshots/mozscreenshots/extension/moz.build
+++ b/browser/tools/mozscreenshots/mozscreenshots/extension/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPI_NAME = 'mozscreenshots'
 
 JAR_MANIFESTS += ['jar.mn']
--- a/build/annotationProcessors/moz.build
+++ b/build/annotationProcessors/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 jar = add_java_jar('annotationProcessors')
 jar.sources += [
     'AnnotationInfo.java',
--- a/build/clang-plugin/moz.build
+++ b/build/clang-plugin/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 SharedLibrary('clang-plugin')
 
 SOURCES += [
--- a/build/clang-plugin/tests/moz.build
+++ b/build/clang-plugin/tests/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # dummy library name to avoid skipping building the sources here.
 Library('clang-plugin-tests')
 
--- a/build/gabi++/moz.build
+++ b/build/gabi++/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('gabi++')
 
 SOURCES += [
--- a/build/gecko_templates.mozbuild
+++ b/build/gecko_templates.mozbuild
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 @template
 def GeckoBinary(linkage='dependent', msvcrt='dynamic', mozglue=None):
     '''Template for Gecko-related binaries.
--- a/build/gyp.mozbuild
+++ b/build/gyp.mozbuild
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 gyp_vars = {
     'lsan': 0,
     'asan': 0,
--- a/build/moz.build
+++ b/build/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 with Files('**'):
     BUG_COMPONENT = ('Core', 'Build Config')
 
--- a/build/moz.configure/android-ndk.configure
+++ b/build/moz.configure/android-ndk.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 
 js_option('--with-android-ndk', nargs=1,
           help='location where the Android NDK can be found')
--- a/build/moz.configure/checks.configure
+++ b/build/moz.configure/checks.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # Templates implementing some generic checks.
 # ==============================================================
 
--- a/build/moz.configure/init.configure
+++ b/build/moz.configure/init.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 include('util.configure')
 include('checks.configure')
 
--- a/build/moz.configure/java.configure
+++ b/build/moz.configure/java.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 
 # Java detection
 # ========================================================
--- a/build/moz.configure/memory.configure
+++ b/build/moz.configure/memory.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 
 option(env='MOZ_JEMALLOC4', help='Enable jemalloc 4')
 imply_option('--enable-jemalloc', depends_if('MOZ_JEMALLOC4')(lambda x: '4'))
--- a/build/moz.configure/old.configure
+++ b/build/moz.configure/old.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 @imports('codecs')
 @imports('sys')
 def encoded_open(path, mode):
--- a/build/moz.configure/pkg.configure
+++ b/build/moz.configure/pkg.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 pkg_config = check_prog('PKG_CONFIG', ('pkg-config',), allow_missing=True)
 
 @depends_if(pkg_config)
--- a/build/moz.configure/rust.configure
+++ b/build/moz.configure/rust.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 option('--enable-rust', help='Include Rust language sources')
 
 @depends('--enable-rust')
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # yasm detection
 # ==============================================================
 yasm = check_prog('YASM', ['yasm'], allow_missing=True)
--- a/build/moz.configure/util.configure
+++ b/build/moz.configure/util.configure
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 @imports('sys')
 def die(*args):
     'Print an error and terminate configure.'
--- a/build/stlport/moz.build
+++ b/build/stlport/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('stlport')
 # Keep the same name as the NDK-provided library, while using a shorter
 # name for the Library for convenience in moz.build.
--- a/build/templates.mozbuild
+++ b/build/templates.mozbuild
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 @template
 def Binary():
     '''Generic template for target binaries. Meant to be used by other
--- a/build/test_templates.mozbuild
+++ b/build/test_templates.mozbuild
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 @template
 def GeneratedTestCertificate(name):
     if not CONFIG['COMPILE_ENVIRONMENT']:
--- a/build/unix/elfhack/inject/moz.build
+++ b/build/unix/elfhack/inject/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # dummy library name to avoid skipping building the source here, which
 # we only need the object for.
 Library('elfhack_inject')
--- a/build/unix/elfhack/moz.build
+++ b/build/unix/elfhack/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIST_INSTALL = False
 DIRS += ['inject']
 
--- a/build/unix/moz.build
+++ b/build/unix/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_LIBSTDCXX_TARGET_VERSION'] or CONFIG['MOZ_LIBSTDCXX_HOST_VERSION']:
     DIRS += ['stdc++compat']
 
--- a/build/unix/stdc++compat/moz.build
+++ b/build/unix/stdc++compat/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_LIBSTDCXX_TARGET_VERSION']:
     Library('stdc++compat')
     SOURCES += ['stdc++compat.cpp']
--- a/build/win32/crashinjectdll/moz.build
+++ b/build/win32/crashinjectdll/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 SOURCES += [
     'crashinjectdll.cpp',
 ]
--- a/build/win32/moz.build
+++ b/build/win32/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 TEST_DIRS += ['crashinjectdll']
 
 if CONFIG['ENABLE_TESTS']:
--- a/caps/moz.build
+++ b/caps/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 MOCHITEST_MANIFESTS += ['tests/mochitest/mochitest.ini']
 MOCHITEST_CHROME_MANIFESTS += ['tests/mochitest/chrome.ini']
 BROWSER_CHROME_MANIFESTS += ['tests/mochitest/browser.ini']
--- a/caps/tests/gtest/moz.build
+++ b/caps/tests/gtest/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 UNIFIED_SOURCES += [
     'TestOriginAttributes.cpp'
 ]
--- a/chrome/moz.build
+++ b/chrome/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 TEST_DIRS += ['test']
 
 XPIDL_SOURCES += [
--- a/chrome/test/moz.build
+++ b/chrome/test/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += [
     'unit/xpcshell.ini',
     'unit_ipc/xpcshell.ini',
--- a/config/external/fdlibm/moz.build
+++ b/config/external/fdlibm/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('fdlibm')
 
 with Files('**'):
--- a/config/external/ffi/moz.build
+++ b/config/external/ffi/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('ffi')
 
 if CONFIG['MOZ_SYSTEM_FFI']:
--- a/config/external/freetype2/moz.build
+++ b/config/external/freetype2/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('freetype')
 
 if CONFIG['MOZ_TREE_FREETYPE']:
--- a/config/external/icu/common/moz.build
+++ b/config/external/icu/common/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('icuuc')
 FINAL_LIBRARY = 'icu'
 
--- a/config/external/icu/data/moz.build
+++ b/config/external/icu/data/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_ICU_DATA_ARCHIVE']:
     # Copy the pre-built ICU data file to dist/bin.
     FINAL_TARGET_FILES += [CONFIG['ICU_DATA_FILE']]
--- a/config/external/icu/defs.mozbuild
+++ b/config/external/icu/defs.mozbuild
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DEFINES.update(
     # Don't use icu namespace automatically in client code.
     U_USING_ICU_NAMESPACE = 0,
--- a/config/external/icu/i18n/moz.build
+++ b/config/external/icu/i18n/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('icui18n')
 FINAL_LIBRARY = 'icu'
 
--- a/config/external/icu/moz.build
+++ b/config/external/icu/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('icu')
 
 if CONFIG['MOZ_SYSTEM_ICU']:
--- a/config/external/icu/stubdata/moz.build
+++ b/config/external/icu/stubdata/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # This builds the ICU stubdata library, since we are shipping ICU
 # data in a separate data file. ICU needs a data symbol to link against
 # even if you're loading its data from a file.
--- a/config/external/lgpllibs/moz.build
+++ b/config/external/lgpllibs/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # The lgpllibs library stores symbols from third-party LGPL licensed libraries,
 # such as libav and libsoundtouch. It fulfills the requirement of dynamically
 # linking these symbols into gecko.
--- a/config/external/moz.build
+++ b/config/external/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 external_dirs = []
 
 DIRS += [
--- a/config/external/nspr/ds/moz.build
+++ b/config/external/nspr/ds/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_FOLD_LIBS']:
     Library('plds4')
 else:
--- a/config/external/nspr/libc/moz.build
+++ b/config/external/nspr/libc/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_FOLD_LIBS']:
     Library('plc4')
 else:
--- a/config/external/nspr/moz.build
+++ b/config/external/nspr/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('nspr')
 
 if CONFIG['MOZ_BUILD_NSPR']:
--- a/config/external/nspr/pr/moz.build
+++ b/config/external/nspr/pr/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_FOLD_LIBS']:
     Library('nspr4')
 else:
--- a/config/external/nss/crmf/moz.build
+++ b/config/external/nss/crmf/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('crmf')
 
 if CONFIG['MOZ_SYSTEM_NSS']:
--- a/config/external/nss/moz.build
+++ b/config/external/nss/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['crmf']
 
 if CONFIG['MOZ_SYSTEM_NSS']:
--- a/config/external/sqlite/moz.build
+++ b/config/external/sqlite/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_SYSTEM_SQLITE']:
     Library('sqlite')
     OS_LIBS += CONFIG['SQLITE_LIBS']
--- a/config/external/zlib/moz.build
+++ b/config/external/zlib/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 Library('zlib')
 
 if CONFIG['MOZ_SYSTEM_ZLIB']:
--- a/config/makefiles/test/moz.build
+++ b/config/makefiles/test/moz.build
@@ -1,6 +1,6 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
--- a/config/moz.build
+++ b/config/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 with Files('**'):
     BUG_COMPONENT = ('Core', 'Build Config')
 
--- a/config/tests/makefiles/autodeps/moz.build
+++ b/config/tests/makefiles/autodeps/moz.build
@@ -1,6 +1,6 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
--- a/config/tests/src-simple/moz.build
+++ b/config/tests/src-simple/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/db/sqlite3/src/moz.build
+++ b/db/sqlite3/src/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 NO_VISIBILITY_FLAGS = True
 
 EXPORTS += [
     'sqlite3.h',
--- a/devtools/client/aboutdebugging/moz.build
+++ b/devtools/client/aboutdebugging/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'components',
     'modules',
--- a/devtools/client/animationinspector/moz.build
+++ b/devtools/client/animationinspector/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
 
--- a/devtools/client/definitions.js
+++ b/devtools/client/definitions.js
@@ -58,17 +58,17 @@ var Tools = {};
 exports.Tools = Tools;
 
 // Definitions
 Tools.options = {
   id: "options",
   ordinal: 0,
   url: "chrome://devtools/content/framework/toolbox-options.xhtml",
   icon: "chrome://devtools/skin/images/tool-options.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   bgTheme: "theme-body",
   label: l10n("options.label", toolboxStrings),
   iconOnly: true,
   panelLabel: l10n("options.panelLabel", toolboxStrings),
   tooltip: l10n("optionsButton.tooltip", toolboxStrings),
   inMenu: false,
 
   isTargetSupported: function () {
@@ -82,17 +82,17 @@ Tools.options = {
 
 Tools.inspector = {
   id: "inspector",
   accesskey: l10n("inspector.accesskey", inspectorStrings),
   key: l10n("inspector.commandkey", inspectorStrings),
   ordinal: 1,
   modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   icon: "chrome://devtools/skin/images/tool-inspector.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/inspector/inspector.xul",
   label: l10n("inspector.label", inspectorStrings),
   panelLabel: l10n("inspector.panelLabel", inspectorStrings),
   get tooltip() {
     return l10n("inspector.tooltip2", inspectorStrings,
     (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") + this.key);
   },
   inMenu: true,
@@ -118,17 +118,17 @@ Tools.inspector = {
 
 Tools.webConsole = {
   id: "webconsole",
   key: l10n("cmd.commandkey", webConsoleStrings),
   accesskey: l10n("webConsoleCmd.accesskey", webConsoleStrings),
   modifiers: Services.appinfo.OS == "Darwin" ? "accel,alt" : "accel,shift",
   ordinal: 2,
   icon: "chrome://devtools/skin/images/tool-webconsole.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/webconsole/webconsole.xul",
   label: l10n("ToolboxTabWebconsole.label", webConsoleStrings),
   menuLabel: l10n("MenuWebconsole.label", webConsoleStrings),
   panelLabel: l10n("ToolboxWebConsole.panelLabel", webConsoleStrings),
   get tooltip() {
     return l10n("ToolboxWebconsole.tooltip2", webConsoleStrings,
     (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") + this.key);
   },
@@ -156,17 +156,17 @@ Tools.webConsole = {
 
 Tools.jsdebugger = {
   id: "jsdebugger",
   key: l10n("debuggerMenu.commandkey", debuggerStrings),
   accesskey: l10n("debuggerMenu.accesskey", debuggerStrings),
   modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   ordinal: 3,
   icon: "chrome://devtools/skin/images/tool-debugger.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   highlightedicon: "chrome://devtools/skin/images/tool-debugger-paused.svg",
   url: "chrome://devtools/content/debugger/debugger.xul",
   label: l10n("ToolboxDebugger.label", debuggerStrings),
   panelLabel: l10n("ToolboxDebugger.panelLabel", debuggerStrings),
   get tooltip() {
     return l10n("ToolboxDebugger.tooltip2", debuggerStrings,
     (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") + this.key);
   },
@@ -185,17 +185,17 @@ Tools.jsdebugger = {
 Tools.styleEditor = {
   id: "styleeditor",
   key: l10n("open.commandkey", styleEditorStrings),
   ordinal: 4,
   visibilityswitch: "devtools.styleeditor.enabled",
   accesskey: l10n("open.accesskey", styleEditorStrings),
   modifiers: "shift",
   icon: "chrome://devtools/skin/images/tool-styleeditor.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/styleeditor/styleeditor.xul",
   label: l10n("ToolboxStyleEditor.label", styleEditorStrings),
   panelLabel: l10n("ToolboxStyleEditor.panelLabel", styleEditorStrings),
   get tooltip() {
     return l10n("ToolboxStyleEditor.tooltip3", styleEditorStrings,
     "Shift+" + functionkey(this.key));
   },
   inMenu: true,
@@ -210,17 +210,17 @@ Tools.styleEditor = {
   }
 };
 
 Tools.shaderEditor = {
   id: "shadereditor",
   ordinal: 5,
   visibilityswitch: "devtools.shadereditor.enabled",
   icon: "chrome://devtools/skin/images/tool-shadereditor.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/shadereditor/shadereditor.xul",
   label: l10n("ToolboxShaderEditor.label", shaderEditorStrings),
   panelLabel: l10n("ToolboxShaderEditor.panelLabel", shaderEditorStrings),
   tooltip: l10n("ToolboxShaderEditor.tooltip", shaderEditorStrings),
 
   isTargetSupported: function (target) {
     return target.hasActor("webgl") && !target.chrome;
   },
@@ -230,17 +230,17 @@ Tools.shaderEditor = {
   }
 };
 
 Tools.canvasDebugger = {
   id: "canvasdebugger",
   ordinal: 6,
   visibilityswitch: "devtools.canvasdebugger.enabled",
   icon: "chrome://devtools/skin/images/tool-canvas.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/canvasdebugger/canvasdebugger.xul",
   label: l10n("ToolboxCanvasDebugger.label", canvasDebuggerStrings),
   panelLabel: l10n("ToolboxCanvasDebugger.panelLabel", canvasDebuggerStrings),
   tooltip: l10n("ToolboxCanvasDebugger.tooltip", canvasDebuggerStrings),
 
   // Hide the Canvas Debugger in the Add-on Debugger and Browser Toolbox
   // (bug 1047520).
   isTargetSupported: function (target) {
@@ -251,17 +251,17 @@ Tools.canvasDebugger = {
     return new CanvasDebuggerPanel(iframeWindow, toolbox);
   }
 };
 
 Tools.performance = {
   id: "performance",
   ordinal: 7,
   icon: "chrome://devtools/skin/images/tool-profiler.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   highlightedicon: "chrome://devtools/skin/images/tool-profiler-active.svg",
   url: "chrome://devtools/content/performance/performance.xul",
   visibilityswitch: "devtools.performance.enabled",
   label: l10n("performance.label", performanceStrings),
   panelLabel: l10n("performance.panelLabel", performanceStrings),
   get tooltip() {
     return l10n("performance.tooltip", performanceStrings,
     "Shift+" + functionkey(this.key));
@@ -279,42 +279,42 @@ Tools.performance = {
     return new PerformancePanel(frame, target);
   }
 };
 
 Tools.memory = {
   id: "memory",
   ordinal: 8,
   icon: "chrome://devtools/skin/images/tool-memory.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   highlightedicon: "chrome://devtools/skin/images/tool-memory-active.svg",
   url: "chrome://devtools/content/memory/memory.xhtml",
   visibilityswitch: "devtools.memory.enabled",
   label: l10n("memory.label", memoryStrings),
   panelLabel: l10n("memory.panelLabel", memoryStrings),
   tooltip: l10n("memory.tooltip", memoryStrings),
 
   isTargetSupported: function (target) {
-    return target.getTrait("heapSnapshots");
+    return target.getTrait("heapSnapshots") && !target.isAddon;
   },
 
   build: function (frame, target) {
     return new MemoryPanel(frame, target);
   }
 };
 
 Tools.netMonitor = {
   id: "netmonitor",
   accesskey: l10n("netmonitor.accesskey", netMonitorStrings),
   key: l10n("netmonitor.commandkey", netMonitorStrings),
   ordinal: 9,
   modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   visibilityswitch: "devtools.netmonitor.enabled",
   icon: "chrome://devtools/skin/images/tool-network.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/netmonitor/netmonitor.xul",
   label: l10n("netmonitor.label", netMonitorStrings),
   panelLabel: l10n("netmonitor.panelLabel", netMonitorStrings),
   get tooltip() {
     return l10n("netmonitor.tooltip2", netMonitorStrings,
     (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") + this.key);
   },
   inMenu: true,
@@ -331,17 +331,17 @@ Tools.netMonitor = {
 Tools.storage = {
   id: "storage",
   key: l10n("storage.commandkey", storageStrings),
   ordinal: 10,
   accesskey: l10n("storage.accesskey", storageStrings),
   modifiers: "shift",
   visibilityswitch: "devtools.storage.enabled",
   icon: "chrome://devtools/skin/images/tool-storage.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/storage/storage.xul",
   label: l10n("storage.label", storageStrings),
   menuLabel: l10n("storage.menuLabel", storageStrings),
   panelLabel: l10n("storage.panelLabel", storageStrings),
   get tooltip() {
     return l10n("storage.tooltip3", storageStrings,
     "Shift+" + functionkey(this.key));
   },
@@ -357,17 +357,17 @@ Tools.storage = {
   }
 };
 
 Tools.webAudioEditor = {
   id: "webaudioeditor",
   ordinal: 11,
   visibilityswitch: "devtools.webaudioeditor.enabled",
   icon: "chrome://devtools/skin/images/tool-webaudio.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/webaudioeditor/webaudioeditor.xul",
   label: l10n("ToolboxWebAudioEditor1.label", webAudioEditorStrings),
   panelLabel: l10n("ToolboxWebAudioEditor1.panelLabel", webAudioEditorStrings),
   tooltip: l10n("ToolboxWebAudioEditor1.tooltip", webAudioEditorStrings),
 
   isTargetSupported: function (target) {
     return !target.chrome && target.hasActor("webaudio");
   },
@@ -377,17 +377,17 @@ Tools.webAudioEditor = {
   }
 };
 
 Tools.scratchpad = {
   id: "scratchpad",
   ordinal: 12,
   visibilityswitch: "devtools.scratchpad.enabled",
   icon: "chrome://devtools/skin/images/tool-scratchpad.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/scratchpad/scratchpad.xul",
   label: l10n("scratchpad.label", scratchpadStrings),
   panelLabel: l10n("scratchpad.panelLabel", scratchpadStrings),
   tooltip: l10n("scratchpad.tooltip", scratchpadStrings),
   inMenu: false,
   commands: "devtools/client/scratchpad/scratchpad-commands",
 
   isTargetSupported: function (target) {
@@ -402,17 +402,17 @@ Tools.scratchpad = {
 Tools.dom = {
   id: "dom",
   accesskey: l10n("dom.accesskey", domStrings),
   key: l10n("dom.commandkey", domStrings),
   ordinal: 13,
   modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   visibilityswitch: "devtools.dom.enabled",
   icon: "chrome://devtools/skin/images/tool-dom.svg",
-  invertIconForLightTheme: true,
+  invertIconForDarkTheme: true,
   url: "chrome://devtools/content/dom/dom.html",
   label: l10n("dom.label", domStrings),
   panelLabel: l10n("dom.panelLabel", domStrings),
   get tooltip() {
     return l10n("dom.tooltip", domStrings,
     (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") + this.key);
   },
   inMenu: true,
--- a/devtools/client/eyedropper/moz.build
+++ b/devtools/client/eyedropper/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'commands.js',
     'eyedropper-child.js',
--- a/devtools/client/framework/moz.build
+++ b/devtools/client/framework/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 TEST_HARNESS_FILES.xpcshell.devtools.client.framework.test += [
     'test/shared-redux-head.js',
--- a/devtools/client/framework/toolbox.js
+++ b/devtools/client/framework/toolbox.js
@@ -1098,17 +1098,19 @@ Toolbox.prototype = {
     // the devtools-tab class replaces the radio XBL binding with its base
     // binding (the control-item binding).
     radio.className = "devtools-tab";
     radio.id = "toolbox-tab-" + id;
     radio.setAttribute("toolid", id);
     radio.setAttribute("ordinal", toolDefinition.ordinal);
     radio.setAttribute("tooltiptext", toolDefinition.tooltip);
     if (toolDefinition.invertIconForLightTheme) {
-      radio.setAttribute("icon-invertable", "true");
+      radio.setAttribute("icon-invertable", "light-theme");
+    } else if (toolDefinition.invertIconForDarkTheme) {
+      radio.setAttribute("icon-invertable", "dark-theme");
     }
 
     radio.addEventListener("command", () => {
       this.selectTool(id);
     });
 
     // spacer lets us center the image and label, while allowing cropping
     let spacer = this.doc.createElement("spacer");
--- a/devtools/client/inspector/breadcrumbs.js
+++ b/devtools/client/inspector/breadcrumbs.js
@@ -881,11 +881,16 @@ HTMLBreadcrumbs.prototype = {
 
     this.updateSelectors();
 
     // Make sure the selected node and its neighbours are visible.
     waitForTick().then(() => {
       this.scroll();
       this.inspector.emit("breadcrumbs-updated", this.selection.nodeFront);
       doneUpdating();
+    }, e => {
+      // Only log this as an error if we haven't been destroyed in the meantime.
+      if (!this.isDestroyed) {
+        console.error(e);
+      }
     });
   }
 };
--- a/devtools/client/inspector/components/moz.build
+++ b/devtools/client/inspector/components/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'inspector-tab-panel.css',
     'inspector-tab-panel.js',
--- a/devtools/client/inspector/computed/moz.build
+++ b/devtools/client/inspector/computed/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'computed.js',
 )
--- a/devtools/client/inspector/fonts/moz.build
+++ b/devtools/client/inspector/fonts/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'fonts.js',
 )
--- a/devtools/client/inspector/inspector-panel.js
+++ b/devtools/client/inspector/inspector-panel.js
@@ -86,25 +86,25 @@ function InspectorPanel(iframeWindow, to
   this._toolbox = toolbox;
   this._target = toolbox._target;
   this.panelDoc = iframeWindow.document;
   this.panelWin = iframeWindow;
   this.panelWin.inspector = this;
 
   this.nodeMenuTriggerInfo = null;
 
+  this._handleRejectionIfNotDestroyed = this._handleRejectionIfNotDestroyed.bind(this);
   this._onBeforeNavigate = this._onBeforeNavigate.bind(this);
   this.onNewRoot = this.onNewRoot.bind(this);
   this._onContextMenu = this._onContextMenu.bind(this);
   this._updateSearchResultsLabel = this._updateSearchResultsLabel.bind(this);
   this.onNewSelection = this.onNewSelection.bind(this);
   this.onBeforeNewSelection = this.onBeforeNewSelection.bind(this);
   this.onDetached = this.onDetached.bind(this);
-  this.onPaneToggleButtonActivated = this.onPaneToggleButtonActivated.bind(this);
-  this.onPaneToggleButtonPressed = this.onPaneToggleButtonPressed.bind(this);
+  this.onPaneToggleButtonClicked = this.onPaneToggleButtonClicked.bind(this);
   this._onMarkupFrameLoad = this._onMarkupFrameLoad.bind(this);
 
   let doc = this.panelDoc;
 
   // Handle 'Add Node' toolbar button.
   this.addNode = this.addNode.bind(this);
   this.addNodeButton = doc.getElementById("inspector-element-add-button");
   this.addNodeButton.addEventListener("click", this.addNode);
@@ -162,16 +162,28 @@ InspectorPanel.prototype = {
     return this._target.client.traits.getUsedFontFaces;
   },
 
   get canPasteInnerOrAdjacentHTML() {
     return this._target.client.traits.pasteHTML;
   },
 
   /**
+   * Handle promise rejections for various asynchronous actions, and only log errors if
+   * the inspector panel still exists.
+   * This is useful to silence useless errors that happen when the inspector is closed
+   * while still initializing (and making protocol requests).
+   */
+  _handleRejectionIfNotDestroyed: function (e) {
+    if (!this._panelDestroyer) {
+      console.error(e);
+    }
+  },
+
+  /**
    * Figure out what features the backend supports
    */
   _detectActorFeatures: function () {
     this._supportsDuplicateNode = false;
     this._supportsScrollIntoView = false;
     this._supportsResolveRelativeURL = false;
 
     return promise.all([
@@ -253,17 +265,17 @@ InspectorPanel.prototype = {
     this._destroyMarkup();
     this.isDirty = false;
     this._pendingSelection = null;
   },
 
   _getPageStyle: function () {
     return this._toolbox.inspector.getPageStyle().then(pageStyle => {
       this.pageStyle = pageStyle;
-    });
+    }, this._handleRejectionIfNotDestroyed);
   },
 
   /**
    * Return a promise that will resolve to the default node for selection.
    */
   _getDefaultNodeForSelection: function () {
     if (this._defaultNode) {
       return this._defaultNode;
@@ -446,66 +458,75 @@ InspectorPanel.prototype = {
         strings.GetStringFromName("inspector.sidebar.fontInspectorTitle"),
         defaultTab == "fontinspector");
 
       this.fontInspector = new FontInspector(this, this.panelWin);
       this.sidebar.toggleTab(true, "fontinspector");
     }
 
     this.setupSidebarToggle();
-    this.setupSidebarWidth();
+    this.setupSidebarSize();
 
     this.sidebar.show(defaultTab);
   },
 
   /**
-   * Sidebar width is currently driven by vbox.inspector-sidebar-container
-   * element, which is located at the left side of the side bar splitter.
-   * It's width is changed by the splitter and stored into preferences.
+   * Sidebar size is currently driven by vbox.inspector-sidebar-container
+   * element, which is located at the left/bottom side of the side bar splitter.
+   * Its size is changed by the splitter and stored into preferences.
    * As soon as bug 1260552 is fixed and new HTML based splitter in place
-   * the width can be driven by div.inspector-sidebar element. This element
-   * represents the ToolSidebar and so, the entire logic related to width
+   * the size can be driven by div.inspector-sidebar element. This element
+   * represents the ToolSidebar and so, the entire logic related to size
    * persistence can be done inside the ToolSidebar.
    */
-  setupSidebarWidth: function () {
+  setupSidebarSize: function () {
     let sidePaneContainer = this.panelDoc.querySelector(
       "#inspector-sidebar-container");
 
     this.sidebar.on("show", () => {
       try {
         sidePaneContainer.width = Services.prefs.getIntPref(
           "devtools.toolsidebar-width.inspector");
+        sidePaneContainer.height = Services.prefs.getIntPref(
+          "devtools.toolsidebar-height.inspector");
       } catch (e) {
         // The default width is the min-width set in CSS
         // for #inspector-sidebar-container
+        // Set width and height of the sidebar container. Only one
+        // value is really useful at a time depending on the current
+        // toolbox orientation and having both doesn't break anything.
         sidePaneContainer.width = 450;
+        sidePaneContainer.height = 450;
       }
     });
 
     this.sidebar.on("hide", () => {
       Services.prefs.setIntPref("devtools.toolsidebar-width.inspector",
         sidePaneContainer.width);
+      Services.prefs.setIntPref("devtools.toolsidebar-height.inspector",
+        sidePaneContainer.height);
     });
 
     this.sidebar.on("destroy", () => {
       Services.prefs.setIntPref("devtools.toolsidebar-width.inspector",
         sidePaneContainer.width);
+      Services.prefs.setIntPref("devtools.toolsidebar-height.inspector",
+        sidePaneContainer.height);
     });
   },
 
   /**
    * Add the expand/collapse behavior for the sidebar panel.
    */
   setupSidebarToggle: function () {
     let SidebarToggle = this.React.createFactory(this.browserRequire(
       "devtools/client/shared/components/sidebar-toggle"));
 
     let sidebarToggle = SidebarToggle({
-      onClick: this.onPaneToggleButtonActivated,
-      onKeyDown: this.onPaneToggleButtonPressed,
+      onClick: this.onPaneToggleButtonClicked,
       collapsed: false,
       expandPaneTitle: strings.GetStringFromName("inspector.expandPane"),
       collapsePaneTitle: strings.GetStringFromName("inspector.collapsePane"),
     });
 
     let parentBox = this.panelDoc.getElementById("inspector-sidebar-toggle-box");
     this._sidebarToggle = this.ReactDOM.render(sidebarToggle, parentBox);
   },
@@ -533,17 +554,18 @@ InspectorPanel.prototype = {
         if (!this.markup) {
           return;
         }
         this.markup.expandNode(this.selection.nodeFront);
         this.emit("new-root");
       });
     };
     this._pendingSelection = onNodeSelected;
-    this._getDefaultNodeForSelection().then(onNodeSelected, console.error);
+    this._getDefaultNodeForSelection()
+        .then(onNodeSelected, this._handleRejectionIfNotDestroyed);
   },
 
   _selectionCssSelector: null,
 
   /**
    * Set the currently selected node unique css selector.
    * Will store the current target url along with it to allow pre-selection at
    * reload
@@ -612,26 +634,17 @@ InspectorPanel.prototype = {
     }
 
     // On any new selection made by the user, store the unique css selector
     // of the selected node so it can be restored after reload of the same page
     if (this.canGetUniqueSelector &&
         this.selection.isElementNode()) {
       selection.getUniqueSelector().then(selector => {
         this.selectionCssSelector = selector;
-      }).then(null, e => {
-        // Only log this as an error if the panel hasn't been destroyed in the
-        // meantime.
-        if (!this._panelDestroyer) {
-          console.error(e);
-        } else {
-          console.warn("Could not set the unique selector for the newly " +
-            "selected node, the inspector was destroyed.");
-        }
-      });
+      }, this._handleRejectionIfNotDestroyed);
     }
 
     let selfUpdate = this.updating("inspector-panel");
     executeSoon(() => {
       try {
         selfUpdate(selection);
       } catch (ex) {
         console.error(ex);
@@ -1198,47 +1211,33 @@ InspectorPanel.prototype = {
     }
 
     this._markupBox = null;
 
     return destroyPromise;
   },
 
   /**
-  * When the pane toggle button is pressed with space and return keys toggle
-  * the pane, change the button state and tooltip.
-  */
-  onPaneToggleButtonPressed: function (event) {
-    if (ViewHelpers.isSpaceOrReturn(event)) {
-      this.onPaneToggleButtonActivated(event);
-    }
-  },
-
-  /**
-   * When the pane toggle button is clicked, toggle the pane, change the button
+   * When the pane toggle button is clicked or pressed, toggle the pane, change the button
    * state and tooltip.
    */
-  onPaneToggleButtonActivated: function (e) {
+  onPaneToggleButtonClicked: function (e) {
     let sidePaneContainer = this.panelDoc.querySelector("#inspector-sidebar-container");
     let isVisible = !this._sidebarToggle.state.collapsed;
-    let sidePane = this.panelDoc.querySelector(
-      "#inspector-sidebar .devtools-sidebar-tabs");
 
     // Make sure the sidebar has width and height attributes before collapsing
     // because ViewHelpers needs it.
     if (isVisible) {
       let rect = sidePaneContainer.getBoundingClientRect();
       if (!sidePaneContainer.hasAttribute("width")) {
         sidePaneContainer.setAttribute("width", rect.width);
-        sidePane.style.width = rect.width + "px";
       }
       // always refresh the height attribute before collapsing, it could have
       // been modified by resizing the container.
       sidePaneContainer.setAttribute("height", rect.height);
-      sidePane.style.height = rect.height + "px";
     }
 
     let onAnimationDone = () => {
       if (isVisible) {
         this._sidebarToggle.setState({collapsed: true});
       } else {
         this._sidebarToggle.setState({collapsed: false});
       }
@@ -1334,17 +1333,17 @@ InspectorPanel.prototype = {
 
   /**
    * Clear any pseudo-class locks applied to the current hierarchy.
    */
   clearPseudoClasses: function () {
     if (!this.walker) {
       return promise.resolve();
     }
-    return this.walker.clearPseudoClassLocks().then(null, console.error);
+    return this.walker.clearPseudoClassLocks().catch(this._handleRejectionIfNotDestroyed);
   },
 
   /**
    * Edit the outerHTML of the selected Node.
    */
   editHTML: function () {
     if (!this.selection.isNode()) {
       return;
--- a/devtools/client/inspector/layout/moz.build
+++ b/devtools/client/inspector/layout/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'layout.js',
 )
--- a/devtools/client/inspector/markup/markup.js
+++ b/devtools/client/inspector/markup/markup.js
@@ -114,16 +114,17 @@ function MarkupView(inspector, frame, co
   this.popup = new AutocompletePopup(inspector._toolbox, options);
 
   this.undo = new UndoStack();
   this.undo.installController(controllerWindow);
 
   this._containers = new Map();
 
   // Binding functions that need to be called in scope.
+  this._handleRejectionIfNotDestroyed = this._handleRejectionIfNotDestroyed.bind(this);
   this._mutationObserver = this._mutationObserver.bind(this);
   this._onDisplayChange = this._onDisplayChange.bind(this);
   this._onMouseClick = this._onMouseClick.bind(this);
   this._onMouseUp = this._onMouseUp.bind(this);
   this._onNewSelection = this._onNewSelection.bind(this);
   this._onCopy = this._onCopy.bind(this);
   this._onFocus = this._onFocus.bind(this);
   this._onMouseMove = this._onMouseMove.bind(this);
@@ -164,16 +165,28 @@ function MarkupView(inspector, frame, co
 MarkupView.prototype = {
   /**
    * How long does a node flash when it mutates (in ms).
    */
   CONTAINER_FLASHING_DURATION: 500,
 
   _selectedContainer: null,
 
+  /**
+   * Handle promise rejections for various asynchronous actions, and only log errors if
+   * the markup view still exists.
+   * This is useful to silence useless errors that happen when the markup view is
+   * destroyed while still initializing (and making protocol requests).
+   */
+  _handleRejectionIfNotDestroyed: function (e) {
+    if (!this._destroyer) {
+      console.error(e);
+    }
+  },
+
   _initTooltips: function () {
     this.eventDetailsTooltip = new HTMLTooltip(this._inspector.toolbox,
       {type: "arrow"});
     this.imagePreviewTooltip = new HTMLTooltip(this._inspector.toolbox,
       {type: "arrow", useXulWrapper: "true"});
     this._enableImagePreviewTooltip();
   },
 
@@ -586,24 +599,17 @@ MarkupView.prototype = {
       }
 
       // Mark the node as selected.
       this.markNodeAsSelected(selection.nodeFront);
 
       // Make sure the new selection is navigated to.
       this.maybeNavigateToNewSelection();
       return undefined;
-    }).catch(e => {
-      if (!this._destroyer) {
-        console.error(e);
-      } else {
-        console.warn("Could not mark node as selected, the markup-view was " +
-          "destroyed while showing the node.");
-      }
-    });
+    }).catch(this._handleRejectionIfNotDestroyed);
 
     promise.all([onShowBoxModel, onShow]).then(done);
   },
 
   /**
    * Maybe make selected the current node selection's MarkupContainer depending
    * on why the current node got selected.
    */
@@ -1026,18 +1032,18 @@ MarkupView.prototype = {
         container.childrenDirty = true;
         this._updateChildren(container, {flash: true});
         container.update();
       }
     }
 
     this._waitForChildren().then(() => {
       if (this._destroyer) {
-        console.warn("Could not fully update after markup mutations, " +
-          "the markup-view was destroyed while waiting for children.");
+        // Could not fully update after markup mutations, the markup-view was destroyed
+        // while waiting for children. Bail out silently.
         return;
       }
       this._flashMutatedNodes(mutations);
       this._inspector.emit("markupmutation", mutations);
 
       // Since the htmlEditor is absolutely positioned, a mutation may change
       // the location in which it should be shown.
       this.htmlEditor.refresh();
@@ -1126,36 +1132,27 @@ MarkupView.prototype = {
 
     return this._waitForChildren().then(() => {
       if (this._destroyer) {
         return promise.reject("markupview destroyed");
       }
       return this._ensureVisible(node);
     }).then(() => {
       scrollIntoViewIfNeeded(this.getContainer(node).editor.elt, centered);
-    }, e => {
-      // Only report this rejection as an error if the panel hasn't been
-      // destroyed in the meantime.
-      if (!this._destroyer) {
-        console.error(e);
-      } else {
-        console.warn("Could not show the node, the markup-view was destroyed " +
-          "while waiting for children");
-      }
-    });
+    }, this._handleRejectionIfNotDestroyed);
   },
 
   /**
    * Expand the container's children.
    */
   _expandContainer: function (container) {
     return this._updateChildren(container, {expand: true}).then(() => {
       if (this._destroyer) {
-        console.warn("Could not expand the node, the markup-view was " +
-          "destroyed");
+        // Could not expand the node, the markup-view was destroyed in the meantime. Just
+        // silently give up.
         return;
       }
       container.setExpanded(true);
     });
   },
 
   /**
    * Expand the node's children.
@@ -1682,17 +1679,17 @@ MarkupView.prototype = {
           if (!children.hasLast) {
             let span = this.template("more-nodes", data);
             fragment.appendChild(span);
           }
         }
 
         container.children.appendChild(fragment);
         return container;
-      }).then(null, console.error);
+      }).catch(this._handleRejectionIfNotDestroyed);
     this._queuedChildUpdates.set(container, updatePromise);
     return updatePromise;
   },
 
   _waitForChildren: function () {
     if (!this._queuedChildUpdates) {
       return promise.resolve(undefined);
     }
--- a/devtools/client/inspector/markup/moz.build
+++ b/devtools/client/inspector/markup/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'html-editor.js',
     'markup.js',
--- a/devtools/client/inspector/rules/models/moz.build
+++ b/devtools/client/inspector/rules/models/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'element-style.js',
     'rule.js',
--- a/devtools/client/inspector/rules/moz.build
+++ b/devtools/client/inspector/rules/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'models',
     'views',
--- a/devtools/client/inspector/shared/moz.build
+++ b/devtools/client/inspector/shared/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'dom-node-preview.js',
     'style-inspector-menu.js',
--- a/devtools/client/jsonview/components/moz.build
+++ b/devtools/client/jsonview/components/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'reps'
 ]
--- a/devtools/client/jsonview/components/reps/moz.build
+++ b/devtools/client/jsonview/components/reps/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'toolbar.js',
 )
--- a/devtools/client/jsonview/css/moz.build
+++ b/devtools/client/jsonview/css/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'controls.png',
--- a/devtools/client/jsonview/lib/moz.build
+++ b/devtools/client/jsonview/lib/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'require.js'
 )
--- a/devtools/client/jsonview/moz.build
+++ b/devtools/client/jsonview/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'components',
     'css',
--- a/devtools/client/locales/moz.build
+++ b/devtools/client/locales/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
--- a/devtools/client/moz.build
+++ b/devtools/client/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 include('../templates.mozbuild')
 
 DIRS += [
--- a/devtools/client/performance/legacy/moz.build
+++ b/devtools/client/performance/legacy/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'actors.js',
     'compatibility.js',
--- a/devtools/client/performance/test/helpers/moz.build
+++ b/devtools/client/performance/test/helpers/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'actions.js',
     'dom-utils.js',
--- a/devtools/client/preferences/devtools.js
+++ b/devtools/client/preferences/devtools.js
@@ -97,17 +97,17 @@ pref("devtools.debugger.promise", false)
 pref("devtools.debugger.ui.panes-workers-and-sources-width", 200);
 pref("devtools.debugger.ui.panes-instruments-width", 300);
 pref("devtools.debugger.ui.panes-visible-on-startup", false);
 pref("devtools.debugger.ui.variables-sorting-enabled", true);
 pref("devtools.debugger.ui.variables-only-enum-visible", false);
 pref("devtools.debugger.ui.variables-searchbox-visible", false);
 
 // Enable the Memory tools
-pref("devtools.memory.enabled", false);
+pref("devtools.memory.enabled", true);
 
 pref("devtools.memory.custom-census-displays", "{}");
 pref("devtools.memory.custom-label-displays", "{}");
 pref("devtools.memory.custom-tree-map-displays", "{}");
 
 pref("devtools.memory.max-individuals", 1000);
 pref("devtools.memory.max-retaining-paths", 10);
 
--- a/devtools/client/preferences/moz.build
+++ b/devtools/client/preferences/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JS_PREFERENCE_PP_FILES += [
     'devtools.js',
 ]
--- a/devtools/client/projecteditor/lib/helpers/moz.build
+++ b/devtools/client/projecteditor/lib/helpers/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'event.js',
     'file-picker.js',
--- a/devtools/client/projecteditor/lib/moz.build
+++ b/devtools/client/projecteditor/lib/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'helpers',
     'plugins',
--- a/devtools/client/projecteditor/lib/plugins/app-manager/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/app-manager/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'app-project-editor.js',
     'plugin.js',
--- a/devtools/client/projecteditor/lib/plugins/delete/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/delete/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'delete.js',
 )
--- a/devtools/client/projecteditor/lib/plugins/dirty/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/dirty/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'dirty.js',
 )
--- a/devtools/client/projecteditor/lib/plugins/image-view/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/image-view/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'image-editor.js',
     'plugin.js',
--- a/devtools/client/projecteditor/lib/plugins/logging/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/logging/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'logging.js',
 )
--- a/devtools/client/projecteditor/lib/plugins/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'app-manager',
     'delete',
--- a/devtools/client/projecteditor/lib/plugins/new/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/new/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'new.js',
 )
--- a/devtools/client/projecteditor/lib/plugins/rename/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/rename/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'rename.js',
 )
--- a/devtools/client/projecteditor/lib/plugins/save/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/save/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'save.js',
 )
--- a/devtools/client/projecteditor/lib/plugins/status-bar/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/status-bar/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'plugin.js',
 )
--- a/devtools/client/projecteditor/lib/stores/moz.build
+++ b/devtools/client/projecteditor/lib/stores/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'base.js',
     'local.js',
--- a/devtools/client/projecteditor/moz.build
+++ b/devtools/client/projecteditor/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += ['lib']
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
--- a/devtools/client/promisedebugger/moz.build
+++ b/devtools/client/promisedebugger/moz.build
@@ -1,8 +1,8 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
 )
--- a/devtools/client/responsive.html/actions/moz.build
+++ b/devtools/client/responsive.html/actions/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'devices.js',
     'index.js',
--- a/devtools/client/responsive.html/browser/moz.build
+++ b/devtools/client/responsive.html/browser/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'swap.js',
     'tunnel.js',
--- a/devtools/client/responsive.html/components/moz.build
+++ b/devtools/client/responsive.html/components/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'browser.js',
     'device-modal.js',
--- a/devtools/client/responsive.html/images/close.svg
+++ b/devtools/client/responsive.html/images/close.svg
@@ -1,11 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="16px" height="16px" viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#F5F5F5;}
-</style>
-<path class="st0" d="M9.1,9.2l4.6-4.6c0.3-0.3,0.3-0.6,0-0.9c-0.3-0.3-0.6-0.3-0.9,0L8.2,8.3L3.6,3.7C3.4,3.5,3,3.5,2.7,3.7
-	s-0.3,0.6,0,0.9l4.6,4.6l-4.6,4.6c-0.3,0.3-0.3,0.6,0,0.9s0.6,0.3,0.9,0l4.6-4.6l4.6,4.6c0.3,0.3,0.6,0.3,0.9,0
-	c0.3-0.3,0.3-0.6,0-0.9L9.1,9.2z"/>
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#0b0b0b">
+  <path d="M6.7 8l3.6-3.6c.2-.2.2-.5 0-.7-.2-.2-.5-.2-.7 0L6 7.3 2.4 3.7c-.2-.2-.5-.2-.7 0-.2.2-.2.5 0 .7L5.3 8l-3.6 3.6c-.2.2-.2.5 0 .7.2.2.5.2.7 0L6 8.7l3.6 3.6c.2.2.5.2.7 0 .2-.2.2-.5 0-.7L6.7 8z"/>
 </svg>
--- a/devtools/client/responsive.html/images/moz.build
+++ b/devtools/client/responsive.html/images/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'close.svg',
     'grippers.svg',
--- a/devtools/client/responsive.html/images/rotate-viewport.svg
+++ b/devtools/client/responsive.html/images/rotate-viewport.svg
@@ -1,16 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="16px" height="16px" viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#BABEC3;}
-</style>
-<path class="st0" d="M3.8,13.4c-1.2,0-3.4-0.6-3.7-2.8s1.3-3.3,2.1-3.5C2.4,7,2.6,7.2,2.7,7.4c0.1,0.2-0.1,0.4-0.3,0.5
-	c-0.1,0-1.8,0.6-1.6,2.7c0.2,1.5,1.6,1.9,2.4,2l-0.7-2.4c0-0.2,0.2-0.5,0.4-0.5c0.2-0.1,0.4,0,0.5,0.2l0.9,3c0,0.1,0,0.3-0.1,0.4
-	C4.1,13.4,4,13.4,3.8,13.4z"/>
-<path class="st0" d="M12.3,1.7c1.2,0,3.4,0.6,3.7,2.8c0.3,2.2-1.3,3.3-2.1,3.5c-0.2,0.1-0.4-0.1-0.5-0.3s0.1-0.4,0.3-0.5
-	c0.1,0,1.8-0.6,1.6-2.7c-0.2-1.5-1.6-1.9-2.4-2l0.7,2.4c0.1,0.2-0.1,0.4-0.3,0.5s-0.4-0.1-0.5-0.3l-0.9-3c0-0.1,0-0.3,0.1-0.4
-	C12,1.7,12.3,1.7,12.3,1.7z"/>
-<path class="st0" d="M9.6,2.5L4.3,4.1C4.1,4.2,3.9,4.5,4,4.9l2.5,8c0.1,0.3,0.4,0.6,0.8,0.5l5.2-1.6c0.3-0.1,0.6-0.5,0.4-0.8l-2.5-8
-	C10.4,2.9,9.7,2.4,9.6,2.5z M12.1,11.1l-5,1.5l-0.6-1.9l5-1.5L12.1,11.1z M11.3,8.5l-5,1.5L4.7,4.7l5-1.5L11.3,8.5z"/>
+<!-- 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/. -->
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
+  <path d="M3.8 13.4c-1.2 0-3.4-.6-3.7-2.8s1.3-3.3 2.1-3.5c.2-.1.4.1.5.3.1.2-.1.4-.3.5-.1 0-1.8.6-1.6 2.7.2 1.5 1.6 1.9 2.4 2l-.7-2.4c0-.2.2-.5.4-.5.2-.1.4 0 .5.2l.9 3c0 .1 0 .3-.1.4-.1.1-.2.1-.4.1zM12.3 1.7c1.2 0 3.4.6 3.7 2.8.3 2.2-1.3 3.3-2.1 3.5-.2.1-.4-.1-.5-.3s.1-.4.3-.5c.1 0 1.8-.6 1.6-2.7-.2-1.5-1.6-1.9-2.4-2l.7 2.4c.1.2-.1.4-.3.5s-.4-.1-.5-.3l-.9-3c0-.1 0-.3.1-.4h.3zM9.6 2.5L4.3 4.1c-.2.1-.4.4-.3.8l2.5 8c.1.3.4.6.8.5l5.2-1.6c.3-.1.6-.5.4-.8l-2.5-8c0-.1-.7-.6-.8-.5zm2.5 8.6l-5 1.5-.6-1.9 5-1.5.6 1.9zm-.8-2.6l-5 1.5-1.6-5.3 5-1.5 1.6 5.3z"/>
 </svg>
--- a/devtools/client/responsive.html/images/screenshot.svg
+++ b/devtools/client/responsive.html/images/screenshot.svg
@@ -1,13 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="16px" height="16px" viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#F5F5F5;}
-</style>
-<path class="st0" d="M14.4,4.1h-3l0-1.3c0-0.9-1.2-1.6-2.1-1.6H6.6c-0.9,0-1.9,0.7-1.9,1.6l0,1.3h-3c-0.9,0-1.6,0.7-1.6,1.6v7.4
-	c0,0.9,0.7,1.3,1.6,1.3h12.7c0.9,0,1.6-0.3,1.6-1.3V5.7C16,4.8,15.3,4.1,14.4,4.1z M14.8,13.2H1.2v-8h4.5l0-3h4.5l0,3h4.4L14.8,13.2
-	z"/>
-<path class="st0" d="M8,6.7c-1.3,0-2.4,1.1-2.4,2.4s1.1,2.4,2.4,2.4s2.4-1.1,2.4-2.4S9.3,6.7,8,6.7z M8,10.2c-0.7,0-1.2-0.5-1.2-1.1
-	S7.3,8,8,8s1.2,0.5,1.2,1.1S8.7,10.2,8,10.2z"/>
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#0b0b0b">
+  <path d="M14.4,4.1h-3l0-1.3c0-0.9-1.2-1.6-2.1-1.6H6.6c-0.9,0-1.9,0.7-1.9,1.6l0,1.3h-3c-0.9,0-1.6,0.7-1.6,1.6v7.4c0,0.9,0.7,1.3,1.6,1.3h12.7c0.9,0,1.6-0.3,1.6-1.3V5.7C16,4.8,15.3,4.1,14.4,4.1z M14.8,13.2H1.2v-8h4.5l0-3h4.5l0,3h4.4L14.8,13.2z"/>
+  <path d="M8,6.7c-1.3,0-2.4,1.1-2.4,2.4s1.1,2.4,2.4,2.4s2.4-1.1,2.4-2.4S9.3,6.7,8,6.7z M8,10.2c-0.7,0-1.2-0.5-1.2-1.1S7.3,8,8,8s1.2,0.5,1.2,1.1S8.7,10.2,8,10.2z"/>
 </svg>
--- a/devtools/client/responsive.html/images/touch-events.svg
+++ b/devtools/client/responsive.html/images/touch-events.svg
@@ -1,9 +1,6 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
-  <style type="text/css">
-    .st0{fill:#F5F5F5;}
-  </style>
-  <path class="st0" d="M12.5 5.3c-.2 0-.4 0-.6.1-.2-.6-.8-1-1.4-1-.3 0-.5.1-.8.2C9.4 4.2 9 4 8.6 4h-.4V1.5C8.2.7 7.5 0 6.7 0S5.2.7 5.2 1.5v6.6l-.7-.6c-.6-.6-1.6-.6-2.2 0-.5.6-.5 1.4-.1 2.1.3.4.6 1.1 1 1.8C4.2 13.6 5.3 16 7 16h3.9s3.1-1 3.1-4V6.7c.1-.8-.7-1.4-1.5-1.4zm.6 6.7c0 2-2.1 3-2.4 3H7c-1 0-2.1-2.4-2.9-4-.3-.8-.7-1.6-1-2-.2-.3-.2-.5-.1-.7.1-.1.2-.1.3-.1.1 0 .2 0 .3.1l1.5 1.5c.3.2.6.2.7.1.1 0 .4-.2.4-.5V1.5c0-.2.2-.4.5-.4s.5.2.5.4v5.3c0 .3.2.5.5.5s.5-.2.5-.5V5.5c0-.4.2-.5.5-.5.2 0 .5.2.5.4v2c-.1.3.2.6.4.6.3 0 .5-.2.5-.5V5.8c0-.2.2-.4.5-.4s.5.2.5.4v2.3c0 .3.2.5.5.5s.5-.2.5-.5V6.7c0-.2.2-.4.5-.4s.5.2.5.4V12z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#0b0b0b">
+  <path d="M12.5 5.3c-.2 0-.4 0-.6.1-.2-.6-.8-1-1.4-1-.3 0-.5.1-.8.2C9.4 4.2 9 4 8.6 4h-.4V1.5C8.2.7 7.5 0 6.7 0S5.2.7 5.2 1.5v6.6l-.7-.6c-.6-.6-1.6-.6-2.2 0-.5.6-.5 1.4-.1 2.1.3.4.6 1.1 1 1.8C4.2 13.6 5.3 16 7 16h3.9s3.1-1 3.1-4V6.7c.1-.8-.7-1.4-1.5-1.4zm.6 6.7c0 2-2.1 3-2.4 3H7c-1 0-2.1-2.4-2.9-4-.3-.8-.7-1.6-1-2-.2-.3-.2-.5-.1-.7.1-.1.2-.1.3-.1.1 0 .2 0 .3.1l1.5 1.5c.3.2.6.2.7.1.1 0 .4-.2.4-.5V1.5c0-.2.2-.4.5-.4s.5.2.5.4v5.3c0 .3.2.5.5.5s.5-.2.5-.5V5.5c0-.4.2-.5.5-.5.2 0 .5.2.5.4v2c-.1.3.2.6.4.6.3 0 .5-.2.5-.5V5.8c0-.2.2-.4.5-.4s.5.2.5.4v2.3c0 .3.2.5.5.5s.5-.2.5-.5V6.7c0-.2.2-.4.5-.4s.5.2.5.4V12z"/>
 </svg>
--- a/devtools/client/responsive.html/moz.build
+++ b/devtools/client/responsive.html/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'actions',
     'browser',
--- a/devtools/client/responsive.html/reducers/moz.build
+++ b/devtools/client/responsive.html/reducers/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'devices.js',
     'location.js',
--- a/devtools/client/responsive.html/utils/moz.build
+++ b/devtools/client/responsive.html/utils/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'e10s.js',
     'enum.js',
--- a/devtools/client/scratchpad/moz.build
+++ b/devtools/client/scratchpad/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'scratchpad-commands.js',
     'scratchpad-manager.jsm',
--- a/devtools/client/shared/components/moz.build
+++ b/devtools/client/shared/components/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'reps',
     'tabs',
--- a/devtools/client/shared/components/reps/grip.js
+++ b/devtools/client/shared/components/reps/grip.js
@@ -34,28 +34,20 @@ define(function (require, exports, modul
       if (this.props.objectLink) {
         return this.props.objectLink({
           object: object
         }, object.class);
       }
       return object.class || "Object";
     },
 
-    longPropIterator: function (object) {
+    safePropIterator: function (object, max) {
+      max = (typeof max === "undefined") ? 3 : max;
       try {
-        return this.propIterator(object, 100);
-      } catch (err) {
-        console.error(err);
-      }
-      return [];
-    },
-
-    shortPropIterator: function (object) {
-      try {
-        return this.propIterator(object, 3);
+        return this.propIterator(object, max);
       } catch (err) {
         console.error(err);
       }
       return [];
     },
 
     propIterator: function (object, max) {
       // Property filter. Show only interesting properties to the user.
@@ -168,19 +160,18 @@ define(function (require, exports, modul
         console.error(err);
       }
 
       return indexes;
     },
 
     render: function () {
       let object = this.props.object;
-      let props = (this.props.mode == "long") ?
-        this.longPropIterator(object) :
-        this.shortPropIterator(object);
+      let props = this.safePropIterator(object,
+        (this.props.mode == "long") ? 100 : 3);
 
       let objectLink = this.props.objectLink || span;
       if (this.props.mode == "tiny" || !props.length) {
         return (
           ObjectBox({className: "object"},
             this.getTitle(object),
             objectLink({
               className: "objectLeftBrace",
--- a/devtools/client/shared/components/reps/moz.build
+++ b/devtools/client/shared/components/reps/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'array.js',
     'attribute.js',
--- a/devtools/client/shared/components/reps/object.js
+++ b/devtools/client/shared/components/reps/object.js
@@ -31,28 +31,20 @@ define(function (require, exports, modul
       if (this.props.objectLink) {
         return this.props.objectLink({
           object: object
         }, object.class);
       }
       return "Object";
     },
 
-    longPropIterator: function (object) {
+    safePropIterator: function (object, max) {
+      max = (typeof max === "undefined") ? 3 : max;
       try {
-        return this.propIterator(object, 100);
-      } catch (err) {
-        console.error(err);
-      }
-      return [];
-    },
-
-    shortPropIterator: function (object) {
-      try {
-        return this.propIterator(object, 3);
+        return this.propIterator(object, max);
       } catch (err) {
         console.error(err);
       }
       return [];
     },
 
     propIterator: function (object, max) {
       let isInterestingProp = (t, value) => {
@@ -136,17 +128,17 @@ define(function (require, exports, modul
         console.error(err);
       }
 
       return props;
     },
 
     render: function () {
       let object = this.props.object;
-      let props = this.shortPropIterator(object);
+      let props = this.safePropIterator(object);
       let objectLink = this.props.objectLink || span;
 
       if (this.props.mode == "tiny" || !props.length) {
         return (
           ObjectBox({className: "object"},
             objectLink({className: "objectTitle"}, this.getTitle())
           )
         );
--- a/devtools/client/shared/components/tabs/moz.build
+++ b/devtools/client/shared/components/tabs/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'tabbar.css',
     'tabbar.js',
--- a/devtools/client/shared/moz.build
+++ b/devtools/client/shared/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
 
--- a/devtools/client/shared/redux/middleware/moz.build
+++ b/devtools/client/shared/redux/middleware/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'history.js',
     'log.js',
--- a/devtools/client/shared/redux/moz.build
+++ b/devtools/client/shared/redux/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'middleware',
 ]
--- a/devtools/client/shared/vendor/moz.build
+++ b/devtools/client/shared/vendor/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 modules = []
 modules += [
     'immutable.js'
 ]
--- a/devtools/client/shared/widgets/moz.build
+++ b/devtools/client/shared/widgets/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'tooltip',
 ]
--- a/devtools/client/shared/widgets/spectrum.css
+++ b/devtools/client/shared/widgets/spectrum.css
@@ -1,14 +1,15 @@
 /* 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/. */
 
 #eyedropper-button {
   margin-inline-start: 5px;
+  display: block;
 }
 
 #eyedropper-button::before {
   background-image: url("chrome://devtools/skin/images/command-eyedropper.svg");
 }
 
 /* Mix-in classes */
 
--- a/devtools/client/shared/widgets/tooltip/moz.build
+++ b/devtools/client/shared/widgets/tooltip/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'CssDocsTooltip.js',
     'EventTooltipHelper.js',
--- a/devtools/client/shims/moz.build
+++ b/devtools/client/shims/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # Unlike most DevTools build files, this file does not use DevToolsModules
 # because these files are here for add-on compatibility, and so they must be
 # installed to previously defined locations.
--- a/devtools/client/sourceeditor/moz.build
+++ b/devtools/client/sourceeditor/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'tern',
 ]
--- a/devtools/client/sourceeditor/tern/moz.build
+++ b/devtools/client/sourceeditor/tern/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
 
 DevToolsModules(
--- a/devtools/client/storage/moz.build
+++ b/devtools/client/storage/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 
 DevToolsModules(
--- a/devtools/client/styleeditor/moz.build
+++ b/devtools/client/styleeditor/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 
 DevToolsModules(
--- a/devtools/client/styleeditor/styleeditor.css
+++ b/devtools/client/styleeditor/styleeditor.css
@@ -126,26 +126,8 @@ li:hover > hgroup > .stylesheet-more > h
     -moz-box-orient: horizontal;
     -moz-box-flex: 1;
   }
 
   .stylesheet-more > spacer {
     -moz-box-flex: 0;
   }
 }
-
-.csscoverage-report-container {
-  -moz-box-flex: 1;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.csscoverage-report-content > * {
-  display: inline-block;
-}
-
-.csscoverage-report {
-  -moz-box-orient: horizontal;
-}
-
-.csscoverage-report .pie-table-chart-container {
-  -moz-box-orient: vertical;
-}
--- a/devtools/client/themes/audio/moz.build
+++ b/devtools/client/themes/audio/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'shutter.wav',
 )
--- a/devtools/client/themes/firebug-theme.css
+++ b/devtools/client/themes/firebug-theme.css
@@ -7,33 +7,16 @@
 @import url(common.css);
 @import url(light-theme.css);
 
 :root {
   font-size: 11px;
   font-family: var(--proportional-font-family);
 }
 
-/* Remove filters on firebug specific images */
-
-.theme-firebug .devtools-tabbar .devtools-button::before,
-.theme-firebug .devtools-option-toolbarbutton > image,
-.theme-firebug .command-button-invertable::before,
-.theme-firebug #sources-toolbar image,
-.theme-firebug [id$="pane-toggle"] > image,
-.theme-firebug [id$="pane-toggle"]::before,
-.theme-firebug .sidebar-toggle::before,
-.theme-firebug #element-picker::before,
-.theme-firebug #rewind-timeline::before,
-.theme-firebug #pause-resume-timeline::before,
-.theme-firebug #debugger-controls .toolbarbutton-icon,
-.theme-firebug #filter-button .toolbarbutton-icon {
-  filter: none !important;
-}
-
 /* CodeMirror Color Syntax */
 
 .theme-firebug .cm-keyword {color: BlueViolet; font-weight: bold;}
 .theme-firebug .cm-atom {color: #219;}
 .theme-firebug .cm-number {color: #164;}
 .theme-firebug .cm-def {color: #00f;}
 .theme-firebug .cm-variable {color: black;}
 .theme-firebug .cm-variable-2 {color: black;}
--- a/devtools/client/themes/images/add.svg
+++ b/devtools/client/themes/images/add.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M8.5 8.5V14a.5.5 0 1 1-1 0V8.5H2a.5.5 0 0 1 0-1h5.5V2a.5.5 0 0 1 1 0v5.5H14a.5.5 0 1 1 0 1H8.5z"/>
 </svg>
index 9ce5dd74eb33658133583ec6374e977ee155910f..3eed133af4d706589203ee96f6bcb80b11a26c09
GIT binary patch
literal 213
zc$@*%04o29P)<h;3K|Lk000e1NJLTq000;O001xu1^@s63y8X-0001-Nkl<ZScUD@
zAx^|l6ouihNe!uM#y2=pF(iy^JqrMbf`r-s5>PnouXtwx=M(SdzRSqS$X|J=feDuy
znekX73!Z9Z#dD2pc&U*cw;DNXWWsBW%y_Sn1s^rC;;TkBeAmd1dySkm@;km6k^@Is
zo<4FqrYk<H@^n?qc&p0ub$yiO>6e*)`YWzgd3t!Ir(=Hn=I8s!$bZWZ1_%z2O=?fK
P00000NkvXXu0mjfCmmUC
index 5f28c8b22468d19f16acd8852e9156287592a5b4..19af4c042e5f2184d8101b4724586b9ce4ad7671
GIT binary patch
literal 260
zc$@(Q0sH=mP)<h;3K|Lk000e1NJLTq000gE000mO1^@s6CX`M(0002XNkl<ZD3QgI
z!485j5Jblq4?t)s-5Rh&5J+z(CLa87J`fLDXbBbL#YuXayk=*2fWND0nj%f2!5BkJ
z@636t;{B*|RGwjsp)`pG`&>`ws8qZk?VAk^=|V&(rw=8x3ss8s001EbccCmpZK1v>
zlnb>&TweyjT!?et&ZD2mg|td;(};`ljGN0FkFkfhke|V2KE>X_SMpJOxPOGdT2APO
zQc4}Vp(gSoq3gP1r~sD?^=bjEh)^yIU{xvBdj(k0E@W(Y+j;^hGEC=k(LWpj0000<
KMNUMnLSTZM-)D^g
index 22c3c8667a06175365d75c2055ef74a7fd17763b..04370240132d434144f80e168e1e668fc2573c98
GIT binary patch
literal 627
zc$@)q0*w8MP)<h;3K|Lk000e1NJLTq000~S001Be1^@s60ks%H0006yNkl<ZNQv#$
zF>4e-6bJBs+?&~*d2eTTF}Hh{Q$Ip11T8ESEhL3Do*)WI8iP6P1UW=)B&LvnHW7O(
zQ6#xeu$B0MEClgvaw%@#%-zP)y#CLRnR)LGa8mzG5hbh4rr$KzP4%lP)5AugoRZa)
z%qS%@YJyg&-fG)u+_uqpZj{;dCs-4-%Jgu8&5dSkZck$=nNd#3S}3=a=_k`z+eYIq
z>1}Vwxp;+)-miga@*sruGP_w)>rV}2^(KHh5p&iK04(@&-ON6eu#(j~Z*DQquQHpx
z`c=k{0i5z;F1cS)>vs(!^#MR6hH_4>h?q^DhOjfv+>@{l>(5@Sa_$nd`BLjhtDggC
z`LMHje5<6^uiBfD-oFEAG31=PC}AnvEda3(TPot45>}G>b^)+rs3?kMHu}>vM#j7j
zVZGCQt)kY?+N`nq?!^E=#^N1>LI5PJB=w^xkcDz0=;+ws!A!6$>AduQj^ds5btJyr
zxs0xR-tS-;pdjk&&{<96>(F4+9G$c<m!%nWY+oWU7M)D@r5UVPef5sTq<mY(Ci+<j
z^==u~doxiYx*_e+jLZ<B)n?U(xU^055x#9RDd*x9>06q$PkWi&l)k0lKAn{G@up-(
z1)E0*{20>5+qTho(W>{M+~G<2u7o;g2ccYt^$YQ&R_z8s0LUp>YYGBDm-P0rKmf2-
zZA@X|t2wNS)!Qj-t{ea?IA;e<ut~18YPTtN6h@#!XXL^idQ$&Ve*v4<0-ZPc<u?ET
N002ovPDHLkV1m7^E{^~J
--- a/devtools/client/themes/images/clear.svg
+++ b/devtools/client/themes/images/clear.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M5 3h3V2c0-.003-3 0-3 0-.002 0 0 1 0 1zm-5 .5A.5.5 0 0 1 .494 3h12.012a.5.5 0 0 1 0 1H.494A.502.502 0 0 1 0 3.5zM4 3V2c0-.553.444-1 1-1h3c.552 0 1 .443 1 1v1H4zM5 11V6a.5.5 0 0 0-1 0v5a.5.5 0 1 0 1 0zM7 11V6a.5.5 0 0 0-1 0v5a.5.5 0 1 0 1 0zM9 11V6a.5.5 0 0 0-1 0v5a.5.5 0 1 0 1 0z"/>
   <path d="M3 4v9h7V4H3zm0-1h7a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
 </svg>
--- a/devtools/client/themes/images/close.svg
+++ b/devtools/client/themes/images/close.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M6.7 8l3.6-3.6c.2-.2.2-.5 0-.7-.2-.2-.5-.2-.7 0L6 7.3 2.4 3.7c-.2-.2-.5-.2-.7 0-.2.2-.2.5 0 .7L5.3 8l-3.6 3.6c-.2.2-.2.5 0 .7.2.2.5.2.7 0L6 8.7l3.6 3.6c.2.2.5.2.7 0 .2-.2.2-.5 0-.7L6.7 8z"/>
 </svg>
--- a/devtools/client/themes/images/command-console.svg
+++ b/devtools/client/themes/images/command-console.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M6.8 9.7c0-.2 0-.3-.2-.4L4.9 7.6c-.3-.3-.7-.3-.9 0s-.3.6 0 .9l1.3 1.4L4 11.3c-.3.3-.3.6 0 .9s.6.3.9 0l1.8-1.8c.1-.2.2-.5.1-.7z"/>
   <path d="M14.2 2H1.8c-.4 0-.8.4-.8.9v11.2c0 .4.3.9.8.9h12.4c.4 0 .8-.4.8-.9V2.9c0-.7-.6-.9-.8-.9zM14 14H2V6h12v8zm0-9H2V3h12v2z"/>
 </svg>
--- a/devtools/client/themes/images/command-eyedropper.svg
+++ b/devtools/client/themes/images/command-eyedropper.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M8.3 2.9l4.9 4.9c.2.2.5.4.8.1.2-.2.1-.5-.1-.8L11.6 5l1.8-1.8c.2-.2.4-.5.1-.8-.2-.2-.5-.1-.8.1L11 4.3l-2.1-2c-.2-.3-.5-.4-.8-.2-.2.3-.1.6.2.8zM10.4 7.4l-6.1 6-2.4.8.7-2.4 6.2-6.1-.7-.7L2 11c-.1.1-.2.3-.2.4L1 13.7s-.1.7.1 1c.3.3.9.3 1.2.2l2.3-.8c.2-.1.3-.1.4-.3L11 8l-.6-.6z"/>
   <path opacity="0.5" d="M7.1 7.1l-4.2 3.8-1.4 3.5 2.9-.6 2.8-2.7z"/>
 </svg>
--- a/devtools/client/themes/images/command-frames.svg
+++ b/devtools/client/themes/images/command-frames.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M14.2 2H1.8c-.4 0-.8.4-.8.9v11.2c0 .4.3.9.8.9h12.4c.4 0 .8-.4.8-.9V2.9s-.6-.9-.8-.9zM8 14H2v-4h6v4zm6 0H9v-4h5v4zm0-5H2V3h12v6z"/>
 </svg>
--- a/devtools/client/themes/images/command-measure.svg
+++ b/devtools/client/themes/images/command-measure.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M1 11h14V6H1v5zm15 .2c0 .5-.4.8-.8.8H.8c-.4 0-.8-.4-.8-.8V5.8c0-.4.4-.8.8-.8h14.3c.5 0 .9.4.9.8v5.4z"/>
   <path d="M9 6v3c0 .2.3.4.5.4s.5-.2.5-.4V6H9zM13 6v3c0 .2.3.4.5.4.2-.1.5-.2.5-.4V6h-1zM5.1 5.7L4 6v2.8c0 .2.4.4.6.4s.5-.2.5-.4V5.7zM11 5v2.7c0 .2.3.4.5.4s.5-.2.5-.4V5h-1zM6 5.1v2.6c0 .2.5.4.7.4.2 0 .6-.2.6-.4l-.1-2.6H6zM2 5.1v2.6c0 .2.3.4.5.4s.5-.2.5-.4V5.1H2z"/>
 </svg>
--- a/devtools/client/themes/images/command-noautohide.svg
+++ b/devtools/client/themes/images/command-noautohide.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M2 1.99v4.02C2 6 2 6 1.99 6h4.02C6 6 6 6 6 6.01V1.99C6 2 6 2 6.01 2H1.99C2 2 2 2 2 1.99zm-1 0c0-.546.451-.99.99-.99h4.02c.546 0 .99.451.99.99v4.02c0 .546-.451.99-.99.99H1.99A.996.996 0 0 1 1 6.01V1.99zM10 1.99v4.02C10 6 10 6 9.99 6h4.02C14 6 14 6 14 6.01V1.99c0 .01 0 .01.01.01H9.99C10 2 10 2 10 1.99zm-1 0c0-.546.451-.99.99-.99h4.02c.546 0 .99.451.99.99v4.02c0 .546-.451.99-.99.99H9.99A.996.996 0 0 1 9 6.01V1.99zM10 9.99v4.02c0-.01 0-.01-.01-.01h4.02c-.01 0-.01 0-.01.01V9.99c0 .01 0 .01.01.01H9.99c.01 0 .01 0 .01-.01zm-1 0c0-.546.451-.99.99-.99h4.02c.546 0 .99.451.99.99v4.02c0 .546-.451.99-.99.99H9.99a.996.996 0 0 1-.99-.99V9.99zM2 9.99v4.02C2 14 2 14 1.99 14h4.02C6 14 6 14 6 14.01V9.99c0 .01 0 .01.01.01H1.99C2 10 2 10 2 9.99zm-1 0c0-.546.451-.99.99-.99h4.02c.546 0 .99.451.99.99v4.02c0 .546-.451.99-.99.99H1.99a.996.996 0 0 1-.99-.99V9.99z"/>
 </svg>
--- a/devtools/client/themes/images/command-paintflashing.svg
+++ b/devtools/client/themes/images/command-paintflashing.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M3 6.997v6.006c0-.006.003-.003.002-.003h9.996c-.001 0 .002-.003.002.003V6.997c0 .006-.003.003-.002.003H3.002C3.003 7 3 7.003 3 6.997zm-1 0C2 6.447 2.456 6 3.002 6h9.996C13.55 6 14 6.453 14 6.997v6.006c0 .55-.456.997-1.002.997H3.002A1.004 1.004 0 0 1 2 13.003V6.997zM8.5 4V1.5a.5.5 0 0 0-1 0V4H4a.5.5 0 0 0 0 1h8a.5.5 0 1 0 0-1H8.5z"/>
   <path fill-opacity=".3" d="M13 10v3H3v-3z"/>
 </svg>
--- a/devtools/client/themes/images/command-pick.svg
+++ b/devtools/client/themes/images/command-pick.svg
@@ -1,9 +1,9 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M15 7.667V3.002A1.01 1.01 0 0 0 13.993 2H2.007C1.45 2 1 2.449 1 3.002v9.996C1 13.544 1.45 14 2.007 14h6.818l-.37-1H2V3h12v4.334l1 .333z"/>
   <path fill-opacity=".3" d="M9 8l1.981 5.843 4.044-3.966z"/>
   <path d="M8.526 8.16l1.982 5.844a.5.5 0 0 0 .824.196l4.043-3.966a.5.5 0 0 0-.202-.835L9.15 7.523a.5.5 0 0 0-.623.638zm.948-.32l-.623.637 6.025 1.877-.201-.834-4.044 3.966.824.197-1.981-5.844z"/>
   <path d="M12.674 12.39l1.973 1.964a.5.5 0 1 0 .706-.708L13.38 11.68a.5.5 0 0 0-.706.709z"/>
 </svg>
--- a/devtools/client/themes/images/command-responsivemode.svg
+++ b/devtools/client/themes/images/command-responsivemode.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M11.1 2H3.8c-.4 0-.8.4-.8.9v11.2c0 .4.3.9.8.9h7.3c.4 0 .9-.4.9-.9V2.9s-.7-.9-.9-.9zM11 14H4v-3h7v3zm0-4H4V3h7v7z"/>
 </svg>
--- a/devtools/client/themes/images/command-rulers.svg
+++ b/devtools/client/themes/images/command-rulers.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M11.4 3c-.2 0-.4.2-.4.4v2.5c0 .2.3.4.5.4s.5-.2.5-.4V3.4c0-.2-.3-.4-.5-.4M13.5 3.2c-.2 0-.5.2-.5.4v1.5c0 .2.3.4.5.4s.5-.2.5-.4V3.6c0-.2-.3-.4-.5-.4M9.6 3.2c-.2 0-.6.2-.6.4v1.5c0 .2.3.4.6.4.2 0 .4-.2.4-.4V3.6c0-.2-.2-.4-.4-.4M7.4 3c-.2 0-.4.2-.4.4v2.5c0 .2.3.4.5.4s.5-.2.5-.4V3.4c0-.2-.2-.4-.6-.4M5.5 3.2c-.3 0-.5.2-.5.4v1.5c0 .2.3.4.5.4s.5-.2.5-.4V3.6c0-.2-.3-.4-.5-.4M4.3 8.5c0-.2-.2-.5-.4-.5H2.4c-.2 0-.4.3-.4.5s.2.5.4.5h1.5c.2 0 .4-.3.4-.5M4.3 12.5c0-.2-.2-.5-.4-.5H2.4c-.2 0-.4.3-.4.5s.2.5.4.5h1.5c.2 0 .4-.3.4-.5M5.1 10.5c0-.2-.2-.5-.4-.5H3.2c-.2 0-.4.3-.4.5s.2.5.4.5h1.5c.2 0 .4-.3.4-.5M5.1 6.5c0-.2-.2-.5-.4-.5H3.2c-.2 0-.4.3-.4.5s.2.5.4.5h1.5c.2 0 .4-.3.4-.5"/>
   <path d="M15.1 3H3.5C2.9 3 2 3.6 2 4.1V14c0 .6 1 1 1.5 1h3.2c.6 0 1.3-.5 1.3-1V9h7c.6 0 1-.4 1-.9v-4c0-1-.4-1.1-.9-1.1zM15 8H7.4c-.6 0-.5.1-.4 0v6H3V4h12v4z"/>
 </svg>
--- a/devtools/client/themes/images/command-scratchpad.svg
+++ b/devtools/client/themes/images/command-scratchpad.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M5 1.5a.5.5 0 0 0-1 0v2a.5.5 0 0 0 1 0v-2zM8.5 3.5v-2a.5.5 0 0 0-1 0v2a.5.5 0 0 0 1 0zM12 3.5v-2a.5.5 0 1 0-1 0v2a.5.5 0 1 0 1 0zM5 7h4a.5.5 0 0 0 0-1H5a.5.5 0 0 0 0 1zM5 11h2a.5.5 0 1 0 0-1H5a.5.5 0 1 0 0 1zM6 9h5a.5.5 0 1 0 0-1H6a.5.5 0 0 0 0 1z"/>
   <path d="M3 3.996v9.008c0-.003 0-.004.002-.004h9.996c-.001 0 .002-.003.002.004V3.996c0 .003 0 .004-.002.004H3.002C3.003 4 3 4.003 3 3.996zm-1 0C2 3.446 2.456 3 3.002 3h9.996A.998.998 0 0 1 14 3.996v9.008c0 .55-.456.996-1.002.996H3.002A.998.998 0 0 1 2 13.004V3.996z"/>
 </svg>
--- a/devtools/client/themes/images/command-screenshot.svg
+++ b/devtools/client/themes/images/command-screenshot.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M13.6 5H11V3.5C11 2.7 10 2 9.2 2H6.8C6 2 5 2.7 5 3.5V5H2.4C1.6 5 1 5.6 1 6.4v6.5c0 .8.6 1.1 1.4 1.1h11.2c.8 0 1.4-.3 1.4-1.1V6.4c0-.8-.6-1.4-1.4-1.4zm.4 8H2V6h4V3h4v3h3.9l.1 7z"/>
   <path d="M8 6.8c-1.3 0-2.4 1.1-2.4 2.4s1.1 2.4 2.4 2.4 2.4-1.1 2.4-2.4c0-1.3-1.1-2.4-2.4-2.4zm0 3.5c-.7 0-1.2-.5-1.2-1.1S7.3 8.1 8 8.1s1.2.5 1.2 1.1-.5 1.1-1.2 1.1z"/>
 </svg>
--- a/devtools/client/themes/images/debugger-blackbox.svg
+++ b/devtools/client/themes/images/debugger-blackbox.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <circle cx="8" cy="8.5" r="1.5"/>
   <path d="M15.498 8.28l-.001-.03v-.002-.004l-.002-.018-.004-.031c0-.002 0-.002 0 0l-.004-.035.006.082c-.037-.296-.133-.501-.28-.661-.4-.522-.915-1.042-1.562-1.604-1.36-1.182-2.74-1.975-4.178-2.309a6.544 6.544 0 0 0-2.755-.042c-.78.153-1.565.462-2.369.91C3.252 5.147 2.207 6 1.252 7.035c-.216.233-.36.398-.499.577-.338.437-.338 1 0 1.437.428.552.941 1.072 1.59 1.635 1.359 1.181 2.739 1.975 4.177 2.308.907.21 1.829.223 2.756.043.78-.153 1.564-.462 2.369-.91 1.097-.612 2.141-1.464 3.097-2.499.217-.235.36-.398.498-.578.12-.128.216-.334.248-.554 0 .01 0 .01-.008.04l.013-.079-.001.011.003-.031.001-.017v.005l.001-.02v.008l.002-.03.001-.05-.001-.044v-.004-.004zm-.954.045v.007l.001.004V8.33v.012l-.001.01v-.005-.005l.002-.015-.001.008c-.002.014-.002.014 0 0l-.007.084c.003-.057-.004-.041-.014-.031-.143.182-.27.327-.468.543-.89.963-1.856 1.752-2.86 2.311-.724.404-1.419.677-2.095.81a5.63 5.63 0 0 1-2.374-.036c-1.273-.295-2.523-1.014-3.774-2.101-.604-.525-1.075-1.001-1.457-1.496-.054-.07-.054-.107 0-.177.117-.152.244-.298.442-.512.89-.963 1.856-1.752 2.86-2.311.724-.404 1.419-.678 2.095-.81a5.631 5.631 0 0 1 2.374.036c1.272.295 2.523 1.014 3.774 2.101.603.524 1.074 1 1.457 1.496.035.041.043.057.046.076 0 .01 0 .01.008.043l-.009-.047.003.02-.002-.013v-.008.016c0-.004 0-.004 0 0v-.004z"/>
 </svg>
--- a/devtools/client/themes/images/debugger-prettyprint.svg
+++ b/devtools/client/themes/images/debugger-prettyprint.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M5.5 2C3.565 2 2.806 3.12 3.065 4.587c.239 1.346.117 1.76-.435 2.39l-.054.06c-.252.288-.39.474-.523.74L1.94 8l.112.224c.132.265.27.45.523.739l.054.06c.552.63.674 1.044.435 2.39C2.802 12.904 3.527 14 5.5 14a.5.5 0 1 0 0-1c-1.291 0-1.614-.487-1.45-1.413.292-1.65.081-2.37-.669-3.223l-.053-.06c-.2-.229-.296-.357-.38-.528v.448c.084-.17.18-.299.38-.528l.053-.06c.75-.854.961-1.573.67-3.223C3.89 3.515 4.24 3 5.5 3a.5.5 0 1 0 0-1zM10.5 3c1.26 0 1.609.515 1.45 1.413-.292 1.65-.081 2.37.669 3.223l.053.06c.2.229.296.357.38.528v-.448c-.084.17-.18.299-.38.528l-.053.06c-.75.854-.961 1.573-.67 3.223.165.926-.158 1.413-1.449 1.413a.5.5 0 1 0 0 1c1.973 0 2.698-1.096 2.435-2.587-.239-1.346-.117-1.76.435-2.39l.054-.06c.252-.288.39-.474.523-.74L14.06 8l-.112-.224c-.132-.265-.27-.45-.523-.739l-.054-.06c-.552-.63-.674-1.044-.435-2.39C13.194 3.12 12.435 2 10.5 2a.5.5 0 0 0 0 1z"/>
 </svg>
--- a/devtools/client/themes/images/debugger-step-in.svg
+++ b/devtools/client/themes/images/debugger-step-in.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M1.5 14.042h4.095a.5.5 0 0 0 0-1H1.5a.5.5 0 1 0 0 1zM7.5 3v6.983L4.364 6.657a.5.5 0 0 0-.728.686l4 4.243a.51.51 0 0 0 .021.02.5.5 0 0 0 .71-.024l3.997-4.239a.5.5 0 1 0-.728-.686L8.5 9.983V2.5a.5.5 0 0 0-.536-.5H1.536C1.24 2 1 2.224 1 2.5s.24.5.536.5H7.5zM10.5 14.042h4.095a.5.5 0 0 0 0-1H10.5a.5.5 0 1 0 0 1z"/>
 </svg>
--- a/devtools/client/themes/images/debugger-step-out.svg
+++ b/devtools/client/themes/images/debugger-step-out.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M5 13.5H1a.5.5 0 1 0 0 1h4a.5.5 0 1 0 0-1zM12 13.5H8a.5.5 0 1 0 0 1h4a.5.5 0 1 0 0-1zM6.11 5.012A.427.427 0 0 1 6.21 5h7.083L9.646 1.354a.5.5 0 1 1 .708-.708l4.5 4.5a.498.498 0 0 1 0 .708l-4.5 4.5a.5.5 0 0 1-.708-.708L13.293 6H6.5v5.5a.5.5 0 1 1-1 0v-6a.5.5 0 0 1 .61-.488z"/>
 </svg>
--- a/devtools/client/themes/images/debugger-step-over.svg
+++ b/devtools/client/themes/images/debugger-step-over.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M13.297 6.912C12.595 4.39 10.167 2.5 7.398 2.5A5.898 5.898 0 0 0 1.5 8.398a.5.5 0 0 0 1 0A4.898 4.898 0 0 1 7.398 3.5c2.75 0 5.102 2.236 5.102 4.898v.004L8.669 7.029a.5.5 0 0 0-.338.942l4.462 1.598a.5.5 0 0 0 .651-.34.506.506 0 0 0 .02-.043l2-5a.5.5 0 1 0-.928-.372l-1.24 3.098z"/>
   <circle cx="7" cy="12" r="1"/>
 </svg>
--- a/devtools/client/themes/images/debugger-toggleBreakpoints.svg
+++ b/devtools/client/themes/images/debugger-toggleBreakpoints.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="32" height="16" viewBox="0 0 32 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="32" height="16" viewBox="0 0 32 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M3.233 11.25l-.417 1H1.712C.763 12.25 0 11.574 0 10.747V6.503C0 5.675.755 5 1.712 5h4.127l-.417 1H1.597C1.257 6 1 6.225 1 6.503v4.244c0 .277.267.503.597.503h1.636zM7.405 11.02L7 12.056c.865.01 2.212-.024 2.315-.04.112-.016.112-.016.185-.035.075-.02.156-.046.251-.082.152-.056.349-.138.592-.244.415-.182.962-.435 1.612-.744l.138-.066a179.35 179.35 0 0 0 2.255-1.094c1.191-.546 1.191-2.074-.025-2.632l-.737-.34A3547.554 3547.554 0 0 0 9.732 5c-.029.11-.065.222-.11.336l-.232.596c.894.408 4.56 2.107 4.56 2.107.458.21.458.596 0 .806L9.197 11.02H7.405zM20.462 14.192l5-12a.5.5 0 0 0-.924-.384l-5 12a.5.5 0 0 0 .924.384zM19.233 11.25l-.417 1h-1.104c-.949 0-1.712-.676-1.712-1.503V6.503C16 5.675 16.755 5 17.712 5h4.127l-.417 1h-3.825c-.34 0-.597.225-.597.503v4.244c0 .277.267.503.597.503h1.636zM23.405 11.02L23 12.056c.865.01 2.212-.024 2.315-.04.112-.016.112-.016.185-.035.075-.02.156-.046.251-.082.152-.056.349-.138.592-.244.415-.182.962-.435 1.612-.744l.138-.066a179.35 179.35 0 0 0 2.255-1.094c1.191-.546 1.191-2.074-.025-2.632l-.737-.34A3547.554 3547.554 0 0 0 25.732 5c-.029.11-.065.222-.11.336l-.232.596c.894.408 4.56 2.107 4.56 2.107.458.21.458.596 0 .806l-4.753 2.174h-1.792z"/>
 </svg>
--- a/devtools/client/themes/images/diff.svg
+++ b/devtools/client/themes/images/diff.svg
@@ -1,9 +1,9 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M6 13A5 5 0 1 0 6 3a5 5 0 0 0 0 10zm0-.91a4.09 4.09 0 1 1 0-8.18 4.09 4.09 0 0 1 0 8.18z"/>
   <path d="M10 13a5 5 0 1 0 0-10 5 5 0 0 0 0 10zm0-.91a4.09 4.09 0 1 1 0-8.18 4.09 4.09 0 0 1 0 8.18z"/>
   <path d="M7.146 8.854l1 1a.5.5 0 0 0 .708-.708l-1-1a.5.5 0 1 0-.708.708zM7.146 6.854l1 1a.5.5 0 1 0 .708-.708l-1-1a.5.5 0 1 0-.708.708z"/>
   <path d="M12.656 11.723c-2.044 1.169-3.872 1.015-4.282.577-.41-.438 2.115-1.269 2.115-3.925 0-2.657-2.115-4.827-2.115-4.827s2.919-.47 4.282.624c1.364 1.094 2.12 1.975 1.85 3.828-.103.703.194 2.555-1.85 3.723z" fill-opacity=".3"/>
 </svg>
--- a/devtools/client/themes/images/dock-bottom.svg
+++ b/devtools/client/themes/images/dock-bottom.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M10.004 3H.996C.999 3 1 3 1 3.002v9.996c0-.001.003.002-.004.002h9.008c-.003 0-.004 0-.004-.002V3.002c0 .001-.003-.002.004-.002zm0-1c.55 0 .996.456.996 1.002v9.996A.998.998 0 0 1 10.004 14H.996C.446 14 0 13.544 0 12.998V3.002A.998.998 0 0 1 .996 2h9.008zm-.41 8H.996v1h9.01v-1h-.41z"/>
 </svg>
--- a/devtools/client/themes/images/dock-side.svg
+++ b/devtools/client/themes/images/dock-side.svg
@@ -1,3 +1,3 @@
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M1 2.996v9.008c0-.003 0-.004.002-.004h9.996c-.001 0 .002-.003.002.004V2.996c0 .003 0 .004-.002.004H1.002C1.003 3 1 3.003 1 2.996zm-1 0C0 2.446.456 2 1.002 2h9.996A.998.998 0 0 1 12 2.996v9.008c0 .55-.456.996-1.002.996H1.002A.998.998 0 0 1 0 12.004V2.996zm8 .413V12h1V3H8v.41z"/>
 </svg>
--- a/devtools/client/themes/images/dock-undock.svg
+++ b/devtools/client/themes/images/dock-undock.svg
@@ -1,8 +1,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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M13.003 1.941H6.997c.008 0 .003.004.003.008v6.102c0 .004.004.008-.003.008h6.006c-.008 0-.003-.004-.003-.008V1.949c0-.004-.004-.008.003-.008zm0-.941c.55 0 .997.43.997.95v6.1c0 .525-.453.95-.997.95H6.997C6.447 9 6 8.57 6 8.05v-6.1c0-.525.453-.95.997-.95h6.006z"/>
   <path d="M9 9.91v-.278h1v1.183c0 .516-.453.935-.997.935H2.997c-.55 0-.997-.43-.997-.95V4.7c0-.525.444-.95 1.006-.95h2.288v.941H3.006C3 4.691 3 4.691 3 4.7v6.102c0 .004.004.008-.003.008h6.006c-.004 0-.003-.001-.003.006v-.248-.657-.278h1v1.183c0 .516-.453.935-.997.935H2.997c-.55 0-.997-.43-.997-.95V4.7c0-.525.444-.95 1.006-.95h2.288v.941H3.006C3 4.691 3 4.691 3 4.7v6.102c0 .004.004.008-.003.008h6.006c-.004 0-.003-.001-.003.006v-.248-.657z"/>
   <path d="M12.52 5H6.976v1h6.046V5zM6.5 7H2.975v1H7V7z"/>
 </svg>
--- a/devtools/client/themes/images/fast-forward.svg
+++ b/devtools/client/themes/images/fast-forward.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M4 12.5l8-5-8-5v10zm-1 0v-10a1 1 0 0 1 1.53-.848l8 5a1 1 0 0 1 0 1.696l-8 5A1 1 0 0 1 3 12.5zM15 12.497l-.04-7.342-.01-1.658A.488.488 0 0 0 14.474 3a.488.488 0 0 0-.473.503l.05 9a.488.488 0 0 0 .477.497.488.488 0 0 0 .473-.503z"/>
 </svg>
--- a/devtools/client/themes/images/geometry-editor.svg
+++ b/devtools/client/themes/images/geometry-editor.svg
@@ -1,4 +1,7 @@
-<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="#babec3">
+<!-- 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/. -->
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M14,8 L12,8 L12,11.25 L12,12 L11.5,12 L3.5,12 L3,12 L3,11.75 L3,11.5 L3,8 L1,8 L1,8 L1,8.5 L1,9 L0,9 L0,8.5 L0,6.5 L0,6 L1,6 L1,6.5 L1,7 L3,7 L3,3.5 L3,3 L3.72222222,3 L3.72222222,3 L10.5555556,3 L11,3 L11,4 L10.5555556,4 L4,4 L4,11 L11,11 L11,3.5 L11,3 L12,3 L12,3.5 L12,7 L14,7 L14,6.5 L14,6 L15,6 L15,6.5 L15,8.5 L15,9 L14,9 L14,8.5 L14,8 Z M8,14 L8.5,14 L9,14 L9,15 L8.5,15 L6.5,15 L6,15 L6,14 L6.5,14 L7,14 L7,11.5 L7,11 L8,11 L8,11.5 L8,14 Z M7,1 L6.5,1 L6,1 L6,0 L6.5,0 L8.5,0 L9,0 L9,1 L8.5,1 L8,1 L8,3.5 L8,4 L7,4 L7,3.5 L7,1 L7,1 Z"/>
   <path d="M3.5,9 C4.32842712,9 5,8.32842712 5,7.5 C5,6.67157288 4.32842712,6 3.5,6 C2.67157288,6 2,6.67157288 2,7.5 C2,8.32842712 2.67157288,9 3.5,9 Z M7.5,13 C8.32842712,13 9,12.3284271 9,11.5 C9,10.6715729 8.32842712,10 7.5,10 C6.67157288,10 6,10.6715729 6,11.5 C6,12.3284271 6.67157288,13 7.5,13 Z M11.5,9 C12.3284271,9 13,8.32842712 13,7.5 C13,6.67157288 12.3284271,6 11.5,6 C10.6715729,6 10,6.67157288 10,7.5 C10,8.32842712 10.6715729,9 11.5,9 Z M7.5,5 C8.32842712,5 9,4.32842712 9,3.5 C9,2.67157288 8.32842712,2 7.5,2 C6.67157288,2 6,2.67157288 6,3.5 C6,4.32842712 6.67157288,5 7.5,5 Z"/>
 </svg>
\ No newline at end of file
--- a/devtools/client/themes/images/import.svg
+++ b/devtools/client/themes/images/import.svg
@@ -1,8 +1,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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M7.864 1.417c-.123-.13-.305-.185-.48-.144-.173.04-.312.172-.363.343-.05.17-.007.357.116.487l4 4.243c.19.2.506.21.707.02.2-.188.21-.505.02-.706l-4-4.243z"/>
   <path d="M7.136 1.414l-4 4.243c-.19.2-.18.518.02.707.202.19.52.18.708-.02l4-4.244c.123-.13.166-.316.115-.487-.052-.17-.19-.302-.365-.343-.174-.04-.356.014-.48.144zM1.5 8c-.276 0-.5.224-.5.5v5c0 .2.224.5.5.5h12c.276 0 .5-.3.5-.5v-5c0-.276-.224-.5-.5-.5h-3c-.28 0-.5.224-.5.5s.22.5.5.5H13v4H2V9h2.5c.27 0 .5-.224.5-.5S4.77 8 4.5 8h-3z"/>
   <path d="M7 2v9c0 .276.224.5.5.5s.5-.224.5-.5V2c0-.276-.224-.5-.5-.5S7 1.724 7 2z"/>
 </svg>
--- a/devtools/client/themes/images/itemToggle.svg
+++ b/devtools/client/themes/images/itemToggle.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <circle cx="8" cy="8.5" r="1.5"/>
   <path d="M15.498 8.28l-.001-.03v-.002-.004l-.002-.018-.004-.031c0-.002 0-.002 0 0l-.004-.035.006.082c-.037-.296-.133-.501-.28-.661-.4-.522-.915-1.042-1.562-1.604-1.36-1.182-2.74-1.975-4.178-2.309a6.544 6.544 0 0 0-2.755-.042c-.78.153-1.565.462-2.369.91C3.252 5.147 2.207 6 1.252 7.035c-.216.233-.36.398-.499.577-.338.437-.338 1 0 1.437.428.552.941 1.072 1.59 1.635 1.359 1.181 2.739 1.975 4.177 2.308.907.21 1.829.223 2.756.043.78-.153 1.564-.462 2.369-.91 1.097-.612 2.141-1.464 3.097-2.499.217-.235.36-.398.498-.578.12-.128.216-.334.248-.554 0 .01 0 .01-.008.04l.013-.079-.001.011.003-.031.001-.017v.005l.001-.02v.008l.002-.03.001-.05-.001-.044v-.004-.004zm-.954.045v.007l.001.004V8.33v.012l-.001.01v-.005-.005l.002-.015-.001.008c-.002.014-.002.014 0 0l-.007.084c.003-.057-.004-.041-.014-.031-.143.182-.27.327-.468.543-.89.963-1.856 1.752-2.86 2.311-.724.404-1.419.677-2.095.81a5.63 5.63 0 0 1-2.374-.036c-1.273-.295-2.523-1.014-3.774-2.101-.604-.525-1.075-1.001-1.457-1.496-.054-.07-.054-.107 0-.177.117-.152.244-.298.442-.512.89-.963 1.856-1.752 2.86-2.311.724-.404 1.419-.678 2.095-.81a5.631 5.631 0 0 1 2.374.036c1.272.295 2.523 1.014 3.774 2.101.603.524 1.074 1 1.457 1.496.035.041.043.057.046.076 0 .01 0 .01.008.043l-.009-.047.003.02-.002-.013v-.008.016c0-.004 0-.004 0 0v-.004z"/>
 </svg>
--- a/devtools/client/themes/images/pane-collapse.svg
+++ b/devtools/client/themes/images/pane-collapse.svg
@@ -1,9 +1,9 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path fill-opacity=".3" d="M12 3h2v10h-2z"/>
   <path d="M2 3.002v9.996c0-.004.006.002.007.002h11.986c.005 0 .007-.002.007-.002V3.002c0 .004-.006-.002-.007-.002H2.007C2.002 3 2 3.002 2 3.002zm-1 0C1 2.45 1.45 2 2.007 2h11.986A1.01 1.01 0 0 1 15 3.002v9.996C15 13.55 14.55 14 13.993 14H2.007A1.01 1.01 0 0 1 1 12.998V3.002zm10 .453V13h1V3h-1v.455z"/>
   <path d="M5 10.25l3-1.875L5 6.5v3.75zm-1 0V6.5a1 1 0 0 1 1.53-.848l3 1.875a1 1 0 0 1 0 1.696l-3 1.875A1 1 0 0 1 4 10.25z"/>
   <path fill-opacity=".3" d="M4.5 10.75V6L9 8.375z"/>
 </svg>
--- a/devtools/client/themes/images/pane-expand.svg
+++ b/devtools/client/themes/images/pane-expand.svg
@@ -1,9 +1,9 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path fill-opacity=".3" d="M12 3h2v10h-2z"/>
   <path d="M2 3.002v9.996c0-.004.006.002.007.002h11.986c.005 0 .007-.002.007-.002V3.002c0 .004-.006-.002-.007-.002H2.007C2.002 3 2 3.002 2 3.002zm-1 0C1 2.45 1.45 2 2.007 2h11.986A1.01 1.01 0 0 1 15 3.002v9.996C15 13.55 14.55 14 13.993 14H2.007A1.01 1.01 0 0 1 1 12.998V3.002zm10 .453V13h1V3h-1v.455z"/>
   <path d="M8 6.5L5 8.375l3 1.875V6.5zm1 0v3.75a1 1 0 0 1-1.53.848l-3-1.875a1 1 0 0 1 0-1.696l3-1.875A1 1 0 0 1 9 6.5z"/>
   <path fill-opacity=".3" d="M8.5 6v4.75L4 8.375z"/>
 </svg>
--- a/devtools/client/themes/images/pause.svg
+++ b/devtools/client/themes/images/pause.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M5 12.503l.052-9a.5.5 0 0 0-1-.006l-.052 9a.5.5 0 0 0 1 .006zM12 12.497l-.05-9A.488.488 0 0 0 11.474 3a.488.488 0 0 0-.473.503l.05 9a.488.488 0 0 0 .477.497.488.488 0 0 0 .473-.503z"/>
 </svg>
--- a/devtools/client/themes/images/performance-icons.svg
+++ b/devtools/client/themes/images/performance-icons.svg
@@ -1,12 +1,12 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#0b0b0b">
   <style>
     g:not(:target) {
       display: none;
     }
   </style>
   <g id="overview-markers">
     <rect x="0" y="4" width="5" height="1"/>
     <rect x="7" y="4" width="9" height="1"/>
--- a/devtools/client/themes/images/play.svg
+++ b/devtools/client/themes/images/play.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M4 12.5l8-5-8-5v10zm-1 0v-10a1 1 0 0 1 1.53-.848l8 5a1 1 0 0 1 0 1.696l-8 5A1 1 0 0 1 3 12.5z" fill-rule="evenodd"/>
 </svg>
--- a/devtools/client/themes/images/power.svg
+++ b/devtools/client/themes/images/power.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M8 14.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zm0-1a4.5 4.5 0 1 1 0-9 4.5 4.5 0 0 1 0 9z"/>
   <path d="M8.5 7.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0z"/>
 </svg>
--- a/devtools/client/themes/images/profiler-stopwatch.svg
+++ b/devtools/client/themes/images/profiler-stopwatch.svg
@@ -1,11 +1,11 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <g fill-rule="evenodd">
     <path d="M15 9.004C14.51 12.394 11.578 15 8.035 15 4.15 15 1 11.866 1 8s3.15-7 7.036-7c1.941 0 3.7.783 4.972 2.048l-.709.709A6.027 6.027 0 0 0 8.036 2c-3.33 0-6.03 2.686-6.03 6s2.7 6 6.03 6a6.023 6.023 0 0 0 5.946-4.993l1.017-.003z"/>
     <path d="M4.137 9H3.1a5.002 5.002 0 0 0 9.8 0h-.965a4.023 4.023 0 0 1-3.9 3 4.023 4.023 0 0 1-3.898-3z" fill-opacity=".5"/>
     <path d="M8.036 11a2.994 2.994 0 0 0 2.987-3c0-1.657-1.338-3-2.987-3a2.994 2.994 0 0 0-2.988 3c0 1.657 1.338 3 2.988 3zm0-1c1.11 0 2.011-.895 2.011-2s-.9-2-2.011-2c-1.111 0-2.012.895-2.012 2s.9 2 2.012 2z"/>
     <path d="M10.354 6.354l4-4a.5.5 0 0 0-.708-.708l-4 4a.5.5 0 1 0 .708.708z"/>
   </g>
 </svg>
--- a/devtools/client/themes/images/pseudo-class.svg
+++ b/devtools/client/themes/images/pseudo-class.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="whitesmoke">
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#0b0b0b">
   <path d="M11 7V5.5c0-.3-.2-.5-.5-.5h-5c-.3 0-.5.2-.5.5v5c0 .3.2.5.5.5h1.9V7.5c0-.3.2-.5.5-.5H11zM3 7H.8c-.1 0-.6 0-.7-.7-.1-.2-.1-.4-.1-.6v-5C0 .5 0 .3.2.1.4 0 .6 0 .7 0h5.2c.3 0 .6 0 .8.2.2.1.3.3.3.5V3H3v4zM1 6h1V2.7c0-.2.1-.4.2-.5.3-.2.6-.2.8-.2h3V1H1v5z"/>
   <path d="M9 9h1v1H9V9zm5 1h-1V9h1v1zm-2 0h-1V9h1v1zm3-1h1v1h-1V9zm1 5h-1v-1h1v1zm0-2h-1v-1h1v1zm-1 3h1v1h-1v-1zm-1 1h-1v-1h1v1zm-2 0h-1v-1h1v1zm-3-1h1v1H9v-1zm1-1H9v-1h1v1zm0-2H9v-1h1v1z"/>
 </svg>
--- a/devtools/client/themes/images/rewind.svg
+++ b/devtools/client/themes/images/rewind.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M13 2.5l-8 5 8 5v-10zm1 0v10a1 1 0 0 1-1.53.848l-8-5a1 1 0 0 1 0-1.696l8-5A1 1 0 0 1 14 2.5zM2 12.497l-.04-7.342-.01-1.658A.488.488 0 0 0 1.474 3 .488.488 0 0 0 1 3.503l.05 9a.488.488 0 0 0 .477.497.488.488 0 0 0 .473-.503z"/>
 </svg>
--- a/devtools/client/themes/images/tool-canvas.svg
+++ b/devtools/client/themes/images/tool-canvas.svg
@@ -1,9 +1,9 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <g fill-rule="evenodd">
     <path d="M1 2.007C1 1.45 1.45 1 2.007 1h11.986C14.55 1 15 1.45 15 2.007v11.986C15 14.55 14.55 15 13.993 15H2.007C1.45 15 1 14.55 1 13.993V2.007zM2 2h12v12H2V2z"/>
     <path d="M3 3h2v2H3zM11 3h2v2h-2zM7 3h2v2H7zM3 7h2v2H3zM11 7h2v2h-2zM7 7h2v2H7zM5 5h2v2H5zM9 5h2v2H9zM3 11h2v2H3zM11 11h2v2h-2zM7 11h2v2H7zM5 9h2v2H5zM9 9h2v2H9z" opacity="0.5"/>
   </g>
 </svg>
--- a/devtools/client/themes/images/tool-debugger.svg
+++ b/devtools/client/themes/images/tool-debugger.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M2 5v6c0 .109.039.342.144.553.15.297.374.447.856.447h9l-.78.375 4-5v1.25l-4-5L12 4H3c-.482 0-.707.15-.856.447A1.403 1.403 0 0 0 2 5zM1 5s0-2 2-2h9l4 5-4 5H3c-2 0-2-2-2-2V5z"/>
 </svg>
--- a/devtools/client/themes/images/tool-dom.svg
+++ b/devtools/client/themes/images/tool-dom.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M6.052 1.13L1.164 5.57a.5.5 0 0 0 0 .74l5 4.56a.5.5 0 0 0 .673-.74l-5-4.559v.74l4.887-4.44a.5.5 0 0 0-.672-.741zM10.948 14.87l4.888-4.44a.5.5 0 0 0 0-.74l-5-4.56a.5.5 0 1 0-.673.74l5 4.559v-.74l-4.887 4.44a.5.5 0 0 0 .672.741z"/>
 </svg>
--- a/devtools/client/themes/images/tool-inspector.svg
+++ b/devtools/client/themes/images/tool-inspector.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M3 3.995v8.01c0-.01.005-.005.002-.005h9.996c-.001 0 .002-.003.002.005v-8.01c0 .01-.005.005-.002.005H3.002C3.003 4 3 4.003 3 3.995zm-1 0C2 3.445 2.456 3 3.002 3h9.996C13.55 3 14 3.456 14 3.995v8.01c0 .55-.456.995-1.002.995H3.002A1.005 1.005 0 0 1 2 12.005v-8.01z"/>
   <path d="M8.5 3.5V2a.5.5 0 0 0-1 0v1.5a.5.5 0 0 0 1 0zM1 8.5h1a.5.5 0 0 0 0-1H1a.5.5 0 0 0 0 1zM14 8.5h1a.5.5 0 1 0 0-1h-1a.5.5 0 1 0 0 1zM8.5 14v-1.5a.5.5 0 1 0-1 0V14a.5.5 0 1 0 1 0z"/>
 </svg>
--- a/devtools/client/themes/images/tool-memory.svg
+++ b/devtools/client/themes/images/tool-memory.svg
@@ -1,10 +1,10 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M4.727 8.055l-1.96-1a.5.5 0 0 0-.573.083L.655 8.602a.5.5 0 1 0 .69.725l1.539-1.465-.572.083 1.96 1a.5.5 0 1 0 .455-.89z"/>
   <path d="M4.727 10.055l-1.96-1a.5.5 0 0 0-.573.083L.655 10.602a.5.5 0 1 0 .69.725l1.539-1.465-.572.083 1.96 1a.5.5 0 1 0 .455-.89zM11.727 10.945l1.961-1-.572-.083 1.54 1.465a.5.5 0 1 0 .689-.725l-1.54-1.464a.5.5 0 0 0-.571-.083l-1.961 1a.5.5 0 1 0 .454.89z"/>
   <path d="M11.727 8.945l1.961-1-.572-.083 1.54 1.465a.5.5 0 1 0 .689-.725l-1.54-1.464a.5.5 0 0 0-.571-.083l-1.961 1a.5.5 0 1 0 .454.89z"/>
   <path d="M11.727 6.945l1.961-1-.572-.083 1.54 1.465a.5.5 0 1 0 .689-.725l-1.54-1.464a.5.5 0 0 0-.571-.083l-1.961 1a.5.5 0 1 0 .454.89zM4.727 6.055l-1.96-1a.5.5 0 0 0-.573.083L.655 6.602a.5.5 0 1 0 .69.725l1.539-1.465-.572.083 1.96 1a.5.5 0 1 0 .455-.89z"/>
   <path d="M5 3.002v9.996c0-.001.003.002-.003.002h6.006c-.006 0-.003-.003-.003-.002V3.002c0 .001-.003-.002.003-.002H4.997c.006 0 .003.003.003.002zm-1 0C4 2.45 4.453 2 4.997 2h6.006c.55 0 .997.456.997 1.002v9.996c0 .553-.453 1.002-.997 1.002H4.997C4.447 14 4 13.544 4 12.998V3.002z"/>
 </svg>
--- a/devtools/client/themes/images/tool-network.svg
+++ b/devtools/client/themes/images/tool-network.svg
@@ -1,9 +1,9 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <rect fill-opacity=".5" x="2" y="3" width="8" height="1" rx=".5"/>
   <rect x="6" y="6" width="8" height="1" rx=".5"/>
   <rect fill-opacity=".5" x="4" y="9" width="8" height="1" rx=".5"/>
   <rect x="2" y="12" width="5" height="1" rx=".5"/>
 </svg>
--- a/devtools/client/themes/images/tool-options.svg
+++ b/devtools/client/themes/images/tool-options.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M8.513 3.416v-.918A.502.502 0 0 0 8.012 2h-.999c-.273 0-.5.226-.5.498V4.07l-.6.262c-.274.12-.534.27-.775.449l-.527.39-.567-.328-.796-.46a.502.502 0 0 0-.682.185l-.5.864a.504.504 0 0 0 .182.683l.795.46.567.326-.073.65a4.055 4.055 0 0 0 0 .898l.073.65-.567.327-.795.459a.502.502 0 0 0-.181.683l.499.864c.137.237.446.32.682.185l.796-.46.567-.327.527.39c.24.177.5.328.775.448l.6.262v1.572c0 .272.225.498.5.498h.999c.273 0 .5-.226.5-.498V11.93l.6-.262c.274-.12.534-.27.775-.449l.527-.39.567.328.796.46a.502.502 0 0 0 .682-.185l.5-.864a.504.504 0 0 0-.182-.683l-.795-.46-.567-.326.073-.65a4.055 4.055 0 0 0 0-.898l-.073-.65.567-.327.795-.459a.502.502 0 0 0 .181-.683l-.499-.864a.504.504 0 0 0-.682-.185l-.796.46-.567.327-.527-.39c-.24-.177-.5-.328-.775-.448l-.6-.262v-.654zm1 0c.345.15.67.34.968.56l.796-.459a1.504 1.504 0 0 1 2.048.55l.5.865a1.502 1.502 0 0 1-.548 2.05l-.795.459a5.055 5.055 0 0 1 0 1.118l.795.46c.717.414.958 1.337.547 2.049l-.499.864a1.502 1.502 0 0 1-2.048.55l-.796-.458c-.299.22-.623.41-.968.56v.918c0 .827-.679 1.498-1.501 1.498h-.999c-.829 0-1.5-.675-1.5-1.498v-.918c-.345-.15-.67-.34-.97-.56l-.795.459a1.504 1.504 0 0 1-2.048-.55l-.5-.865a1.502 1.502 0 0 1 .548-2.05l.795-.459a5.055 5.055 0 0 1 0-1.118l-.795-.46A1.504 1.504 0 0 1 1.2 4.932l.499-.864a1.502 1.502 0 0 1 2.048-.55l.796.458c.299-.22.624-.41.969-.56v-.918c0-.827.678-1.498 1.5-1.498h.999c.829 0 1.5.675 1.5 1.498v.918z"/>
     <path d="M7.5 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 1a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
 </svg>
--- a/devtools/client/themes/images/tool-profiler.svg
+++ b/devtools/client/themes/images/tool-profiler.svg
@@ -1,9 +1,9 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke" fill-rule="evenodd">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b" fill-rule="evenodd">
   <path d="M15 9.004C14.51 12.394 11.578 15 8.035 15 4.15 15 1 11.866 1 8s3.15-7 7.036-7c1.941 0 3.7.783 4.972 2.048l-.709.709A6.027 6.027 0 0 0 8.036 2c-3.33 0-6.03 2.686-6.03 6s2.7 6 6.03 6a6.023 6.023 0 0 0 5.946-4.993l1.017-.003z"/>
   <path d="M4.137 9H3.1a5.002 5.002 0 0 0 9.8 0h-.965a4.023 4.023 0 0 1-3.9 3 4.023 4.023 0 0 1-3.898-3z" fill-opacity=".5"/>
   <path d="M8.036 11a2.994 2.994 0 0 0 2.987-3c0-1.657-1.338-3-2.987-3a2.994 2.994 0 0 0-2.988 3c0 1.657 1.338 3 2.988 3zm0-1c1.11 0 2.011-.895 2.011-2s-.9-2-2.011-2c-1.111 0-2.012.895-2.012 2s.9 2 2.012 2z"/>
   <path d="M10.354 6.354l4-4a.5.5 0 0 0-.708-.708l-4 4a.5.5 0 1 0 .708.708z"/>
 </svg>
--- a/devtools/client/themes/images/tool-scratchpad.svg
+++ b/devtools/client/themes/images/tool-scratchpad.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M5 1.5a.5.5 0 0 0-1 0v2a.5.5 0 0 0 1 0v-2zM8.5 3.5v-2a.5.5 0 0 0-1 0v2a.5.5 0 0 0 1 0zM12 3.5v-2a.5.5 0 1 0-1 0v2a.5.5 0 1 0 1 0zM5 7h4a.5.5 0 0 0 0-1H5a.5.5 0 0 0 0 1zM5 11h2a.5.5 0 1 0 0-1H5a.5.5 0 1 0 0 1zM6 9h5a.5.5 0 1 0 0-1H6a.5.5 0 0 0 0 1z"/>
   <path d="M3 3.996v9.008c0-.003 0-.004.002-.004h9.996c-.001 0 .002-.003.002.004V3.996c0 .003 0 .004-.002.004H3.002C3.003 4 3 4.003 3 3.996zm-1 0C2 3.446 2.456 3 3.002 3h9.996A.998.998 0 0 1 14 3.996v9.008c0 .55-.456.996-1.002.996H3.002A.998.998 0 0 1 2 13.004V3.996z"/>
 </svg>
--- a/devtools/client/themes/images/tool-shadereditor.svg
+++ b/devtools/client/themes/images/tool-shadereditor.svg
@@ -1,12 +1,12 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M2 4v8h12V4H2zm0-1h12a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/>
   <circle cx="1" cy="3" r="1"/>
   <circle cx="1" cy="13" r="1"/>
   <circle cx="15" cy="13" r="1"/>
   <circle cx="15" cy="3" r="1"/>
   <path d="M1.215 3.911l13 9 .411.285.57-.822-.411-.285-13-9-.411-.285-.57.822z"/>
   <path fill-opacity=".3" d="M8 5h2v2H8zM8 8h2v2L9 8.711zM5 5.962V5h2v2h-.828l-.729-.368zM11 5h2v2h-2zM11 8h2v2h-2z"/>
 </svg>
--- a/devtools/client/themes/images/tool-storage.svg
+++ b/devtools/client/themes/images/tool-storage.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M7.5 7.556c3.006 0 5.5-1.136 5.5-2.778C13 3.136 10.506 2 7.5 2S2 3.136 2 4.778C2 6.42 4.494 7.556 7.5 7.556zm0-1c-2.517 0-4.5-.903-4.5-1.778S4.983 3 7.5 3s4.5.903 4.5 1.778-1.983 1.778-4.5 1.778zM7.5 14.445c3.006 0 5.5-1.137 5.5-2.778 0-.878-.595-1.606-1.657-2.081-.244-.11-.473-.107-.778-.033-.056.014-.565.158-.765.205-.626.148-1.342.231-2.3.231-.973 0-1.683-.082-2.273-.225a18.574 18.574 0 0 1-.673-.193c-.277-.076-.479-.089-.707-.005l-.035.014C2.638 10.064 2 10.756 2 11.667c0 1.641 2.494 2.778 5.5 2.778zm0-1c-2.517 0-4.5-.904-4.5-1.778 0-.432.354-.816 1.194-1.163h-.002c-.012.005.003.006.097.032-.056-.016.474.144.702.2.669.162 1.458.253 2.509.253 1.035 0 1.828-.092 2.53-.257.228-.054.74-.2.77-.207a.756.756 0 0 1 .134-.027c.734.329 1.066.735 1.066 1.169 0 .874-1.983 1.778-4.5 1.778z"/>
   <path d="M7.5 10.945c3.006 0 5.5-1.137 5.5-2.778 0-.873-.62-1.601-1.693-2.082-.244-.109-.472-.106-.773-.032-.051.013-.551.158-.75.206-.615.147-1.326.23-2.284.23-.973 0-1.68-.082-2.265-.225a17.077 17.077 0 0 1-.66-.19c-.27-.076-.467-.092-.692-.015l-.054.02C2.65 6.568 2 7.259 2 8.168c0 1.641 2.494 2.778 5.5 2.778zm0-1C4.983 9.945 3 9.04 3 8.167c0-.426.364-.813 1.21-1.163l-.003.001c-.011.004.005.005.099.032-.079-.022.465.143.69.198.665.163 1.452.254 2.504.254 1.036 0 1.825-.092 2.517-.258.228-.054.733-.2.758-.207a.766.766 0 0 1 .124-.026c.748.335 1.101.75 1.101 1.169 0 .874-1.983 1.778-4.5 1.778z"/>
 </svg>
--- a/devtools/client/themes/images/tool-styleeditor.svg
+++ b/devtools/client/themes/images/tool-styleeditor.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b">
   <path d="M5.5 2C3.565 2 2.806 3.12 3.065 4.587c.239 1.346.117 1.76-.435 2.39l-.054.06c-.252.288-.39.474-.523.74L1.94 8l.112.224c.132.265.27.45.523.739l.054.06c.552.63.674 1.044.435 2.39C2.802 12.904 3.527 14 5.5 14a.5.5 0 1 0 0-1c-1.291 0-1.614-.487-1.45-1.413.292-1.65.081-2.37-.669-3.223l-.053-.06c-.2-.229-.296-.357-.38-.528v.448c.084-.17.18-.299.38-.528l.053-.06c.75-.854.961-1.573.67-3.223C3.89 3.515 4.24 3 5.5 3a.5.5 0 1 0 0-1zM10.5 3c1.26 0 1.609.515 1.45 1.413-.292 1.65-.081 2.37.669 3.223l.053.06c.2.229.296.357.38.528v-.448c-.084.17-.18.299-.38.528l-.053.06c-.75.854-.961 1.573-.67 3.223.165.926-.158 1.413-1.449 1.413a.5.5 0 1 0 0 1c1.973 0 2.698-1.096 2.435-2.587-.239-1.346-.117-1.76.435-2.39l.054-.06c.252-.288.39-.474.523-.74L14.06 8l-.112-.224c-.132-.265-.27-.45-.523-.739l-.054-.06c-.552-.63-.674-1.044-.435-2.39C13.194 3.12 12.435 2 10.5 2a.5.5 0 0 0 0 1z"/>
 </svg>
--- a/devtools/client/themes/images/tool-webaudio.svg
+++ b/devtools/client/themes/images/tool-webaudio.svg
@@ -1,6 +1,6 @@
 <!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
-  <path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke="whitesmoke" d="M2.7 8.6c-.1-2.9.2-4.1 1.4-4.1 1.8 0 .6 6.6 2.5 6.6s1-6.4 3-6.4.7 6.4 2.7 6.4c1.4 0 1.5-3.5 1.5-3.5"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" stroke="#0b0b0b">
+  <path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M2.7 8.6c-.1-2.9.2-4.1 1.4-4.1 1.8 0 .6 6.6 2.5 6.6s1-6.4 3-6.4.7 6.4 2.7 6.4c1.4 0 1.5-3.5 1.5-3.5"/>
 </svg>
--- a/devtools/client/themes/images/tool-webconsole.svg
+++ b/devtools/client/themes/images/tool-webconsole.svg
@@ -1,7 +1,7 @@
 <!-- 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/. -->
-<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="whitesmoke" fill-rule="evenodd">
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#0b0b0b" fill-rule="evenodd">
   <path d="M14 4V3H2v1h12zm0 1v8H2V5h12zM1 3.002C1 2.45 1.45 2 2.007 2h11.986A1.01 1.01 0 0 1 15 3.002v9.996C15 13.55 14.55 14 13.993 14H2.007A1.01 1.01 0 0 1 1 12.998V3.002z"/>
   <path d="M4.09 7.859l2.062 2-.006-.713-2.061 2.062a.5.5 0 0 0 .707.707l2.062-2.061a.5.5 0 0 0-.006-.713l-2.061-2a.5.5 0 1 0-.697.718z"/>
 </svg>
--- a/devtools/client/themes/moz.build
+++ b/devtools/client/themes/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'audio',
 ]
--- a/devtools/client/themes/shims/moz.build
+++ b/devtools/client/themes/shims/moz.build
@@ -1,8 +1,8 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # Shim old theme paths used by DevTools add-ons
 JAR_MANIFESTS += ['jar.mn']
--- a/devtools/client/themes/styleeditor.css
+++ b/devtools/client/themes/styleeditor.css
@@ -110,24 +110,25 @@
   margin: 0 8px;
   background-image: url(images/itemToggle.svg);
   background-repeat: no-repeat;
   background-clip: content-box;
   background-position: center;
   background-size: 16px;
   width: 24px;
   height: 40px;
+  filter: var(--icon-filter);
 }
 
 .disabled > .stylesheet-enabled {
   opacity: 0.3;
 }
 
-/* Invert all toggle icons but the one in the active row for light theme */
-.theme-light .splitview-nav > li:not(.splitview-active) .stylesheet-enabled {
+/* Invert the toggle icon in the active row for light theme */
+.theme-light .splitview-nav > li.splitview-active .stylesheet-enabled {
   filter: invert(1);
 }
 
 .splitview-nav > li > .stylesheet-enabled:focus,
 .splitview-nav > li:hover > .stylesheet-enabled {
   outline: 0;
 }
 
@@ -197,29 +198,58 @@ h3 {
     -moz-box-align: baseline;
   }
 
   .stylesheet-sidebar {
     width: 180px;
   }
 }
 
+/* CSS coverage */
 .csscoverage-report {
   background-color: var(--theme-toolbar-background);
+  -moz-box-orient: horizontal;
 }
 
 .csscoverage-report-container {
   height: 100vh;
-  padding: 0 30px;
+  padding: 0 10px;
+  overflow-x: hidden;
+  overflow-y: auto;
+  -moz-box-flex: 1;
 }
 
 .csscoverage-report-content {
   margin: 20px auto;
   -moz-column-width: 300px;
   font-size: 13px;
+  -moz-user-select: text;
+}
+
+.csscoverage-report-summary,
+.csscoverage-report-unused,
+.csscoverage-report-optimize {
+  display: inline-block;
+}
+
+.csscoverage-report-unused,
+.csscoverage-report-optimize {
+  flex: 1;
+  min-width: 0;
+}
+
+@media (max-width: 950px) {
+  .csscoverage-report-content {
+    display: block;
+  }
+
+  .csscoverage-report-summary {
+    display: block;
+    text-align: center;
+  }
 }
 
 .csscoverage-report h1 {
   font-size: 120%;
 }
 
 .csscoverage-report h2 {
   font-size: 110%;
@@ -227,16 +257,22 @@ h3 {
 
 .csscoverage-report h1,
 .csscoverage-report h2,
 .csscoverage-report h3 {
   font-weight: bold;
   margin: 10px 0;
 }
 
+.csscoverage-report code,
+.csscoverage-report textarea {
+  font-family: var(--monospace-font-family);
+  font-size: inherit;
+}
+
 .csscoverage-list:after {
   content: ', ';
 }
 
 .csscoverage-list:last-child:after {
   display: none;
 }
 
@@ -262,19 +298,24 @@ h3 {
   margin: 0;
   padding: 0;
   border-radius: 0;
   border-top: none;
   border-bottom: none;
   border-inline-start: none;
 }
 
+.csscoverage-report .pie-table-chart-container {
+  -moz-box-orient: vertical;
+  text-align: start;
+}
+
 .chart-colored-blob[name="Used Preload"] {
   fill: var(--theme-highlight-pink);
-  background: var(--theme-highlight-pink);;
+  background: var(--theme-highlight-pink);
 }
 
 .chart-colored-blob[name=Used] {
   fill: var(--theme-highlight-green);
   background: var(--theme-highlight-green);
 }
 
 .chart-colored-blob[name=Unused] {
@@ -293,10 +334,10 @@ h3 {
   stroke: rgba(255,255,255,0.8);
 }
 
 .csscoverage-report .pie-chart-slice {
   cursor: default;
 }
 
 .csscoverage-report-chart {
-  margin: 0 50px;
+  margin: 0 20px;
 }
--- a/devtools/client/themes/toolbars.css
+++ b/devtools/client/themes/toolbars.css
@@ -9,38 +9,41 @@
   --toolbar-tab-hover-active: rgba(170, 170, 170, .4);
   --searchbox-background-color: #ffee99;
   --searchbox-border-color: #ffbf00;
   --searcbox-no-match-background-color: #ffe5e5;
   --searcbox-no-match-border-color: #e52e2e;
   --magnifying-glass-image: url(images/search.svg);
   --filter-image: url(images/filter.svg);
   --tool-options-image: url(images/tool-options.svg);
-  --icon-filter: invert(1);
+  --icon-filter: none;
+  --checked-icon-filter: url(images/filters.svg#checked-icon-state);
   --toolbar-button-border-color: rgba(170, 170, 170, .5);
 }
 
 .theme-dark {
   --toolbar-tab-hover: hsla(206, 37%, 4%, .2);
   --toolbar-tab-hover-active: hsla(206, 37%, 4%, .4);
   --searchbox-background-color: #4d4222;
   --searchbox-border-color: #d99f2b;
   --searcbox-no-match-background-color: #402325;
   --searcbox-no-match-border-color: #cc3d3d;
   --magnifying-glass-image: url(images/search.svg);
   --filter-image: url(images/filter.svg);
   --tool-options-image: url(images/tool-options.svg);
-  --icon-filter: none;
+  --icon-filter: invert(1);
+  --checked-icon-filter: url(images/filters.svg#checked-icon-state);
   --toolbar-button-border-color: rgba(0, 0, 0, .4);
 }
 
 .theme-firebug {
   --magnifying-glass-image: url(images/search.svg);
   --tool-options-image: url(images/firebug/tool-options.svg);
-  --icon-filter: invert(1);
+  --icon-filter: none;
+  --checked-icon-filter: none;
   --toolbar-button-border-color: rgba(170, 170, 170, .5);
 }
 
 
 /* Toolbars */
 .devtools-toolbar,
 .devtools-sidebar-tabs tabs {
   -moz-appearance: none;
@@ -175,21 +178,16 @@
 #toolbox-buttons {
   display: flex;
 }
 
 #toolbox-picker-container {
   display: flex;
 }
 
-/* Invert toolbox button icons in Firebug theme. */
-.theme-firebug #toolbox-buttons toolbarbutton image {
-  filter: invert(1);
-}
-
 .devtools-toolbarbutton:not([label]) > .toolbarbutton-text {
   display: none;
 }
 
 .devtools-toolbarbutton > .toolbarbutton-icon {
   margin: 0;
 }
 
@@ -247,17 +245,17 @@
 .devtools-toolbarbutton[disabled] {
   opacity: 0.5 !important;
 }
 
 .devtools-button[checked]:empty::before,
 .devtools-button[open]:empty::before,
 .devtools-toolbarbutton:not([label])[checked=true] > image,
 .devtools-toolbarbutton:not([label])[open=true] > image {
-  filter: url(images/filters.svg#checked-icon-state);
+  filter: var(--checked-icon-filter);
 }
 
 /* Icon-and-text buttons */
 .devtools-toolbarbutton.icon-and-text .toolbarbutton-text {
   margin-inline-start: .5em !important;
   font-weight: 600;
 }
 
@@ -592,45 +590,33 @@
 }
 
 .devtools-sidebar-tabs tabs > tab[selected],
 .devtools-sidebar-tabs tabs > tab[selected]:hover:active {
   color: var(--theme-selection-color);
   background: var(--theme-selection-background);
 }
 
-/* Invert the colors of certain dark theme images for displaying
- * inside of the light theme.
+/* Invert the colors of certain light theme images for displaying
+ * inside of the dark theme.
  */
-.theme-light .devtools-tab[icon-invertable] > image,
-.theme-light .devtools-toolbarbutton > image,
-.theme-light .devtools-button::before,
-.theme-light #breadcrumb-separator-normal,
-.theme-light .scrollbutton-up > .toolbarbutton-icon,
-.theme-light .scrollbutton-down > .toolbarbutton-icon,
-.theme-light #black-boxed-message-button .button-icon,
-.theme-light #requests-menu-perf-notice-button .button-icon,
-.theme-light #requests-menu-network-summary-button .button-icon,
-.theme-light #toggle-breakpoints[checked] > image,
-.theme-light .event-tooltip-debugger-icon {
+.devtools-tab[icon-invertable] > image,
+.devtools-toolbarbutton > image,
+.devtools-button::before,
+#breadcrumb-separator-normal,
+.scrollbutton-up > .toolbarbutton-icon,
+.scrollbutton-down > .toolbarbutton-icon,
+#black-boxed-message-button .button-icon,
+#requests-menu-perf-notice-button .button-icon,
+#canvas-debugging-empty-notice-button .button-icon,
+#toggle-breakpoints[checked] > image,
+.event-tooltip-debugger-icon {
   filter: var(--icon-filter);
 }
 
-/* Reset the filter defined above */
-.theme-light .command-button:not(.command-button-invertable) {
-  filter: none !important;
-}
-
-/* Since selected backgrounds are blue, we want to use the normal
- * (light) icons. */
-.theme-light .devtools-tab[icon-invertable][selected] > image,
-.theme-light .devtools-tab[icon-invertable][highlighted] > image {
-  filter: none !important;
-}
-
 .hidden-labels-box:not(.visible) > label,
 .hidden-labels-box.visible ~ .hidden-labels-box > label:last-child {
   display: none;
 }
 
 .devtools-invisible-splitter {
   border-color: transparent;
   background-color: transparent;
--- a/devtools/client/themes/toolbox.css
+++ b/devtools/client/themes/toolbox.css
@@ -129,16 +129,31 @@
   border: none;
   margin: 0;
   margin-inline-start: 4px;
   opacity: 0.6;
   max-height: 16px;
   width: 16px; /* Prevents collapse during theme switching */
 }
 
+/* Support invertable icon flags and make icon white when it's on a blue background */
+.theme-light .devtools-tab[icon-invertable="light-theme"]:not([selected]) > image,
+.devtools-tab[icon-invertable="dark-theme"][selected] > image {
+  filter: invert(1);
+}
+
+/* Don't apply any filter to non-invertable command button icons */
+.command-button:not(.command-button-invertable),
+/* [icon-invertable="light-theme"] icons are white, so do not invert them for the dark theme */
+.theme-dark .devtools-tab[icon-invertable="light-theme"] > image,
+/* Since "highlighted" icons are green, we should omit the filter */
+.devtools-tab[icon-invertable][highlighted]:not([selected]) > image {
+  filter: none;
+}
+
 .devtools-tab > label {
   white-space: nowrap;
   margin: 0 4px;
 }
 
 .devtools-tab:hover > image {
   opacity: 0.8;
 }
--- a/devtools/client/webconsole/moz.build
+++ b/devtools/client/webconsole/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 
 DIRS += [
--- a/devtools/client/webconsole/net/components/moz.build
+++ b/devtools/client/webconsole/net/components/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'cookies-tab.js',
     'headers-tab.js',
--- a/devtools/client/webconsole/net/utils/moz.build
+++ b/devtools/client/webconsole/net/utils/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'events.js',
     'json.js',
--- a/devtools/client/webide/components/moz.build
+++ b/devtools/client/webide/components/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 EXTRA_COMPONENTS += [
     'webideCli.js',
     'webideComponents.manifest',
--- a/devtools/client/webide/content/moz.build
+++ b/devtools/client/webide/content/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
--- a/devtools/client/webide/modules/moz.build
+++ b/devtools/client/webide/modules/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'addons.js',
     'app-manager.js',
--- a/devtools/client/webide/moz.build
+++ b/devtools/client/webide/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'content',
     'components',
--- a/devtools/client/webide/themes/moz.build
+++ b/devtools/client/webide/themes/moz.build
@@ -1,7 +1,7 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 JAR_MANIFESTS += ['jar.mn']
--- a/devtools/docs/svgs.md
+++ b/devtools/docs/svgs.md
@@ -2,17 +2,17 @@
 These are the guidelines for creating devtools SVGs to make sure they're as small and neatly formatted as possible. The Mozilla Developer SVG guidelines can be found [here](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/SVG_Guidelines).
 
 ## Explanation of Pixel Grid
 Since so many of our SVGs appear so small, designing them on the pixel grid will help them not appear fuzzy when they're sized down to 16x16 pixels. There is program-specific documentation in both the [Illustrator](#illustrator) and [Sketch](#sketch) sections.
 
 ## Panel Icon Requirements
 The devtools panel icons do a couple of things in a specific way; following these guidelines will help stick your patch:
 
-1. **Inline fill colors.** Devtools panel icons all use ```fill="whitesmoke"``` in the ```<svg>``` tag.
+1. **Inline fill colors.** Devtools panel icons all use ```fill="#0b0b0b"``` in the ```<svg>``` tag.
 2. **Inline opacities.** Devtools panel icons also inline opacities on their relevant path.
 
 ## Illustrator
 For Illustrator you'll want the following document settings:
 
 - **Document settings**: ```Units: pixels```, ```Advanced``` > check ```Align New Objects to Pixel Grid```
 - **Transform Panel**: for existing artwork not on pixel grid, select shape and then within ```Transform``` > ```Advanced``` > check ```Align to Pixel Grid```
 
--- a/devtools/moz.build
+++ b/devtools/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 if CONFIG['MOZ_DEVTOOLS'] and CONFIG['MOZ_DEVTOOLS'] not in ('all', 'server'):
     error('Unsupported MOZ_DEVTOOLS value: %s' % (CONFIG['MOZ_DEVTOOLS']))
 
--- a/devtools/server/actors/css-properties.js
+++ b/devtools/server/actors/css-properties.js
@@ -62,16 +62,17 @@ function generateCssProperties() {
       isInherited: DOMUtils.isInheritedProperty(name),
       supports
     };
     properties[name] = Object.assign(clientDefinition, serverDefinition);
   });
 
   return properties;
 }
+exports.generateCssProperties = generateCssProperties;
 
 /**
  * Test if a CSS is property is known using server-code.
  *
  * @param {string} name
  * @return {Boolean}
  */
 function isCssPropertyKnown(name) {
--- a/devtools/server/actors/highlighters/moz.build
+++ b/devtools/server/actors/highlighters/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'utils',
 ]
--- a/devtools/server/actors/highlighters/utils/moz.build
+++ b/devtools/server/actors/highlighters/utils/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'markup.js'
 )
--- a/devtools/server/actors/moz.build
+++ b/devtools/server/actors/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'highlighters',
     'utils',
--- a/devtools/server/actors/utils/moz.build
+++ b/devtools/server/actors/utils/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'actor-registry-utils.js',
     'audionodes.json',
--- a/devtools/server/moz.build
+++ b/devtools/server/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 include('../templates.mozbuild')
 
 DIRS += [
--- a/devtools/server/performance/moz.build
+++ b/devtools/server/performance/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'framerate.js',
     'memory.js',
--- a/devtools/server/shims/moz.build
+++ b/devtools/server/shims/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'toolkit',
 ]
--- a/devtools/server/shims/toolkit/moz.build
+++ b/devtools/server/shims/toolkit/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 # Unlike most DevTools build files, this file does not use DevToolsModules
 # because these files are here for add-on compatibility, and so they must be
 # installed to previously defined locations.
--- a/devtools/shared/acorn/moz.build
+++ b/devtools/shared/acorn/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
 
 FINAL_TARGET_FILES.chrome.devtools.modules.devtools.acorn += [
--- a/devtools/shared/client/moz.build
+++ b/devtools/shared/client/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'connection-manager.js',
     'main.js',
--- a/devtools/shared/css-properties-db.js
+++ b/devtools/shared/css-properties-db.js
@@ -1,1765 +1,103 @@
 /* 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";
 
 /**
- * All CSS types that properties can support.
+ * This file contains static lists of CSS properties and values. Some of the small lists
+ * are edited manually, while the larger ones are generated by a script. The comments
+ * above each list indicates how it should be updated.
+ */
+
+/**
+ * All CSS types that properties can support. This list can be manually edited.
  */
 exports.CSS_TYPES = {
   "ANGLE": 1,
   "COLOR": 2,
   "FREQUENCY": 3,
   "GRADIENT": 4,
   "IMAGE_RECT": 5,
   "LENGTH": 6,
   "NUMBER": 7,
   "PERCENTAGE": 8,
   "TIME": 9,
   "TIMING_FUNCTION": 10,
   "URL": 11,
 };
 
 /**
- * All cubic-bezier CSS timing-function names.
+ * All cubic-bezier CSS timing-function names. This list can be manually edited.
  */
 exports.BEZIER_KEYWORDS = ["linear", "ease-in-out", "ease-in", "ease-out", "ease"];
 
 /**
- * Functions that accept a color argument.
+ * Functions that accept a color argument. This list can be manually edited.
  */
 exports.COLOR_TAKING_FUNCTIONS = ["linear-gradient", "-moz-linear-gradient",
                                   "repeating-linear-gradient",
                                   "-moz-repeating-linear-gradient", "radial-gradient",
                                   "-moz-radial-gradient", "repeating-radial-gradient",
                                   "-moz-repeating-radial-gradient", "drop-shadow"];
 
 /**
- * Functions that accept an angle argument.
+ * Functions that accept an angle argument. This list can be manually edited.
  */
 exports.ANGLE_TAKING_FUNCTIONS = ["linear-gradient", "-moz-linear-gradient",
                                   "repeating-linear-gradient",
                                   "-moz-repeating-linear-gradient", "rotate", "rotateX",
                                   "rotateY", "rotateZ", "rotate3d", "skew", "skewX",
                                   "skewY", "hue-rotate"];
 
 /**
- * The list of all CSS Pseudo Elements. This list can be generated from:
+ * The list of all CSS Pseudo Elements. This list MUST be automatically generated.
  *
- * let domUtils = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
- * domUtils.getCSSPseudoElementNames();
+ * The following script will copy the pseudo-elements to your clipboard if run from the
+ * Browser Console, which can be launched from Tools -> Web Developer -> Browser Console.
+
+var domUtils = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
+var json = JSON.stringify(domUtils.getCSSPseudoElementNames(), null, 0);
+copy(`exports.PSEUDO_ELEMENTS = ${json};\n`);
+console.log("The PSEUDO_ELEMENTS have been copied to your clipboard.")
  */
-exports.PSEUDO_ELEMENTS = [":after", ":before", ":backdrop", ":first-letter",
-                           ":first-line", ":-moz-selection", ":-moz-focus-inner",
-                           ":-moz-focus-outer", ":-moz-list-bullet",
-                           ":-moz-list-number", ":-moz-math-anonymous",
-                           ":-moz-progress-bar", ":-moz-range-track",
-                           ":-moz-range-progress", ":-moz-range-thumb",
-                           ":-moz-meter-bar", ":-moz-placeholder",
-                           ":-moz-color-swatch"];
+
+/*eslint-disable */
+exports.PSEUDO_ELEMENTS = [":after",":before",":backdrop",":first-letter",":first-line",":-moz-selection",":-moz-focus-inner",":-moz-focus-outer",":-moz-list-bullet",":-moz-list-number",":-moz-math-anonymous",":-moz-progress-bar",":-moz-range-track",":-moz-range-progress",":-moz-range-thumb",":-moz-meter-bar",":-moz-placeholder",":-moz-color-swatch"];
+/*eslint-enable */
 
 /**
- * This list is generated from the output of the CssPropertiesActor. If a server
- * does not support the actor, this is loaded as a backup. This list does not
- * guarantee that the server actually supports these CSS properties.
+ * A list of CSS Properties and their various characteristics. This is used on the
+ * client-side when the CssPropertiesActor is not found, or when the client and server
+ * are the same version. A single property takes the form:
+ *
+ *  "animation": {
+ *    "isInherited": false,
+ *    "supports": [ 7, 9, 10 ]
+ *  }
+ *
+ * The following script will copy the CSS properties to your clipboard if run from the
+ * Browser Console, which can be launched from Tools -> Web Developer -> Browser Console.
+
+var {require} = Components.utils.import("resource://devtools/shared/Loader.jsm", {});
+var {generateCssProperties} = require("devtools/server/actors/css-properties");
+var cssProperties = generateCssProperties();
+for (var key in cssProperties) {
+  // Ignore OS-specific properties
+  if (key.indexOf('-moz-osx-') !== -1) {
+    cssProperties[key] = undefined;
+  }
+}
+var json = JSON.stringify(cssProperties, null, 0);
+copy(`exports.CSS_PROPERTIES = ${json};\n`);
+console.log("The CSS_PROPERTIES have been copied to your clipboard.");
  */
-exports.CSS_PROPERTIES = {
-  "align-content": {
-    isInherited: false,
-    supports: []
-  },
-  "align-items": {
-    isInherited: false,
-    supports: []
-  },
-  "align-self": {
-    isInherited: false,
-    supports: []
-  },
-  "animation-delay": {
-    isInherited: false,
-    supports: [9]
-  },
-  "animation-direction": {
-    isInherited: false,
-    supports: []
-  },
-  "animation-duration": {
-    isInherited: false,
-    supports: [9]
-  },
-  "animation-fill-mode": {
-    isInherited: false,
-    supports: []
-  },
-  "animation-iteration-count": {
-    isInherited: false,
-    supports: [7]
-  },
-  "animation-name": {
-    isInherited: false,
-    supports: []
-  },
-  "animation-play-state": {
-    isInherited: false,
-    supports: []
-  },
-  "animation-timing-function": {
-    isInherited: false,
-    supports: [10]
-  },
-  "-moz-appearance": {
-    isInherited: false,
-    supports: []
-  },
-  "backface-visibility": {
-    isInherited: false,
-    supports: []
-  },
-  "background-attachment": {
-    isInherited: false,
-    supports: []
-  },
-  "background-blend-mode": {
-    isInherited: false,
-    supports: []
-  },
-  "background-clip": {
-    isInherited: false,
-    supports: []
-  },
-  "background-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "background-image": {
-    isInherited: false,
-    supports: [4, 5, 11]
-  },
-  "background-origin": {
-    isInherited: false,
-    supports: []
-  },
-  "background-position-x": {
-    isInherited: false,
-    supports: []
-  },
-  "background-position-y": {
-    isInherited: false,
-    supports: []
-  },
-  "background-repeat": {
-    isInherited: false,
-    supports: []
-  },
-  "background-size": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-binding": {
-    isInherited: false,
-    supports: [11]
-  },
-  "block-size": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "border-block-end-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-block-end-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-block-end-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "border-block-start-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-block-start-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-block-start-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "border-bottom-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "-moz-border-bottom-colors": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-bottom-left-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "border-bottom-right-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "border-bottom-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-bottom-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "border-collapse": {
-    isInherited: true,
-    supports: []
-  },
-  "border-image-outset": {
-    isInherited: false,
-    supports: [6, 7]
-  },
-  "border-image-repeat": {
-    isInherited: false,
-    supports: []
-  },
-  "border-image-slice": {
-    isInherited: false,
-    supports: [7, 8]
-  },
-  "border-image-source": {
-    isInherited: false,
-    supports: [4, 5, 11]
-  },
-  "border-image-width": {
-    isInherited: false,
-    supports: [6, 7, 8]
-  },
-  "border-inline-end-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-inline-end-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-inline-end-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "border-inline-start-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-inline-start-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-inline-start-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "border-left-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "-moz-border-left-colors": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-left-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-left-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "border-right-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "-moz-border-right-colors": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-right-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-right-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "border-spacing": {
-    isInherited: true,
-    supports: [6]
-  },
-  "border-top-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "-moz-border-top-colors": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-top-left-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "border-top-right-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "border-top-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-top-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "bottom": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-box-align": {
-    isInherited: false,
-    supports: []
-  },
-  "box-decoration-break": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-box-direction": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-box-flex": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-moz-box-ordinal-group": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-moz-box-orient": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-box-pack": {
-    isInherited: false,
-    supports: []
-  },
-  "box-shadow": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "box-sizing": {
-    isInherited: false,
-    supports: []
-  },
-  "caption-side": {
-    isInherited: true,
-    supports: []
-  },
-  "clear": {
-    isInherited: false,
-    supports: []
-  },
-  "clip": {
-    isInherited: false,
-    supports: []
-  },
-  "clip-path": {
-    isInherited: false,
-    supports: [11]
-  },
-  "clip-rule": {
-    isInherited: true,
-    supports: []
-  },
-  "color": {
-    isInherited: true,
-    supports: [2]
-  },
-  "color-adjust": {
-    isInherited: true,
-    supports: []
-  },
-  "color-interpolation": {
-    isInherited: true,
-    supports: []
-  },
-  "color-interpolation-filters": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-column-count": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-moz-column-fill": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-column-gap": {
-    isInherited: false,
-    supports: [6]
-  },
-  "-moz-column-rule-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "-moz-column-rule-style": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-column-rule-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "-moz-column-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "content": {
-    isInherited: false,
-    supports: [11]
-  },
-  "-moz-control-character-visibility": {
-    isInherited: true,
-    supports: []
-  },
-  "counter-increment": {
-    isInherited: false,
-    supports: []
-  },
-  "counter-reset": {
-    isInherited: false,
-    supports: []
-  },
-  "cursor": {
-    isInherited: true,
-    supports: [11]
-  },
-  "direction": {
-    isInherited: true,
-    supports: []
-  },
-  "display": {
-    isInherited: false,
-    supports: []
-  },
-  "dominant-baseline": {
-    isInherited: false,
-    supports: []
-  },
-  "empty-cells": {
-    isInherited: true,
-    supports: []
-  },
-  "fill": {
-    isInherited: true,
-    supports: [2, 11]
-  },
-  "fill-opacity": {
-    isInherited: true,
-    supports: [7]
-  },
-  "fill-rule": {
-    isInherited: true,
-    supports: []
-  },
-  "filter": {
-    isInherited: false,
-    supports: [11]
-  },
-  "flex-basis": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "flex-direction": {
-    isInherited: false,
-    supports: []
-  },
-  "flex-grow": {
-    isInherited: false,
-    supports: [7]
-  },
-  "flex-shrink": {
-    isInherited: false,
-    supports: [7]
-  },
-  "flex-wrap": {
-    isInherited: false,
-    supports: []
-  },
-  "float": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-float-edge": {
-    isInherited: false,
-    supports: []
-  },
-  "flood-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "flood-opacity": {
-    isInherited: false,
-    supports: [7]
-  },
-  "font-family": {
-    isInherited: true,
-    supports: []
-  },
-  "font-feature-settings": {
-    isInherited: true,
-    supports: []
-  },
-  "font-kerning": {
-    isInherited: true,
-    supports: []
-  },
-  "font-language-override": {
-    isInherited: true,
-    supports: []
-  },
-  "font-size": {
-    isInherited: true,
-    supports: [6, 8]
-  },
-  "font-size-adjust": {
-    isInherited: true,
-    supports: [7]
-  },
-  "font-stretch": {
-    isInherited: true,
-    supports: []
-  },
-  "font-style": {
-    isInherited: true,
-    supports: []
-  },
-  "font-synthesis": {
-    isInherited: true,
-    supports: []
-  },
-  "font-variant-alternates": {
-    isInherited: true,
-    supports: []
-  },
-  "font-variant-caps": {
-    isInherited: true,
-    supports: []
-  },
-  "font-variant-east-asian": {
-    isInherited: true,
-    supports: []
-  },
-  "font-variant-ligatures": {
-    isInherited: true,
-    supports: []
-  },
-  "font-variant-numeric": {
-    isInherited: true,
-    supports: []
-  },
-  "font-variant-position": {
-    isInherited: true,
-    supports: []
-  },
-  "font-weight": {
-    isInherited: true,
-    supports: [7]
-  },
-  "-moz-force-broken-image-icon": {
-    isInherited: false,
-    supports: [7]
-  },
-  "grid-auto-columns": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "grid-auto-flow": {
-    isInherited: false,
-    supports: []
-  },
-  "grid-auto-rows": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "grid-column-end": {
-    isInherited: false,
-    supports: [7]
-  },
-  "grid-column-gap": {
-    isInherited: false,
-    supports: [6]
-  },
-  "grid-column-start": {
-    isInherited: false,
-    supports: [7]
-  },
-  "grid-row-end": {
-    isInherited: false,
-    supports: [7]
-  },
-  "grid-row-gap": {
-    isInherited: false,
-    supports: [6]
-  },
-  "grid-row-start": {
-    isInherited: false,
-    supports: [7]
-  },
-  "grid-template-areas": {
-    isInherited: false,
-    supports: []
-  },
-  "grid-template-columns": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "grid-template-rows": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "height": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "hyphens": {
-    isInherited: true,
-    supports: []
-  },
-  "image-orientation": {
-    isInherited: true,
-    supports: [1]
-  },
-  "-moz-image-region": {
-    isInherited: true,
-    supports: []
-  },
-  "image-rendering": {
-    isInherited: true,
-    supports: []
-  },
-  "ime-mode": {
-    isInherited: false,
-    supports: []
-  },
-  "inline-size": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "isolation": {
-    isInherited: false,
-    supports: []
-  },
-  "justify-content": {
-    isInherited: false,
-    supports: []
-  },
-  "justify-items": {
-    isInherited: false,
-    supports: []
-  },
-  "justify-self": {
-    isInherited: false,
-    supports: []
-  },
-  "left": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "letter-spacing": {
-    isInherited: true,
-    supports: [6]
-  },
-  "lighting-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "line-height": {
-    isInherited: true,
-    supports: [6, 7, 8]
-  },
-  "list-style-image": {
-    isInherited: true,
-    supports: [11]
-  },
-  "list-style-position": {
-    isInherited: true,
-    supports: []
-  },
-  "list-style-type": {
-    isInherited: true,
-    supports: []
-  },
-  "margin-block-end": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "margin-block-start": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "margin-bottom": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "margin-inline-end": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "margin-inline-start": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "margin-left": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "margin-right": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "margin-top": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "marker-end": {
-    isInherited: true,
-    supports: [11]
-  },
-  "marker-mid": {
-    isInherited: true,
-    supports: [11]
-  },
-  "marker-offset": {
-    isInherited: false,
-    supports: [6]
-  },
-  "marker-start": {
-    isInherited: true,
-    supports: [11]
-  },
-  "mask": {
-    isInherited: false,
-    supports: [11]
-  },
-  "mask-type": {
-    isInherited: false,
-    supports: []
-  },
-  "max-block-size": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "max-height": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "max-inline-size": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "max-width": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "min-block-size": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "min-height": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "min-inline-size": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "min-width": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "mix-blend-mode": {
-    isInherited: false,
-    supports: []
-  },
-  "object-fit": {
-    isInherited: false,
-    supports: []
-  },
-  "object-position": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "offset-block-end": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "offset-block-start": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "offset-inline-end": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "offset-inline-start": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "opacity": {
-    isInherited: false,
-    supports: [7]
-  },
-  "order": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-moz-orient": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-osx-font-smoothing": {
-    isInherited: true,
-    supports: []
-  },
-  "outline-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "outline-offset": {
-    isInherited: false,
-    supports: [6]
-  },
-  "-moz-outline-radius-bottomleft": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-outline-radius-bottomright": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-outline-radius-topleft": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-outline-radius-topright": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "outline-style": {
-    isInherited: false,
-    supports: []
-  },
-  "outline-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "overflow-x": {
-    isInherited: false,
-    supports: []
-  },
-  "overflow-y": {
-    isInherited: false,
-    supports: []
-  },
-  "padding-block-end": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "padding-block-start": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "padding-bottom": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "padding-inline-end": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "padding-inline-start": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "padding-left": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "padding-right": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "padding-top": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "page-break-after": {
-    isInherited: false,
-    supports: []
-  },
-  "page-break-before": {
-    isInherited: false,
-    supports: []
-  },
-  "page-break-inside": {
-    isInherited: false,
-    supports: []
-  },
-  "paint-order": {
-    isInherited: true,
-    supports: []
-  },
-  "perspective": {
-    isInherited: false,
-    supports: [6]
-  },
-  "perspective-origin": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "pointer-events": {
-    isInherited: true,
-    supports: []
-  },
-  "position": {
-    isInherited: false,
-    supports: []
-  },
-  "quotes": {
-    isInherited: true,
-    supports: []
-  },
-  "resize": {
-    isInherited: false,
-    supports: []
-  },
-  "right": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "ruby-align": {
-    isInherited: true,
-    supports: []
-  },
-  "ruby-position": {
-    isInherited: true,
-    supports: []
-  },
-  "scroll-behavior": {
-    isInherited: false,
-    supports: []
-  },
-  "scroll-snap-coordinate": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "scroll-snap-destination": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "scroll-snap-points-x": {
-    isInherited: false,
-    supports: []
-  },
-  "scroll-snap-points-y": {
-    isInherited: false,
-    supports: []
-  },
-  "scroll-snap-type-x": {
-    isInherited: false,
-    supports: []
-  },
-  "scroll-snap-type-y": {
-    isInherited: false,
-    supports: []
-  },
-  "shape-rendering": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-stack-sizing": {
-    isInherited: false,
-    supports: []
-  },
-  "stop-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "stop-opacity": {
-    isInherited: false,
-    supports: [7]
-  },
-  "stroke": {
-    isInherited: true,
-    supports: [2, 11]
-  },
-  "stroke-dasharray": {
-    isInherited: true,
-    supports: [6, 7, 8]
-  },
-  "stroke-dashoffset": {
-    isInherited: true,
-    supports: [6, 7, 8]
-  },
-  "stroke-linecap": {
-    isInherited: true,
-    supports: []
-  },
-  "stroke-linejoin": {
-    isInherited: true,
-    supports: []
-  },
-  "stroke-miterlimit": {
-    isInherited: true,
-    supports: [7]
-  },
-  "stroke-opacity": {
-    isInherited: true,
-    supports: [7]
-  },
-  "stroke-width": {
-    isInherited: true,
-    supports: [6, 7, 8]
-  },
-  "-moz-tab-size": {
-    isInherited: true,
-    supports: [7]
-  },
-  "table-layout": {
-    isInherited: false,
-    supports: []
-  },
-  "text-align": {
-    isInherited: true,
-    supports: []
-  },
-  "text-align-last": {
-    isInherited: true,
-    supports: []
-  },
-  "text-anchor": {
-    isInherited: true,
-    supports: []
-  },
-  "text-combine-upright": {
-    isInherited: true,
-    supports: []
-  },
-  "text-decoration-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "text-decoration-line": {
-    isInherited: false,
-    supports: []
-  },
-  "text-decoration-style": {
-    isInherited: false,
-    supports: []
-  },
-  "text-emphasis-color": {
-    isInherited: true,
-    supports: [2]
-  },
-  "text-emphasis-position": {
-    isInherited: true,
-    supports: []
-  },
-  "text-emphasis-style": {
-    isInherited: true,
-    supports: []
-  },
-  "-webkit-text-fill-color": {
-    isInherited: true,
-    supports: [2]
-  },
-  "text-indent": {
-    isInherited: true,
-    supports: [6, 8]
-  },
-  "text-orientation": {
-    isInherited: true,
-    supports: []
-  },
-  "text-overflow": {
-    isInherited: false,
-    supports: []
-  },
-  "text-rendering": {
-    isInherited: true,
-    supports: []
-  },
-  "text-shadow": {
-    isInherited: true,
-    supports: [2, 6]
-  },
-  "-moz-text-size-adjust": {
-    isInherited: true,
-    supports: []
-  },
-  "-webkit-text-stroke-color": {
-    isInherited: true,
-    supports: [2]
-  },
-  "-webkit-text-stroke-width": {
-    isInherited: true,
-    supports: [6]
-  },
-  "text-transform": {
-    isInherited: true,
-    supports: []
-  },
-  "top": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "transform": {
-    isInherited: false,
-    supports: []
-  },
-  "transform-box": {
-    isInherited: false,
-    supports: []
-  },
-  "transform-origin": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "transform-style": {
-    isInherited: false,
-    supports: []
-  },
-  "transition-delay": {
-    isInherited: false,
-    supports: [9]
-  },
-  "transition-duration": {
-    isInherited: false,
-    supports: [9]
-  },
-  "transition-property": {
-    isInherited: false,
-    supports: []
-  },
-  "transition-timing-function": {
-    isInherited: false,
-    supports: [10]
-  },
-  "unicode-bidi": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-user-focus": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-user-input": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-user-modify": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-user-select": {
-    isInherited: false,
-    supports: []
-  },
-  "vector-effect": {
-    isInherited: false,
-    supports: []
-  },
-  "vertical-align": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "visibility": {
-    isInherited: true,
-    supports: []
-  },
-  "white-space": {
-    isInherited: true,
-    supports: []
-  },
-  "width": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "will-change": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-window-dragging": {
-    isInherited: false,
-    supports: []
-  },
-  "word-break": {
-    isInherited: true,
-    supports: []
-  },
-  "word-spacing": {
-    isInherited: true,
-    supports: [6, 8]
-  },
-  "overflow-wrap": {
-    isInherited: true,
-    supports: []
-  },
-  "writing-mode": {
-    isInherited: true,
-    supports: []
-  },
-  "z-index": {
-    isInherited: false,
-    supports: [7]
-  },
-  "all": {
-    isInherited: false,
-    supports: [1, 2, 4, 5, 6, 7, 8, 9, 10, 11]
-  },
-  "animation": {
-    isInherited: false,
-    supports: [7, 9, 10]
-  },
-  "background": {
-    isInherited: false,
-    supports: [2, 4, 5, 6, 8, 11]
-  },
-  "background-position": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "border": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-block-end": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-block-start": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-bottom": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "border-image": {
-    isInherited: false,
-    supports: [4, 5, 6, 7, 8, 11]
-  },
-  "border-inline-end": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-inline-start": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-left": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "border-right": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-style": {
-    isInherited: false,
-    supports: []
-  },
-  "border-top": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "border-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "-moz-column-rule": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "-moz-columns": {
-    isInherited: false,
-    supports: [6, 7]
-  },
-  "flex": {
-    isInherited: false,
-    supports: [6, 7, 8]
-  },
-  "flex-flow": {
-    isInherited: false,
-    supports: []
-  },
-  "font": {
-    isInherited: true,
-    supports: [6, 7, 8]
-  },
-  "font-variant": {
-    isInherited: true,
-    supports: []
-  },
-  "grid": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "grid-area": {
-    isInherited: false,
-    supports: [7]
-  },
-  "grid-column": {
-    isInherited: false,
-    supports: [7]
-  },
-  "grid-gap": {
-    isInherited: false,
-    supports: [6]
-  },
-  "grid-row": {
-    isInherited: false,
-    supports: [7]
-  },
-  "grid-template": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "list-style": {
-    isInherited: true,
-    supports: [11]
-  },
-  "margin": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "marker": {
-    isInherited: true,
-    supports: [11]
-  },
-  "outline": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "-moz-outline-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "overflow": {
-    isInherited: false,
-    supports: []
-  },
-  "padding": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "scroll-snap-type": {
-    isInherited: false,
-    supports: []
-  },
-  "text-decoration": {
-    isInherited: false,
-    supports: [2]
-  },
-  "text-emphasis": {
-    isInherited: true,
-    supports: [2]
-  },
-  "-webkit-text-stroke": {
-    isInherited: true,
-    supports: [2, 6]
-  },
-  "-moz-transform": {
-    isInherited: false,
-    supports: []
-  },
-  "transition": {
-    isInherited: false,
-    supports: [9, 10]
-  },
-  "word-wrap": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-transform-origin": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-perspective-origin": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-perspective": {
-    isInherited: false,
-    supports: [6]
-  },
-  "-moz-transform-style": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-backface-visibility": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-border-image": {
-    isInherited: false,
-    supports: [4, 5, 6, 7, 8, 11]
-  },
-  "-moz-transition": {
-    isInherited: false,
-    supports: [9, 10]
-  },
-  "-moz-transition-delay": {
-    isInherited: false,
-    supports: [9]
-  },
-  "-moz-transition-duration": {
-    isInherited: false,
-    supports: [9]
-  },
-  "-moz-transition-property": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-transition-timing-function": {
-    isInherited: false,
-    supports: [10]
-  },
-  "-moz-animation": {
-    isInherited: false,
-    supports: [7, 9, 10]
-  },
-  "-moz-animation-delay": {
-    isInherited: false,
-    supports: [9]
-  },
-  "-moz-animation-direction": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-animation-duration": {
-    isInherited: false,
-    supports: [9]
-  },
-  "-moz-animation-fill-mode": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-animation-iteration-count": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-moz-animation-name": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-animation-play-state": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-animation-timing-function": {
-    isInherited: false,
-    supports: [10]
-  },
-  "-moz-box-sizing": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-font-feature-settings": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-font-language-override": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-padding-end": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-padding-start": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-margin-end": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-margin-start": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-moz-border-end": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "-moz-border-end-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "-moz-border-end-style": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-border-end-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "-moz-border-start": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "-moz-border-start-color": {
-    isInherited: false,
-    supports: [2]
-  },
-  "-moz-border-start-style": {
-    isInherited: false,
-    supports: []
-  },
-  "-moz-border-start-width": {
-    isInherited: false,
-    supports: [6]
-  },
-  "-moz-hyphens": {
-    isInherited: true,
-    supports: []
-  },
-  "-moz-text-align-last": {
-    isInherited: true,
-    supports: []
-  },
-  "-webkit-animation": {
-    isInherited: false,
-    supports: [7, 9, 10]
-  },
-  "-webkit-animation-delay": {
-    isInherited: false,
-    supports: [9]
-  },
-  "-webkit-animation-direction": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-animation-duration": {
-    isInherited: false,
-    supports: [9]
-  },
-  "-webkit-animation-fill-mode": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-animation-iteration-count": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-webkit-animation-name": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-animation-play-state": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-animation-timing-function": {
-    isInherited: false,
-    supports: [10]
-  },
-  "-webkit-filter": {
-    isInherited: false,
-    supports: [11]
-  },
-  "-webkit-text-size-adjust": {
-    isInherited: true,
-    supports: []
-  },
-  "-webkit-transform": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-transform-origin": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-transform-style": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-backface-visibility": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-perspective": {
-    isInherited: false,
-    supports: [6]
-  },
-  "-webkit-perspective-origin": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-transition": {
-    isInherited: false,
-    supports: [9, 10]
-  },
-  "-webkit-transition-delay": {
-    isInherited: false,
-    supports: [9]
-  },
-  "-webkit-transition-duration": {
-    isInherited: false,
-    supports: [9]
-  },
-  "-webkit-transition-property": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-transition-timing-function": {
-    isInherited: false,
-    supports: [10]
-  },
-  "-webkit-border-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-border-top-left-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-border-top-right-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-border-bottom-left-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-border-bottom-right-radius": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-background-clip": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-background-origin": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-background-size": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-border-image": {
-    isInherited: false,
-    supports: [4, 5, 6, 7, 8, 11]
-  },
-  "-webkit-box-shadow": {
-    isInherited: false,
-    supports: [2, 6]
-  },
-  "-webkit-box-sizing": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-box-flex": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-webkit-box-ordinal-group": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-webkit-box-orient": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-box-direction": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-box-align": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-box-pack": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-flex-direction": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-flex-wrap": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-flex-flow": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-order": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-webkit-flex": {
-    isInherited: false,
-    supports: [6, 7, 8]
-  },
-  "-webkit-flex-grow": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-webkit-flex-shrink": {
-    isInherited: false,
-    supports: [7]
-  },
-  "-webkit-flex-basis": {
-    isInherited: false,
-    supports: [6, 8]
-  },
-  "-webkit-justify-content": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-align-items": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-align-self": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-align-content": {
-    isInherited: false,
-    supports: []
-  },
-  "-webkit-user-select": {
-    isInherited: false,
-    supports: []
-  }
-};
+
+/*eslint-disable */
+exports.CSS_PROPERTIES = {"align-content":{"isInherited":false,"supports":[]},"align-items":{"isInherited":false,"supports":[]},"align-self":{"isInherited":false,"supports":[]},"animation-delay":{"isInherited":false,"supports":[9]},"animation-direction":{"isInherited":false,"supports":[]},"animation-duration":{"isInherited":false,"supports":[9]},"animation-fill-mode":{"isInherited":false,"supports":[]},"animation-iteration-count":{"isInherited":false,"supports":[7]},"animation-name":{"isInherited":false,"supports":[]},"animation-play-state":{"isInherited":false,"supports":[]},"animation-timing-function":{"isInherited":false,"supports":[10]},"-moz-appearance":{"isInherited":false,"supports":[]},"backface-visibility":{"isInherited":false,"supports":[]},"background-attachment":{"isInherited":false,"supports":[]},"background-blend-mode":{"isInherited":false,"supports":[]},"background-clip":{"isInherited":false,"supports":[]},"background-color":{"isInherited":false,"supports":[2]},"background-image":{"isInherited":false,"supports":[4,5,11]},"background-origin":{"isInherited":false,"supports":[]},"background-position-x":{"isInherited":false,"supports":[6,8]},"background-position-y":{"isInherited":false,"supports":[6,8]},"background-repeat":{"isInherited":false,"supports":[]},"background-size":{"isInherited":false,"supports":[6,8]},"-moz-binding":{"isInherited":false,"supports":[11]},"block-size":{"isInherited":false,"supports":[6,8]},"border-block-end-color":{"isInherited":false,"supports":[2]},"border-block-end-style":{"isInherited":false,"supports":[]},"border-block-end-width":{"isInherited":false,"supports":[6]},"border-block-start-color":{"isInherited":false,"supports":[2]},"border-block-start-style":{"isInherited":false,"supports":[]},"border-block-start-width":{"isInherited":false,"supports":[6]},"border-bottom-color":{"isInherited":false,"supports":[2]},"-moz-border-bottom-colors":{"isInherited":false,"supports":[2]},"border-bottom-left-radius":{"isInherited":false,"supports":[6,8]},"border-bottom-right-radius":{"isInherited":false,"supports":[6,8]},"border-bottom-style":{"isInherited":false,"supports":[]},"border-bottom-width":{"isInherited":false,"supports":[6]},"border-collapse":{"isInherited":true,"supports":[]},"border-image-outset":{"isInherited":false,"supports":[6,7]},"border-image-repeat":{"isInherited":false,"supports":[]},"border-image-slice":{"isInherited":false,"supports":[7,8]},"border-image-source":{"isInherited":false,"supports":[4,5,11]},"border-image-width":{"isInherited":false,"supports":[6,7,8]},"border-inline-end-color":{"isInherited":false,"supports":[2]},"border-inline-end-style":{"isInherited":false,"supports":[]},"border-inline-end-width":{"isInherited":false,"supports":[6]},"border-inline-start-color":{"isInherited":false,"supports":[2]},"border-inline-start-style":{"isInherited":false,"supports":[]},"border-inline-start-width":{"isInherited":false,"supports":[6]},"border-left-color":{"isInherited":false,"supports":[2]},"-moz-border-left-colors":{"isInherited":false,"supports":[2]},"border-left-style":{"isInherited":false,"supports":[]},"border-left-width":{"isInherited":false,"supports":[6]},"border-right-color":{"isInherited":false,"supports":[2]},"-moz-border-right-colors":{"isInherited":false,"supports":[2]},"border-right-style":{"isInherited":false,"supports":[]},"border-right-width":{"isInherited":false,"supports":[6]},"border-spacing":{"isInherited":true,"supports":[6]},"border-top-color":{"isInherited":false,"supports":[2]},"-moz-border-top-colors":{"isInherited":false,"supports":[2]},"border-top-left-radius":{"isInherited":false,"supports":[6,8]},"border-top-right-radius":{"isInherited":false,"supports":[6,8]},"border-top-style":{"isInherited":false,"supports":[]},"border-top-width":{"isInherited":false,"supports":[6]},"bottom":{"isInherited":false,"supports":[6,8]},"-moz-box-align":{"isInherited":false,"supports":[]},"box-decoration-break":{"isInherited":false,"supports":[]},"-moz-box-direction":{"isInherited":false,"supports":[]},"-moz-box-flex":{"isInherited":false,"supports":[7]},"-moz-box-ordinal-group":{"isInherited":false,"supports":[7]},"-moz-box-orient":{"isInherited":false,"supports":[]},"-moz-box-pack":{"isInherited":false,"supports":[]},"box-shadow":{"isInherited":false,"supports":[2,6]},"box-sizing":{"isInherited":false,"supports":[]},"caption-side":{"isInherited":true,"supports":[]},"clear":{"isInherited":false,"supports":[]},"clip":{"isInherited":false,"supports":[]},"clip-path":{"isInherited":false,"supports":[11]},"clip-rule":{"isInherited":true,"supports":[]},"color":{"isInherited":true,"supports":[2]},"color-adjust":{"isInherited":true,"supports":[]},"color-interpolation":{"isInherited":true,"supports":[]},"color-interpolation-filters":{"isInherited":true,"supports":[]},"-moz-column-count":{"isInherited":false,"supports":[7]},"-moz-column-fill":{"isInherited":false,"supports":[]},"-moz-column-gap":{"isInherited":false,"supports":[6]},"-moz-column-rule-color":{"isInherited":false,"supports":[2]},"-moz-column-rule-style":{"isInherited":false,"supports":[]},"-moz-column-rule-width":{"isInherited":false,"supports":[6]},"-moz-column-width":{"isInherited":false,"supports":[6]},"content":{"isInherited":false,"supports":[11]},"-moz-control-character-visibility":{"isInherited":true,"supports":[]},"counter-increment":{"isInherited":false,"supports":[]},"counter-reset":{"isInherited":false,"supports":[]},"cursor":{"isInherited":true,"supports":[11]},"direction":{"isInherited":true,"supports":[]},"display":{"isInherited":false,"supports":[]},"dominant-baseline":{"isInherited":false,"supports":[]},"empty-cells":{"isInherited":true,"supports":[]},"fill":{"isInherited":true,"supports":[2,11]},"fill-opacity":{"isInherited":true,"supports":[7]},"fill-rule":{"isInherited":true,"supports":[]},"filter":{"isInherited":false,"supports":[11]},"flex-basis":{"isInherited":false,"supports":[6,8]},"flex-direction":{"isInherited":false,"supports":[]},"flex-grow":{"isInherited":false,"supports":[7]},"flex-shrink":{"isInherited":false,"supports":[7]},"flex-wrap":{"isInherited":false,"supports":[]},"float":{"isInherited":false,"supports":[]},"-moz-float-edge":{"isInherited":false,"supports":[]},"flood-color":{"isInherited":false,"supports":[2]},"flood-opacity":{"isInherited":false,"supports":[7]},"font-family":{"isInherited":true,"supports":[]},"font-feature-settings":{"isInherited":true,"supports":[]},"font-kerning":{"isInherited":true,"supports":[]},"font-language-override":{"isInherited":true,"supports":[]},"font-size":{"isInherited":true,"supports":[6,8]},"font-size-adjust":{"isInherited":true,"supports":[7]},"font-stretch":{"isInherited":true,"supports":[]},"font-style":{"isInherited":true,"supports":[]},"font-synthesis":{"isInherited":true,"supports":[]},"font-variant-alternates":{"isInherited":true,"supports":[]},"font-variant-caps":{"isInherited":true,"supports":[]},"font-variant-east-asian":{"isInherited":true,"supports":[]},"font-variant-ligatures":{"isInherited":true,"supports":[]},"font-variant-numeric":{"isInherited":true,"supports":[]},"font-variant-position":{"isInherited":true,"supports":[]},"font-weight":{"isInherited":true,"supports":[7]},"-moz-force-broken-image-icon":{"isInherited":false,"supports":[7]},"grid-auto-columns":{"isInherited":false,"supports":[6,8]},"grid-auto-flow":{"isInherited":false,"supports":[]},"grid-auto-rows":{"isInherited":false,"supports":[6,8]},"grid-column-end":{"isInherited":false,"supports":[7]},"grid-column-gap":{"isInherited":false,"supports":[6,8]},"grid-column-start":{"isInherited":false,"supports":[7]},"grid-row-end":{"isInherited":false,"supports":[7]},"grid-row-gap":{"isInherited":false,"supports":[6,8]},"grid-row-start":{"isInherited":false,"supports":[7]},"grid-template-areas":{"isInherited":false,"supports":[]},"grid-template-columns":{"isInherited":false,"supports":[6,8]},"grid-template-rows":{"isInherited":false,"supports":[6,8]},"height":{"isInherited":false,"supports":[6,8]},"hyphens":{"isInherited":true,"supports":[]},"image-orientation":{"isInherited":true,"supports":[1]},"-moz-image-region":{"isInherited":true,"supports":[]},"image-rendering":{"isInherited":true,"supports":[]},"ime-mode":{"isInherited":false,"supports":[]},"inline-size":{"isInherited":false,"supports":[6,8]},"isolation":{"isInherited":false,"supports":[]},"justify-content":{"isInherited":false,"supports":[]},"justify-items":{"isInherited":false,"supports":[]},"justify-self":{"isInherited":false,"supports":[]},"left":{"isInherited":false,"supports":[6,8]},"letter-spacing":{"isInherited":true,"supports":[6]},"lighting-color":{"isInherited":false,"supports":[2]},"line-height":{"isInherited":true,"supports":[6,7,8]},"list-style-image":{"isInherited":true,"supports":[11]},"list-style-position":{"isInherited":true,"supports":[]},"list-style-type":{"isInherited":true,"supports":[]},"margin-block-end":{"isInherited":false,"supports":[6,8]},"margin-block-start":{"isInherited":false,"supports":[6,8]},"margin-bottom":{"isInherited":false,"supports":[6,8]},"margin-inline-end":{"isInherited":false,"supports":[6,8]},"margin-inline-start":{"isInherited":false,"supports":[6,8]},"margin-left":{"isInherited":false,"supports":[6,8]},"margin-right":{"isInherited":false,"supports":[6,8]},"margin-top":{"isInherited":false,"supports":[6,8]},"marker-end":{"isInherited":true,"supports":[11]},"marker-mid":{"isInherited":true,"supports":[11]},"marker-offset":{"isInherited":false,"supports":[6]},"marker-start":{"isInherited":true,"supports":[11]},"mask":{"isInherited":false,"supports":[11]},"mask-type":{"isInherited":false,"supports":[]},"max-block-size":{"isInherited":false,"supports":[6,8]},"max-height":{"isInherited":false,"supports":[6,8]},"max-inline-size":{"isInherited":false,"supports":[6,8]},"max-width":{"isInherited":false,"supports":[6,8]},"min-block-size":{"isInherited":false,"supports":[6,8]},"min-height":{"isInherited":false,"supports":[6,8]},"min-inline-size":{"isInherited":false,"supports":[6,8]},"min-width":{"isInherited":false,"supports":[6,8]},"mix-blend-mode":{"isInherited":false,"supports":[]},"object-fit":{"isInherited":false,"supports":[]},"object-position":{"isInherited":false,"supports":[6,8]},"offset-block-end":{"isInherited":false,"supports":[6,8]},"offset-block-start":{"isInherited":false,"supports":[6,8]},"offset-inline-end":{"isInherited":false,"supports":[6,8]},"offset-inline-start":{"isInherited":false,"supports":[6,8]},"opacity":{"isInherited":false,"supports":[7]},"order":{"isInherited":false,"supports":[7]},"-moz-orient":{"isInherited":false,"supports":[]},"outline-color":{"isInherited":false,"supports":[2]},"outline-offset":{"isInherited":false,"supports":[6]},"-moz-outline-radius-bottomleft":{"isInherited":false,"supports":[6,8]},"-moz-outline-radius-bottomright":{"isInherited":false,"supports":[6,8]},"-moz-outline-radius-topleft":{"isInherited":false,"supports":[6,8]},"-moz-outline-radius-topright":{"isInherited":false,"supports":[6,8]},"outline-style":{"isInherited":false,"supports":[]},"outline-width":{"isInherited":false,"supports":[6]},"overflow-x":{"isInherited":false,"supports":[]},"overflow-y":{"isInherited":false,"supports":[]},"padding-block-end":{"isInherited":false,"supports":[6,8]},"padding-block-start":{"isInherited":false,"supports":[6,8]},"padding-bottom":{"isInherited":false,"supports":[6,8]},"padding-inline-end":{"isInherited":false,"supports":[6,8]},"padding-inline-start":{"isInherited":false,"supports":[6,8]},"padding-left":{"isInherited":false,"supports":[6,8]},"padding-right":{"isInherited":false,"supports":[6,8]},"padding-top":{"isInherited":false,"supports":[6,8]},"page-break-after":{"isInherited":false,"supports":[]},"page-break-before":{"isInherited":false,"supports":[]},"page-break-inside":{"isInherited":false,"supports":[]},"paint-order":{"isInherited":true,"supports":[]},"perspective":{"isInherited":false,"supports":[6]},"perspective-origin":{"isInherited":false,"supports":[6,8]},"pointer-events":{"isInherited":true,"supports":[]},"position":{"isInherited":false,"supports":[]},"quotes":{"isInherited":true,"supports":[]},"resize":{"isInherited":false,"supports":[]},"right":{"isInherited":false,"supports":[6,8]},"ruby-align":{"isInherited":true,"supports":[]},"ruby-position":{"isInherited":true,"supports":[]},"scroll-behavior":{"isInherited":false,"supports":[]},"scroll-snap-coordinate":{"isInherited":false,"supports":[6,8]},"scroll-snap-destination":{"isInherited":false,"supports":[6,8]},"scroll-snap-points-x":{"isInherited":false,"supports":[]},"scroll-snap-points-y":{"isInherited":false,"supports":[]},"scroll-snap-type-x":{"isInherited":false,"supports":[]},"scroll-snap-type-y":{"isInherited":false,"supports":[]},"shape-rendering":{"isInherited":true,"supports":[]},"-moz-stack-sizing":{"isInherited":false,"supports":[]},"stop-color":{"isInherited":false,"supports":[2]},"stop-opacity":{"isInherited":false,"supports":[7]},"stroke":{"isInherited":true,"supports":[2,11]},"stroke-dasharray":{"isInherited":true,"supports":[6,7,8]},"stroke-dashoffset":{"isInherited":true,"supports":[6,7,8]},"stroke-linecap":{"isInherited":true,"supports":[]},"stroke-linejoin":{"isInherited":true,"supports":[]},"stroke-miterlimit":{"isInherited":true,"supports":[7]},"stroke-opacity":{"isInherited":true,"supports":[7]},"stroke-width":{"isInherited":true,"supports":[6,7,8]},"-moz-tab-size":{"isInherited":true,"supports":[7]},"table-layout":{"isInherited":false,"supports":[]},"text-align":{"isInherited":true,"supports":[]},"text-align-last":{"isInherited":true,"supports":[]},"text-anchor":{"isInherited":true,"supports":[]},"text-combine-upright":{"isInherited":true,"supports":[]},"text-decoration-color":{"isInherited":false,"supports":[2]},"text-decoration-line":{"isInherited":false,"supports":[]},"text-decoration-style":{"isInherited":false,"supports":[]},"text-emphasis-color":{"isInherited":true,"supports":[2]},"text-emphasis-position":{"isInherited":true,"supports":[]},"text-emphasis-style":{"isInherited":true,"supports":[]},"-webkit-text-fill-color":{"isInherited":true,"supports":[2]},"text-indent":{"isInherited":true,"supports":[6,8]},"text-orientation":{"isInherited":true,"supports":[]},"text-overflow":{"isInherited":false,"supports":[]},"text-rendering":{"isInherited":true,"supports":[]},"text-shadow":{"isInherited":true,"supports":[2,6]},"-moz-text-size-adjust":{"isInherited":true,"supports":[]},"-webkit-text-stroke-color":{"isInherited":true,"supports":[2]},"-webkit-text-stroke-width":{"isInherited":true,"supports":[6]},"text-transform":{"isInherited":true,"supports":[]},"top":{"isInherited":false,"supports":[6,8]},"touch-action":{"isInherited":false,"supports":[]},"transform":{"isInherited":false,"supports":[]},"transform-box":{"isInherited":false,"supports":[]},"transform-origin":{"isInherited":false,"supports":[6,8]},"transform-style":{"isInherited":false,"supports":[]},"transition-delay":{"isInherited":false,"supports":[9]},"transition-duration":{"isInherited":false,"supports":[9]},"transition-property":{"isInherited":false,"supports":[]},"transition-timing-function":{"isInherited":false,"supports":[10]},"unicode-bidi":{"isInherited":false,"supports":[]},"-moz-user-focus":{"isInherited":true,"supports":[]},"-moz-user-input":{"isInherited":true,"supports":[]},"-moz-user-modify":{"isInherited":true,"supports":[]},"-moz-user-select":{"isInherited":false,"supports":[]},"vector-effect":{"isInherited":false,"supports":[]},"vertical-align":{"isInherited":false,"supports":[6,8]},"visibility":{"isInherited":true,"supports":[]},"white-space":{"isInherited":true,"supports":[]},"width":{"isInherited":false,"supports":[6,8]},"will-change":{"isInherited":false,"supports":[]},"-moz-window-dragging":{"isInherited":false,"supports":[]},"word-break":{"isInherited":true,"supports":[]},"word-spacing":{"isInherited":true,"supports":[6,8]},"overflow-wrap":{"isInherited":true,"supports":[]},"writing-mode":{"isInherited":true,"supports":[]},"z-index":{"isInherited":false,"supports":[7]},"all":{"isInherited":false,"supports":[1,2,4,5,6,7,8,9,10,11]},"animation":{"isInherited":false,"supports":[7,9,10]},"background":{"isInherited":false,"supports":[2,4,5,6,8,11]},"background-position":{"isInherited":false,"supports":[6,8]},"border":{"isInherited":false,"supports":[2,6]},"border-block-end":{"isInherited":false,"supports":[2,6]},"border-block-start":{"isInherited":false,"supports":[2,6]},"border-bottom":{"isInherited":false,"supports":[2,6]},"border-color":{"isInherited":false,"supports":[2]},"border-image":{"isInherited":false,"supports":[4,5,6,7,8,11]},"border-inline-end":{"isInherited":false,"supports":[2,6]},"border-inline-start":{"isInherited":false,"supports":[2,6]},"border-left":{"isInherited":false,"supports":[2,6]},"border-radius":{"isInherited":false,"supports":[6,8]},"border-right":{"isInherited":false,"supports":[2,6]},"border-style":{"isInherited":false,"supports":[]},"border-top":{"isInherited":false,"supports":[2,6]},"border-width":{"isInherited":false,"supports":[6]},"-moz-column-rule":{"isInherited":false,"supports":[2,6]},"-moz-columns":{"isInherited":false,"supports":[6,7]},"flex":{"isInherited":false,"supports":[6,7,8]},"flex-flow":{"isInherited":false,"supports":[]},"font":{"isInherited":true,"supports":[6,7,8]},"font-variant":{"isInherited":true,"supports":[]},"grid":{"isInherited":false,"supports":[6,8]},"grid-area":{"isInherited":false,"supports":[7]},"grid-column":{"isInherited":false,"supports":[7]},"grid-gap":{"isInherited":false,"supports":[6,8]},"grid-row":{"isInherited":false,"supports":[7]},"grid-template":{"isInherited":false,"supports":[6,8]},"list-style":{"isInherited":true,"supports":[11]},"margin":{"isInherited":false,"supports":[6,8]},"marker":{"isInherited":true,"supports":[11]},"outline":{"isInherited":false,"supports":[2,6]},"-moz-outline-radius":{"isInherited":false,"supports":[6,8]},"overflow":{"isInherited":false,"supports":[]},"padding":{"isInherited":false,"supports":[6,8]},"scroll-snap-type":{"isInherited":false,"supports":[]},"text-decoration":{"isInherited":false,"supports":[2]},"text-emphasis":{"isInherited":true,"supports":[2]},"-webkit-text-stroke":{"isInherited":true,"supports":[2,6]},"-moz-transform":{"isInherited":false,"supports":[]},"transition":{"isInherited":false,"supports":[9,10]},"word-wrap":{"isInherited":true,"supports":[]},"-moz-transform-origin":{"isInherited":false,"supports":[6,8]},"-moz-perspective-origin":{"isInherited":false,"supports":[6,8]},"-moz-perspective":{"isInherited":false,"supports":[6]},"-moz-transform-style":{"isInherited":false,"supports":[]},"-moz-backface-visibility":{"isInherited":false,"supports":[]},"-moz-border-image":{"isInherited":false,"supports":[4,5,6,7,8,11]},"-moz-transition":{"isInherited":false,"supports":[9,10]},"-moz-transition-delay":{"isInherited":false,"supports":[9]},"-moz-transition-duration":{"isInherited":false,"supports":[9]},"-moz-transition-property":{"isInherited":false,"supports":[]},"-moz-transition-timing-function":{"isInherited":false,"supports":[10]},"-moz-animation":{"isInherited":false,"supports":[7,9,10]},"-moz-animation-delay":{"isInherited":false,"supports":[9]},"-moz-animation-direction":{"isInherited":false,"supports":[]},"-moz-animation-duration":{"isInherited":false,"supports":[9]},"-moz-animation-fill-mode":{"isInherited":false,"supports":[]},"-moz-animation-iteration-count":{"isInherited":false,"supports":[7]},"-moz-animation-name":{"isInherited":false,"supports":[]},"-moz-animation-play-state":{"isInherited":false,"supports":[]},"-moz-animation-timing-function":{"isInherited":false,"supports":[10]},"-moz-box-sizing":{"isInherited":false,"supports":[]},"-moz-font-feature-settings":{"isInherited":true,"supports":[]},"-moz-font-language-override":{"isInherited":true,"supports":[]},"-moz-padding-end":{"isInherited":false,"supports":[6,8]},"-moz-padding-start":{"isInherited":false,"supports":[6,8]},"-moz-margin-end":{"isInherited":false,"supports":[6,8]},"-moz-margin-start":{"isInherited":false,"supports":[6,8]},"-moz-border-end":{"isInherited":false,"supports":[2,6]},"-moz-border-end-color":{"isInherited":false,"supports":[2]},"-moz-border-end-style":{"isInherited":false,"supports":[]},"-moz-border-end-width":{"isInherited":false,"supports":[6]},"-moz-border-start":{"isInherited":false,"supports":[2,6]},"-moz-border-start-color":{"isInherited":false,"supports":[2]},"-moz-border-start-style":{"isInherited":false,"supports":[]},"-moz-border-start-width":{"isInherited":false,"supports":[6]},"-moz-hyphens":{"isInherited":true,"supports":[]},"-moz-text-align-last":{"isInherited":true,"supports":[]},"-webkit-animation":{"isInherited":false,"supports":[7,9,10]},"-webkit-animation-delay":{"isInherited":false,"supports":[9]},"-webkit-animation-direction":{"isInherited":false,"supports":[]},"-webkit-animation-duration":{"isInherited":false,"supports":[9]},"-webkit-animation-fill-mode":{"isInherited":false,"supports":[]},"-webkit-animation-iteration-count":{"isInherited":false,"supports":[7]},"-webkit-animation-name":{"isInherited":false,"supports":[]},"-webkit-animation-play-state":{"isInherited":false,"supports":[]},"-webkit-animation-timing-function":{"isInherited":false,"supports":[10]},"-webkit-filter":{"isInherited":false,"supports":[11]},"-webkit-text-size-adjust":{"isInherited":true,"supports":[]},"-webkit-transform":{"isInherited":false,"supports":[]},"-webkit-transform-origin":{"isInherited":false,"supports":[6,8]},"-webkit-transform-style":{"isInherited":false,"supports":[]},"-webkit-backface-visibility":{"isInherited":false,"supports":[]},"-webkit-perspective":{"isInherited":false,"supports":[6]},"-webkit-perspective-origin":{"isInherited":false,"supports":[6,8]},"-webkit-transition":{"isInherited":false,"supports":[9,10]},"-webkit-transition-delay":{"isInherited":false,"supports":[9]},"-webkit-transition-duration":{"isInherited":false,"supports":[9]},"-webkit-transition-property":{"isInherited":false,"supports":[]},"-webkit-transition-timing-function":{"isInherited":false,"supports":[10]},"-webkit-border-radius":{"isInherited":false,"supports":[6,8]},"-webkit-border-top-left-radius":{"isInherited":false,"supports":[6,8]},"-webkit-border-top-right-radius":{"isInherited":false,"supports":[6,8]},"-webkit-border-bottom-left-radius":{"isInherited":false,"supports":[6,8]},"-webkit-border-bottom-right-radius":{"isInherited":false,"supports":[6,8]},"-webkit-background-clip":{"isInherited":false,"supports":[]},"-webkit-background-origin":{"isInherited":false,"supports":[]},"-webkit-background-size":{"isInherited":false,"supports":[6,8]},"-webkit-border-image":{"isInherited":false,"supports":[4,5,6,7,8,11]},"-webkit-box-shadow":{"isInherited":false,"supports":[2,6]},"-webkit-box-sizing":{"isInherited":false,"supports":[]},"-webkit-box-flex":{"isInherited":false,"supports":[7]},"-webkit-box-ordinal-group":{"isInherited":false,"supports":[7]},"-webkit-box-orient":{"isInherited":false,"supports":[]},"-webkit-box-direction":{"isInherited":false,"supports":[]},"-webkit-box-align":{"isInherited":false,"supports":[]},"-webkit-box-pack":{"isInherited":false,"supports":[]},"-webkit-flex-direction":{"isInherited":false,"supports":[]},"-webkit-flex-wrap":{"isInherited":false,"supports":[]},"-webkit-flex-flow":{"isInherited":false,"supports":[]},"-webkit-order":{"isInherited":false,"supports":[7]},"-webkit-flex":{"isInherited":false,"supports":[6,7,8]},"-webkit-flex-grow":{"isInherited":false,"supports":[7]},"-webkit-flex-shrink":{"isInherited":false,"supports":[7]},"-webkit-flex-basis":{"isInherited":false,"supports":[6,8]},"-webkit-justify-content":{"isInherited":false,"supports":[]},"-webkit-align-items":{"isInherited":false,"supports":[]},"-webkit-align-self":{"isInherited":false,"supports":[]},"-webkit-align-content":{"isInherited":false,"supports":[]},"-webkit-user-select":{"isInherited":false,"supports":[]}};
+/*eslint-enable */
 
 exports.CSS_PROPERTIES_DB = {
   properties: exports.CSS_PROPERTIES,
   pseudoElements: exports.PSEUDO_ELEMENTS
 };
--- a/devtools/shared/discovery/moz.build
+++ b/devtools/shared/discovery/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
 
 DevToolsModules(
--- a/devtools/shared/fronts/moz.build
+++ b/devtools/shared/fronts/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'actor-registry.js',
     'addons.js',
--- a/devtools/shared/gcli/commands/moz.build
+++ b/devtools/shared/gcli/commands/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'addon.js',
     'appcache.js',
--- a/devtools/shared/gcli/moz.build
+++ b/devtools/shared/gcli/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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/.
 
 DIRS += [
     'commands',
     'source/lib/gcli',
--- a/devtools/shared/gcli/source/lib/gcli/commands/moz.build
+++ b/devtools/shared/gcli/source/lib/gcli/commands/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'clear.js',
     'commands.js',
--- a/devtools/shared/gcli/source/lib/gcli/connectors/moz.build
+++ b/devtools/shared/gcli/source/lib/gcli/connectors/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'connectors.js',
 )
--- a/devtools/shared/gcli/source/lib/gcli/converters/moz.build
+++ b/devtools/shared/gcli/source/lib/gcli/converters/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'basic.js',
     'converters.js',
--- a/devtools/shared/gcli/source/lib/gcli/fields/moz.build
+++ b/devtools/shared/gcli/source/lib/gcli/fields/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'delegate.js',
     'fields.js',
--- a/devtools/shared/gcli/source/lib/gcli/languages/moz.build
+++ b/devtools/shared/gcli/source/lib/gcli/languages/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'command.html',
     'command.js',
--- a/devtools/shared/gcli/source/lib/gcli/moz.build
+++ b/devtools/shared/gcli/source/lib/gcli/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'cli.js',
     'index.js',
--- a/devtools/shared/gcli/source/lib/gcli/mozui/moz.build
+++ b/devtools/shared/gcli/source/lib/gcli/mozui/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- 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(
     'completer.js',
     'inputter.js',
--- a/devtools/shared/gcli/source/lib/gcli/types/moz.build
+++ b/devtools/shared/gcli/source/lib/gcli/types/moz.build
@@ -1,9 +1,9 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-