Merge mozilla-central to mozilla-inbound
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Thu, 05 Nov 2015 12:15:35 +0100
changeset 293027 4657cb34d1e3e99e854f89cc033872fac6f22805
parent 293026 528efd62f1c453b1739cadcc187be91d4fac07d0 (current diff)
parent 292897 59c648a3f95524cb1ee42f2306c1db2698d35258 (diff)
child 293028 ae0916bbb8e9d53a685735f53bc6353eca0eb862
push id8824
push userraliiev@mozilla.com
push dateMon, 14 Dec 2015 20:18:56 +0000
treeherdermozilla-aurora@e2031358e2a6 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone45.0a1
Merge mozilla-central to mozilla-inbound
browser/base/content/sync/notification.xml
browser/locales/en-US/chrome/browser/devtools/VariablesView.dtd
browser/locales/en-US/chrome/browser/devtools/aboutdebugging.dtd
browser/locales/en-US/chrome/browser/devtools/aboutdebugging.properties
browser/locales/en-US/chrome/browser/devtools/animationinspector.dtd
browser/locales/en-US/chrome/browser/devtools/animationinspector.properties
browser/locales/en-US/chrome/browser/devtools/app-manager.properties
browser/locales/en-US/chrome/browser/devtools/appcacheutils.properties
browser/locales/en-US/chrome/browser/devtools/canvasdebugger.dtd
browser/locales/en-US/chrome/browser/devtools/canvasdebugger.properties
browser/locales/en-US/chrome/browser/devtools/connection-screen.dtd
browser/locales/en-US/chrome/browser/devtools/connection-screen.properties
browser/locales/en-US/chrome/browser/devtools/debugger.dtd
browser/locales/en-US/chrome/browser/devtools/debugger.properties
browser/locales/en-US/chrome/browser/devtools/device.properties
browser/locales/en-US/chrome/browser/devtools/eyedropper.properties
browser/locales/en-US/chrome/browser/devtools/filterwidget.dtd
browser/locales/en-US/chrome/browser/devtools/filterwidget.properties
browser/locales/en-US/chrome/browser/devtools/font-inspector.dtd
browser/locales/en-US/chrome/browser/devtools/graphs.properties
browser/locales/en-US/chrome/browser/devtools/har.properties
browser/locales/en-US/chrome/browser/devtools/inspector.dtd
browser/locales/en-US/chrome/browser/devtools/inspector.properties
browser/locales/en-US/chrome/browser/devtools/jsonview.properties
browser/locales/en-US/chrome/browser/devtools/layoutview.dtd
browser/locales/en-US/chrome/browser/devtools/markers.properties
browser/locales/en-US/chrome/browser/devtools/memory.properties
browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd
browser/locales/en-US/chrome/browser/devtools/netmonitor.properties
browser/locales/en-US/chrome/browser/devtools/performance.dtd
browser/locales/en-US/chrome/browser/devtools/performance.properties
browser/locales/en-US/chrome/browser/devtools/projecteditor.properties
browser/locales/en-US/chrome/browser/devtools/promisedebugger.dtd
browser/locales/en-US/chrome/browser/devtools/promisedebugger.properties
browser/locales/en-US/chrome/browser/devtools/responsiveUI.properties
browser/locales/en-US/chrome/browser/devtools/scratchpad.dtd
browser/locales/en-US/chrome/browser/devtools/scratchpad.properties
browser/locales/en-US/chrome/browser/devtools/shadereditor.dtd
browser/locales/en-US/chrome/browser/devtools/shadereditor.properties
browser/locales/en-US/chrome/browser/devtools/shared.properties
browser/locales/en-US/chrome/browser/devtools/sourceeditor.dtd
browser/locales/en-US/chrome/browser/devtools/sourceeditor.properties
browser/locales/en-US/chrome/browser/devtools/storage.properties
browser/locales/en-US/chrome/browser/devtools/styleeditor.dtd
browser/locales/en-US/chrome/browser/devtools/styleeditor.properties
browser/locales/en-US/chrome/browser/devtools/styleinspector.dtd
browser/locales/en-US/chrome/browser/devtools/tilt.properties
browser/locales/en-US/chrome/browser/devtools/toolbox.dtd
browser/locales/en-US/chrome/browser/devtools/toolbox.properties
browser/locales/en-US/chrome/browser/devtools/webConsole.dtd
browser/locales/en-US/chrome/browser/devtools/webaudioeditor.dtd
browser/locales/en-US/chrome/browser/devtools/webaudioeditor.properties
browser/locales/en-US/chrome/browser/devtools/webconsole.properties
browser/locales/en-US/chrome/browser/devtools/webide.dtd
browser/locales/en-US/chrome/browser/devtools/webide.properties
browser/themes/linux/aboutCertError_sectionCollapsed-rtl.png
browser/themes/linux/aboutCertError_sectionCollapsed.png
browser/themes/linux/aboutCertError_sectionExpanded.png
browser/themes/osx/aboutCertError_sectionCollapsed-rtl.png
browser/themes/osx/aboutCertError_sectionCollapsed.png
browser/themes/osx/aboutCertError_sectionExpanded.png
browser/themes/windows/aboutCertError_sectionCollapsed-rtl.png
browser/themes/windows/aboutCertError_sectionCollapsed.png
browser/themes/windows/aboutCertError_sectionExpanded.png
dom/ipc/ContentParent.cpp
mobile/android/base/sync/TabReceivedService.java
services/sync/modules/notifications.js
services/sync/tests/unit/test_notifications.js
toolkit/locales/en-US/chrome/global/devtools/csscoverage.dtd
toolkit/locales/en-US/chrome/global/devtools/csscoverage.properties
toolkit/locales/en-US/chrome/global/devtools/debugger.properties
toolkit/locales/en-US/chrome/global/devtools/gcli.properties
toolkit/locales/en-US/chrome/global/devtools/gclicommands.properties
toolkit/locales/en-US/chrome/global/devtools/styleinspector.properties
--- a/addon-sdk/source/lib/dev/theme.js
+++ b/addon-sdk/source/lib/dev/theme.js
@@ -118,18 +118,18 @@ onDisable.define(Theme, (theme, {window,
     theme.onDisable(window, newTheme);
   }
 });
 
 // Support for built-in themes
 
 const LightTheme = Theme({
   name: "theme-light",
-  styles: "chrome://devtools/skin/themes/light-theme.css",
+  styles: "chrome://devtools/skin/light-theme.css",
 });
 
 const DarkTheme = Theme({
   name: "theme-dark",
-  styles: "chrome://devtools/skin/themes/dark-theme.css",
+  styles: "chrome://devtools/skin/dark-theme.css",
 });
 
 exports.LightTheme = LightTheme;
 exports.DarkTheme = DarkTheme;
--- a/b2g/config/aries/sources.xml
+++ b/b2g/config/aries/sources.xml
@@ -10,26 +10,26 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="a32003194f707f66a2d8cdb913ed1869f1926c5d"/>
--- a/b2g/config/dolphin/sources.xml
+++ b/b2g/config/dolphin/sources.xml
@@ -10,26 +10,26 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="83760d213fb3bec7b4117d266fcfbf6fe2ba14ab"/>
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1b0db93fb6b870b03467aff50d6419771ba0d88c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="4ace9aaee0e048dfda11bb787646c59982a3dc80"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="c72c9278ddc2f442d193474993d36e7f2cfb08c4"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="660169a3d7e034a892359e39135e8c2785a6ad6f">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="1950e4760fa14688b83cdbb5acaa1af9f82ef434"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="ac6eb97a37035c09fb5ede0852f0881e9aadf9ad"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="737f591c5f95477148d26602c7be56cbea0cdeb9"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="51da9b1981be481b92a59a826d4d78dc73d0989a"/>
--- a/b2g/config/emulator-l/sources.xml
+++ b/b2g/config/emulator-l/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="c9d4fe680662ee44a4bdea42ae00366f5df399cf">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="8af5ff6f5dced9eb5a8127459df6c75d24342204"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="30915518fa7ea07166efedc191a4f40aef516fe7"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="96eee58e3389fb05a835310d6a06a6ba4486097a"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="7c8a46698171aa2e0be09edb43d15a6acf832770"/>
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1b0db93fb6b870b03467aff50d6419771ba0d88c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="4ace9aaee0e048dfda11bb787646c59982a3dc80"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="c72c9278ddc2f442d193474993d36e7f2cfb08c4"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
--- a/b2g/config/flame-kk/sources.xml
+++ b/b2g/config/flame-kk/sources.xml
@@ -10,26 +10,26 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="a32003194f707f66a2d8cdb913ed1869f1926c5d"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
-        "git_revision": "47da49f8206788d70d834c3a63d9245d50c89103", 
+        "git_revision": "607b9c5db7fdbbafc16a572e7c319baa266a3372", 
         "remote": "https://git.mozilla.org/releases/gaia.git", 
         "branch": ""
     }, 
-    "revision": "44029d7d66e6ed745dd19fc6378d1a986382fc84", 
+    "revision": "7136753530b8af60e42417fc73356ba17971141b", 
     "repo_path": "integration/gaia-central"
 }
--- a/b2g/config/nexus-4-kk/sources.xml
+++ b/b2g/config/nexus-4-kk/sources.xml
@@ -10,26 +10,26 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="1950e4760fa14688b83cdbb5acaa1af9f82ef434"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="ac6eb97a37035c09fb5ede0852f0881e9aadf9ad"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="737f591c5f95477148d26602c7be56cbea0cdeb9"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="51da9b1981be481b92a59a826d4d78dc73d0989a"/>
--- a/b2g/config/nexus-4/sources.xml
+++ b/b2g/config/nexus-4/sources.xml
@@ -13,20 +13,20 @@
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="660169a3d7e034a892359e39135e8c2785a6ad6f">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
--- a/b2g/config/nexus-5-l/sources.xml
+++ b/b2g/config/nexus-5-l/sources.xml
@@ -10,26 +10,26 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="c9d4fe680662ee44a4bdea42ae00366f5df399cf">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="47da49f8206788d70d834c3a63d9245d50c89103"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="607b9c5db7fdbbafc16a572e7c319baa266a3372"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="956700d9754349b630a34551750ae6353614b6aa"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="27de93fe66c3e80e157d157bd52ca99565351669"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="38934e434c6c49ffdf7492f20f7258e7c3934b49"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="638ec448619fda80fcb439b1747af62169d05548"/>
   <project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
   <!-- Stock Android things -->
   <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="8af5ff6f5dced9eb5a8127459df6c75d24342204"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="30915518fa7ea07166efedc191a4f40aef516fe7"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="96eee58e3389fb05a835310d6a06a6ba4486097a"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="7c8a46698171aa2e0be09edb43d15a6acf832770"/>
--- a/b2g/locales/filter.py
+++ b/b2g/locales/filter.py
@@ -2,13 +2,14 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 
 def test(mod, path, entity = None):
   import re
   # ignore anything but b2g and specific overloads from dom and toolkit
   if mod not in ("netwerk", "dom", "toolkit", "security/manager",
+                 "devtools/shared",
                  "mobile",
                  "b2g"):
     return "ignore"
 
   return "error"
--- a/browser/base/content/browser-fxaccounts.js
+++ b/browser/base/content/browser-fxaccounts.js
@@ -155,29 +155,50 @@ var gFxAccounts = {
       this.showSyncStartedDoorhanger();
     }
   },
 
   onMigrationStateChanged: function () {
     // Since we nuked most of the migration code, this notification will fire
     // once after legacy Sync has been disconnected (and should never fire
     // again)
+    let nb = window.document.getElementById("global-notificationbox");
+
     let msg = this.strings.GetStringFromName("autoDisconnectDescription")
     let signInLabel = this.strings.GetStringFromName("autoDisconnectSignIn.label");
     let signInAccessKey = this.strings.GetStringFromName("autoDisconnectSignIn.accessKey");
     let learnMoreLink = this.fxaMigrator.learnMoreLink;
-    let note = new Weave.Notification(
-          undefined, msg, undefined, Weave.Notifications.PRIORITY_WARNING, [
-            new Weave.NotificationButton(signInLabel, signInAccessKey, () => {
-              this.openPreferences();
-            }),
-          ], learnMoreLink
-        );
-    note.title = this.SYNC_MIGRATION_NOTIFICATION_TITLE;
-    Weave.Notifications.replaceTitle(note);
+
+    let buttons = [
+      {
+        label: signInLabel,
+        accessKey: signInAccessKey,
+        callback: () => {
+          this.openPreferences();
+        }
+      }
+    ];
+
+    let fragment = document.createDocumentFragment();
+    let msgNode = document.createTextNode(msg);
+    fragment.appendChild(msgNode);
+    if (learnMoreLink) {
+      let link = document.createElement("label");
+      link.className = "text-link";
+      link.setAttribute("value", learnMoreLink.text);
+      link.href = learnMoreLink.href;
+      fragment.appendChild(link);
+    }
+
+    nb.appendNotification(fragment,
+                          this.SYNC_MIGRATION_NOTIFICATION_TITLE,
+                          undefined,
+                          nb.PRIORITY_WARNING_LOW,
+                          buttons);
+
     // ensure the hamburger menu reflects the newly disconnected state.
     this.updateAppMenuItem();
   },
 
   handleEvent: function (event) {
     if (event.type == "activate") {
       // Our window might have been in the background while we received the
       // sync:start notification. If still needed, show the doorhanger after
@@ -206,17 +227,22 @@ var gFxAccounts = {
   showSyncStartedDoorhanger: function () {
     this.showDoorhanger("sync-start-panel");
   },
 
   updateUI: function () {
     // It's possible someone signed in to FxA after seeing our notification
     // about "Legacy Sync migration" (which now is actually "Legacy Sync
     // auto-disconnect") so kill that notification if it still exists.
-    Weave.Notifications.removeAll(this.SYNC_MIGRATION_NOTIFICATION_TITLE);
+    let nb = window.document.getElementById("global-notificationbox");
+    let n = nb.getNotificationWithValue(this.SYNC_MIGRATION_NOTIFICATION_TITLE);
+    if (n) {
+      nb.removeNotification(n, true);
+    }
+
     this.updateAppMenuItem();
   },
 
   // Note that updateAppMenuItem() returns a Promise that's only used by tests.
   updateAppMenuItem: function () {
     let profileInfoEnabled = false;
     try {
       profileInfoEnabled = Services.prefs.getBoolPref("identity.fxaccounts.profile_image.enabled");
--- a/browser/base/content/browser-syncui.js
+++ b/browser/base/content/browser-syncui.js
@@ -74,41 +74,19 @@ var gSyncUI = {
     if (gBrowser) {
       this._obs.push("weave:notification:added");
     }
 
     this._obs.forEach(function(topic) {
       Services.obs.addObserver(this, topic, true);
     }, this);
 
-    if (gBrowser && Weave.Notifications.notifications.length) {
-      this.initNotifications();
-    }
     this.updateUI();
   },
 
-  initNotifications: function SUI_initNotifications() {
-    const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
-    let notificationbox = document.createElementNS(XULNS, "notificationbox");
-    notificationbox.id = "sync-notifications";
-    notificationbox.setAttribute("flex", "1");
-
-    let bottombox = document.getElementById("browser-bottombox");
-    bottombox.insertBefore(notificationbox, bottombox.firstChild);
-
-    // Force a style flush to ensure that our binding is attached.
-    notificationbox.clientTop;
-
-    // notificationbox will listen to observers from now on.
-    Services.obs.removeObserver(this, "weave:notification:added");
-    let idx = this._obs.indexOf("weave:notification:added");
-    if (idx >= 0) {
-      this._obs.splice(idx, 1);
-    }
-  },
 
   // Returns a promise that resolves with true if Sync needs to be configured,
   // false otherwise.
   _needsSetup() {
     // If Sync is configured for FxAccounts then we do that promise-dance.
     if (this.weaveService.fxAccountsEnabled) {
       return fxAccounts.getSignedInUser().then(user => {
         // We want to treat "account needs verification" as "needs setup".
@@ -235,31 +213,26 @@ var gSyncUI = {
     if (fxaContainer) {
       fxaContainer.removeAttribute("syncstatus");
     }
     this.updateUI();
   },
 
   onLoginError: function SUI_onLoginError() {
     this.log.debug("onLoginError: login=${login}, sync=${sync}", Weave.Status);
-    Weave.Notifications.removeAll();
 
     // We don't show any login errors here; browser-fxaccounts shows them in
     // the hamburger menu.
     this.updateUI();
   },
 
   onLogout: function SUI_onLogout() {
     this.updateUI();
   },
 
-  onStartOver: function SUI_onStartOver() {
-    this.clearError();
-  },
-
   _getAppName: function () {
     let brand = new StringBundle("chrome://branding/locale/brand.properties");
     return brand.get("brandShortName");
   },
 
   // Commands
   // doSync forces a sync - it *does not* return a promise as it is called
   // via the various UI components.
@@ -402,26 +375,18 @@ var gSyncUI = {
           button.setAttribute("tooltiptext", tooltiptext);
         } else {
           button.removeAttribute("tooltiptext");
         }
       }
     }
   }),
 
-  clearError: function SUI_clearError(errorString) {
-    Weave.Notifications.removeAll(errorString);
-    this.updateUI();
-  },
-
   onSyncFinish: function SUI_onSyncFinish() {
     let title = this._stringBundle.GetStringFromName("error.sync.title");
-
-    // Clear out sync failures on a successful sync
-    this.clearError(title);
   },
 
   observe: function SUI_observe(subject, topic, data) {
     this.log.debug("observed", topic);
     if (this._unloaded) {
       Cu.reportError("SyncUI observer called after unload: " + topic);
       return;
     }
@@ -448,39 +413,35 @@ var gSyncUI = {
     switch (topic) {
       case "weave:ui:sync:finish":
         this.onSyncFinish();
         break;
       case "weave:ui:sync:error":
       case "weave:service:setup-complete":
       case "weave:service:login:finish":
       case "weave:service:login:start":
+      case "weave:service:start-over":
         this.updateUI();
         break;
       case "weave:ui:login:error":
+      case "weave:service:login:error":
         this.onLoginError();
         break;
       case "weave:service:logout:finish":
         this.onLogout();
         break;
-      case "weave:service:start-over":
-        this.onStartOver();
-        break;
       case "weave:service:start-over:finish":
         this.updateUI();
         break;
       case "weave:service:ready":
         this.initUI();
         break;
       case "weave:notification:added":
         this.initNotifications();
         break;
-      case "weave:ui:clear-error":
-        this.clearError();
-        break;
     }
   },
 
   QueryInterface: XPCOMUtils.generateQI([
     Ci.nsIObserver,
     Ci.nsISupportsWeakReference
   ])
 };
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -615,28 +615,16 @@ window[chromehidden~="toolbar"] toolbar:
   display: none;
 }
 
 #navigator-toolbox ,
 #mainPopupSet {
   min-width: 1px;
 }
 
-%ifdef MOZ_SERVICES_SYNC
-/* Sync notification UI */
-#sync-notifications {
-  -moz-binding: url("chrome://browser/content/sync/notification.xml#notificationbox");
-  overflow-y: visible !important;
-}
-
-#sync-notifications notification {
-  -moz-binding: url("chrome://browser/content/sync/notification.xml#notification");
-}
-%endif
-
 /* History Swipe Animation */
 
 #historySwipeAnimationContainer {
   overflow: hidden;
 }
 
 #historySwipeAnimationPreviousPage,
 #historySwipeAnimationCurrentPage,
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -3,17 +3,17 @@
 # -*- Mode: HTML -*-
 #
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 <?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/customizableui/panelUIOverlay.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/browser-lightweightTheme.css" type="text/css"?>
 
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 <?xul-overlay href="chrome://browser/content/baseMenuOverlay.xul"?>
 <?xul-overlay href="chrome://browser/content/places/placesOverlay.xul"?>
deleted file mode 100644
--- a/browser/base/content/sync/notification.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-<!ENTITY % notificationDTD SYSTEM "chrome://global/locale/notification.dtd">
-%notificationDTD;
-]>
-
-<bindings id="notificationBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xbl="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <binding id="notificationbox" extends="chrome://global/content/bindings/notification.xml#notificationbox">
-    <content>
-      <xul:vbox xbl:inherits="hidden=notificationshidden">
-        <xul:spacer/>
-        <children includes="notification"/>
-      </xul:vbox>
-      <children/>
-    </content>
-
-    <implementation>
-      <constructor><![CDATA[
-        let temp = {};
-        Cu.import("resource://services-common/observers.js", temp);
-        temp.Observers.add("weave:notification:added", this.onNotificationAdded, this);
-        temp.Observers.add("weave:notification:removed", this.onNotificationRemoved, this);
-
-        for (var notification of Weave.Notifications.notifications)
-          this._appendNotification(notification);
-      ]]></constructor>
-
-      <destructor><![CDATA[
-        let temp = {};
-        Cu.import("resource://services-common/observers.js", temp);
-        temp.Observers.remove("weave:notification:added", this.onNotificationAdded, this);
-        temp.Observers.remove("weave:notification:removed", this.onNotificationRemoved, this);
-      ]]></destructor>
-
-      <method name="onNotificationAdded">
-        <parameter name="subject"/>
-        <parameter name="data"/>
-        <body><![CDATA[
-          this._appendNotification(subject);
-        ]]></body>
-      </method>
-
-      <method name="onNotificationRemoved">
-        <parameter name="subject"/>
-        <parameter name="data"/>
-        <body><![CDATA[
-          // If the view of the notification hasn't been removed yet, remove it.
-          var notifications = this.allNotifications;
-          for (var notification of notifications) {
-            if (notification.notification == subject) {
-              notification.close();
-              break;
-            }
-          }
-        ]]></body>
-      </method>
-
-      <method name="_appendNotification">
-        <parameter name="notification"/>
-        <body><![CDATA[
-          var node = this.appendNotification(notification.description,
-                                             notification.title,
-                                             notification.iconURL,
-                                             notification.priority,
-                                             notification.buttons);
-          node.notification = notification;
-
-          if (notification.link) {
-            let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
-            let link = node.ownerDocument.createElementNS(XULNS, "label");
-            link.className = "text-link";
-            link.setAttribute("value", notification.link.text);
-            link.href = notification.link.href;
-            let desc = node.ownerDocument.getAnonymousElementByAttribute(
-              node, "anonid", "messageText"
-            );
-            desc.appendChild(link);
-          }
-        ]]></body>
-      </method>
-
-    </implementation>
-  </binding>
-
-  <binding id="notification" extends="chrome://global/content/bindings/notification.xml#notification">
-    <content>
-      <xul:hbox class="notification-inner" flex="1" xbl:inherits="type">
-        <xul:toolbarbutton ondblclick="event.stopPropagation();"
-                           class="messageCloseButton close-icon tabbable"
-                           xbl:inherits="hidden=hideclose"
-                           tooltiptext="&closeNotification.tooltip;"
-                           oncommand="document.getBindingParent(this).close()"/>
-        <xul:hbox anonid="details" align="center" flex="1">
-          <xul:image anonid="messageImage" class="messageImage" xbl:inherits="src=image"/>
-          <xul:description anonid="messageText" class="messageText" xbl:inherits="xbl:text=label"/>
-
-          <!-- The children are the buttons defined by the notification. -->
-          <xul:hbox oncommand="document.getBindingParent(this)._doButtonCommand(event);">
-            <children/>
-          </xul:hbox>
-        </xul:hbox>
-      </xul:hbox>
-    </content>
-    <implementation>
-      <!-- Note: this used to be a field, but for some reason it kept getting
-         - reset to its default value for TabNotification elements.
-         - As a property, that doesn't happen, even though the property stores
-         - its value in a JS property |_notification| that is not defined
-         - in XBL as a field or property.  Maybe this is wrong, but it works.
-         -->
-      <property name="notification"
-                onget="return this._notification"
-                onset="this._notification = val; return val;"/>
-      <method name="close">
-        <body><![CDATA[
-          Weave.Notifications.remove(this.notification);
-
-          // We should be able to call the base class's close method here
-          // to remove the notification element from the notification box,
-          // but we can't because of bug 373652, so instead we copied its code
-          // and execute it below.
-          var control = this.control;
-          if (control)
-            control.removeNotification(this);
-          else
-            this.hidden = true;
-        ]]></body>
-      </method>
-    </implementation>
-  </binding>
-
-</bindings>
--- a/browser/base/content/test/general/browser_fxa_migrate.js
+++ b/browser/base/content/test/general/browser_fxa_migrate.js
@@ -5,12 +5,14 @@ const STATE_CHANGED_TOPIC = "fxa-migrati
 const NOTIFICATION_TITLE = "fxa-migration";
 
 var imports = {};
 Cu.import("resource://services-sync/FxaMigrator.jsm", imports);
 
 add_task(function* test() {
   // Fake the state where we saw an EOL notification.
   Services.obs.notifyObservers(null, STATE_CHANGED_TOPIC, null);
-  Assert.ok(Weave.Notifications.notifications.some(n => {
-    return n.title == NOTIFICATION_TITLE;
+
+  let notificationBox = document.getElementById("global-notificationbox");
+  Assert.ok(notificationBox.allNotifications.some(n => {
+    return n.getAttribute("value") == NOTIFICATION_TITLE;
   }), "Disconnect notification should be present");
 });
--- a/browser/base/content/test/general/browser_syncui.js
+++ b/browser/base/content/test/general/browser_syncui.js
@@ -1,14 +1,13 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 var {Log} = Cu.import("resource://gre/modules/Log.jsm", {});
 var {Weave} = Cu.import("resource://services-sync/main.js", {});
-var {Notifications} = Cu.import("resource://services-sync/notifications.js", {});
 
 var stringBundle = Cc["@mozilla.org/intl/stringbundle;1"]
                    .getService(Ci.nsIStringBundleService)
                    .createBundle("chrome://weave/locale/services/sync.properties");
 
 // ensure test output sees log messages.
 Log.repository.getLogger("browserwindow.syncui").addAppender(new Log.DumpAppender());
 
@@ -69,70 +68,66 @@ add_task(function* prepare() {
   });
 
   let xps = Components.classes["@mozilla.org/weave/service;1"]
                               .getService(Components.interfaces.nsISupports)
                               .wrappedJSObject;
   yield xps.whenLoaded();
   // Put Sync and the UI into a known state.
   Weave.Status.login = Weave.LOGIN_FAILED_NO_USERNAME;
-  yield notifyAndPromiseUIUpdated("weave:ui:clear-error");
+  yield notifyAndPromiseUIUpdated("weave:service:login:error");
 
   checkBroadcasterVisible("sync-setup-state");
   checkButtonTooltips("Sign In To Sync");
   // mock out the "_needsSetup()" function so we don't short-circuit.
   let oldNeedsSetup = window.gSyncUI._needsSetup;
   window.gSyncUI._needsSetup = () => Promise.resolve(false);
   registerCleanupFunction(() => {
     window.gSyncUI._needsSetup = oldNeedsSetup;
     // and an observer to set the state back to what it should be now we've
     // restored the stub.
-    Services.obs.notifyObservers(null, "weave:ui:clear-error", null);
+    Services.obs.notifyObservers(null, "weave:service:login:finish", null);
   });
   // and a notification to have the state change away from "needs setup"
-  yield notifyAndPromiseUIUpdated("weave:ui:clear-error");
+  yield notifyAndPromiseUIUpdated("weave:service:login:finish");
   checkBroadcasterVisible("sync-syncnow-state");
 });
 
 add_task(function* testSyncNeedsVerification() {
-  Assert.equal(Notifications.notifications.length, 0, "start with no notifications");
   // mock out the "_needsVerification()" function
   let oldNeedsVerification = window.gSyncUI._needsVerification;
   window.gSyncUI._needsVerification = () => true;
   try {
     // a notification for the state change
-    yield notifyAndPromiseUIUpdated("weave:ui:clear-error");
+    yield notifyAndPromiseUIUpdated("weave:service:login:finish");
     checkButtonTooltips("Verify");
   } finally {
     window.gSyncUI._needsVerification = oldNeedsVerification;
   }
 });
 
 
 add_task(function* testSyncLoginError() {
-  Assert.equal(Notifications.notifications.length, 0, "start with no notifications");
   checkBroadcasterVisible("sync-syncnow-state");
 
   // Pretend we are in a "login failed" error state
   Weave.Status.sync = Weave.LOGIN_FAILED;
   Weave.Status.login = Weave.LOGIN_FAILED_LOGIN_REJECTED;
   yield notifyAndPromiseUIUpdated("weave:ui:sync:error");
 
-  Assert.equal(Notifications.notifications.length, 0, "no notifications shown on login error");
   // But the menu *should* reflect the login error.
   checkBroadcasterVisible("sync-reauth-state");
   // The tooltips for the buttons should also reflect it.
   checkButtonTooltips("Reconnect");
 
   // Now pretend we just had a successful login - the error notification should go away.
   Weave.Status.sync = Weave.STATUS_OK;
   Weave.Status.login = Weave.LOGIN_SUCCEEDED;
   yield notifyAndPromiseUIUpdated("weave:service:login:start");
   yield notifyAndPromiseUIUpdated("weave:service:login:finish");
-  Assert.equal(Notifications.notifications.length, 0, "no notifications left");
   // The menus should be back to "all good"
   checkBroadcasterVisible("sync-syncnow-state");
 });
 
 function checkButtonsStatus(shouldBeActive) {
   let button = document.getElementById("sync-button");
   let fxaContainer = document.getElementById("PanelUI-footer-fxa");
   if (shouldBeActive) {
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -127,17 +127,16 @@ browser.jar:
         content/browser/sync/aboutSyncTabs-bindings.xml  (content/sync/aboutSyncTabs-bindings.xml)
         content/browser/sync/setup.xul                (content/sync/setup.xul)
         content/browser/sync/addDevice.js             (content/sync/addDevice.js)
         content/browser/sync/addDevice.xul            (content/sync/addDevice.xul)
         content/browser/sync/setup.js                 (content/sync/setup.js)
         content/browser/sync/genericChange.xul        (content/sync/genericChange.xul)
         content/browser/sync/genericChange.js         (content/sync/genericChange.js)
         content/browser/sync/key.xhtml                (content/sync/key.xhtml)
-        content/browser/sync/notification.xml         (content/sync/notification.xml)
         content/browser/sync/utils.js                 (content/sync/utils.js)
 *       content/browser/sync/customize.xul            (content/sync/customize.xul)
         content/browser/sync/customize.js             (content/sync/customize.js)
         content/browser/sync/customize.css            (content/sync/customize.css)
 #endif
         content/browser/safeMode.css                  (content/safeMode.css)
         content/browser/safeMode.js                   (content/safeMode.js)
         content/browser/safeMode.xul                  (content/safeMode.xul)
--- a/browser/locales/Makefile.in
+++ b/browser/locales/Makefile.in
@@ -122,23 +122,24 @@ libs:: $(FINAL_TARGET)/defaults/profile/
 libs:: $(addprefix generic/profile/,$(PROFILE_FILES))
 	$(SYSINSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)/defaults/profile
 
 libs:: $(call MERGE_FILES,$(addprefix profile/chrome/,$(PROFILE_CHROME)))
 	$(SYSINSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)/defaults/profile/chrome
 
 libs-%:
 	$(NSINSTALL) -D $(DIST)/install
-	@$(MAKE) -C ../../toolkit/locales libs-$*
+	@$(MAKE) -C ../../toolkit/locales libs-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
 	@$(MAKE) -C ../../services/sync/locales AB_CD=$* XPI_NAME=locale-$*
 ifdef MOZ_WEBAPP_RUNTIME
 	@$(MAKE) -C ../../webapprt/locales AB_CD=$* XPI_NAME=locale-$*
 endif
 	@$(MAKE) -C ../../extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$*
 	@$(MAKE) -C ../../intl/locales AB_CD=$* XPI_NAME=locale-$*
+	@$(MAKE) -C ../../devtools/client/locales AB_CD=$* XPI_NAME=locale-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
 	@$(MAKE) -B searchplugins AB_CD=$* XPI_NAME=locale-$*
 	@$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR)
 	@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$*
 
 repackage-win32-installer: WIN32_INSTALLER_OUT=$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe
 repackage-win32-installer: $(call ESCAPE_WILDCARD,$(WIN32_INSTALLER_IN)) $(SUBMAKEFILES) libs-$(AB_CD)
 	@echo 'Repackaging $(WIN32_INSTALLER_IN) into $(WIN32_INSTALLER_OUT).'
 	$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY) export
--- a/browser/locales/filter.py
+++ b/browser/locales/filter.py
@@ -1,16 +1,17 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 def test(mod, path, entity = None):
   import re
   # ignore anything but Firefox
   if mod not in ("netwerk", "dom", "toolkit", "security/manager",
+                 "devtools/client", "devtools/shared",
                  "browser", "webapprt",
                  "extensions/reporter", "extensions/spellcheck",
                  "other-licenses/branding/firefox",
                  "browser/branding/official",
                  "services/sync"):
     return "ignore"
   if mod not in ("browser", "extensions/spellcheck"):
     # we only have exceptions for browser and extensions/spellcheck
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -23,70 +23,16 @@
     locale/browser/syncCustomize.dtd               (%chrome/browser/syncCustomize.dtd)
     locale/browser/aboutSyncTabs.dtd               (%chrome/browser/aboutSyncTabs.dtd)
 #endif
     locale/browser/browser.dtd                     (%chrome/browser/browser.dtd)
     locale/browser/baseMenuOverlay.dtd             (%chrome/browser/baseMenuOverlay.dtd)
     locale/browser/browser.properties              (%chrome/browser/browser.properties)
     locale/browser/browser-pocket.properties       (%chrome/browser/browser-pocket.properties)
     locale/browser/customizableui/customizableWidgets.properties (%chrome/browser/customizableui/customizableWidgets.properties)
-    locale/browser/devtools/aboutdebugging.dtd        (%chrome/browser/devtools/aboutdebugging.dtd)
-    locale/browser/devtools/aboutdebugging.properties (%chrome/browser/devtools/aboutdebugging.properties)
-    locale/browser/devtools/animationinspector.dtd    (%chrome/browser/devtools/animationinspector.dtd)
-    locale/browser/devtools/animationinspector.properties (%chrome/browser/devtools/animationinspector.properties)
-    locale/browser/devtools/appcacheutils.properties  (%chrome/browser/devtools/appcacheutils.properties)
-    locale/browser/devtools/debugger.dtd              (%chrome/browser/devtools/debugger.dtd)
-    locale/browser/devtools/debugger.properties       (%chrome/browser/devtools/debugger.properties)
-    locale/browser/devtools/device.properties         (%chrome/browser/devtools/device.properties)
-    locale/browser/devtools/filterwidget.properties   (%chrome/browser/devtools/filterwidget.properties)
-    locale/browser/devtools/filterwidget.dtd          (%chrome/browser/devtools/filterwidget.dtd)
-    locale/browser/devtools/netmonitor.dtd            (%chrome/browser/devtools/netmonitor.dtd)
-    locale/browser/devtools/netmonitor.properties     (%chrome/browser/devtools/netmonitor.properties)
-    locale/browser/devtools/shadereditor.dtd          (%chrome/browser/devtools/shadereditor.dtd)
-    locale/browser/devtools/shadereditor.properties   (%chrome/browser/devtools/shadereditor.properties)
-    locale/browser/devtools/canvasdebugger.dtd        (%chrome/browser/devtools/canvasdebugger.dtd)
-    locale/browser/devtools/canvasdebugger.properties (%chrome/browser/devtools/canvasdebugger.properties)
-    locale/browser/devtools/webaudioeditor.dtd          (%chrome/browser/devtools/webaudioeditor.dtd)
-    locale/browser/devtools/webaudioeditor.properties   (%chrome/browser/devtools/webaudioeditor.properties)
-    locale/browser/devtools/webconsole.properties     (%chrome/browser/devtools/webconsole.properties)
-    locale/browser/devtools/inspector.properties      (%chrome/browser/devtools/inspector.properties)
-    locale/browser/devtools/jsonview.properties       (%chrome/browser/devtools/jsonview.properties)
-    locale/browser/devtools/tilt.properties           (%chrome/browser/devtools/tilt.properties)
-    locale/browser/devtools/shared.properties         (%chrome/browser/devtools/shared.properties)
-    locale/browser/devtools/scratchpad.properties     (%chrome/browser/devtools/scratchpad.properties)
-    locale/browser/devtools/scratchpad.dtd            (%chrome/browser/devtools/scratchpad.dtd)
-    locale/browser/devtools/storage.properties        (%chrome/browser/devtools/storage.properties)
-    locale/browser/devtools/styleeditor.properties    (%chrome/browser/devtools/styleeditor.properties)
-    locale/browser/devtools/styleeditor.dtd           (%chrome/browser/devtools/styleeditor.dtd)
-    locale/browser/devtools/styleinspector.dtd        (%chrome/browser/devtools/styleinspector.dtd)
-    locale/browser/devtools/webConsole.dtd            (%chrome/browser/devtools/webConsole.dtd)
-    locale/browser/devtools/VariablesView.dtd         (%chrome/browser/devtools/VariablesView.dtd)
-    locale/browser/devtools/sourceeditor.properties   (%chrome/browser/devtools/sourceeditor.properties)
-    locale/browser/devtools/sourceeditor.dtd          (%chrome/browser/devtools/sourceeditor.dtd)
-    locale/browser/devtools/promisedebugger.dtd       (%chrome/browser/devtools/promisedebugger.dtd)
-    locale/browser/devtools/promisedebugger.properties  (%chrome/browser/devtools/promisedebugger.properties)
-    locale/browser/devtools/performance.dtd           (%chrome/browser/devtools/performance.dtd)
-    locale/browser/devtools/performance.properties    (%chrome/browser/devtools/performance.properties)
-    locale/browser/devtools/memory.properties         (%chrome/browser/devtools/memory.properties)
-    locale/browser/devtools/graphs.properties         (%chrome/browser/devtools/graphs.properties)
-    locale/browser/devtools/layoutview.dtd            (%chrome/browser/devtools/layoutview.dtd)
-    locale/browser/devtools/responsiveUI.properties   (%chrome/browser/devtools/responsiveUI.properties)
-    locale/browser/devtools/toolbox.dtd            (%chrome/browser/devtools/toolbox.dtd)
-    locale/browser/devtools/toolbox.properties     (%chrome/browser/devtools/toolbox.properties)
-    locale/browser/devtools/inspector.dtd          (%chrome/browser/devtools/inspector.dtd)
-    locale/browser/devtools/markers.properties     (%chrome/browser/devtools/markers.properties)
-    locale/browser/devtools/projecteditor.properties     (%chrome/browser/devtools/projecteditor.properties)
-    locale/browser/devtools/eyedropper.properties     (%chrome/browser/devtools/eyedropper.properties)
-    locale/browser/devtools/connection-screen.dtd  (%chrome/browser/devtools/connection-screen.dtd)
-    locale/browser/devtools/connection-screen.properties (%chrome/browser/devtools/connection-screen.properties)
-    locale/browser/devtools/font-inspector.dtd     (%chrome/browser/devtools/font-inspector.dtd)
-    locale/browser/devtools/har.properties         (%chrome/browser/devtools/har.properties)
-    locale/browser/devtools/app-manager.properties (%chrome/browser/devtools/app-manager.properties)
-    locale/browser/devtools/webide.dtd             (%chrome/browser/devtools/webide.dtd)
-    locale/browser/devtools/webide.properties      (%chrome/browser/devtools/webide.properties)
     locale/browser/lightweightThemes.properties    (%chrome/browser/lightweightThemes.properties)
     locale/browser/loop/loop.properties            (%chrome/browser/loop/loop.properties)
     locale/browser/newTab.dtd                      (%chrome/browser/newTab.dtd)
     locale/browser/newTab.properties               (%chrome/browser/newTab.properties)
     locale/browser/pageInfo.dtd                    (%chrome/browser/pageInfo.dtd)
     locale/browser/pageInfo.properties             (%chrome/browser/pageInfo.properties)
     locale/browser/quitDialog.properties           (%chrome/browser/quitDialog.properties)
     locale/browser/safeMode.dtd                    (%chrome/browser/safeMode.dtd)
--- a/browser/locales/l10n.ini
+++ b/browser/locales/l10n.ini
@@ -6,16 +6,17 @@
 depth = ../..
 all = browser/locales/all-locales
 
 [compare]
 dirs = browser
      extensions/reporter
      other-licenses/branding/firefox
      browser/branding/official
+     devtools/client
 
 [includes]
 # non-central apps might want to use %(topsrcdir)s here, or other vars
 # RFE: that needs to be supported by compare-locales, too, though
 toolkit = toolkit/locales/l10n.ini
 services_sync = services/sync/locales/l10n.ini
 webapprt = webapprt/locales/l10n.ini
 
deleted file mode 100644
index 84ba18c0a388d48a4aa3e8782f151cb69e20936e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c9805f654c79b22ce0d8435d030e775f3b7492ac..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 128cef90af66bdf67d9d88d3b161fca8f6fe3788..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -567,23 +567,23 @@ menuitem:not([type]):not(.menuitem-toolt
 }
 
 #javascriptConsole {
   list-style-image: url("chrome://global/skin/console/console.png");
 }
 
 /* Primary toolbar buttons */
 
-toolbar .toolbarbutton-1 > .toolbarbutton-icon,
-toolbar .toolbarbutton-1 > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon {
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1 > .toolbarbutton-icon,
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1 > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon {
   max-width: 16px;
 }
 
-toolbar .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > .toolbarbutton-icon,
-toolbar .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon,
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > .toolbarbutton-icon,
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon,
 #bookmarks-menu-button[cui-areatype="toolbar"] > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
   max-width: 18px;
 }
 
 .findbar-button,
 :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1 > .toolbarbutton-menubutton-button,
 :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1 {
   -moz-appearance: none;
@@ -612,17 +612,17 @@ toolbar .toolbarbutton-1:-moz-any(@prima
 :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
   padding: 3px 7px;
 }
 
 :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1 > .toolbarbutton-icon,
 :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1 > .toolbarbutton-menubutton-button > .toolbarbutton-icon,
 :-moz-any(#TabsToolbar, #nav-bar) #bookmarks-menu-button[cui-areatype="toolbar"] > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
   /* horizontal padding + border + actual icon width */
-  max-width: 32px !important /* bug 561154 */;
+  max-width: 32px;
 }
 
 #nav-bar #PanelUI-menu-button {
   -moz-padding-start: 5px;
   -moz-padding-end: 5px;
 }
 
 .findbar-button:not(:-moz-any([checked="true"],[disabled="true"])):hover > .toolbarbutton-text,
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -3,19 +3,16 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 browser.jar:
 % skin browser classic/1.0 %skin/classic/browser/
 % override chrome://global/skin/icons/warning-16.png moz-icon://stock/gtk-dialog-warning?size=menu
 #include ../shared/jar.inc.mn
   skin/classic/browser/sanitizeDialog.css
   skin/classic/browser/aboutSessionRestore-window-icon.png
-  skin/classic/browser/aboutCertError_sectionCollapsed.png
-  skin/classic/browser/aboutCertError_sectionCollapsed-rtl.png
-  skin/classic/browser/aboutCertError_sectionExpanded.png
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/aboutSyncTabs.css
 #endif
   skin/classic/browser/actionicon-tab.png
 * skin/classic/browser/browser.css
 * skin/classic/browser/devedition.css
 * skin/classic/browser/browser-lightweightTheme.css
   skin/classic/browser/click-to-play-warning-stripes.png
deleted file mode 100644
index 84ba18c0a388d48a4aa3e8782f151cb69e20936e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c9805f654c79b22ce0d8435d030e775f3b7492ac..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 128cef90af66bdf67d9d88d3b161fca8f6fe3788..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -58,16 +58,22 @@
   content: "";
   display: -moz-box;
   height: 2px;
   margin-top: -2px;
   position: relative;
   z-index: 2; /* navbar is at 1 */
 }
 
+@media (-moz-mac-yosemite-theme) {
+  #navigator-toolbox::after {
+    background-image: linear-gradient(to top, hsla(0,0%,0%,.1), hsla(0,0%,0%,.1) 1px, hsla(0,0%,100%,0) 1px, hsla(0,0%,100%,0) 2px, transparent 3px);
+  }
+}
+
 #navigator-toolbox toolbarbutton:-moz-lwtheme {
   color: inherit;
   text-shadow: inherit;
 }
 
 #main-window {
   -moz-appearance: none;
   background-color: #eeeeee;
@@ -144,16 +150,20 @@ toolbarseparator {
   background: url(chrome://browser/skin/Toolbar-background-noise.png) hsl(0,0%,83%);
 }
 
 /* remove noise texture on Yosemite */
 @media (-moz-mac-yosemite-theme) {
   #navigator-toolbox > toolbar:not(#TabsToolbar):not(#nav-bar):not(:-moz-lwtheme) {
     background-image: none;
   }
+
+  #navigator-toolbox > toolbar:-moz-window-inactive:not(#TabsToolbar):not(#nav-bar):not(:-moz-lwtheme) {
+    background-color: hsl(0,0%,95%);
+  }
 }
 
 #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):not(#nav-bar):not(#addon-bar) {
   overflow: -moz-hidden-unscrollable;
   max-height: 4em;
   transition: min-height 170ms ease-out, max-height 170ms ease-out;
 }
 
@@ -186,16 +196,20 @@ toolbarseparator {
   }
 }
 
 /* remove noise texture on Yosemite */
 @media (-moz-mac-yosemite-theme) {
   #nav-bar {
     background: linear-gradient(hsl(0,0%,93%), hsl(0,0%,83%));
   }
+
+  #nav-bar:-moz-window-inactive {
+    background: linear-gradient(hsl(0,0%,97%), hsl(0,0%,95%));
+  }
 }
 
 /* Draw the bottom border of the tabs toolbar when it's not using
    -moz-appearance: toolbar. */
 #main-window:-moz-any([sizemode="fullscreen"],[customize-entered]) #TabsToolbar:not([collapsed="true"]) + #nav-bar,
 #main-window:not([tabsintitlebar]) #TabsToolbar:not([collapsed="true"]) + #nav-bar,
 #TabsToolbar:not([collapsed="true"]) + #nav-bar:-moz-lwtheme {
   border-top: 1px solid hsla(0,0%,0%,.3);
@@ -212,16 +226,20 @@ toolbarseparator {
   #main-window[tabsintitlebar] #TabsToolbar:not([collapsed="true"]) + #nav-bar:not(:-moz-lwtheme) {
     border-top: 1px solid hsla(0,0%,0%,.2);
     background-clip: padding-box;
     margin-top: calc(-1 * var(--navbar-tab-toolbar-highlight-overlap));
     /* Position the toolbar above the bottom of background tabs */
     position: relative;
     z-index: 1;
   }
+
+  #main-window[tabsintitlebar] #TabsToolbar:not([collapsed="true"]) + #nav-bar:-moz-window-inactive:not(:-moz-lwtheme) {
+    border-top-color: hsla(0,0%,0%,.05);
+  }
 }
 
 #nav-bar-customization-target {
   padding: 4px;
 }
 
 #PersonalToolbar {
   padding: 0 4px 4px;
@@ -591,24 +609,24 @@ toolbarpaletteitem[place="palette"] > #p
 
   #panelMenu_pocket > .toolbarbutton-icon {
     width: 16px;
   }
 }
 
 /* ----- PRIMARY TOOLBAR BUTTONS ----- */
 
-toolbar .toolbarbutton-1 > .toolbarbutton-icon,
-toolbar .toolbarbutton-1 > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon {
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1 > .toolbarbutton-icon,
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1 > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon {
   max-width: 16px;
   margin: 1px;
 }
 
-toolbar .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > .toolbarbutton-icon,
-toolbar .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon {
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > .toolbarbutton-icon,
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon {
   max-width: 18px;
   margin: 0;
 }
 
 toolbar .toolbarbutton-1:not([type="menu-button"]),
 .toolbarbutton-1 > .toolbarbutton-menubutton-button,
 .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
   -moz-box-orient: vertical;
@@ -2541,16 +2559,64 @@ toolbarbutton.chevron > .toolbarbutton-m
     list-style-image: url("chrome://browser/skin/tabbrowser/connecting@2x.png");
   }
 
   .tab-throbber[progress] {
     list-style-image: url("chrome://browser/skin/tabbrowser/loading@2x.png");
   }
 }
 
+@media (-moz-mac-yosemite-theme) {
+  .tab-background-middle[visuallyselected=true]:-moz-window-inactive {
+    background-image: url(chrome://browser/skin/yosemite/tab-active-middle-inactive.png),
+                      @fgTabTextureYosemiteInactive@,
+                      none;
+  }
+
+  .tab-background-start[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(ltr)::after,
+  .tab-background-end[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(rtl)::after {
+    background-image: url(chrome://browser/skin/yosemite/tab-stroke-start-inactive.png);
+  }
+
+  .tab-background-end[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(ltr)::after,
+  .tab-background-start[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(rtl)::after {
+    background-image: url(chrome://browser/skin/yosemite/tab-stroke-end-inactive.png);
+  }
+
+  .tab-background-start[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(ltr):not(:-moz-lwtheme)::before,
+  .tab-background-end[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(rtl):not(:-moz-lwtheme)::before {
+    background-image: url(chrome://browser/skin/yosemite/tab-selected-start-inactive.svg);
+    background-size: 100% 100%;
+  }
+
+  .tab-background-end[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(ltr):not(:-moz-lwtheme)::before,
+  .tab-background-start[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(rtl):not(:-moz-lwtheme)::before {
+    background-image: url(chrome://browser/skin/yosemite/tab-selected-end-inactive.svg);
+    background-size: 100% 100%;
+  }
+
+  @media (min-resolution: 2dppx) {
+    .tab-background-middle[visuallyselected=true]:-moz-window-inactive {
+      background-image: url(chrome://browser/skin/yosemite/tab-active-middle-inactive@2x.png),
+                        @fgTabTextureYosemiteInactive@,
+                        none;
+    }
+
+    .tab-background-start[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(ltr)::after,
+    .tab-background-end[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(rtl)::after {
+      background-image: url(chrome://browser/skin/yosemite/tab-stroke-start-inactive@2x.png);
+    }
+
+    .tab-background-end[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(ltr)::after,
+    .tab-background-start[visuallyselected=true]:-moz-window-inactive:-moz-locale-dir(rtl)::after {
+      background-image: url(chrome://browser/skin/yosemite/tab-stroke-end-inactive@2x.png);
+    }
+  }
+}
+
 .tabbrowser-tab:not(:hover) > .tab-stack > .tab-content > .tab-icon-image:not([visuallyselected="true"]) {
   opacity: .9;
 }
 
 /*
  * Force the overlay to create a new stacking context so it always appears on
  * top of the icon.
  */
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -2,19 +2,16 @@
 # License, v. 2.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.jar:
 % skin browser classic/1.0 %skin/classic/browser/
 #include ../shared/jar.inc.mn
   skin/classic/browser/sanitizeDialog.css
   skin/classic/browser/aboutSessionRestore-window-icon.png
-  skin/classic/browser/aboutCertError_sectionCollapsed.png
-  skin/classic/browser/aboutCertError_sectionCollapsed-rtl.png
-  skin/classic/browser/aboutCertError_sectionExpanded.png
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/aboutSyncTabs.css
 #endif
   skin/classic/browser/actionicon-tab.png
   skin/classic/browser/actionicon-tab@2x.png
 * skin/classic/browser/browser.css
 * skin/classic/browser/devedition.css
 * skin/classic/browser/browser-lightweightTheme.css
@@ -247,35 +244,43 @@ browser.jar:
   skin/classic/browser/syncProgress-toolbar-inverted@2x.png
 #endif
   skin/classic/browser/Toolbar-background-noise.png         (Toolbar-background-noise.png)
   skin/classic/browser/lion/toolbarbutton-dropmarker.png    (toolbarbutton-dropmarker-lion.png)
   skin/classic/browser/toolbarbutton-dropmarker@2x.png      (toolbarbutton-dropmarker-lion@2x.png)
   skin/classic/browser/lion/tabbrowser/alltabs-box-bkgnd-icon.png      (tabbrowser/alltabs-box-bkgnd-icon-lion.png)
   skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon@2x.png        (tabbrowser/alltabs-box-bkgnd-icon-lion@2x.png)
   skin/classic/browser/lion/tabview/tabview.png                        (tabview/tabview-lion.png)
-  skin/classic/browser/lion/places/toolbar.png              (places/toolbar-lion.png)
-  skin/classic/browser/yosemite/Toolbar.png                 (Toolbar-yosemite.png)
-  skin/classic/browser/yosemite/Toolbar@2x.png              (Toolbar-yosemite@2x.png)
-  skin/classic/browser/yosemite/menuPanel.png               (menuPanel-yosemite.png)
-  skin/classic/browser/yosemite/menuPanel@2x.png            (menuPanel-yosemite@2x.png)
-  skin/classic/browser/yosemite/menuPanel-customize.png     (menuPanel-customize-yosemite.png)
-  skin/classic/browser/yosemite/menuPanel-customize@2x.png  (menuPanel-customize-yosemite@2x.png)
-  skin/classic/browser/yosemite/menuPanel-exit.png          (menuPanel-exit-yosemite.png)
-  skin/classic/browser/yosemite/menuPanel-exit@2x.png       (menuPanel-exit-yosemite@2x.png)
-  skin/classic/browser/yosemite/menuPanel-help.png          (menuPanel-help-yosemite.png)
-  skin/classic/browser/yosemite/menuPanel-help@2x.png       (menuPanel-help-yosemite@2x.png)
-  skin/classic/browser/yosemite/menuPanel-small.png         (menuPanel-small-yosemite.png)
-  skin/classic/browser/yosemite/menuPanel-small@2x.png      (menuPanel-small-yosemite@2x.png)
-  skin/classic/browser/yosemite/reload-stop-go.png          (reload-stop-go-yosemite.png)
-  skin/classic/browser/yosemite/reload-stop-go@2x.png       (reload-stop-go-yosemite@2x.png)
-  skin/classic/browser/yosemite/sync-horizontalbar.png      (sync-horizontalbar-yosemite.png)
-  skin/classic/browser/yosemite/sync-horizontalbar@2x.png   (sync-horizontalbar-yosemite@2x.png)
-  skin/classic/browser/yosemite/thumburger.png              (customizableui/thumburger-yosemite.png)
-  skin/classic/browser/yosemite/thumburger@2x.png           (customizableui/thumburger-yosemite@2x.png)
+  skin/classic/browser/lion/places/toolbar.png                         (places/toolbar-lion.png)
+  skin/classic/browser/yosemite/Toolbar.png                            (Toolbar-yosemite.png)
+  skin/classic/browser/yosemite/Toolbar@2x.png                         (Toolbar-yosemite@2x.png)
+  skin/classic/browser/yosemite/menuPanel.png                          (menuPanel-yosemite.png)
+  skin/classic/browser/yosemite/menuPanel@2x.png                       (menuPanel-yosemite@2x.png)
+  skin/classic/browser/yosemite/menuPanel-customize.png                (menuPanel-customize-yosemite.png)
+  skin/classic/browser/yosemite/menuPanel-customize@2x.png             (menuPanel-customize-yosemite@2x.png)
+  skin/classic/browser/yosemite/menuPanel-exit.png                     (menuPanel-exit-yosemite.png)
+  skin/classic/browser/yosemite/menuPanel-exit@2x.png                  (menuPanel-exit-yosemite@2x.png)
+  skin/classic/browser/yosemite/menuPanel-help.png                     (menuPanel-help-yosemite.png)
+  skin/classic/browser/yosemite/menuPanel-help@2x.png                  (menuPanel-help-yosemite@2x.png)
+  skin/classic/browser/yosemite/menuPanel-small.png                    (menuPanel-small-yosemite.png)
+  skin/classic/browser/yosemite/menuPanel-small@2x.png                 (menuPanel-small-yosemite@2x.png)
+  skin/classic/browser/yosemite/reload-stop-go.png                     (reload-stop-go-yosemite.png)
+  skin/classic/browser/yosemite/reload-stop-go@2x.png                  (reload-stop-go-yosemite@2x.png)
+  skin/classic/browser/yosemite/sync-horizontalbar.png                 (sync-horizontalbar-yosemite.png)
+  skin/classic/browser/yosemite/sync-horizontalbar@2x.png              (sync-horizontalbar-yosemite@2x.png)
+  skin/classic/browser/yosemite/thumburger.png                         (customizableui/thumburger-yosemite.png)
+  skin/classic/browser/yosemite/thumburger@2x.png                      (customizableui/thumburger-yosemite@2x.png)
+  skin/classic/browser/yosemite/tab-selected-end-inactive.svg          (tabbrowser/tab-selected-end-yosemite-inactive.svg)
+  skin/classic/browser/yosemite/tab-selected-start-inactive.svg        (tabbrowser/tab-selected-start-yosemite-inactive.svg)
+  skin/classic/browser/yosemite/tab-active-middle-inactive.png         (tabbrowser/tab-active-middle-yosemite-inactive.png)
+  skin/classic/browser/yosemite/tab-active-middle-inactive@2x.png      (tabbrowser/tab-active-middle-yosemite-inactive@2x.png)
+  skin/classic/browser/yosemite/tab-stroke-end-inactive.png            (tabbrowser/tab-stroke-end-yosemite-inactive.png)
+  skin/classic/browser/yosemite/tab-stroke-end-inactive@2x.png         (tabbrowser/tab-stroke-end-yosemite-inactive@2x.png)
+  skin/classic/browser/yosemite/tab-stroke-start-inactive.png          (tabbrowser/tab-stroke-start-yosemite-inactive.png)
+  skin/classic/browser/yosemite/tab-stroke-start-inactive@2x.png       (tabbrowser/tab-stroke-start-yosemite-inactive@2x.png)
 #ifdef E10S_TESTING_ONLY
   skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png)
 #endif
 
 [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 % override chrome://browser/skin/feeds/audioFeedIcon.png                   chrome://browser/skin/feeds/feedIcon.png
 % override chrome://browser/skin/feeds/audioFeedIcon16.png                 chrome://browser/skin/feeds/feedIcon16.png
 % override chrome://browser/skin/feeds/videoFeedIcon.png                   chrome://browser/skin/feeds/feedIcon.png
@@ -301,10 +306,10 @@ browser.jar:
 % override chrome://browser/skin/menuPanel-help.png                        chrome://browser/skin/yosemite/menuPanel-help.png                       os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-help@2x.png                     chrome://browser/skin/yosemite/menuPanel-help@2x.png                    os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-small.png                       chrome://browser/skin/yosemite/menuPanel-small.png                      os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-small@2x.png                    chrome://browser/skin/yosemite/menuPanel-small@2x.png                   os=Darwin osversion>=10.10
 % override chrome://browser/skin/preferences/checkbox.png                  chrome://browser/skin/yosemite/preferences/checkbox.png                 os=Darwin osversion>=10.10
 % override chrome://browser/skin/preferences/checkbox@2x.png               chrome://browser/skin/yosemite/preferences/checkbox@2x.png              os=Darwin osversion>=10.10
 % override chrome://browser/skin/reload-stop-go.png                        chrome://browser/skin/yosemite/reload-stop-go.png                       os=Darwin osversion>=10.10
 % override chrome://browser/skin/reload-stop-go@2x.png                     chrome://browser/skin/yosemite/reload-stop-go@2x.png                    os=Darwin osversion>=10.10
-% override chrome://browser/skin/sync-horizontalbar.png                    chrome://browser/skin/yosemite/sync-horizontalbar.png                   os=Darwin osversion>=10.10
-% override chrome://browser/skin/sync-horizontalbar@2x.png                 chrome://browser/skin/yosemite/sync-horizontalbar@2x.png                os=Darwin osversion>=10.10
+% override chrome://browser/skin/sync-horizontalbar.png                    chrome://browser/skin/yosemite/sync-horizontalbar.png               os=Darwin osversion>=10.10
+% override chrome://browser/skin/sync-horizontalbar@2x.png                 chrome://browser/skin/yosemite/sync-horizontalbar@2x.png            os=Darwin osversion>=10.10
--- a/browser/themes/osx/shared.inc
+++ b/browser/themes/osx/shared.inc
@@ -1,12 +1,13 @@
 %include ../../../toolkit/themes/osx/global/shared.inc
 %include ../shared/browser.inc
 
 %filter substitution
 
 %define fgTabTexture linear-gradient(transparent 2px, hsla(0,0%,100%,.6) 2px, hsla(0,0%,100%,.6) 3px, hsl(0,0%,99%) 3px, hsl(0,0%,93%))
+%define fgTabTextureYosemiteInactive linear-gradient(transparent 2px, hsl(0,0%,99%) 2px, hsl(0,0%,97%))
 %define toolbarColorLWT rgba(253,253,253,0.45)
 %define fgTabTextureLWT linear-gradient(transparent 2px, rgba(254,254,254,.72) 2px, @toolbarColorLWT@)
 %define fgTabBackgroundColor transparent
 %define hudButton -moz-appearance: none; color: #434343; border-radius: 4px; border: 1px solid #b5b5b5; background: linear-gradient(#fff, #f2f2f2); box-shadow: inset 0 1px rgba(255,255,255,.8), inset 0 0 1px rgba(255,255, 255,.25), 0 1px rgba(255,255,255,.3); background-clip: padding-box; background-origin: padding-box; padding: 2px 6px;
 %define hudButtonPressed box-shadow: inset 0 1px 4px -3px #000, 0 1px rgba(255,255,255,.3);
 %define hudButtonFocused box-shadow: 0 0 1px -moz-mac-focusring inset, 0 0 4px 1px -moz-mac-focusring, 0 0 2px 1px -moz-mac-focusring;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9f74c4e7654d18ca9b811c778ebf8586ba525dcd
GIT binary patch
literal 78
zc%17D@N?(olHy`uVBq!ia0vp^Y(Ol}!2%@nWJ)FgDN#=s$B+ufWCzwPj}P@yOhy-Y
bdzctXJvg10Jp088RKVcr>gTe~DWM4fDHRb@
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..50961db7ec08f990d349ab94ebe4296cddd72368
GIT binary patch
literal 89
zc%17D@N?(olHy`uVBq!ia0vp^JV0#6!2%?=o-;ZHq!c_|978G?lNFd(B)0ER{kI%M
kzTk2@s3F0+I6;Jg;kAw`r|rIrB|x<dp00i_>zopr0EOolmjD0&
new file mode 100644
--- /dev/null
+++ b/browser/themes/osx/tabbrowser/tab-selected-end-yosemite-inactive.svg
@@ -0,0 +1,28 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.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="30px" height="31px" preserveAspectRatio="none">
+  <defs>
+    <style>
+      #tab-background-fill {
+        background-color: transparent;
+        background-image: linear-gradient(transparent, transparent 2px, hsl(0,0%,99%) 2px, hsl(0,0%,97%));
+        background-repeat: no-repeat;
+        height: 100%;
+        width: 100%;
+      }
+    </style>
+
+    <clipPath id="tab-curve-clip-path-end" clipPathUnits="objectBoundingBox">
+      <path d="m 0,0.0625 -0.05,0 0,0.938 1,0 0,-0.028 C 0.67917542,0.95840561 0.56569036,0.81970962 0.51599998,0.5625 0.48279998,0.3905 0.465,0.0659 0,0.0625 z"/>
+    </clipPath>
+
+    <clipPath id="tab-hover-clip-path" clipPathUnits="objectBoundingBox">
+      <path d="M 0,0.2 0,1 1,1, 1,0.2 z"/>
+    </clipPath>
+  </defs>
+
+  <foreignObject width="30" height="31" clip-path="url(#tab-curve-clip-path-end)">
+    <div id="tab-background-fill" xmlns="http://www.w3.org/1999/xhtml"></div>
+  </foreignObject>
+</svg>
new file mode 100644
--- /dev/null
+++ b/browser/themes/osx/tabbrowser/tab-selected-start-yosemite-inactive.svg
@@ -0,0 +1,28 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.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="30px" height="31px" preserveAspectRatio="none">
+  <defs>
+    <style>
+      #tab-background-fill {
+        background-color: transparent;
+        background-image: linear-gradient(transparent, transparent 2px, hsl(0,0%,99%) 2px, hsl(0,0%,97%));
+        background-repeat: no-repeat;
+        height: 100%;
+        width: 100%;
+      }
+    </style>
+
+    <clipPath id="tab-curve-clip-path-start" clipPathUnits="objectBoundingBox">
+      <path d="m 1,0.0625 0.05,0 0,0.938 -1,0 0,-0.028 C 0.32082458,0.95840561 0.4353096,0.81970962 0.48499998,0.5625 0.51819998,0.3905 0.535,0.0659 1,0.0625 z"/>
+    </clipPath>
+
+    <clipPath id="tab-hover-clip-path" clipPathUnits="objectBoundingBox">
+      <path d="M 0,0.2 0,1 1,1, 1,0.2 z"/>
+    </clipPath>
+  </defs>
+
+  <foreignObject width="30" height="31" clip-path="url(#tab-curve-clip-path-start)">
+    <div id="tab-background-fill" xmlns="http://www.w3.org/1999/xhtml"></div>
+  </foreignObject>
+</svg>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4206f0c7dca0188d886a6a10f4a9ba0a6c7767dc
GIT binary patch
literal 339
zc$@)K0j&OsP)<h;3K|Lk000e1NJLTq0015U0018d1ONa4T4lA20003RNkl<Zcmbu<
zGed?^6bJBswr$(CZQGolJ-6ms!=ArIV_wphZNK5vS9s3-%~wYkV%*^hXV}34`cQ#9
z)UIfLYB;J`&zp%0^@TOG<!x6dU9uuiN}}3>Vks1s(1d)XOpa8zo$ufUL-3IMU1hu<
zjJVqkZ%cf<p~Ky7u$K>OaFOFg4EyQ8b)tp`z<&Bj6m-G07Ap|<yOW70l)yu(ong=h
z*J2b*z_k(p8*rW3!v$QV{om!P;2Md59=MhxU<R&TKREECHpvZu8o1`-1g7geOlZ2M
zVqpxf`vg~kPf2GlU&DhvBIK}N=-|cwQJwFq2BS3{U<O^NLs@p>DE+Z_SK9C2%vm&J
l)c&b}0w|5jDVLH+`wyzbPouYMMS}nU002ovPDHLkV1j2in@#`#
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..21ac892703cffc3bb16e4c63e7735984b598f23c
GIT binary patch
literal 718
zc$@*w0x|uGP)<h;3K|Lk000e1NJLTq002Ay002G+1ONa4-951K0007&Nkl<Zcmd_u
z1B{(P5CGtL#@V*5n&)@6`J6On!^Tb#)s4!q4(gyb;@UROH{E~g#`tH8nQWYVYr%gQ
z=^|4h1ri|+A|V8P!N3Rqo=Kt#exOs;MK5~Cog?-a0}r~cG##v7F|Q{7dj(=3Kvnqn
zd^>oiVa2?JEW+a<SUuc`77W5@Ove(e#@;Xdxa(q*yM*vK@B@xOf6NvYa47t(j-DdI
zqd)^Zfd<ULHuO$<PSmGnQ>Pn%FEAcEl~MN=3px!<oU|5m(LU+kw1~Q#lcrG@oxY<~
z2Cc(V^lnk;M9>3o-~#k4n@t-Fu+t-sihMywaKjp`zuQS8ZQ!QO*tbrZ-_iWt9W!F5
z4aLe&mmaK^GsP?;gLHNo`RNi`(c%2C=~<V66M#Q(A)VDe{BX#z8UaTFe>`uXYoUbB
zE^H{Evx*(|-&Q8zAmEQHHBz=tfS2<GoFZeClj-trkg#>GnlE5q;E(;v^a_;#UtS>P
zlmd8NC~JDfFUk|No*%Z-^zsA#I9eg#FbVLjg#wO~0FUMSWe8fsKgy9yN(5}-hxNNE
zByA$MswIu`_^i}yIY&h_J!yjZVeO3;0mlM=Oq9;elk=8}J6J8}{iuE49g->M##yqh
zOir7vBZIW4{3QI2oT;ZDAsu_0(Y|z+obJx~V5j>?6#tJ<<CEUhY@#*X-QEABhv+!4
z@X}#ue>L#+hdUDVoOC$a$KCrY{W1xU0$)BlQ2F70J-B8eU5b>9fl%-VD;PlsS~Y1s
z&O$eOKiDt!?qBE#17CrfMH;~Xdcrm8;Q?5#;OHH3-mE;=d#>_o<+c37AteTaRiEVr
z*n%Fx|HuJRp&YcZ{E1;a7Go*aV;2sIQl`M40U(9}#4OR73;+NC07*qoM6N<$f^w8q
Ao&W#<
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2acbac438c6aea4c4f3c4b0a2efb859a5f8945d7
GIT binary patch
literal 339
zc$@)K0j&OsP)<h;3K|Lk000e1NJLTq0015U0018d1ONa4T4lA20003RNkl<ZcmciC
zLt@+k6bA5bY}ajU+qP{xtJ%lc#K{R}AKxOI7@OEhH?`fqUSa;P_+8-x{wE3axDN-o
z!X2IvK#fP?{<egzg6pbxP2XCn6LwPKfi?WNl<Fykyy+onNe(+1oqYBRshFHe41r9E
z0ne++6AWrU-<M@%0?VU=0y2QbI2=vR;8A!zO$U>9G=|JzdbE}RCXvPavkREi-4P@O
zlVvdmY>!uhz~*-D1SV->0I9*Gn~DP4-Q_5-IUNLmNtPePFQ$2pUre3XiwH28Z3(0W
zi^kpebs|{Q3a^tw(tyF_<a1O^P7pv0IkdQ|bef5MRYR^2K(=^yC+}$R!1}hIG6g*)
lsVRl>sgg1%=v@&6`3>EePmwbnyd?kt002ovPDHLkV1ikcku(4R
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a12fc39a7b10829cffefb0f736eebd8a545ef19f
GIT binary patch
literal 716
zc$@*u0yF)IP)<h;3K|Lk000e1NJLTq002Ay002G+1ONa4-951K0007$Nkl<ZcmeI$
zGnjQ(6vpv)Y};OA+qUhQ>ne4+^i5F3slqO9;wCn_*tW*==I&VKch>pz+x_#u2ls5i
z5*LLa8c9e;4)RfiVh9A53PKFhQ2_a$VVO8&{Sg_gxuWC2kymCuT={Zq&vEFYk3Lu;
z5xFLqSAIpuGgIGf)A!F|O*jTQChBQ?aputdduD?pY@{%g35;MU&bR<%nCM#l+e<V-
zr$1Q1SnJ>2Tu5=n6O+eYe{_MR41t0$lt6q9=81Bdxlj@Yf!x${?4g5I3{=hD(MNNG
zW1%J(`H)*owvRzjlm)r0m0os1Rhs!S?K!oxArQ!W%ba8YRAoZ0>){5&p(@gRF!mhG
zg0d{ggCp#NvQRVs>}@jw%2Hwey^T<p2l;%3VNe!j=3I6|T{`5kF(yG>0pyD*s0)Kk
z)v^xi;vu*7GY;x9ATN)?28EFC+o3K5GFHPvsEdYN)yYVxONQLv4;y4bUhaYoiXh+A
zL0vGUr<%D?7h~6}l>&Km5H`qxyxk3T0g#x|gBqxdfLzkVbXz_icMUSwmM8qih%M7Y
zam8T^)Fnc0>}Dp^WkcSaV<418LfWg@2Xz@Rd!-y3R+cekKd<QD=uDWEWupyqQgOwP
zJKD2S5b`0<OtQ;{+k9yY9opBMVb&Z!I#{VY4Q809`{_ET8K5}{=9uh9Yuwbk&A~|j
z?ezKUEjpN@wcpQxm=DJNLx&zZm<EdkA_$>~L@bh#1%Zi{Ueo=}Z>P`k*1S9>8jKKx
zBHTYB5$#O5zx&1YA07Uvhb;`Y@M;@F9!`3#=GCF+hMrr0YiQ5qPnzg}g<Ee%u+ksc
yqVI3R%Q@CD5{9MWey(tbE1YB>8<@*5Sne0?D*?YIK~4t%0000<MNUMnLSTZFxl?ig
deleted file mode 100644
index 68de89545b2739897372e6f4bba76eb7283af982..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 63415fd8b7bfef8447759361e7eecc2149ff962b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 38b8b3c6468935543ad714306d1fb71300c45816..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -690,23 +690,23 @@ toolbar[brighttext] .toolbarbutton-1 > .
   list-style-image: url("chrome://browser/skin/toolbarbutton-dropdown-arrow-inverted.png");
 }
 
 .toolbarbutton-1 > .toolbarbutton-icon,
 .toolbarbutton-1 > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
   -moz-margin-end: 0;
 }
 
-toolbar .toolbarbutton-1 > .toolbarbutton-icon,
-toolbar .toolbarbutton-1 > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon {
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1 > .toolbarbutton-icon,
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1 > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon {
   max-width: 16px;
 }
 
-toolbar .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > .toolbarbutton-icon,
-toolbar .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon,
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > .toolbarbutton-icon,
+:-moz-any(toolbar, .widget-overflow-list) .toolbarbutton-1:-moz-any(@primaryToolbarButtons@) > :-moz-any(.toolbarbutton-menubutton-button, .toolbarbutton-badge-stack) > .toolbarbutton-icon,
 #bookmarks-menu-button[cui-areatype="toolbar"] > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
   max-width: 18px;
 }
 
 .findbar-button,
 #nav-bar .toolbarbutton-1,
 #nav-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button {
   -moz-appearance: none;
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -2,19 +2,16 @@
 # License, v. 2.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.jar:
 % skin browser classic/1.0 %skin/classic/browser/
 #include ../shared/jar.inc.mn
   skin/classic/browser/sanitizeDialog.css
   skin/classic/browser/aboutSessionRestore-window-icon.png
-  skin/classic/browser/aboutCertError_sectionCollapsed.png
-  skin/classic/browser/aboutCertError_sectionCollapsed-rtl.png
-  skin/classic/browser/aboutCertError_sectionExpanded.png
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/aboutSyncTabs.css
 #endif
   skin/classic/browser/actionicon-tab.png
   skin/classic/browser/actionicon-tab@2x.png
   skin/classic/browser/actionicon-tab-XPVista7.png
 * skin/classic/browser/browser.css
 * skin/classic/browser/devedition.css
--- a/devtools/client/aboutdebugging/aboutdebugging.xhtml
+++ b/devtools/client/aboutdebugging/aboutdebugging.xhtml
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
 <!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> %htmlDTD;
-<!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd"> %toolboxDTD;
-<!ENTITY % aboutdebuggingDTD SYSTEM "chrome://browser/locale/devtools/aboutdebugging.dtd"> %aboutdebuggingDTD;
+<!ENTITY % toolboxDTD SYSTEM "chrome://devtools/locale/toolbox.dtd"> %toolboxDTD;
+<!ENTITY % aboutdebuggingDTD SYSTEM "chrome://devtools/locale/aboutdebugging.dtd"> %aboutdebuggingDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <title>&aboutDebugging.title;</title>
     <link rel="stylesheet" href="chrome://global/skin/global.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://global/skin/in-content/common.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://devtools/content/aboutdebugging/aboutdebugging.css"  type="text/css"/>
--- a/devtools/client/aboutdebugging/components/addons.js
+++ b/devtools/client/aboutdebugging/components/addons.js
@@ -12,17 +12,17 @@ loader.lazyRequireGetter(this, "TargetLi
   "devtools/client/aboutdebugging/components/target-list", true);
 loader.lazyRequireGetter(this, "Services");
 
 loader.lazyImporter(this, "AddonManager",
   "resource://gre/modules/AddonManager.jsm");
 
 const ExtensionIcon = "chrome://mozapps/skin/extensions/extensionGeneric.svg";
 const Strings = Services.strings.createBundle(
-  "chrome://browser/locale/devtools/aboutdebugging.properties");
+  "chrome://devtools/locale/aboutdebugging.properties");
 
 exports.AddonsComponent = React.createClass({
   displayName: "AddonsComponent",
 
   getInitialState() {
     return {
       extensions: []
     };
--- a/devtools/client/aboutdebugging/components/target-list.js
+++ b/devtools/client/aboutdebugging/components/target-list.js
@@ -8,17 +8,17 @@
 
 loader.lazyRequireGetter(this, "React",
   "devtools/client/shared/vendor/react");
 loader.lazyRequireGetter(this, "TargetComponent",
   "devtools/client/aboutdebugging/components/target", true);
 loader.lazyRequireGetter(this, "Services");
 
 const Strings = Services.strings.createBundle(
-  "chrome://browser/locale/devtools/aboutdebugging.properties");
+  "chrome://devtools/locale/aboutdebugging.properties");
 const LocaleCompare = (a, b) => {
   return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
 };
 
 exports.TargetListComponent = React.createClass({
   displayName: "TargetListComponent",
 
   render() {
--- a/devtools/client/aboutdebugging/components/target.js
+++ b/devtools/client/aboutdebugging/components/target.js
@@ -16,17 +16,17 @@ loader.lazyRequireGetter(this, "Toolbox"
 loader.lazyRequireGetter(this, "Services");
 
 loader.lazyImporter(this, "BrowserToolboxProcess",
   "resource://devtools/client/framework/ToolboxProcess.jsm");
 loader.lazyImporter(this, "gDevTools",
   "resource://devtools/client/framework/gDevTools.jsm");
 
 const Strings = Services.strings.createBundle(
-  "chrome://browser/locale/devtools/aboutdebugging.properties");
+  "chrome://devtools/locale/aboutdebugging.properties");
 
 exports.TargetComponent = React.createClass({
   displayName: "TargetComponent",
 
   debug() {
     let client = this.props.client;
     let target = this.props.target;
     switch (target.type) {
--- a/devtools/client/aboutdebugging/components/workers.js
+++ b/devtools/client/aboutdebugging/components/workers.js
@@ -10,17 +10,17 @@ loader.lazyRequireGetter(this, "Ci",
   "chrome", true);
 loader.lazyRequireGetter(this, "React",
   "devtools/client/shared/vendor/react");
 loader.lazyRequireGetter(this, "TargetListComponent",
   "devtools/client/aboutdebugging/components/target-list", true);
 loader.lazyRequireGetter(this, "Services");
 
 const Strings = Services.strings.createBundle(
-  "chrome://browser/locale/devtools/aboutdebugging.properties");
+  "chrome://devtools/locale/aboutdebugging.properties");
 
 exports.WorkersComponent = React.createClass({
   displayName: "WorkersComponent",
 
   getInitialState() {
     return {
       workers: {
         service: [],
--- a/devtools/client/animationinspector/animation-controller.js
+++ b/devtools/client/animationinspector/animation-controller.js
@@ -15,17 +15,17 @@ Cu.import("resource://gre/modules/Consol
 Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm");
 
 loader.lazyRequireGetter(this, "promise");
 loader.lazyRequireGetter(this, "EventEmitter",
                                "devtools/shared/event-emitter");
 loader.lazyRequireGetter(this, "AnimationsFront",
                                "devtools/server/actors/animation", true);
 
-const STRINGS_URI = "chrome://browser/locale/devtools/animationinspector.properties";
+const STRINGS_URI = "chrome://devtools/locale/animationinspector.properties";
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 
 // Global toolbox/inspector, set when startup is called.
 var gToolbox, gInspector;
 
 /**
  * Startup the animationinspector controller and view, called by the sidebar
  * widget when loading/unloading the iframe into the tab.
--- a/devtools/client/animationinspector/animation-inspector.xhtml
+++ b/devtools/client/animationinspector/animation-inspector.xhtml
@@ -1,22 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE html [
-<!ENTITY % animationinspectorDTD SYSTEM "chrome://browser/locale/devtools/animationinspector.dtd" >
+<!ENTITY % animationinspectorDTD SYSTEM "chrome://devtools/locale/animationinspector.dtd" >
  %animationinspectorDTD;
 ]>
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <title>&title;</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/animationinspector.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/animationinspector.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
   </head>
   <body class="theme-sidebar devtools-monospace" role="application" empty="true">
     <div id="global-toolbar" class="theme-toolbar">
       <span class="label">&allAnimations;</span>
       <button id="toggle-all" standalone="true" class="devtools-button pause-button"></button>
     </div>
     <div id="timeline-toolbar" class="theme-toolbar">
--- a/devtools/client/animationinspector/components.js
+++ b/devtools/client/animationinspector/components.js
@@ -24,17 +24,17 @@ Cu.import("resource://devtools/client/sh
 const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
 const {
   createNode,
   drawGraphElementBackground,
   findOptimalTimeInterval,
   TargetNodeHighlighter
 } = require("devtools/client/animationinspector/utils");
 
-const STRINGS_URI = "chrome://browser/locale/devtools/animationinspector.properties";
+const STRINGS_URI = "chrome://devtools/locale/animationinspector.properties";
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 const MILLIS_TIME_FORMAT_MAX_DURATION = 4000;
 // The minimum spacing between 2 time graduation headers in the timeline (px).
 const TIME_GRADUATION_MIN_SPACING = 40;
 // List of playback rate presets displayed in the timeline toolbar.
 const PLAYBACK_RATES = [.1, .25, .5, 1, 2, 5, 10];
 // The size of the fast-track icon (for compositor-running animations), this is
 // used to position the icon correctly.
--- a/devtools/client/animationinspector/test/browser_animation_running_on_compositor.js
+++ b/devtools/client/animationinspector/test/browser_animation_running_on_compositor.js
@@ -2,17 +2,17 @@
 /* Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test that when animations displayed in the timeline are running on the
 // compositor, they get a special icon and information in the tooltip.
 
-const STRINGS_URI = "chrome://browser/locale/devtools/animationinspector.properties";
+const STRINGS_URI = "chrome://devtools/locale/animationinspector.properties";
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 
 add_task(function*() {
   yield addTab(TEST_URL_ROOT + "doc_simple_animation.html");
   let {inspector, panel} = yield openAnimationInspector();
   let timeline = panel.animationsTimelineComponent;
 
   info("Select a test node we know has an animation running on the compositor");
--- a/devtools/client/canvasdebugger/canvasdebugger.js
+++ b/devtools/client/canvasdebugger/canvasdebugger.js
@@ -75,18 +75,18 @@ const EVENTS = {
 
   // When a source is shown in the JavaScript Debugger at a specific location.
   SOURCE_SHOWN_IN_JS_DEBUGGER: "CanvasDebugger:SourceShownInJsDebugger",
   SOURCE_NOT_FOUND_IN_JS_DEBUGGER: "CanvasDebugger:SourceNotFoundInJsDebugger"
 };
 XPCOMUtils.defineConstant(this, "EVENTS", EVENTS);
 
 const HTML_NS = "http://www.w3.org/1999/xhtml";
-const STRINGS_URI = "chrome://browser/locale/devtools/canvasdebugger.properties";
-const SHARED_STRINGS_URI = "chrome://browser/locale/devtools/shared.properties";
+const STRINGS_URI = "chrome://devtools/locale/canvasdebugger.properties";
+const SHARED_STRINGS_URI = "chrome://devtools/locale/shared.properties";
 
 const SNAPSHOT_START_RECORDING_DELAY = 10; // ms
 const SNAPSHOT_DATA_EXPORT_MAX_BLOCK = 1000; // ms
 const SNAPSHOT_DATA_DISPLAY_DELAY = 10; // ms
 const SCREENSHOT_DISPLAY_DELAY = 100; // ms
 const STACK_FUNC_INDENTATION = 14; // px
 
 // This identifier string is simply used to tentatively ascertain whether or not
--- a/devtools/client/canvasdebugger/canvasdebugger.xul
+++ b/devtools/client/canvasdebugger/canvasdebugger.xul
@@ -1,19 +1,19 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/canvasdebugger.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/canvasdebugger.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % canvasDebuggerDTD SYSTEM "chrome://browser/locale/devtools/canvasdebugger.dtd">
+  <!ENTITY % canvasDebuggerDTD SYSTEM "chrome://devtools/locale/canvasdebugger.dtd">
   %canvasDebuggerDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <script src="chrome://devtools/content/shared/theme-switching.js"/>
   <script type="application/javascript" src="canvasdebugger.js"/>
   <script type="application/javascript" src="callslist.js"/>
   <script type="application/javascript" src="snapshotslist.js"/>
--- a/devtools/client/commandline/commandlineoutput.xhtml
+++ b/devtools/client/commandline/commandlineoutput.xhtml
@@ -5,14 +5,14 @@
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
   <link rel="stylesheet" href="chrome://global/skin/global.css" type="text/css"/>
   <link rel="stylesheet" href="chrome://devtools/content/commandline/commandline.css" type="text/css"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/commandline.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/commandline.css" type="text/css"/>
 </head>
 <body class="gcli-body">
 <div id="gcli-output-root"></div>
 </body>
 </html>
--- a/devtools/client/commandline/commandlinetooltip.xhtml
+++ b/devtools/client/commandline/commandlinetooltip.xhtml
@@ -5,15 +5,15 @@
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
   <link rel="stylesheet" href="chrome://global/skin/global.css" type="text/css"/>
   <link rel="stylesheet" href="chrome://devtools/content/commandline/commandline.css" type="text/css"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/commandline.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/commandline.css" type="text/css"/>
 </head>
 <body class="gcli-body">
 <div id="gcli-tooltip-root"></div>
 <div id="gcli-tooltip-connector"></div>
 </body>
 </html>
--- a/devtools/client/debugger/debugger-controller.js
+++ b/devtools/client/debugger/debugger-controller.js
@@ -2,17 +2,17 @@
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.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";
 
 var { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
-const DBG_STRINGS_URI = "chrome://browser/locale/devtools/debugger.properties";
+const DBG_STRINGS_URI = "chrome://devtools/locale/debugger.properties";
 const NEW_SOURCE_IGNORED_URLS = ["debugger eval code", "XStringBundle"];
 const NEW_SOURCE_DISPLAY_DELAY = 200; // ms
 const FETCH_SOURCE_RESPONSE_DELAY = 200; // ms
 const FRAME_STEP_CLEAR_DELAY = 100; // ms
 const CALL_STACK_PAGE_SIZE = 25; // frames
 
 // The panel's window global is an EventEmitter firing the following events:
 const EVENTS = {
--- a/devtools/client/debugger/debugger.xul
+++ b/devtools/client/debugger/debugger.xul
@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
 <?xml-stylesheet href="debugger.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/debugger.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/debugger.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % debuggerDTD SYSTEM "chrome://browser/locale/devtools/debugger.dtd">
+  <!ENTITY % debuggerDTD SYSTEM "chrome://devtools/locale/debugger.dtd">
   %debuggerDTD;
 ]>
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         xmlns:html="http://www.w3.org/1999/xhtml"
         macanimationtype="document"
         fullscreenbutton="true"
--- a/devtools/client/definitions.js
+++ b/devtools/client/definitions.js
@@ -21,29 +21,29 @@ loader.lazyGetter(this, "CanvasDebuggerP
 loader.lazyGetter(this, "WebAudioEditorPanel", () => require("devtools/client/webaudioeditor/panel").WebAudioEditorPanel);
 loader.lazyGetter(this, "MemoryPanel", () => require("devtools/client/memory/panel").MemoryPanel);
 loader.lazyGetter(this, "PerformancePanel", () => require("devtools/client/performance/panel").PerformancePanel);
 loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/client/netmonitor/panel").NetMonitorPanel);
 loader.lazyGetter(this, "StoragePanel", () => require("devtools/client/storage/panel").StoragePanel);
 loader.lazyGetter(this, "ScratchpadPanel", () => require("devtools/client/scratchpad/scratchpad-panel").ScratchpadPanel);
 
 // Strings
-const toolboxProps = "chrome://browser/locale/devtools/toolbox.properties";
-const inspectorProps = "chrome://browser/locale/devtools/inspector.properties";
-const webConsoleProps = "chrome://browser/locale/devtools/webconsole.properties";
-const debuggerProps = "chrome://browser/locale/devtools/debugger.properties";
-const styleEditorProps = "chrome://browser/locale/devtools/styleeditor.properties";
-const shaderEditorProps = "chrome://browser/locale/devtools/shadereditor.properties";
-const canvasDebuggerProps = "chrome://browser/locale/devtools/canvasdebugger.properties";
-const webAudioEditorProps = "chrome://browser/locale/devtools/webaudioeditor.properties";
-const performanceProps = "chrome://browser/locale/devtools/performance.properties";
-const netMonitorProps = "chrome://browser/locale/devtools/netmonitor.properties";
-const storageProps = "chrome://browser/locale/devtools/storage.properties";
-const scratchpadProps = "chrome://browser/locale/devtools/scratchpad.properties";
-const memoryProps = "chrome://browser/locale/devtools/memory.properties";
+const toolboxProps = "chrome://devtools/locale/toolbox.properties";
+const inspectorProps = "chrome://devtools/locale/inspector.properties";
+const webConsoleProps = "chrome://devtools/locale/webconsole.properties";
+const debuggerProps = "chrome://devtools/locale/debugger.properties";
+const styleEditorProps = "chrome://devtools/locale/styleeditor.properties";
+const shaderEditorProps = "chrome://devtools/locale/shadereditor.properties";
+const canvasDebuggerProps = "chrome://devtools/locale/canvasdebugger.properties";
+const webAudioEditorProps = "chrome://devtools/locale/webaudioeditor.properties";
+const performanceProps = "chrome://devtools/locale/performance.properties";
+const netMonitorProps = "chrome://devtools/locale/netmonitor.properties";
+const storageProps = "chrome://devtools/locale/storage.properties";
+const scratchpadProps = "chrome://devtools/locale/scratchpad.properties";
+const memoryProps = "chrome://devtools/locale/memory.properties";
 
 loader.lazyGetter(this, "toolboxStrings", () => Services.strings.createBundle(toolboxProps));
 loader.lazyGetter(this, "performanceStrings",() => Services.strings.createBundle(performanceProps));
 loader.lazyGetter(this, "webConsoleStrings", () => Services.strings.createBundle(webConsoleProps));
 loader.lazyGetter(this, "debuggerStrings", () => Services.strings.createBundle(debuggerProps));
 loader.lazyGetter(this, "styleEditorStrings", () => Services.strings.createBundle(styleEditorProps));
 loader.lazyGetter(this, "shaderEditorStrings", () => Services.strings.createBundle(shaderEditorProps));
 loader.lazyGetter(this, "canvasDebuggerStrings", () => Services.strings.createBundle(canvasDebuggerProps));
@@ -57,17 +57,17 @@ loader.lazyGetter(this, "memoryStrings",
 var Tools = {};
 exports.Tools = Tools;
 
 // Definitions
 Tools.options = {
   id: "options",
   ordinal: 0,
   url: "chrome://devtools/content/framework/toolbox-options.xul",
-  icon: "chrome://devtools/skin/themes/images/tool-options.svg",
+  icon: "chrome://devtools/skin/images/tool-options.svg",
   invertIconForLightTheme: true,
   bgTheme: "theme-body",
   label: l10n("options.label", toolboxStrings),
   iconOnly: true,
   panelLabel: l10n("options.panelLabel", toolboxStrings),
   tooltip: l10n("optionsButton.tooltip", toolboxStrings),
   inMenu: false,
 
@@ -81,17 +81,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/themes/images/tool-inspector.svg",
+  icon: "chrome://devtools/skin/images/tool-inspector.svg",
   invertIconForLightTheme: 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);
   },
@@ -117,17 +117,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/themes/images/tool-webconsole.svg",
+  icon: "chrome://devtools/skin/images/tool-webconsole.svg",
   invertIconForLightTheme: 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);
@@ -153,19 +153,19 @@ 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/themes/images/tool-debugger.svg",
+  icon: "chrome://devtools/skin/images/tool-debugger.svg",
   invertIconForLightTheme: true,
-  highlightedicon: "chrome://devtools/skin/themes/images/tool-debugger-paused.svg",
+  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);
   },
   inMenu: true,
@@ -181,17 +181,17 @@ Tools.jsdebugger = {
 };
 
 Tools.styleEditor = {
   id: "styleeditor",
   key: l10n("open.commandkey", styleEditorStrings),
   ordinal: 4,
   accesskey: l10n("open.accesskey", styleEditorStrings),
   modifiers: "shift",
-  icon: "chrome://devtools/skin/themes/images/tool-styleeditor.svg",
+  icon: "chrome://devtools/skin/images/tool-styleeditor.svg",
   invertIconForLightTheme: 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));
   },
@@ -206,17 +206,17 @@ Tools.styleEditor = {
     return new StyleEditorPanel(iframeWindow, toolbox);
   }
 };
 
 Tools.shaderEditor = {
   id: "shadereditor",
   ordinal: 5,
   visibilityswitch: "devtools.shadereditor.enabled",
-  icon: "chrome://devtools/skin/themes/images/tool-shadereditor.svg",
+  icon: "chrome://devtools/skin/images/tool-shadereditor.svg",
   invertIconForLightTheme: 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;
@@ -226,17 +226,17 @@ Tools.shaderEditor = {
     return new ShaderEditorPanel(iframeWindow, toolbox);
   }
 };
 
 Tools.canvasDebugger = {
   id: "canvasdebugger",
   ordinal: 6,
   visibilityswitch: "devtools.canvasdebugger.enabled",
-  icon: "chrome://devtools/skin/themes/images/tool-canvas.svg",
+  icon: "chrome://devtools/skin/images/tool-canvas.svg",
   invertIconForLightTheme: 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).
@@ -247,19 +247,19 @@ Tools.canvasDebugger = {
   build: function (iframeWindow, toolbox) {
     return new CanvasDebuggerPanel(iframeWindow, toolbox);
   }
 };
 
 Tools.performance = {
   id: "performance",
   ordinal: 7,
-  icon: "chrome://devtools/skin/themes/images/tool-profiler.svg",
+  icon: "chrome://devtools/skin/images/tool-profiler.svg",
   invertIconForLightTheme: true,
-  highlightedicon: "chrome://devtools/skin/themes/images/tool-profiler-active.svg",
+  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));
   },
@@ -275,19 +275,19 @@ Tools.performance = {
   build: function (frame, target) {
     return new PerformancePanel(frame, target);
   }
 };
 
 Tools.memory = {
   id: "memory",
   ordinal: 8,
-  icon: "chrome://devtools/skin/themes/images/tool-memory.svg",
+  icon: "chrome://devtools/skin/images/tool-memory.svg",
   invertIconForLightTheme: true,
-  highlightedicon: "chrome://devtools/skin/themes/images/tool-memory-active.svg",
+  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");
@@ -300,17 +300,17 @@ Tools.memory = {
 
 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/themes/images/tool-network.svg",
+  icon: "chrome://devtools/skin/images/tool-network.svg",
   invertIconForLightTheme: 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);
   },
@@ -327,17 +327,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/themes/images/tool-storage.svg",
+  icon: "chrome://devtools/skin/images/tool-storage.svg",
   invertIconForLightTheme: 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));
@@ -354,17 +354,17 @@ Tools.storage = {
     return new StoragePanel(iframeWindow, toolbox);
   }
 };
 
 Tools.webAudioEditor = {
   id: "webaudioeditor",
   ordinal: 11,
   visibilityswitch: "devtools.webaudioeditor.enabled",
-  icon: "chrome://devtools/skin/themes/images/tool-webaudio.svg",
+  icon: "chrome://devtools/skin/images/tool-webaudio.svg",
   invertIconForLightTheme: 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");
@@ -374,17 +374,17 @@ Tools.webAudioEditor = {
     return new WebAudioEditorPanel(iframeWindow, toolbox);
   }
 };
 
 Tools.scratchpad = {
   id: "scratchpad",
   ordinal: 12,
   visibilityswitch: "devtools.scratchpad.enabled",
-  icon: "chrome://devtools/skin/themes/images/tool-scratchpad.svg",
+  icon: "chrome://devtools/skin/images/tool-scratchpad.svg",
   invertIconForLightTheme: 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",
 
@@ -414,25 +414,25 @@ var defaultTools = [
 ];
 
 exports.defaultTools = defaultTools;
 
 Tools.darkTheme = {
   id: "dark",
   label: l10n("options.darkTheme.label", toolboxStrings),
   ordinal: 1,
-  stylesheets: ["chrome://devtools/skin/themes/dark-theme.css"],
+  stylesheets: ["chrome://devtools/skin/dark-theme.css"],
   classList: ["theme-dark"],
 };
 
 Tools.lightTheme = {
   id: "light",
   label: l10n("options.lightTheme.label", toolboxStrings),
   ordinal: 2,
-  stylesheets: ["chrome://devtools/skin/themes/light-theme.css"],
+  stylesheets: ["chrome://devtools/skin/light-theme.css"],
   classList: ["theme-light"],
 };
 
 exports.defaultThemes = [
   Tools.darkTheme,
   Tools.lightTheme,
 ];
 
--- a/devtools/client/eyedropper/eyedropper.js
+++ b/devtools/client/eyedropper/eyedropper.js
@@ -30,17 +30,17 @@ loader.lazyGetter(this, "DOMUtils", func
   return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
 });
 
 loader.lazyGetter(this, "XULRuntime", function() {
   return Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime);
 });
 
 loader.lazyGetter(this, "l10n", () => Services.strings
-  .createBundle("chrome://browser/locale/devtools/eyedropper.properties"));
+  .createBundle("chrome://devtools/locale/eyedropper.properties"));
 
 const EYEDROPPER_URL = "chrome://devtools/content/eyedropper/eyedropper.xul";
 const CROSSHAIRS_URL = "chrome://devtools/content/eyedropper/crosshairs.css";
 const NOCURSOR_URL = "chrome://devtools/content/eyedropper/nocursor.css";
 
 const ZOOM_PREF = "devtools.eyedropper.zoom";
 const FORMAT_PREF = "devtools.defaultColorUnit";
 
--- a/devtools/client/eyedropper/eyedropper.xul
+++ b/devtools/client/eyedropper/eyedropper.xul
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE window []>
 
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/eyedropper.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css"?>
+<?xml-stylesheet href="chrome://devtools/skin/eyedropper.css" type="text/css"?>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <commandset id="eyedropper-commandset">
     <command id="eyedropper-cmd-close"
              oncommand="void(0);"/>
     <command id="eyedropper-cmd-copy"
              oncommand="void(0);"/>
   </commandset>
--- a/devtools/client/fontinspector/font-inspector.xhtml
+++ b/devtools/client/fontinspector/font-inspector.xhtml
@@ -1,24 +1,24 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-<!ENTITY % fontinspectorDTD SYSTEM "chrome://browser/locale/devtools/font-inspector.dtd" >
+<!ENTITY % fontinspectorDTD SYSTEM "chrome://devtools/locale/font-inspector.dtd" >
  %fontinspectorDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <title>&title;</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
     <link rel="stylesheet" href="font-inspector.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/font-inspector.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/font-inspector.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
   </head>
   <body class="theme-sidebar devtools-monospace" role="application">
     <script type="application/javascript;version=1.8" src="font-inspector.js"></script>
     <div>
       <div class="devtools-toolbar preview-input-toolbar">
         <div class="devtools-searchbox">
           <input id="preview-text-input"
--- a/devtools/client/framework/connect/connect.js
+++ b/devtools/client/framework/connect/connect.js
@@ -16,17 +16,17 @@ var {TargetFactory} = require("devtools/
 var {Toolbox} = require("devtools/client/framework/toolbox")
 var promise = require("promise");
 var {DebuggerClient} = require("devtools/shared/client/main");
 
 var gClient;
 var gConnectionTimeout;
 
 XPCOMUtils.defineLazyGetter(window, 'l10n', function () {
-  return Services.strings.createBundle('chrome://browser/locale/devtools/connection-screen.properties');
+  return Services.strings.createBundle('chrome://devtools/locale/connection-screen.properties');
 });
 
 /**
  * Once DOM is ready, we prefil the host/port inputs with
  * pref-stored values.
  */
 window.addEventListener("DOMContentLoaded", function onDOMReady() {
   window.removeEventListener("DOMContentLoaded", onDOMReady, true);
--- a/devtools/client/framework/connect/connect.xhtml
+++ b/devtools/client/framework/connect/connect.xhtml
@@ -1,23 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-<!ENTITY % connectionDTD SYSTEM "chrome://browser/locale/devtools/connection-screen.dtd" >
+<!ENTITY % connectionDTD SYSTEM "chrome://devtools/locale/connection-screen.dtd" >
  %connectionDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <head>
     <title>&title;</title>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/dark-theme.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/dark-theme.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://devtools/content/framework/connect/connect.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="connect.js"></script>
   </head>
   <body>
     <h1>&header;</h1>
     <section id="connection-form">
       <form validate="validate" action="#">
         <label>
--- a/devtools/client/framework/dev-edition-promo/dev-edition-promo.xul
+++ b/devtools/client/framework/dev-edition-promo/dev-edition-promo.xul
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE window [
-<!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd" >
+<!ENTITY % toolboxDTD SYSTEM "chrome://devtools/locale/toolbox.dtd" >
  %toolboxDTD;
 ]>
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet rel="stylesheet" href="chrome://devtools/content/framework/dev-edition-promo/dev-edition-promo.css" type="text/css"?>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="dev-edition-promo">
   <vbox id="doorhanger-container">
     <hbox flex="1" id="top-panel">
--- a/devtools/client/framework/gDevTools.jsm
+++ b/devtools/client/framework/gDevTools.jsm
@@ -32,17 +32,17 @@ const {JsonView} = require("devtools/cli
 const TABS_OPEN_PEAK_HISTOGRAM = "DEVTOOLS_TABS_OPEN_PEAK_LINEAR";
 const TABS_OPEN_AVG_HISTOGRAM = "DEVTOOLS_TABS_OPEN_AVERAGE_LINEAR";
 const TABS_PINNED_PEAK_HISTOGRAM = "DEVTOOLS_TABS_PINNED_PEAK_LINEAR";
 const TABS_PINNED_AVG_HISTOGRAM = "DEVTOOLS_TABS_PINNED_AVERAGE_LINEAR";
 
 const FORBIDDEN_IDS = new Set(["toolbox", ""]);
 const MAX_ORDINAL = 99;
 
-const bundle = Services.strings.createBundle("chrome://browser/locale/devtools/toolbox.properties");
+const bundle = Services.strings.createBundle("chrome://devtools/locale/toolbox.properties");
 
 /**
  * DevTools is a class that represents a set of developer tools, it holds a
  * set of tools and keeps track of open toolboxes in the browser.
  */
 this.DevTools = function DevTools() {
   this._tools = new Map();     // Map<toolId, tool>
   this._themes = new Map();    // Map<themeId, theme>
--- a/devtools/client/framework/sidebar.js
+++ b/devtools/client/framework/sidebar.js
@@ -528,17 +528,17 @@ ToolSidebar.prototype = {
     this._tabs = null;
     this._tabbox = null;
     this._panelDoc = null;
     this._toolPanel = null;
   })
 }
 
 XPCOMUtils.defineLazyGetter(this, "l10n", function() {
-  let bundle = Services.strings.createBundle("chrome://browser/locale/devtools/toolbox.properties");
+  let bundle = Services.strings.createBundle("chrome://devtools/locale/toolbox.properties");
   let l10n = function(aName, ...aArgs) {
     try {
       if (aArgs.length == 0) {
         return bundle.GetStringFromName(aName);
       } else {
         return bundle.formatStringFromName(aName, aArgs, aArgs.length);
       }
     } catch (ex) {
--- a/devtools/client/framework/test/browser_toolbox_sidebar.js
+++ b/devtools/client/framework/test/browser_toolbox_sidebar.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test() {
   const Cu = Components.utils;
   let {ToolSidebar} = require("devtools/client/framework/sidebar");
 
   const toolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
-                  "<?xml-stylesheet href='chrome://devtools/skin/themes/common.css' type='text/css'?>" +
+                  "<?xml-stylesheet href='chrome://devtools/skin/common.css' type='text/css'?>" +
                   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
                   "<hbox flex='1'><description flex='1'>foo</description><splitter class='devtools-side-splitter'/>" +
                   "<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'><tabs/><tabpanels flex='1'/></tabbox>" +
                   "</hbox>" +
                   "</window>";
 
   const tab1URL = "data:text/html;charset=utf8,<title>1</title><p>1</p>";
   const tab2URL = "data:text/html;charset=utf8,<title>2</title><p>2</p>";
--- a/devtools/client/framework/test/browser_toolbox_sidebar_events.js
+++ b/devtools/client/framework/test/browser_toolbox_sidebar_events.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test() {
   const Cu = Components.utils;
   const { ToolSidebar } = require("devtools/client/framework/sidebar");
 
   const toolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
-                  "<?xml-stylesheet href='chrome://devtools/skin/themes/common.css' type='text/css'?>" +
+                  "<?xml-stylesheet href='chrome://devtools/skin/common.css' type='text/css'?>" +
                   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
                   "<hbox flex='1'><description flex='1'>foo</description><splitter class='devtools-side-splitter'/>" +
                   "<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'><tabs/><tabpanels flex='1'/></tabbox>" +
                   "</hbox>" +
                   "</window>";
 
   const tab1URL = "data:text/html;charset=utf8,<title>1</title><p>1</p>";
 
--- a/devtools/client/framework/test/browser_toolbox_sidebar_existing_tabs.js
+++ b/devtools/client/framework/test/browser_toolbox_sidebar_existing_tabs.js
@@ -2,17 +2,17 @@
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
 // Test that the sidebar widget auto-registers existing tabs.
 
 const {ToolSidebar} = require("devtools/client/framework/sidebar");
 
 const testToolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
-                "<?xml-stylesheet href='chrome://devtools/skin/themes/common.css' type='text/css'?>" +
+                "<?xml-stylesheet href='chrome://devtools/skin/common.css' type='text/css'?>" +
                 "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
                 "<hbox flex='1'><description flex='1'>test tool</description>" +
                 "<splitter class='devtools-side-splitter'/>" +
                 "<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'>" +
                 "<tabs><tab id='tab1' label='tab 1'></tab><tab id='tab2' label='tab 2'></tab></tabs>" +
                 "<tabpanels flex='1'><tabpanel id='tabpanel1'>tab 1</tabpanel><tabpanel id='tabpanel2'>tab 2</tabpanel></tabpanels>" +
                 "</tabbox></hbox></window>";
 
--- a/devtools/client/framework/test/browser_toolbox_sidebar_tool.xul
+++ b/devtools/client/framework/test/browser_toolbox_sidebar_tool.xul
@@ -1,16 +1,16 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
   <box flex="1" class="devtools-responsive-container theme-body">
     <vbox flex="1" class="devtools-main-content" id="content">test</vbox>
     <splitter class="devtools-side-splitter"/>
     <tabbox flex="1" id="sidebar" class="devtools-sidebar-tabs">
       <tabs/>
       <tabpanels flex="1"/>
--- a/devtools/client/framework/toolbox-options.js
+++ b/devtools/client/framework/toolbox-options.js
@@ -8,17 +8,17 @@ const {Cu, Cc, Ci} = require("chrome");
 const Services = require("Services");
 const promise = require("promise");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "gDevTools", "resource://devtools/client/framework/gDevTools.jsm");
 
 exports.OptionsPanel = OptionsPanel;
 
 XPCOMUtils.defineLazyGetter(this, "l10n", function() {
-  let bundle = Services.strings.createBundle("chrome://browser/locale/devtools/toolbox.properties");
+  let bundle = Services.strings.createBundle("chrome://devtools/locale/toolbox.properties");
   let l10n = function(aName, ...aArgs) {
     try {
       if (aArgs.length == 0) {
         return bundle.GetStringFromName(aName);
       } else {
         return bundle.formatStringFromName(aName, aArgs, aArgs.length);
       }
     } catch (ex) {
--- a/devtools/client/framework/toolbox-options.xul
+++ b/devtools/client/framework/toolbox-options.xul
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE window [
-<!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd" >
+<!ENTITY % toolboxDTD SYSTEM "chrome://devtools/locale/toolbox.dtd" >
  %toolboxDTD;
 ]>
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet rel="stylesheet" href="chrome://devtools/content/framework/options-panel.css" type="text/css"?>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <script type="application/javascript;version=1.8"
--- a/devtools/client/framework/toolbox-process-window.xul
+++ b/devtools/client/framework/toolbox-process-window.xul
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE window [
-<!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd" >
+<!ENTITY % toolboxDTD SYSTEM "chrome://devtools/locale/toolbox.dtd" >
  %toolboxDTD;
 ]>
 
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         id="devtools-toolbox-window"
         macanimationtype="document"
--- a/devtools/client/framework/toolbox-window.xul
+++ b/devtools/client/framework/toolbox-window.xul
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE window [
-<!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd" >
+<!ENTITY % toolboxDTD SYSTEM "chrome://devtools/locale/toolbox.dtd" >
  %toolboxDTD;
 ]>
 
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         id="devtools-toolbox-window"
         macanimationtype="document"
--- a/devtools/client/framework/toolbox.js
+++ b/devtools/client/framework/toolbox.js
@@ -25,17 +25,17 @@ Cu.import("resource://gre/modules/Servic
 Cu.import("resource://devtools/client/framework/gDevTools.jsm");
 Cu.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm");
 Cu.import("resource://devtools/client/shared/DOMHelpers.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 
 loader.lazyImporter(this, "CommandUtils",
   "resource://devtools/client/shared/DeveloperToolbar.jsm");
 loader.lazyGetter(this, "toolboxStrings", () => {
-  const properties = "chrome://browser/locale/devtools/toolbox.properties";
+  const properties = "chrome://devtools/locale/toolbox.properties";
   const bundle = Services.strings.createBundle(properties);
   return (name, ...args) => {
     try {
       if (!args.length) {
         return bundle.GetStringFromName(name);
       }
       return bundle.formatStringFromName(name, args, args.length);
     } catch (ex) {
--- a/devtools/client/framework/toolbox.xul
+++ b/devtools/client/framework/toolbox.xul
@@ -1,19 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
 
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 
 <!DOCTYPE window [
-<!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd" >
+<!ENTITY % toolboxDTD SYSTEM "chrome://devtools/locale/toolbox.dtd" >
 %toolboxDTD;
 <!ENTITY % editMenuStrings SYSTEM "chrome://global/locale/editMenuOverlay.dtd">
 %editMenuStrings;
 <!ENTITY % globalKeysDTD SYSTEM "chrome://global/locale/globalKeys.dtd">
 %globalKeysDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
--- a/devtools/client/inspector/inspector-panel.js
+++ b/devtools/client/inspector/inspector-panel.js
@@ -14,20 +14,20 @@ var clipboard = require("sdk/clipboard")
 var {HostType} = require("devtools/client/framework/toolbox").Toolbox;
 
 loader.lazyGetter(this, "MarkupView", () => require("devtools/client/markupview/markup-view").MarkupView);
 loader.lazyGetter(this, "HTMLBreadcrumbs", () => require("devtools/client/inspector/breadcrumbs").HTMLBreadcrumbs);
 loader.lazyGetter(this, "ToolSidebar", () => require("devtools/client/framework/sidebar").ToolSidebar);
 loader.lazyGetter(this, "SelectorSearch", () => require("devtools/client/inspector/selector-search").SelectorSearch);
 
 loader.lazyGetter(this, "strings", () => {
-  return Services.strings.createBundle("chrome://browser/locale/devtools/inspector.properties");
+  return Services.strings.createBundle("chrome://devtools/locale/inspector.properties");
 });
 loader.lazyGetter(this, "toolboxStrings", () => {
-  return Services.strings.createBundle("chrome://browser/locale/devtools/toolbox.properties");
+  return Services.strings.createBundle("chrome://devtools/locale/toolbox.properties");
 });
 loader.lazyGetter(this, "clipboardHelper", () => {
   return Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
 });
 
 loader.lazyImporter(this, "CommandUtils", "resource://devtools/client/shared/DeveloperToolbar.jsm");
 
 const LAYOUT_CHANGE_TIMER = 250;
--- a/devtools/client/inspector/inspector.xul
+++ b/devtools/client/inspector/inspector.xul
@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/inspector/inspector.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/inspector.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/inspector.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % inspectorDTD SYSTEM "chrome://browser/locale/devtools/inspector.dtd" >
+  <!ENTITY % inspectorDTD SYSTEM "chrome://devtools/locale/inspector.dtd" >
    %inspectorDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <script type="application/javascript;version=1.8"
           src="chrome://devtools/content/shared/theme-switching.js"/>
 
--- a/devtools/client/jar.mn
+++ b/devtools/client/jar.mn
@@ -144,193 +144,193 @@ devtools.jar:
     content/shared/widgets/filter-widget.css (shared/widgets/filter-widget.css)
     content/eyedropper/eyedropper.xul (eyedropper/eyedropper.xul)
     content/eyedropper/crosshairs.css (eyedropper/crosshairs.css)
     content/eyedropper/nocursor.css (eyedropper/nocursor.css)
     content/aboutdebugging/aboutdebugging.xhtml (aboutdebugging/aboutdebugging.xhtml)
     content/aboutdebugging/aboutdebugging.css (aboutdebugging/aboutdebugging.css)
     content/aboutdebugging/aboutdebugging.js (aboutdebugging/aboutdebugging.js)
 %   skin devtools classic/1.0 %skin/
-*   skin/themes/common.css (themes/common.css)
-    skin/themes/dark-theme.css (themes/dark-theme.css)
-    skin/themes/light-theme.css (themes/light-theme.css)
-    skin/themes/toolbars.css (themes/toolbars.css)
-    skin/themes/variables.css (themes/variables.css)
-    skin/themes/images/add.svg (themes/images/add.svg)
-    skin/themes/images/filters.svg (themes/images/filters.svg)
-    skin/themes/images/filter-swatch.svg (themes/images/filter-swatch.svg)
-    skin/themes/images/pseudo-class.svg (themes/images/pseudo-class.svg)
-    skin/themes/images/controls.png (themes/images/controls.png)
-    skin/themes/images/controls@2x.png (themes/images/controls@2x.png)
-    skin/themes/images/animation-fast-track.svg (themes/images/animation-fast-track.svg)
-    skin/themes/images/performance-icons.svg (themes/images/performance-icons.svg)
-    skin/themes/images/newtab.png (themes/images/newtab.png)
-    skin/themes/images/newtab@2x.png (themes/images/newtab@2x.png)
-    skin/themes/images/newtab-inverted.png (themes/images/newtab-inverted.png)
-    skin/themes/images/newtab-inverted@2x.png (themes/images/newtab-inverted@2x.png)
-*   skin/themes/widgets.css (themes/widgets.css)
-    skin/themes/images/power.svg (themes/images/power.svg)
-    skin/themes/images/filetypes/dir-close.svg (themes/images/filetypes/dir-close.svg)
-    skin/themes/images/filetypes/dir-open.svg (themes/images/filetypes/dir-open.svg)
-    skin/themes/images/filetypes/globe.svg (themes/images/filetypes/globe.svg)
-    skin/themes/images/filetypes/store.svg (themes/images/filetypes/store.svg)
-    skin/themes/images/commandline-icon.png (themes/images/commandline-icon.png)
-    skin/themes/images/commandline-icon@2x.png (themes/images/commandline-icon@2x.png)
-    skin/themes/images/alerticon-warning.png (themes/images/alerticon-warning.png)
-    skin/themes/images/alerticon-warning@2x.png (themes/images/alerticon-warning@2x.png)
-*   skin/themes/ruleview.css (themes/ruleview.css)
-    skin/themes/commandline.css (themes/commandline.css)
-    skin/themes/images/command-paintflashing.png (themes/images/command-paintflashing.png)
-    skin/themes/images/command-paintflashing@2x.png (themes/images/command-paintflashing@2x.png)
-    skin/themes/images/command-screenshot.png (themes/images/command-screenshot.png)
-    skin/themes/images/command-screenshot@2x.png (themes/images/command-screenshot@2x.png)
-    skin/themes/images/command-responsivemode.png (themes/images/command-responsivemode.png)
-    skin/themes/images/command-responsivemode@2x.png (themes/images/command-responsivemode@2x.png)
-    skin/themes/images/command-scratchpad.png (themes/images/command-scratchpad.png)
-    skin/themes/images/command-scratchpad@2x.png (themes/images/command-scratchpad@2x.png)
-    skin/themes/images/command-tilt.png (themes/images/command-tilt.png)
-    skin/themes/images/command-tilt@2x.png (themes/images/command-tilt@2x.png)
-    skin/themes/images/command-pick.png (themes/images/command-pick.png)
-    skin/themes/images/command-pick@2x.png (themes/images/command-pick@2x.png)
-    skin/themes/images/command-frames.png (themes/images/command-frames.png)
-    skin/themes/images/command-frames@2x.png (themes/images/command-frames@2x.png)
-    skin/themes/images/command-console.png (themes/images/command-console.png)
-    skin/themes/images/command-console@2x.png (themes/images/command-console@2x.png)
-    skin/themes/images/command-eyedropper.png (themes/images/command-eyedropper.png)
-    skin/themes/images/command-eyedropper@2x.png (themes/images/command-eyedropper@2x.png)
-    skin/themes/images/command-rulers.png (themes/images/command-rulers.png)
-    skin/themes/images/command-rulers@2x.png (themes/images/command-rulers@2x.png)
-    skin/themes/images/command-measure.png (themes/images/command-measure.png)
-    skin/themes/images/command-measure@2x.png (themes/images/command-measure@2x.png)
-    skin/themes/markup-view.css (themes/markup-view.css)
-    skin/themes/images/editor-error.png (themes/images/editor-error.png)
-    skin/themes/images/editor-breakpoint.png (themes/images/editor-breakpoint.png)
-    skin/themes/images/editor-breakpoint@2x.png (themes/images/editor-breakpoint@2x.png)
-    skin/themes/images/editor-debug-location.png (themes/images/editor-debug-location.png)
-    skin/themes/images/editor-debug-location@2x.png (themes/images/editor-debug-location@2x.png)
-*   skin/themes/webconsole.css (themes/webconsole.css)
-    skin/themes/images/webconsole.svg (themes/images/webconsole.svg)
-    skin/themes/images/breadcrumbs-divider@2x.png (themes/images/breadcrumbs-divider@2x.png)
-    skin/themes/images/breadcrumbs-scrollbutton.png (themes/images/breadcrumbs-scrollbutton.png)
-    skin/themes/images/breadcrumbs-scrollbutton@2x.png (themes/images/breadcrumbs-scrollbutton@2x.png)
-    skin/themes/animationinspector.css (themes/animationinspector.css)
-    skin/themes/eyedropper.css (themes/eyedropper.css)
-    skin/themes/canvasdebugger.css (themes/canvasdebugger.css)
-    skin/themes/debugger.css (themes/debugger.css)
-*   skin/themes/netmonitor.css (themes/netmonitor.css)
-    skin/themes/performance.css (themes/performance.css)
-    skin/themes/memory.css (themes/memory.css)
-    skin/themes/promisedebugger.css (themes/promisedebugger.css)
-    skin/themes/images/timeline-filter.svg (themes/images/timeline-filter.svg)
-    skin/themes/scratchpad.css (themes/scratchpad.css)
-    skin/themes/shadereditor.css (themes/shadereditor.css)
-    skin/themes/storage.css (themes/storage.css)
-*   skin/themes/splitview.css (themes/splitview.css)
-    skin/themes/styleeditor.css (themes/styleeditor.css)
-    skin/themes/webaudioeditor.css (themes/webaudioeditor.css)
-    skin/themes/images/magnifying-glass.png (themes/images/magnifying-glass.png)
-    skin/themes/images/magnifying-glass@2x.png (themes/images/magnifying-glass@2x.png)
-    skin/themes/images/magnifying-glass-light.png (themes/images/magnifying-glass-light.png)
-    skin/themes/images/magnifying-glass-light@2x.png (themes/images/magnifying-glass-light@2x.png)
-    skin/themes/images/itemToggle.png (themes/images/itemToggle.png)
-    skin/themes/images/itemToggle@2x.png (themes/images/itemToggle@2x.png)
-    skin/themes/images/itemArrow-dark-rtl.svg (themes/images/itemArrow-dark-rtl.svg)
-    skin/themes/images/itemArrow-dark-ltr.svg (themes/images/itemArrow-dark-ltr.svg)
-    skin/themes/images/itemArrow-rtl.svg (themes/images/itemArrow-rtl.svg)
-    skin/themes/images/itemArrow-ltr.svg (themes/images/itemArrow-ltr.svg)
-    skin/themes/images/noise.png (themes/images/noise.png)
-    skin/themes/images/dropmarker.svg (themes/images/dropmarker.svg)
-    skin/themes/layoutview.css (themes/layoutview.css)
-    skin/themes/images/debugger-collapse.png (themes/images/debugger-collapse.png)
-    skin/themes/images/debugger-collapse@2x.png (themes/images/debugger-collapse@2x.png)
-    skin/themes/images/debugger-expand.png (themes/images/debugger-expand.png)
-    skin/themes/images/debugger-expand@2x.png (themes/images/debugger-expand@2x.png)
-    skin/themes/images/debugger-pause.png (themes/images/debugger-pause.png)
-    skin/themes/images/debugger-pause@2x.png (themes/images/debugger-pause@2x.png)
-    skin/themes/images/debugger-play.png (themes/images/debugger-play.png)
-    skin/themes/images/debugger-play@2x.png (themes/images/debugger-play@2x.png)
-    skin/themes/images/fast-forward.png (themes/images/fast-forward.png)
-    skin/themes/images/fast-forward@2x.png (themes/images/fast-forward@2x.png)
-    skin/themes/images/rewind.png (themes/images/rewind.png)
-    skin/themes/images/rewind@2x.png (themes/images/rewind@2x.png)
-    skin/themes/images/debugger-step-in.png (themes/images/debugger-step-in.png)
-    skin/themes/images/debugger-step-in@2x.png (themes/images/debugger-step-in@2x.png)
-    skin/themes/images/debugger-step-out.png (themes/images/debugger-step-out.png)
-    skin/themes/images/debugger-step-out@2x.png (themes/images/debugger-step-out@2x.png)
-    skin/themes/images/debugger-step-over.png (themes/images/debugger-step-over.png)
-    skin/themes/images/debugger-step-over@2x.png (themes/images/debugger-step-over@2x.png)
-    skin/themes/images/debugger-blackbox.png (themes/images/debugger-blackbox.png)
-    skin/themes/images/debugger-blackbox@2x.png (themes/images/debugger-blackbox@2x.png)
-    skin/themes/images/debugger-prettyprint.png (themes/images/debugger-prettyprint.png)
-    skin/themes/images/debugger-prettyprint@2x.png (themes/images/debugger-prettyprint@2x.png)
-    skin/themes/images/debugger-toggleBreakpoints.png (themes/images/debugger-toggleBreakpoints.png)
-    skin/themes/images/debugger-toggleBreakpoints@2x.png (themes/images/debugger-toggleBreakpoints@2x.png)
-    skin/themes/images/tracer-icon.png (themes/images/tracer-icon.png)
-    skin/themes/images/tracer-icon@2x.png (themes/images/tracer-icon@2x.png)
-    skin/themes/images/responsivemode/responsive-se-resizer.png (themes/images/responsivemode/responsive-se-resizer.png)
-    skin/themes/images/responsivemode/responsive-se-resizer@2x.png (themes/images/responsivemode/responsive-se-resizer@2x.png)
-    skin/themes/images/responsivemode/responsive-vertical-resizer.png (themes/images/responsivemode/responsive-vertical-resizer.png)
-    skin/themes/images/responsivemode/responsive-vertical-resizer@2x.png (themes/images/responsivemode/responsive-vertical-resizer@2x.png)
-    skin/themes/images/responsivemode/responsive-horizontal-resizer.png (themes/images/responsivemode/responsive-horizontal-resizer.png)
-    skin/themes/images/responsivemode/responsive-horizontal-resizer@2x.png (themes/images/responsivemode/responsive-horizontal-resizer@2x.png)
-    skin/themes/images/responsivemode/responsiveui-rotate.png (themes/images/responsivemode/responsiveui-rotate.png)
-    skin/themes/images/responsivemode/responsiveui-rotate@2x.png (themes/images/responsivemode/responsiveui-rotate@2x.png)
-    skin/themes/images/responsivemode/responsiveui-touch.png (themes/images/responsivemode/responsiveui-touch.png)
-    skin/themes/images/responsivemode/responsiveui-touch@2x.png (themes/images/responsivemode/responsiveui-touch@2x.png)
-    skin/themes/images/responsivemode/responsiveui-screenshot.png (themes/images/responsivemode/responsiveui-screenshot.png)
-    skin/themes/images/responsivemode/responsiveui-screenshot@2x.png (themes/images/responsivemode/responsiveui-screenshot@2x.png)
-    skin/themes/images/responsivemode/responsiveui-home.png (themes/images/responsivemode/responsiveui-home.png)
-    skin/themes/images/toggle-tools.png (themes/images/toggle-tools.png)
-    skin/themes/images/toggle-tools@2x.png (themes/images/toggle-tools@2x.png)
-    skin/themes/images/dock-bottom@2x.png (themes/images/dock-bottom@2x.png)
-    skin/themes/images/dock-bottom-minimize@2x.png (themes/images/dock-bottom-minimize@2x.png)
-    skin/themes/images/dock-bottom-maximize@2x.png (themes/images/dock-bottom-maximize@2x.png)
-    skin/themes/images/dock-side@2x.png (themes/images/dock-side@2x.png)
-*   skin/themes/floating-scrollbars.css (themes/floating-scrollbars.css)
-    skin/themes/floating-scrollbars-light.css (themes/floating-scrollbars-light.css)
-*   skin/themes/inspector.css (themes/inspector.css)
-    skin/themes/images/profiler-stopwatch.svg (themes/images/profiler-stopwatch.svg)
-    skin/themes/images/profiler-stopwatch-checked.svg (themes/images/profiler-stopwatch-checked.svg)
-    skin/themes/images/tool-options.svg (themes/images/tool-options.svg)
-    skin/themes/images/tool-webconsole.svg (themes/images/tool-webconsole.svg)
-    skin/themes/images/tool-canvas.svg (themes/images/tool-canvas.svg)
-    skin/themes/images/tool-debugger.svg (themes/images/tool-debugger.svg)
-    skin/themes/images/tool-debugger-paused.svg (themes/images/tool-debugger-paused.svg)
-    skin/themes/images/tool-inspector.svg (themes/images/tool-inspector.svg)
-    skin/themes/images/tool-shadereditor.svg (themes/images/tool-shadereditor.svg)
-    skin/themes/images/tool-styleeditor.svg (themes/images/tool-styleeditor.svg)
-    skin/themes/images/tool-storage.svg (themes/images/tool-storage.svg)
-    skin/themes/images/tool-profiler.svg (themes/images/tool-profiler.svg)
-    skin/themes/images/tool-profiler-active.svg (themes/images/tool-profiler-active.svg)
-    skin/themes/images/tool-network.svg (themes/images/tool-network.svg)
-    skin/themes/images/tool-scratchpad.svg (themes/images/tool-scratchpad.svg)
-    skin/themes/images/tool-webaudio.svg (themes/images/tool-webaudio.svg)
-    skin/themes/images/tool-memory.svg (themes/images/tool-memory.svg)
-    skin/themes/images/tool-memory-active.svg (themes/images/tool-memory-active.svg)
-    skin/themes/images/close.png (themes/images/close.png)
-    skin/themes/images/close@2x.png (themes/images/close@2x.png)
-    skin/themes/images/vview-delete.png (themes/images/vview-delete.png)
-    skin/themes/images/vview-delete@2x.png (themes/images/vview-delete@2x.png)
-    skin/themes/images/vview-edit.png (themes/images/vview-edit.png)
-    skin/themes/images/vview-edit@2x.png (themes/images/vview-edit@2x.png)
-    skin/themes/images/vview-lock.png (themes/images/vview-lock.png)
-    skin/themes/images/vview-lock@2x.png (themes/images/vview-lock@2x.png)
-    skin/themes/images/vview-open-inspector.png (themes/images/vview-open-inspector.png)
-    skin/themes/images/vview-open-inspector@2x.png (themes/images/vview-open-inspector@2x.png)
-    skin/themes/images/cubic-bezier-swatch.png (themes/images/cubic-bezier-swatch.png)
-    skin/themes/images/cubic-bezier-swatch@2x.png (themes/images/cubic-bezier-swatch@2x.png)
-    skin/themes/images/undock@2x.png (themes/images/undock@2x.png)
-    skin/themes/font-inspector.css (themes/font-inspector.css)
-    skin/themes/computedview.css (themes/computedview.css)
-    skin/themes/images/arrow-e.png (themes/images/arrow-e.png)
-    skin/themes/images/arrow-e@2x.png (themes/images/arrow-e@2x.png)
-    skin/themes/projecteditor/projecteditor.css (themes/projecteditor/projecteditor.css)
-    skin/themes/images/search-clear-failed.svg (themes/images/search-clear-failed.svg)
-    skin/themes/images/search-clear-light.svg (themes/images/search-clear-light.svg)
-    skin/themes/images/search-clear-dark.svg (themes/images/search-clear-dark.svg)
-    skin/themes/tooltip/arrow-horizontal-dark.png (themes/tooltip/arrow-horizontal-dark.png)
-    skin/themes/tooltip/arrow-horizontal-dark@2x.png (themes/tooltip/arrow-horizontal-dark@2x.png)
-    skin/themes/tooltip/arrow-vertical-dark.png (themes/tooltip/arrow-vertical-dark.png)
-    skin/themes/tooltip/arrow-vertical-dark@2x.png (themes/tooltip/arrow-vertical-dark@2x.png)
-    skin/themes/tooltip/arrow-horizontal-light.png (themes/tooltip/arrow-horizontal-light.png)
-    skin/themes/tooltip/arrow-horizontal-light@2x.png (themes/tooltip/arrow-horizontal-light@2x.png)
-    skin/themes/tooltip/arrow-vertical-light.png (themes/tooltip/arrow-vertical-light.png)
-    skin/themes/tooltip/arrow-vertical-light@2x.png (themes/tooltip/arrow-vertical-light@2x.png)
+*   skin/common.css (themes/common.css)
+    skin/dark-theme.css (themes/dark-theme.css)
+    skin/light-theme.css (themes/light-theme.css)
+    skin/toolbars.css (themes/toolbars.css)
+    skin/variables.css (themes/variables.css)
+    skin/images/add.svg (themes/images/add.svg)
+    skin/images/filters.svg (themes/images/filters.svg)
+    skin/images/filter-swatch.svg (themes/images/filter-swatch.svg)
+    skin/images/pseudo-class.svg (themes/images/pseudo-class.svg)
+    skin/images/controls.png (themes/images/controls.png)
+    skin/images/controls@2x.png (themes/images/controls@2x.png)
+    skin/images/animation-fast-track.svg (themes/images/animation-fast-track.svg)
+    skin/images/performance-icons.svg (themes/images/performance-icons.svg)
+    skin/images/newtab.png (themes/images/newtab.png)
+    skin/images/newtab@2x.png (themes/images/newtab@2x.png)
+    skin/images/newtab-inverted.png (themes/images/newtab-inverted.png)
+    skin/images/newtab-inverted@2x.png (themes/images/newtab-inverted@2x.png)
+*   skin/widgets.css (themes/widgets.css)
+    skin/images/power.svg (themes/images/power.svg)
+    skin/images/filetypes/dir-close.svg (themes/images/filetypes/dir-close.svg)
+    skin/images/filetypes/dir-open.svg (themes/images/filetypes/dir-open.svg)
+    skin/images/filetypes/globe.svg (themes/images/filetypes/globe.svg)
+    skin/images/filetypes/store.svg (themes/images/filetypes/store.svg)
+    skin/images/commandline-icon.png (themes/images/commandline-icon.png)
+    skin/images/commandline-icon@2x.png (themes/images/commandline-icon@2x.png)
+    skin/images/alerticon-warning.png (themes/images/alerticon-warning.png)
+    skin/images/alerticon-warning@2x.png (themes/images/alerticon-warning@2x.png)
+*   skin/ruleview.css (themes/ruleview.css)
+    skin/commandline.css (themes/commandline.css)
+    skin/images/command-paintflashing.png (themes/images/command-paintflashing.png)
+    skin/images/command-paintflashing@2x.png (themes/images/command-paintflashing@2x.png)
+    skin/images/command-screenshot.png (themes/images/command-screenshot.png)
+    skin/images/command-screenshot@2x.png (themes/images/command-screenshot@2x.png)
+    skin/images/command-responsivemode.png (themes/images/command-responsivemode.png)
+    skin/images/command-responsivemode@2x.png (themes/images/command-responsivemode@2x.png)
+    skin/images/command-scratchpad.png (themes/images/command-scratchpad.png)
+    skin/images/command-scratchpad@2x.png (themes/images/command-scratchpad@2x.png)
+    skin/images/command-tilt.png (themes/images/command-tilt.png)
+    skin/images/command-tilt@2x.png (themes/images/command-tilt@2x.png)
+    skin/images/command-pick.png (themes/images/command-pick.png)
+    skin/images/command-pick@2x.png (themes/images/command-pick@2x.png)
+    skin/images/command-frames.png (themes/images/command-frames.png)
+    skin/images/command-frames@2x.png (themes/images/command-frames@2x.png)
+    skin/images/command-console.png (themes/images/command-console.png)
+    skin/images/command-console@2x.png (themes/images/command-console@2x.png)
+    skin/images/command-eyedropper.png (themes/images/command-eyedropper.png)
+    skin/images/command-eyedropper@2x.png (themes/images/command-eyedropper@2x.png)
+    skin/images/command-rulers.png (themes/images/command-rulers.png)
+    skin/images/command-rulers@2x.png (themes/images/command-rulers@2x.png)
+    skin/images/command-measure.png (themes/images/command-measure.png)
+    skin/images/command-measure@2x.png (themes/images/command-measure@2x.png)
+    skin/markup-view.css (themes/markup-view.css)
+    skin/images/editor-error.png (themes/images/editor-error.png)
+    skin/images/editor-breakpoint.png (themes/images/editor-breakpoint.png)
+    skin/images/editor-breakpoint@2x.png (themes/images/editor-breakpoint@2x.png)
+    skin/images/editor-debug-location.png (themes/images/editor-debug-location.png)
+    skin/images/editor-debug-location@2x.png (themes/images/editor-debug-location@2x.png)
+*   skin/webconsole.css (themes/webconsole.css)
+    skin/images/webconsole.svg (themes/images/webconsole.svg)
+    skin/images/breadcrumbs-divider@2x.png (themes/images/breadcrumbs-divider@2x.png)
+    skin/images/breadcrumbs-scrollbutton.png (themes/images/breadcrumbs-scrollbutton.png)
+    skin/images/breadcrumbs-scrollbutton@2x.png (themes/images/breadcrumbs-scrollbutton@2x.png)
+    skin/animationinspector.css (themes/animationinspector.css)
+    skin/eyedropper.css (themes/eyedropper.css)
+    skin/canvasdebugger.css (themes/canvasdebugger.css)
+    skin/debugger.css (themes/debugger.css)
+*   skin/netmonitor.css (themes/netmonitor.css)
+    skin/performance.css (themes/performance.css)
+    skin/memory.css (themes/memory.css)
+    skin/promisedebugger.css (themes/promisedebugger.css)
+    skin/images/timeline-filter.svg (themes/images/timeline-filter.svg)
+    skin/scratchpad.css (themes/scratchpad.css)
+    skin/shadereditor.css (themes/shadereditor.css)
+    skin/storage.css (themes/storage.css)
+*   skin/splitview.css (themes/splitview.css)
+    skin/styleeditor.css (themes/styleeditor.css)
+    skin/webaudioeditor.css (themes/webaudioeditor.css)
+    skin/images/magnifying-glass.png (themes/images/magnifying-glass.png)
+    skin/images/magnifying-glass@2x.png (themes/images/magnifying-glass@2x.png)
+    skin/images/magnifying-glass-light.png (themes/images/magnifying-glass-light.png)
+    skin/images/magnifying-glass-light@2x.png (themes/images/magnifying-glass-light@2x.png)
+    skin/images/itemToggle.png (themes/images/itemToggle.png)
+    skin/images/itemToggle@2x.png (themes/images/itemToggle@2x.png)
+    skin/images/itemArrow-dark-rtl.svg (themes/images/itemArrow-dark-rtl.svg)
+    skin/images/itemArrow-dark-ltr.svg (themes/images/itemArrow-dark-ltr.svg)
+    skin/images/itemArrow-rtl.svg (themes/images/itemArrow-rtl.svg)
+    skin/images/itemArrow-ltr.svg (themes/images/itemArrow-ltr.svg)
+    skin/images/noise.png (themes/images/noise.png)
+    skin/images/dropmarker.svg (themes/images/dropmarker.svg)
+    skin/layoutview.css (themes/layoutview.css)
+    skin/images/debugger-collapse.png (themes/images/debugger-collapse.png)
+    skin/images/debugger-collapse@2x.png (themes/images/debugger-collapse@2x.png)
+    skin/images/debugger-expand.png (themes/images/debugger-expand.png)
+    skin/images/debugger-expand@2x.png (themes/images/debugger-expand@2x.png)
+    skin/images/debugger-pause.png (themes/images/debugger-pause.png)
+    skin/images/debugger-pause@2x.png (themes/images/debugger-pause@2x.png)
+    skin/images/debugger-play.png (themes/images/debugger-play.png)
+    skin/images/debugger-play@2x.png (themes/images/debugger-play@2x.png)
+    skin/images/fast-forward.png (themes/images/fast-forward.png)
+    skin/images/fast-forward@2x.png (themes/images/fast-forward@2x.png)
+    skin/images/rewind.png (themes/images/rewind.png)
+    skin/images/rewind@2x.png (themes/images/rewind@2x.png)
+    skin/images/debugger-step-in.png (themes/images/debugger-step-in.png)
+    skin/images/debugger-step-in@2x.png (themes/images/debugger-step-in@2x.png)
+    skin/images/debugger-step-out.png (themes/images/debugger-step-out.png)
+    skin/images/debugger-step-out@2x.png (themes/images/debugger-step-out@2x.png)
+    skin/images/debugger-step-over.png (themes/images/debugger-step-over.png)
+    skin/images/debugger-step-over@2x.png (themes/images/debugger-step-over@2x.png)
+    skin/images/debugger-blackbox.png (themes/images/debugger-blackbox.png)
+    skin/images/debugger-blackbox@2x.png (themes/images/debugger-blackbox@2x.png)
+    skin/images/debugger-prettyprint.png (themes/images/debugger-prettyprint.png)
+    skin/images/debugger-prettyprint@2x.png (themes/images/debugger-prettyprint@2x.png)
+    skin/images/debugger-toggleBreakpoints.png (themes/images/debugger-toggleBreakpoints.png)
+    skin/images/debugger-toggleBreakpoints@2x.png (themes/images/debugger-toggleBreakpoints@2x.png)
+    skin/images/tracer-icon.png (themes/images/tracer-icon.png)
+    skin/images/tracer-icon@2x.png (themes/images/tracer-icon@2x.png)
+    skin/images/responsivemode/responsive-se-resizer.png (themes/images/responsivemode/responsive-se-resizer.png)
+    skin/images/responsivemode/responsive-se-resizer@2x.png (themes/images/responsivemode/responsive-se-resizer@2x.png)
+    skin/images/responsivemode/responsive-vertical-resizer.png (themes/images/responsivemode/responsive-vertical-resizer.png)
+    skin/images/responsivemode/responsive-vertical-resizer@2x.png (themes/images/responsivemode/responsive-vertical-resizer@2x.png)
+    skin/images/responsivemode/responsive-horizontal-resizer.png (themes/images/responsivemode/responsive-horizontal-resizer.png)
+    skin/images/responsivemode/responsive-horizontal-resizer@2x.png (themes/images/responsivemode/responsive-horizontal-resizer@2x.png)
+    skin/images/responsivemode/responsiveui-rotate.png (themes/images/responsivemode/responsiveui-rotate.png)
+    skin/images/responsivemode/responsiveui-rotate@2x.png (themes/images/responsivemode/responsiveui-rotate@2x.png)
+    skin/images/responsivemode/responsiveui-touch.png (themes/images/responsivemode/responsiveui-touch.png)
+    skin/images/responsivemode/responsiveui-touch@2x.png (themes/images/responsivemode/responsiveui-touch@2x.png)
+    skin/images/responsivemode/responsiveui-screenshot.png (themes/images/responsivemode/responsiveui-screenshot.png)
+    skin/images/responsivemode/responsiveui-screenshot@2x.png (themes/images/responsivemode/responsiveui-screenshot@2x.png)
+    skin/images/responsivemode/responsiveui-home.png (themes/images/responsivemode/responsiveui-home.png)
+    skin/images/toggle-tools.png (themes/images/toggle-tools.png)
+    skin/images/toggle-tools@2x.png (themes/images/toggle-tools@2x.png)
+    skin/images/dock-bottom@2x.png (themes/images/dock-bottom@2x.png)
+    skin/images/dock-bottom-minimize@2x.png (themes/images/dock-bottom-minimize@2x.png)
+    skin/images/dock-bottom-maximize@2x.png (themes/images/dock-bottom-maximize@2x.png)
+    skin/images/dock-side@2x.png (themes/images/dock-side@2x.png)
+*   skin/floating-scrollbars.css (themes/floating-scrollbars.css)
+    skin/floating-scrollbars-light.css (themes/floating-scrollbars-light.css)
+*   skin/inspector.css (themes/inspector.css)
+    skin/images/profiler-stopwatch.svg (themes/images/profiler-stopwatch.svg)
+    skin/images/profiler-stopwatch-checked.svg (themes/images/profiler-stopwatch-checked.svg)
+    skin/images/tool-options.svg (themes/images/tool-options.svg)
+    skin/images/tool-webconsole.svg (themes/images/tool-webconsole.svg)
+    skin/images/tool-canvas.svg (themes/images/tool-canvas.svg)
+    skin/images/tool-debugger.svg (themes/images/tool-debugger.svg)
+    skin/images/tool-debugger-paused.svg (themes/images/tool-debugger-paused.svg)
+    skin/images/tool-inspector.svg (themes/images/tool-inspector.svg)
+    skin/images/tool-shadereditor.svg (themes/images/tool-shadereditor.svg)
+    skin/images/tool-styleeditor.svg (themes/images/tool-styleeditor.svg)
+    skin/images/tool-storage.svg (themes/images/tool-storage.svg)
+    skin/images/tool-profiler.svg (themes/images/tool-profiler.svg)
+    skin/images/tool-profiler-active.svg (themes/images/tool-profiler-active.svg)
+    skin/images/tool-network.svg (themes/images/tool-network.svg)
+    skin/images/tool-scratchpad.svg (themes/images/tool-scratchpad.svg)
+    skin/images/tool-webaudio.svg (themes/images/tool-webaudio.svg)
+    skin/images/tool-memory.svg (themes/images/tool-memory.svg)
+    skin/images/tool-memory-active.svg (themes/images/tool-memory-active.svg)
+    skin/images/close.png (themes/images/close.png)
+    skin/images/close@2x.png (themes/images/close@2x.png)
+    skin/images/vview-delete.png (themes/images/vview-delete.png)
+    skin/images/vview-delete@2x.png (themes/images/vview-delete@2x.png)
+    skin/images/vview-edit.png (themes/images/vview-edit.png)
+    skin/images/vview-edit@2x.png (themes/images/vview-edit@2x.png)
+    skin/images/vview-lock.png (themes/images/vview-lock.png)
+    skin/images/vview-lock@2x.png (themes/images/vview-lock@2x.png)
+    skin/images/vview-open-inspector.png (themes/images/vview-open-inspector.png)
+    skin/images/vview-open-inspector@2x.png (themes/images/vview-open-inspector@2x.png)
+    skin/images/cubic-bezier-swatch.png (themes/images/cubic-bezier-swatch.png)
+    skin/images/cubic-bezier-swatch@2x.png (themes/images/cubic-bezier-swatch@2x.png)
+    skin/images/undock@2x.png (themes/images/undock@2x.png)
+    skin/font-inspector.css (themes/font-inspector.css)
+    skin/computedview.css (themes/computedview.css)
+    skin/images/arrow-e.png (themes/images/arrow-e.png)
+    skin/images/arrow-e@2x.png (themes/images/arrow-e@2x.png)
+    skin/projecteditor/projecteditor.css (themes/projecteditor/projecteditor.css)
+    skin/images/search-clear-failed.svg (themes/images/search-clear-failed.svg)
+    skin/images/search-clear-light.svg (themes/images/search-clear-light.svg)
+    skin/images/search-clear-dark.svg (themes/images/search-clear-dark.svg)
+    skin/tooltip/arrow-horizontal-dark.png (themes/tooltip/arrow-horizontal-dark.png)
+    skin/tooltip/arrow-horizontal-dark@2x.png (themes/tooltip/arrow-horizontal-dark@2x.png)
+    skin/tooltip/arrow-vertical-dark.png (themes/tooltip/arrow-vertical-dark.png)
+    skin/tooltip/arrow-vertical-dark@2x.png (themes/tooltip/arrow-vertical-dark@2x.png)
+    skin/tooltip/arrow-horizontal-light.png (themes/tooltip/arrow-horizontal-light.png)
+    skin/tooltip/arrow-horizontal-light@2x.png (themes/tooltip/arrow-horizontal-light@2x.png)
+    skin/tooltip/arrow-vertical-light.png (themes/tooltip/arrow-vertical-light.png)
+    skin/tooltip/arrow-vertical-light@2x.png (themes/tooltip/arrow-vertical-light@2x.png)
--- a/devtools/client/jsonview/converter-child.js
+++ b/devtools/client/jsonview/converter-child.js
@@ -29,17 +29,17 @@ const childProcessMessageManager =
 const SEGMENT_SIZE = Math.pow(2, 17);
 
 const JSON_VIEW_MIME_TYPE = "application/vnd.mozilla.json.view";
 const CONTRACT_ID = "@mozilla.org/streamconv;1?from=" + JSON_VIEW_MIME_TYPE + "&to=*/*";
 const CLASS_ID = "{d8c9acee-dec5-11e4-8c75-1681e6b88ec1}";
 
 // Localization
 var jsonViewStrings = Services.strings.createBundle(
-  "chrome://browser/locale/devtools/jsonview.properties");
+  "chrome://devtools/locale/jsonview.properties");
 
 /**
  * This object detects 'application/vnd.mozilla.json.view' content type
  * and converts it into a JSON Viewer application that allows simple
  * JSON inspection.
  *
  * Inspired by JSON View: https://github.com/bhollis/jsonview/
  */
--- a/devtools/client/jsonview/css/search-box.css
+++ b/devtools/client/jsonview/css/search-box.css
@@ -21,26 +21,26 @@
 }
 
 /******************************************************************************/
 /* Light Theme & Dark Theme*/
 
 .theme-dark .searchBox,
 .theme-light .searchBox {
   border: 1px solid rgb(170, 170, 170);
-  background-image: url("chrome://devtools/skin/themes/images/magnifying-glass-light.png");
+  background-image: url("chrome://devtools/skin/images/magnifying-glass-light.png");
   background-position: 8px center;
   border-radius: 2px;
   padding-left: 25px;
   margin-top: 1px;
   height: 16px;
   font-style: italic;
 }
 
 /******************************************************************************/
 /* Dark Theme */
 
 .theme-dark .searchBox {
   background-color: rgba(24, 29, 32, 1);
   color: rgba(184, 200, 217, 1);
   border-color: var(--theme-splitter-color);
-  background-image: url("chrome://devtools/skin/themes/images/magnifying-glass.png");
+  background-image: url("chrome://devtools/skin/images/magnifying-glass.png");
 }
--- a/devtools/client/layoutview/view.js
+++ b/devtools/client/layoutview/view.js
@@ -11,17 +11,17 @@ var {utils: Cu, interfaces: Ci, classes:
 Cu.import("resource://gre/modules/Task.jsm");
 const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
 Cu.import("resource://gre/modules/Console.jsm");
 Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm");
 
 const {InplaceEditor, editableItem} = require("devtools/client/shared/inplace-editor");
 const {ReflowFront} = require("devtools/server/actors/layout");
 
-const STRINGS_URI = "chrome://browser/locale/devtools/shared.properties";
+const STRINGS_URI = "chrome://devtools/locale/shared.properties";
 const SHARED_L10N = new ViewHelpers.L10N(STRINGS_URI);
 const NUMERIC = /^-?[\d\.]+$/;
 const LONG_TEXT_ROTATE_LIMIT = 3;
 
 /**
  * An instance of EditingSession tracks changes that have been made during the
  * modification of box model values. All of these changes can be reverted by
  * calling revert.
--- a/devtools/client/layoutview/view.xhtml
+++ b/devtools/client/layoutview/view.xhtml
@@ -1,29 +1,29 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE html [
-<!ENTITY % layoutviewDTD SYSTEM "chrome://browser/locale/devtools/layoutview.dtd" >
+<!ENTITY % layoutviewDTD SYSTEM "chrome://devtools/locale/layoutview.dtd" >
  %layoutviewDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <head>
     <title>&title;</title>
 
     <script type="application/javascript;version=1.8"
             src="chrome://devtools/content/shared/theme-switching.js"/>
 
     <script type="application/javascript;version=1.8" src="view.js"></script>
 
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/layoutview.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/layoutview.css" type="text/css"/>
 
   </head>
   <body class="theme-sidebar devtools-monospace">
 
     <p id="header">
       <span id="element-size"></span><span id="element-position"></span>
     </p>
 
rename from browser/locales/en-US/chrome/browser/devtools/VariablesView.dtd
rename to devtools/client/locales/en-US/VariablesView.dtd
rename from browser/locales/en-US/chrome/browser/devtools/aboutdebugging.dtd
rename to devtools/client/locales/en-US/aboutdebugging.dtd
rename from browser/locales/en-US/chrome/browser/devtools/aboutdebugging.properties
rename to devtools/client/locales/en-US/aboutdebugging.properties
rename from browser/locales/en-US/chrome/browser/devtools/animationinspector.dtd
rename to devtools/client/locales/en-US/animationinspector.dtd
rename from browser/locales/en-US/chrome/browser/devtools/animationinspector.properties
rename to devtools/client/locales/en-US/animationinspector.properties
rename from browser/locales/en-US/chrome/browser/devtools/app-manager.properties
rename to devtools/client/locales/en-US/app-manager.properties
rename from browser/locales/en-US/chrome/browser/devtools/appcacheutils.properties
rename to devtools/client/locales/en-US/appcacheutils.properties
rename from browser/locales/en-US/chrome/browser/devtools/canvasdebugger.dtd
rename to devtools/client/locales/en-US/canvasdebugger.dtd
rename from browser/locales/en-US/chrome/browser/devtools/canvasdebugger.properties
rename to devtools/client/locales/en-US/canvasdebugger.properties
rename from browser/locales/en-US/chrome/browser/devtools/connection-screen.dtd
rename to devtools/client/locales/en-US/connection-screen.dtd
rename from browser/locales/en-US/chrome/browser/devtools/connection-screen.properties
rename to devtools/client/locales/en-US/connection-screen.properties
rename from browser/locales/en-US/chrome/browser/devtools/debugger.dtd
rename to devtools/client/locales/en-US/debugger.dtd
rename from browser/locales/en-US/chrome/browser/devtools/debugger.properties
rename to devtools/client/locales/en-US/debugger.properties
rename from browser/locales/en-US/chrome/browser/devtools/device.properties
rename to devtools/client/locales/en-US/device.properties
rename from browser/locales/en-US/chrome/browser/devtools/eyedropper.properties
rename to devtools/client/locales/en-US/eyedropper.properties
rename from browser/locales/en-US/chrome/browser/devtools/filterwidget.dtd
rename to devtools/client/locales/en-US/filterwidget.dtd
rename from browser/locales/en-US/chrome/browser/devtools/filterwidget.properties
rename to devtools/client/locales/en-US/filterwidget.properties
rename from browser/locales/en-US/chrome/browser/devtools/font-inspector.dtd
rename to devtools/client/locales/en-US/font-inspector.dtd
rename from browser/locales/en-US/chrome/browser/devtools/graphs.properties
rename to devtools/client/locales/en-US/graphs.properties
rename from browser/locales/en-US/chrome/browser/devtools/har.properties
rename to devtools/client/locales/en-US/har.properties
rename from browser/locales/en-US/chrome/browser/devtools/inspector.dtd
rename to devtools/client/locales/en-US/inspector.dtd
rename from browser/locales/en-US/chrome/browser/devtools/inspector.properties
rename to devtools/client/locales/en-US/inspector.properties
rename from browser/locales/en-US/chrome/browser/devtools/jsonview.properties
rename to devtools/client/locales/en-US/jsonview.properties
rename from browser/locales/en-US/chrome/browser/devtools/layoutview.dtd
rename to devtools/client/locales/en-US/layoutview.dtd
rename from browser/locales/en-US/chrome/browser/devtools/markers.properties
rename to devtools/client/locales/en-US/markers.properties
rename from browser/locales/en-US/chrome/browser/devtools/memory.properties
rename to devtools/client/locales/en-US/memory.properties
--- a/browser/locales/en-US/chrome/browser/devtools/memory.properties
+++ b/devtools/client/locales/en-US/memory.properties
@@ -43,16 +43,20 @@ checkbox.recordAllocationStacks=Record a
 # LOCALIZATION NOTE (toolbar.breakdownBy): The label describing the select menu
 # options of the breakdown options.
 toolbar.breakdownBy=Group by:
 
 # LOCALIZATION NOTE (take-snapshot): The label describing the button that initiates
 # taking a snapshot, either as the main label, or a tooltip.
 take-snapshot=Take snapshot
 
+# LOCALIZATION NOTE (filter.placeholder): The placeholder text used for the
+# memory tool's filter search box.
+filter.placeholder=Filter
+
 # LOCALIZATION NOTE (viewsourceindebugger): The label for the tooltip when hovering over
 # a link in the heap tree to jump to the debugger view.
 # %S represents the URL to match in the debugger.
 viewsourceindebugger=View source in Debugger → %S
 
 # LOCALIZATION NOTE (tree-item.nostack): The label describing the row in the heap tree
 # that represents a row broken down by allocation stack when no stack was available.
 tree-item.nostack=(no stack available)
rename from browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd
rename to devtools/client/locales/en-US/netmonitor.dtd
--- a/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd
+++ b/devtools/client/locales/en-US/netmonitor.dtd
@@ -172,20 +172,16 @@
 <!-- LOCALIZATION NOTE (netmonitorUI.response.dimensions): This is the label displayed
   -  in the network details response tab identifying an image's dimensions. -->
 <!ENTITY netmonitorUI.response.dimensions "Dimensions:">
 
 <!-- LOCALIZATION NOTE (netmonitorUI.response.mime): This is the label displayed
   -  in the network details response tab identifying an image's mime. -->
 <!ENTITY netmonitorUI.response.mime       "MIME Type:">
 
-<!-- LOCALIZATION NOTE (netmonitorUI.response.encoding): This is the label displayed
-  -  in the network details response tab identifying an image's encoding. -->
-<!ENTITY netmonitorUI.response.encoding   "Encoding:">
-
 <!-- LOCALIZATION NOTE (netmonitorUI.timings.blocked): This is the label displayed
   -  in the network details timings tab identifying the amount of time spent
   -  in a "blocked" state. -->
 <!ENTITY netmonitorUI.timings.blocked     "Blocked:">
 
 <!-- LOCALIZATION NOTE (netmonitorUI.timings.dns): This is the label displayed
   -  in the network details timings tab identifying the amount of time spent
   -  in a "dns" state. -->
rename from browser/locales/en-US/chrome/browser/devtools/netmonitor.properties
rename to devtools/client/locales/en-US/netmonitor.properties
rename from browser/locales/en-US/chrome/browser/devtools/performance.dtd
rename to devtools/client/locales/en-US/performance.dtd
rename from browser/locales/en-US/chrome/browser/devtools/performance.properties
rename to devtools/client/locales/en-US/performance.properties
rename from browser/locales/en-US/chrome/browser/devtools/projecteditor.properties
rename to devtools/client/locales/en-US/projecteditor.properties
rename from browser/locales/en-US/chrome/browser/devtools/promisedebugger.dtd
rename to devtools/client/locales/en-US/promisedebugger.dtd
rename from browser/locales/en-US/chrome/browser/devtools/promisedebugger.properties
rename to devtools/client/locales/en-US/promisedebugger.properties
rename from browser/locales/en-US/chrome/browser/devtools/responsiveUI.properties
rename to devtools/client/locales/en-US/responsiveUI.properties
rename from browser/locales/en-US/chrome/browser/devtools/scratchpad.dtd
rename to devtools/client/locales/en-US/scratchpad.dtd
rename from browser/locales/en-US/chrome/browser/devtools/scratchpad.properties
rename to devtools/client/locales/en-US/scratchpad.properties
rename from browser/locales/en-US/chrome/browser/devtools/shadereditor.dtd
rename to devtools/client/locales/en-US/shadereditor.dtd
rename from browser/locales/en-US/chrome/browser/devtools/shadereditor.properties
rename to devtools/client/locales/en-US/shadereditor.properties
rename from browser/locales/en-US/chrome/browser/devtools/shared.properties
rename to devtools/client/locales/en-US/shared.properties
rename from browser/locales/en-US/chrome/browser/devtools/sourceeditor.dtd
rename to devtools/client/locales/en-US/sourceeditor.dtd
rename from browser/locales/en-US/chrome/browser/devtools/sourceeditor.properties
rename to devtools/client/locales/en-US/sourceeditor.properties
rename from browser/locales/en-US/chrome/browser/devtools/storage.properties
rename to devtools/client/locales/en-US/storage.properties
rename from browser/locales/en-US/chrome/browser/devtools/styleeditor.dtd
rename to devtools/client/locales/en-US/styleeditor.dtd
rename from browser/locales/en-US/chrome/browser/devtools/styleeditor.properties
rename to devtools/client/locales/en-US/styleeditor.properties
rename from browser/locales/en-US/chrome/browser/devtools/styleinspector.dtd
rename to devtools/client/locales/en-US/styleinspector.dtd
rename from browser/locales/en-US/chrome/browser/devtools/tilt.properties
rename to devtools/client/locales/en-US/tilt.properties
rename from browser/locales/en-US/chrome/browser/devtools/toolbox.dtd
rename to devtools/client/locales/en-US/toolbox.dtd
rename from browser/locales/en-US/chrome/browser/devtools/toolbox.properties
rename to devtools/client/locales/en-US/toolbox.properties
rename from browser/locales/en-US/chrome/browser/devtools/webConsole.dtd
rename to devtools/client/locales/en-US/webConsole.dtd
rename from browser/locales/en-US/chrome/browser/devtools/webaudioeditor.dtd
rename to devtools/client/locales/en-US/webaudioeditor.dtd
rename from browser/locales/en-US/chrome/browser/devtools/webaudioeditor.properties
rename to devtools/client/locales/en-US/webaudioeditor.properties
rename from browser/locales/en-US/chrome/browser/devtools/webconsole.properties
rename to devtools/client/locales/en-US/webconsole.properties
rename from browser/locales/en-US/chrome/browser/devtools/webide.dtd
rename to devtools/client/locales/en-US/webide.dtd
rename from browser/locales/en-US/chrome/browser/devtools/webide.properties
rename to devtools/client/locales/en-US/webide.properties
new file mode 100644
--- /dev/null
+++ b/devtools/client/locales/jar.mn
@@ -0,0 +1,8 @@
+#filter substitution
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+@AB_CD@.jar:
+%   locale devtools @AB_CD@ %locale/@AB_CD@/devtools/client/
+    locale/@AB_CD@/devtools/client/ (%*)
new file mode 100644
--- /dev/null
+++ b/devtools/client/locales/moz.build
@@ -0,0 +1,7 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.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/markupview/markup-view.js
+++ b/devtools/client/markupview/markup-view.js
@@ -3088,15 +3088,15 @@ function map(value, oldMin, oldMax, newM
   let ratio = oldMax - oldMin;
   if (ratio == 0) {
     return value;
   }
   return newMin + (newMax - newMin) * ((value - oldMin) / ratio);
 }
 
 loader.lazyGetter(MarkupView.prototype, "strings", () => Services.strings.createBundle(
-  "chrome://browser/locale/devtools/inspector.properties"
+  "chrome://devtools/locale/inspector.properties"
 ));
 
 XPCOMUtils.defineLazyGetter(this, "clipboardHelper", function() {
   return Cc["@mozilla.org/widget/clipboardhelper;1"].
     getService(Ci.nsIClipboardHelper);
 });
--- a/devtools/client/markupview/markup-view.xhtml
+++ b/devtools/client/markupview/markup-view.xhtml
@@ -3,18 +3,18 @@
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE html>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
   <link rel="stylesheet" href="chrome://devtools/content/markupview/markup-view.css" type="text/css"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/markup-view.css" type="text/css"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/markup-view.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
 
   <script type="application/javascript;version=1.8"
           src="chrome://devtools/content/shared/theme-switching.js"/>
 
 </head>
 <body class="theme-body devtools-monospace" role="application">
 
 <!-- NOTE THAT WE MAKE EXTENSIVE USE OF HTML COMMENTS IN THIS FILE IN ORDER -->
--- a/devtools/client/markupview/test/browser_markupview_links_04.js
+++ b/devtools/client/markupview/test/browser_markupview_links_04.js
@@ -4,19 +4,19 @@
 
 "use strict";
 
 // Tests that the contextual menu shows the right items when clicking on a link
 // in an attribute.
 
 const TEST_URL = TEST_URL_ROOT + "doc_markup_links.html";
 const STRINGS = Services.strings
-  .createBundle("chrome://browser/locale/devtools/inspector.properties");
+  .createBundle("chrome://devtools/locale/inspector.properties");
 const TOOLBOX_STRINGS = Services.strings
-  .createBundle("chrome://browser/locale/devtools/toolbox.properties");
+  .createBundle("chrome://devtools/locale/toolbox.properties");
 
 // The test case array contains objects with the following properties:
 // - selector: css selector for the node to select in the inspector
 // - attributeName: name of the attribute to test
 // - popupNodeSelector: css selector for the element inside the attribute
 //   element to use as the contextual menu anchor
 // - isLinkFollowItemVisible: is the follow-link item expected to be displayed
 // - isLinkCopyItemVisible: is the copy-link item expected to be displayed
new file mode 100644
--- /dev/null
+++ b/devtools/client/memory/actions/filter.js
@@ -0,0 +1,36 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const { clearTimeout, setTimeout } = require("sdk/timers");
+const { actions } = require("../constants");
+const { refreshSelectedCensus } = require("./snapshot");
+
+const setFilterString = exports.setFilterString = function (filterString) {
+  return {
+    type: actions.SET_FILTER_STRING,
+    filter: filterString
+  };
+};
+
+// The number of milliseconds we should wait before kicking off a new census
+// when the filter string is updated. This helps us avoid doing any work while
+// the user is still typing.
+const FILTER_INPUT_DEBOUNCE_MS = 250;
+
+// The timer id for the debounced census refresh.
+let timerId = null;
+
+exports.setFilterStringAndRefresh = function (filterString, heapWorker) {
+  return function* (dispatch, getState) {
+    dispatch(setFilterString(filterString));
+
+    if (timerId !== null) {
+      clearTimeout(timerId);
+    }
+
+    timerId = setTimeout(() => dispatch(refreshSelectedCensus(heapWorker)),
+                         FILTER_INPUT_DEBOUNCE_MS);
+  };
+};
--- a/devtools/client/memory/actions/moz.build
+++ b/devtools/client/memory/actions/moz.build
@@ -1,11 +1,12 @@
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.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(
     'allocations.js',
     'breakdown.js',
+    'filter.js',
     'inverted.js',
     'snapshot.js',
 )
--- a/devtools/client/memory/actions/snapshot.js
+++ b/devtools/client/memory/actions/snapshot.js
@@ -102,43 +102,64 @@ const readSnapshot = exports.readSnapsho
 const takeCensus = exports.takeCensus = function (heapWorker, snapshot) {
   return function *(dispatch, getState) {
     assert([states.READ, states.SAVED_CENSUS].includes(snapshot.state),
       `Can only take census of snapshots in READ or SAVED_CENSUS state, found ${snapshot.state}`);
 
     let census;
     let inverted = getState().inverted;
     let breakdown = getState().breakdown;
+    let filter = getState().filter;
 
-    // If breakdown and inversion haven't changed, don't do anything.
-    if (inverted === snapshot.inverted && breakdownEquals(breakdown, snapshot.breakdown)) {
+    // If breakdown, filter and inversion haven't changed, don't do anything.
+    if (inverted === snapshot.inverted
+        && filter === snapshot.filter
+        && breakdownEquals(breakdown, snapshot.breakdown)) {
       return;
     }
 
     // Keep taking a census if the breakdown changes during. Recheck
     // that the breakdown used for the census is the same as
     // the state's breakdown.
     do {
       inverted = getState().inverted;
       breakdown = getState().breakdown;
-      dispatch({ type: actions.TAKE_CENSUS_START, snapshot, inverted, breakdown });
+      filter = getState().filter;
+
+      dispatch({
+        type: actions.TAKE_CENSUS_START,
+        snapshot,
+        inverted,
+        filter,
+        breakdown
+      });
+
       let opts = inverted ? { asInvertedTreeNode: true } : { asTreeNode: true };
+      opts.filter = filter || null;
 
       try {
         census = yield heapWorker.takeCensus(snapshot.path, { breakdown }, opts);
       } catch(error) {
         reportException("takeCensus", error);
         dispatch({ type: actions.SNAPSHOT_ERROR, snapshot, error });
         return;
       }
     }
     while (inverted !== getState().inverted ||
+           filter !== getState().filter ||
            !breakdownEquals(breakdown, getState().breakdown));
 
-    dispatch({ type: actions.TAKE_CENSUS_END, snapshot, breakdown, inverted, census });
+    dispatch({
+      type: actions.TAKE_CENSUS_END,
+      snapshot,
+      breakdown,
+      inverted,
+      filter,
+      census
+    });
   };
 };
 
 /**
  * Refresh the selected snapshot's census data, if need be (for example,
  * breakdown configuration changed).
  *
  * @param {HeapAnalysesClient} heapWorker
--- a/devtools/client/memory/app.js
+++ b/devtools/client/memory/app.js
@@ -3,16 +3,17 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const { DOM: dom, createClass, createFactory, PropTypes } = require("devtools/client/shared/vendor/react");
 const { connect } = require("devtools/client/shared/vendor/react-redux");
 const { breakdowns } = require("./constants");
 const { toggleRecordingAllocationStacks } = require("./actions/allocations");
 const { setBreakdownAndRefresh } = require("./actions/breakdown");
 const { toggleInvertedAndRefresh } = require("./actions/inverted");
+const { setFilterStringAndRefresh } = require("./actions/filter");
 const { selectSnapshotAndRefresh, takeSnapshotAndCensus } = require("./actions/snapshot");
 const { breakdownNameToSpec, getBreakdownDisplayData } = require("./utils");
 const Toolbar = createFactory(require("./components/toolbar"));
 const List = createFactory(require("./components/list"));
 const SnapshotListItem = createFactory(require("./components/snapshot-list-item"));
 const HeapView = createFactory(require("./components/heap"));
 const { app: appModel } = require("./models");
 
@@ -44,16 +45,17 @@ const App = createClass({
       dispatch,
       snapshots,
       front,
       heapWorker,
       breakdown,
       allocations,
       inverted,
       toolbox,
+      filter,
     } = this.props;
 
     let selectedSnapshot = snapshots.find(s => s.selected);
 
     return (
       dom.div({ id: "memory-tool" },
 
         Toolbar({
@@ -61,17 +63,20 @@ const App = createClass({
           onTakeSnapshotClick: () => dispatch(takeSnapshotAndCensus(front, heapWorker)),
           onBreakdownChange: breakdown =>
             dispatch(setBreakdownAndRefresh(heapWorker, breakdownNameToSpec(breakdown))),
           onToggleRecordAllocationStacks: () =>
             dispatch(toggleRecordingAllocationStacks(front)),
           allocations,
           inverted,
           onToggleInverted: () =>
-            dispatch(toggleInvertedAndRefresh(heapWorker))
+            dispatch(toggleInvertedAndRefresh(heapWorker)),
+          filter,
+          setFilterString: filterString =>
+            dispatch(setFilterStringAndRefresh(filterString, heapWorker)),
         }),
 
         dom.div({ id: "memory-tool-container" },
           List({
             itemComponent: SnapshotListItem,
             items: snapshots,
             onClick: snapshot => dispatch(selectSnapshotAndRefresh(heapWorker, snapshot))
           }),
--- a/devtools/client/memory/components/heap.js
+++ b/devtools/client/memory/components/heap.js
@@ -36,38 +36,47 @@ function createParentMap (node, aggregat
  * @param {CensusTreeNode} census
  * @return {Object}
  */
 function createTreeProperties (snapshot, toolbox) {
   const census = snapshot.census;
   let map = createParentMap(census);
   const totals = getSnapshotTotals(snapshot);
 
+  const getPercentBytes = totals.bytes === 0
+    ? _ => 0
+    : bytes => bytes / totals.bytes * 100;
+
+  const getPercentCount = totals.count === 0
+    ? _ => 0
+    : count => count / totals.count * 100;
+
   return {
+    autoExpandDepth: 0,
     getParent: node => {
       const parent = map[node.id];
       return parent === census ? null : parent;
     },
     getChildren: node => node.children || [],
     renderItem: (item, depth, focused, arrow) =>
       new TreeItem({
         toolbox,
         item,
         depth,
         focused,
         arrow,
-        getPercentBytes: bytes => bytes / totals.bytes * 100,
-        getPercentCount: count => count / totals.count * 100,
+        getPercentBytes,
+        getPercentCount,
       }),
-    getRoots: () => census.children,
+    getRoots: () => census.children || [],
     getKey: node => node.id,
     itemHeight: HEAP_TREE_ROW_HEIGHT,
     // Because we never add or remove children when viewing the same census, we
     // can always reuse a cached traversal if one is available.
-    reuseCachedTraversal: traversal => true,
+    reuseCachedTraversal: _ => true,
   };
 }
 
 /**
  * Main view for the memory tool -- contains several panels for different states;
  * an initial state of only a button to take a snapshot, loading states, and the
  * heap view tree.
  */
--- a/devtools/client/memory/components/toolbar.js
+++ b/devtools/client/memory/components/toolbar.js
@@ -14,32 +14,37 @@ const Toolbar = module.exports = createC
       displayName: PropTypes.string.isRequired,
     })).isRequired,
     onTakeSnapshotClick: PropTypes.func.isRequired,
     onBreakdownChange: PropTypes.func.isRequired,
     onToggleRecordAllocationStacks: PropTypes.func.isRequired,
     allocations: models.allocations,
     onToggleInverted: PropTypes.func.isRequired,
     inverted: PropTypes.bool.isRequired,
+    filterString: PropTypes.string,
+    setFilterString: PropTypes.func.isRequired,
   },
 
   render() {
     let {
       onTakeSnapshotClick,
       onBreakdownChange,
       breakdowns,
       onToggleRecordAllocationStacks,
       allocations,
       onToggleInverted,
-      inverted
+      inverted,
+      filterString,
+      setFilterString
     } = this.props;
 
     return (
       dom.div({ className: "devtools-toolbar" },
         dom.button({
+          id: "take-snapshot",
           className: `take-snapshot devtools-button`,
           onClick: onTakeSnapshotClick,
           title: L10N.getStr("take-snapshot")
         }),
 
         dom.div({ className: "toolbar-group" },
           dom.label({ className: "breakdown-by" },
             L10N.getStr("toolbar.breakdownBy"),
@@ -57,20 +62,31 @@ const Toolbar = module.exports = createC
               checked: inverted,
               onChange: onToggleInverted,
             }),
             L10N.getStr("checkbox.invertTree")
           ),
 
           dom.label({},
             dom.input({
+              id: "record-allocation-stacks-checkbox",
               type: "checkbox",
               checked: allocations.recording,
               disabled: allocations.togglingInProgress,
               onChange: onToggleRecordAllocationStacks,
             }),
             L10N.getStr("checkbox.recordAllocationStacks")
-          )
+          ),
+
+          dom.div({ id: "toolbar-spacer", className: "spacer" }),
+
+          dom.input({
+            id: "filter",
+            type: "search",
+            placeholder: L10N.getStr("filter.placeholder"),
+            onChange: event => setFilterString(event.target.value),
+            value: !!filterString ? filterString : undefined,
+          })
         )
       )
     );
   }
 });
--- a/devtools/client/memory/components/tree.js
+++ b/devtools/client/memory/components/tree.js
@@ -164,16 +164,20 @@ const Tree = module.exports = createClas
     this._updateHeight();
   },
 
   componentWillUnmount() {
     window.removeEventListener("resize", this._updateHeight);
   },
 
   componentWillReceiveProps(nextProps) {
+    if (!this.props.autoExpandDepth) {
+      return;
+    }
+
     // Automatically expand the first autoExpandDepth levels for new items.
     for (let { item } of this._dfsFromRoots(this.props.autoExpandDepth)) {
       if (!this.state.seen.has(item)) {
         this.state.expanded.add(item);
         this.state.seen.add(item);
       }
     }
   },
--- a/devtools/client/memory/constants.js
+++ b/devtools/client/memory/constants.js
@@ -30,16 +30,19 @@ actions.SELECT_SNAPSHOT = "select-snapsh
 actions.TOGGLE_INVERTED = "toggle-inverted";
 
 // Fired to set a new breakdown.
 actions.SET_BREAKDOWN = "set-breakdown";
 
 // Fired when there is an error processing a snapshot or taking a census.
 actions.SNAPSHOT_ERROR = "snapshot-error";
 
+// Fired when there is a new filter string set.
+actions.SET_FILTER_STRING = "set-filter-string";
+
 // Options passed to MemoryFront's startRecordingAllocations never change.
 exports.ALLOCATION_RECORDING_OPTIONS = {
   probability: 1,
   maxLogLength: 1
 };
 
 const COUNT = { by: "count", count: true, bytes: true };
 const INTERNAL_TYPE = { by: "internalType", then: COUNT };
--- a/devtools/client/memory/memory.xhtml
+++ b/devtools/client/memory/memory.xhtml
@@ -6,19 +6,19 @@
   %htmlDTD;
 ]>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/widgets.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/memory.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/widgets.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/memory.css" type="text/css"/>
 
     <script type="application/javascript;version=1.8"
             src="chrome://devtools/content/shared/theme-switching.js"/>
     <script type="application/javascript;version=1.8"
             src="initializer.js"></script>
   </head>
   <body class="theme-body">
     <div id="app">
--- a/devtools/client/memory/models.js
+++ b/devtools/client/memory/models.js
@@ -20,30 +20,33 @@ let breakdownModel = exports.breakdown =
  * Snapshot model.
  */
 let stateKeys = Object.keys(states).map(state => states[state]);
 let snapshotModel = exports.snapshot = PropTypes.shape({
   // Unique ID for a snapshot
   id: PropTypes.number.isRequired,
   // Whether or not this snapshot is currently selected.
   selected: PropTypes.bool.isRequired,
-  // fs path to where the snapshot is stored; used to
-  // identify the snapshot for HeapAnalysesClient.
+  // Filesystem path to where the snapshot is stored; used to identify the
+  // snapshot for HeapAnalysesClient.
   path: PropTypes.string,
-  // Data of a census breakdown
+  // The current census report data.
   census: PropTypes.object,
   // The breakdown used to generate the current census
   breakdown: breakdownModel,
   // Whether the currently cached census tree is inverted or not.
   inverted: PropTypes.bool,
+  // If present, the currently cached census's filter string used for pruning
+  // the tree items.
+  filter: PropTypes.string,
   // If an error was thrown while processing this snapshot, the `Error` instance is attached here.
   error: PropTypes.object,
   // The creation time of the snapshot; required after the snapshot has been read.
   creationTime: PropTypes.number,
-  // State the snapshot is in
+  // The current state the snapshot is in.
   // @see ./constants.js
   state: function (snapshot, propName) {
     let current = snapshot.state;
     let shouldHavePath = [states.SAVED, states.READ, states.SAVING_CENSUS, states.SAVED_CENSUS];
     let shouldHaveCreationTime = [states.READ, states.SAVING_CENSUS, states.SAVED_CENSUS];
     let shouldHaveCensus = [states.SAVED_CENSUS];
 
     if (!stateKeys.includes(current)) {
@@ -79,9 +82,11 @@ let appModel = exports.app = {
   // The breakdown object DSL describing how we want
   // the census data to be.
   // @see `js/src/doc/Debugger/Debugger.Memory.md`
   breakdown: breakdownModel.isRequired,
   // List of reference to all snapshots taken
   snapshots: PropTypes.arrayOf(snapshotModel).isRequired,
   // True iff we want the tree displayed inverted.
   inverted: PropTypes.bool.isRequired,
+  // If present, a filter string for pruning the tree items.
+  filter: PropTypes.string,
 };
--- a/devtools/client/memory/reducers.js
+++ b/devtools/client/memory/reducers.js
@@ -3,8 +3,9 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 exports.allocations = require("./reducers/allocations");
 exports.snapshots = require("./reducers/snapshots");
 exports.breakdown = require("./reducers/breakdown");
 exports.errors = require("./reducers/errors");
 exports.inverted = require("./reducers/inverted");
+exports.filter = require("./reducers/filter");
new file mode 100644
--- /dev/null
+++ b/devtools/client/memory/reducers/filter.js
@@ -0,0 +1,14 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const { actions } = require("../constants");
+
+module.exports = function (filterString = null, action) {
+  if (action.type === actions.SET_FILTER_STRING) {
+    return action.filter || null;
+  } else {
+    return filterString;
+  }
+};
--- a/devtools/client/memory/reducers/moz.build
+++ b/devtools/client/memory/reducers/moz.build
@@ -2,11 +2,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/.
 
 DevToolsModules(
     'allocations.js',
     'breakdown.js',
     'errors.js',
+    'filter.js',
     'inverted.js',
     'snapshots.js',
 )
--- a/devtools/client/memory/reducers/snapshots.js
+++ b/devtools/client/memory/reducers/snapshots.js
@@ -51,16 +51,17 @@ handlers[actions.TAKE_CENSUS_START] = fu
 };
 
 handlers[actions.TAKE_CENSUS_END] = function (snapshots, action) {
   let snapshot = getSnapshot(snapshots, action.snapshot);
   snapshot.state = states.SAVED_CENSUS;
   snapshot.census = action.census;
   snapshot.breakdown = action.breakdown;
   snapshot.inverted = action.inverted;
+  snapshot.filter = action.filter;
   return [...snapshots];
 };
 
 handlers[actions.SELECT_SNAPSHOT] = function (snapshots, action) {
   return snapshots.map(s => {
     s.selected = s.id === action.snapshot.id;
     return s;
   });
--- a/devtools/client/memory/test/browser/browser.ini
+++ b/devtools/client/memory/test/browser/browser.ini
@@ -3,13 +3,17 @@ tags = devtools
 subsuite = devtools
 support-files =
   head.js
   doc_steady_allocation.html
 
 [browser_memory_allocationStackBreakdown_01.js]
 [browser_memory-breakdowns-01.js]
     skip-if = debug # bug 1219554
+[browser_memory_filter_01.js]
+    skip-if = debug # bug 1219554
 [browser_memory_no_allocation_stacks.js]
+[browser_memory_no_auto_expand.js]
+    skip-if = debug # bug 1219554
 [browser_memory_percents_01.js]
 [browser_memory-simple-01.js]
     skip-if = debug # bug 1219554
 [browser_memory_transferHeapSnapshot_e10s_01.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/memory/test/browser/browser_memory_filter_01.js
@@ -0,0 +1,42 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Sanity test that we can show allocation stack breakdowns in the tree.
+
+"use strict";
+
+const { snapshotState } = require("devtools/client/memory/constants");
+const { takeSnapshotAndCensus } = require("devtools/client/memory/actions/snapshot");
+const { toggleInverted } = require("devtools/client/memory/actions/inverted");
+
+const TEST_URL = "http://example.com/browser/devtools/client/memory/test/browser/doc_steady_allocation.html";
+
+this.test = makeMemoryTest(TEST_URL, function* ({ tab, panel }) {
+  const heapWorker = panel.panelWin.gHeapAnalysesClient;
+  const front = panel.panelWin.gFront;
+  const store = panel.panelWin.gStore;
+  const { getState, dispatch } = store;
+  const doc = panel.panelWin.document;
+
+  ok(!getState().inverted, "not inverted by default");
+  const invertCheckbox = doc.getElementById("invert-tree-checkbox");
+  EventUtils.synthesizeMouseAtCenter(invertCheckbox, {}, panel.panelWin);
+  yield waitUntilState(store, state => state.inverted === true);
+
+  const takeSnapshotButton = doc.getElementById("take-snapshot");
+  EventUtils.synthesizeMouseAtCenter(takeSnapshotButton, {}, panel.panelWin);
+  yield waitUntilSnapshotState(store, [snapshotState.SAVED_CENSUS]);
+
+  const filterInput = doc.getElementById("filter");
+  EventUtils.synthesizeMouseAtCenter(filterInput, {}, panel.panelWin);
+  EventUtils.sendString("js::Shape", panel.panelWin);
+
+  yield waitUntilSnapshotState(store, [snapshotState.SAVING_CENSUS]);
+  ok(true, "adding a filter string should trigger census recompute");
+
+  yield waitUntilSnapshotState(store, [snapshotState.SAVED_CENSUS]);
+
+  const nameElem = doc.querySelector(".heap-tree-item-field.heap-tree-item-name");
+  ok(nameElem, "Should get a tree item row with a name");
+  is(nameElem.textContent.trim(), "js::Shape", "and the tree item should be the one we filtered for");
+});
new file mode 100644
--- /dev/null
+++ b/devtools/client/memory/test/browser/browser_memory_no_auto_expand.js
@@ -0,0 +1,42 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Sanity test that we can show allocation stack breakdowns in the tree.
+
+"use strict";
+
+const { waitForTime } = require("devtools/shared/DevToolsUtils");
+const { breakdowns } = require("devtools/client/memory/constants");
+const { toggleRecordingAllocationStacks } = require("devtools/client/memory/actions/allocations");
+const { takeSnapshotAndCensus } = require("devtools/client/memory/actions/snapshot");
+const breakdownActions = require("devtools/client/memory/actions/breakdown");
+const { toggleInvertedAndRefresh } = require("devtools/client/memory/actions/inverted");
+
+const TEST_URL = "http://example.com/browser/devtools/client/memory/test/browser/doc_steady_allocation.html";
+
+this.test = makeMemoryTest(TEST_URL, function* ({ tab, panel }) {
+  const heapWorker = panel.panelWin.gHeapAnalysesClient;
+  const front = panel.panelWin.gFront;
+  const { getState, dispatch } = panel.panelWin.gStore;
+  const doc = panel.panelWin.document;
+
+  is(getState().breakdown.by, "coarseType");
+  yield dispatch(takeSnapshotAndCensus(front, heapWorker));
+
+  is(getState().allocations.recording, false);
+  const recordingCheckbox = doc.getElementById("record-allocation-stacks-checkbox");
+  EventUtils.synthesizeMouseAtCenter(recordingCheckbox, {}, panel.panelWin);
+  is(getState().allocations.recording, true);
+
+  const nameElems = [...doc.querySelectorAll(".heap-tree-item-field.heap-tree-item-name")];
+  is(nameElems.length, 4, "Should get 4 items, one for each coarse type");
+  ok(nameElems.some(e => e.textContent.trim() === "objects"), "One for coarse type 'objects'");
+  ok(nameElems.some(e => e.textContent.trim() === "scripts"), "One for coarse type 'scripts'");
+  ok(nameElems.some(e => e.textContent.trim() === "strings"), "One for coarse type 'strings'");
+  ok(nameElems.some(e => e.textContent.trim() === "other"), "One for coarse type 'other'");
+
+  for (let e of nameElems) {
+    is(e.style.marginLeft, "0px",
+       "None of the elements should be an indented/expanded child");
+  }
+});
new file mode 100644
--- /dev/null
+++ b/devtools/client/memory/test/unit/test_action-filter-01.js
@@ -0,0 +1,23 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test setting the filter string.
+
+let { setFilterString } = require("devtools/client/memory/actions/filter");
+
+function run_test() {
+  run_next_test();
+}
+
+add_task(function *() {
+  let store = Store();
+  const { getState, dispatch } = store;
+
+  equal(getState().filter, null, "no filter by default");
+
+  dispatch(setFilterString("my filter"));
+  equal(getState().filter, "my filter", "now we have the expected filter");
+
+  dispatch(setFilterString(""));
+  equal(getState().filter, null, "no filter again");
+});
new file mode 100644
--- /dev/null
+++ b/devtools/client/memory/test/unit/test_action-filter-02.js
@@ -0,0 +1,64 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test that changing filter state properly refreshes the selected census.
+
+let { breakdowns, snapshotState: states } = require("devtools/client/memory/constants");
+let { setFilterStringAndRefresh } = require("devtools/client/memory/actions/filter");
+let { takeSnapshotAndCensus, selectSnapshotAndRefresh } = require("devtools/client/memory/actions/snapshot");
+
+function run_test() {
+  run_next_test();
+}
+
+add_task(function *() {
+  let front = new StubbedMemoryFront();
+  let heapWorker = new HeapAnalysesClient();
+  yield front.attach();
+  let store = Store();
+  let { getState, dispatch } = store;
+
+  equal(getState().filter, null, "no filter by default");
+
+  dispatch(takeSnapshotAndCensus(front, heapWorker));
+  dispatch(takeSnapshotAndCensus(front, heapWorker));
+  dispatch(takeSnapshotAndCensus(front, heapWorker));
+
+  yield waitUntilSnapshotState(store, [states.SAVED_CENSUS,
+                                       states.SAVED_CENSUS,
+                                       states.SAVED_CENSUS]);
+  ok(true, "saved 3 snapshots and took a census of each of them");
+
+  dispatch(setFilterStringAndRefresh("str", heapWorker));
+  yield waitUntilSnapshotState(store, [states.SAVED_CENSUS,
+                                       states.SAVED_CENSUS,
+                                       states.SAVING_CENSUS]);
+  ok(true, "setting filter string should recompute the selected snapshot's census");
+
+  equal(getState().filter, "str", "now inverted");
+
+  yield waitUntilSnapshotState(store, [states.SAVED_CENSUS,
+                                       states.SAVED_CENSUS,
+                                       states.SAVED_CENSUS]);
+
+  equal(getState().snapshots[0].filter, null);
+  equal(getState().snapshots[1].filter, null);
+  equal(getState().snapshots[2].filter, "str");
+
+  dispatch(selectSnapshotAndRefresh(heapWorker, getState().snapshots[1]));
+  yield waitUntilSnapshotState(store, [states.SAVED_CENSUS,
+                                       states.SAVING_CENSUS,
+                                       states.SAVED_CENSUS]);
+  ok(true, "selecting non-inverted census should trigger a recompute");
+
+  yield waitUntilSnapshotState(store, [states.SAVED_CENSUS,
+                                       states.SAVED_CENSUS,
+                                       states.SAVED_CENSUS]);
+
+  equal(getState().snapshots[0].filter, null);
+  equal(getState().snapshots[1].filter, "str");
+  equal(getState().snapshots[2].filter, "str");
+
+  heapWorker.destroy();
+  yield front.detach();
+});
new file mode 100644
--- /dev/null
+++ b/devtools/client/memory/test/unit/test_action-filter-03.js
@@ -0,0 +1,46 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test that changing filter state in the middle of taking a snapshot results in
+// the properly fitered census.
+
+let { snapshotState: states } = require("devtools/client/memory/constants");
+let { setFilterString, setFilterStringAndRefresh } = require("devtools/client/memory/actions/filter");
+let { takeSnapshotAndCensus, selectSnapshotAndRefresh } = require("devtools/client/memory/actions/snapshot");
+
+function run_test() {
+  run_next_test();
+}
+
+add_task(function *() {
+  let front = new StubbedMemoryFront();
+  let heapWorker = new HeapAnalysesClient();
+  yield front.attach();
+  let store = Store();
+  let { getState, dispatch } = store;
+
+  dispatch(takeSnapshotAndCensus(front, heapWorker));
+  yield waitUntilSnapshotState(store, [states.SAVING]);
+
+  dispatch(setFilterString("str"));
+
+  yield waitUntilSnapshotState(store, [states.SAVED_CENSUS]);
+  equal(getState().filter, "str",
+        "should want filtered trees");
+  equal(getState().snapshots[0].filter, "str",
+        "snapshot-we-were-in-the-middle-of-saving's census should be filtered");
+
+  dispatch(setFilterStringAndRefresh("", heapWorker));
+  yield waitUntilSnapshotState(store, [states.SAVING_CENSUS]);
+  ok(true, "changing filter string retriggers census");
+  ok(!getState().filter, "no longer filtering");
+
+  dispatch(setFilterString("obj"));
+  yield waitUntilSnapshotState(store, [states.SAVED_CENSUS]);
+  equal(getState().filter, "obj", "filtering for obj now");
+  equal(getState().snapshots[0].filter, "obj",
+        "census-we-were-in-the-middle-of-recomputing should be filtered again");
+
+  heapWorker.destroy();
+  yield front.detach();
+});
--- a/devtools/client/memory/test/unit/xpcshell.ini
+++ b/devtools/client/memory/test/unit/xpcshell.ini
@@ -1,20 +1,23 @@
 [DEFAULT]
 tags = devtools
 head = head.js
 tail =
 firefox-appdir = browser
 skip-if = toolkit == 'android' || toolkit == 'gonk'
 
-[test_action-toggle-inverted.js]
-[test_action-toggle-inverted-and-refresh-01.js]
-[test_action-toggle-inverted-and-refresh-02.js]
-[test_action-toggle-recording-allocations.js]
+[test_action-filter-01.js]
+[test_action-filter-02.js]
+[test_action-filter-03.js]
 [test_action-select-snapshot.js]
 [test_action-set-breakdown.js]
 [test_action-set-breakdown-and-refresh-01.js]
 [test_action-set-breakdown-and-refresh-02.js]
 [test_action-take-census.js]
 [test_action-take-snapshot.js]
 [test_action-take-snapshot-and-census.js]
+[test_action-toggle-inverted.js]
+[test_action-toggle-inverted-and-refresh-01.js]
+[test_action-toggle-inverted-and-refresh-02.js]
+[test_action-toggle-recording-allocations.js]
 [test_utils.js]
 [test_utils-get-snapshot-totals.js]
--- a/devtools/client/memory/utils.js
+++ b/devtools/client/memory/utils.js
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const { Cu } = require("chrome");
 
 Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm");
-const STRINGS_URI = "chrome://browser/locale/devtools/memory.properties"
+const STRINGS_URI = "chrome://devtools/locale/memory.properties"
 const L10N = exports.L10N = new ViewHelpers.L10N(STRINGS_URI);
 
 const { URL } = require("sdk/url");
 const { assert } = require("devtools/shared/DevToolsUtils");
 const { Preferences } = require("resource://gre/modules/Preferences.jsm");
 const CUSTOM_BREAKDOWN_PREF = "devtools.memory.custom-breakdowns";
 const DevToolsUtils = require("devtools/shared/DevToolsUtils");
 const { snapshotState: states, breakdowns } = require("./constants");
--- a/devtools/client/moz.build
+++ b/devtools/client/moz.build
@@ -13,16 +13,17 @@ DIRS += [
     'commandline',
     'debugger',
     'eyedropper',
     'fontinspector',
     'framework',
     'inspector',
     'jsonview',
     'layoutview',
+    'locales',
     'markupview',
     'memory',
     'netmonitor',
     'performance',
     'preferences',
     'projecteditor',
     'promisedebugger',
     'responsivedesign',
--- a/devtools/client/netmonitor/har/har-builder.js
+++ b/devtools/client/netmonitor/har/har-builder.js
@@ -10,17 +10,17 @@ const { Services } = Cu.import("resource
 loader.lazyImporter(this, "ViewHelpers", "resource://devtools/client/shared/widgets/ViewHelpers.jsm");
 loader.lazyRequireGetter(this, "NetworkHelper", "devtools/shared/webconsole/network-helper");
 
 loader.lazyGetter(this, "appInfo", () => {
   return Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
 });
 
 loader.lazyGetter(this, "L10N", () => {
-  return new ViewHelpers.L10N("chrome://browser/locale/devtools/har.properties");
+  return new ViewHelpers.L10N("chrome://devtools/locale/har.properties");
 });
 
 const HAR_VERSION = "1.1";
 
 /**
  * This object is responsible for building HAR file. See HAR spec:
  * https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/HAR/Overview.html
  * http://www.softwareishard.com/blog/har-12-spec/
--- a/devtools/client/netmonitor/netmonitor-controller.js
+++ b/devtools/client/netmonitor/netmonitor-controller.js
@@ -2,17 +2,17 @@
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.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";
 
 var { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
-const NET_STRINGS_URI = "chrome://browser/locale/devtools/netmonitor.properties";
+const NET_STRINGS_URI = "chrome://devtools/locale/netmonitor.properties";
 const PKI_STRINGS_URI = "chrome://pippki/locale/pippki.properties";
 const LISTENERS = [ "NetworkActivity" ];
 const NET_PREFS = { "NetworkMonitor.saveRequestAndResponseBodies": true };
 
 // The panel's window global is an EventEmitter firing the following events:
 const EVENTS = {
   // When the monitored target begins and finishes navigating.
   TARGET_WILL_NAVIGATE: "NetMonitor:TargetWillNavigate",
--- a/devtools/client/netmonitor/netmonitor-view.js
+++ b/devtools/client/netmonitor/netmonitor-view.js
@@ -737,17 +737,17 @@ RequestsMenuView.prototype = Heritage.ex
   /**
    * Copy image as data uri.
    */
   copyImageAsDataUri: function() {
     let selected = this.selectedItem.attachment;
     let { mimeType, text, encoding } = selected.responseContent.content;
 
     gNetwork.getString(text).then(aString => {
-      let data = "data:" + mimeType + ";" + encoding + "," + aString;
+      let data = formDataURI(mimeType, encoding, aString);
       clipboardHelper.copyString(data);
     });
   },
 
   /**
    * Copy response data as a string.
    */
   copyResponse: function() {
@@ -1717,17 +1717,17 @@ RequestsMenuView.prototype = Heritage.ex
       }
       case "responseContent": {
         let { mimeType } = aItem.attachment;
 
         if (mimeType.includes("image/")) {
           let { text, encoding } = aValue.content;
           let responseBody = yield gNetwork.getString(text);
           let node = $(".requests-menu-icon", aItem.target);
-          node.src = "data:" + mimeType + ";" + encoding + "," + responseBody;
+          node.src = formDataURI(mimeType, encoding, responseBody);
           node.setAttribute("type", "thumbnail");
           node.removeAttribute("hidden");
 
           window.emit(EVENTS.RESPONSE_IMAGE_THUMBNAIL_DISPLAYED);
         }
         break;
       }
       case "totalTime": {
@@ -2009,17 +2009,17 @@ RequestsMenuView.prototype = Heritage.ex
     let { mimeType, text, encoding } = hovered.responseContent.content;
 
     if (mimeType && mimeType.includes("image/") && (
       aTarget.classList.contains("requests-menu-icon") ||
       aTarget.classList.contains("requests-menu-file")))
     {
       return gNetwork.getString(text).then(aString => {
         let anchor = $(".requests-menu-icon", requestItem.target);
-        let src = "data:" + mimeType + ";" + encoding + "," + aString;
+        let src = formDataURI(mimeType, encoding, aString);
         aTooltip.setImageContent(src, { maxDim: REQUESTS_TOOLTIP_IMAGE_MAX_DIM });
         return anchor;
       });
     }
   },
 
   /**
    * A handler that opens the security tab in the details view if secure or
@@ -2448,16 +2448,17 @@ NetworkDetailsView.prototype = {
       }));
     this._cookies = new VariablesView($("#all-cookies"),
       Heritage.extend(GENERIC_VARIABLES_VIEW_SETTINGS, {
         emptyText: L10N.getStr("cookiesEmptyText"),
         searchPlaceholder: L10N.getStr("cookiesFilterText")
       }));
     this._params = new VariablesView($("#request-params"),
       Heritage.extend(GENERIC_VARIABLES_VIEW_SETTINGS, {
+        onlyEnumVisible: true,
         emptyText: L10N.getStr("paramsEmptyText"),
         searchPlaceholder: L10N.getStr("paramsFilterText")
       }));
     this._json = new VariablesView($("#response-content-json"),
       Heritage.extend(GENERIC_VARIABLES_VIEW_SETTINGS, {
         onlyEnumVisible: true,
         searchPlaceholder: L10N.getStr("jsonFilterText")
       }));
@@ -2836,39 +2837,43 @@ NetworkDetailsView.prototype = {
       aHeaders, aUploadHeaders, aPostData);
 
     // Handle urlencoded form data sections (e.g. "?foo=bar&baz=42").
     if (formDataSections.length > 0) {
       formDataSections.forEach(section => {
         this._addParams(this._paramsFormData, section);
       });
     }
-    // Handle actual forms ("multipart/form-data" content type).
+    // Handle JSON and actual forms ("multipart/form-data" content type).
     else {
-      // This is really awkward, but hey, it works. Let's show an empty
-      // scope in the params view and place the source editor containing
-      // the raw post data directly underneath.
-      $("#request-params-box").removeAttribute("flex");
-      let paramsScope = this._params.addScope(this._paramsPostPayload);
-      paramsScope.expanded = true;
-      paramsScope.locked = true;
-
-      $("#request-post-data-textarea-box").hidden = false;
-      let editor = yield NetMonitorView.editor("#request-post-data-textarea");
       let postDataLongString = aPostData.postData.text;
       let postData = yield gNetwork.getString(postDataLongString);
-
-      // Most POST bodies are usually JSON, so they can be neatly
-      // syntax highlighted as JS. Otheriwse, fall back to plain text.
+      let jsonVal = null;
       try {
-        JSON.parse(postData);
-        editor.setMode(Editor.modes.js);
-      } catch (e) {
+        jsonVal = JSON.parse(postData);
+      } catch (ex) { }
+      if (jsonVal) {
+        let jsonScopeName = L10N.getStr("jsonScopeName");
+        let jsonVar = { label: jsonScopeName, rawObject: jsonVal };
+        let jsonScope = this._params.addScope(jsonScopeName);
+        jsonScope.expanded = true;
+        let jsonItem = jsonScope.addItem("", { enumerable: true });
+        jsonItem.populate(jsonVal, { sorted: true });
+      } else {
+        // This is really awkward, but hey, it works. Let's show an empty
+        // scope in the params view and place the source editor containing
+        // the raw post data directly underneath.
+        $("#request-params-box").removeAttribute("flex");
+        let paramsScope = this._params.addScope(this._paramsPostPayload);
+        paramsScope.expanded = true;
+        paramsScope.locked = true;
+
+        $("#request-post-data-textarea-box").hidden = false;
+        let editor = yield NetMonitorView.editor("#request-post-data-textarea");
         editor.setMode(Editor.modes.text);
-      } finally {
         editor.setText(postData);
       }
     }
 
     window.emit(EVENTS.REQUEST_POST_PARAMS_DISPLAYED);
   }),
 
   /**
@@ -2965,23 +2970,22 @@ NetworkDetailsView.prototype = {
       }
     }
     // Handle images.
     else if (mimeType.includes("image/")) {
       $("#response-content-image-box").setAttribute("align", "center");
       $("#response-content-image-box").setAttribute("pack", "center");
       $("#response-content-image-box").hidden = false;
       $("#response-content-image").src =
-        "data:" + mimeType + ";" + encoding + "," + responseBody;
+        formDataURI(mimeType, encoding, responseBody);
 
       // Immediately display additional information about the image:
       // file name, mime type and encoding.
       $("#response-content-image-name-value").setAttribute("value", NetworkHelper.nsIURL(aUrl).fileName);
       $("#response-content-image-mime-value").setAttribute("value", mimeType);
-      $("#response-content-image-encoding-value").setAttribute("value", encoding);
 
       // Wait for the image to load in order to display the width and height.
       $("#response-content-image").onload = e => {
         // XUL images are majestic so they don't bother storing their dimensions
         // in width and height attributes like the rest of the folk. Hack around
         // this by getting the bounding client rect and subtracting the margins.
         let { width, height } = e.target.getBoundingClientRect();
         let dimensions = (width - 2) + " \u00D7 " + (height - 2);
@@ -3539,16 +3543,33 @@ function getKeyWithEvent(callback) {
     var key = event.target.getAttribute("data-key");
     if (key) {
       callback.call(null, key);
     }
   };
 }
 
 /**
+ * Form a data: URI given a mime type, encoding, and some text.
+ *
+ * @param {String} mimeType the mime type
+ * @param {String} encoding the encoding to use; if not set, the
+ *        text will be base64-encoded.
+ * @param {String} text the text of the URI.
+ * @return {String} a data: URI
+ */
+function formDataURI(mimeType, encoding, text) {
+  if (!encoding) {
+    encoding = "base64";
+    text = btoa(text);
+  }
+  return "data:" + mimeType + ";" + encoding + "," + text;
+}
+
+/**
  * Preliminary setup for the NetMonitorView object.
  */
 NetMonitorView.Toolbar = new ToolbarView();
 NetMonitorView.RequestsMenu = new RequestsMenuView();
 NetMonitorView.Sidebar = new SidebarView();
 NetMonitorView.CustomRequest = new CustomRequestView();
 NetMonitorView.NetworkDetails = new NetworkDetailsView();
 NetMonitorView.PerformanceStatistics = new PerformanceStatisticsView();
--- a/devtools/client/netmonitor/netmonitor.xul
+++ b/devtools/client/netmonitor/netmonitor.xul
@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/netmonitor/netmonitor.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/netmonitor.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/netmonitor.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % netmonitorDTD SYSTEM "chrome://browser/locale/devtools/netmonitor.dtd">
+  <!ENTITY % netmonitorDTD SYSTEM "chrome://devtools/locale/netmonitor.dtd">
   %netmonitorDTD;
   <!ENTITY % certManagerDTD SYSTEM "chrome://pippki/locale/certManager.dtd">
   %certManagerDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         xmlns:html="http://www.w3.org/1999/xhtml">
 
@@ -472,24 +472,16 @@
                     <hbox>
                       <label class="plain tabpanel-summary-label"
                              value="&netmonitorUI.response.mime;"/>
                       <label id="response-content-image-mime-value"
                              class="plain tabpanel-summary-value devtools-monospace"
                              crop="end"
                              flex="1"/>
                     </hbox>
-                    <hbox>
-                      <label class="plain tabpanel-summary-label"
-                             value="&netmonitorUI.response.encoding;"/>
-                      <label id="response-content-image-encoding-value"
-                             class="plain tabpanel-summary-value devtools-monospace"
-                             crop="end"
-                             flex="1"/>
-                    </hbox>
                   </vbox>
                 </vbox>
               </tabpanel>
               <tabpanel id="timings-tabpanel"
                         class="tabpanel-content">
                 <vbox flex="1">
                   <hbox id="timings-summary-blocked"
                         class="tabpanel-summary-container"
--- a/devtools/client/netmonitor/test/browser.ini
+++ b/devtools/client/netmonitor/test/browser.ini
@@ -1,12 +1,13 @@
 [DEFAULT]
 tags = devtools
 subsuite = devtools
 support-files =
+  dropmarker.svg
   head.js
   html_content-type-test-page.html
   html_content-type-without-cache-test-page.html
   html_custom-get-page.html
   html_single-get-page.html
   html_cyrillic-test-page.html
   html_filter-test-page.html
   html_infinite-get-page.html
@@ -50,16 +51,17 @@ skip-if= buildapp == 'mulet'
 [browser_net_charts-05.js]
 [browser_net_charts-06.js]
 [browser_net_charts-07.js]
 [browser_net_clear.js]
 [browser_net_complex-params.js]
 [browser_net_content-type.js]
 [browser_net_curl-utils.js]
 [browser_net_copy_image_as_data_uri.js]
+[browser_net_copy_svg_image_as_data_uri.js]
 [browser_net_copy_url.js]
 [browser_net_copy_params.js]
 [browser_net_copy_response.js]
 [browser_net_copy_headers.js]
 [browser_net_copy_as_curl.js]
 skip-if = e10s # Bug 1091596
 [browser_net_cyrillic-01.js]
 [browser_net_cyrillic-02.js]
--- a/devtools/client/netmonitor/test/browser_net_complex-params.js
+++ b/devtools/client/netmonitor/test/browser_net_complex-params.js
@@ -98,56 +98,69 @@ function test() {
       is(formDataScope.querySelectorAll(".variables-view-variable .value")[0].getAttribute("value"),
         aFormDataParamValue,
         "The first form data param value was incorrect.");
     }
 
     function testParamsTab2(
       aQueryStringParamName, aQueryStringParamValue, aRequestPayload, aEditorMode)
     {
+      let isJSON = aEditorMode == "js";
       let tab = document.querySelectorAll("#details-pane tab")[2];
       let tabpanel = document.querySelectorAll("#details-pane tabpanel")[2];
 
       is(tabpanel.querySelectorAll(".variables-view-scope").length, 2,
         "The number of param scopes displayed in this tabpanel is incorrect.");
-      is(tabpanel.querySelectorAll(".variable-or-property").length, 1,
+      is(tabpanel.querySelectorAll(".variable-or-property").length, isJSON ? 4 : 1,
         "The number of param values displayed in this tabpanel is incorrect.");
       is(tabpanel.querySelectorAll(".variables-view-empty-notice").length, 0,
         "The empty notice should not be displayed in this tabpanel.");
 
       is(tabpanel.querySelector("#request-params-box")
         .hasAttribute("hidden"), false,
         "The request params box should not be hidden.");
       is(tabpanel.querySelector("#request-post-data-textarea-box")
-        .hasAttribute("hidden"), false,
-        "The request post data textarea box should not be hidden.");
+        .hasAttribute("hidden"), isJSON,
+        "The request post data textarea box should be hidden.");
 
       let paramsScope = tabpanel.querySelectorAll(".variables-view-scope")[0];
       let payloadScope = tabpanel.querySelectorAll(".variables-view-scope")[1];
 
       is(paramsScope.querySelector(".name").getAttribute("value"),
         L10N.getStr("paramsQueryString"),
         "The params scope doesn't have the correct title.");
       is(payloadScope.querySelector(".name").getAttribute("value"),
-        L10N.getStr("paramsPostPayload"),
+        isJSON ? L10N.getStr("jsonScopeName") : L10N.getStr("paramsPostPayload"),
         "The request payload scope doesn't have the correct title.");
 
       is(paramsScope.querySelectorAll(".variables-view-variable .name")[0].getAttribute("value"),
         aQueryStringParamName,
         "The first query string param name was incorrect.");
       is(paramsScope.querySelectorAll(".variables-view-variable .value")[0].getAttribute("value"),
         aQueryStringParamValue,
         "The first query string param value was incorrect.");
 
-      return NetMonitorView.editor("#request-post-data-textarea").then((aEditor) => {
-        is(aEditor.getText(), aRequestPayload,
-          "The text shown in the source editor is incorrect.");
-        is(aEditor.getMode(), Editor.modes[aEditorMode],
-          "The mode active in the source editor is incorrect.");
-      });
+      if (isJSON) {
+        let requestPayloadObject = JSON.parse(aRequestPayload);
+        let requestPairs = Object.keys(requestPayloadObject).map(k => [k, requestPayloadObject[k]]);
+        let displayedNames = payloadScope.querySelectorAll(".variables-view-property.variable-or-property .name");
+        let displayedValues = payloadScope.querySelectorAll(".variables-view-property.variable-or-property .value");
+        for (let i = 0; i < requestPairs.length; i++) {
+          let [requestPayloadName, requestPayloadValue] = requestPairs[i];
+          is(requestPayloadName, displayedNames[i].getAttribute("value"), "JSON property name " + i + " should be displayed correctly");
+          is('"' + requestPayloadValue + '"', displayedValues[i].getAttribute("value"), "JSON property value " + i + " should be displayed correctly");
+        }
+      } else {
+        return NetMonitorView.editor("#request-post-data-textarea").then((aEditor) => {
+          is(aEditor.getText(), aRequestPayload,
+            "The text shown in the source editor is incorrect.");
+          is(aEditor.getMode(), Editor.modes[aEditorMode],
+            "The mode active in the source editor is incorrect.");
+        });
+      }
     }
 
     function testParamsTab3(aQueryStringParamName, aQueryStringParamValue) {
       let tab = document.querySelectorAll("#details-pane tab")[2];
       let tabpanel = document.querySelectorAll("#details-pane tabpanel")[2];
 
       is(tabpanel.querySelectorAll(".variables-view-scope").length, 0,
         "The number of param scopes displayed in this tabpanel is incorrect.");
--- a/devtools/client/netmonitor/test/browser_net_content-type.js
+++ b/devtools/client/netmonitor/test/browser_net_content-type.js
@@ -62,17 +62,17 @@ function test() {
         });
       verifyRequestItemTarget(RequestsMenu.getItemAtIndex(5),
         "GET", TEST_IMAGE, {
           fuzzyUrl: true,
           status: 200,
           statusText: "OK",
           type: "png",
           fullMimeType: "image/png",
-          size: L10N.getFormatStrWithNumbers("networkMenu.sizeKB", 0.76),
+          size: L10N.getFormatStrWithNumbers("networkMenu.sizeKB", 0.57),
           time: true
         });
       verifyRequestItemTarget(RequestsMenu.getItemAtIndex(6),
         "GET", CONTENT_TYPE_SJS + "?fmt=gzip", {
           status: 200,
           statusText: "OK",
           type: "plain",
           fullMimeType: "text/plain",
@@ -211,19 +211,16 @@ function test() {
               imageNode.removeEventListener("load", onLoad);
 
               is(tabpanel.querySelector("#response-content-image-name-value")
                 .getAttribute("value"), "test-image.png",
                 "The image name info isn't correct.");
               is(tabpanel.querySelector("#response-content-image-mime-value")
                 .getAttribute("value"), "image/png",
                 "The image mime info isn't correct.");
-              is(tabpanel.querySelector("#response-content-image-encoding-value")
-                .getAttribute("value"), "base64",
-                "The image encoding info isn't correct.");
               is(tabpanel.querySelector("#response-content-image-dimensions-value")
                 .getAttribute("value"), "16" + " \u00D7 " + "16",
                 "The image dimensions info isn't correct.");
 
               deferred.resolve();
             });
 
             return deferred.promise;
new file mode 100644
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_copy_svg_image_as_data_uri.js
@@ -0,0 +1,41 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Tests if copying an image as data uri works.
+ */
+
+function test() {
+  const SVG_URL = EXAMPLE_URL + "dropmarker.svg";
+  initNetMonitor(CURL_URL).then(([aTab, aDebuggee, aMonitor]) => {
+    info("Starting test... ");
+
+    let { NetMonitorView } = aMonitor.panelWin;
+    let { RequestsMenu } = NetMonitorView;
+
+    RequestsMenu.lazyUpdate = false;
+
+    waitForNetworkEvents(aMonitor, 1).then(() => {
+      let requestItem = RequestsMenu.getItemAtIndex(0);
+      RequestsMenu.selectedItem = requestItem;
+
+      waitForClipboard(function check(text) {
+        return text.startsWith("data:") && !/undefined/.test(text);
+      }, function setup() {
+        RequestsMenu.copyImageAsDataUri();
+      }, function onSuccess() {
+        ok(true, "Clipboard contains a valid data: URI");
+        cleanUp();
+      }, function onFailure() {
+        ok(false, "Clipboard contains an invalid data: URI");
+        cleanUp();
+      });
+    });
+
+    aDebuggee.performRequest(SVG_URL);
+
+    function cleanUp(){
+      teardown(aMonitor).then(finish);
+    }
+  });
+}
--- a/devtools/client/netmonitor/test/browser_net_prefs-and-l10n.js
+++ b/devtools/client/netmonitor/test/browser_net_prefs-and-l10n.js
@@ -15,17 +15,17 @@ function test() {
       "Should have a preferences object available on the panel window.");
 
     function testL10N() {
       let { L10N } = aMonitor.panelWin;
 
       ok(L10N.stringBundle,
         "The localization object should have a string bundle available.");
 
-      let bundleName = "chrome://browser/locale/devtools/netmonitor.properties";
+      let bundleName = "chrome://devtools/locale/netmonitor.properties";
       let stringBundle = Services.strings.createBundle(bundleName);
 
       is(L10N.getStr("netmonitor.label"),
         stringBundle.GetStringFromName("netmonitor.label"),
         "The getStr() method didn't return the expected string.");
 
       is(L10N.getFormatStr("networkMenu.totalMS", "foo"),
         stringBundle.formatStringFromName("networkMenu.totalMS", ["foo"], 1),
new file mode 100644
--- /dev/null
+++ b/devtools/client/netmonitor/test/dropmarker.svg
@@ -0,0 +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="8" height="4" viewBox="0 0 8 4">
+  <polygon points="0,0 4,4 8,0" fill="#b6babf"/>
+</svg>
--- a/devtools/client/performance/modules/global.js
+++ b/devtools/client/performance/modules/global.js
@@ -4,18 +4,18 @@
 "use strict";
 
 const { ViewHelpers } = require("resource://devtools/client/shared/widgets/ViewHelpers.jsm");
 
 /**
  * Localization convenience methods.
  */
 const L10N = new ViewHelpers.MultiL10N([
-  "chrome://browser/locale/devtools/markers.properties",
-  "chrome://browser/locale/devtools/performance.properties"
+  "chrome://devtools/locale/markers.properties",
+  "chrome://devtools/locale/performance.properties"
 ]);
 
 /**
  * A list of preferences for this tool. The values automatically update
  * if somebody edits edits about:config or the prefs change somewhere else.
  */
 const PREFS = new ViewHelpers.Prefs("devtools.performance", {
   "show-triggers-for-gc-types": ["Char", "ui.show-triggers-for-gc-types"],
--- a/devtools/client/performance/performance.xul
+++ b/devtools/client/performance/performance.xul
@@ -1,19 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/performance.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/performance.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % performanceDTD SYSTEM "chrome://browser/locale/devtools/performance.dtd">
+  <!ENTITY % performanceDTD SYSTEM "chrome://devtools/locale/performance.dtd">
   %performanceDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <script src="chrome://devtools/content/shared/theme-switching.js"/>
   <script type="application/javascript" src="performance-controller.js"/>
   <script type="application/javascript" src="performance-view.js"/>
   <script type="application/javascript" src="views/overview.js"/>
--- a/devtools/client/projecteditor/chrome/content/projecteditor-loader.js
+++ b/devtools/client/projecteditor/chrome/content/projecteditor-loader.js
@@ -3,17 +3,17 @@ const {require} = Cu.import("resource://
 const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
 const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {});
 const promise = require("promise");
 const ProjectEditor = require("devtools/client/projecteditor/lib/projecteditor");
 
 const SAMPLE_PATH = buildTempDirectoryStructure();
 const SAMPLE_NAME = "DevTools Content Application Name";
 const SAMPLE_PROJECT_URL = "data:text/html;charset=utf-8,<body><h1>Project Overview</h1></body>";
-const SAMPLE_ICON = "chrome://devtools/skin/themes/images/tool-debugger.svg";
+const SAMPLE_ICON = "chrome://devtools/skin/images/tool-debugger.svg";
 
 /**
  * Create a workspace for working on projecteditor, available at
  * chrome://devtools/content/projecteditor/chrome/content/projecteditor-loader.xul.
  * This emulates the integration points that the app manager uses.
  */
 var appManagerEditor;
 
--- a/devtools/client/projecteditor/chrome/content/projecteditor-loader.xul
+++ b/devtools/client/projecteditor/chrome/content/projecteditor-loader.xul
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE window [
-<!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd" >
+<!ENTITY % toolboxDTD SYSTEM "chrome://devtools/locale/toolbox.dtd" >
  %toolboxDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
 <script type="application/javascript;version=1.8" src="projecteditor-loader.js"></script>
 
   <commandset id="toolbox-commandset">
--- a/devtools/client/projecteditor/chrome/content/projecteditor.xul
+++ b/devtools/client/projecteditor/chrome/content/projecteditor.xul
@@ -1,27 +1,27 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<?xml-stylesheet href="chrome://devtools/skin/themes/light-theme.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/projecteditor/projecteditor.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/light-theme.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/projecteditor/projecteditor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/debugger/debugger.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/markupview/markup-view.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/markup-view.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/markup-view.css" type="text/css"?>
 
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 
 <!DOCTYPE window [
-<!ENTITY % scratchpadDTD SYSTEM "chrome://browser/locale/devtools/scratchpad.dtd" >
+<!ENTITY % scratchpadDTD SYSTEM "chrome://devtools/locale/scratchpad.dtd" >
  %scratchpadDTD;
 <!ENTITY % editMenuStrings SYSTEM "chrome://global/locale/editMenuOverlay.dtd">
 %editMenuStrings;
-<!ENTITY % sourceEditorStrings SYSTEM "chrome://browser/locale/devtools/sourceeditor.dtd">
+<!ENTITY % sourceEditorStrings SYSTEM "chrome://devtools/locale/sourceeditor.dtd">
 %sourceEditorStrings;
 ]>
 
 <page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" class="theme-body">
 
   <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
 
   <commandset id="projecteditor-commandset" />
--- a/devtools/client/projecteditor/lib/helpers/l10n.js
+++ b/devtools/client/projecteditor/lib/helpers/l10n.js
@@ -5,17 +5,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /**
  * This file contains helper functions for internationalizing projecteditor strings
  */
 
 const { Cu, Cc, Ci } = require("chrome");
 const { ViewHelpers } = Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm", {});
-const ITCHPAD_STRINGS_URI = "chrome://browser/locale/devtools/projecteditor.properties";
+const ITCHPAD_STRINGS_URI = "chrome://devtools/locale/projecteditor.properties";
 const L10N = new ViewHelpers.L10N(ITCHPAD_STRINGS_URI).stringBundle;
 
 function getLocalizedString (name) {
   try {
     return L10N.GetStringFromName(name);
   } catch (ex) {
     console.log("Error reading '" + name + "'");
     throw new Error("l10n error with " + name);
--- a/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js
+++ b/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js
@@ -1,18 +1,18 @@
 const { Cu } = require("chrome");
 const { Class } = require("sdk/core/heritage");
 const { EventTarget } = require("sdk/event/target");
 const { emit } = require("sdk/event/core");
 const promise = require("promise");
 var { registerPlugin, Plugin } = require("devtools/client/projecteditor/lib/plugins/core");
 const { AppProjectEditor } = require("./app-project-editor");
-const OPTION_URL = "chrome://devtools/skin/themes/images/tool-options.svg";
+const OPTION_URL = "chrome://devtools/skin/images/tool-options.svg";
 const {Services} = Cu.import("resource://gre/modules/Services.jsm");
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 var AppManagerRenderer = Class({
   extends: Plugin,
 
   isAppManagerProject: function() {
     return !!this.host.project.appManagerOpts;
   },
   editorForResource: function(resource) {
--- a/devtools/client/projecteditor/test/browser_projecteditor_app_options.js
+++ b/devtools/client/projecteditor/test/browser_projecteditor_app_options.js
@@ -15,73 +15,73 @@ add_task(function*() {
   projecteditor.project.once("resource-added", () => {
     info ("A resource has been added");
     resourceBeenAdded.resolve();
   });
 
   info ("About to set project to: " + TEMP_PATH);
   yield projecteditor.setProjectToAppPath(TEMP_PATH, {
     name: "Test",
-    iconUrl: "chrome://devtools/skin/themes/images/tool-options.svg",
+    iconUrl: "chrome://devtools/skin/images/tool-options.svg",
     projectOverviewURL: SAMPLE_WEBAPP_URL
   });
 
   info ("Making sure a resource has been added before continuing");
   yield resourceBeenAdded.promise;
 
   info ("From now on, if a resource is added it should fail");
   projecteditor.project.on("resource-added", failIfResourceAdded);
 
   info ("Getting ahold and validating the project header DOM");
   let header = projecteditor.document.querySelector(".entry-group-title");
   let image = header.querySelector(".project-image");
   let nameLabel = header.querySelector(".project-name-label");
   let statusElement = header.querySelector(".project-status");
   is (statusElement.getAttribute("status"), "unknown", "The status starts out as unknown.");
   is (nameLabel.textContent, "Test", "The name label has been set correctly");
-  is (image.getAttribute("src"), "chrome://devtools/skin/themes/images/tool-options.svg", "The icon has been set correctly");
+  is (image.getAttribute("src"), "chrome://devtools/skin/images/tool-options.svg", "The icon has been set correctly");
 
   info ("About to set project with new options.");
   yield projecteditor.setProjectToAppPath(TEMP_PATH, {
     name: "Test2",
-    iconUrl: "chrome://devtools/skin/themes/images/tool-inspector.svg",
+    iconUrl: "chrome://devtools/skin/images/tool-inspector.svg",
     projectOverviewURL: SAMPLE_WEBAPP_URL,
     validationStatus: "error"
   });
 
   info ("Getting ahold of and validating the project header DOM");
   is (statusElement.getAttribute("status"), "error", "The status has been set correctly.");
   is (nameLabel.textContent, "Test2", "The name label has been set correctly");
-  is (image.getAttribute("src"), "chrome://devtools/skin/themes/images/tool-inspector.svg", "The icon has been set correctly");
+  is (image.getAttribute("src"), "chrome://devtools/skin/images/tool-inspector.svg", "The icon has been set correctly");
 
   info ("About to set project with new options.");
   yield projecteditor.setProjectToAppPath(TEMP_PATH, {
     name: "Test3",
-    iconUrl: "chrome://devtools/skin/themes/images/tool-webconsole.svg",
+    iconUrl: "chrome://devtools/skin/images/tool-webconsole.svg",
     projectOverviewURL: SAMPLE_WEBAPP_URL,
     validationStatus: "warning"
   });
 
   info ("Getting ahold of and validating the project header DOM");
   is (statusElement.getAttribute("status"), "warning", "The status has been set correctly.");
   is (nameLabel.textContent, "Test3", "The name label has been set correctly");
-  is (image.getAttribute("src"), "chrome://devtools/skin/themes/images/tool-webconsole.svg", "The icon has been set correctly");
+  is (image.getAttribute("src"), "chrome://devtools/skin/images/tool-webconsole.svg", "The icon has been set correctly");
 
   info ("About to set project with new options.");
   yield projecteditor.setProjectToAppPath(TEMP_PATH, {
     name: "Test4",
-    iconUrl: "chrome://devtools/skin/themes/images/tool-debugger.svg",
+    iconUrl: "chrome://devtools/skin/images/tool-debugger.svg",
     projectOverviewURL: SAMPLE_WEBAPP_URL,
     validationStatus: "valid"
   });
 
   info ("Getting ahold of and validating the project header DOM");
   is (statusElement.getAttribute("status"), "valid", "The status has been set correctly.");
   is (nameLabel.textContent, "Test4", "The name label has been set correctly");
-  is (image.getAttribute("src"), "chrome://devtools/skin/themes/images/tool-debugger.svg", "The icon has been set correctly");
+  is (image.getAttribute("src"), "chrome://devtools/skin/images/tool-debugger.svg", "The icon has been set correctly");
 
   info ("Test finished, cleaning up");
   projecteditor.project.off("resource-added", failIfResourceAdded);
 });
 
 function failIfResourceAdded() {
   ok (false, "A resource has been added, but it shouldn't have been");
 }
--- a/devtools/client/projecteditor/test/head.js
+++ b/devtools/client/projecteditor/test/head.js
@@ -92,17 +92,17 @@ function addProjectEditorTabForTempDirec
     // Bug 1037292 - The test servers sometimes are unable to
     // write to the temporary directory due to locked files
     // or access denied errors.  Try again if this failed.
     info ("Project Editor temp directory creation failed.  Trying again.");
     TEMP_PATH = buildTempDirectoryStructure();
   }
   let customOpts = {
     name: "Test",
-    iconUrl: "chrome://devtools/skin/themes/images/tool-options.svg",
+    iconUrl: "chrome://devtools/skin/images/tool-options.svg",
     projectOverviewURL: SAMPLE_WEBAPP_URL
   };
 
   info ("Adding a project editor tab for editing at: " + TEMP_PATH);
   return addProjectEditorTab(opts).then((projecteditor) => {
     return projecteditor.setProjectToAppPath(TEMP_PATH, customOpts).then(() => {
       return projecteditor;
     });
--- a/devtools/client/promisedebugger/promise-debugger.xhtml
+++ b/devtools/client/promisedebugger/promise-debugger.xhtml
@@ -1,23 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This Source Code Form is subject to the terms of the Mkozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % promisedebuggerDTD SYSTEM "chrome://browser/locale/devtools/promisedebugger.dtd">
+  <!ENTITY % promisedebuggerDTD SYSTEM "chrome://devtools/locale/promisedebugger.dtd">
   %promisedebuggerDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <title>&title;</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/promisedebugger.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/promisedebugger.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
   </head>
   <body class="devtools-monospace" role="application">
     <script type="application/javascript;version=1.8" src="promise-controller.js"></script>
     <script type="application/javascript;version=1.8" src="promise-panel.js"></script>
   </body>
 </html>
--- a/devtools/client/responsivedesign/responsivedesign-child.js
+++ b/devtools/client/responsivedesign/responsivedesign-child.js
@@ -1,15 +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/. */
 
 var Ci = Components.interfaces;
 const gDeviceSizeWasPageSize = docShell.deviceSizeIsPageSize;
-const gFloatingScrollbarsStylesheet = Services.io.newURI("chrome://devtools/skin/themes/floating-scrollbars.css", null, null);
+const gFloatingScrollbarsStylesheet = Services.io.newURI("chrome://devtools/skin/floating-scrollbars.css", null, null);
 var gRequiresFloatingScrollbars;
 
 var active = false;
 
 addMessageListener("ResponsiveMode:Start", startResponsiveMode);
 addMessageListener("ResponsiveMode:Stop", stopResponsiveMode);
 
 function startResponsiveMode({data:data}) {
--- a/devtools/client/responsivedesign/responsivedesign.jsm
+++ b/devtools/client/responsivedesign/responsivedesign.jsm
@@ -30,17 +30,17 @@ const MIN_HEIGHT = 50;
 const MAX_WIDTH = 10000;
 const MAX_HEIGHT = 10000;
 
 const SLOW_RATIO = 6;
 const ROUND_RATIO = 10;
 
 const INPUT_PARSER = /(\d+)[^\d]+(\d+)/;
 
-const SHARED_L10N = new ViewHelpers.L10N("chrome://browser/locale/devtools/shared.properties");
+const SHARED_L10N = new ViewHelpers.L10N("chrome://devtools/locale/shared.properties");
 
 var ActiveTabs = new Map();
 
 this.ResponsiveUIManager = {
   /**
    * Check if the a tab is in a responsive mode.
    * Leave the responsive mode if active,
    * active the responsive mode if not active.
@@ -1013,10 +1013,10 @@ ResponsiveUI.prototype = {
       return !aPreset.custom;
     });
 
     Services.prefs.setCharPref("devtools.responsiveUI.presets", JSON.stringify(registeredPresets));
   },
 }
 
 XPCOMUtils.defineLazyGetter(ResponsiveUI.prototype, "strings", function () {
-  return Services.strings.createBundle("chrome://browser/locale/devtools/responsiveUI.properties");
+  return Services.strings.createBundle("chrome://devtools/locale/responsiveUI.properties");
 });
--- a/devtools/client/scratchpad/scratchpad.js
+++ b/devtools/client/scratchpad/scratchpad.js
@@ -25,17 +25,17 @@ const BUTTON_POSITION_CANCEL     = 1;
 const BUTTON_POSITION_DONT_SAVE  = 2;
 const BUTTON_POSITION_REVERT     = 0;
 const EVAL_FUNCTION_TIMEOUT      = 1000; // milliseconds
 
 const MAXIMUM_FONT_SIZE = 96;
 const MINIMUM_FONT_SIZE = 6;
 const NORMAL_FONT_SIZE = 12;
 
-const SCRATCHPAD_L10N = "chrome://browser/locale/devtools/scratchpad.properties";
+const SCRATCHPAD_L10N = "chrome://devtools/locale/scratchpad.properties";
 const DEVTOOLS_CHROME_ENABLED = "devtools.chrome.enabled";
 const PREF_RECENT_FILES_MAX = "devtools.scratchpad.recentFilesMax";
 const SHOW_LINE_NUMBERS = "devtools.scratchpad.lineNumbers";
 const WRAP_TEXT = "devtools.scratchpad.wrapText";
 const SHOW_TRAILING_SPACE = "devtools.scratchpad.showTrailingSpace";
 const EDITOR_FONT_SIZE = "devtools.scratchpad.editorFontSize";
 const ENABLE_AUTOCOMPLETION = "devtools.scratchpad.enableAutocompletion";
 const TAB_SIZE = "devtools.editor.tabsize";
--- a/devtools/client/scratchpad/scratchpad.xul
+++ b/devtools/client/scratchpad/scratchpad.xul
@@ -1,26 +1,26 @@
 <?xml version="1.0"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE window [
-<!ENTITY % scratchpadDTD SYSTEM "chrome://browser/locale/devtools/scratchpad.dtd" >
+<!ENTITY % scratchpadDTD SYSTEM "chrome://devtools/locale/scratchpad.dtd" >
  %scratchpadDTD;
 <!ENTITY % editMenuStrings SYSTEM "chrome://global/locale/editMenuOverlay.dtd">
 %editMenuStrings;
-<!ENTITY % sourceEditorStrings SYSTEM "chrome://browser/locale/devtools/sourceeditor.dtd">
+<!ENTITY % sourceEditorStrings SYSTEM "chrome://devtools/locale/sourceeditor.dtd">
 %sourceEditorStrings;
 ]>
 
 <?xml-stylesheet href="chrome://global/skin/global.css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/scratchpad.css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css"?>
+<?xml-stylesheet href="chrome://devtools/skin/scratchpad.css"?>
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 
 <window id="main-window"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         title="&window.title;"
         windowtype="devtools:scratchpad"
         macanimationtype="document"
         fullscreenbutton="true"
--- a/devtools/client/shadereditor/shadereditor.js
+++ b/devtools/client/shadereditor/shadereditor.js
@@ -35,17 +35,17 @@ const EVENTS = {
   // When the UI is reset from tab navigation
   UI_RESET: "ShaderEditor:UIReset",
 
   // When the editor's error markers are all removed
   EDITOR_ERROR_MARKERS_REMOVED: "ShaderEditor:EditorCleaned"
 };
 XPCOMUtils.defineConstant(this, "EVENTS", EVENTS);
 
-const STRINGS_URI = "chrome://browser/locale/devtools/shadereditor.properties"
+const STRINGS_URI = "chrome://devtools/locale/shadereditor.properties"
 const HIGHLIGHT_TINT = [1, 0, 0.25, 1]; // rgba
 const TYPING_MAX_DELAY = 500; // ms
 const SHADERS_AUTOGROW_ITEMS = 4;
 const GUTTER_ERROR_PANEL_OFFSET_X = 7; // px
 const GUTTER_ERROR_PANEL_DELAY = 100; // ms
 const DEFAULT_EDITOR_CONFIG = {
   gutters: ["errors"],
   lineNumbers: true,
--- a/devtools/client/shadereditor/shadereditor.xul
+++ b/devtools/client/shadereditor/shadereditor.xul
@@ -1,19 +1,19 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/shadereditor.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/shadereditor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % debuggerDTD SYSTEM "chrome://browser/locale/devtools/shadereditor.dtd">
+  <!ENTITY % debuggerDTD SYSTEM "chrome://devtools/locale/shadereditor.dtd">
   %debuggerDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <script type="application/javascript;version=1.8"
           src="chrome://devtools/content/shared/theme-switching.js"/>
 
--- a/devtools/client/shared/AppCacheUtils.jsm
+++ b/devtools/client/shared/AppCacheUtils.jsm
@@ -612,17 +612,17 @@ ManifestParser.prototype = {
                          "invalidSectionName", text, this.currentLine);
           return false;
       }
     }
   },
 };
 
 XPCOMUtils.defineLazyGetter(this, "l10n", () => Services.strings
-  .createBundle("chrome://browser/locale/devtools/appcacheutils.properties"));
+  .createBundle("chrome://devtools/locale/appcacheutils.properties"));
 
 XPCOMUtils.defineLazyGetter(this, "appcacheservice", function() {
   return Cc["@mozilla.org/network/application-cache-service;1"]
            .getService(Ci.nsIApplicationCacheService);
 
 });
 
 XPCOMUtils.defineLazyGetter(this, "_DOMParser", function() {
--- a/devtools/client/shared/DeveloperToolbar.jsm
+++ b/devtools/client/shared/DeveloperToolbar.jsm
@@ -31,17 +31,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyGetter(this, "prefBranch", function() {
   let prefService = Cc["@mozilla.org/preferences-service;1"]
                     .getService(Ci.nsIPrefService);
   return prefService.getBranch(null)
                     .QueryInterface(Ci.nsIPrefBranch2);
 });
 
 XPCOMUtils.defineLazyGetter(this, "toolboxStrings", function () {
-  return Services.strings.createBundle("chrome://browser/locale/devtools/toolbox.properties");
+  return Services.strings.createBundle("chrome://devtools/locale/toolbox.properties");
 });
 
 const Telemetry = require("devtools/client/shared/telemetry");
 
 XPCOMUtils.defineLazyGetter(this, "gcliInit", function() {
   try {
     return require("devtools/shared/gcli/commands/index");
   }
--- a/devtools/client/shared/devices.js
+++ b/devtools/client/shared/devices.js
@@ -5,17 +5,17 @@
 "use strict";
 
 const { Ci, Cc } = require("chrome");
 const { getJSON } = require("devtools/client/shared/getjson");
 const { Services } = require("resource://gre/modules/Services.jsm");
 const promise = require("promise");
 
 const DEVICES_URL = "devtools.devices.url";
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/device.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/device.properties");
 
 /* This is a catalog of common web-enabled devices and their properties,
  * intended for (mobile) device emulation.
  *
  * The properties of a device are:
  * - name: brand and model(s).
  * - width: viewport width.
  * - height: viewport height.
--- a/devtools/client/shared/test/browser_filter-editor-02.js
+++ b/devtools/client/shared/test/browser_filter-editor-02.js
@@ -4,17 +4,17 @@
 "use strict";
 
 // Tests that the Filter Editor Widget renders filters correctly
 
 const TEST_URI = "chrome://devtools/content/shared/widgets/filter-frame.xhtml";
 const {CSSFilterEditorWidget} = require("devtools/client/shared/widgets/FilterWidget");
 
 const { ViewHelpers } = Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm", {});
-const STRINGS_URI = "chrome://browser/locale/devtools/filterwidget.properties";
+const STRINGS_URI = "chrome://devtools/locale/filterwidget.properties";
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   const TEST_DATA = [
     {
--- a/devtools/client/shared/test/browser_filter-editor-06.js
+++ b/devtools/client/shared/test/browser_filter-editor-06.js
@@ -6,17 +6,17 @@
 // Tests the Filter Editor Widget's add button
 
 const TEST_URI = "chrome://devtools/content/shared/widgets/filter-frame.xhtml";
 
 const { Cu } = require("chrome");
 const {CSSFilterEditorWidget} = require("devtools/client/shared/widgets/FilterWidget");
 
 const { ViewHelpers } = Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm", {});
-const STRINGS_URI = "chrome://browser/locale/devtools/filterwidget.properties";
+const STRINGS_URI = "chrome://devtools/locale/filterwidget.properties";
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   const container = doc.querySelector("#container");
   let widget = new CSSFilterEditorWidget(container, "none");
--- a/devtools/client/shared/test/browser_filter-editor-07.js
+++ b/devtools/client/shared/test/browser_filter-editor-07.js
@@ -6,17 +6,17 @@
 // Tests the Filter Editor Widget's remove button
 
 const TEST_URI = "chrome://devtools/content/shared/widgets/filter-frame.xhtml";
 
 const { Cu } = require("chrome");
 const {CSSFilterEditorWidget} = require("devtools/client/shared/widgets/FilterWidget");
 
 const { ViewHelpers } = Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm", {});
-const STRINGS_URI = "chrome://browser/locale/devtools/filterwidget.properties";
+const STRINGS_URI = "chrome://devtools/locale/filterwidget.properties";
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   const container = doc.querySelector("#container");
   let widget = new CSSFilterEditorWidget(container, "blur(2px) contrast(200%)");
--- a/devtools/client/shared/test/browser_tableWidget_basic.js
+++ b/devtools/client/shared/test/browser_tableWidget_basic.js
@@ -1,19 +1,19 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that the table widget api works fine
 
 const TEST_URI = "data:text/xml;charset=UTF-8,<?xml version='1.0'?>" +
   "<?xml-stylesheet href='chrome://global/skin/global.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/common.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/light-theme.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/widgets.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/common.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/light-theme.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/widgets.css'?>" +
   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'" +
   " title='Table Widget' width='600' height='500'>" +
   "<box flex='1' class='theme-light'/></window>";
 const TEST_OPT = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
 
 const {TableWidget} = require("devtools/client/shared/widgets/TableWidget");
 
 var doc, table;
--- a/devtools/client/shared/test/browser_tableWidget_keyboard_interaction.js
+++ b/devtools/client/shared/test/browser_tableWidget_keyboard_interaction.js
@@ -1,19 +1,19 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that keyboard interaction works fine with the table widget
 
 const TEST_URI = "data:text/xml;charset=UTF-8,<?xml version='1.0'?>" +
   "<?xml-stylesheet href='chrome://global/skin/global.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/common.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/light-theme.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/widgets.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/common.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/light-theme.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/widgets.css'?>" +
   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'" +
   " title='Table Widget' width='600' height='500'>" +
   "<box flex='1' class='theme-light'/></window>";
 const TEST_OPT = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
 
 const {TableWidget} = require("devtools/client/shared/widgets/TableWidget");
 var {Task} = require("resource://gre/modules/Task.jsm");
 
--- a/devtools/client/shared/test/browser_tableWidget_mouse_interaction.js
+++ b/devtools/client/shared/test/browser_tableWidget_mouse_interaction.js
@@ -1,19 +1,19 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that mosue interaction works fine with the table widget
 
 const TEST_URI = "data:text/xml;charset=UTF-8,<?xml version='1.0'?>" +
   "<?xml-stylesheet href='chrome://global/skin/global.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/common.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/light-theme.css'?>" +
-  "<?xml-stylesheet href='chrome://devtools/skin/themes/widgets.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/common.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/light-theme.css'?>" +
+  "<?xml-stylesheet href='chrome://devtools/skin/widgets.css'?>" +
   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'" +
   " title='Table Widget' width='600' height='500'>" +
   "<box flex='1' class='theme-light'/></window>";
 const TEST_OPT = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
 
 const {TableWidget} = require("devtools/client/shared/widgets/TableWidget");
 const Promise = require("promise");
 
--- a/devtools/client/shared/test/browser_treeWidget_basic.js
+++ b/devtools/client/shared/test/browser_treeWidget_basic.js
@@ -1,17 +1,17 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that the tree widget api works fine
 
 const TEST_URI = "data:text/html;charset=utf-8,<head><link rel='stylesheet' " +
-  "type='text/css' href='chrome://devtools/skin/themes/common.css'><link " +
-  "rel='stylesheet' type='text/css' href='chrome://devtools/skin/themes/widg" +
+  "type='text/css' href='chrome://devtools/skin/common.css'><link " +
+  "rel='stylesheet' type='text/css' href='chrome://devtools/skin/widg" +
   "ets.css'></head><body><div></div><span></span></body>";
 const {TreeWidget} = require("devtools/client/shared/widgets/TreeWidget");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   let tree = new TreeWidget(doc.querySelector("div"), {
--- a/devtools/client/shared/test/browser_treeWidget_keyboard_interaction.js
+++ b/devtools/client/shared/test/browser_treeWidget_keyboard_interaction.js
@@ -1,17 +1,17 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that keyboard interaction works fine with the tree widget
 
 const TEST_URI = "data:text/html;charset=utf-8,<head><link rel='stylesheet' " +
-  "type='text/css' href='chrome://devtools/skin/themes/common.css'><link " +
-  "rel='stylesheet' type='text/css' href='chrome://devtools/skin/themes/widg" +
+  "type='text/css' href='chrome://devtools/skin/common.css'><link " +
+  "rel='stylesheet' type='text/css' href='chrome://devtools/skin/widg" +
   "ets.css'></head><body><div></div><span></span></body>";
 const {TreeWidget} = require("devtools/client/shared/widgets/TreeWidget");
 const Promise = require("promise");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
--- a/devtools/client/shared/test/browser_treeWidget_mouse_interaction.js
+++ b/devtools/client/shared/test/browser_treeWidget_mouse_interaction.js
@@ -1,17 +1,17 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that mouse interaction works fine with tree widget
 
 const TEST_URI = "data:text/html;charset=utf-8,<head><link rel='stylesheet' " +
-  "type='text/css' href='chrome://devtools/skin/themes/common.css'><link " +
-  "rel='stylesheet' type='text/css' href='chrome://devtools/skin/themes/widg" +
+  "type='text/css' href='chrome://devtools/skin/common.css'><link " +
+  "rel='stylesheet' type='text/css' href='chrome://devtools/skin/widg" +
   "ets.css'></head><body><div></div><span></span></body>";
 const {TreeWidget} = require("devtools/client/shared/widgets/TreeWidget");
 const Promise = require("promise");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
--- a/devtools/client/shared/test/doc_options-view.xul
+++ b/devtools/client/shared/test/doc_options-view.xul
@@ -1,15 +1,15 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
 <!DOCTYPE window []>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
     <popupset id="options-popupset">
         <menupopup id="options-menupopup" position="before_end">
             <menuitem id="option-autoprettyprint"
--- a/devtools/client/shared/theme-switching.js
+++ b/devtools/client/shared/theme-switching.js
@@ -1,14 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 (function() {
-  const DEVTOOLS_SKIN_URL = "chrome://devtools/skin/themes/";
+  const DEVTOOLS_SKIN_URL = "chrome://devtools/skin/";
   let documentElement = document.documentElement;
 
   function forceStyle() {
     let computedStyle = window.getComputedStyle(documentElement);
     if (!computedStyle) {
       // Null when documentElement is not ready. This method is anyways not
       // required then as scrollbars would be in their state without flushing.
       return;
--- a/devtools/client/shared/theme.js
+++ b/devtools/client/shared/theme.js
@@ -9,17 +9,17 @@
  * https://developer.mozilla.org/en-US/docs/Tools/DevToolsColors
  */
 
 const { Ci, Cu } = require("chrome");
 const { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm", {});
 loader.lazyRequireGetter(this, "Services");
 loader.lazyImporter(this, "gDevTools", "resource://devtools/client/framework/gDevTools.jsm");
 
-const VARIABLES_URI = "chrome://devtools/skin/themes/variables.css";
+const VARIABLES_URI = "chrome://devtools/skin/variables.css";
 const THEME_SELECTOR_STRINGS = {
   light: ":root.theme-light {",
   dark: ":root.theme-dark {"
 }
 
 let variableFileContents;
 
 /**
--- a/devtools/client/shared/widgets/Chart.jsm
+++ b/devtools/client/shared/widgets/Chart.jsm
@@ -3,17 +3,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
-const NET_STRINGS_URI = "chrome://browser/locale/devtools/netmonitor.properties";
+const NET_STRINGS_URI = "chrome://devtools/locale/netmonitor.properties";
 const SVG_NS = "http://www.w3.org/2000/svg";
 const PI = Math.PI;
 const TAU = PI * 2;
 const EPSILON = 0.0000001;
 const NAMED_SLICE_MIN_ANGLE = TAU / 8;
 const NAMED_SLICE_TEXT_DISTANCE_RATIO = 1.9;
 const HOVERED_SLICE_TRANSLATE_DISTANCE_RATIO = 20;
 
--- a/devtools/client/shared/widgets/FilterWidget.js
+++ b/devtools/client/shared/widgets/FilterWidget.js
@@ -9,17 +9,17 @@
   * for Rule View's filter swatches
   */
 
 const EventEmitter = require("devtools/shared/event-emitter");
 const { Cu, Cc, Ci } = require("chrome");
 const { ViewHelpers } =
       Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm",
                 {});
-const STRINGS_URI = "chrome://browser/locale/devtools/filterwidget.properties";
+const STRINGS_URI = "chrome://devtools/locale/filterwidget.properties";
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 const {cssTokenizer} = require("devtools/client/shared/css-parsing-utils");
 
 loader.lazyGetter(this, "asyncStorage",
                   () => require("devtools/shared/async-storage"));
 
 loader.lazyGetter(this, "DOMUtils", () => {
   return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
--- a/devtools/client/shared/widgets/LineGraphWidget.js
+++ b/devtools/client/shared/widgets/LineGraphWidget.js
@@ -2,17 +2,17 @@
 
 const { Cc, Ci, Cu, Cr } = require("chrome");
 
 const { Task } = Cu.import("resource://gre/modules/Task.jsm", {});
 const { ViewHelpers, Heritage } = require("resource://devtools/client/shared/widgets/ViewHelpers.jsm");
 const { AbstractCanvasGraph, CanvasGraphUtils } = require("devtools/client/shared/widgets/Graphs");
 
 const HTML_NS = "http://www.w3.org/1999/xhtml";
-const L10N = new ViewHelpers.L10N("chrome://browser/locale/devtools/graphs.properties");
+const L10N = new ViewHelpers.L10N("chrome://devtools/locale/graphs.properties");
 
 // Line graph constants.
 
 const GRAPH_DAMPEN_VALUES_FACTOR = 0.85;
 const GRAPH_TOOLTIP_SAFE_BOUNDS = 8; // px
 const GRAPH_MIN_MAX_TOOLTIP_DISTANCE = 14; // px
 
 const GRAPH_BACKGROUND_COLOR = "#0088cc";
--- a/devtools/client/shared/widgets/MdnDocsWidget.js
+++ b/devtools/client/shared/widgets/MdnDocsWidget.js
@@ -377,17 +377,17 @@ MdnDocsWidget.prototype = {
  */
 function L10N() {}
 L10N.prototype = {};
 
 var l10n = new L10N();
 
 loader.lazyGetter(L10N.prototype, "strings", () => {
   return Services.strings.createBundle(
-    "chrome://browser/locale/devtools/inspector.properties");
+    "chrome://devtools/locale/inspector.properties");
 });
 
 /**
  * Test whether a node is all whitespace.
  *
  * @return {boolean}
  * True if the node all whitespace, otherwise false.
  */
--- a/devtools/client/shared/widgets/Tooltip.js
+++ b/devtools/client/shared/widgets/Tooltip.js
@@ -1275,17 +1275,17 @@ EventTooltip.prototype = {
       // Header
       let header = doc.createElement("hbox");
       header.className = "event-header devtools-toolbar";
       container.appendChild(header);
 
       if (!listener.hide.debugger) {
         let debuggerIcon = doc.createElement("image");
         debuggerIcon.className = "event-tooltip-debugger-icon";
-        debuggerIcon.setAttribute("src", "chrome://devtools/skin/themes/images/tool-debugger.svg");
+        debuggerIcon.setAttribute("src", "chrome://devtools/skin/images/tool-debugger.svg");
         let openInDebugger =
             l10n.strings.GetStringFromName("eventsTooltip.openInDebugger");
         debuggerIcon.setAttribute("tooltiptext", openInDebugger);
         header.appendChild(debuggerIcon);
       }
 
       if (!listener.hide.type) {
         let eventTypeLabel = doc.createElement("label");
@@ -1714,10 +1714,10 @@ SwatchFilterTooltip.prototype = Heritage
  */
 function L10N() {}
 L10N.prototype = {};
 
 var l10n = new L10N();
 
 loader.lazyGetter(L10N.prototype, "strings", () => {
   return Services.strings.createBundle(
-    "chrome://browser/locale/devtools/inspector.properties");
+    "chrome://devtools/locale/inspector.properties");
 });
--- a/devtools/client/shared/widgets/VariablesView.jsm
+++ b/devtools/client/shared/widgets/VariablesView.jsm
@@ -3,17 +3,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
-const DBG_STRINGS_URI = "chrome://browser/locale/devtools/debugger.properties";
+const DBG_STRINGS_URI = "chrome://devtools/locale/debugger.properties";
 const LAZY_EMPTY_DELAY = 150; // ms
 const LAZY_EXPAND_DELAY = 50; // ms
 const SCROLL_PAGE_SIZE_DEFAULT = 0;
 const PAGE_SIZE_SCROLL_HEIGHT_RATIO = 100;
 const PAGE_SIZE_MAX_JUMPS = 30;
 const SEARCH_ACTION_MAX_DELAY = 300; // ms
 const ITEM_FLASH_DURATION = 300 // ms
 
--- a/devtools/client/shared/widgets/VariablesView.xul
+++ b/devtools/client/shared/widgets/VariablesView.xul
@@ -1,18 +1,18 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://global/skin/global.css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % viewDTD SYSTEM "chrome://browser/locale/devtools/VariablesView.dtd">
+  <!ENTITY % viewDTD SYSTEM "chrome://devtools/locale/VariablesView.dtd">
   %viewDTD;
 ]>
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         title="&PropertiesViewWindowTitle;">
 
   <script type="application/javascript;version=1.8"
           src="chrome://devtools/content/shared/theme-switching.js"/>
   <vbox id="variables" flex="1"/>
--- a/devtools/client/shared/widgets/VariablesViewController.jsm
+++ b/devtools/client/shared/widgets/VariablesViewController.jsm
@@ -26,17 +26,17 @@ XPCOMUtils.defineLazyGetter(this, "VARIA
   Services.prefs.getBoolPref("devtools.debugger.ui.variables-sorting-enabled")
 );
 
 XPCOMUtils.defineLazyModuleGetter(this, "console",
   "resource://gre/modules/Console.jsm");
 
 const MAX_LONG_STRING_LENGTH = 200000;
 const MAX_PROPERTY_ITEMS = 2000;
-const DBG_STRINGS_URI = "chrome://browser/locale/devtools/debugger.properties";
+const DBG_STRINGS_URI = "chrome://devtools/locale/debugger.properties";
 
 const ELLIPSIS = Services.prefs.getComplexValue("intl.ellipsis", Ci.nsIPrefLocalizedString).data
 
 this.EXPORTED_SYMBOLS = ["VariablesViewController", "StackFrameUtils"];
 
 
 /**
  * Controller for a VariablesView that handles interfacing with the debugger
@@ -689,17 +689,17 @@ VariablesViewController.prototype = {
    *         - expanded: the Promise that resolves when the variable expands.
    */
   setSingleVariable: function(aOptions, aConfiguration = {}) {
     this._setEvaluationMacros(aConfiguration);
     this.view.empty();
 
     let scope = this.view.addScope(aOptions.label);
     scope.expanded = true; // Expand the scope by default.
-    scope.locked = true; // Prevent collpasing the scope.
+    scope.locked = true; // Prevent collapsing the scope.
 
     let variable = scope.addItem("", { enumerable: true });
     let populated;
 
     if (aOptions.objectActor) {
       // Save objectActor for properties filtering
       this.objectActor = aOptions.objectActor;
       populated = this.populate(variable, aOptions.objectActor);
--- a/devtools/client/shared/widgets/cubic-bezier-frame.xhtml
+++ b/devtools/client/shared/widgets/cubic-bezier-frame.xhtml
@@ -2,17 +2,17 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE html>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
   <link rel="stylesheet" href="chrome://devtools/content/shared/widgets/cubic-bezier.css" type="text/css"/>
   <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
   <style>
     html, body {
       margin: 0;
       padding: 0;
       overflow: hidden;
       width: 410px;
--- a/devtools/client/shared/widgets/filter-frame.xhtml
+++ b/devtools/client/shared/widgets/filter-frame.xhtml
@@ -1,21 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE html [
-  <!ENTITY % filterwidgetDTD SYSTEM "chrome://browser/locale/devtools/filterwidget.dtd" >
+  <!ENTITY % filterwidgetDTD SYSTEM "chrome://devtools/locale/filterwidget.dtd" >
   %filterwidgetDTD;
 ]>
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
     <link rel="stylesheet" href="chrome://devtools/content/shared/widgets/filter-widget.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"></script>
   </head>
   <body>
 
     <div id="container">
       <div class="filters-list">
         <div id="filters"></div>
         <div class="footer">
--- a/devtools/client/shared/widgets/filter-widget.css
+++ b/devtools/client/shared/widgets/filter-widget.css
@@ -190,17 +190,17 @@ html, body {
   display: block;
   order: 3;
   color: var(--theme-body-color-alt);
 }
 
 .remove-button {
   width: 16px;
   height: 16px;
-  background: url(chrome://devtools/skin/themes/images/close@2x.png);
+  background: url(chrome://devtools/skin/images/close@2x.png);
   background-size: cover;
   font-size: 0;
   border: none;
   cursor: pointer;
 }
 
 .hidden {
   display: none !important;
@@ -226,19 +226,19 @@ html, body {
   height: 16px;
   font-size: 0;
   vertical-align: middle;
   cursor: pointer;
   margin: 0 5px;
 }
 
 .add {
-  background: url(chrome://devtools/skin/themes/images/add.svg);
+  background: url(chrome://devtools/skin/images/add.svg);
 }
 
 #toggle-presets {
-  background: url(chrome://devtools/skin/themes/images/pseudo-class.svg#pseudo-class);
+  background: url(chrome://devtools/skin/images/pseudo-class.svg#pseudo-class);
 }
 
 .show-presets #toggle-presets {
-  background: url(chrome://devtools/skin/themes/images/pseudo-class.svg#pseudo-class-checked);
+  background: url(chrome://devtools/skin/images/pseudo-class.svg#pseudo-class-checked);
   filter: none;
 }
--- a/devtools/client/shared/widgets/graphs-frame.xhtml
+++ b/devtools/client/shared/widgets/graphs-frame.xhtml
@@ -2,18 +2,18 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE html>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/widgets.css" ype="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/widgets.css" ype="text/css"/>
   <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
   <style>
     body {
       overflow: hidden;
       margin: 0;
       padding: 0;
       font-size: 0;
     }
--- a/devtools/client/shared/widgets/mdn-docs-frame.xhtml
+++ b/devtools/client/shared/widgets/mdn-docs-frame.xhtml
@@ -2,17 +2,17 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE html>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
   <link rel="stylesheet" href="chrome://devtools/content/shared/widgets/mdn-docs.css" type="text/css"/>
   <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
 </head>
 <body class="theme-body">
 
   <div id = "container">
 
     <header>
--- a/devtools/client/shared/widgets/spectrum-frame.xhtml
+++ b/devtools/client/shared/widgets/spectrum-frame.xhtml
@@ -2,17 +2,17 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE html>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-  <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
   <link rel="stylesheet" href="chrome://devtools/content/shared/widgets/spectrum.css" ype="text/css"/>
   <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
   <style>
     body {
       margin: 0;
       padding: 0;
     }
   </style>
--- a/devtools/client/shared/widgets/spectrum.css
+++ b/devtools/client/shared/widgets/spectrum.css
@@ -1,26 +1,26 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.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 {
-  background-image: url("chrome://devtools/skin/themes/images/command-eyedropper.png");
+  background-image: url("chrome://devtools/skin/images/command-eyedropper.png");
   width: 16px;
   height: 16px;
   background-size: 64px 16px;
   background-position: 0 center;
   background-repeat: no-repeat;
   -moz-margin-start: 5px;
   border-radius: 2px;
   cursor: pointer;
 }
 
 .theme-light #eyedropper-button {
-  filter: url(chrome://devtools/skin/themes/images/filters.svg#invert);
+  filter: url(chrome://devtools/skin/images/filters.svg#invert);
   border: 1px solid #AAA;
 }
 
 .theme-dark #eyedropper-button {
   border: 1px solid #444;
 }
 
 #eyedropper-button:hover {
@@ -30,17 +30,17 @@
   background-position: -32px center;
 }
 #eyedropper-button[checked=true] {
   background-position: -48px center;
 }
 
 @media (min-resolution: 1.1dppx) {
   #eyedropper-button {
-    background-image: url("chrome://devtools/skin/themes/images/command-eyedropper@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-eyedropper@2x.png");
   }
 }
 
 /* Mix-in classes */
 
 .spectrum-checker {
   background-color: #eee;
   background-image: linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc),
--- a/devtools/client/sourceeditor/codemirror/mozilla.css
+++ b/devtools/client/sourceeditor/codemirror/mozilla.css
@@ -28,56 +28,56 @@
   border-width: 1px 1px 1px 0;
   border-radius: 0 3px 3px 0;
   padding: 0 3px;
   font-size: 10px;
   pointer-events: none;
 }
 
 .error {
-  background-image: url("chrome://devtools/skin/themes/images/editor-error.png");
+  background-image: url("chrome://devtools/skin/images/editor-error.png");
   opacity: 0.75;
 }
 
 .breakpoint {
-  background-image: url("chrome://devtools/skin/themes/images/editor-breakpoint.png");
+  background-image: url("chrome://devtools/skin/images/editor-breakpoint.png");
   position: relative;
 }
 
 @media (min-resolution: 1.1dppx) {
   .breakpoint {
-    background-image: url("chrome://devtools/skin/themes/images/editor-breakpoint@2x.png");
+    background-image: url("chrome://devtools/skin/images/editor-breakpoint@2x.png");
   }
 }
 
 .breakpoint[adding] {
   transition: transform .25s;
 }
 
 .debugLocation {
-  background-image: url("chrome://devtools/skin/themes/images/editor-debug-location.png");
+  background-image: url("chrome://devtools/skin/images/editor-debug-location.png");
 }
 
 @media (min-resolution: 1.1dppx) {
   .debugLocation {
-    background-image: url("chrome://devtools/skin/themes/images/editor-debug-location@2x.png");
+    background-image: url("chrome://devtools/skin/images/editor-debug-location@2x.png");
   }
 }
 
 .breakpoint.debugLocation {
   background-image:
-    url("chrome://devtools/skin/themes/images/editor-debug-location.png"),
-    url("chrome://devtools/skin/themes/images/editor-breakpoint.png");
+    url("chrome://devtools/skin/images/editor-debug-location.png"),
+    url("chrome://devtools/skin/images/editor-breakpoint.png");
 }
 
 @media (min-resolution: 1.1dppx) {
   .breakpoint.debugLocation {
     background-image:
-      url("chrome://devtools/skin/themes/images/editor-debug-location@2x.png"),
-      url("chrome://devtools/skin/themes/images/editor-breakpoint@2x.png");
+      url("chrome://devtools/skin/images/editor-debug-location@2x.png"),
+      url("chrome://devtools/skin/images/editor-breakpoint@2x.png");
   }
 }
 
 .CodeMirror {
   cursor: text;
 }
 
 .CodeMirror-gutters {
--- a/devtools/client/sourceeditor/editor.js
+++ b/devtools/client/sourceeditor/editor.js
@@ -14,17 +14,17 @@ const {
   DETECT_INDENT,
   getIndentationFromIteration
 } = require("devtools/shared/indentation");
 
 const ENABLE_CODE_FOLDING = "devtools.editor.enableCodeFolding";
 const KEYMAP      = "devtools.editor.keymap";
 const AUTO_CLOSE  = "devtools.editor.autoclosebrackets";
 const AUTOCOMPLETE  = "devtools.editor.autocomplete";
-const L10N_BUNDLE = "chrome://browser/locale/devtools/sourceeditor.properties";
+const L10N_BUNDLE = "chrome://devtools/locale/sourceeditor.properties";
 const XUL_NS      = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 const VALID_KEYMAPS = new Set(["emacs", "vim", "sublime"]);
 
 // Maximum allowed margin (in number of lines) from top or bottom of the editor
 // while shifting to a line which was initially out of view.
 const MAX_VERTICAL_OFFSET = 3;
 
 // Match @Scratchpad/N:LINE[:COLUMN] or (LINE[:COLUMN]) anywhere at an end of
@@ -41,17 +41,17 @@ const L10N = Services.strings.createBund
 
 const { OS } = Services.appinfo;
 
 // CM_STYLES, CM_SCRIPTS and CM_IFRAME represent the HTML,
 // JavaScript and CSS that is injected into an iframe in
 // order to initialize a CodeMirror instance.
 
 const CM_STYLES   = [
-  "chrome://devtools/skin/themes/common.css",
+  "chrome://devtools/skin/common.css",
   "chrome://devtools/content/sourceeditor/codemirror/codemirror.css",
   "chrome://devtools/content/sourceeditor/codemirror/dialog/dialog.css",
   "chrome://devtools/content/sourceeditor/codemirror/mozilla.css"
 ];
 
 const CM_SCRIPTS  = [
   "chrome://devtools/content/shared/theme-switching.js",
   "chrome://devtools/content/sourceeditor/codemirror/codemirror.js",
--- a/devtools/client/sourceeditor/test/browser_editor_find_again.js
+++ b/devtools/client/sourceeditor/test/browser_editor_find_again.js
@@ -1,16 +1,16 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2; fill-column: 80 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
-const L10N_BUNDLE = "chrome://browser/locale/devtools/sourceeditor.properties";
+const L10N_BUNDLE = "chrome://devtools/locale/sourceeditor.properties";
 const L10N = Services.strings.createBundle(L10N_BUNDLE);
 
 const FIND_KEY = L10N.GetStringFromName("find.commandkey");
 const FINDAGAIN_KEY = L10N.GetStringFromName("findAgain.commandkey");
 
 const { OS } = Services.appinfo;
 
 // On linux, getting immediately the selection's range here fails, returning
--- a/devtools/client/storage/storage.xul
+++ b/devtools/client/storage/storage.xul
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/storage.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/storage.css" type="text/css"?>
 
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <script type="application/javascript;version=1.8"
           src="chrome://devtools/content/shared/theme-switching.js"/>
   <script type="text/javascript" src="chrome://global/content/globalOverlay.js"/>
--- a/devtools/client/storage/ui.js
+++ b/devtools/client/storage/ui.js
@@ -17,17 +17,17 @@ loader.lazyImporter(this, "ViewHelpers",
 loader.lazyImporter(this, "VariablesView",
   "resource://devtools/client/shared/widgets/VariablesView.jsm");
 
 const Telemetry = require("devtools/client/shared/telemetry");
 
 /**
  * Localization convenience methods.
  */
-const STORAGE_STRINGS = "chrome://browser/locale/devtools/storage.properties";
+const STORAGE_STRINGS = "chrome://devtools/locale/storage.properties";
 const L10N = new ViewHelpers.L10N(STORAGE_STRINGS);
 
 const GENERIC_VARIABLES_VIEW_SETTINGS = {
   lazyEmpty: true,
    // ms
   lazyEmptyDelay: 10,
   searchEnabled: true,
   searchPlaceholder: L10N.getStr("storage.search.placeholder"),
--- a/devtools/client/styleeditor/StyleEditorUtil.jsm
+++ b/devtools/client/styleeditor/StyleEditorUtil.jsm
@@ -15,17 +15,17 @@ this.EXPORTED_SYMBOLS = [
 ];
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
 Cu.import("resource://gre/modules/Services.jsm");
 
-const PROPERTIES_URL = "chrome://browser/locale/devtools/styleeditor.properties";
+const PROPERTIES_URL = "chrome://devtools/locale/styleeditor.properties";
 
 const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
 const console = require("resource://gre/modules/Console.jsm").console;
 const gStringBundle = Services.strings.createBundle(PROPERTIES_URL);
 
 
 /**
  * Returns a localized string with the given key name from the string bundle.
--- a/devtools/client/styleeditor/styleeditor-panel.js
+++ b/devtools/client/styleeditor/styleeditor-panel.js
@@ -146,10 +146,10 @@ StyleEditorPanel.prototype = {
 
     return promise.resolve(null);
   },
 }
 
 XPCOMUtils.defineLazyGetter(StyleEditorPanel.prototype, "strings",
   function () {
     return Services.strings.createBundle(
-            "chrome://browser/locale/devtools/styleeditor.properties");
+            "chrome://devtools/locale/styleeditor.properties");
   });
--- a/devtools/client/styleeditor/styleeditor.xul
+++ b/devtools/client/styleeditor/styleeditor.xul
@@ -1,31 +1,31 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE window [
-<!ENTITY % styleEditorDTD SYSTEM "chrome://browser/locale/devtools/styleeditor.dtd" >
+<!ENTITY % styleEditorDTD SYSTEM "chrome://devtools/locale/styleeditor.dtd" >
  %styleEditorDTD;
 <!ENTITY % editMenuStrings SYSTEM "chrome://global/locale/editMenuOverlay.dtd">
  %editMenuStrings;
-<!ENTITY % sourceEditorStrings SYSTEM "chrome://browser/locale/devtools/sourceeditor.dtd">
+<!ENTITY % sourceEditorStrings SYSTEM "chrome://devtools/locale/sourceeditor.dtd">
  %sourceEditorStrings;
-<!ENTITY % csscoverageDTD SYSTEM "chrome://global/locale/devtools/csscoverage.dtd">
+<!ENTITY % csscoverageDTD SYSTEM "chrome://devtools-shared/locale/csscoverage.dtd">
  %csscoverageDTD;
 ]>
 
 <?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/splitview.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/splitview.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/splitview.css" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/styleeditor/styleeditor.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/styleeditor.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/styleeditor.css" type="text/css"?>
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 
 <xul:window xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         xmlns="http://www.w3.org/1999/xhtml"
         id="style-editor-chrome-window">
 
   <script type="application/javascript;version=1.8"
           src="chrome://devtools/content/shared/theme-switching.js"/>
--- a/devtools/client/styleinspector/computed-view.js
+++ b/devtools/client/styleinspector/computed-view.js
@@ -220,17 +220,17 @@ CssComputedView.l10n = function(name) {
   } catch (ex) {
     Services.console.logStringMessage("Error reading '" + name + "'");
     throw new Error("l10n error with " + name);
   }
 };
 
 XPCOMUtils.defineLazyGetter(CssComputedView, "_strings", function() {
   return Services.strings.createBundle(
-    "chrome://global/locale/devtools/styleinspector.properties");
+    "chrome://devtools-shared/locale/styleinspector.properties");
 });
 
 XPCOMUtils.defineLazyGetter(this, "clipboardHelper", function() {
   return Cc["@mozilla.org/widget/clipboardhelper;1"]
          .getService(Ci.nsIClipboardHelper);
 });
 
 CssComputedView.prototype = {
--- a/devtools/client/styleinspector/computedview.xhtml
+++ b/devtools/client/styleinspector/computedview.xhtml
@@ -1,15 +1,15 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE window [
-  <!ENTITY % inspectorDTD SYSTEM "chrome://browser/locale/devtools/styleinspector.dtd">
+  <!ENTITY % inspectorDTD SYSTEM "chrome://devtools/locale/styleinspector.dtd">
   %inspectorDTD;
   <!ELEMENT loop ANY>
   <!ATTLIST li foreach CDATA #IMPLIED>
   <!ATTLIST div foreach CDATA #IMPLIED>
   <!ATTLIST loop foreach CDATA #IMPLIED>
   <!ATTLIST a target CDATA #IMPLIED>
   <!ATTLIST a __pathElement CDATA #IMPLIED>
   <!ATTLIST div _id CDATA #IMPLIED>
@@ -23,18 +23,18 @@
       xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       class="theme-sidebar">
 
   <head>
 
     <title>&computedViewTitle;</title>
 
     <link rel="stylesheet" href="chrome://global/skin/global.css"  type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css"  type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/computedview.css"  type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css"  type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/computedview.css"  type="text/css"/>
 
     <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
 
     <script type="application/javascript;version=1.8">
       window.setPanel = function(panel, iframe) {
         let {require} = Components.utils.import("resource://devtools/shared/Loader.jsm", {});
         let inspector = require("devtools/client/styleinspector/style-inspector");
         this.computedview = new inspector.ComputedViewTool(panel, window);
--- a/devtools/client/styleinspector/cssruleview.xhtml
+++ b/devtools/client/styleinspector/cssruleview.xhtml
@@ -1,27 +1,27 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE window [
-  <!ENTITY % inspectorDTD SYSTEM "chrome://browser/locale/devtools/styleinspector.dtd">
+  <!ENTITY % inspectorDTD SYSTEM "chrome://devtools/locale/styleinspector.dtd">
   %inspectorDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       class="theme-sidebar">
   <head>
     <title>&ruleViewTitle;</title>
     <link rel="stylesheet" href="chrome://global/skin/global.css"  type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css"  type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css"  type="text/css"/>
     <link rel="stylesheet" href="chrome://devtools/content/styleinspector/ruleview.css"  type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/ruleview.css"  type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/ruleview.css"  type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
     <script type="application/javascript;version=1.8">
       window.setPanel = function(panel, iframe) {
         let {require} = Components.utils.import("resource://devtools/shared/Loader.jsm", {});
         let inspector = require("devtools/client/styleinspector/style-inspector");
         this.ruleview = new inspector.RuleViewTool(panel, window);
       }
       window.onunload = function() {
--- a/devtools/client/styleinspector/rule-view.js
+++ b/devtools/client/styleinspector/rule-view.js
@@ -4044,17 +4044,17 @@ XPCOMUtils.defineLazyGetter(this, "clipb
 });
 
 XPCOMUtils.defineLazyGetter(this, "osString", function() {
   return Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS;
 });
 
 XPCOMUtils.defineLazyGetter(this, "_strings", function() {
   return Services.strings.createBundle(
-    "chrome://global/locale/devtools/styleinspector.properties");
+    "chrome://devtools-shared/locale/styleinspector.properties");
 });
 
 XPCOMUtils.defineLazyGetter(this, "domUtils", function() {
   return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
 });
 
 loader.lazyGetter(this, "AutocompletePopup", function() {
   return require("devtools/client/shared/autocomplete-popup").AutocompletePopup;
--- a/devtools/client/styleinspector/style-inspector-menu.js
+++ b/devtools/client/styleinspector/style-inspector-menu.js
@@ -11,17 +11,17 @@ const {PREF_ORIG_SOURCES} = require("dev
 
 loader.lazyRequireGetter(this, "overlays",
   "devtools/client/styleinspector/style-inspector-overlays");
 loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm");
 loader.lazyServiceGetter(this, "clipboardHelper",
   "@mozilla.org/widget/clipboardhelper;1", "nsIClipboardHelper");
 loader.lazyGetter(this, "_strings", () => {
   return Services.strings
-  .createBundle("chrome://global/locale/devtools/styleinspector.properties");
+  .createBundle("chrome://devtools-shared/locale/styleinspector.properties");
 });
 
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 const PREF_ENABLE_MDN_DOCS_TOOLTIP =
   "devtools.inspector.mdnDocsTooltip.enabled";
 
 /**
  * Style inspector context menu
--- a/devtools/client/styleinspector/style-inspector.js
+++ b/devtools/client/styleinspector/style-inspector.js
@@ -14,17 +14,17 @@ const {PREF_ORIG_SOURCES} = require("dev
 
 loader.lazyGetter(this, "gDevTools", () =>
   Cu.import("resource://devtools/client/framework/gDevTools.jsm", {}).gDevTools);
 loader.lazyGetter(this, "RuleView",
   () => require("devtools/client/styleinspector/rule-view"));
 loader.lazyGetter(this, "ComputedView",
   () => require("devtools/client/styleinspector/computed-view"));
 loader.lazyGetter(this, "_strings", () => Services.strings
-  .createBundle("chrome://global/locale/devtools/styleinspector.properties"));
+  .createBundle("chrome://devtools-shared/locale/styleinspector.properties"));
 
 // This module doesn't currently export any symbols directly, it only
 // registers inspector tools.
 
 function RuleViewTool(inspector, window) {
   this.inspector = inspector;
   this.document = window.document;
 
--- a/devtools/client/styleinspector/test/browser_ruleview_content_02.js
+++ b/devtools/client/styleinspector/test/browser_ruleview_content_02.js
@@ -11,17 +11,17 @@ const CONTENT = '<body style="color:red;
                    <div style="color:blue;">\
                      <p style="color:green;">\
                        <span style="color:yellow;">test element</span>\
                      </p>\
                    </div>\
                  </body>';
 
 const STRINGS = Services.strings
-  .createBundle("chrome://global/locale/devtools/styleinspector.properties");
+  .createBundle("chrome://devtools-shared/locale/styleinspector.properties");
 
 add_task(function*() {
   yield addTab("data:text/html;charset=utf-8," + CONTENT);
 
   info("Getting the test element");
   let element = getNode("span");
 
   info("Opening the inspector using the content context-menu");
--- a/devtools/client/styleinspector/test/browser_ruleview_media-queries.js
+++ b/devtools/client/styleinspector/test/browser_ruleview_media-queries.js
@@ -12,17 +12,17 @@ const TEST_URI = TEST_URL_ROOT + "doc_me
 add_task(function*() {
   yield addTab(TEST_URI);
   let {inspector, view} = yield openRuleView();
   yield selectNode("div", inspector);
 
   let elementStyle = view._elementStyle;
 
   let _strings = Services.strings
-    .createBundle("chrome://global/locale/devtools/styleinspector.properties");
+    .createBundle("chrome://devtools-shared/locale/styleinspector.properties");
 
   let inline = _strings.GetStringFromName("rule.sourceInline");
 
   is(elementStyle.rules.length, 3, "Should have 3 rules.");
   is(elementStyle.rules[0].title, inline, "check rule 0 title");
   is(elementStyle.rules[1].title, inline +
     ":9 @media screen and (min-width: 1px)", "check rule 1 title");
   is(elementStyle.rules[2].title, inline + ":2", "check rule 2 title");
--- a/devtools/client/styleinspector/test/browser_styleinspector_context-menu-copy-urls.js
+++ b/devtools/client/styleinspector/test/browser_styleinspector_context-menu-copy-urls.js
@@ -1,21 +1,23 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /* Tests both Copy URL and Copy Data URL context menu items */
 
-const PROPERTIES_URL = "chrome://global/locale/devtools/styleinspector.properties";
+const PROPERTIES_URL = "chrome://devtools-shared/locale/styleinspector.properties";
 const TEST_DATA_URI = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=";
 
-// invalid URL still needs to be reachable otherwise getImageDataUrl will timeout.
-// Reusing the properties bundle URL as a workaround
-const INVALID_IMAGE_URI = PROPERTIES_URL;
+// Invalid URL still needs to be reachable otherwise getImageDataUrl will
+// timeout.  DevTools chrome:// URLs aren't content accessible, so use some
+// random resource:// URL here.
+const INVALID_IMAGE_URI =
+  "resource://devtools/client/definitions.js";
 
 const ERROR_MESSAGE = Services.strings
   .createBundle(PROPERTIES_URL)
   .GetStringFromName("styleinspector.copyImageDataUrlError");
 
 add_task(function*() {
   const PAGE_CONTENT = [
     "<style type=\"text/css\">",
@@ -39,27 +41,27 @@ function* startTest() {
   info("Opening rule view");
   let ruleViewData = yield openRuleView();
 
   info("Test valid background image URL in rule view");
   yield testCopyUrlToClipboard(ruleViewData, "data-uri", ".valid-background", TEST_DATA_URI);
   yield testCopyUrlToClipboard(ruleViewData, "url", ".valid-background", TEST_DATA_URI);
   info("Test invalid background image URL in rue view");
   yield testCopyUrlToClipboard(ruleViewData, "data-uri", ".invalid-background", ERROR_MESSAGE);
-  yield testCopyUrlToClipboard(ruleViewData, "url", ".invalid-background", PROPERTIES_URL);
+  yield testCopyUrlToClipboard(ruleViewData, "url", ".invalid-background", INVALID_IMAGE_URI);
 
   info("Opening computed view");
   let computedViewData = yield openComputedView();
 
   info("Test valid background image URL in computed view");
   yield testCopyUrlToClipboard(computedViewData, "data-uri", ".valid-background", TEST_DATA_URI);
   yield testCopyUrlToClipboard(computedViewData, "url", ".valid-background", TEST_DATA_URI);
   info("Test invalid background image URL in computed view");
   yield testCopyUrlToClipboard(computedViewData, "data-uri", ".invalid-background", ERROR_MESSAGE);
-  yield testCopyUrlToClipboard(computedViewData, "url", ".invalid-background", PROPERTIES_URL);
+  yield testCopyUrlToClipboard(computedViewData, "url", ".invalid-background", INVALID_IMAGE_URI);
 }
 
 function* testCopyUrlToClipboard({view, inspector}, type, selector, expected) {
   info("Select node in inspector panel");
   yield selectNode(selector, inspector);
 
   info("Retrieve background-image link for selected node in current styleinspector view");
   let property = getBackgroundImageProperty(view, selector);
--- a/devtools/client/themes/animationinspector.css
+++ b/devtools/client/themes/animationinspector.css
@@ -117,17 +117,17 @@ body {
   height: 16px;
   position: absolute;
   left: 50%;
   top: 50%;
   margin: -8px 0 0 -8px;
 }
 
 #element-picker::before {
-  background-image: url("chrome://devtools/skin/themes/images/command-pick.png");
+  background-image: url("chrome://devtools/skin/images/command-pick.png");
 }
 
 .pause-button::before {
   background-image: url("images/debugger-pause.png");
 }
 
 #rewind-timeline::before {
   background-image: url("images/rewind.png");
@@ -139,17 +139,17 @@ body {
 }
 
 .pause-button.paused::before {
   background-image: url("images/debugger-play.png");
 }
 
 @media (min-resolution: 1.1dppx) {
   #element-picker::before {
-    background-image: url("chrome://devtools/skin/themes/images/command-pick@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-pick@2x.png");
     background-size: 64px;
   }
 
   .pause-button::before {
     background-image: url("images/debugger-pause@2x.png");
   }
 
   .pause-button.paused::before {
@@ -392,17 +392,17 @@ body {
   cursor: pointer;
 }
 
 .animation-target .attribute-name {
   padding-left: 4px;
 }
 
 .animation-target .node-highlighter {
-  background: url("chrome://devtools/skin/themes/images/vview-open-inspector.png") no-repeat 0 0;
+  background: url("chrome://devtools/skin/images/vview-open-inspector.png") no-repeat 0 0;
   padding-left: 16px;
   margin-right: 5px;
   cursor: pointer;
 }
 
 .animation-target .node-highlighter:hover {
   background-position: -32px 0;
 }
--- a/devtools/client/themes/canvasdebugger.css
+++ b/devtools/client/themes/canvasdebugger.css
@@ -34,21 +34,21 @@
 /* Snapshots pane */
 
 #snapshots-pane > tabs,
 #snapshots-pane .devtools-toolbar {
   -moz-border-end: 1px solid var(--theme-splitter-color);
 }
 
 #record-snapshot {
-  list-style-image: url("chrome://devtools/skin/themes/images/profiler-stopwatch.svg");
+  list-style-image: url("chrome://devtools/skin/images/profiler-stopwatch.svg");
 }
 
 #record-snapshot[checked] {
-  list-style-image: url("chrome://devtools/skin/themes/images/profiler-stopwatch-checked.svg");
+  list-style-image: url("chrome://devtools/skin/images/profiler-stopwatch-checked.svg");
 }
 
 /* Snapshots items */
 
 .snapshot-item-thumbnail {
   image-rendering: -moz-crisp-edges;
   background-image: var(--checkerboard-pattern);
   background-size: 12px 12px, 12px 12px;
--- a/devtools/client/themes/commandline.inc.css
+++ b/devtools/client/themes/commandline.inc.css
@@ -47,27 +47,27 @@
 }
 
 .developer-toolbar-button > image {
   margin: auto 10px;
 }
 
 :root[devtoolstheme="light"] #developer-toolbar > toolbarbutton:not([checked=true]) > image,
 :root[devtoolstheme="light"] .gclitoolbar-input-node:not([focused=true])::before  {
-  filter: url("chrome://devtools/skin/themes/images/filters.svg#invert");
+  filter: url("chrome://devtools/skin/images/filters.svg#invert");
 }
 
 .developer-toolbar-button > .toolbarbutton-icon,
 #developer-toolbar-closebutton > .toolbarbutton-icon {
   width: 16px;
   height: 16px;
 }
 
 #developer-toolbar-toolbox-button {
-  list-style-image: url("chrome://devtools/skin/themes/images/toggle-tools.png");
+  list-style-image: url("chrome://devtools/skin/images/toggle-tools.png");
   -moz-image-region: rect(0px, 16px, 16px, 0px);
 }
 
 #developer-toolbar-toolbox-button > label {
   display: none;
 }
 
 #developer-toolbar-toolbox-button:hover {
@@ -79,17 +79,17 @@
 }
 
 #developer-toolbar-toolbox-button[checked=true] {
   -moz-image-region: rect(0px, 64px, 16px, 48px);
 }
 
 @media (min-resolution: 1.1dppx) {
   #developer-toolbar-toolbox-button {
-    list-style-image: url("chrome://devtools/skin/themes/images/toggle-tools@2x.png");
+    list-style-image: url("chrome://devtools/skin/images/toggle-tools@2x.png");
     -moz-image-region: rect(0px, 32px, 32px, 0px);
   }
 
   #developer-toolbar-toolbox-button:hover {
     -moz-image-region: rect(0px, 64px, 32px, 32px);
   }
 
   #developer-toolbar-toolbox-button:hover:active {
@@ -97,28 +97,28 @@
   }
 
   #developer-toolbar-toolbox-button[checked=true] {
     -moz-image-region: rect(0px, 128px, 32px, 96px);
   }
 }
 
 #developer-toolbar-closebutton {
-  list-style-image: url("chrome://devtools/skin/themes/images/close.png");
+  list-style-image: url("chrome://devtools/skin/images/close.png");
   -moz-appearance: none;
   border: none;
   margin: 0 4px;
   min-width: 16px;
   width: 16px;
   opacity: 0.6;
 }
 
 @media (min-resolution: 1.1dppx) {
   #developer-toolbar-closebutton {
-    list-style-image: url("chrome://devtools/skin/themes/images/close@2x.png");
+    list-style-image: url("chrome://devtools/skin/images/close@2x.png");
   }
 }
 
 #developer-toolbar-closebutton > .toolbarbutton-icon {
   /* XXX Buttons have padding in widget/ that we don't want here but can't override with good CSS, so we must
      use evil CSS to give the impression of smaller content */
   margin: -4px;
 }
@@ -185,28 +185,28 @@ html|*#gcli-output-frame {
 
 .gclitoolbar-input-node::before {
   content: "";
   display: inline-block;
   -moz-box-ordinal-group: 0;
   width: 16px;
   height: 16px;
   margin: 0 2px;
-  background-image: url("chrome://devtools/skin/themes/images/commandline-icon.png");
+  background-image: url("chrome://devtools/skin/images/commandline-icon.png");
   background-position: 0 center;
   background-size: 32px 16px;
 }
 
 .gclitoolbar-input-node[focused="true"]::before {
   background-position: -16px center;
 }
 
 @media (min-resolution: 1.1dppx) {
   .gclitoolbar-input-node::before {
-    background-image: url("chrome://devtools/skin/themes/images/commandline-icon@2x.png");
+    background-image: url("chrome://devtools/skin/images/commandline-icon@2x.png");
   }
 }
 
 .gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
   background-color: var(--selection-background);
   color: var(--selection-color);
   text-shadow: none;
 }
--- a/devtools/client/themes/dark-theme.css
+++ b/devtools/client/themes/dark-theme.css
@@ -262,17 +262,17 @@ div.CodeMirror span.eval-text {
   min-height: 1.4em;
 }
 
 /* Twisty and checkbox controls */
 .theme-twisty, .theme-checkbox {
   width: 14px;
   height: 14px;
   background-repeat: no-repeat;
-  background-image: url("chrome://devtools/skin/themes/images/controls.png");
+  background-image: url("chrome://devtools/skin/images/controls.png");
   background-size: 56px 28px;
 }
 
 .theme-twisty {
   cursor: pointer;
   background-position: -28px -14px;
 }
 
@@ -297,61 +297,61 @@ div.CodeMirror span.eval-text {
 }
 
 .theme-checkbox[checked] {
   background-position: -42px 0;
 }
 
 @media (min-resolution: 1.1dppx) {
   .theme-twisty, .theme-checkbox {
-    background-image: url("chrome://devtools/skin/themes/images/controls@2x.png");
+    background-image: url("chrome://devtools/skin/images/controls@2x.png");
   }
 }
 
 /* XUL panel styling (see devtools/client/shared/widgets/Tooltip.js) */
 
 .theme-tooltip-panel .panel-arrowcontent {
   padding: 5px;
   background: rgba(19, 28, 38, .9);
   border-radius: 5px;
   box-shadow: none;
   border: 3px solid #434850;
 }
 
 /* Overring panel arrow images to fit with our light and dark themes */
 
 .theme-tooltip-panel .panel-arrow[side="top"] {
-  list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-vertical-dark.png");
+  list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-dark.png");
   margin-bottom: -4px;
 }
 
 .theme-tooltip-panel .panel-arrow[side="bottom"] {
-  list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-vertical-dark.png");
+  list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-dark.png");
   margin-top: -4px;
 }
 
 .theme-tooltip-panel .panel-arrow[side="left"] {
-  list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-horizontal-dark.png");
+  list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-dark.png");
   margin-right: -4px;
 }
 
 .theme-tooltip-panel .panel-arrow[side="right"] {
-  list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-horizontal-dark.png");
+  list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-dark.png");
   margin-left: -4px;
 }
 
 @media (min-resolution: 1.1dppx) {
   .theme-tooltip-panel .panel-arrow[side="top"],
   .theme-tooltip-panel .panel-arrow[side="bottom"] {
-    list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-vertical-dark@2x.png");
+    list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-dark@2x.png");
   }
 
   .theme-tooltip-panel .panel-arrow[side="left"],
   .theme-tooltip-panel .panel-arrow[side="right"] {
-    list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-horizontal-dark@2x.png");
+    list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-dark@2x.png");
   }
 }
 
 .theme-tooltip-panel .devtools-tooltip-simple-text {
   color: white;
   border-bottom: 1px solid #434850;
 }
 
--- a/devtools/client/themes/light-theme.css
+++ b/devtools/client/themes/light-theme.css
@@ -262,17 +262,17 @@ div.CodeMirror span.eval-text {
 }
 
 /* Twisty and checkbox controls */
 
 .theme-twisty, .theme-checkbox {
   width: 14px;
   height: 14px;
   background-repeat: no-repeat;
-  background-image: url("chrome://devtools/skin/themes/images/controls.png");
+  background-image: url("chrome://devtools/skin/images/controls.png");
   background-size: 56px 28px;
 }
 
 .theme-twisty {
   cursor: pointer;
   background-position: 0 -14px;
 }
 
@@ -306,61 +306,61 @@ div.CodeMirror span.eval-text {
 }
 
 .theme-checkbox[checked] {
   background-position: -14px 0;
 }
 
 @media (min-resolution: 1.1dppx) {
   .theme-twisty, .theme-checkbox {
-    background-image: url("chrome://devtools/skin/themes/images/controls@2x.png");
+    background-image: url("chrome://devtools/skin/images/controls@2x.png");
   }
 }
 
 /* XUL panel styling (see devtools/client/shared/widgets/Tooltip.js) */
 
 .theme-tooltip-panel .panel-arrowcontent {
   padding: 4px;
   background: rgba(255, 255, 255, .9);
   border-radius: 5px;
   box-shadow: none;
   border: 3px solid #d9e1e8;
 }
 
 /* Overring panel arrow images to fit with our light and dark themes */
 
 .theme-tooltip-panel .panel-arrow[side="top"] {
-  list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-vertical-light.png");
+  list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-light.png");
   margin-bottom: -4px;
 }
 
 .theme-tooltip-panel .panel-arrow[side="bottom"] {
-  list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-vertical-light.png");
+  list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-light.png");
   margin-top: -4px;
 }
 
 .theme-tooltip-panel .panel-arrow[side="left"] {
-  list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-horizontal-light.png");
+  list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-light.png");
   margin-right: -4px;
 }
 
 .theme-tooltip-panel .panel-arrow[side="right"] {
-  list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-horizontal-light.png");
+  list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-light.png");
   margin-left: -4px;
 }
 
 @media (min-resolution: 1.1dppx) {
   .theme-tooltip-panel .panel-arrow[side="top"],
   .theme-tooltip-panel .panel-arrow[side="bottom"] {
-    list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-vertical-light@2x.png");
+    list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-light@2x.png");
   }
 
   .theme-tooltip-panel .panel-arrow[side="left"],
   .theme-tooltip-panel .panel-arrow[side="right"] {
-    list-style-image: url("chrome://devtools/skin/themes/tooltip/arrow-horizontal-light@2x.png");
+    list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-light@2x.png");
   }
 }
 
 .theme-tooltip-panel .devtools-tooltip-simple-text {
   color: black;
   border-bottom: 1px solid #d9e1e8;
 }
 
--- a/devtools/client/themes/memory.css
+++ b/devtools/client/themes/memory.css
@@ -50,26 +50,39 @@ html, body, #app, #memory-tool {
    * and aligned vertically in the middle of the container.
    */
   display: flex;
   align-items: center;
 }
 
 .devtools-toolbar > .toolbar-group {
   /**
+   * Flex: contains several children, which need to be laid out horizontally,
+   * and aligned vertically in the middle of the container.
+   */
+  display: flex;
+  align-items: center;
+  flex: 1;
+  /**
    * We want this to be exactly at a --sidebar-width distance from the
    * toolbar's start boundary. A .devtools-toolbar has a 3px start padding
    * and the preceeding .take-snapshot button is exactly 32px.
    */
   margin-inline-start: calc(var(--sidebar-width) - 3px - 32px);
   border-inline-start: 1px solid var(--theme-splitter-color);
   padding-inline-start: 5px;
 }
 
 .devtools-toolbar > .toolbar-group > label {
+  /**
+   * Flex: contains form controls and text, which need to be laid out
+   * horizontally, vertically aligned in the middle of the container.
+   */
+  display: flex;
+  align-items: center;
   margin-inline-end: 5px;
 }
 
 .devtools-toolbar > .toolbar-group > label.breakdown-by > span {
   margin-inline-end: 5px;
 }
 
 .devtools-toolbar > .devtools-button.take-snapshot::before {
@@ -78,16 +91,20 @@ html, body, #app, #memory-tool {
   background-position: 0 center;
 }
 @media (min-resolution: 1.1dppx) {
   .devtools-toolbar > .devtools-button.take-snapshot::before {
     background-image: url(images/command-screenshot@2x.png);
   }
 }
 
+.spacer {
+  flex: 1;
+}
+
 /**
  * TODO bug 1213100
  * Once we figure out how to store invertable buttons (pseudo element like in
  * this case?) we should add a .invertable class to handle this generally,
  * rather than the definitions in toolbars.css.
  *
  * @see bug 1173397 for another inverted related bug
  */
@@ -355,27 +372,27 @@ html, body, #app, #memory-tool {
  */
 
 .error::before {
   content: "";
   display: inline-block;
   width: 12px;
   height: 12px;
   max-height: 12px;
-  background-image: url(chrome://devtools/skin/themes/images/webconsole.svg);
+  background-image: url(chrome://devtools/skin/images/webconsole.svg);
   background-size: 72px 60px;
   background-position: -24px -24px;
   background-repeat: no-repeat;
   margin: 0px;
   margin-top: 2px;
   margin-inline-end: 5px;
 }
 
 .theme-light .error::before {
-  background-image: url(chrome://devtools/skin/themes/images/webconsole.svg#light-icons);
+  background-image: url(chrome://devtools/skin/images/webconsole.svg#light-icons);
 }
 
 /**
  * Frame View components
  */
 
 .focused .frame-link-filename,
 .focused .frame-link-column,
--- a/devtools/client/themes/netmonitor.css
+++ b/devtools/client/themes/netmonitor.css
@@ -397,41 +397,41 @@ box.requests-menu-status[code^="5"] {
 }
 
 /* Network request details */
 
 #details-pane-toggle {
   background: none;
   box-shadow: none;
   border-color: transparent;
-  list-style-image: url("chrome://devtools/skin/themes/images/debugger-collapse.png");
+  list-style-image: url("chrome://devtools/skin/images/debugger-collapse.png");
   -moz-image-region: rect(0px,16px,16px,0px);
 }
 
 #details-pane-toggle > .toolbarbutton-icon {
   width: 16px;
   height: 16px;
 }
 
 #details-pane-toggle[pane-collapsed] {
-  list-style-image: url("chrome://devtools/skin/themes/images/debugger-expand.png");
+  list-style-image: url("chrome://devtools/skin/images/debugger-expand.png");
 }
 
 #details-pane-toggle:active {
   -moz-image-region: rect(0px,32px,16px,16px);
 }
 
 @media (min-resolution: 1.1dppx) {
   #details-pane-toggle {
-    list-style-image: url("chrome://devtools/skin/themes/images/debugger-collapse@2x.png");
+    list-style-image: url("chrome://devtools/skin/images/debugger-collapse@2x.png");
     -moz-image-region: rect(0px,32px,32px,0px);
   }
 
   #details-pane-toggle[pane-collapsed] {
-    list-style-image: url("chrome://devtools/skin/themes/images/debugger-expand@2x.png");
+    list-style-image: url("chrome://devtools/skin/images/debugger-expand@2x.png");
   }
 
   #details-pane-toggle:active {
     -moz-image-region: rect(0px,64px,32px,32px);
   }
 }
 
 /* Network request details tabpanels */
--- a/devtools/client/themes/performance.css
+++ b/devtools/client/themes/performance.css
@@ -711,17 +711,17 @@ menuitem.marker-color-graphs-grey:before
   text-decoration: underline;
 }
 .opt-url.debugger-link {
   cursor: pointer;
 }
 
 .opt-icon::before {
   content: "";
-  background-image: url(chrome://devtools/skin/themes/images/webconsole.svg);
+  background-image: url(chrome://devtools/skin/images/webconsole.svg);
   background-repeat: no-repeat;
   background-size: 72px 60px;
   /* show grey "i" bubble by default */
   background-position: -36px -36px;
   width: 12px;
   height: 12px;
   display: inline-block;
 
@@ -733,17 +733,17 @@ menuitem.marker-color-graphs-grey:before
 }
 description.opt-icon {
   margin: 0px 0px 0px 0px;
 }
 description.opt-icon::before {
   margin: 1px 4px 0px 0px;
 }
 .theme-light .opt-icon::before {
-  background-image: url(chrome://devtools/skin/themes/images/webconsole.svg#light-icons);
+  background-image: url(chrome://devtools/skin/images/webconsole.svg#light-icons);
 }
 .opt-icon[severity=warning]::before {
   background-position: -24px -24px;
 }
 
 ul.frames-list {
   list-style-type: none;
   padding: 0px;
@@ -766,27 +766,27 @@ ul.frames-list li.selected {
  * preference being applied or removed.
  */
 
 /**
  * devtools.performance.ui.experimental
  */
 menuitem.experimental-option::before {
   content: "";
-  background-image: url(chrome://devtools/skin/themes/images/webconsole.svg);
+  background-image: url(chrome://devtools/skin/images/webconsole.svg);
   background-repeat: no-repeat;
   background-size: 72px 60px;
   width: 12px;
   height: 12px;
   display: inline-block;
 
   background-position: -24px -24px;
   margin: 2px 5px 0 0;
   max-height: 12px;
 }
 .theme-light menuitem.experimental-option::before {
-  background-image: url(chrome://devtools/skin/themes/images/webconsole.svg#light-icons);
+  background-image: url(chrome://devtools/skin/images/webconsole.svg#light-icons);
 }
 
 #performance-options-menupopup:not(.experimental-enabled) .experimental-option,
 #performance-options-menupopup:not(.experimental-enabled) .experimental-option::before {
   display: none;
 }
--- a/devtools/client/themes/responsivedesign.inc.css
+++ b/devtools/client/themes/responsivedesign.inc.css
@@ -106,17 +106,17 @@
 .devtools-responsiveui-menulist > .menulist-label-box {
   text-align: center;
 }
 
 .devtools-responsiveui-menulist > .menulist-dropmarker {
   -moz-appearance: none;
   display: -moz-box;
   background-color: transparent;
-  list-style-image: url("chrome://devtools/skin/themes/images/dropmarker.svg");
+  list-style-image: url("chrome://devtools/skin/images/dropmarker.svg");
   -moz-box-align: center;
   border-width: 0;
   min-width: 16px;
 }
 
 .devtools-responsiveui-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-button {
   -moz-appearance: none;
   color: inherit;
@@ -132,99 +132,99 @@
 .devtools-responsiveui-toolbarbutton[type=menu-button] {
   padding: 0 1px;
   -moz-box-align: stretch;
 }
 
 .devtools-responsiveui-toolbarbutton[type=menu] > .toolbarbutton-menu-dropmarker,
 .devtools-responsiveui-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-dropmarker {
   -moz-appearance: none !important;
-  list-style-image: url("chrome://devtools/skin/themes/images/dropmarker.svg");
+  list-style-image: url("chrome://devtools/skin/images/dropmarker.svg");
   -moz-box-align: center;
   padding: 0 3px;
 }
 
 .devtools-responsiveui-toolbar:-moz-locale-dir(ltr) > *:first-child,
 .devtools-responsiveui-toolbar:-moz-locale-dir(rtl) > *:last-child {
   margin-left: 0;
 }
 
 .devtools-responsiveui-close {
-  list-style-image: url("chrome://devtools/skin/themes/images/close.png");
+  list-style-image: url("chrome://devtools/skin/images/close.png");
 }
 
 .devtools-responsiveui-rotate {
-  list-style-image: url("chrome://devtools/skin/themes/images/responsivemode/responsiveui-rotate.png");
+  list-style-image: url("chrome://devtools/skin/images/responsivemode/responsiveui-rotate.png");
 }
 
 @media (min-resolution: 1.1dppx) {
   .devtools-responsiveui-close {
-    list-style-image: url("chrome://devtools/skin/themes/images/close@2x.png");
+    list-style-image: url("chrome://devtools/skin/images/close@2x.png");
   }
 
   .devtools-responsiveui-rotate {
-    list-style-image: url("chrome://devtools/skin/themes/images/responsivemode/responsiveui-rotate@2x.png");
+    list-style-image: url("chrome://devtools/skin/images/responsivemode/responsiveui-rotate@2x.png");
   }
 }
 
 .devtools-responsiveui-touch {
-  list-style-image: url("chrome://devtools/skin/themes/images/responsivemode/responsiveui-touch.png");
+  list-style-image: url("chrome://devtools/skin/images/responsivemode/responsiveui-touch.png");
   -moz-image-region: rect(0px,16px,16px,0px);
 }
 
 .devtools-responsiveui-touch[checked] {
   -moz-image-region: rect(0px,32px,16px,16px);
 }
 
 @media (min-resolution: 1.1dppx) {
   .devtools-responsiveui-touch {
-    list-style-image: url("chrome://devtools/skin/themes/images/responsivemode/responsiveui-touch@2x.png");
+    list-style-image: url("chrome://devtools/skin/images/responsivemode/responsiveui-touch@2x.png");
     -moz-image-region: rect(0px,32px,32px,0px);
   }
 
   .devtools-responsiveui-touch[checked] {
     -moz-image-region: rect(0px,64px,32px,32px);
   }
 }
 
 .devtools-responsiveui-screenshot {
-  list-style-image: url("chrome://devtools/skin/themes/images/responsivemode/responsiveui-screenshot.png");
+  list-style-image: url("chrome://devtools/skin/images/responsivemode/responsiveui-screenshot.png");
 }
 
 @media (min-resolution: 1.1dppx) {
   .devtools-responsiveui-screenshot {
-    list-style-image: url("chrome://devtools/skin/themes/images/responsivemode/responsiveui-screenshot@2x.png");
+    list-style-image: url("chrome://devtools/skin/images/responsivemode/responsiveui-screenshot@2x.png");
   }
 }
 
 .devtools-responsiveui-resizebarV {
   width: 7px;
   height: 24px;
   cursor: ew-resize;
   transform: translate(12px, -12px);
   background-size: cover;
-  background-image: url("chrome://devtools/skin/themes/images/responsivemode/responsive-vertical-resizer.png");
+  background-image: url("chrome://devtools/skin/images/responsivemode/responsive-vertical-resizer.png");
 }
 
 .devtools-responsiveui-resizebarH {
   width: 24px;
   height: 7px;
   cursor: ns-resize;
   transform: translate(-12px, 12px);
   background-size: cover;
-  background-image: url("chrome://devtools/skin/themes/images/responsivemode/responsive-horizontal-resizer.png");
+  background-image: url("chrome://devtools/skin/images/responsivemode/responsive-horizontal-resizer.png");
 }
 
 .devtools-responsiveui-resizehandle {
   width: 16px;
   height: 16px;
   cursor: se-resize;
   transform: translate(12px, 12px);
   background-size: cover;
-  background-image: url("chrome://devtools/skin/themes/images/responsivemode/responsive-se-resizer.png");
+  background-image: url("chrome://devtools/skin/images/responsivemode/responsive-se-resizer.png");
 }
 
 /* FxOS custom mode with additional buttons and phone look'n feel */
 
 /* Hide devtools manual resizer */
 .browserStack[responsivemode].fxos-mode .devtools-responsiveui-resizehandle,
 .browserStack[responsivemode].fxos-mode .devtools-responsiveui-resizebarH,
 .browserStack[responsivemode].fxos-mode .devtools-responsiveui-resizebarV {
@@ -262,17 +262,17 @@
 
   background-image: linear-gradient(to right, #111 11%, #333 56%);
 }
 
 .devtools-responsiveui-home-button {
   -moz-user-focus: ignore;
   width: 40px;
   height: 30px;
-  list-style-image: url("chrome://devtools/skin/themes/images/responsivemode/responsiveui-home.png");
+  list-style-image: url("chrome://devtools/skin/images/responsivemode/responsiveui-home.png");
 }
 
 .devtools-responsiveui-sleep-button {
   -moz-user-focus: ignore;
   -moz-appearance: none;
   /* compensate browserStack top padding */
   margin-top: -67px;
   margin-right: 10px;
@@ -321,19 +321,19 @@
 }
 
 .devtools-responsiveui-volume-down-button {
   border-bottom-left-radius: 12px;
 }
 
 @media (min-resolution: 1.1dppx) {
   .devtools-responsiveui-resizebarV {
-    background-image: url("chrome://devtools/skin/themes/images/responsivemode/responsive-vertical-resizer@2x.png");
+    background-image: url("chrome://devtools/skin/images/responsivemode/responsive-vertical-resizer@2x.png");
   }
 
   .devtools-responsiveui-resizebarH {
-    background-image: url("chrome://devtools/skin/themes/images/responsivemode/responsive-horizontal-resizer@2x.png");
+    background-image: url("chrome://devtools/skin/images/responsivemode/responsive-horizontal-resizer@2x.png");
   }
 
   .devtools-responsiveui-resizehandle {
-    background-image: url("chrome://devtools/skin/themes/images/responsivemode/responsive-se-resizer@2x.png");
+    background-image: url("chrome://devtools/skin/images/responsivemode/responsive-se-resizer@2x.png");
   }
 }
--- a/devtools/client/themes/ruleview.css
+++ b/devtools/client/themes/ruleview.css
@@ -193,28 +193,28 @@
   top: 0;
   left: 0;
   right: 0;
   bottom: 0;
   z-index: -1;
 }
 
 .ruleview-bezierswatch {
-  background: url("chrome://devtools/skin/themes/images/cubic-bezier-swatch.png");
+  background: url("chrome://devtools/skin/images/cubic-bezier-swatch.png");
   background-size: 1em;
 }
 
 .ruleview-filterswatch {
-  background: url("chrome://devtools/skin/themes/images/filter-swatch.svg");
+  background: url("chrome://devtools/skin/images/filter-swatch.svg");
   background-size: 1em;
 }
 
 @media (min-resolution: 1.1dppx) {
   .ruleview-bezierswatch {
-    background: url("chrome://devtools/skin/themes/images/cubic-bezier-swatch@2x.png");
+    background: url("chrome://devtools/skin/images/cubic-bezier-swatch@2x.png");
     background-size: 1em;
   }
 }
 
 .ruleview-overridden {
   text-decoration: line-through;
 }
 
@@ -272,42 +272,42 @@
 }
 
 .ruleview-selector-matched > .ruleview-selector-pseudo-class-lock {
   font-weight: bold;
   color: var(--theme-highlight-orange);
 }
 
 .ruleview-selectorhighlighter {
-  background: url("chrome://devtools/skin/themes/images/vview-open-inspector.png") no-repeat 0 0;
+  background: url("chrome://devtools/skin/images/vview-open-inspector.png") no-repeat 0 0;
   padding-left: 16px;
   margin-left: 5px;
   cursor: pointer;
 }
 
 .ruleview-selectorhighlighter:hover {
   background-position: -32px 0;
 }
 
 .ruleview-selectorhighlighter:active,
 .ruleview-selectorhighlighter.highlighted {
   background-position: -16px 0;
 }
 
 #ruleview-add-rule-button::before {
-  background-image: url("chrome://devtools/skin/themes/images/add.svg");
+  background-image: url("chrome://devtools/skin/images/add.svg");
   background-size: cover;
 }
 
 #pseudo-class-panel-toggle::before {
-  background-image: url("chrome://devtools/skin/themes/images/pseudo-class.svg#pseudo-class");
+  background-image: url("chrome://devtools/skin/images/pseudo-class.svg#pseudo-class");
   background-size: cover;
 }
 #pseudo-class-panel-toggle[checked]::before {
-  background-image: url("chrome://devtools/skin/themes/images/pseudo-class.svg#pseudo-class-checked");
+  background-image: url("chrome://devtools/skin/images/pseudo-class.svg#pseudo-class-checked");
   filter: none !important;
 }
 
 /**
  * These buttons are using opacity instead of background color to indicate
  * the state
  */
 #ruleview-add-rule-button,
--- a/devtools/client/themes/shims/common.css
+++ b/devtools/client/themes/shims/common.css
@@ -2,9 +2,9 @@
  * License, v. 2.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 file only exists to support add-ons which import this style sheet at a
   * specific path.
   */
 
-@import url("chrome://devtools/skin/themes/common.css");
+@import url("chrome://devtools/skin/common.css");
--- a/devtools/client/themes/storage.css
+++ b/devtools/client/themes/storage.css
@@ -10,17 +10,17 @@
   overflow: auto;
 }
 
 #storage-tree {
   background: var(--theme-sidebar-background);
 }
 
 #storage-tree .tree-widget-item[type="store"]:after {
-  background-image: url(chrome://devtools/skin/themes/images/filetypes/store.svg);
+  background-image: url(chrome://devtools/skin/images/filetypes/store.svg);
   background-size: 18px 18px;
   background-position: -1px 0;
 }
 
 /* Columns with date should have a min width so that date is visible */
 #expires, #lastAccessed, #creationTime {
   min-width: 150px;
 }
--- a/devtools/client/themes/toolbars.css
+++ b/devtools/client/themes/toolbars.css
@@ -134,25 +134,25 @@
 
 .devtools-toolbarbutton > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
   -moz-margin-end: 4px;
 }
 
 .devtools-menulist > .menulist-dropmarker {
   -moz-appearance: none;
   display: -moz-box;
-  list-style-image: url("chrome://devtools/skin/themes/images/dropmarker.svg");
+  list-style-image: url("chrome://devtools/skin/images/dropmarker.svg");
   -moz-box-align: center;
   min-width: 16px;
 }
 
 .devtools-toolbarbutton[type=menu] > .toolbarbutton-menu-dropmarker,
 .devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-dropmarker {
   -moz-appearance: none !important;
-  list-style-image: url("chrome://devtools/skin/themes/images/dropmarker.svg");
+  list-style-image: url("chrome://devtools/skin/images/dropmarker.svg");
   -moz-box-align: center;
   padding: 0 3px;
 }
 
 .theme-dark .devtools-menulist,
 .theme-dark .devtools-toolbarbutton {
   border-color: rgba(0, 0, 0, .4); /* Splitters */
 }
@@ -222,17 +222,17 @@
 .theme-light .devtools-toolbarbutton[open=true]:hover,
 .theme-light .devtools-toolbarbutton[open=true]:hover:active,
 .theme-light .devtools-toolbarbutton[checked=true]:hover {
   background: rgba(76, 158, 217, .4); /* Select highlight blue */
 }
 
 .devtools-option-toolbarbutton {
   -moz-appearance: none;
-  list-style-image: url("chrome://devtools/skin/themes/images/tool-options.svg");
+  list-style-image: url("chrome://devtools/skin/images/tool-options.svg");
   background: none;
   opacity: .8;
   border: none;
 }
 
 .devtools-option-toolbarbutton[open=true] {
   opacity: 1;
 }
@@ -429,38 +429,38 @@
   width: 16px;
   height: 16px;
   background-position: 0 0;
   background-repeat: no-repeat;
   background-color: transparent;
 }
 
 .theme-dark .devtools-searchinput-clear {
-  background-image: url("chrome://devtools/skin/themes/images/search-clear-dark.svg");
+  background-image: url("chrome://devtools/skin/images/search-clear-dark.svg");
 }
 
 .theme-light .devtools-searchinput-clear {
-  background-image: url("chrome://devtools/skin/themes/images/search-clear-light.svg");
+  background-image: url("chrome://devtools/skin/images/search-clear-light.svg");
 }
 
 .devtools-style-searchbox-no-match + .devtools-searchinput-clear {
-  background-image: url("chrome://devtools/skin/themes/images/search-clear-failed.svg") !important;
+  background-image: url("chrome://devtools/skin/images/search-clear-failed.svg") !important;
 }
 
 .devtools-searchinput-clear:hover {
   background-position: -16px 0;
 }
 
 .theme-dark .devtools-searchinput > .textbox-input-box > .textbox-search-icons > .textbox-search-clear {
-  list-style-image: url("chrome://devtools/skin/themes/images/search-clear-dark.svg");
+  list-style-image: url("chrome://devtools/skin/images/search-clear-dark.svg");
   -moz-image-region: rect(0, 16px, 16px, 0);
 }
 
 .theme-light .devtools-searchinput > .textbox-input-box > .textbox-search-icons > .textbox-search-clear {
-  list-style-image: url("chrome://devtools/skin/themes/images/search-clear-light.svg");
+  list-style-image: url("chrome://devtools/skin/images/search-clear-light.svg");
   -moz-image-region: rect(0, 16px, 16px, 0);
 }
 
 .devtools-searchinput > .textbox-input-box > .textbox-search-icons > .textbox-search-clear {
   margin-bottom: 0;
 }
 
 .devtools-searchinput > .textbox-input-box > .textbox-search-icons > .textbox-search-clear:hover {
@@ -488,17 +488,17 @@
   opacity: 0.8;
 }
 
 .devtools-closebutton > image {
   width: 16px;
   height: 16px;
   -moz-appearance: none;
   background-size: 16px 16px;
-  background-image: url("chrome://devtools/skin/themes/images/close@2x.png");
+  background-image: url("chrome://devtools/skin/images/close@2x.png");
   background-position: center center;
   background-repeat: no-repeat;
 }
 
 .devtools-closebutton > .toolbarbutton-icon {
   /* XXX Buttons have padding in widget/ that we don't want here but can't override with good CSS, so we must
      use evil CSS to give the impression of smaller content */
   margin: -4px;
@@ -629,39 +629,39 @@
   width: 16px;
   height: 16px;
   background-size: 16px 16px;
   background-position: 0 center;
   background-repeat: no-repeat;
 }
 
 #toolbox-dock-bottom > image {
-  background-image: url("chrome://devtools/skin/themes/images/dock-bottom@2x.png");
+  background-image: url("chrome://devtools/skin/images/dock-bottom@2x.png");
 }
 
 #toolbox-dock-side  > image {
-  background-image: url("chrome://devtools/skin/themes/images/dock-side@2x.png");
+  background-image: url("chrome://devtools/skin/images/dock-side@2x.png");
 }
 
 #toolbox-dock-window > image {
-  background-image: url("chrome://devtools/skin/themes/images/undock@2x.png");
+  background-image: url("chrome://devtools/skin/images/undock@2x.png");
 }
 
 #toolbox-dock-bottom-minimize {
   /* Bug 1177463 - The minimize button is currently hidden until we agree on
      the UI for it, and until bug 1173849 is fixed too. */
   display: none;
 }
 
 #toolbox-dock-bottom-minimize > image {
-  background-image: url("chrome://devtools/skin/themes/images/dock-bottom-minimize@2x.png");
+  background-image: url("chrome://devtools/skin/images/dock-bottom-minimize@2x.png");
 }
 
 #toolbox-dock-bottom-minimize.minimized > image {
-  background-image: url("chrome://devtools/skin/themes/images/dock-bottom-maximize@2x.png");
+  background-image: url("chrome://devtools/skin/images/dock-bottom-maximize@2x.png");
 }
 
 #toolbox-dock-window,
 #toolbox-dock-bottom,
 #toolbox-dock-side {
   opacity: 0.8;
 }
 
@@ -726,103 +726,103 @@
 .command-button[checked=true] > image {
   background-position: -48px center;
 }
 .command-button[open=true] > image {
   background-position: 0 center;
 }
 
 #command-button-paintflashing > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-paintflashing.png");
+  background-image: url("chrome://devtools/skin/images/command-paintflashing.png");
 }
 
 #command-button-screenshot > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-screenshot.png");
+  background-image: url("chrome://devtools/skin/images/command-screenshot.png");
 }
 
 #command-button-responsive > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-responsivemode.png");
+  background-image: url("chrome://devtools/skin/images/command-responsivemode.png");
 }
 
 #command-button-tilt > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-tilt.png");
+  background-image: url("chrome://devtools/skin/images/command-tilt.png");
 }
 
 #command-button-scratchpad > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-scratchpad.png");
+  background-image: url("chrome://devtools/skin/images/command-scratchpad.png");
   background-size: 48px 16px;
 }
 
 #command-button-pick > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-pick.png");
+  background-image: url("chrome://devtools/skin/images/command-pick.png");
 }
 
 #command-button-frames > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-frames.png");
+  background-image: url("chrome://devtools/skin/images/command-frames.png");
 }
 
 #command-button-splitconsole > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-console.png");
+  background-image: url("chrome://devtools/skin/images/command-console.png");
 }
 
 #command-button-eyedropper > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-eyedropper.png");
+  background-image: url("chrome://devtools/skin/images/command-eyedropper.png");
 }
 
 #command-button-rulers > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-rulers.png");
+  background-image: url("chrome://devtools/skin/images/command-rulers.png");
 }
 
 #command-button-measure > image {
-  background-image: url("chrome://devtools/skin/themes/images/command-measure.png");
+  background-image: url("chrome://devtools/skin/images/command-measure.png");
 }
 
 @media (min-resolution: 1.1dppx) {
   #command-button-paintflashing > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-paintflashing@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-paintflashing@2x.png");
   }
 
   #command-button-screenshot > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-screenshot@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-screenshot@2x.png");
   }
 
   #command-button-responsive > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-responsivemode@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-responsivemode@2x.png");
   }
 
   #command-button-tilt > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-tilt@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-tilt@2x.png");
   }
 
   #command-button-scratchpad > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-scratchpad@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-scratchpad@2x.png");
   }
 
   #command-button-pick > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-pick@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-pick@2x.png");
   }
 
   #command-button-frames > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-frames@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-frames@2x.png");
   }
 
   #command-button-splitconsole > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-console@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-console@2x.png");
   }
 
   #command-button-eyedropper > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-eyedropper@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-eyedropper@2x.png");
   }
 
   #command-button-rulers > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-rulers@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-rulers@2x.png");
   }
 
   #command-button-measure > image {
-    background-image: url("chrome://devtools/skin/themes/images/command-measure@2x.png");
+    background-image: url("chrome://devtools/skin/images/command-measure@2x.png");
   }
 }
 
 /* Tabs */
 
 .devtools-tabbar {
   -moz-appearance: none;
   min-height: 24px;
--- a/devtools/client/themes/webaudioeditor.css
+++ b/devtools/client/themes/webaudioeditor.css
@@ -74,20 +74,20 @@ g.edgeLabel tspan {
   fill: var(--theme-toolbar-background);
 }
 
 /**
  * Bypassed Nodes
  */
 
 .theme-light .nodes g.bypassed rect {
-  fill: url(chrome://devtools/skin/themes/images/filters.svg#bypass-light);
+  fill: url(chrome://devtools/skin/images/filters.svg#bypass-light);
 }
 .theme-dark .nodes g.bypassed rect {
-  fill: url(chrome://devtools/skin/themes/images/filters.svg#bypass-dark);
+  fill: url(chrome://devtools/skin/images/filters.svg#bypass-dark);
 }
 .nodes g.bypassed.selected rect {
   stroke: var(--theme-selection-background);
 }
 
 /*
 .nodes g.bypassed text {
   opacity: 0.8;
--- a/devtools/client/themes/webconsole.css
+++ b/devtools/client/themes/webconsole.css
@@ -39,27 +39,27 @@ a {
   margin: 3px 6px 0 0;
   padding: 0 4px;
   height: 1em;
   align-self: flex-start;
 }
 
 .message > .icon::before {
   content: "";
-  background-image: url(chrome://devtools/skin/themes/images/webconsole.svg);
+  background-image: url(chrome://devtools/skin/images/webconsole.svg);
   background-position: 12px 12px;
   background-repeat: no-repeat;
   background-size: 72px 60px;
   width: 12px;
   height: 12px;
   display: inline-block;
 }
 
 .theme-light .message > .icon::before {
-  background-image: url(chrome://devtools/skin/themes/images/webconsole.svg#light-icons);
+  background-image: url(chrome://devtools/skin/images/webconsole.svg#light-icons);
 }
 
 .message > .message-body-wrapper {
   flex: 1 1 100%;
   margin: 3px;
 }
 
 .message-body-wrapper .table-widget-body {
@@ -378,25 +378,25 @@ a {
 .jsterm-complete-node {
   color: var(--theme-comment);
 }
 
 .jsterm-input-node {
   /* Always allow scrolling on input - it auto expands in js by setting height,
      but don't want it to get bigger than the window. 24px = toolbar height. */
   max-height: calc(90vh - 24px);
-  background-image: -moz-image-rect(url("chrome://devtools/skin/themes/images/commandline-icon.png"), 0, 32, 16, 16);
+  background-image: -moz-image-rect(url("chrome://devtools/skin/images/commandline-icon.png"), 0, 32, 16, 16);
   background-repeat: no-repeat;
   background-size: 16px 16px;
   color: var(--theme-content-color1);
 }
 
 @media (min-resolution: 1.1dppx) {
   .jsterm-input-node {
-    background-image: -moz-image-rect(url('chrome://devtools/skin/themes/images/commandline-icon@2x.png'), 0, 64, 32, 32);
+    background-image: -moz-image-rect(url('chrome://devtools/skin/images/commandline-icon@2x.png'), 0, 64, 32, 32);
   }
 }
 
 :-moz-any(.jsterm-input-node,
           .jsterm-complete-node) > .textbox-input-box > .textbox-textarea {
   overflow-x: hidden;
 }
 
@@ -514,17 +514,17 @@ a {
 
 .cm-s-mozilla a[class]:hover,
 .cm-s-mozilla a[class]:focus {
   text-decoration: underline;
 }
 
 /* Open DOMNode in inspector button */
 .open-inspector {
-  background: url("chrome://devtools/skin/themes/images/vview-open-inspector.png") no-repeat 0 0;
+  background: url("chrome://devtools/skin/images/vview-open-inspector.png") no-repeat 0 0;
   padding-left: 16px;
   margin-left: 5px;
   cursor: pointer;
 }
 
 .elementNode:hover .open-inspector,
 .open-inspector:hover {
   background-position: -32px 0;
--- a/devtools/client/themes/widgets.css
+++ b/devtools/client/themes/widgets.css
@@ -636,25 +636,25 @@
 /* Custom configurable/enumerable/writable or frozen/sealed/extensible
  * variables and properties */
 
 .variable-or-property[non-enumerable]:not([self]):not([pseudo-item]) > .title > .name {
   opacity: 0.6;
 }
 
 .variable-or-property-non-writable-icon {
-  background: url("chrome://devtools/skin/themes/images/vview-lock.png") no-repeat;
+  background: url("chrome://devtools/skin/images/vview-lock.png") no-repeat;
   background-size: cover;
   width: 16px;
   height: 16px;
 }
 
 @media (min-resolution: 1.1dppx) {
   .variable-or-property-non-writable-icon {
-    background-image: url("chrome://devtools/skin/themes/images/vview-lock@2x.png");
+    background-image: url("chrome://devtools/skin/images/vview-lock@2x.png");
   }
 }
 
 .variable-or-property-frozen-label,
 .variable-or-property-sealed-label,
 .variable-or-property-non-extensible-label {
   height: 16px;
   -moz-padding-end: 4px;
@@ -736,77 +736,77 @@
   -moz-padding-start: 4px;
   -moz-border-start: 1px dotted #000;
   color: #080;
 }
 
 /* Variables and properties editing */
 
 .variables-view-delete {
-  background: url("chrome://devtools/skin/themes/images/vview-delete.png");
+  background: url("chrome://devtools/skin/images/vview-delete.png");
   background-size: cover;
   width: 16px;
   height: 16px;
 }
 
 @media (min-resolution: 1.1dppx) {
   .variables-view-delete {
-    background-image: url("chrome://devtools/skin/themes/images/vview-delete@2x.png");
+    background-image: url("chrome://devtools/skin/images/vview-delete@2x.png");
   }
 }
 
 .variables-view-delete:hover {
   background-position: 16px;
 }
 
 .variables-view-delete:active {
   background-position: 32px;
 }
 
 .variable-or-property:focus > .title > .variables-view-delete {
   background-position: 0px;
 }
 
 .variables-view-edit {
-  background: url("chrome://devtools/skin/themes/images/vview-edit.png");
+  background: url("chrome://devtools/skin/images/vview-edit.png");
   background-size: cover;
   width: 16px;
   height: 16px;
   cursor: pointer;
 }
 
 @media (min-resolution: 1.1dppx) {
   .variables-view-edit {
-    background-image: url("chrome://devtools/skin/themes/images/vview-edit@2x.png");
+    background-image: url("chrome://devtools/skin/images/vview-edit@2x.png");
   }
 }
 
 .variables-view-edit:hover {
   background-position: 16px;
 }
 
 .variables-view-edit:active {
   background-position: 32px;
 }
 
 .variable-or-property:focus > .title > .variables-view-edit {
   background-position: 0px;
 }
 
 .variables-view-open-inspector {
-  background: url("chrome://devtools/skin/themes/images/vview-open-inspector.png");
+  background: url("chrome://devtools/skin/images/vview-open-inspector.png");
   background-size: cover;
   width: 16px;
   height: 16px;
   cursor: pointer;
 }
 
 @media (min-resolution: 1.1dppx) {
   .variables-view-open-inspector {
-    background-image: url("chrome://devtools/skin/themes/images/vview-open-inspector@2x.png");
+    background-image: url("chrome://devtools/skin/images/vview-open-inspector@2x.png");
   }
 }
 
 .variables-view-open-inspector:hover {
   background-position: 16px;
 }
 
 .variables-view-open-inspector:active {
@@ -1369,17 +1369,17 @@
 /* Twisties */
 .tree-widget-item::before {
   content: "";
   width: 14px;
   height: 14px;
   float: left;
   margin: 3px 2px -3px;
   background-repeat: no-repeat;
-  background-image: url("chrome://devtools/skin/themes/images/controls.png");
+  background-image: url("chrome://devtools/skin/images/controls.png");
   background-size: 56px 28px;
   cursor: pointer;
   background-position: -28px -14px;
 }
 
 .tree-widget-item:-moz-locale-dir(rtl)::before {
   float: right;
   transform: scaleX(-1);
@@ -1427,17 +1427,17 @@
   }
   to {
     max-height: 500px;
   }
 }
 
 @media (min-resolution: 1.1dppx) {
   .tree-widget-item:before {
-    background-image: url("chrome://devtools/skin/themes/images/controls@2x.png");
+    background-image: url("chrome://devtools/skin/images/controls@2x.png");
   }
 }
 
 /* Indentation of child items in the tree */
 
 /* For level > 6 */
 .tree-widget-item[level] + ul > li > .tree-widget-item {
   -moz-padding-start: 98px;
@@ -1497,23 +1497,23 @@
 }
 
 .theme-light .tree-widget-item.theme-selected[type]::after,
 .theme-dark .tree-widget-item[type]::after {
   filter: invert(1);
 }
 
 .tree-widget-item[type="dir"]::after {
-  background-image: url(chrome://devtools/skin/themes/images/filetypes/dir-close.svg);
+  background-image: url(chrome://devtools/skin/images/filetypes/dir-close.svg);
   background-position: 2px 0;
   background-size: auto 16px;
   width: 20px;
 }
 
 .tree-widget-item[type="dir"][expanded]:not([empty])::after {
-  background-image: url(chrome://devtools/skin/themes/images/filetypes/dir-open.svg);
+  background-image: url(chrome://devtools/skin/images/filetypes/dir-open.svg);
 }
 
 .tree-widget-item[type="url"]::after {
-  background-image: url(chrome://devtools/skin/themes/images/filetypes/globe.svg);
+  background-image: url(chrome://devtools/skin/images/filetypes/globe.svg);
   background-size: auto 18px;
   width: 18px;
 }
--- a/devtools/client/tilt/tilt-utils.js
+++ b/devtools/client/tilt/tilt-utils.js
@@ -605,10 +605,10 @@ TiltUtils.clearCache = function TU_clear
 TiltUtils.bindObjectFunc(TiltUtils.Output);
 TiltUtils.bindObjectFunc(TiltUtils.Preferences);
 TiltUtils.bindObjectFunc(TiltUtils.L10n);
 TiltUtils.bindObjectFunc(TiltUtils.DOM);
 
 // set the necessary string bundle
 XPCOMUtils.defineLazyGetter(TiltUtils.L10n, "stringBundle", function() {
   return Services.strings.createBundle(
-    "chrome://browser/locale/devtools/tilt.properties");
+    "chrome://devtools/locale/tilt.properties");
 });
--- a/devtools/client/webaudioeditor/includes.js
+++ b/devtools/client/webaudioeditor/includes.js
@@ -13,17 +13,17 @@ Cu.import("resource://devtools/client/fr
 const { loader, require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
 
 var { console } = Cu.import("resource://gre/modules/Console.jsm", {});
 var { EventTarget } = require("sdk/event/target");
 
 const { Task } = Cu.import("resource://gre/modules/Task.jsm", {});
 const { Class } = require("sdk/core/heritage");
 const EventEmitter = require("devtools/shared/event-emitter");
-const STRINGS_URI = "chrome://browser/locale/devtools/webaudioeditor.properties"
+const STRINGS_URI = "chrome://devtools/locale/webaudioeditor.properties"
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 const Telemetry = require("devtools/client/shared/telemetry");
 const telemetry = new Telemetry();
 const DevToolsUtils = require("devtools/shared/DevToolsUtils");
 
 loader.lazyRequireGetter(this, "LineGraphWidget",
   "devtools/client/shared/widgets/LineGraphWidget");
 
--- a/devtools/client/webaudioeditor/webaudioeditor.xul
+++ b/devtools/client/webaudioeditor/webaudioeditor.xul
@@ -1,19 +1,19 @@
 <?xml version="1.0"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/webaudioeditor.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/webaudioeditor.css" type="text/css"?>
 <!DOCTYPE window [
-  <!ENTITY % debuggerDTD SYSTEM "chrome://browser/locale/devtools/webaudioeditor.dtd">
+  <!ENTITY % debuggerDTD SYSTEM "chrome://devtools/locale/webaudioeditor.dtd">
   %debuggerDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <script type="application/javascript;version=1.8"
           src="chrome://devtools/content/shared/theme-switching.js"/>
 
--- a/devtools/client/webconsole/console-output.js
+++ b/devtools/client/webconsole/console-output.js
@@ -18,17 +18,17 @@ loader.lazyImporter(this, "PluralForm", 
 loader.lazyRequireGetter(this, "promise");
 loader.lazyRequireGetter(this, "TableWidget", "devtools/client/shared/widgets/TableWidget", true);
 loader.lazyRequireGetter(this, "ObjectClient", "devtools/shared/client/main", true);
 
 const Heritage = require("sdk/core/heritage");
 const URI = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
 const XHTML_NS = "http://www.w3.org/1999/xhtml";
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
-const STRINGS_URI = "chrome://browser/locale/devtools/webconsole.properties";
+const STRINGS_URI = "chrome://devtools/locale/webconsole.properties";
 
 const WebConsoleUtils = require("devtools/shared/webconsole/utils").Utils;
 const l10n = new WebConsoleUtils.l10n(STRINGS_URI);
 
 const MAX_STRING_GRIP_LENGTH = 36;
 const ELLIPSIS = Services.prefs.getComplexValue("intl.ellipsis", Ci.nsIPrefLocalizedString).data;
 
 // Constants for compatibility with the Web Console output implementation before
--- a/devtools/client/webconsole/hudservice.js
+++ b/devtools/client/webconsole/hudservice.js
@@ -18,17 +18,17 @@ loader.lazyGetter(this, "Telemetry", () 
 loader.lazyGetter(this, "WebConsoleFrame", () => require("devtools/client/webconsole/webconsole").WebConsoleFrame);
 loader.lazyImporter(this, "gDevTools", "resource://devtools/client/framework/gDevTools.jsm");
 loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm");
 loader.lazyRequireGetter(this, "DebuggerServer", "devtools/server/main", true);
 loader.lazyRequireGetter(this, "DebuggerClient", "devtools/shared/client/main", true);
 loader.lazyGetter(this, "showDoorhanger", () => require("devtools/client/shared/doorhanger").showDoorhanger);
 loader.lazyRequireGetter(this, "sourceUtils", "devtools/client/shared/source-utils");
 
-const STRINGS_URI = "chrome://browser/locale/devtools/webconsole.properties";
+const STRINGS_URI = "chrome://devtools/locale/webconsole.properties";
 var l10n = new WebConsoleUtils.l10n(STRINGS_URI);
 
 const BROWSER_CONSOLE_WINDOW_FEATURES = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
 
 // The preference prefix for all of the Browser Console filters.
 const BROWSER_CONSOLE_FILTER_PREFS_PREFIX = "devtools.browserconsole.filter.";
 
 var gHudId = 0;
--- a/devtools/client/webconsole/test/head.js
+++ b/devtools/client/webconsole/test/head.js
@@ -31,17 +31,17 @@ const CATEGORY_SERVER = 7;
 const SEVERITY_ERROR = 0;
 const SEVERITY_WARNING = 1;
 const SEVERITY_INFO = 2;
 const SEVERITY_LOG = 3;
 
 // The indent of a console group in pixels.
 const GROUP_INDENT = 12;
 
-const WEBCONSOLE_STRINGS_URI = "chrome://browser/locale/devtools/" +
+const WEBCONSOLE_STRINGS_URI = "chrome://devtools/locale/" +
                                "webconsole.properties";
 var WCUL10n = new WebConsoleUtils.l10n(WEBCONSOLE_STRINGS_URI);
 
 DevToolsUtils.testing = true;
 
 function asyncTest(generator) {
   return () => {
     Task.spawn(generator).then(finishTest);
--- a/devtools/client/webconsole/webconsole.js
+++ b/devtools/client/webconsole/webconsole.js
@@ -25,17 +25,17 @@ loader.lazyRequireGetter(this, "Environm
 loader.lazyRequireGetter(this, "ObjectClient", "devtools/shared/client/main", true);
 loader.lazyRequireGetter(this, "system", "devtools/shared/system");
 loader.lazyRequireGetter(this, "Timers", "sdk/timers");
 loader.lazyImporter(this, "VariablesView", "resource://devtools/client/shared/widgets/VariablesView.jsm");
 loader.lazyImporter(this, "VariablesViewController", "resource://devtools/client/shared/widgets/VariablesViewController.jsm");
 loader.lazyImporter(this, "PluralForm", "resource://gre/modules/PluralForm.jsm");
 loader.lazyImporter(this, "gDevTools", "resource://devtools/client/framework/gDevTools.jsm");
 
-const STRINGS_URI = "chrome://browser/locale/devtools/webconsole.properties";
+const STRINGS_URI = "chrome://devtools/locale/webconsole.properties";
 var l10n = new WebConsoleUtils.l10n(STRINGS_URI);
 
 const XHTML_NS = "http://www.w3.org/1999/xhtml";
 
 const MIXED_CONTENT_LEARN_MORE = "https://developer.mozilla.org/docs/Security/MixedContent";
 
 const TRACKING_PROTECTION_LEARN_MORE = "https://developer.mozilla.org/Firefox/Privacy/Tracking_Protection";
 
--- a/devtools/client/webconsole/webconsole.xul
+++ b/devtools/client/webconsole/webconsole.xul
@@ -1,22 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <!DOCTYPE window [
-<!ENTITY % webConsoleDTD SYSTEM "chrome://browser/locale/devtools/webConsole.dtd">
+<!ENTITY % webConsoleDTD SYSTEM "chrome://devtools/locale/webConsole.dtd">
 %webConsoleDTD;
 ]>
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css"
+<?xml-stylesheet href="chrome://devtools/skin/common.css"
                  type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/widgets.css"
+<?xml-stylesheet href="chrome://devtools/skin/widgets.css"
                  type="text/css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/webconsole.css"
+<?xml-stylesheet href="chrome://devtools/skin/webconsole.css"
                  type="text/css"?>
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         id="devtools-webconsole"
         macanimationtype="document"
         fullscreenbutton="true"
         title="&window.title;"
         browserConsoleTitle="&browserConsole.title;"
--- a/devtools/client/webide/content/addons.js
+++ b/devtools/client/webide/content/addons.js
@@ -1,17 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var Cu = Components.utils;
 const {Services} = Cu.import("resource://gre/modules/Services.jsm");
 const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
 const {GetAvailableAddons, ForgetAddonsList} = require("devtools/client/webide/modules/addons");
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 window.addEventListener("load", function onLoad() {
   window.removeEventListener("load", onLoad);
   document.querySelector("#aboutaddons").onclick = function() {
     let browserWin = Services.wm.getMostRecentWindow("navigator:browser");
     browserWin.BrowserOpenAddonsMgr("addons://list/extension");
   }
   document.querySelector("#close").onclick = CloseUI;
--- a/devtools/client/webide/content/addons.xhtml
+++ b/devtools/client/webide/content/addons.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://webide/skin/addons.css" type="text/css"/>
--- a/devtools/client/webide/content/details.xhtml
+++ b/devtools/client/webide/content/details.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/details.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://webide/content/details.js"></script>
--- a/devtools/client/webide/content/devicepreferences.xhtml
+++ b/devtools/client/webide/content/devicepreferences.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://webide/skin/config-view.css" type="text/css"/>
--- a/devtools/client/webide/content/devicesettings.xhtml
+++ b/devtools/client/webide/content/devicesettings.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://webide/skin/config-view.css" type="text/css"/>
--- a/devtools/client/webide/content/logs.xhtml
+++ b/devtools/client/webide/content/logs.xhtml
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
-    <link rel="stylesheet" href="chrome://devtools/skin/themes/common.css" type="text/css"/>
+    <link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://webide/skin/logs.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"></script>
     <script type="application/javascript;version=1.8" src="logs.js"></script>
   </head>
   <body>
 
     <div id="controls">
       <a id="close">&deck_close;</a>
--- a/devtools/client/webide/content/monitor.xhtml
+++ b/devtools/client/webide/content/monitor.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
--- a/devtools/client/webide/content/newapp.xul
+++ b/devtools/client/webide/content/newapp.xul
@@ -1,16 +1,16 @@
 <?xml version="1.0"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE window [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <?xml-stylesheet href="chrome://global/skin/global.css"?>
 <?xml-stylesheet href="chrome://webide/skin/newapp.css"?>
 
 <dialog id="webide:newapp" title="&newAppWindowTitle;"
   width="600" height="400"
--- a/devtools/client/webide/content/permissionstable.xhtml
+++ b/devtools/client/webide/content/permissionstable.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://webide/skin/permissionstable.css" type="text/css"/>
--- a/devtools/client/webide/content/prefs.xhtml
+++ b/devtools/client/webide/content/prefs.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://webide/content/prefs.js"></script>
--- a/devtools/client/webide/content/project-listing.xhtml
+++ b/devtools/client/webide/content/project-listing.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/panel-listing.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://webide/content/project-listing.js"></script>
--- a/devtools/client/webide/content/runtime-listing.xhtml
+++ b/devtools/client/webide/content/runtime-listing.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/panel-listing.css" type="text/css"/>
     <script type="application/javascript;version=1.8" src="chrome://webide/content/runtime-listing.js"></script>
--- a/devtools/client/webide/content/runtimedetails.js
+++ b/devtools/client/webide/content/runtimedetails.js
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var Cu = Components.utils;
 const {Services} = Cu.import("resource://gre/modules/Services.jsm");
 const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
 const {AppManager} = require("devtools/client/webide/modules/app-manager");
 const {Connection} = require("devtools/shared/client/connection-manager");
 const {RuntimeTypes} = require("devtools/client/webide/modules/runtimes");
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 const UNRESTRICTED_HELP_URL = "https://developer.mozilla.org/docs/Tools/WebIDE/Running_and_debugging_apps#Unrestricted_app_debugging_%28including_certified_apps_main_process_etc.%29";
 
 window.addEventListener("load", function onLoad() {
   window.removeEventListener("load", onLoad);
   document.querySelector("#close").onclick = CloseUI;
   document.querySelector("#devtools-check button").onclick = EnableCertApps;
   document.querySelector("#adb-check button").onclick = RootADB;
--- a/devtools/client/webide/content/runtimedetails.xhtml
+++ b/devtools/client/webide/content/runtimedetails.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://webide/skin/runtimedetails.css" type="text/css"/>
--- a/devtools/client/webide/content/simulator.js
+++ b/devtools/client/webide/content/simulator.js
@@ -7,17 +7,17 @@ var Cu = Components.utils;
 const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
 const { GetDevices, GetDeviceString } = require("devtools/client/shared/devices");
 const { Services } = Cu.import("resource://gre/modules/Services.jsm");
 const { Simulators, Simulator } = require("devtools/client/webide/modules/simulators");
 const EventEmitter = require('devtools/shared/event-emitter');
 const promise = require("promise");
 const utils = require("devtools/client/webide/modules/utils");
 
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 var SimulatorEditor = {
 
   // Available Firefox OS Simulator addons (key: `addon.id`).
   _addons: {},
 
   // Available device simulation profiles (key: `device.name`).
   _devices: {},
--- a/devtools/client/webide/content/simulator.xhtml
+++ b/devtools/client/webide/content/simulator.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://webide/skin/simulator.css" type="text/css"/>
--- a/devtools/client/webide/content/webide.js
+++ b/devtools/client/webide/content/webide.js
@@ -21,17 +21,17 @@ const ProjectEditor = require("devtools/
 const {GetAvailableAddons} = require("devtools/client/webide/modules/addons");
 const {getJSON} = require("devtools/client/shared/getjson");
 const utils = require("devtools/client/webide/modules/utils");
 const Telemetry = require("devtools/client/shared/telemetry");
 const {RuntimeScanners} = require("devtools/client/webide/modules/runtimes");
 const {showDoorhanger} = require("devtools/client/shared/doorhanger");
 const {Simulators} = require("devtools/client/webide/modules/simulators");
 
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 const HTML = "http://www.w3.org/1999/xhtml";
 const HELP_URL = "https://developer.mozilla.org/docs/Tools/WebIDE/Troubleshooting";
 
 const MAX_ZOOM = 1.4;
 const MIN_ZOOM = 0.6;
 
 const MS_PER_DAY = 86400000;
--- a/devtools/client/webide/content/webide.xul
+++ b/devtools/client/webide/content/webide.xul
@@ -1,23 +1,23 @@
 <?xml version="1.0"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE window [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 
 <?xml-stylesheet href="chrome://global/skin/global.css"?>
-<?xml-stylesheet href="chrome://devtools/skin/themes/common.css"?>
+<?xml-stylesheet href="chrome://devtools/skin/common.css"?>
 <?xml-stylesheet href="chrome://webide/skin/webide.css"?>
 
 <window id="webide" onclose="return UI.canCloseProject();"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         xmlns:html="http://www.w3.org/1999/xhtml"
         title="&windowTitle;"
         windowtype="devtools:webide"
         macanimationtype="document"
--- a/devtools/client/webide/content/wifi-auth.xhtml
+++ b/devtools/client/webide/content/wifi-auth.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!DOCTYPE html [
-  <!ENTITY % webideDTD SYSTEM "chrome://browser/locale/devtools/webide.dtd" >
+  <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
   %webideDTD;
 ]>
 
 <html id="devtools:wifi-auth" xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf8"/>
     <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
     <link rel="stylesheet" href="chrome://webide/skin/wifi-auth.css" type="text/css"/>
--- a/devtools/client/webide/modules/app-manager.js
+++ b/devtools/client/webide/modules/app-manager.js
@@ -20,21 +20,21 @@ const {getPreferenceFront} = require("de
 const {getSettingsFront} = require("devtools/server/actors/settings");
 const {setTimeout} = require("sdk/timers");
 const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
 const {RuntimeScanners, RuntimeTypes} = require("devtools/client/webide/modules/runtimes");
 const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {});
 const Telemetry = require("devtools/client/shared/telemetry");
 const {ProjectBuilding} = require("./build");
 
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 var AppManager = exports.AppManager = {
 
-  DEFAULT_PROJECT_ICON: "chrome://devtools/skin/themes/webide/default-app-icon.png",
+  DEFAULT_PROJECT_ICON: "chrome://webide/skin/default-app-icon.png",
   DEFAULT_PROJECT_NAME: "--",
 
   _initialized: false,
 
   init: function() {
     if (this._initialized) {
       return;
     }
--- a/devtools/client/webide/modules/app-validator.js
+++ b/devtools/client/webide/modules/app-validator.js
@@ -5,17 +5,17 @@
 
 var {Ci,Cu,CC} = require("chrome");
 const promise = require("devtools/shared/deprecated-sync-thenables");
 
 const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
 const Services = require("Services");
 const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
 var XMLHttpRequest = CC("@mozilla.org/xmlextras/xmlhttprequest;1");
-var strings = Services.strings.createBundle("chrome://browser/locale/devtools/app-manager.properties");
+var strings = Services.strings.createBundle("chrome://devtools/locale/app-manager.properties");
 
 function AppValidator({ type, location }) {
   this.type = type;
   this.location = location;
   this.errors = [];
   this.warnings = [];
 }
 
--- a/devtools/client/webide/modules/config-view.js
+++ b/devtools/client/webide/modules/config-view.js
@@ -1,17 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const {Cu} = require("chrome");
 
 const EventEmitter = require("devtools/shared/event-emitter");
 const {Services} = Cu.import("resource://gre/modules/Services.jsm");
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 var ConfigView;
 
 module.exports = ConfigView = function(window) {
   EventEmitter.decorate(this);
   this._doc = window.document;
   this._keys = [];
   return this;
--- a/devtools/client/webide/modules/project-list.js
+++ b/devtools/client/webide/modules/project-list.js
@@ -8,17 +8,17 @@ const Services = require("Services");
 const {AppProjects} = require("devtools/client/webide/modules/app-projects");
 const {AppManager} = require("devtools/client/webide/modules/app-manager");
 const promise = require("promise");
 const EventEmitter = require("devtools/shared/event-emitter");
 const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
 const utils = require("devtools/client/webide/modules/utils");
 const Telemetry = require("devtools/client/shared/telemetry");
 
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 var ProjectList;
 
 module.exports = ProjectList = function(win, parentWindow) {
   EventEmitter.decorate(this);
   this._doc = win.document;
   this._UI = parentWindow.UI;
   this._parentWindow = parentWindow;
--- a/devtools/client/webide/modules/runtime-list.js
+++ b/devtools/client/webide/modules/runtime-list.js
@@ -7,17 +7,17 @@ const {Cu} = require("chrome");
 const {Services} = Cu.import("resource://gre/modules/Services.jsm");
 const {AppManager} = require("devtools/client/webide/modules/app-manager");
 const EventEmitter = require("devtools/shared/event-emitter");
 const {RuntimeScanners, WiFiScanner} = require("devtools/client/webide/modules/runtimes");
 const {Devices} = Cu.import("resource://devtools/shared/apps/Devices.jsm");
 const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
 const utils = require("devtools/client/webide/modules/utils");
 
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 var RuntimeList;
 
 module.exports = RuntimeList = function(window, parentWindow) {
   EventEmitter.decorate(this);
   this._doc = window.document;
   this._UI = parentWindow.UI;
   this._Cmds = parentWindow.Cmds;
--- a/devtools/client/webide/modules/runtimes.js
+++ b/devtools/client/webide/modules/runtimes.js
@@ -11,17 +11,17 @@ const {Simulators} = require("devtools/c
 const discovery = require("devtools/shared/discovery/discovery");
 const EventEmitter = require("devtools/shared/event-emitter");
 const promise = require("promise");
 loader.lazyRequireGetter(this, "AuthenticationResult",
   "devtools/shared/security/auth", true);
 loader.lazyRequireGetter(this, "DevToolsUtils",
   "devtools/shared/DevToolsUtils");
 
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 /**
  * Runtime and Scanner API
  *
  * |RuntimeScanners| maintains a set of |Scanner| objects that produce one or
  * more |Runtime|s to connect to.  Add-ons can extend the set of known runtimes
  * by registering additional |Scanner|s that emit them.
  *
--- a/devtools/client/webide/modules/utils.js
+++ b/devtools/client/webide/modules/utils.js
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const { Cc, Cu, Ci } = require("chrome");
 const { FileUtils } = Cu.import("resource://gre/modules/FileUtils.jsm", {});
 const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
-const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
+const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 function doesFileExist (location) {
   let file = new FileUtils.File(location);
   return file.exists();
 }
 exports.doesFileExist = doesFileExist;
 
 function _getFile (location, ...pickerParams) {
--- a/devtools/client/webide/test/test_app_validator.html
+++ b/devtools/client/webide/test/test_app_validator.html
@@ -21,17 +21,17 @@
     const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
 
     const {AppValidator} = require("devtools/client/webide/modules/app-validator");
     const {Services} = Cu.import("resource://gre/modules/Services.jsm");
     const nsFile = Components.Constructor("@mozilla.org/file/local;1",
                                            "nsILocalFile", "initWithPath");
     const cr = Cc["@mozilla.org/chrome/chrome-registry;1"]
                  .getService(Ci.nsIChromeRegistry);
-    const strings = Services.strings.createBundle("chrome://browser/locale/devtools/app-manager.properties");
+    const strings = Services.strings.createBundle("chrome://devtools/locale/app-manager.properties");
     let httpserver, origin;
 
     window.onload = function() {
       SimpleTest.waitForExplicitFinish();
 
       httpserver = new HttpServer();
       httpserver.start(-1);
       origin = "http://localhost:" + httpserver.identity.primaryPort + "/";
--- a/devtools/server/actors/csscoverage.js
+++ b/devtools/server/actors/csscoverage.js
@@ -29,17 +29,17 @@ loader.lazyGetter(this, "CssLogic", () =
 const CSSRule = Ci.nsIDOMCSSRule;
 
 const MAX_UNUSED_RULES = 10000;
 
 /**
  * Allow: let foo = l10n.lookup("csscoverageFoo");
  */
 const l10n = exports.l10n = {
-  _URI: "chrome://global/locale/devtools/csscoverage.properties",
+  _URI: "chrome://devtools-shared/locale/csscoverage.properties",
   lookup: function(msg) {
     if (this._stringBundle == null) {
       this._stringBundle = Services.strings.createBundle(this._URI);
     }
     return this._stringBundle.GetStringFromName(msg);
   }
 };
 
--- a/devtools/server/actors/webconsole.js
+++ b/devtools/server/actors/webconsole.js
@@ -2075,17 +2075,17 @@ NetworkEventActor.prototype =
       this._longStringActors.add(aContent.text);
     }
 
     let packet = {
       from: this.actorID,
       type: "networkEventUpdate",
       updateType: "responseContent",
       mimeType: aContent.mimeType,
-      contentSize: aContent.text.length,
+      contentSize: aContent.size,
       transferredSize: aContent.transferredSize,
       discardResponseBody: aDiscardedResponseBody,
     };
 
     this.conn.send(packet);
   },
 
   /**
--- a/devtools/server/tests/mochitest/test_css-logic-media-queries.html
+++ b/devtools/server/tests/mochitest/test_css-logic-media-queries.html
@@ -36,17 +36,17 @@ Test that css-logic handles media-querie
     SimpleTest.waitForExplicitFinish();
 
     let div = document.querySelector("div");
     let cssLogic = new CssLogic();
     cssLogic.highlight(div);
     cssLogic.processMatchedSelectors();
 
     let _strings = Services.strings
-      .createBundle("chrome://global/locale/devtools/styleinspector.properties");
+      .createBundle("chrome://devtools-shared/locale/styleinspector.properties");
 
     let inline = _strings.GetStringFromName("rule.sourceInline");
 
     let source1 = inline + ":12";
     let source2 = inline + ":19 @media screen and (min-width: 1px)";
     is(cssLogic._matchedRules[0][0].source, source1,
       "rule.source gives correct output for rule 1");
     is(cssLogic._matchedRules[1][0].source, source2,
--- a/devtools/shared/gcli/commands/highlight.js
+++ b/devtools/shared/gcli/commands/highlight.js
@@ -7,17 +7,17 @@
 const l10n = require("gcli/l10n");
 require("devtools/server/actors/inspector");
 const {
   BoxModelHighlighter,
   HighlighterEnvironment
 } = require("devtools/server/actors/highlighters");
 
 XPCOMUtils.defineLazyGetter(this, "nodesSelected", function() {
-  return Services.strings.createBundle("chrome://global/locale/devtools/gclicommands.properties");
+  return Services.strings.createBundle("chrome://devtools-shared/locale/gclicommands.properties");
 });
 XPCOMUtils.defineLazyModuleGetter(this, "PluralForm", "resource://gre/modules/PluralForm.jsm");
 
 // How many maximum nodes can be highlighted in parallel
 const MAX_HIGHLIGHTED_ELEMENTS = 100;
 
 // Store the environment object used to create highlighters so it can be
 // destroyed later.
--- a/devtools/shared/gcli/source/lib/gcli/l10n.js
+++ b/devtools/shared/gcli/source/lib/gcli/l10n.js
@@ -21,17 +21,17 @@ var Ci = require('chrome').Ci;
 var Cu = require('chrome').Cu;
 
 var prefSvc = Cc['@mozilla.org/preferences-service;1']
                         .getService(Ci.nsIPrefService);
 var prefBranch = prefSvc.getBranch(null).QueryInterface(Ci.nsIPrefBranch);
 
 var Services = Cu.import('resource://gre/modules/Services.jsm', {}).Services;
 var stringBundle = Services.strings.createBundle(
-        'chrome://global/locale/devtools/gclicommands.properties');
+        'chrome://devtools-shared/locale/gclicommands.properties');
 
 /**
  * Lookup a string in the GCLI string bundle
  */
 exports.lookup = function(name) {
   try {
     return stringBundle.GetStringFromName(name);
   }
--- a/devtools/shared/gcli/source/lib/gcli/util/l10n.js
+++ b/devtools/shared/gcli/source/lib/gcli/util/l10n.js
@@ -18,17 +18,17 @@
 
 var Cu = require('chrome').Cu;
 
 var XPCOMUtils = Cu.import('resource://gre/modules/XPCOMUtils.jsm', {}).XPCOMUtils;
 var Services = Cu.import('resource://gre/modules/Services.jsm', {}).Services;
 
 var imports = {};
 XPCOMUtils.defineLazyGetter(imports, 'stringBundle', function () {
-  return Services.strings.createBundle('chrome://global/locale/devtools/gcli.properties');
+  return Services.strings.createBundle('chrome://devtools-shared/locale/gcli.properties');
 });
 
 /*
  * Not supported when embedded - we're doing things the Mozilla way not the
  * require.js way.
  */
 exports.registerStringsSource = function(modulePath) {
   throw new Error('registerStringsSource is not available in mozilla');
--- a/devtools/shared/heapsnapshot/HeapAnalysesClient.js
+++ b/devtools/shared/heapsnapshot/HeapAnalysesClient.js
@@ -67,16 +67,19 @@ HeapAnalysesClient.prototype.readHeapSna
  *        An object specifying options of this worker request.
  *        - {Boolean} asTreeNode
  *          Whether or not the census is returned as a CensusTreeNode,
  *          or just a breakdown report. Defaults to false.
  *          @see `devtools/shared/heapsnapshot/census-tree-node.js`
  *        - {Boolean} asInvertedTreeNode
  *          Whether or not the census is returned as an inverted
  *          CensusTreeNode. Defaults to false.
+ *        - {String} filter
+ *          A filter string to prune the resulting tree with. Only applies if
+ *          either asTreeNode or asInvertedTreeNode is true.
  *
  * @returns Promise<census report|CensusTreeNode>
  *          The report generated by the given census breakdown, or
  *          a CensusTreeNode generated by the given census breakdown
  *          if `asTreeNode` is true.
  */
 HeapAnalysesClient.prototype.takeCensus = function (snapshotFilePath,
                                                     censusOptions,
--- a/devtools/shared/heapsnapshot/HeapAnalysesWorker.js
+++ b/devtools/shared/heapsnapshot/HeapAnalysesWorker.js
@@ -31,25 +31,27 @@ workerHelper.createTask(self, "readHeapS
 /**
  * @see HeapAnalysesClient.prototype.takeCensus
  */
 workerHelper.createTask(self, "takeCensus", ({ snapshotFilePath, censusOptions, requestOptions }) => {
   if (!snapshots[snapshotFilePath]) {
     throw new Error(`No known heap snapshot for '${snapshotFilePath}'`);
   }
 
-  let report = snapshots[snapshotFilePath].takeCensus(censusOptions);
+  const report = snapshots[snapshotFilePath].takeCensus(censusOptions);
 
-  if (requestOptions.asTreeNode) {
-    return censusReportToCensusTreeNode(censusOptions.breakdown, report);
-  } else if (requestOptions.asInvertedTreeNode) {
-    return censusReportToCensusTreeNode(censusOptions.breakdown, report, { invert: true });
-  } else {
-    return report;
+  if (requestOptions.asTreeNode || requestOptions.asInvertedTreeNode) {
+    const opts = { filter: requestOptions.filter || null };
+    if (requestOptions.asInvertedTreeNode) {
+      opts.invert = true;
+    }
+    return censusReportToCensusTreeNode(censusOptions.breakdown, report, opts);
   }
+
+  return report;
 });
 
 /**
  * @see HeapAnalysesClient.prototype.takeCensusDiff
  */
 workerHelper.createTask(self, "takeCensusDiff", request => {
   const {
     firstSnapshotFilePath,
--- a/devtools/shared/heapsnapshot/census-tree-node.js
+++ b/devtools/shared/heapsnapshot/census-tree-node.js
@@ -269,18 +269,18 @@ function CensusTreeNodeVisitor() {
 
   // To avoid unnecessary allocations, we reuse the same out parameter object
   // passed to `makeCensusTreeNodeSubTree` every time we call it.
   this._outParams = {
     top: null,
     bottom: null,
   };
 
-  // The stack of `CensusTreeNodeCache`s that we use to aggregate many SavedFrame stacks
-  // into a single CensusTreeNode tree.
+  // The stack of `CensusTreeNodeCache`s that we use to aggregate many
+  // SavedFrame stacks into a single CensusTreeNode tree.
   this._cacheStack = [new CensusTreeNodeCache()];
 }
 
 CensusTreeNodeVisitor.prototype = Object.create(Visitor);
 
 /**
  * Create the CensusTreeNode subtree for this sub-report and link it to the
  * parent CensusTreeNode.
@@ -379,17 +379,17 @@ CensusTreeNodeVisitor.prototype.root = f
   return this._root;
 };
 
 /**
  * Create a single, uninitialized CensusTreeNode.
  *
  * @param {null|String|SavedFrame} name
  */
-function CensusTreeNode (name) {
+function CensusTreeNode(name) {
   this.name = name;
   this.bytes = 0;
   this.totalBytes = 0;
   this.count = 0;
   this.totalCount = 0;
   this.children = undefined;
   this.id = ++INC;
   this.parent = undefined;
@@ -427,16 +427,57 @@ function compareByTotal(node1, node2) {
 function compareBySelf(node1, node2) {
   return node2.bytes      - node1.bytes
       || node2.count      - node1.count
       || node2.totalBytes - node1.totalBytes
       || node2.totalCount - node1.totalCount;
 }
 
 /**
+ * Given a parent cache value from a tree we are building and a child node from
+ * a tree we are basing the new tree off of, if we already have a corresponding
+ * node in the parent's children cache, merge this node's counts with
+ * it. Otherwise, create the corresponding node, add it to the parent's children
+ * cache, and create the parent->child edge.
+ *
+ * @param {CensusTreeNodeCacheValue} parentCachevalue
+ * @param {CensusTreeNode} node
+ *
+ * @returns {CensusTreeNodeCacheValue}
+ *          The new or extant child node's corresponding cache value.
+ */
+function insertOrMergeNode(parentCacheValue, node) {
+  if (!parentCacheValue.children) {
+    parentCacheValue.children = new CensusTreeNodeCache();
+  }
+
+  let val = CensusTreeNodeCache.lookupNode(parentCacheValue.children, node);
+
+  if (val) {
+    val.node.count += node.count;
+    val.node.totalCount += node.totalCount;
+    val.node.bytes += node.bytes;
+    val.node.totalBytes += node.totalBytes;
+  } else {
+    val = new CensusTreeNodeCacheValue();
+
+    val.node = new CensusTreeNode(node.name);
+    val.node.count = node.count;