Merge m-c to b2g-inbound.
authorRyan VanderMeulen <ryanvm@gmail.com>
Thu, 05 Dec 2013 17:55:47 -0500
changeset 174819 8bba470af6efa8babd9efbe70c1ddf95f2eeeae1
parent 174818 861db7473c26c79b08820215b83af0b7ef376734 (current diff)
parent 174708 2831368a5e052002621ae52c314c2c37ec346650 (diff)
child 174820 f8a0e6c157f7c73fde9c958b18212608bd28d8d9
push id445
push userffxbld
push dateMon, 10 Mar 2014 22:05:19 +0000
treeherdermozilla-release@dc38b741b04e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone28.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge m-c to b2g-inbound.
browser/devtools/debugger/debugger-panel.js
browser/devtools/framework/toolbox.css
browser/devtools/netmonitor/netmonitor-panel.js
browser/themes/linux/devtools/common.css
browser/themes/linux/devtools/toolbox.css
browser/themes/osx/devtools/common.css
browser/themes/osx/devtools/toolbox.css
browser/themes/shared/devtools/common.inc.css
browser/themes/windows/devtools/common.css
browser/themes/windows/devtools/toolbox.css
dom/contacts/Makefile.in
mobile/android/base/tests/testAwesomebarSwipes.java
mobile/android/base/tests/testTabHistory.java
other-licenses/snappy/Makefile.in
toolkit/library/winvccorlib/dummyvccorlib.cpp
toolkit/library/winvccorlib/moz.build
toolkit/themes/osx/global/media/volumeThumb.png
toolkit/themes/osx/global/media/volumeThumb@2x.png
toolkit/themes/windows/global/media/volumeThumb.png
--- a/CLOBBER
+++ b/CLOBBER
@@ -13,9 +13,9 @@
 #          |               |
 #          O <-- Clobber   O  <-- Clobber
 #
 # Note: The description below will be part of the error message shown to users.
 #
 # Modifying this file will now automatically clobber the buildbot machines \o/
 #
 
-Bug 933136 - Windows webidl changes.
+Bug 585122 - New file added for xpcshell test not always being copied.
--- a/accessible/src/base/nsAccessibilityService.cpp
+++ b/accessible/src/base/nsAccessibilityService.cpp
@@ -1001,18 +1001,18 @@ nsAccessibilityService::GetOrCreateAcces
       if (deckFrame && deckFrame->GetSelectedBox() != frame) {
         if (aIsSubtreeHidden)
           *aIsSubtreeHidden = true;
 
         return nullptr;
       }
     }
 
-    // Elements may implement nsIAccessibleProvider via XBL. This allows them to
-    // say what kind of accessible to create.
+    // XBL bindings may use @role attribute to point the accessible type
+    // they belong to.
     newAcc = CreateAccessibleByType(content, document);
 
     // Any XUL box can be used as tabpanel, make sure we create a proper
     // accessible for it.
     if (!newAcc && aContext->IsXULTabpanels() &&
         content->GetParent() == aContext->GetContent()) {
       nsIAtom* frameType = frame->GetType();
       if (frameType == nsGkAtoms::boxFrame ||
--- a/accessible/src/base/nsAccessibilityService.h
+++ b/accessible/src/base/nsAccessibilityService.h
@@ -173,18 +173,17 @@ private:
   bool Init();
 
   /**
    * Shutdowns accessibility service.
    */
   void Shutdown();
 
   /**
-   * Create accessible for the element implementing nsIAccessibleProvider
-   * interface.
+   * Create accessible for the element having XBL bindings.
    */
   already_AddRefed<Accessible>
     CreateAccessibleByType(nsIContent* aContent, DocAccessible* aDoc);
 
   /**
    * Create accessible for HTML node by tag name.
    */
   already_AddRefed<Accessible>
--- a/accessible/src/generic/Accessible.cpp
+++ b/accessible/src/generic/Accessible.cpp
@@ -226,17 +226,17 @@ Accessible::Name(nsString& aName)
       aName.CompressWhitespace();
       return eNameFromTooltip;
     }
   } else if (mContent->IsSVG()) {
     // If user agents need to choose among multiple ‘desc’ or ‘title’ elements
     // for processing, the user agent shall choose the first one.
     for (nsIContent* childElm = mContent->GetFirstChild(); childElm;
          childElm = childElm->GetNextSibling()) {
-      if (childElm->IsSVG(nsGkAtoms::title)) {
+      if (childElm->IsSVG(nsGkAtoms::desc)) {
         nsTextEquivUtils::AppendTextEquivFromContent(this, childElm, &aName);
         return eNameFromTooltip;
       }
     }
   }
 
   if (nameFlag != eNoNameOnPurpose)
     aName.SetIsVoid(true);
@@ -289,17 +289,17 @@ Accessible::Description(nsString& aDescr
       // Keep the Name() method logic.
       if (mContent->IsHTML()) {
         mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::title, aDescription);
       } else if (mContent->IsXUL()) {
         mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::tooltiptext, aDescription);
       } else if (mContent->IsSVG()) {
         for (nsIContent* childElm = mContent->GetFirstChild(); childElm;
              childElm = childElm->GetNextSibling()) {
-          if (childElm->IsSVG(nsGkAtoms::title)) {
+          if (childElm->IsSVG(nsGkAtoms::desc)) {
             nsTextEquivUtils::AppendTextEquivFromContent(this, childElm,
                                                          &aDescription);
             break;
           }
         }
       }
 
       if (!aDescription.IsEmpty()) {
@@ -2484,17 +2484,17 @@ Accessible::NativeName(nsString& aName)
   if (mContent->IsXUL())
     return GetXULName(aName);
 
   if (mContent->IsSVG()) {
     // If user agents need to choose among multiple ‘desc’ or ‘title’ elements
     // for processing, the user agent shall choose the first one.
     for (nsIContent* childElm = mContent->GetFirstChild(); childElm;
          childElm = childElm->GetNextSibling()) {
-      if (childElm->IsSVG(nsGkAtoms::desc)) {
+      if (childElm->IsSVG(nsGkAtoms::title)) {
         nsTextEquivUtils::AppendTextEquivFromContent(this, childElm, &aName);
         return eNameOK;
       }
     }
   }
 
   return eNameOK;
 }
--- a/accessible/src/generic/HyperTextAccessible.cpp
+++ b/accessible/src/generic/HyperTextAccessible.cpp
@@ -1216,16 +1216,20 @@ HyperTextAccessible::TextBounds(int32_t 
     return nsIntRect();
 
   nsIntRect bounds;
   int32_t prevOffset = GetChildOffset(childIdx);
   int32_t offset1 = startOffset - prevOffset;
 
   while (childIdx < ChildCount()) {
     nsIFrame* frame = GetChildAt(childIdx)->GetFrame();
+    if (!frame) {
+      NS_NOTREACHED("No frame for a child!");
+      continue;
+    }
 
     childIdx++;
     int32_t nextOffset = GetChildOffset(childIdx);
     if (nextOffset >= endOffset) {
       bounds.UnionRect(bounds, GetBoundsInFrame(frame, offset1,
                                                 endOffset - prevOffset));
       break;
     }
--- a/accessible/src/jsat/AccessFu.jsm
+++ b/accessible/src/jsat/AccessFu.jsm
@@ -739,16 +739,17 @@ var Input = {
         break;
       case 'swipeup1':
         this.contextAction('backward');
         break;
       case 'swipedown1':
         this.contextAction('forward');
         break;
       case 'exploreend1':
+      case 'dwellend1':
         this.activateCurrent(null, true);
         break;
       case 'swiperight2':
         this.sendScrollMessage(-1, true);
         break;
       case 'swipedown2':
         this.sendScrollMessage(-1);
         break;
--- a/accessible/src/jsat/TouchAdapter.jsm
+++ b/accessible/src/jsat/TouchAdapter.jsm
@@ -387,16 +387,18 @@ TouchPoint.prototype = {
     // To be considered a tap/dwell...
     if ((this.distanceTraveled / this.dpi) < TouchAdapter.TAP_MAX_RADIUS) { // Didn't travel
       if (duration < TouchAdapter.DWELL_THRESHOLD) {
         // Mark it as done so we don't use this touch for another gesture.
         this.finish();
         return {type: 'tap', x: this.startX, y: this.startY};
       } else if (!this.done && duration == TouchAdapter.DWELL_THRESHOLD) {
         return {type: 'dwell', x: this.startX, y: this.startY};
+      } else if (this.done && duration > TouchAdapter.DWELL_THRESHOLD) {
+        return {type: 'dwellend', x: this.startX, y: this.startY};
       }
     }
 
     // To be considered a swipe...
     if (duration <= TouchAdapter.SWIPE_MAX_DURATION && // Quick enough
         (directDistance / this.dpi) >= TouchAdapter.SWIPE_MIN_DISTANCE && // Traveled far
         (directDistance * 1.2) >= this.distanceTraveled) { // Direct enough
 
--- a/accessible/src/xul/XULTabAccessible.h
+++ b/accessible/src/xul/XULTabAccessible.h
@@ -70,20 +70,17 @@ public:
     { mType = eXULTabpanelsType; }
 
   // Accessible
   virtual a11y::role NativeRole();
 };
 
 
 /**
- * A tabpanel object, child elements of xul:tabpanels element. Note,the object
- * is created from nsAccessibilityService::GetAccessibleForDeckChildren()
- * method and we do not use nsIAccessibleProvider interface here because
- * all children of xul:tabpanels element acts as xul:tabpanel element.
+ * A tabpanel object, child elements of xul:tabpanels element.
  *
  * XXX: we need to move the class logic into generic class since
  * for example we do not create instance of this class for XUL textbox used as
  * a tabpanel.
  */
 class XULTabpanelAccessible : public AccessibleWrap
 {
 public:
--- a/accessible/tests/mochitest/actions/test_media.html
+++ b/accessible/tests/mochitest/actions/test_media.html
@@ -60,17 +60,17 @@ https://bugzilla.mozilla.org/show_bug.cg
       //////////////////////////////////////////////////////////////////////////
       // test actions of audio controls
 
       todo(false, "Focus test are disabled until bug 494175 is fixed.");
 
       var audioElm = getAccessible("audio");
       var playBtn = audioElm.firstChild;
       var scrubber = playBtn.nextSibling.nextSibling.nextSibling;
-      var muteBtn = audioElm.lastChild;
+      var muteBtn = audioElm.lastChild.previousSibling;
 
       var actions = [
         {
           ID: muteBtn,
           actionName: "press",
           events: CLICK_EVENTS,
           eventSeq: [
      //       new focusChecker(muteBtn),
--- a/accessible/tests/mochitest/name/test_svg.html
+++ b/accessible/tests/mochitest/name/test_svg.html
@@ -39,17 +39,17 @@
     Mozilla Bug 459357
   </a>
   <p id="display"></p>
   <div id="content" style="display: none"></div>
   <pre id="test">
   </pre>
 
   <svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="svg1">
-    <title>A description</title>
-    <desc>A name</desc>
+    <title>A name</title>
+    <desc>A description</title>
   </svg>
 
   <svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="svg2">
-    <title>A tooltip</title>
+    <desc>A tooltip</desc>
   </svg>
 </body>
 </html>
--- a/accessible/tests/mochitest/tree/test_formctrl.xul
+++ b/accessible/tests/mochitest/tree/test_formctrl.xul
@@ -1,16 +1,24 @@
 <?xml version="1.0"?>
 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
                  type="text/css"?>
 
+<!-- Firefox toolbar -->
+<?xml-stylesheet href="chrome://browser/content/browser.css"
+                 type="text/css"?>
+
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         title="Accessible XUL checkbox and radio hierarchy tests">
 
+  <!-- Firefox toolbar -->
+  <script type="application/javascript"
+          src="chrome://browser/content/browser.js"/>
+
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
 
   <script type="application/javascript"
           src="../common.js" />
   <script type="application/javascript"
           src="../role.js" />
 
@@ -71,16 +79,19 @@
             name: "hello",
             children: [ ]
           }
         ]
       };
 
       testAccessibleTree("toolbar2", accTree);
 
+      if (!SEAMONKEY)
+        testAccessibleTree("tb_customizable", { TOOLBAR: [] });
+
       SimpleTest.finish()
     }
 
     SimpleTest.waitForExplicitFinish();
     addA11yLoadEvent(doTest);
   ]]>
   </script>
 
@@ -105,13 +116,15 @@
         <radio label="radio2"/>
       </radiogroup>
       <toolbar id="toolbar" toolbarname="My toolbar">
         <toolbarbutton id="button1" label="hello"/>
       </toolbar>
       <toolbar id="toolbar2" toolbarname="2nd" aria-label="My second toolbar">
         <toolbarbutton id="button2" label="hello"/>
       </toolbar>
+
+      <toolbar id="tb_customizable" customizable="true"/>
     </vbox>
   </hbox>
 
 </window>
 
--- a/accessible/tests/mochitest/tree/test_media.html
+++ b/accessible/tests/mochitest/tree/test_media.html
@@ -44,17 +44,21 @@ https://bugzilla.mozilla.org/show_bug.cg
             role: ROLE_SLIDER,
             //name: "0:00 of 0:02 elapsed",
             children: []
           },
           { // mute button
             role: ROLE_PUSHBUTTON,
             name: "Mute",
             children: []
-          }
+          },
+          { // slider of volume bar
+            role: ROLE_SLIDER,
+            children: []
+          },
         ]
       };
       testAccessibleTree("audio", accTree);
 
       todo(false, "Enable name test for slider. Fail on Linux.");
       SimpleTest.finish();
     }
 
--- a/b2g/chrome/content/touchcontrols.css
+++ b/b2g/chrome/content/touchcontrols.css
@@ -49,17 +49,17 @@
 }
 
 /*
  * Normally the button bar has fullscreen spacer play spacer mute, but if
  * this is an audio control rather than a video control, the fullscreen button
  * is hidden by videocontrols.xml, and that alters the position of the
  * play button.  This workaround moves it back to center.
  */
-.controlBar.audio .playButton {
+.controlBar.audio-only .playButton {
   transform: translateX(28px);
 }
 
 .playButton[paused="true"] {
   background: url("chrome://browser/content/images/play-hdpi.png") no-repeat center;
 }
 
 .muteButton {
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1085,17 +1085,17 @@ pref("devtools.errorconsole.enabled", fa
 pref("devtools.toolbar.enabled", true);
 pref("devtools.toolbar.visible", false);
 pref("devtools.gcli.allowSet", false);
 pref("devtools.commands.dir", "");
 
 // Enable the app manager
 pref("devtools.appmanager.enabled", true);
 pref("devtools.appmanager.lastTab", "help");
-pref("devtools.appmanager.manifestEditor.enabled", false);
+pref("devtools.appmanager.manifestEditor.enabled", true);
 
 // Toolbox preferences
 pref("devtools.toolbox.footer.height", 250);
 pref("devtools.toolbox.sidebar.width", 500);
 pref("devtools.toolbox.host", "bottom");
 pref("devtools.toolbox.selectedTool", "webconsole");
 pref("devtools.toolbox.toolbarSpec", '["paintflashing toggle","tilt toggle","scratchpad","resize toggle"]');
 pref("devtools.toolbox.sideEnabled", true);
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -4189,18 +4189,18 @@ function onViewToolbarsPopupShowing(aEve
 
   let addToPanel = popup.querySelector(".customize-context-addToPanel");
   let removeFromToolbar = popup.querySelector(".customize-context-removeFromToolbar");
   // View -> Toolbars menu doesn't have the addToPanel or removeFromToolbar items.
   if (!addToPanel || !removeFromToolbar) {
     return;
   }
 
-  // The explicitOriginalTarget can be a nested child element of a toolbaritem.
-  let toolbarItem = aEvent.explicitOriginalTarget;
+  // triggerNode can be a nested child element of a toolbaritem.
+  let toolbarItem = popup.triggerNode;
 
   if (toolbarItem && toolbarItem.localName == "toolbarpaletteitem") {
     toolbarItem = toolbarItem.firstChild;
   } else {
     while (toolbarItem && toolbarItem.parentNode) {
       let parent = toolbarItem.parentNode;
       if ((parent.classList && parent.classList.contains("customization-target")) ||
           parent.localName == "toolbarpaletteitem" ||
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -1245,45 +1245,42 @@
         <parameter name="aCharset"/>
         <parameter name="aPostData"/>
         <parameter name="aLoadInBackground"/>
         <parameter name="aAllowThirdPartyFixup"/>
         <body>
           <![CDATA[
             var aFromExternal;
             var aRelatedToCurrent;
-            var aIsUTF8;
             var aDisableMCB;
             if (arguments.length == 2 &&
                 typeof arguments[1] == "object" &&
                 !(arguments[1] instanceof Ci.nsIURI)) {
               let params = arguments[1];
               aReferrerURI          = params.referrerURI;
               aCharset              = params.charset;
               aPostData             = params.postData;
               aLoadInBackground     = params.inBackground;
               aAllowThirdPartyFixup = params.allowThirdPartyFixup;
               aFromExternal         = params.fromExternal;
               aRelatedToCurrent     = params.relatedToCurrent;
-              aIsUTF8               = params.isUTF8;
               aDisableMCB           = params.disableMCB;
             }
 
             var bgLoad = (aLoadInBackground != null) ? aLoadInBackground :
                          Services.prefs.getBoolPref("browser.tabs.loadInBackground");
             var owner = bgLoad ? null : this.selectedTab;
             var tab = this.addTab(aURI, {
                                   referrerURI: aReferrerURI,
                                   charset: aCharset,
                                   postData: aPostData,
                                   ownerTab: owner,
                                   allowThirdPartyFixup: aAllowThirdPartyFixup,
                                   fromExternal: aFromExternal,
                                   relatedToCurrent: aRelatedToCurrent,
-                                  isUTF8: aIsUTF8,
                                   disableMCB: aDisableMCB});
             if (!bgLoad)
               this.selectedTab = tab;
 
             return tab;
          ]]>
         </body>
       </method>
@@ -1422,31 +1419,29 @@
         <parameter name="aOwner"/>
         <parameter name="aAllowThirdPartyFixup"/>
         <body>
           <![CDATA[
             const NS_XUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
             var aFromExternal;
             var aRelatedToCurrent;
             var aSkipAnimation;
-            var aIsUTF8;
             var aDisableMCB;
             if (arguments.length == 2 &&
                 typeof arguments[1] == "object" &&
                 !(arguments[1] instanceof Ci.nsIURI)) {
               let params = arguments[1];
               aReferrerURI          = params.referrerURI;
               aCharset              = params.charset;
               aPostData             = params.postData;
               aOwner                = params.ownerTab;
               aAllowThirdPartyFixup = params.allowThirdPartyFixup;
               aFromExternal         = params.fromExternal;
               aRelatedToCurrent     = params.relatedToCurrent;
               aSkipAnimation        = params.skipAnimation;
-              aIsUTF8               = params.isUTF8;
               aDisableMCB           = params.disableMCB;
             }
 
             // if we're adding tabs, we're past interrupt mode, ditch the owner
             if (this.mCurrentTab.owner)
               this.mCurrentTab.owner = null;
 
             var t = document.createElementNS(NS_XUL, "tab");
@@ -1605,18 +1600,16 @@
               if (aURI && gInitialPages.indexOf(aURI) == -1)
                 b.userTypedValue = aURI;
 
               let flags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
               if (aAllowThirdPartyFixup)
                 flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
               if (aFromExternal)
                 flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FROM_EXTERNAL;
-              if (aIsUTF8)
-                flags |= Ci.nsIWebNavigation.LOAD_FLAGS_URI_IS_UTF8;
               if (aDisableMCB)
                 flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_MIXED_CONTENT;
               try {
                 b.loadURIWithFlags(aURI, flags, aReferrerURI, aCharset, aPostData);
               } catch (ex) {
                 Cu.reportError(ex);
               }
             }
--- a/browser/base/content/urlbarBindings.xml
+++ b/browser/base/content/urlbarBindings.xml
@@ -295,20 +295,16 @@
             function loadCurrent() {
               let flags = Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
               // Pass LOAD_FLAGS_DISALLOW_INHERIT_OWNER to prevent any loads from
               // inheriting the currently loaded document's principal, unless this
               // URL is marked as safe to inherit (e.g. came from a bookmark
               // keyword).
               if (!mayInheritPrincipal)
                 flags |= Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_OWNER;
-              // If the value wasn't typed, we know that we decoded the value as
-              // UTF-8 (see losslessDecodeURI)
-              if (!this.valueIsTyped)
-                flags |= Ci.nsIWebNavigation.LOAD_FLAGS_URI_IS_UTF8;
               gBrowser.loadURIWithFlags(url, flags, null, null, postData);
             }
 
             // Focus the content area before triggering loads, since if the load
             // occurs in a new tab, we want focus to be restored to the content
             // area when the current tab is re-selected.
             gBrowser.selectedBrowser.focus();
 
@@ -336,18 +332,16 @@
                 if (matchLastLocationChange) {
                   loadCurrent();
                 }
               } else {
                 this.handleRevert();
                 let params = { allowThirdPartyFixup: true,
                                postData: postData,
                                initiatingDoc: document };
-                if (!this.valueIsTyped)
-                  params.isUTF8 = true;
                 openUILinkIn(url, where, params);
               }
             } else {
               if (matchLastLocationChange) {
                 loadCurrent();
               }
             }
           }.bind(this));
@@ -489,17 +483,17 @@
             if (remainder != "" && remainder[0] != "/")
               return selectedVal;
           }
 
           let uriFixup = Cc["@mozilla.org/docshell/urifixup;1"].getService(Ci.nsIURIFixup);
 
           let uri;
           try {
-            uri = uriFixup.createFixupURI(inputVal, Ci.nsIURIFixup.FIXUP_FLAG_USE_UTF8);
+            uri = uriFixup.createFixupURI(inputVal, Ci.nsIURIFixup.FIXUP_FLAG_NONE);
           } catch (e) {}
           if (!uri)
             return selectedVal;
 
           // Only copy exposable URIs
           try {
             uri = uriFixup.createExposableURI(uri);
           } catch (ex) {}
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -211,18 +211,16 @@ function openLinkIn(url, where, params) 
   var aAllowThirdPartyFixup = params.allowThirdPartyFixup;
   var aPostData             = params.postData;
   var aCharset              = params.charset;
   var aReferrerURI          = params.referrerURI;
   var aRelatedToCurrent     = params.relatedToCurrent;
   var aDisableMCB           = params.disableMCB;
   var aInBackground         = params.inBackground;
   var aDisallowInheritPrincipal = params.disallowInheritPrincipal;
-  // Currently, this parameter works only for where=="tab" or "current"
-  var aIsUTF8               = params.isUTF8;
   var aInitiatingDoc        = params.initiatingDoc;
   var aIsPrivate            = params.private;
 
   if (where == "save") {
     if (!aInitiatingDoc) {
       Components.utils.reportError("openUILink/openLinkIn was called with " +
         "where == 'save' but without initiatingDoc.  See bug 814264.");
       return;
@@ -301,33 +299,30 @@ function openLinkIn(url, where, params) 
 
   switch (where) {
   case "current":
     let flags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
     if (aAllowThirdPartyFixup)
       flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
     if (aDisallowInheritPrincipal)
       flags |= Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_OWNER;
-    if (aIsUTF8)
-      flags |= Ci.nsIWebNavigation.LOAD_FLAGS_URI_IS_UTF8;
     w.gBrowser.loadURIWithFlags(url, flags, aReferrerURI, null, aPostData);
     break;
   case "tabshifted":
     loadInBackground = !loadInBackground;
     // fall through
   case "tab":
     let browser = w.gBrowser;
     browser.loadOneTab(url, {
                        referrerURI: aReferrerURI,
                        charset: aCharset,
                        postData: aPostData,
                        inBackground: loadInBackground,
                        allowThirdPartyFixup: aAllowThirdPartyFixup,
                        relatedToCurrent: aRelatedToCurrent,
-                       isUTF8: aIsUTF8,
                        disableMCB: aDisableMCB});
     break;
   }
 
   w.gBrowser.selectedBrowser.focus();
 
   if (!loadInBackground && w.isBlankPageURL(url))
     w.focusAndSelectUrlBar();
--- a/browser/components/customizableui/content/toolbar.xml
+++ b/browser/components/customizableui/content/toolbar.xml
@@ -3,29 +3,23 @@
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <bindings id="browserToolbarBindings"
           xmlns="http://www.mozilla.org/xbl"
           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
           xmlns:xbl="http://www.mozilla.org/xbl">
 
-  <binding id="toolbar">
+  <binding id="toolbar" role="xul:toolbar">
     <resources>
       <stylesheet src="chrome://global/skin/toolbar.css"/>
     </resources>
-    <implementation implements="nsIAccessibleProvider">
+    <implementation>
       <field name="overflowedDuringConstruction">null</field>
 
-      <property name="accessibleType" readonly="true">
-        <getter>
-          return Components.interfaces.nsIAccessibleProvider.XULToolbar;
-        </getter>
-      </property>
-
       <constructor><![CDATA[
           let scope = {};
           Cu.import("resource:///modules/CustomizableUI.jsm", scope);
           // Add an early overflow event listener that will mark if the
           // toolbar overflowed during construction.
           if (scope.CustomizableUI.isAreaOverflowable(this.id)) {
             this.addEventListener("overflow", this);
             this.addEventListener("underflow", this);
--- a/browser/components/customizableui/src/CustomizableWidgets.jsm
+++ b/browser/components/customizableui/src/CustomizableWidgets.jsm
@@ -43,17 +43,17 @@ function setAttributes(aNode, aAttrs) {
         value = CustomizableUI.getLocalizedProperty({id: aAttrs.id}, name);
       aNode.setAttribute(name, value);
     }
   }
 }
 
 function updateCombinedWidgetStyle(aNode, aArea, aModifyAutoclose) {
   let inPanel = (aArea == CustomizableUI.AREA_PANEL);
-  let cls = inPanel ? "panel-combined-button" : null;
+  let cls = inPanel ? "panel-combined-button" : "toolbarbutton-1";
   let attrs = {class: cls};
   if (aModifyAutoclose) {
     attrs.noautoclose = inPanel ? true : null;
   }
   for (let i = 0, l = aNode.childNodes.length; i < l; ++i) {
     if (aNode.childNodes[i].localName == "separator")
       continue;
     setAttributes(aNode.childNodes[i], attrs);
@@ -300,17 +300,17 @@ const CustomizableWidgets = [{
     id: "zoom-controls",
     type: "custom",
     removable: true,
     defaultArea: CustomizableUI.AREA_PANEL,
     onBuild: function(aDocument) {
       const kPanelId = "PanelUI-popup";
       let inPanel = (this.currentArea == CustomizableUI.AREA_PANEL);
       let noautoclose = inPanel ? "true" : null;
-      let cls = inPanel ? "panel-combined-button" : null;
+      let cls = inPanel ? "panel-combined-button" : "toolbarbutton-1";
 
       if (!this.currentArea)
         cls = null;
 
       let buttons = [{
         id: "zoom-out-button",
         noautoclose: noautoclose,
         command: "cmd_fullZoomReduce",
@@ -444,17 +444,17 @@ const CustomizableWidgets = [{
     }
   }, {
     id: "edit-controls",
     type: "custom",
     removable: true,
     defaultArea: CustomizableUI.AREA_PANEL,
     onBuild: function(aDocument) {
       let inPanel = (this.currentArea == CustomizableUI.AREA_PANEL);
-      let cls = inPanel ? "panel-combined-button" : null;
+      let cls = inPanel ? "panel-combined-button" : "toolbarbutton-1";
 
       if (!this.currentArea)
         cls = null;
 
       let buttons = [{
         id: "cut-button",
         command: "cmd_cut",
         class: cls,
@@ -794,16 +794,18 @@ const CustomizableWidgets = [{
     }
   }];
 
 #ifdef XP_WIN
 #ifdef MOZ_METRO
 if (isWin8OrHigher()) {
   CustomizableWidgets.push({
     id: "switch-to-metro-button",
+    label: "switch-to-metro-button2.label",
+    tooltiptext: "switch-to-metro-button2.tooltiptext",
     removable: true,
     defaultArea: CustomizableUI.AREA_PANEL,
     onCommand: function(aEvent) {
       let win = aEvent.target &&
         aEvent.target.ownerDocument &&
         aEvent.target.ownerDocument.defaultView;
       if (win && typeof win.SwitchToMetro == "function") {
         win.SwitchToMetro();
--- a/browser/devtools/debugger/moz.build
+++ b/browser/devtools/debugger/moz.build
@@ -1,13 +1,13 @@
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 JS_MODULES_PATH = 'modules/devtools/debugger'
 
 EXTRA_JS_MODULES += [
-    'debugger-panel.js'
+    'panel.js'
 ]
 
 BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
 
rename from browser/devtools/debugger/debugger-panel.js
rename to browser/devtools/debugger/panel.js
rename from browser/devtools/framework/toolbox.css
rename to browser/devtools/framework/options-panel.css
--- a/browser/devtools/framework/toolbox.css
+++ b/browser/devtools/framework/options-panel.css
@@ -1,23 +1,12 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-.devtools-tab {
-  -moz-binding: url("chrome://global/content/bindings/general.xml#control-item");
-  -moz-box-align: center;
-}
-
-#toolbox-controls > toolbarbutton > .toolbarbutton-text,
-#toolbox-dock-buttons > toolbarbutton > .toolbarbutton-text,
-.command-button > .toolbarbutton-text {
-  display: none;
-}
-
 #options-panel-container {
   overflow: auto;
 }
 
 #options-panel {
   overflow-y: auto;
   display: block;
 }
@@ -25,8 +14,46 @@
 .options-vertical-pane {
   display: inline;
   float: left;
 }
 
 .options-vertical-pane > label {
   display: block;
 }
+
+.options-vertical-pane {
+  margin: 5px;
+  width: calc(50% - 30px);
+  min-width: 400px;
+  -moz-padding-start: 5px;
+}
+
+.options-vertical-pane > label {
+  padding: 2px 0;
+  font-size: 1.4rem;
+}
+
+.options-groupbox {
+  -moz-margin-start: 15px;
+  padding: 2px;
+}
+
+.options-groupbox > * {
+  padding: 2px;
+}
+
+.options-citation-label {
+  font-size: 1rem !important;
+  /* !important is required otherwise font-size will still be 1.4rem */
+  font-style: italic;
+  padding: 4px 0 0; /* To align it with the checkbox */
+}
+
+.options-citation-label + label {
+  padding: 3px 0 0 !important; /* To align it with the checkbox */
+  font-style: italic;
+}
+
+.hidden-labels-box:not(.visible) > label,
+.hidden-labels-box.visible ~ .hidden-labels-box > label:last-child {
+  display: none;
+}
--- a/browser/devtools/framework/toolbox-options.xul
+++ b/browser/devtools/framework/toolbox-options.xul
@@ -2,18 +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 window [
 <!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd" >
  %toolboxDTD;
 ]>
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
-<?xml-stylesheet rel="stylesheet" href="chrome://browser/content/devtools/framework/toolbox.css" type="text/css"?>
-<?xml-stylesheet rel="stylesheet" href="chrome://browser/skin/devtools/toolbox.css" type="text/css"?>
+<?xml-stylesheet rel="stylesheet" href="chrome://browser/content/devtools/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"
           src="chrome://browser/content/devtools/theme-switching.js"/>
   <hbox id="options-panel-container" flex="1">
     <hbox id="options-panel" class="theme-body" flex="1">
       <vbox id="tools-box" class="options-vertical-pane" flex="1">
--- a/browser/devtools/framework/toolbox.xul
+++ b/browser/devtools/framework/toolbox.xul
@@ -2,19 +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 window [
 <!ENTITY % toolboxDTD SYSTEM "chrome://browser/locale/devtools/toolbox.dtd" >
  %toolboxDTD;
 ]>
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://browser/content/devtools/framework/toolbox.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/devtools/common.css" type="text/css"?>
-<?xml-stylesheet href="chrome://browser/skin/devtools/toolbox.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://browser/content/devtools/theme-switching.js"/>
   <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
 
--- a/browser/devtools/jar.mn
+++ b/browser/devtools/jar.mn
@@ -70,17 +70,17 @@ browser.jar:
     content/browser/devtools/profiler/cleopatra/images/treetwisty.svg  (profiler/cleopatra/images/treetwisty.svg)
     content/browser/devtools/commandline.css                           (commandline/commandline.css)
     content/browser/devtools/commandlineoutput.xhtml                   (commandline/commandlineoutput.xhtml)
     content/browser/devtools/commandlinetooltip.xhtml                  (commandline/commandlinetooltip.xhtml)
     content/browser/devtools/framework/toolbox-window.xul              (framework/toolbox-window.xul)
     content/browser/devtools/framework/toolbox-options.xul             (framework/toolbox-options.xul)
     content/browser/devtools/framework/toolbox-options.js              (framework/toolbox-options.js)
 *   content/browser/devtools/framework/toolbox.xul                     (framework/toolbox.xul)
-    content/browser/devtools/framework/toolbox.css                     (framework/toolbox.css)
+    content/browser/devtools/framework/options-panel.css               (framework/options-panel.css)
     content/browser/devtools/framework/toolbox-process-window.xul      (framework/toolbox-process-window.xul)
     content/browser/devtools/framework/toolbox-process-window.js       (framework/toolbox-process-window.js)
     content/browser/devtools/inspector/inspector.xul                   (inspector/inspector.xul)
     content/browser/devtools/inspector/inspector.css                   (inspector/inspector.css)
     content/browser/devtools/connect.xhtml                             (framework/connect/connect.xhtml)
     content/browser/devtools/connect.css                               (framework/connect/connect.css)
     content/browser/devtools/connect.js                                (framework/connect/connect.js)
     content/browser/devtools/app-manager/template.js                   (app-manager/content/template.js)
--- a/browser/devtools/main.js
+++ b/browser/devtools/main.js
@@ -20,21 +20,21 @@ Object.defineProperty(exports, "TargetFa
 loader.lazyGetter(this, "osString", () => Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS);
 
 let events = require("sdk/system/events");
 
 // Panels
 loader.lazyGetter(this, "OptionsPanel", () => require("devtools/framework/toolbox-options").OptionsPanel);
 loader.lazyGetter(this, "InspectorPanel", () => require("devtools/inspector/inspector-panel").InspectorPanel);
 loader.lazyGetter(this, "WebConsolePanel", () => require("devtools/webconsole/panel").WebConsolePanel);
-loader.lazyGetter(this, "DebuggerPanel", () => require("devtools/debugger/debugger-panel").DebuggerPanel);
+loader.lazyGetter(this, "DebuggerPanel", () => require("devtools/debugger/panel").DebuggerPanel);
 loader.lazyImporter(this, "StyleEditorPanel", "resource:///modules/devtools/StyleEditorPanel.jsm");
 loader.lazyGetter(this, "ShaderEditorPanel", () => require("devtools/shadereditor/panel").ShaderEditorPanel);
 loader.lazyGetter(this, "ProfilerPanel", () => require("devtools/profiler/panel"));
-loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/netmonitor/netmonitor-panel").NetMonitorPanel);
+loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/netmonitor/panel").NetMonitorPanel);
 loader.lazyGetter(this, "ScratchpadPanel", () => require("devtools/scratchpad/scratchpad-panel").ScratchpadPanel);
 
 // Strings
 const toolboxProps = "chrome://browser/locale/devtools/toolbox.properties";
 const inspectorProps = "chrome://browser/locale/devtools/inspector.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";
--- a/browser/devtools/netmonitor/moz.build
+++ b/browser/devtools/netmonitor/moz.build
@@ -3,10 +3,10 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 TEST_DIRS += ['test']
 
 JS_MODULES_PATH = 'modules/devtools/netmonitor'
 
 EXTRA_JS_MODULES += [
-    'netmonitor-panel.js'
+    'panel.js'
 ]
rename from browser/devtools/netmonitor/netmonitor-panel.js
rename to browser/devtools/netmonitor/panel.js
--- a/browser/devtools/responsivedesign/responsivedesign.jsm
+++ b/browser/devtools/responsivedesign/responsivedesign.jsm
@@ -198,17 +198,17 @@ function ResponsiveUI(aWindow, aTab)
     switchToFloatingScrollbars(this.tab);
 
   this.tab.__responsiveUI = this;
 
   this._telemetry.toolOpened("responsive");
 
   // Touch events support
   this.touchEnableBefore = false;
-  this.touchEventHandler = new TouchEventHandler(this.browser.contentWindow);
+  this.touchEventHandler = new TouchEventHandler(this.browser);
 
   this.browser.addEventListener("load", this.bound_onPageLoad, true);
   this.browser.addEventListener("unload", this.bound_onPageUnload, true);
 
   if (this.browser.contentWindow.document &&
       this.browser.contentWindow.document.readyState == "complete") {
     this.onPageLoad();
   }
@@ -227,17 +227,17 @@ ResponsiveUI.prototype = {
       this.stack.setAttribute("notransition", "true");
     }
   },
 
   /**
    * Window onload / onunload
    */
    onPageLoad: function() {
-     this.touchEventHandler = new TouchEventHandler(this.browser.contentWindow);
+     this.touchEventHandler = new TouchEventHandler(this.browser);
      if (this.touchEnableBefore) {
        this.enableTouch();
      }
    },
 
    onPageUnload: function() {
      if (this.closing)
        return;
--- a/browser/devtools/shared/test/browser.ini
+++ b/browser/devtools/shared/test/browser.ini
@@ -26,8 +26,9 @@ support-files =
 [browser_telemetry_toolboxtabs_options.js]
 [browser_telemetry_toolboxtabs_styleeditor.js]
 [browser_telemetry_toolboxtabs_webconsole.js]
 [browser_templater_basic.js]
 [browser_toolbar_basic.js]
 [browser_toolbar_tooltip.js]
 [browser_toolbar_webconsole_errors_count.js]
 [browser_spectrum.js]
+[browser_csstransformpreview.js]
new file mode 100644
--- /dev/null
+++ b/browser/devtools/shared/test/browser_csstransformpreview.js
@@ -0,0 +1,139 @@
+/* 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 spectrum color picker works correctly
+
+const TEST_URI = "data:text/html;charset=utf-8,<div></div>";
+const {CSSTransformPreviewer} = devtools.require("devtools/shared/widgets/CSSTransformPreviewer");
+
+let doc, root;
+
+function test() {
+  waitForExplicitFinish();
+  addTab(TEST_URI, () => {
+    doc = content.document;
+    root = doc.querySelector("div");
+    startTests();
+  });
+}
+
+function endTests() {
+  doc = root = null;
+  gBrowser.removeCurrentTab();
+  finish();
+}
+
+function startTests() {
+  testCreateAndDestroyShouldAppendAndRemoveElements();
+}
+
+function testCreateAndDestroyShouldAppendAndRemoveElements() {
+  ok(root, "We have the root node to append the preview to");
+  is(root.childElementCount, 0, "Root node is empty");
+
+  let p = new CSSTransformPreviewer(root);
+  p.preview("matrix(1, -0.2, 0, 1, 0, 0)");
+  ok(root.childElementCount > 0, "Preview has appended elements");
+  ok(root.querySelector("canvas"), "Canvas preview element is here");
+
+  p.destroy();
+  is(root.childElementCount, 0, "Destroying preview removed all nodes");
+
+  testCanvasDimensionIsConstrainedByMaxDim();
+}
+
+function testCanvasDimensionIsConstrainedByMaxDim() {
+  let p = new CSSTransformPreviewer(root);
+  p.MAX_DIM = 500;
+  p.preview("scale(1)", "center", 1000, 1000);
+
+  let canvas = root.querySelector("canvas");
+  is(canvas.width, 500, "Canvas width is correct");
+  is(canvas.height, 500, "Canvas height is correct");
+
+  p.destroy();
+
+  testCallingPreviewSeveralTimesReusesTheSameCanvas();
+}
+
+function testCallingPreviewSeveralTimesReusesTheSameCanvas() {
+  let p = new CSSTransformPreviewer(root);
+
+  p.preview("scale(1)", "center", 1000, 1000);
+  let canvas = root.querySelector("canvas");
+
+  p.preview("rotate(90deg)");
+  let canvases = root.querySelectorAll("canvas");
+  is(canvases.length, 1, "Still one canvas element");
+  is(canvases[0], canvas, "Still the same canvas element");
+  p.destroy();
+
+  testCanvasDimensionAreCorrect();
+}
+
+function testCanvasDimensionAreCorrect() {
+  // Only test a few simple transformations
+  let p = new CSSTransformPreviewer(root);
+
+  // Make sure we have a square
+  let w = 200, h = w;
+  p.MAX_DIM = w;
+
+  // We can't test the content of the canvas here, just that, given a max width
+  // the aspect ratio of the canvas seems correct.
+
+  // Translate a square by its width, should be a rectangle
+  p.preview("translateX(200px)", "center", w, h);
+  let canvas = root.querySelector("canvas");
+  is(canvas.width, w, "width is correct");
+  is(canvas.height, h/2, "height is half of the width");
+
+  // Rotate on the top right corner, should be a rectangle
+  p.preview("rotate(-90deg)", "top right", w, h);
+  is(canvas.width, w, "width is correct");
+  is(canvas.height, h/2, "height is half of the width");
+
+  // Rotate on the bottom left corner, should be a rectangle
+  p.preview("rotate(90deg)", "top right", w, h);
+  is(canvas.width, w/2, "width is half of the height");
+  is(canvas.height, h, "height is correct");
+
+  // Scale from center, should still be a square
+  p.preview("scale(2)", "center", w, h);
+  is(canvas.width, w, "width is correct");
+  is(canvas.height, h, "height is correct");
+
+  // Skew from center, 45deg, should be a rectangle
+  p.preview("skew(45deg)", "center", w, h);
+  is(canvas.width, w, "width is correct");
+  is(canvas.height, h/2, "height is half of the height");
+
+  p.destroy();
+
+  testPreviewingInvalidTransformReturnsFalse();
+}
+
+function testPreviewingInvalidTransformReturnsFalse() {
+  let p = new CSSTransformPreviewer(root);
+  ok(!p.preview("veryWow(muchPx) suchTransform(soDeg)"), "Returned false for invalid transform");
+  ok(!p.preview("rotae(3deg)"), "Returned false for invalid transform");
+
+  // Verify the canvas is empty by checking the image data
+  let canvas = root.querySelector("canvas"), ctx = canvas.getContext("2d");
+  let data = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
+  for (let i = 0, n = data.length; i < n; i += 4) {
+    // Let's not log 250*250*4 asserts! Instead, just log when it fails
+    let red = data[i];
+    let green = data[i + 1];
+    let blue = data[i + 2];
+    let alpha = data[i + 3];
+    if (red !== 0 || green !== 0 || blue !== 0 || alpha !== 0) {
+      ok(false, "Image data is not empty after an invalid transformed was previewed");
+      break;
+    }
+  }
+
+  is(p.preview("translateX(30px)"), true, "Returned true for a valid transform");
+  endTests();
+}
new file mode 100644
--- /dev/null
+++ b/browser/devtools/shared/widgets/CSSTransformPreviewer.js
@@ -0,0 +1,389 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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";
+
+/**
+ * The CSSTransformPreview module displays, using a <canvas> a rectangle, with
+ * a given width and height and its transformed version, given a css transform
+ * property and origin. It also displays arrows from/to each corner.
+ *
+ * It is useful to visualize how a css transform affected an element. It can
+ * help debug tricky transformations. It is used today in a tooltip, and this
+ * tooltip is shown when hovering over a css transform declaration in the rule
+ * and computed view panels.
+ *
+ * TODO: For now, it multiplies matrices itself to calculate the coordinates of
+ * the transformed box, but that should be removed as soon as we can get access
+ * to getQuads().
+ */
+
+const HTML_NS = "http://www.w3.org/1999/xhtml";
+
+/**
+ * The TransformPreview needs an element to output a canvas tag.
+ *
+ * Usage example:
+ *
+ * let t = new CSSTransformPreviewer(myRootElement);
+ * t.preview("rotate(45deg)", "top left", 200, 400);
+ * t.preview("skew(19deg)", "center", 100, 500);
+ * t.preview("matrix(1, -0.2, 0, 1, 0, 0)");
+ * t.destroy();
+ *
+ * @param {nsIDOMElement} parentEl
+ *        Where the canvas will go
+ */
+function CSSTransformPreviewer(parentEl) {
+  this.parentEl = parentEl;
+  this.doc = this.parentEl.ownerDocument;
+  this.canvas = null;
+  this.ctx = null;
+}
+
+module.exports.CSSTransformPreviewer = CSSTransformPreviewer;
+
+CSSTransformPreviewer.prototype = {
+  /**
+   * The preview look-and-feel can be changed using these properties
+   */
+  MAX_DIM: 250,
+  PAD: 5,
+  ORIGINAL_FILL: "#1F303F",
+  ORIGINAL_STROKE: "#B2D8FF",
+  TRANSFORMED_FILL: "rgba(200, 200, 200, .5)",
+  TRANSFORMED_STROKE: "#B2D8FF",
+  ARROW_STROKE: "#329AFF",
+  ORIGIN_STROKE: "#329AFF",
+  ARROW_TIP_HEIGHT: 10,
+  ARROW_TIP_WIDTH: 8,
+  CORNER_SIZE_RATIO: 6,
+
+  /**
+   * Destroy removes the canvas from the parentelement passed in the constructor
+   */
+  destroy: function() {
+    if (this.canvas) {
+      this.parentEl.removeChild(this.canvas);
+    }
+    if (this._hiddenDiv) {
+      this.parentEl.removeChild(this._hiddenDiv);
+    }
+    this.parentEl = this.canvas = this.ctx = this.doc = null;
+  },
+
+  _createMarkup: function() {
+    this.canvas = this.doc.createElementNS(HTML_NS, "canvas");
+
+    this.canvas.setAttribute("id", "canvas");
+    this.canvas.setAttribute("width", this.MAX_DIM);
+    this.canvas.setAttribute("height", this.MAX_DIM);
+    this.canvas.style.position = "relative";
+    this.parentEl.appendChild(this.canvas);
+
+    this.ctx = this.canvas.getContext("2d");
+  },
+
+  _getComputed: function(name, value, width, height) {
+    if (!this._hiddenDiv) {
+      // Create a hidden element to apply the style to
+      this._hiddenDiv = this.doc.createElementNS(HTML_NS, "div");
+      this._hiddenDiv.style.visibility = "hidden";
+      this._hiddenDiv.style.position = "absolute";
+      this.parentEl.appendChild(this._hiddenDiv);
+    }
+
+    // Camelcase the name
+    name = name.replace(/-([a-z]{1})/g, (m, letter) => letter.toUpperCase());
+
+    // Apply width and height to make sure computation is made correctly
+    this._hiddenDiv.style.width = width + "px";
+    this._hiddenDiv.style.height = height + "px";
+
+    // Show the hidden div, apply the style, read the computed style, hide the
+    // hidden div again
+    this._hiddenDiv.style.display = "block";
+    this._hiddenDiv.style[name] = value;
+    let computed = this.doc.defaultView.getComputedStyle(this._hiddenDiv);
+    let computedValue = computed[name];
+    this._hiddenDiv.style.display = "none";
+
+    return computedValue;
+  },
+
+  _getMatrixFromTransformString: function(transformStr) {
+    let matrix = transformStr.substring(0, transformStr.length - 1).
+      substring(transformStr.indexOf("(") + 1).split(",");
+
+    matrix.forEach(function(value, index) {
+      matrix[index] = parseFloat(value, 10);
+    });
+
+    let transformMatrix = null;
+
+    if (matrix.length === 6) {
+      // 2d transform
+      transformMatrix = [
+        [matrix[0], matrix[2], matrix[4], 0],
+        [matrix[1], matrix[3], matrix[5], 0],
+        [0,     0,     1,     0],
+        [0,     0,     0,     1]
+      ];
+    } else {
+      // 3d transform
+      transformMatrix = [
+        [matrix[0], matrix[4], matrix[8],  matrix[12]],
+        [matrix[1], matrix[5], matrix[9],  matrix[13]],
+        [matrix[2], matrix[6], matrix[10], matrix[14]],
+        [matrix[3], matrix[7], matrix[11], matrix[15]]
+      ];
+    }
+
+    return transformMatrix;
+  },
+
+  _getOriginFromOriginString: function(originStr) {
+    let offsets = originStr.split(" ");
+    offsets.forEach(function(item, index) {
+      offsets[index] = parseInt(item, 10);
+    });
+
+    return offsets;
+  },
+
+  _multiply: function(m1, m2) {
+    let m = [];
+    for (let m1Line = 0; m1Line < m1.length; m1Line++) {
+      m[m1Line] = 0;
+      for (let m2Col = 0; m2Col < m2.length; m2Col++) {
+        m[m1Line] += m1[m1Line][m2Col] * m2[m2Col];
+      }
+    }
+    return [m[0], m[1]];
+  },
+
+  _getTransformedPoint: function(matrix, point, origin) {
+    let pointMatrix = [point[0] - origin[0], point[1] - origin[1], 1, 1];
+    return this._multiply(matrix, pointMatrix);
+  },
+
+  _getTransformedPoints: function(matrix, rect, origin) {
+    return rect.map(point => {
+      let tPoint = this._getTransformedPoint(matrix, [point[0], point[1]], origin);
+      return [tPoint[0] + origin[0], tPoint[1] + origin[1]];
+    });
+  },
+
+  /**
+   * For canvas to avoid anti-aliasing
+   */
+  _round: x => Math.round(x) + .5,
+
+  _drawShape: function(points, fillStyle, strokeStyle) {
+    this.ctx.save();
+
+    this.ctx.lineWidth = 1;
+    this.ctx.strokeStyle = strokeStyle;
+    this.ctx.fillStyle = fillStyle;
+
+    this.ctx.beginPath();
+    this.ctx.moveTo(this._round(points[0][0]), this._round(points[0][1]));
+    for (var i = 1; i < points.length; i++) {
+      this.ctx.lineTo(this._round(points[i][0]), this._round(points[i][1]));
+    }
+    this.ctx.lineTo(this._round(points[0][0]), this._round(points[0][1]));
+    this.ctx.fill();
+    this.ctx.stroke();
+
+    this.ctx.restore();
+  },
+
+  _drawArrow: function(x1, y1, x2, y2) {
+    // do not draw if the line is too small
+    if (Math.abs(x2-x1) < 20 && Math.abs(y2-y1) < 20) {
+      return;
+    }
+
+    this.ctx.save();
+
+    this.ctx.strokeStyle = this.ARROW_STROKE;
+    this.ctx.fillStyle = this.ARROW_STROKE;
+    this.ctx.lineWidth = 1;
+
+    this.ctx.beginPath();
+    this.ctx.moveTo(this._round(x1), this._round(y1));
+    this.ctx.lineTo(this._round(x2), this._round(y2));
+    this.ctx.stroke();
+
+    this.ctx.beginPath();
+    this.ctx.translate(x2, y2);
+    let radians = Math.atan((y1 - y2) / (x1 - x2));
+    radians += ((x1 >= x2) ? -90 : 90) * Math.PI / 180;
+    this.ctx.rotate(radians);
+    this.ctx.moveTo(0, 0);
+    this.ctx.lineTo(this.ARROW_TIP_WIDTH / 2, this.ARROW_TIP_HEIGHT);
+    this.ctx.lineTo(-this.ARROW_TIP_WIDTH / 2, this.ARROW_TIP_HEIGHT);
+    this.ctx.closePath();
+    this.ctx.fill();
+
+    this.ctx.restore();
+  },
+
+  _drawOrigin: function(x, y) {
+    this.ctx.save();
+
+    this.ctx.strokeStyle = this.ORIGIN_STROKE;
+    this.ctx.fillStyle = this.ORIGIN_STROKE;
+
+    this.ctx.beginPath();
+    this.ctx.arc(x, y, 4, 0, 2 * Math.PI, false);
+    this.ctx.stroke();
+    this.ctx.fill();
+
+    this.ctx.restore();
+  },
+
+  /**
+   * Computes the largest width and height of all the given shapes and changes
+   * all of the shapes' points (by reference) so they fit into the configured
+   * MAX_DIM - 2*PAD area.
+   * @return {Object} A {w, h} giving the size the canvas should be
+   */
+  _fitAllShapes: function(allShapes) {
+    let allXs = [], allYs = [];
+    for (let shape of allShapes) {
+      for (let point of shape) {
+        allXs.push(point[0]);
+        allYs.push(point[1]);
+      }
+    }
+    let minX = Math.min.apply(Math, allXs);
+    let maxX = Math.max.apply(Math, allXs);
+    let minY = Math.min.apply(Math, allYs);
+    let maxY = Math.max.apply(Math, allYs);
+
+    let spanX = maxX - minX;
+    let spanY = maxY - minY;
+    let isWide = spanX > spanY;
+
+    let cw = isWide ? this.MAX_DIM :
+      this.MAX_DIM * Math.min(spanX, spanY) / Math.max(spanX, spanY);
+    let ch = !isWide ? this.MAX_DIM :
+      this.MAX_DIM * Math.min(spanX, spanY) / Math.max(spanX, spanY);
+
+    let mapX = x => this.PAD + ((cw - 2 * this.PAD) / (maxX - minX)) * (x - minX);
+    let mapY = y => this.PAD + ((ch - 2 * this.PAD) / (maxY - minY)) * (y - minY);
+
+    for (let shape of allShapes) {
+      for (let point of shape) {
+        point[0] = mapX(point[0]);
+        point[1] = mapY(point[1]);
+      }
+    }
+
+    return {w: cw, h: ch};
+  },
+
+  _drawShapes: function(shape, corner, transformed, transformedCorner) {
+    this._drawOriginal(shape);
+    this._drawOriginalCorner(corner);
+    this._drawTransformed(transformed);
+    this._drawTransformedCorner(transformedCorner);
+  },
+
+  _drawOriginal: function(points) {
+    this._drawShape(points, this.ORIGINAL_FILL, this.ORIGINAL_STROKE);
+  },
+
+  _drawTransformed: function(points) {
+    this._drawShape(points, this.TRANSFORMED_FILL, this.TRANSFORMED_STROKE);
+  },
+
+  _drawOriginalCorner: function(points) {
+    this._drawShape(points, this.ORIGINAL_STROKE, this.ORIGINAL_STROKE);
+  },
+
+  _drawTransformedCorner: function(points) {
+    this._drawShape(points, this.TRANSFORMED_STROKE, this.TRANSFORMED_STROKE);
+  },
+
+  _drawArrows: function(shape, transformed) {
+    this._drawArrow(shape[0][0], shape[0][1], transformed[0][0], transformed[0][1]);
+    this._drawArrow(shape[1][0], shape[1][1], transformed[1][0], transformed[1][1]);
+    this._drawArrow(shape[2][0], shape[2][1], transformed[2][0], transformed[2][1]);
+    this._drawArrow(shape[3][0], shape[3][1], transformed[3][0], transformed[3][1]);
+  },
+
+  /**
+   * Draw a transform preview
+   *
+   * @param {String} transform
+   *        The css transform value as a string, as typed by the user, as long
+   *        as it can be computed by the browser
+   * @param {String} origin
+   *        Same as above for the transform-origin value. Defaults to "center"
+   * @param {Number} width
+   *        The width of the container. Defaults to 200
+   * @param {Number} height
+   *        The height of the container. Defaults to 200
+   * @return {Boolean} Whether or not the preview could be created. Will return
+   *         false for instance if the transform is invalid
+   */
+  preview: function(transform, origin="center", width=200, height=200) {
+    // Create/clear the canvas
+    if (!this.canvas) {
+      this._createMarkup();
+    }
+    this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
+
+    // Get computed versions of transform and origin
+    transform = this._getComputed("transform", transform, width, height);
+    if (transform && transform !== "none") {
+      origin = this._getComputed("transform-origin", origin, width, height);
+
+      // Get the matrix, origin and width height data for the previewed element
+      let originData = this._getOriginFromOriginString(origin);
+      let matrixData = this._getMatrixFromTransformString(transform);
+
+      // Compute the original box rect and transformed box rect
+      let shapePoints = [
+        [0, 0],
+        [width, 0],
+        [width, height],
+        [0, height]
+      ];
+      let transformedPoints = this._getTransformedPoints(matrixData, shapePoints, originData);
+
+      // Do the same for the corner triangle shape
+      let cornerSize = Math.min(shapePoints[2][1] - shapePoints[1][1],
+        shapePoints[1][0] - shapePoints[0][0]) / this.CORNER_SIZE_RATIO;
+      let cornerPoints = [
+        [shapePoints[1][0], shapePoints[1][1]],
+        [shapePoints[1][0], shapePoints[1][1] + cornerSize],
+        [shapePoints[1][0] - cornerSize, shapePoints[1][1]]
+      ];
+      let transformedCornerPoints = this._getTransformedPoints(matrixData, cornerPoints, originData);
+
+      // Resize points to fit everything in the canvas
+      let {w, h} = this._fitAllShapes([
+        shapePoints,
+        transformedPoints,
+        cornerPoints,
+        transformedCornerPoints,
+        [originData]
+      ]);
+
+      this.canvas.setAttribute("width", w);
+      this.canvas.setAttribute("height", h);
+
+      this._drawShapes(shapePoints, cornerPoints, transformedPoints, transformedCornerPoints)
+      this._drawArrows(shapePoints, transformedPoints);
+      this._drawOrigin(originData[0], originData[1]);
+
+      return true;
+    } else {
+      return false;
+    }
+  }
+};
--- a/browser/devtools/shared/widgets/Tooltip.js
+++ b/browser/devtools/shared/widgets/Tooltip.js
@@ -7,16 +7,17 @@
 const {Cc, Cu, Ci} = require("chrome");
 const promise = require("sdk/core/promise");
 const IOService = Cc["@mozilla.org/network/io-service;1"]
   .getService(Ci.nsIIOService);
 const {Spectrum} = require("devtools/shared/widgets/Spectrum");
 const EventEmitter = require("devtools/shared/event-emitter");
 const {colorUtils} = require("devtools/css-color");
 const Heritage = require("sdk/core/heritage");
+const {CSSTransformPreviewer} = require("devtools/shared/widgets/CSSTransformPreviewer");
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "setNamedTimeout",
   "resource:///modules/devtools/ViewHelpers.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "clearNamedTimeout",
   "resource:///modules/devtools/ViewHelpers.jsm");
@@ -95,17 +96,16 @@ let PanelFactory = {
    *        An options store to get some configuration from
    */
   get: function(doc, options) {
     // Create the tooltip
     let panel = doc.createElement("panel");
     panel.setAttribute("hidden", true);
     panel.setAttribute("ignorekeys", true);
 
-    // Prevent the click used to close the panel from being consumed
     panel.setAttribute("consumeoutsideclicks", options.get("consumeOutsideClick"));
     panel.setAttribute("noautofocus", options.get("noAutoFocus"));
     panel.setAttribute("type", "arrow");
     panel.setAttribute("level", "top");
 
     panel.setAttribute("class", "devtools-tooltip theme-tooltip-panel");
     doc.querySelector("window").appendChild(panel);
 
@@ -224,16 +224,20 @@ Tooltip.prototype = {
     this.panel.hidden = true;
     this.panel.hidePopup();
   },
 
   isShown: function() {
     return this.panel.state !== "closed" && this.panel.state !== "hiding";
   },
 
+  setSize: function(width, height) {
+    this.panel.sizeTo(width, height);
+  },
+
   /**
    * Empty the tooltip's content
    */
   empty: function() {
     while (this.panel.hasChildNodes()) {
       this.panel.removeChild(this.panel.firstChild);
     }
   },
@@ -299,25 +303,26 @@ Tooltip.prototype = {
    *
    * Note that if you call this function a second time, it will itself call
    * stopTogglingOnHover before adding mouse tracking listeners again.
    *
    * @param {node} baseNode
    *        The container for all target nodes
    * @param {Function} targetNodeCb
    *        A function that accepts a node argument and returns true or false
-   *        to signify if the tooltip should be shown on that node or not.
+   *        (or a promise that resolves or rejects) to signify if the tooltip
+   *        should be shown on that node or not.
    *        Additionally, the function receives a second argument which is the
    *        tooltip instance itself, to be used to add/modify the content of the
    *        tooltip if needed. If omitted, the tooltip will be shown everytime.
    * @param {Number} showDelay
    *        An optional delay that will be observed before showing the tooltip.
    *        Defaults to this.defaultShowDelay.
    */
-  startTogglingOnHover: function(baseNode, targetNodeCb, showDelay = this.defaultShowDelay) {
+  startTogglingOnHover: function(baseNode, targetNodeCb, showDelay=this.defaultShowDelay) {
     if (this._basedNode) {
       this.stopTogglingOnHover();
     }
 
     this._basedNode = baseNode;
     this._showDelay = showDelay;
     this._targetNodeCb = targetNodeCb || (() => true);
 
@@ -352,17 +357,22 @@ Tooltip.prototype = {
       this._lastHovered = event.target;
       setNamedTimeout(this.uid, this._showDelay, () => {
         this._showOnHover(event.target);
       });
     }
   },
 
   _showOnHover: function(target) {
-    if (this._targetNodeCb(target, this)) {
+    let res = this._targetNodeCb(target, this);
+    if (res && res.then) {
+      res.then(() => {
+        this.show(target);
+      });
+    } else if (res) {
       this.show(target);
     }
   },
 
   _onBaseNodeMouseLeave: function() {
     clearNamedTimeout(this.uid);
     this._lastHovered = null;
     this.hide();
@@ -522,16 +532,18 @@ Tooltip.prototype = {
     imgObj.src = imageUrl;
     imgObj.onload = () => {
       imgObj.onload = null;
 
       // Display dimensions
       let w = options.naturalWidth || imgObj.naturalWidth;
       let h = options.naturalHeight || imgObj.naturalHeight;
       label.textContent = w + " x " + h;
+
+      this.setSize(vbox.width, vbox.height);
     }
   },
 
   /**
    * Exactly the same as the `image` function but takes a css background image
    * value instead : url(....)
    */
   setCssBackgroundImageContent: function(cssBackground, sheetHref, maxDim=400) {
@@ -579,16 +591,64 @@ Tooltip.prototype = {
     }
     iframe.addEventListener("load", onLoad, true);
     iframe.setAttribute("src", SPECTRUM_FRAME);
 
     // Put the iframe in the tooltip
     this.content = iframe;
 
     return def.promise;
+  },
+
+  /**
+   * Set the content of the tooltip to be the result of CSSTransformPreviewer.
+   * Meaning a canvas previewing a css transformation.
+   *
+   * @param {String} transform
+   *        The CSS transform value (e.g. "rotate(45deg) translateX(50px)")
+   * @param {PageStyleActor} pageStyle
+   *        An instance of the PageStyleActor that will be used to retrieve
+   *        computed styles
+   * @param {NodeActor} node
+   *        The NodeActor for the currently selected node
+   * @return A promise that resolves when the tooltip content is ready, or
+   *         rejects if no transform is provided or is invalid
+   */
+  setCssTransformContent: function(transform, pageStyle, node) {
+    let def = promise.defer();
+
+    if (transform) {
+      // Look into the computed styles to find the width and height and possibly
+      // the origin if it hadn't been provided
+      pageStyle.getComputed(node, {
+        filter: "user",
+        markMatched: false,
+        onlyMatched: false
+      }).then(styles => {
+        let origin = styles["transform-origin"].value;
+        let width = parseInt(styles["width"].value);
+        let height = parseInt(styles["height"].value);
+
+        let root = this.doc.createElementNS(XHTML_NS, "div");
+        let previewer = new CSSTransformPreviewer(root);
+        this.content = root;
+        if (!previewer.preview(transform, origin, width, height)) {
+          // If the preview didn't work, reject the promise
+          def.reject();
+        } else {
+          // Else, make sure the tooltip has the right size and resolve
+          this.setSize(previewer.canvas.width, previewer.canvas.height);
+          def.resolve();
+        }
+      });
+    } else {
+      def.reject();
+    }
+
+    return def.promise;
   }
 };
 
 /**
  * Base class for all (color, gradient, ...)-swatch based value editors inside
  * tooltips
  *
  * @param {XULDocument} doc
--- a/browser/devtools/styleinspector/computed-view.js
+++ b/browser/devtools/styleinspector/computed-view.js
@@ -500,31 +500,37 @@ CssHtmlTree.prototype = {
   },
 
   /**
    * Verify that target is indeed a css value we want a tooltip on, and if yes
    * prepare some content for the tooltip
    */
   _buildTooltipContent: function(target)
   {
-    // If the hovered element is not a property view and is not a background
-    // image, then don't show a tooltip
-    let isPropertyValue = target.classList.contains("property-value");
-    if (!isPropertyValue) {
-      return false;
-    }
-    let propName = target.parentNode.querySelector(".property-name");
-    let isBackgroundImage = propName.textContent === "background-image";
-    if (!isBackgroundImage) {
-      return false;
+    // Test for image url
+    if (target.classList.contains("theme-link")) {
+      let propValue = target.parentNode;
+      let propName = propValue.parentNode.querySelector(".property-name");
+      if (propName.textContent === "background-image") {
+        this.tooltip.setCssBackgroundImageContent(propValue.textContent);
+        return true;
+      }
     }
 
-    // Fill some content
-    this.tooltip.setCssBackgroundImageContent(target.textContent);
-    return true;
+    // Test for css transform
+    if (target.classList.contains("property-value")) {
+      let def = promise.defer();
+      let propValue = target;
+      let propName = target.parentNode.querySelector(".property-name");
+      if (propName.textContent === "transform") {
+        this.tooltip.setCssTransformContent(propValue.textContent,
+          this.pageStyle, this.viewedElement).then(def.resolve);
+        return def.promise;
+      }
+    }
   },
 
   /**
    * Create a context menu.
    */
   _buildContextMenu: function()
   {
     let doc = this.styleDocument.defaultView.parent.document;
--- a/browser/devtools/styleinspector/rule-view.js
+++ b/browser/devtools/styleinspector/rule-view.js
@@ -1120,37 +1120,42 @@ CssRuleView.prototype = {
     popupset.appendChild(this._contextmenu);
   },
 
   /**
    * Verify that target is indeed a css value we want a tooltip on, and if yes
    * prepare some content for the tooltip
    */
   _buildTooltipContent: function(target) {
-    let isImageHref = target.classList.contains("theme-link") &&
-      target.parentNode.classList.contains("ruleview-propertyvalue");
+    let property = target.textProperty, def = promise.defer(), hasTooltip = false;
 
-    // If the inplace-editor is visible or if this is not a background image
-    // don't show the tooltip
-    if (!isImageHref) {
-      return false;
+    // Test for css transform
+    if (property && property.name === "transform") {
+      this.previewTooltip.setCssTransformContent(property.value, this.pageStyle,
+        this._viewedElement).then(def.resolve);
+      hasTooltip = true;
     }
 
-    // Retrieve the TextProperty for the hovered element
-    let property = target.parentNode.textProperty;
-    let href = property.rule.domRule.href;
+    // Test for image
+    let isImageHref = target.classList.contains("theme-link") &&
+      target.parentNode.classList.contains("ruleview-propertyvalue");
+    if (isImageHref) {
+      property = target.parentNode.textProperty;
+      this.previewTooltip.setCssBackgroundImageContent(property.value,
+        property.rule.domRule.href);
+      def.resolve();
+      hasTooltip = true;
+    }
 
-    // Fill some content
-    this.previewTooltip.setCssBackgroundImageContent(property.value, href);
+    if (hasTooltip) {
+      this.colorPicker.revert();
+      this.colorPicker.hide();
+    }
 
-    // Hide the color picker tooltip if shown and revert changes
-    this.colorPicker.revert();
-    this.colorPicker.hide();
-
-    return true;
+    return def.promise;
   },
 
   /**
    * Update the context menu. This means enabling or disabling menuitems as
    * appropriate.
    */
   _contextMenuUpdate: function() {
     let win = this.doc.defaultView;
@@ -1296,17 +1301,17 @@ CssRuleView.prototype = {
     }
 
     this.popup.destroy();
   },
 
   /**
    * Update the highlighted element.
    *
-   * @param {nsIDOMElement} aElement
+   * @param {NodeActor} aElement
    *        The node whose style rules we'll inspect.
    */
   highlight: function CssRuleView_highlight(aElement)
   {
     if (this._viewedElement === aElement) {
       return promise.resolve(undefined);
     }
 
--- a/browser/devtools/styleinspector/test/browser.ini
+++ b/browser/devtools/styleinspector/test/browser.ini
@@ -48,9 +48,11 @@ support-files =
 [browser_bug894376_css_value_completion_existing_property_value_pair.js]
 [browser_ruleview_bug_902966_revert_value_on_ESC.js]
 [browser_ruleview_pseudoelement.js]
 support-files = browser_ruleview_pseudoelement.html
 [browser_computedview_bug835808_keyboard_nav.js]
 [browser_bug913014_matched_expand.js]
 [browser_bug765105_background_image_tooltip.js]
 [browser_bug889638_rule_view_color_picker.js]
+[browser_bug726427_csstransform_tooltip.js]
+
 [browser_bug940500_rule_view_pick_gradient_color.js]
new file mode 100644
--- /dev/null
+++ b/browser/devtools/styleinspector/test/browser_bug726427_csstransform_tooltip.js
@@ -0,0 +1,224 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+let contentDoc;
+let inspector;
+let ruleView;
+let computedView;
+
+const PAGE_CONTENT = [
+  '<style type="text/css">',
+  '  #testElement {',
+  '    width: 500px;',
+  '    height: 300px;',
+  '    background: red;',
+  '    transform: skew(16deg);',
+  '  }',
+  '  .test-element {',
+  '    transform-origin: top left;',
+  '    transform: rotate(45deg);',
+  '  }',
+  '  div {',
+  '    transform: scaleX(1.5);',
+  '    transform-origin: bottom right;',
+  '  }',
+  '  [attr] {',
+  '  }',
+  '</style>',
+  '<div id="testElement" class="test-element" attr="value">transformed element</div>'
+].join("\n");
+
+function test() {
+  waitForExplicitFinish();
+
+  gBrowser.selectedTab = gBrowser.addTab();
+  gBrowser.selectedBrowser.addEventListener("load", function(evt) {
+    gBrowser.selectedBrowser.removeEventListener(evt.type, arguments.callee, true);
+    contentDoc = content.document;
+    waitForFocus(createDocument, content);
+  }, true);
+
+  content.location = "data:text/html,rule view css transform tooltip test";
+}
+
+function createDocument() {
+  contentDoc.body.innerHTML = PAGE_CONTENT;
+
+  openRuleView((aInspector, aRuleView) => {
+    inspector = aInspector;
+    ruleView = aRuleView;
+    startTests();
+  });
+}
+
+function startTests() {
+  inspector.selection.setNode(contentDoc.querySelector("#testElement"));
+  inspector.once("inspector-updated", testTransformTooltipOnIDSelector);
+}
+
+function endTests() {
+  contentDoc = inspector = ruleView = computedView = null;
+  gBrowser.removeCurrentTab();
+  finish();
+}
+
+function testTransformTooltipOnIDSelector() {
+  info("Testing that a transform tooltip appears on the #ID rule");
+
+  let panel = ruleView.previewTooltip.panel;
+  ok(panel, "The XUL panel exists for the rule-view preview tooltips");
+
+  let {valueSpan} = getRuleViewProperty("#testElement", "transform");
+  assertTooltipShownOn(ruleView.previewTooltip, valueSpan, () => {
+    // The transform preview is canvas, so there's not much we can test, so for
+    // now, let's just be happy with the fact that the tooltips is shown!
+    ok(true, "Tooltip shown on the transform property of the #ID rule");
+    ruleView.previewTooltip.hide();
+    executeSoon(testTransformTooltipOnClassSelector);
+  });
+}
+
+function testTransformTooltipOnClassSelector() {
+  info("Testing that a transform tooltip appears on the .class rule");
+
+  let {valueSpan} = getRuleViewProperty(".test-element", "transform");
+  assertTooltipShownOn(ruleView.previewTooltip, valueSpan, () => {
+    // The transform preview is canvas, so there's not much we can test, so for
+    // now, let's just be happy with the fact that the tooltips is shown!
+    ok(true, "Tooltip shown on the transform property of the .class rule");
+    ruleView.previewTooltip.hide();
+    executeSoon(testTransformTooltipOnTagSelector);
+  });
+}
+
+function testTransformTooltipOnTagSelector() {
+  info("Testing that a transform tooltip appears on the tag rule");
+
+  let {valueSpan} = getRuleViewProperty("div", "transform");
+  assertTooltipShownOn(ruleView.previewTooltip, valueSpan, () => {
+    // The transform preview is canvas, so there's not much we can test, so for
+    // now, let's just be happy with the fact that the tooltips is shown!
+    ok(true, "Tooltip shown on the transform property of the tag rule");
+    ruleView.previewTooltip.hide();
+    executeSoon(testTransformTooltipNotShownOnInvalidTransform);
+  });
+}
+
+function testTransformTooltipNotShownOnInvalidTransform() {
+  info("Testing that a transform tooltip does not appear for invalid values");
+
+  // This is the list of keys to type in the inplace-editor
+  let keyData = "transform".split("");
+  keyData.push("VK_TAB");
+  keyData = keyData.concat("muchTransform(suchAngle)".split(""));
+  keyData.push("VK_RETURN");
+
+  // Focus the inplace editor
+  let rule = getRule("[attr]");
+  let brace = rule.querySelector(".ruleview-ruleclose");
+  waitForEditorFocus(brace.parentNode, editor => {
+    // Enter an invalid value
+    typeKeySequence(keyData, () => {
+      let {valueSpan} = getRuleViewProperty("[attr]", "transform");
+      assertTooltipNotShownOn(ruleView.previewTooltip, valueSpan, () => {
+        executeSoon(testTransformTooltipOnComputedView);
+      });
+    });
+  });
+  brace.click();
+}
+
+function testTransformTooltipOnComputedView() {
+  info("Testing that a transform tooltip appears in the computed view too");
+
+  inspector.sidebar.select("computedview");
+  computedView = inspector.sidebar.getWindowForTab("computedview").computedview.view;
+  let doc = computedView.styleDocument;
+
+  let panel = computedView.tooltip.panel;
+  let {valueSpan} = getComputedViewProperty("transform");
+
+  assertTooltipShownOn(computedView.tooltip, valueSpan, () => {
+    // The transform preview is canvas, so there's not much we can test, so for
+    // now, let's just be happy with the fact that the tooltips is shown!
+    ok(true, "Tooltip shown on the computed transform property");
+    computedView.tooltip.hide();
+    executeSoon(endTests);
+  });
+}
+
+function assertTooltipShownOn(tooltip, element, cb) {
+  // If there is indeed a show-on-hover on element, the xul panel will be shown
+  tooltip.panel.addEventListener("popupshown", function shown() {
+    tooltip.panel.removeEventListener("popupshown", shown, true);
+    cb();
+  }, true);
+  tooltip._showOnHover(element);
+}
+
+function assertTooltipNotShownOn(tooltip, element, cb) {
+  // The only way to make sure the tooltip is not shown is try and show it, wait
+  // for a given amount of time, and then check if it's shown or not
+  tooltip._showOnHover(element);
+  setTimeout(() => {
+    ok(!tooltip.isShown(), "The tooltip did not appear on hover of the element");
+    cb();
+  }, tooltip.defaultShowDelay + 100);
+}
+
+function typeKeySequence(sequence, cb, index=0) {
+  if (index === sequence.length) {
+    return cb();
+  }
+
+  EventUtils.synthesizeKey(sequence[index], {}, ruleView.doc.defaultView);
+  executeSoon(() => {
+    typeKeySequence(sequence, cb, index + 1);
+  });
+}
+
+function getRule(selectorText) {
+  let rule;
+
+  [].forEach.call(ruleView.doc.querySelectorAll(".ruleview-rule"), aRule => {
+    let selector = aRule.querySelector(".ruleview-selector-matched");
+    if (selector && selector.textContent === selectorText) {
+      rule = aRule;
+    }
+  });
+
+  return rule;
+}
+
+function getRuleViewProperty(selectorText, propertyName) {
+  let prop;
+
+  let rule = getRule(selectorText);
+  if (rule) {
+    // Look for the propertyName in that rule element
+    [].forEach.call(rule.querySelectorAll(".ruleview-property"), property => {
+      let nameSpan = property.querySelector(".ruleview-propertyname");
+      let valueSpan = property.querySelector(".ruleview-propertyvalue");
+
+      if (nameSpan.textContent === propertyName) {
+        prop = {nameSpan: nameSpan, valueSpan: valueSpan};
+      }
+    });
+  }
+
+  return prop;
+}
+
+function getComputedViewProperty(name) {
+  let prop;
+  [].forEach.call(computedView.styleDocument.querySelectorAll(".property-view"), property => {
+    let nameSpan = property.querySelector(".property-name");
+    let valueSpan = property.querySelector(".property-value");
+
+    if (nameSpan.textContent === name) {
+      prop = {nameSpan: nameSpan, valueSpan: valueSpan};
+    }
+  });
+  return prop;
+}
--- a/browser/devtools/styleinspector/test/browser_bug765105_background_image_tooltip.js
+++ b/browser/devtools/styleinspector/test/browser_bug765105_background_image_tooltip.js
@@ -137,18 +137,19 @@ function testComputedView() {
   info("Testing tooltips in the computed view");
 
   inspector.sidebar.select("computedview");
   computedView = inspector.sidebar.getWindowForTab("computedview").computedview.view;
   let doc = computedView.styleDocument;
 
   let panel = computedView.tooltip.panel;
   let {valueSpan} = getComputedViewProperty("background-image");
+  let uriSpan = valueSpan.querySelector(".theme-link");
 
-  assertTooltipShownOn(computedView.tooltip, valueSpan, () => {
+  assertTooltipShownOn(computedView.tooltip, uriSpan, () => {
     let images = panel.getElementsByTagName("image");
     is(images.length, 1, "Tooltip contains an image");
     ok(images[0].src === "chrome://global/skin/icons/warning-64.png");
 
     computedView.tooltip.hide();
 
     endTests();
   });
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -785,17 +785,16 @@ bin/libfreebl_32int64_3.so
 #endif
 
 #ifdef MOZ_METRO
 @BINPATH@/components/MetroUIUtils.js
 @BINPATH@/components/MetroUIUtils.manifest
 [metro]
 ; gre resources
 @BINPATH@/CommandExecuteHandler@BIN_SUFFIX@
-@BINPATH@/dummyvccorlib.dll
 @BINPATH@/resources.pri
 @BINPATH@/VisualElementsManifest.xml
 @BINPATH@/tileresources
 ; app dir resources
 @BINPATH@/metro/chrome.manifest
 @BINPATH@/metro/searchplugins
 @BINPATH@/metro/metroapp.ini
 @BINPATH@/metro/chrome/browser@JAREXT@
--- a/browser/locales/en-US/chrome/browser/charsetMenu.properties
+++ b/browser/locales/en-US/chrome/browser/charsetMenu.properties
@@ -66,22 +66,20 @@ IBM866           = Cyrillic (DOS)
 # Greek
 windows-1253.key = G
 windows-1253     = Greek (Windows)
 ISO-8859-7.key   =          O
 ISO-8859-7       = Greek (ISO)
 
 # Hebrew
 windows-1255.key = H
-windows-1255     = Hebrew (Windows)
-ISO-8859-8-I     = Hebrew (ISO)
+windows-1255     = Hebrew
 # LOCALIZATION NOTE (ISO-8859-8): The value for this item should begin with
-# the same word for Hebrew as the values for windows-1255 and ISO-8859-8-I
-# so that this item sorts right after those two in the collation order for your
-# locale.
+# the same word for Hebrew as the value for windows-1255 so that this item 
+# sorts right after that one in the collation order for your locale.
 ISO-8859-8       = Hebrew, Visual
 
 # Japanese
 Shift_JIS.key    = J
 Shift_JIS        = Japanese (Shift_JIS)
 EUC-JP.key       =   p
 EUC-JP           = Japanese (EUC-JP)
 ISO-2022-JP.key  =     n
--- a/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties
+++ b/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties
@@ -26,19 +26,19 @@ open-file-button.tooltiptext = Open file
 developer-button.label = Developer
 # LOCALIZATION NOTE(developer-button.tooltiptext): %S is the keyboard shortcut
 developer-button.tooltiptext = Web Developer Tools (%S)
 
 add-ons-button.label = Add-ons
 # LOCALIZATION NOTE(add-ons-button.tooltiptext): %S is the keyboard shortcut
 add-ons-button.tooltiptext = Add-ons Manager (%S)
 
-switch-to-metro-button.label = Windows 8 Touch
-# LOCALIZATION NOTE(switch-to-metro-button.tooltiptext): %S is the brand short name
-switch-to-metro-button.tooltiptext = Relaunch in %S for Windows 8 Touch
+switch-to-metro-button2.label = Windows 8 Touch
+# LOCALIZATION NOTE(switch-to-metro-button2.tooltiptext): %S is the brand short name
+switch-to-metro-button2.tooltiptext = Relaunch in %S for Windows 8 Touch
 
 preferences-button.label = Preferences
 # LOCALIZATION NOTE (preferences-button.tooltiptext): Use the unicode ellipsis char,
 # \u2026, or use "..." if \u2026 doesn't suit traditions in your locale.
 preferences-button.tooltiptext = Preferences…
 # LOCALIZATION NOTE (preferences-button.labelWin): Windows-only label for Options
 preferences-button.labelWin = Options
 # LOCALIZATION NOTE (preferences-button.tooltipWin): Windows-only tooltip for Options
--- a/browser/metro/base/content/bindings/urlbar.xml
+++ b/browser/metro/base/content/bindings/urlbar.xml
@@ -168,17 +168,17 @@
               if (remainder != "" && remainder[0] != "/")
                 return selectedVal;
             }
 
             let uriFixup = Cc["@mozilla.org/docshell/urifixup;1"].getService(Ci.nsIURIFixup);
 
             let uri;
             try {
-              uri = uriFixup.createFixupURI(inputVal, Ci.nsIURIFixup.FIXUP_FLAG_USE_UTF8);
+              uri = uriFixup.createFixupURI(inputVal, Ci.nsIURIFixup.FIXUP_FLAG_NONE);
             } catch (e) {}
             if (!uri)
               return selectedVal;
 
             // Only copy exposable URIs
             try {
               uri = uriFixup.createExposableURI(uri);
             } catch (ex) {}
--- a/browser/metro/base/content/browser-ui.js
+++ b/browser/metro/base/content/browser-ui.js
@@ -203,20 +203,16 @@ var BrowserUI = {
    * Devtools Debugger
    */
   runDebugServer: function runDebugServer(aPort) {
     let port = aPort || Services.prefs.getIntPref(debugServerPortChanged);
     if (!DebuggerServer.initialized) {
       DebuggerServer.init();
       DebuggerServer.addBrowserActors();
       DebuggerServer.addActors('chrome://browser/content/dbg-metro-actors.js');
-
-      // Add these globally for chrome, until per-window chrome debugging is supported (bug 928018):
-      DebuggerServer.addGlobalActor(DebuggerServer.tabActorFactories.inspectorActor, "inspectorActor");
-      DebuggerServer.addGlobalActor(DebuggerServer.tabActorFactories.styleEditorActor, "styleEditorActor");
     }
     DebuggerServer.openListener(port);
   },
 
   stopDebugServer: function stopDebugServer() {
     if (DebuggerServer.initialized) {
       DebuggerServer.destroy();
     }
--- a/browser/metro/base/content/browser.xul
+++ b/browser/metro/base/content/browser.xul
@@ -271,17 +271,17 @@ Desktop browser's sync prefs.
               <toolbarbutton id="pin-button" class="appbar-primary"
                              type="checkbox"
                              oncommand="Appbar.onPinButton()"/>
               <toolbarbutton id="menu-button" class="appbar-primary"
                              oncommand="Appbar.onMenuButton(event)"/>
             </hbox>
 
             <hbox id="toolbar-context-autocomplete" pack="end">
-              <toolbarbutton id="close-button" class="appbar-secondary"
+              <toolbarbutton id="close-button" class="appbar-primary"
                              oncommand="Appbar.onAutocompleteCloseButton()"/>
             </hbox>
           </stack>
         </toolbar>
       </vbox>
     </appbar>
 
     <vbox id="panel-container" class="window-width window-height meta"
@@ -357,29 +357,32 @@ Desktop browser's sync prefs.
 
       <toolbarbutton id="findbar-close-button" class="appbar-secondary"
                      command="cmd_findClose"/>
     </appbar>
 
     <!-- Context button bar -->
     <appbar id="contextappbar">
       <toolbar id="contextualactions-tray" labelled="true" flex="1">
-        <toolbarbutton id="pin-selected-button" class="appbar-secondary"
+        <toolbarbutton id="pin-selected-button" class="appbar-primary"
                        label-uses-set-name="true" hidden="true" fade="true"
                        oncommand="Appbar.dispatchContextualAction('pin')"/>
-        <toolbarbutton id="unpin-selected-button" class="appbar-secondary"
+        <toolbarbutton id="unpin-selected-button" class="appbar-primary"
                        label-uses-set-name="true" hidden="true" fade="true"
                        oncommand="Appbar.dispatchContextualAction('unpin')"/>
-        <toolbarbutton id="delete-selected-button" class="appbar-secondary"
+        <toolbarbutton id="hide-selected-button" class="appbar-primary"
+                       label-uses-set-name="true" hidden="true" fade="true"
+                       oncommand="Appbar.dispatchContextualAction('unpin')"/>
+        <toolbarbutton id="delete-selected-button" class="appbar-primary"
                        hidden="true" fade="true"
                        oncommand="Appbar.dispatchContextualAction('delete')"/>
-        <toolbarbutton id="restore-selected-button" class="appbar-secondary"
+        <toolbarbutton id="restore-selected-button" class="appbar-primary"
                        hidden="true" fade="true"
                        oncommand="Appbar.dispatchContextualAction('restore')"/>
-        <toolbarbutton id="clear-selected-button" class="appbar-secondary"
+        <toolbarbutton id="clear-selected-button" class="appbar-primary"
                        hidden="true" fade="true"
                        oncommand="Appbar.dispatchContextualAction('clear')"/>
       </toolbar>
     </appbar>
     <autoscroller class="autoscroller" id="autoscrollerid"/>
     <flyoutpanel id="about-flyoutpanel" class="flyout-narrow" headertext="&aboutHeader.title;">
       <label id="about-product-label" linewrap="true" value="&aboutHeader.product.label;"/>
       <label value="&aboutHeader.company.label;" linewrap="true"/>
--- a/browser/metro/base/content/startui/BookmarksView.js
+++ b/browser/metro/base/content/startui/BookmarksView.js
@@ -165,17 +165,17 @@ BookmarksView.prototype = Util.extend(Ob
     let item = this._set.insertItemAt(aPos || index, title, uri.spec, this._inBatch);
     item.setAttribute("anonid", aBookmarkId);
     this._setContextActions(item);
     this._updateFavicon(item, uri);
   },
 
   _setContextActions: function bv__setContextActions(aItem) {
     let itemId = this._getBookmarkIdForItem(aItem);
-    aItem.setAttribute("data-contextactions", "delete," + (this._pinHelper.isPinned(itemId) ? "unpin" : "pin"));
+    aItem.setAttribute("data-contextactions", "delete," + (this._pinHelper.isPinned(itemId) ? "hide" : "pin"));
     if (aItem.refresh) aItem.refresh();
   },
 
   _sendNeedsRefresh: function bv__sendNeedsRefresh(){
     // Event sent when all view instances need to refresh.
     let event = document.createEvent("Events");
     event.initEvent("BookmarksNeedsRefresh", true, false);
     window.dispatchEvent(event);
--- a/browser/metro/base/content/startui/HistoryView.js
+++ b/browser/metro/base/content/startui/HistoryView.js
@@ -102,17 +102,17 @@ HistoryView.prototype = Util.extend(Obje
   addItemToSet: function addItemToSet(aURI, aTitle, aIcon, aPos) {
     let item = this._set.insertItemAt(aPos || 0, aTitle, aURI, this._inBatch);
     this._setContextActions(item);
     this._updateFavicon(item, aURI);
   },
 
   _setContextActions: function bv__setContextActions(aItem) {
     let uri = aItem.getAttribute("value");
-    aItem.setAttribute("data-contextactions", "delete," + (this._pinHelper.isPinned(uri) ? "unpin" : "pin"));
+    aItem.setAttribute("data-contextactions", "delete," + (this._pinHelper.isPinned(uri) ? "hide" : "pin"));
     if ("refresh" in aItem) aItem.refresh();
   },
 
   _sendNeedsRefresh: function bv__sendNeedsRefresh(){
     // Event sent when all views need to refresh.
     let event = document.createEvent("Events");
     event.initEvent("HistoryNeedsRefresh", true, false);
     window.dispatchEvent(event);
--- a/browser/metro/base/tests/mochitest/browser_bookmarks.js
+++ b/browser/metro/base/tests/mochitest/browser_bookmarks.js
@@ -27,66 +27,66 @@ function setup() {
 }
 
 function tearDown() {
   PanelUI.hide();
   BookmarksTestHelper.restore();
 }
 
 gTests.push({
-  desc: "Test bookmarks StartUI unpin",
+  desc: "Test bookmarks StartUI hide",
   setUp: setup,
   tearDown: tearDown,
-  run: function testBookmarksStartUnpin() {
-    let unpinButton = document.getElementById("unpin-selected-button");
+  run: function testBookmarksStartHide() {
+    let hideButton = document.getElementById("hide-selected-button");
 
-    // --------- unpin item 2
+    // --------- hide item 2
 
     let item = gStartView._getItemForBookmarkId(2);
 
     let promise = waitForEvent(Elements.contextappbar, "transitionend", null, Elements.contextappbar);
     sendContextMenuClickToElement(window, item, 10, 10);
     yield promise;
 
-    ok(!unpinButton.hidden, "Unpin button is visible.");
+    ok(!hideButton.hidden, "Hide button is visible.");
 
     let promise = waitForEvent(Elements.contextappbar, "transitionend", null, Elements.contextappbar);
-    unpinButton.click();
+    hideButton.click();
     yield promise;
 
     item = gStartView._getItemForBookmarkId(2);
 
     ok(!item, "Item not in grid");
-    ok(!gStartView._pinHelper.isPinned(2), "Item unpinned");
+    ok(!gStartView._pinHelper.isPinned(2), "Item hidden");
     ok(gStartView._set.itemCount === gStartView._limit, "Grid repopulated");
 
-    // --------- unpin multiple items
+    // --------- hide multiple items
 
     let item1 = gStartView._getItemForBookmarkId(0);
     let item2 = gStartView._getItemForBookmarkId(5);
     let item3 = gStartView._getItemForBookmarkId(12);
 
     let promise = waitForEvent(Elements.contextappbar, "transitionend", null, Elements.contextappbar);
     sendContextMenuClickToElement(window, item1, 10, 10);
     sendContextMenuClickToElement(window, item2, 10, 10);
     sendContextMenuClickToElement(window, item3, 10, 10);
     yield promise;
 
-    ok(!unpinButton.hidden, "Unpin button is visible.");
+    ok(!hideButton.hidden, "Hide button is visible.");
 
     let promise = waitForEvent(Elements.contextappbar, "transitionend", null, Elements.contextappbar);
-    EventUtils.synthesizeMouse(unpinButton, 10, 10, {}, window);
+    EventUtils.synthesizeMouse(hideButton, 10, 10, {}, window);
     yield promise;
 
     item1 = gStartView._getItemForBookmarkId(0);
     item2 = gStartView._getItemForBookmarkId(5);
     item3 = gStartView._getItemForBookmarkId(12);
 
     ok(!item1 && !item2 && !item3, "Items are not in grid");
-    ok(!gStartView._pinHelper.isPinned(0) && !gStartView._pinHelper.isPinned(5) && !gStartView._pinHelper.isPinned(12) , "Items unpinned");
+    ok(!gStartView._pinHelper.isPinned(0) && !gStartView._pinHelper.isPinned(5) && !gStartView._pinHelper.isPinned(12) , "Items hidden");
     ok(gStartView._set.itemCount === gStartView._limit - 1, "Grid repopulated");
   }
 });
 
 gTests.push({
   desc: "Test bookmarks StartUI delete",
   setUp: setup,
   tearDown: tearDown,
--- a/browser/metro/base/tests/mochitest/browser_history.js
+++ b/browser/metro/base/tests/mochitest/browser_history.js
@@ -38,67 +38,67 @@ function tearDown() {
   HistoryTestHelper.restore();
 }
 
 function uriFromIndex(aIndex) {
   return "http://mock-history-" + aIndex + ".com.br/"
 }
 
 gTests.push({
-  desc: "Test history StartUI unpin",
+  desc: "Test history StartUI hide",
   setUp: setup,
   tearDown: tearDown,
-  run: function testHistoryStartUnpin() {
-    let unpinButton = document.getElementById("unpin-selected-button");
+  run: function testHistoryStartHide() {
+    let hideButton = document.getElementById("hide-selected-button");
 
-    // --------- unpin item 2
+    // --------- hide item 2
 
     let item = gStartView._set.getItemsByUrl(uriFromIndex(2))[0];
 
     let promise = waitForEvent(Elements.contextappbar, "transitionend", null, Elements.contextappbar);
     sendContextMenuClickToElement(window, item, 10, 10);
     yield promise;
 
-    ok(!unpinButton.hidden, "Unpin button is visible.");
+    ok(!hideButton.hidden, "Hide button is visible.");
 
     let promise = waitForEvent(Elements.contextappbar, "transitionend", null, Elements.contextappbar);
-    unpinButton.click();
+    hideButton.click();
     yield promise;
 
     item = gStartView._set.getItemsByUrl(uriFromIndex(2))[0];
 
     ok(!item, "Item not in grid");
-    ok(!gStartView._pinHelper.isPinned(uriFromIndex(2)), "Item unpinned");
+    ok(!gStartView._pinHelper.isPinned(uriFromIndex(2)), "Item hidden");
     is(gStartView._set.itemCount, gStartView._limit, "Grid repopulated");
 
-    // --------- unpin multiple items
+    // --------- hide multiple items
 
     let item1 = gStartView._set.getItemsByUrl(uriFromIndex(0))[0];
     let item2 = gStartView._set.getItemsByUrl(uriFromIndex(5))[0];
     let item3 = gStartView._set.getItemsByUrl(uriFromIndex(12))[0];
 
     scrollToEnd();
     let promise = waitForEvent(Elements.contextappbar, "transitionend", null, Elements.contextappbar);
     sendContextMenuClickToElement(window, item1, 10, 10);
     sendContextMenuClickToElement(window, item2, 10, 10);
     sendContextMenuClickToElement(window, item3, 10, 10);
     yield promise;
 
-    ok(!unpinButton.hidden, "Unpin button is visible.");
+    ok(!hideButton.hidden, "Hide button is visible.");
 
     let promise = waitForEvent(Elements.contextappbar, "transitionend", null, Elements.contextappbar);
-    EventUtils.synthesizeMouse(unpinButton, 10, 10, {}, window);
+    EventUtils.synthesizeMouse(hideButton, 10, 10, {}, window);
     yield promise;
 
     item1 = gStartView._set.getItemsByUrl(uriFromIndex(0))[0];
     item2 = gStartView._set.getItemsByUrl(uriFromIndex(5))[0];
     item3 = gStartView._set.getItemsByUrl(uriFromIndex(12))[0];
 
     ok(!item1 && !item2 && !item3, "Items are not in grid");
-    ok(!gStartView._pinHelper.isPinned(uriFromIndex(0)) && !gStartView._pinHelper.isPinned(uriFromIndex(5)) && !gStartView._pinHelper.isPinned(uriFromIndex(12)) , "Items unpinned");
+    ok(!gStartView._pinHelper.isPinned(uriFromIndex(0)) && !gStartView._pinHelper.isPinned(uriFromIndex(5)) && !gStartView._pinHelper.isPinned(uriFromIndex(12)) , "Items hidden");
     ok(gStartView._set.itemCount === gStartView._limit - 1, "Grid repopulated");
   }
 });
 
 gTests.push({
   desc: "Test history StartUI delete",
   setUp: setup,
   tearDown: tearDown,
--- a/browser/metro/locales/en-US/chrome/browser.properties
+++ b/browser/metro/locales/en-US/chrome/browser.properties
@@ -17,18 +17,18 @@ browser.search.contextTextSearchLabel2=S
 # Contextual Appbar - Button Labels
 
 contextAppbar2.pin.topSites=Pin to Top Sites
 contextAppbar2.pin.bookmarks=Pin to Bookmarks
 contextAppbar2.pin.recentHistory=Pin to Recent History
 contextAppbar2.pin.downloads=Pin to Downloads
 
 contextAppbar2.unpin.topSites=Unpin from Top Sites
-contextAppbar2.unpin.bookmarks=Unpin from Bookmarks
-contextAppbar2.unpin.recentHistory=Unpin from Recent History
+contextAppbar2.hide.bookmarks=Hide Bookmark
+contextAppbar2.hide.recentHistory=Hide
 contextAppbar2.unpin.downloads=Unpin from Downloads
 
 # LOCALIZATION NOTE (contextAppbar2.delete): Deletes selected pages.
 contextAppbar2.delete=Delete
 
 # LOCALIZATION NOTE (contextAppbar2.restore): Undoes a previous deletion.
 # Button with this label only appears immediately after a deletion.
 contextAppbar2.restore=Undo delete
--- a/browser/metro/theme/browser.css
+++ b/browser/metro/theme/browser.css
@@ -945,60 +945,89 @@ documenttab[selected] .documenttab-selec
   transition-timing-function: ease-in;
   transition-delay: 80ms;
 }
 #contextualactions-tray > toolbarbutton > .toolbarbutton-text {
   color: white;
 }
 
 #pin-selected-button {
-  -moz-image-region: rect(0px, 240px, 40px, 200px) !important;
-}
-#pin-selected-button:hover {
-  -moz-image-region: rect(40px, 240px, 80px, 200px) !important;
-}
-#pin-selected-button:active {
-  -moz-image-region: rect(80px, 240px, 120px, 200px) !important;
+  list-style-image: url(chrome://browser/skin/images/navbar-contextual-pin.png);
 }
+
 #unpin-selected-button {
-  -moz-image-region: rect(0px, 280px, 40px, 240px) !important;
-}
-#unpin-selected-button:hover {
-  -moz-image-region: rect(40px, 280px, 80px, 240px) !important;
-}
-#unpin-selected-button:active {
-  -moz-image-region: rect(80px, 280px, 120px, 240px) !important;
+  list-style-image: url(chrome://browser/skin/images/navbar-contextual-unpin.png);
 }
-#delete-selected-button {
-  -moz-image-region: rect(0px, 480px, 40px, 440px) !important;
-}
-#delete-selected-button:hover {
-  -moz-image-region: rect(40px, 480px, 80px, 440px) !important;
-}
-#delete-selected-button:active {
-  -moz-image-region: rect(80px, 480px, 120px, 440px) !important;
+
+#hide-selected-button {
+  list-style-image: url(chrome://browser/skin/images/navbar-contextual-hide.png);
 }
-#clear-selected-button {
-  -moz-image-region: rect(0px, 520px, 40px, 480px) !important;
+
+#delete-selected-button {
+  list-style-image: url(chrome://browser/skin/images/navbar-contextual-delete.png);
 }
-#clear-selected-button:hover {
-  -moz-image-region: rect(40px, 520px, 80px, 480px) !important;
-}
-#clear-selected-button:active {
-  -moz-image-region: rect(80px, 520px, 120px, 480px) !important;
+
+#clear-selected-button {
+  list-style-image: url(chrome://browser/skin/images/navbar-contextual-clear.png);
 }
 
 #restore-selected-button {
-  -moz-image-region: rect(0px, 560px, 40px, 520px) !important;
+  list-style-image: url(chrome://browser/skin/images/navbar-contextual-restore.png);
 }
-#restore-selected-button:hover {
-  -moz-image-region: rect(40px, 560px, 80px, 520px) !important;
+
+@media (min-resolution: @min_res_140pc@) {
+  #pin-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-pin@1.4x.png);
+  }
+
+  #unpin-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-unpin@1.4x.png);
+  }
+
+  #hide-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-hide@1.4x.png);
+  }
+
+  #delete-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-delete@1.4x.png);
+  }
+
+  #clear-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-clear@1.4x.png);
+  }
+
+  #restore-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-restore@1.4x.png);
+  }
 }
-#restore-selected-button:active {
-  -moz-image-region: rect(80px, 560px, 120px, 520px) !important;
+
+@media (min-resolution: @min_res_180pc@) {
+  #pin-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-pin@1.8x.png);
+  }
+
+  #unpin-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-unpin@1.8x.png);
+  }
+
+  #hide-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-hide@1.8x.png);
+  }
+
+  #delete-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-delete@1.8x.png);
+  }
+
+  #clear-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-clear@1.8x.png);
+  }
+
+  #restore-selected-button {
+    list-style-image: url(chrome://browser/skin/images/navbar-contextual-restore@1.8x.png);
+  }
 }
 
 /* Download notifications ======================================================= */
 
 .download-filename-text {
   font-weight: bold;
 }
 .download-host-text {
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5ade4c8411e3c837bccf81378ea0f96a1fa14d18
GIT binary patch
literal 1578
zc$@($2G#kAP)<h;3K|Lk000e1NJLTq004LZ001Zm1^@s6HR?Vk000H?Nkl<Zc-rlp
zPiP!f9LHaSty;x{8xKMdJV;jb&|1p2@uVj~wlsoGvU^fOYE+0CBF!m!s?g+6(seg_
zZt$=mp&F${F@kzbY?SuWg0VDFld!GWW}|Wa4txWTN#?yge{W~zkS~1F?96*_zTIzU
z`u@y}YBU=EhZc|nr$7~41}k8VtZ-YEWpb>e9NG0J^ygZk4V(rGz*P&Z+vae*U4IV#
zBmrkY3Dm)+u7fftf@fG}AIWfAk!7woD7H~z8D&A@ZwX9;G4K{BfKF22wlS7jip`%`
zVSn;~Pk=wz_&;D0bbvh$f5APhGs!j@Y_rQ!&(+@sm;poJ7|8DgmK|c<ji&hXE&7uL
zd=DsV4PF9SpoC=E)~3olmNH`ZHwXGbUIN>g^X9MFqCeMw_k#;;;4bI`$}@dzyTN1a
zH<UH`tAleO?-RCJ7x{}pHh)q7@}^kvcW@Y}CUKa@2sC9qQ?~l6fp-{)ci47K;4e<m
zpFQA;7H&IGO{QH7xdN1hiWcr`Am2=QjGB|b<W#W*+{J=_fgDgVk>fD~^=R9p{H=jO
zkdKK$9@FkGdG$mEoY8uFy+FlGFOR(f9^tkqf8!t@Gvf~ak`(=I4Y;iJmQ_MrGF%GF
zT5ma@5OYR<=}{#d@MB<|W56d93^>bi@;W_*{rwAGPcYzquwn3*4$+?;@M-Rtw1z-Q
ze~$(pAbJY>o3VyKNq;vmWAJAe>j;0hi~cqzzJKM$XKevn1CrP801bL-3Hf{17O*uS
zdHo@SKdT%9lGUd__Fy@;%<0D@p@(bqlp~y5=JaEN(8FTLUs{z@_%X~6A4<<aU-juF
z&?(K|wDb)0SbsX~FLh@y{RM@q{7_6$z(tm;l0aiA3V2NSm*Rk{LE(9RIKawbMu3W$
zgY+~{0u4lb*^~S;P6k5$OnMI_rFn%P%lwcroN;={Pk;&jKe@)i{a2s>T0EV>53}4d
z2~;qgaeBxn!Ixl>!-ZSmM=%PGc{+m&A%7;RP{>#4@o|1%t>AfZ9&C6%gO`=IVzMtP
z5G~|B%Xsf=kdX#VFM;YLP-j#iTFB=(j*il0h9eEQGvv=C{Yv;z)b~uD1Ir!*uDb-R
z>nHFccmTA5K5d%r2j}%udB9=)0^SENgCc{!#eG-7achYF1J=p1qjsC$+XQIkz9Zmo
z;6ru$C3>rFf`_&#_cZvEWqM=2MC)1wUE7p<Q(J!?kNFa<^C+l+u;#&oEc3CqOSHX{
zwN-|W*C_XYCk*(2LnmvC3>~jex&Mkoz|u~Z3S;Pa4RU{nr-0}6VN$^wus!4#xbLnt
zME7CRs5M}F$RpfWHwEZ<n4}y+{(}4N13px>Pjr|y5)tt2*d{v6nv4kePK*;B$|2+n
z+<w2$iH;-ua7{Q>sb8YMHwEl6RjK(~6iihLF43l`O8WDsA)r9cQ@}aHVuLeJX`QT-
zma_8226x`jI$0%CS;1n1M047WbMPk={TY@EowyhLyu)FVe7Vq_m%zeKhDn0uLW$P2
zTau5Ohe__sg#m4#&Pjr-;O4ncwDFu_J=nV7U#F+AzYWkYxOwhdP~>O#^<Xae8~jOh
z6`at9U6S=+`eVSPl!9A!F49AJn|-Ae+_E!k^p_r$qi(ueW`S1{2=`TO@*u-)QU1;*
z5bjwAe~BsVFKn_q1-H!>4CT5LzHQd-FL@QxeB=8>T5o)J@|S?3{6$UlPqD&p;7}98
zJ;Y-Knu=KPF!`&2x0@9%+pY=x#V7i6dH8Ia74O9G@Y!ch4|maD91ov~{KX)fKa<J5
zq07xhPnYa=wza7WkEM**{muHgWV4M~Z~mGpyT6?n?cU}A@T0ENnyhm^^Z<AdP(r#z
z4}cTa`G#%y_vcYA{&s4z6_mGmg+qx4IS4XfFUfFQ56gsK;ZSCq%7Vn-68IdP0Rx}_
zj*|knone`!*!&4)_a}b|%Lm{FaMcagZF4x@u0Nqa>1%+7wbuZxf_1XWZB;NVcn#35
cKcT<>0DgHs`g9FVr2qf`07*qoM6N<$f(j@EH~;_u
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6a3ba29b343720a283117c8df57b630cf7e10ed8
GIT binary patch
literal 2317
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..92f78792379e073c91e304017eb1b978193839a5
GIT binary patch
literal 3181
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
TelQQX00000NkvXXu0mjfupJpC
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0ec2a3458995a2d4a3c02b9f4147d80824815a59
GIT binary patch
literal 1254
zc$@*|1R48@P)<h;3K|Lk000e1NJLTq004LZ001Zm1^@s6HR?Vk000E7Nkl<Zc-rlp
zy-yrh6vZDT1-LZ0air9?TUb$Ko&R9m5NH5*w&ir#(!w7Q(m^CxJ9ZmIvX{<sfi3w%
z^18Lf7No?YW5JQ4NWpCE?B=X=imTC(H+N<pcVg|8erRTS_q{VZ%&_lkT(8&5!Z4Tw
zHLwY`!2viT2mEZ4WhR;9lnnIc)Td224}Ji9KpT6^J+EkQpiiYQyTRjN100J6-+}w!
zDwt%MQ8LcY7FcFi<Q=oFvkIYE^tHhg@Do@Bb6}dx@v}9S**DOq3WYwk!QX-Rto$F)
z0N;Wk#RU#Ar@=b<amczoxhj2K&;-li3W(Ccvdhfv2GLi1P+xX~zX0o^!sp;p0T+CU
zburKe+VbZ4^|iqFAj$*lXa&$0Ca6zq@F;l13O?|nUBTRB-TinB&M0!Fz7F^qL<Msf
zbn@v7A3lAFe|bXOdoTrDAg09Q>ru)(Me6$#+y+q~ZnF)&zS9rt^BcU*gadE^xWHUs
zTm4w~l$HAa;8P$9%uTkX&}SCwK7(gi@UPgN8=5J$*`o$WPSSTQ?%d$8tz(5g%a}RI
z;IraRx(?hab4@%sL>C}YUmZlJOkJVRFsLtXu(*Jyz!~vW80bh`-&+tF@z$fSEK!de
z{59yXk9tvUO!COgp0*yg{So|4O>uqQOkJVmJL@207wXfA`m%<sOV*h+s81Ta!e2ZD
z&X`|8kDB88UV+G%mx=mH71T$Ahs7OuIi(3rpp9nAx-W|-z;I08a!M0+fHrng*1epl
zPZw3-bRb6))Yng(6l2Rn0S$hw7}k8poQlxb23G<a{F`D}vz?$Xw87s1ZB+V+HJ;o9
zt|Z)}rkc>V1)`F$71LMNs5$&-@MJ+{f<Byr1?Dt_zBQEz`iK;)#q?zfry^T4oETW2
zD3QSv%xMXIizPC6QR*wP!7V4c5a%*A$aBxJ_JYnar!Dl&XEK=Qo@1@S^HN_<gXMXX
zh~r!axBH1lJQ*#K!6VE$68fe~Wbm}qSA@ZyV~{D1q`@NtgFiom2ao8Gk7#>?+p#ZM
z1_mp>WEmT*|B_{Ia7%WR<_!$ibdy$%4c2#)><w<j209E3Rt$6)8>}Dbus67tFjQ%4
zFg5IYhAPbrriOi~ufzsd;*$+k1A{e_4NJxb>n9uZ{ovQ~IJ3dj=b0`v8Oi#^GhJvs
zlJz1<UkOLDR`O2xH#IX!1{3}}nwcbn3IA%qnI!5<Ub6E9I3u=FEQxsoA|u}XFPH3)
zG0|ziX1wTbEaCTK){E{G`phD(FD`P{df6;BxD%K)UN-C3XCJe^h3^}N3*YN0%5PXK
zd{^nSi+Yx=E0uueRtng<ax0*@w?4bAE94A#EH<Cr2w?8@9GlOiz7Dt(=zne}kG?W)
zK9hV2?ubgB6}Wx$nW*<J+w$aj^=%ipeRMm3z5wCZmqzFe_+4xOe*mf(Hh@=|D>s18
zc=ELRx*QBy%CG@^iMib%`ic(f3;7C%U2q@FfeDrwA>;gP&hQlu`|Q)N{>LjERtK+e
zAml6XV~&@ItgsH3l7YUQ`trO6r~;P6Yk&^H2Xe^IHd&^^9H(TUFQ>kL0hbh0@+uo}
Q_5c6?07*qoM6N<$g4yn1H2?qr
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6757eaf212c2ce2b434673ac95f54e4cb7623149
GIT binary patch
literal 1931
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
RpzZ(w002ovPDHLkV1oF|uF3!a
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..160fcc54ade4733c0635068d8db047d46f13ddb6
GIT binary patch
literal 2422
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
T1hu`w&kC@y!dcdu```NyWM_qi
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a40af1cc70ef9ee334b09859a07ba99f79e2024e
GIT binary patch
literal 3185
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a50c1d3c366013263fdba436d1fc3d8a8b7691aa
GIT binary patch
literal 4458
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e9dcd36a8cf103a90676e48bcbe4d572562ae418
GIT binary patch
literal 5746
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
SbmH&7z$OM3`VY>!ME@5`+G3sn
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4758188a7db0d8bfd87950de7f33afc0077680d0
GIT binary patch
literal 1727
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
VO-F9%0BryO002ovPDHLkV1mn9OpyQp
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b9a73e233bbad025258bcac593417d65fea00a1a
GIT binary patch
literal 2552
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
O0000<MNUMnLSTXrN8957
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3d5f886c9ba506bccd16c39a32c1727058863a2e
GIT binary patch
literal 3286
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0dca549403d696578eb01cbfdc4d47d66565a40a
GIT binary patch
literal 1798
zc$@(S2l@DkP)<h;3K|Lk000e1NJLTq004LZ001Zm1^@s6HR?Vk000KfNkl<Zc-rlp
zPi$0G6vl5$sen5N-PmZN#)`542^mCJ{)urhKtqsrs)>IH3KA<C6oMK}NH9W)1WU)b
zlhB13qo5WAH4;rUM$>8)L4}yw*rJwnp|sP^bo@xZ#mNmXch0@@-mvJG{F?N=`{yg?
zap$~q-y2gdmwl)QX|NUK!4F^*Ops9?%d<_IeT<SBe}VqA9h$&SFbK37WZx#md^7$O
z{z3wr0$rdWCOiYWK|8pWZ5m06$J*KEjObV3SSf{3AAcjD7j%NBKo+!+ERS`v%}BET
z^iud!2l#&QHwQ0*9<UtLDgMAZ_UYjmWsbSl(NF8I1df9(U<Jrj0^4q3-%>38sxA5p
z32+1G76TpwHvtm}#=uw<=V);DbNlND8$c!mj?o{3zj#D{+5pc3?{k20upXEyvz}v@
zIoCWzU+J#^UI&?K!Z8a${t}SOU(}U%h#mg|OM!`rrJSS8IqfUa<!=l;4Ki`SvB$jp
zB`^AO2RJ8!+YC(1G>ahTDrlb*!F?QL;)HXIsr=PWIah$!vf+Oq4NO9$Ip+nniQ`fJ
zCcrZwlLVY=LgBBLYKsbRN@RQMJc3jQb_WD`9p@eeSMpetzkMD-S^?e-2=YFKKOar=
zLJE@YPa5nN*|JeG8@$E-CV*oROO5o`?-86;;4}8m1kmsB=c`HZAjheOa&~~P;Up!n
zKpB+FSuCJ}Z=s4{lAdgT(_o`AC~LsCfC|2aDn<J9)4$+8F;=+fPX>4=PxN?HXubwg
zCJcCh=*jkXTp5roI0d9KfgF$Yr`JCs*CFAO{tS!QfAHY#ia=Zoeg?M2!3nSj-0TtH
z<)BPY^_IV96@hq^{cIIj*L_dB8jvj!{<Qi%qHr{atLSF%6YvxLF@t4oSyz7i2)I-P
z`@vjgvUZyN)570~vi$fRaH+(Pm(|K-ZP@bXqkDmIFpIZo=YfyX20yleG6P{0TmilU
zwoWs!QlEfE#n}7VZ>#Xv>#;na1h$45SgC%{q8PhZ`U}W*mjPpO9Rn+m-Q~GavDM&5
zp1-sM<B?z;l_QGJ=IvlY9Pd($+s;0D;ja^9JQA!vX-)+HfRz}1s2I1?_7{*~-6Q{Y
z@!7lsTqcfh1X|?{ehl!JMZkE_2;PoJvhDx{v0N{#aLmQ*Ga&qRcqT<H;LC_4>p3tb
zmg`Lwj@e=P3*G)(6Om+nAy&Rw9&-&CUM=O2{ZCH*W<(afT}=2|#mhghWZ^Fxkom3z
zA4g=-2ZX=FisfJU3szASmu&3-hIDANbR+(U@k;Tg4!jx>tRm+)p;#4ob<-a|BLi3g
z-iZiSiE|7pRt3vnu%?-z+Zq+0$qTfrgHM33786#=ui`T&?f^doRw{%4C+8SXAizVQ
zsO)ot$a$0j)-Tah<QtCwPbRQL7s)Rk0WK!6L^rUsyTl{Fv-L}~KFK;Il9H?J^NuC@
zWQB7q3P`es#FF=becrJ|4<(Rf-6%fN&e|s(OLVh3$r5RPmV>z1D+YMUKCei!w6{sS
zEBwblEavO6&j%-2;kQXo0z+PKv<*$N@;-%*h2n}YfV<`S;M=6|LdPaB%|27$d3iqg
zHYvQ&F#zgCu5nDBbl)cF3mwZu1*%RH0BQof2<G#gEOd;^LWfVOQurHIlq!3zot1;2
zo#$ksqo6Nzuv97i>9xU1C|?$P$+FNfC$P|w_S$TqsZW7ak%9RQOgT!Gac?%XfbTC-
zcOE81N2xOI&4vQF)2=13OnE(M2rgC9U&wahT#y4LM=?Lgwn=Xnt_DZIwBz3M2-_yT
zU3eZm=6EHgo^8&DY!_ajiC0L`<Jsq1z#bMc#sjts<%WNOo@{?5k7u8s;MU+EC<JX6
za>GB;pPzmNn_0w|Q>E=f`eT4emwaTWMjRCnbKB>-<Rd#ZqR;KG_LBaj!IZdZf4Bz0
zeMBS}DISaRx3>nt-K+3dGui%ZldUy<Y}S20-df|wX5Id3uk5A#;QJew?1S%mf60sf
zTmfzruU?!5OJWS}5>c)@<hqrT{zQ;B#}!<TJ?7;vY0;nN<+EOq&d2@o*#{mkcl9Rm
z@>!6-1myDPdYD}<H%F_qWH(!n`Q$j4QDXb+tHzSeG5TWg7lYjXDlyu6kr%*kv&x!I
z*yo`20(cuRfwTs_08ZHFb5M%KUlpbCSE<SQp!*_U;n2lN7Be-UO;SA8#y0j>ICOJN
zqd@C#g!ScJpo7`vDw5@~U2HRwtUtXJ{(`@R<rOdlv>IaHCdGU+{sR4lehttz@ijo_
oz$7`xV|ljm{TiSde}Vq~2L;Sc>gp>IOaK4?07*qoM6N<$f|+Gzr~m)}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ada02175a427aef226e6b39f607f8082dfa2748d
GIT binary patch
literal 2658
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
QPXGV_07*qoM6N<$f|)`sBLDyZ
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1805719f677814dd6c31fa6bc3627f4baa64bb3d
GIT binary patch
literal 3563
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
LiMDuShQ0qk#cVk1
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8207196cb49ce1077e012ca3b070081e138fb595
GIT binary patch
literal 1888
zc$@)X2cP(fP)<h;3K|Lk000e1NJLTq004LZ001Zm1ONa4pX2tf000LkNkl<Zcmd7Y
zZEV%${m1dwIov72m_i4PmP|3ULcAOBcRDcWs7OSkWJ4MJZ^m$?N^w3KH^YHSW3oiu
z+6pK!yTLKtBF39kkx8d0Q^CoM(lU_=?T{2QI}ovd=~*8%S8`6T^UFDX#OvXC@J>Ft
z&XaG>Ny#gdHpMk28*hwr@R>II?6Te4x)kq>=%q5EO5JI`GI57Ip+T#-GrE`7+i(r`
zTc*qb>n$+J2!jkV!Xyi<cR-nC_G>U)f=KU(Mi08%d~?h(-`yV6=t!S?aU#8h7oMxZ
z2&X-z-cA|4rCe!=x%xS3i6<opy)HXEuO;47Znmk?Mf3_1dU*%;S7$M{snIN1g*r2^
zUX3qBh29<;v`SX0%B7NfX$=-DPEIdPFxVE0ol>Pz@?2<EsmdvfZ82ETtJkT)Dy>M?
zYLy0^2|c<TQLNC*9o*k$v+<(G6zWk|Yd70w{pAR~cWhOtmn_#I-b;hk)+kcw<qWQO
z6S&z%DTR95H0^FuFGuKoOHC2Izgwmw+Iz&$`aC)Ggu%C}a?-P4VNsJ?+~}k#^8iBc
z3vYoLMNMvVpD&`l)%rd;^wMCsdfep}k0(sN&G};9bQkKC0HODowYDWpo@S(&eIASU
zNS^$A2jmlaX>h+0w%Mr5?Fo~=p~*Ng8*Ou*`yll8*eatgVe&||Mv2*KPp=*%PyUDL
z_RFWIm&RB>)MY71o;+5Q@nUM6w$NC5dKr&`<jEy!jS;g!S5^-NOg?D3ee&t<kw&!v
zp0t+&CYRc-TyM>uGC(ywz1JL~fXO4QjZSX0Bde#t$*r!@BCfkfTG|3MfaJ;Jz}Gdo
zNN@F65PB~_@?@jHd1{sE?fI;p0w(VV|1{lRaoxSNDM}si2Fa7%YY||SCKKh_=_944
z=<Ye9ndHglyAE)!T4UvE@k!_@VDddS0zNU_`(nC#smyY<*11EnwN?nwuF@Xa9#L(%
zlv<6}N%r5qCqRdL9FVQrte##nSgBTk5-+<{Z_E3egxAGfWia3dKPD&mCzbvx!0W0_
z27AR+7zCK&CfSC$-zpyou-7b;<@bh@fEPS0Tf6Ug+2wLg?yns0iy7t_1I2V`_P%fC
z4E_M+;Gmdutkhr3Nv#eV7X}NJa`|<*S*Ms`DopfFWN>+Zqj5+~qj{dvPp+qZS4M9i
zV>D<Nv)j-8L|U$$9*FkZLoaTY&E`5S*BpP85;r<+D2|JJ+W++mzUO~s#GJrTL-Dz|
zogUUD+s7V?_k13D`ONVv{bak?uk+4jXj-yOs$~R@xy1>6*JNE*@3^&2>AMBiWz8FI
ziy;!E9mi1lJ)uS5m-fqN2#!0BvlAz`2|VW$`J5ekN#-jTSZbUk$I}j@Og@7>r^2TI
zI*}4L7Ka^1iF^iGrPOBtzD($qgkF9p-Kg1D0SuJva9Rr{h#R8OwLWx-TH&+2$Kyn_
zXhE5{v#fTB!)p9N_$=@7I5zb1IboJpT<C9B2%lLazm~M!m?~zdMptVw-61Re0?;q-
zz5H$LvKte`oNcv<+N^NYZ#@S{=e?IN3ca}FW_eY)CS}&T3vfE|Ufz|q9W$lm8s<e)
zHM>R|xZ6f>7SYKmGqK%vTpsBSw#EdlRyYPW+6o2|ot$!c=*4un-VPPE8v`D)2%I8e
z^7gd1w7S4mz2?5;Dj%5cFd$>G-(e8Z$yd5StG9Lcj8f5S?!77;vckVY?-75-0HTx2
zjS9Wk+?n1mL6gydl=Z%kPV!Ff?xl6vgga$>(G}h^-4TM*{>L`0;>Y6>Y|_=!yFs=!
z#{1X`pAvL=$h(e;ACI#Mz22_(ri(QhNzl)4%utqaJa+feXwYe{3J6Af%eC5NJ8hRP
ziz1UN%+;xZp59cY5S(kDl{#eW@}c<gSZZokFV|uJ<rO8e^)or)UheLZ%0PoVY*VRF
zDH|;Wk6R>zttzco4L!X*Ru$2!F#~K<Cxd%kmeVUn7#qezcaJo<$1yYfK%p`@ue?yD
zV}1&ucc~c?CEUw1T-K{sgy<{x^wQv%C8&2rpC&(}4oe*aLa)mBK22V!D%zv(lS40+
z0a&j}yJ=eb@Wtj)Rf5p#uuNNVU+l!5K7X-Cs{+yhmU>o+S4}GFmA8Or)gTDHVIFW{
zQLnr+vDf!kt|oVIr+FHE&1-(7P`8_f7tGTMkkjj)Y^Fk8XHs&n&y&02KbH<rrwT8t
z(IQ#7I+fU<#{Y{7y?1TUCfOKOE-R>4oDJ@Dn)qP2O<m6q;&uKaBj!p=+^V0Wmf9>q
z=q3FiPK6sxlP;oHn9xfa%n0{cXdn(~v_rFl{*A8~tHM;XoR3bATji*@c<+eaKG3S&
zNeot^)C7}^>{BmUyqEB&mL(P#Bd*OR^;*T9p}pk6kT%7&CK<2P5S-9zpWR+b{+rR6
a-TM#QsoiAODp@}O0000<MNUMnLSTZLd9UjL
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6645ca6e66355d001e75130789e1e79c19c86bd9
GIT binary patch
literal 2640
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2d884199c1e8a6cf7f65ed9a6ab13ab940192b9e
GIT binary patch
literal 3588
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
--- a/browser/metro/theme/jar.mn
+++ b/browser/metro/theme/jar.mn
@@ -22,16 +22,34 @@ chrome.jar:
 % override chrome://global/skin/about.css chrome://browser/skin/about.css
 % override chrome://global/skin/media/videocontrols.css chrome://browser/skin/touchcontrols.css
 % override chrome://global/skin/netError.css chrome://browser/skin/netError.css
 
   skin/images/panel-dark.png                (images/panel-dark.png)
   skin/images/navbar-back.png               (images/navbar-back.png)
   skin/images/navbar-back@1.4x.png          (images/navbar-back@1.4x.png)
   skin/images/navbar-back@1.8x.png          (images/navbar-back@1.8x.png)
+  skin/images/navbar-contextual-clear.png (images/navbar-contextual-clear.png)
+  skin/images/navbar-contextual-clear@1.4x.png (images/navbar-contextual-clear@1.4x.png)
+  skin/images/navbar-contextual-clear@1.8x.png (images/navbar-contextual-clear@1.8x.png)
+  skin/images/navbar-contextual-delete.png (images/navbar-contextual-delete.png)
+  skin/images/navbar-contextual-delete@1.4x.png (images/navbar-contextual-delete@1.4x.png)
+  skin/images/navbar-contextual-delete@1.8x.png (images/navbar-contextual-delete@1.8x.png)
+  skin/images/navbar-contextual-hide.png (images/navbar-contextual-hide.png)
+  skin/images/navbar-contextual-hide@1.4x.png (images/navbar-contextual-hide@1.4x.png)
+  skin/images/navbar-contextual-hide@1.8x.png (images/navbar-contextual-hide@1.8x.png)
+  skin/images/navbar-contextual-pin.png (images/navbar-contextual-pin.png)
+  skin/images/navbar-contextual-pin@1.4x.png (images/navbar-contextual-pin@1.4x.png)
+  skin/images/navbar-contextual-pin@1.8x.png (images/navbar-contextual-pin@1.8x.png)
+  skin/images/navbar-contextual-restore.png (images/navbar-contextual-restore.png)
+  skin/images/navbar-contextual-restore@1.4x.png (images/navbar-contextual-restore@1.4x.png)
+  skin/images/navbar-contextual-restore@1.8x.png (images/navbar-contextual-restore@1.8x.png)
+  skin/images/navbar-contextual-unpin.png (images/navbar-contextual-unpin.png)
+  skin/images/navbar-contextual-unpin@1.4x.png (images/navbar-contextual-unpin@1.4x.png)
+  skin/images/navbar-contextual-unpin@1.8x.png (images/navbar-contextual-unpin@1.8x.png)
   skin/images/navbar-download.png           (images/navbar-download.png)
   skin/images/navbar-download@1.4x.png      (images/navbar-download@1.4x.png)
   skin/images/navbar-download@1.8x.png      (images/navbar-download@1.8x.png)
   skin/images/navbar-forward.png            (images/navbar-forward.png)
   skin/images/navbar-forward@1.4x.png       (images/navbar-forward@1.4x.png)
   skin/images/navbar-forward@1.8x.png       (images/navbar-forward@1.8x.png)
   skin/images/navbar-star.png               (images/navbar-star.png)
   skin/images/navbar-star@1.4x.png          (images/navbar-star@1.4x.png)
--- a/browser/metro/theme/platform.css
+++ b/browser/metro/theme/platform.css
@@ -631,16 +631,20 @@ tabmodalprompt:not([promptType="promptUs
     min-width: @touch_action_snapped_minwidth@;
   }
 }
 
 /*.meta -------------------------------------------------------------------- */
 
 .meta {
   background-color: @panel_light_color@;
+  background-image: url("chrome://browser/skin/images/firefox-watermark.png");
+  background-repeat: no-repeat;
+  background-position: center center;
+  background-attachment: fixed;
 }
 
 /* needs to observe the viewstate */
 .meta-section-container {
   padding: 45px 75px 0;
   -moz-box-orient: horizontal;
 }
 
--- a/browser/metro/theme/touchcontrols.css
+++ b/browser/metro/theme/touchcontrols.css
@@ -49,17 +49,17 @@
 }
 
 /*
  * Normally the button bar has fullscreen spacer play spacer mute, but if
  * this is an audio control rather than a video control, the fullscreen button
  * is hidden by videocontrols.xml, and that alters the position of the
  * play button.  This workaround moves it back to center.
  */
-.controlBar.audio .playButton {
+.controlBar.audio-only .playButton {
   transform: translateX(28px);
 }
 
 .playButton[paused="true"] {
   background: url("chrome://browser/skin/images/play-hdpi.png") no-repeat center;
 }
 
 .muteButton {
--- a/browser/modules/CharsetMenu.jsm
+++ b/browser/modules/CharsetMenu.jsm
@@ -46,17 +46,16 @@ const kEncodings = new Set([
   "KOI8-U",
   "IBM866", // Not in menu in Chromium. Maybe drop this?
   // "x-mac-cyrillic", // Not in menu in IE11 or Chromium.
   // Greek
   "windows-1253",
   "ISO-8859-7",
   // Hebrew
   "windows-1255",
-  "ISO-8859-8-I",
   "ISO-8859-8",
   // Japanese
   "Shift_JIS",
   "EUC-JP",
   "ISO-2022-JP",
   // Korean
   "EUC-KR",
   // Thai
--- a/browser/modules/test/browser.ini
+++ b/browser/modules/test/browser.ini
@@ -1,6 +1,6 @@
 [DEFAULT]
 
 [browser_NetworkPrioritizer.js]
 [browser_SignInToWebsite.js]
 [browser_UITour.js]
-support-files = uitour.*
\ No newline at end of file
+support-files = uitour.*
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -505,16 +505,21 @@ menuitem:not([type]):not(.menuitem-toolt
   opacity: 0;
   pointer-events: none;
 }
 
 @conditionalForwardWithUrlbar@:not([switchingtabs]) > #forward-button {
   transition: @forwardTransitionLength@ ease-out;
 }
 
+#back-button:-moz-locale-dir(rtl) > .toolbarbutton-icon,
+#forward-button:-moz-locale-dir(rtl) > .toolbarbutton-icon {
+  transform: scaleX(-1);
+}
+
 /* tabview button */
 
 #tabview-button,
 #menu_tabview {
   list-style-image: url(chrome://browser/skin/tabview/tabview.png);
   -moz-image-region: rect(0, 80px, 16px, 64px);
 }
 
deleted file mode 100644
--- a/browser/themes/linux/devtools/common.css
+++ /dev/null
@@ -1,351 +0,0 @@
-/* vim:set ts=2 sw=2 sts=2 et: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* Font for code */
-
-:root {
-  font: message-box;
-}
-
-.devtools-monospace {
-  font-family: monospace;
-  font-size: 80%;
-}
-
-/* Toolbar and Toolbar items */
-
-.devtools-toolbar {
-  -moz-appearance: none;
-  padding: 4px 3px;
-  border-bottom-width: 1px;
-  border-bottom-style: solid;
-}
-
-.devtools-menulist,
-.devtools-toolbarbutton {
-  -moz-appearance: none;
-  -moz-box-align: center;
-  min-width: 78px;
-  min-height: 22px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  border: 1px solid hsla(210,8%,5%,.45);
-  border-radius: 3px;
-  background: linear-gradient(hsla(212,7%,57%,.35), hsla(212,7%,57%,.1)) padding-box;
-  box-shadow: 0 1px 0 hsla(210,16%,76%,.15) inset, 0 0 0 1px hsla(210,16%,76%,.15) inset, 0 1px 0 hsla(210,16%,76%,.15);
-  margin: 0 3px;
-  color: inherit;
-}
-
-.devtools-toolbarbutton > .toolbarbutton-menubutton-button {
-  -moz-box-orient: horizontal;
-}
-
-.devtools-menulist:-moz-focusring,
-.devtools-toolbarbutton:-moz-focusring {
-  outline: 1px dotted hsla(210,30%,85%,0.7);
-  outline-offset: -4px;
-}
-
-.devtools-toolbarbutton:not([label]) {
-  min-width: 32px;
-}
-
-.devtools-toolbarbutton:not([label]) > .toolbarbutton-text {
-  display: none;
-}
-
-.devtools-toolbarbutton:not([checked=true]):hover:active {
-  border-color: hsla(210,8%,5%,.6);
-  background: linear-gradient(hsla(220,6%,10%,.3), hsla(212,7%,57%,.15) 65%, hsla(212,7%,57%,.3));
-  box-shadow: 0 0 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-menulist[open=true],
-.devtools-toolbarbutton[open=true],
-.devtools-toolbarbutton[checked=true] {
-  border-color: hsla(210,8%,5%,.6) !important;
-  background: linear-gradient(hsla(220,6%,10%,.6), hsla(210,11%,18%,.45) 75%, hsla(210,11%,30%,.4));
-  box-shadow: 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-toolbarbutton[checked=true] {
-  color: hsl(208,100%,60%) !important;
-}
-
-.devtools-toolbarbutton[checked=true]:hover {
-  background-color: transparent !important;
-}
-
-.devtools-toolbarbutton[checked=true]:hover:active {
-  background-color: hsla(210,8%,5%,.2) !important;
-}
-
-.devtools-option-toolbarbutton {
-  -moz-appearance: none;
-  list-style-image: url("chrome://browser/skin/devtools/option-icon.png");
-  -moz-image-region: rect(0px 16px 16px 0px);
-  background: none;
-  border: none;
-}
-
-.devtools-option-toolbarbutton[open=true] {
-  -moz-image-region: rect(0px 32px 16px 16px);
-}
-
-.devtools-menulist > .menulist-label-box {
-  text-align: center;
-}
-
-.devtools-menulist > .menulist-dropmarker {
-  -moz-appearance: none;
-  display: -moz-box;
-  list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-  -moz-box-align: center;
-  min-width: 16px;
-}
-
-.devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-button {
-  -moz-appearance: none;
-  color: inherit;
-  border-width: 0;
-  -moz-border-end: 1px solid hsla(210,8%,5%,.45);
-  box-shadow: -1px 0 0 hsla(210,16%,76%,.15) inset, 1px 0 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-toolbarbutton[type=menu-button]:-moz-locale-dir(rtl) > .toolbarbutton-menubutton-button {
-  box-shadow: 1px 0 0 hsla(210,16%,76%,.15) inset, -1px 0 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-toolbarbutton[type=menu-button] {
-  padding: 0 1px;
-  -moz-box-align: stretch;
-}
-
-.devtools-toolbarbutton[type=menu] > .toolbarbutton-menu-dropmarker,
-.devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-dropmarker {
-  -moz-appearance: none !important;
-  list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-  -moz-box-align: center;
-  padding: 0 3px;
-}
-
-/* Text input */
-
-.devtools-textinput,
-.devtools-searchinput {
-  -moz-appearance: none;
-  margin: 0 3px;
-  min-height: 22px;
-  border: 1px solid hsla(210,8%,5%,.6);
-  border-radius: 2px;
-  background-color: transparent;
-  background-image: linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35));
-  padding: 3px;
-  box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset,
-              0 0 0 1px hsla(210,16%,76%,.1) inset,
-              0 1px 0 hsla(210,16%,76%,.15);
-  color: inherit;
-}
-
-.devtools-searchinput {
-  padding-top: 0;
-  padding-bottom: 0;
-  -moz-padding-start: 18px;
-  -moz-padding-end: 12px;
-  background-image: url(magnifying-glass.png), linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35));
-  background-position: 4px center, top left, top left;
-  background-repeat: no-repeat;
-  font-size: inherit;
-}
-
-.devtools-searchinput:-moz-locale-dir(rtl) {
-  background-position: calc(100% - 4px) center, top left, top left;
-}
-
-.devtools-searchinput > .textbox-input-box > .textbox-search-icons {
-  display: none;
-}
-
-.devtools-searchinput > .textbox-input-box > .textbox-input::-moz-placeholder {
-  color: hsl(208,10%,66%);
-  opacity: 1.0;
-}
-
-.devtools-no-search-result {
-  box-shadow: inset 0 0 0 1px hsla(0,68%,6%,.35);
-  border-color: hsl(10,70%,40%) hsl(10,75%,37%) hsl(10,80%,35%) !important;
-  background-image: url(magnifying-glass.png), linear-gradient(hsla(1,16%,76%,.45), hsla(1,16%,76%,.75));
-}
-
-/* Close button */
-
-.devtools-closebutton {
-  list-style-image: url("chrome://browser/skin/devtools/close.png");
-  -moz-appearance: none;
-  border: none;
-  margin: 0 4px;
-  min-width: 16px;
-  width: 16px;
-  opacity: 0.6;
-}
-
-.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;
-}
-
-.devtools-closebutton > .toolbarbutton-text {
-  display: none;
-}
-
-.devtools-closebutton:hover {
-  opacity: 0.8;
-}
-
-.devtools-closebutton:hover:active {
-  opacity: 1;
-}
-
-/* Splitters */
-
-.devtools-horizontal-splitter {
-  -moz-appearance: none;
-  border-top: 1px solid black;
-  border-bottom-width: 0;
-  min-height: 3px;
-  height: 3px;
-  margin-bottom: -3px;
-  position: relative;
-}
-
-.devtools-side-splitter {
-  -moz-appearance: none;
-  border: 0;
-  -moz-border-start: 1px solid black;
-  min-width: 0;
-  width: 3px;
-  background-color: transparent;
-  -moz-margin-end: -3px;
-  position: relative;
-  cursor: e-resize;
-}
-
-/* In-tools sidebar */
-
-.devtools-toolbox-side-iframe {
-  min-width: 465px;
-}
-
-.devtools-sidebar-tabs {
-  -moz-appearance: none;
-  margin: 0;
-}
-
-.devtools-sidebar-tabs > tabpanels {
-  -moz-appearance: none;
-  padding: 0;
-  border: 0;
-}
-
-.devtools-sidebar-tabs > tabs {
-  -moz-appearance: none;
-  position: static;
-  color: #b6babf;
-  margin-bottom: 0;
-  padding: 0;
-  background-color: #343c45;
-  border-width: 0 0 1px 0;
-  border-color: hsla(210,8%,5%,.6);
-  border-style: solid;
-  overflow: hidden;
-}
-
-.devtools-sidebar-tabs > tabs > .tabs-right,
-.devtools-sidebar-tabs > tabs > .tabs-left {
-  display: none;
-}
-
-.devtools-sidebar-tabs > tabs > tab {
-  -moz-appearance: none;
-  /* We want to match the height of a toolbar with a toolbarbutton
-   * First, we need to replicated the padding of toolbar (4px),
-   * then we need to take the border of the buttons into account (1px).
-   */
-  padding: 5px 3px;
-  -moz-padding-start: 6px;
-  margin: 0;
-  min-width: 78px;
-  /* toolbar's min-height is button min-height (25px) + padding (2 * 4px): 33px.
-   * -1px because the parent element (<tabs>) comes with a 1px bottom border.
-   */
-  min-height: 32px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  text-align: center;
-  color: inherit;
-  -moz-box-flex: 1;
-  border-width: 0;
-  background: transparent;
-  border-radius: 0;
-  position: static;
-  -moz-margin-start: -1px;
-}
-
-.devtools-sidebar-tabs > tabs > tab:first-of-type {
-  -moz-margin-start: -3px;
-}
-
-.devtools-sidebar-tabs > tabs > tab {
-  background-size: calc(100% - 2px) 100%, 1px 100%;
-  background-repeat: no-repeat;
-  background-position: 1px, 0;
-}
-
-.devtools-sidebar-tabs:-moz-locale-dir(rtl) > tabs > tab {
-  background-position: calc(100% - 1px), 100%;
-}
-
-%filter substitution
-%define smallSeparator linear-gradient(transparent 15%, #5a6169 15%, #5a6169 85%, transparent 85%)
-%define solidSeparator linear-gradient(#2d5b7d, #2d5b7d)
-
-.devtools-sidebar-tabs > tabs > tab {
-  background-image: linear-gradient(transparent, transparent), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab:hover {
-  background-image: linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.2)), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab:hover:active {
-  background-image: linear-gradient(hsla(206,37%,4%,.4), hsla(206,37%,4%,.4)), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab {
-  background-image: linear-gradient(transparent, transparent), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab:hover {
-  background-image: linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.2)), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab:hover:active {
-  background-image: linear-gradient(hsla(206,37%,4%,.4), hsla(206,37%,4%,.4)), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] {
-  color: #f5f7fa;
-  background-image: linear-gradient(#1d4f73, #1d4f73), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true]:hover {
-  background-image: linear-gradient(#274f64, #274f64), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true]:hover:active {
-  background-image: linear-gradient(#1f3e4f, #1f3e4f), @solidSeparator@;
-}
-
-%include ../../shared/devtools/common.inc.css
--- a/browser/themes/linux/devtools/debugger.css
+++ b/browser/themes/linux/devtools/debugger.css
@@ -384,24 +384,35 @@
   width: 200px;
 }
 
 #resumption-order-panel {
   -moz-margin-start: -8px;
 }
 
 #resume {
-  list-style-image: url("chrome://browser/skin/devtools/debugger-play.png");
+  list-style-image: url("chrome://browser/skin/devtools/debugger-pause.png");
   -moz-image-region: rect(0px,16px,16px,0px);
+  transition: background 0.15s ease-in-out;
 }
 
 #resume[checked] {
+  background: none;
+  list-style-image: url("chrome://browser/skin/devtools/debugger-play.png");
   -moz-image-region: rect(0px,32px,16px,16px);
 }
 
+#resume ~ toolbarbutton {
+  transition: opacity 0.15s ease-in-out;
+}
+
+#resume:not([checked]) ~ toolbarbutton {
+  opacity: 0.5;
+}
+
 #step-over {
   list-style-image: url("chrome://browser/skin/devtools/debugger-step-over.png");
 }
 
 #step-in {
   list-style-image: url("chrome://browser/skin/devtools/debugger-step-in.png");
 }
 
deleted file mode 100644
--- a/browser/themes/linux/devtools/toolbox.css
+++ /dev/null
@@ -1,288 +0,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/. */
-
-#toolbox-controls {
-  margin: 0 4px;
-}
-
-#toolbox-controls > toolbarbutton,
-#toolbox-dock-buttons > toolbarbutton {
-  -moz-appearance: none;
-  margin: 0 4px;
-  min-width: 16px;
-  width: 16px;
-}
-
-#toolbox-dock-bottom {
-  list-style-image: url("chrome://browser/skin/devtools/dock-bottom.png");
-}
-
-#toolbox-dock-side {
-  list-style-image: url("chrome://browser/skin/devtools/dock-side.png");
-}
-
-#toolbox-dock-window {
-  list-style-image: url("chrome://browser/skin/devtools/undock.png");
-}
-
-#toolbox-dock-window,
-#toolbox-dock-bottom,
-#toolbox-dock-side {
-  opacity: 0.6;
-}
-
-#toolbox-dock-window:hover,
-#toolbox-dock-bottom:hover,
-#toolbox-dock-side:hover {
-  opacity: 1;
-}
-
-#toolbox-controls-separator {
-  width: 3px;
-  background-image: linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0)),
-                    linear-gradient(hsla(206,37%,4%,0), hsla(206,37%,4%,.6), hsla(206,37%,4%,0)),
-                    linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0));
-  background-size: 1px 100%;
-  background-repeat: no-repeat;
-  background-position: 0, 1px, 2px;
-  -moz-margin-start: 8px;
-}
-
-/* Command buttons */
-
-.command-button {
-  -moz-appearance: none;
-  padding: 0 8px;
-  margin: 0;
-  width: 16px;
-}
-
-.command-button:hover {
-  background-color: hsla(206,37%,4%,.2);
-}
-.command-button:hover:active, .command-button[checked=true]:not(:hover) {
-  background-color: hsla(206,37%,4%,.4);
-}
-
-#command-button-paintflashing {
-  list-style-image: url("chrome://browser/skin/devtools/command-paintflashing.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-paintflashing:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-#command-button-paintflashing:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-#command-button-paintflashing[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-responsive {
-  list-style-image: url("chrome://browser/skin/devtools/command-responsivemode.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-responsive:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-#command-button-responsive:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-#command-button-responsive[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-tilt {
-  list-style-image: url("chrome://browser/skin/devtools/command-tilt.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-tilt:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-
-#command-button-tilt:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-
-#command-button-tilt[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-scratchpad {
-  list-style-image: url("chrome://browser/skin/devtools/command-scratchpad.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-
-#command-button-scratchpad:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-
-#command-button-scratchpad:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-
-/* Tabs */
-
-.devtools-tabbar {
-  -moz-appearance: none;
-  background-image: url("background-noise-toolbar.png"),
-                    linear-gradient(#303840, #2d3640);
-  border-color: #060a0d;
-  border-style: solid;
-  border-width: 1px 0;
-  box-shadow: 0 1px 0 hsla(204,45%,98%,.05) inset,
-              0 -1px 0 hsla(206,37%,4%,.1) inset;
-  min-height: 32px;
-  padding: 0;
-}
-
-#toolbox-tabs {
-  margin: 0;
-}
-
-.devtools-tab {
-  -moz-appearance: none;
-  min-width: 32px;
-  min-height: 32px;
-  max-width: 127px;
-  color: #b6babf;
-  margin: 0;
-  padding: 0;
-  background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1));
-  background-size: 1px 100%;
-  background-repeat: no-repeat;
-  background-position: left, right;
-  border-right: 1px solid hsla(206,37%,4%,.45);
-  -moz-box-align: center;
-}
-
-.devtools-tab > image {
-  border: none;
-  -moz-margin-end: 0;
-  -moz-margin-start: 4px;
-  opacity: 0.6;
-  max-height: 16px;
-  width: 16px; /* Prevents collapse during theme switching */
-}
-
-#toolbox-tab-options > image {
-  margin: 0 8px;
-}
-
-.devtools-tab > label {
-  white-space: nowrap;
-}
-
-.devtools-tab:hover > image {
-  opacity: 0.8;
-}
-
-.devtools-tab:active > image,
-.devtools-tab[selected=true] > label {
-  opacity: 1;
-}
-
-.devtools-tab:hover {
-  background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(206,37%,4%,.1), hsla(206,37%,4%,.2));
-  background-size: 1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: left, right;
-  color: #ced3d9;
-}
-.devtools-tab:hover:active {
-  background-color: hsla(206,37%,4%,.2);
-  color: #f5f7fa;
-}
-
-.devtools-tab[selected=true] {
-  color: #f5f7fa;
-  background-image: radial-gradient(farthest-corner at center top, #9fdfff, hsla(200,100%,70%,.3)),
-                    radial-gradient(farthest-side at center top, hsla(200,100%,70%,.4), hsla(200,100%,70%,0)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.02), hsla(204,45%,98%,.04)),
-                    linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.3));
-  background-size: 100% 1px,
-                   100% 5px,
-                   1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: top right, top left, left, right;
-  box-shadow: 1px -1px 0 hsla(206,37%,4%,.2) inset;
-}
-
-.devtools-tab:not([selected=true]).highlighted {
-  color: #f5f7fa;
-  background-image: radial-gradient(farthest-corner at center top, #c0ff40, hsla(80,100%,63%,.5) 70%, hsla(80,100%,63%,.3) 97%),
-                    radial-gradient(farthest-side at center top, hsla(80,100%,35%,.5), hsla(80,100%,35%,0)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(99,100%,14%,.2), hsla(99,100%,14%,.2));
-  background-size: 100% 1px,
-                   100% 5px,
-                   1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: top right, top left, left, right;
-}
-
-.devtools-tab:not(.highlighted) > .highlighted-icon,
-.devtools-tab[selected=true] > .highlighted-icon,
-.devtools-tab:not([selected=true]).highlighted > .default-icon {
-  visibility: collapse;
-}
-
-.options-vertical-pane {
-  margin: 5px;
-  width: calc(50% - 30px);
-  min-width: 400px;
-  -moz-padding-start: 5px;
-}
-
-.options-vertical-pane > label {
-  padding: 2px 0;
-  font-size: 1.4rem;
-}
-
-.options-groupbox {
-  -moz-margin-start: 15px;
-  padding: 2px;
-}
-
-.options-groupbox > * {
-  padding: 2px;
-}
-
-.options-citation-label {
-  font-size: 1rem !important;
-  /* !important is required otherwise font-size will still be 1.4rem */
-  font-style: italic;
-  padding: 4px 0 0; /* To align it with the checkbox */
-}
-
-.options-citation-label + label {
-  padding: 3px 0 0 !important; /* To align it with the checkbox */
-  font-style: italic;
-}
-
-.hidden-labels-box:not(.visible) > label,
-.hidden-labels-box.visible ~ .hidden-labels-box > label:last-child {
-  display: none;
-}
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -141,19 +141,19 @@ browser.jar:
   skin/classic/browser/tabbrowser/tab-stroke-start.png      (tabbrowser/tab-stroke-start.png)
   skin/classic/browser/tabbrowser/tabDragIndicator.png      (tabbrowser/tabDragIndicator.png)
   skin/classic/browser/tabbrowser/tab-separator.png         (tabbrowser/tab-separator.png)
   skin/classic/browser/tabview/edit-light.png         (tabview/edit-light.png)
   skin/classic/browser/tabview/search.png             (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png     (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png            (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css            (tabview/tabview.css)
-* skin/classic/browser/devtools/common.css            (devtools/common.css)
-  skin/classic/browser/devtools/dark-theme.css        (../shared/devtools/dark-theme.css)
-  skin/classic/browser/devtools/light-theme.css       (../shared/devtools/light-theme.css)
+* skin/classic/browser/devtools/common.css            (../shared/devtools/common.css)
+* skin/classic/browser/devtools/dark-theme.css        (../shared/devtools/dark-theme.css)
+* skin/classic/browser/devtools/light-theme.css       (../shared/devtools/light-theme.css)
   skin/classic/browser/devtools/controls.png          (../shared/devtools/controls.png)
 * skin/classic/browser/devtools/widgets.css           (devtools/widgets.css)
   skin/classic/browser/devtools/commandline-icon.png  (devtools/commandline-icon.png)
   skin/classic/browser/devtools/command-paintflashing.png  (devtools/command-paintflashing.png)
   skin/classic/browser/devtools/command-responsivemode.png (devtools/command-responsivemode.png)
   skin/classic/browser/devtools/command-scratchpad.png (devtools/command-scratchpad.png)
   skin/classic/browser/devtools/command-tilt.png      (devtools/command-tilt.png)
   skin/classic/browser/devtools/alerticon-warning.png (devtools/alerticon-warning.png)
@@ -224,17 +224,16 @@ browser.jar:
   skin/classic/browser/devtools/responsive-background.png (devtools/responsive-background.png)
   skin/classic/browser/devtools/toggle-tools.png          (devtools/toggle-tools.png)
   skin/classic/browser/devtools/dock-bottom.png           (devtools/dock-bottom.png)
   skin/classic/browser/devtools/dock-side.png             (devtools/dock-side.png)
   skin/classic/browser/devtools/floating-scrollbars.css   (devtools/floating-scrollbars.css)
   skin/classic/browser/devtools/floating-scrollbars-light.css (devtools/floating-scrollbars-light.css)
   skin/classic/browser/devtools/inspector.css             (devtools/inspector.css)
   skin/classic/browser/devtools/profiler-stopwatch.png    (devtools/profiler-stopwatch.png)
-  skin/classic/browser/devtools/toolbox.css               (devtools/toolbox.css)
   skin/classic/browser/devtools/tool-options.png          (devtools/tool-options.png)
   skin/classic/browser/devtools/tool-webconsole.png       (devtools/tool-webconsole.png)
   skin/classic/browser/devtools/tool-debugger.png         (devtools/tool-debugger.png)
   skin/classic/browser/devtools/tool-debugger-paused.png  (devtools/tool-debugger-paused.png)
   skin/classic/browser/devtools/tool-inspector.png        (devtools/tool-inspector.png)
   skin/classic/browser/devtools/tool-styleeditor.png      (devtools/tool-styleeditor.png)
   skin/classic/browser/devtools/tool-profiler.png         (devtools/tool-profiler.png)
   skin/classic/browser/devtools/tool-network.png          (devtools/tool-network.png)
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -1427,18 +1427,18 @@ toolbar .toolbarbutton-1:not([type="menu
   border-bottom-left-radius: 0;
 }
 
 #zoom-controls[cui-areatype="toolbar"]:not(.overflowedItem) > #zoom-reset-button {
   min-width: 0;
   margin: 0;
 }
 
-#zoom-controls[cui-areatype="toolbar"] > #zoom-reset-button > .toolbarbutton-text {
-  padding-top: 2px;
+#zoom-controls[cui-areatype="toolbar"]:not(.overflowedItem) > #zoom-reset-button > .toolbarbutton-text {
+  padding-top: 8px;
   margin: 2px;
 }
 
 /* sync button */
 
 #sync-button[status="active"] {
   list-style-image: url("chrome://browser/skin/sync-throbber.png");
   -moz-image-region: rect(0, 20px, 20px, 0px);
deleted file mode 100644
--- a/browser/themes/osx/devtools/common.css
+++ /dev/null
@@ -1,354 +0,0 @@
-/* vim:set ts=2 sw=2 sts=2 et: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-%include ../shared.inc
-
-/* Font for code */
-
-:root {
-  font: message-box;
-}
-
-.devtools-monospace {
-  font-family: Menlo, monospace;
-}
-
-/* Toolbar and Toolbar items */
-
-.devtools-toolbar {
-  -moz-appearance: none;
-  padding: 4px 3px;
-  border-bottom-width: 1px;
-  border-bottom-style: solid;
-}
-
-.devtools-menulist,
-.devtools-toolbarbutton {
-  -moz-appearance: none;
-  -moz-box-align: center;
-  min-width: 78px;
-  min-height: 22px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  border: 1px solid hsla(210,8%,5%,.45);
-  border-radius: @toolbarbuttonCornerRadius@;
-  background: linear-gradient(hsla(212,7%,57%,.35), hsla(212,7%,57%,.1)) padding-box;
-  box-shadow: 0 1px 0 hsla(210,16%,76%,.15) inset, 0 0 0 1px hsla(210,16%,76%,.15) inset, 0 1px 0 hsla(210,16%,76%,.15);
-  color: inherit;
-}
-
-.devtools-toolbarbutton > .toolbarbutton-menubutton-button {
-  -moz-box-orient: horizontal;
-}
-
-.devtools-menulist {
-  margin: 0 2px;
-}
-
-.devtools-menulist:-moz-focusring,
-.devtools-toolbarbutton:-moz-focusring {
-  outline: 1px dotted hsla(210,30%,85%,0.7);
-  outline-offset: -4px;
-}
-
-.devtools-toolbarbutton > .toolbarbutton-text {
-  margin: 1px 6px;
-}
-
-.devtools-toolbarbutton:not([label]) {
-  min-width: 32px;
-}
-
-.devtools-toolbarbutton:not([label]) > .toolbarbutton-text {
-  display: none;
-}
-
-.devtools-toolbarbutton:not([checked=true]):hover:active {
-  border-color: hsla(210,8%,5%,.6);
-  background: linear-gradient(hsla(220,6%,10%,.3), hsla(212,7%,57%,.15) 65%, hsla(212,7%,57%,.3));
-  box-shadow: 0 0 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-menulist[open=true],
-.devtools-toolbarbutton[open=true],
-.devtools-toolbarbutton[checked=true] {
-  border-color: hsla(210,8%,5%,.6);
-  background: linear-gradient(hsla(220,6%,10%,.6), hsla(210,11%,18%,.45) 75%, hsla(210,11%,30%,.4));
-  box-shadow: 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-toolbarbutton[checked=true] {
-  color: hsl(208,100%,60%) !important;
-}
-
-.devtools-toolbarbutton[checked=true]:hover:active {
-  background-color: hsla(210,8%,5%,.2);
-}
-
-.devtools-option-toolbarbutton {
-  -moz-appearance: none;
-  list-style-image: url("chrome://browser/skin/devtools/option-icon.png");
-  -moz-image-region: rect(0px 16px 16px 0px);
-  background: none;
-  border: none;
-}
-
-.devtools-option-toolbarbutton[open=true] {
-  -moz-image-region: rect(0px 32px 16px 16px);
-}
-
-.devtools-menulist > .menulist-label-box {
-  text-align: center;
-}
-
-.devtools-menulist > .menulist-dropmarker {
-  -moz-appearance: none;
-  background-color: transparent;
-  display: -moz-box;
-  list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-  border-width: 0;
-  min-width: 18px;
-}
-
-.devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-button {
-  -moz-appearance: none;
-  border-width: 0;
-  -moz-border-end: 1px solid hsla(210,8%,5%,.45);
-  box-shadow: -1px 0 0 hsla(210,16%,76%,.15) inset, 1px 0 0 hsla(210,16%,76%,.15);
-  padding: 0 1px;
-}
-
-.devtools-toolbarbutton[type=menu-button]:-moz-locale-dir(rtl) > .toolbarbutton-menubutton-button {
-  box-shadow: 1px 0 0 hsla(210,16%,76%,.15) inset, -1px 0 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-toolbarbutton[type=menu-button] {
-  padding: 0 1px;
-  -moz-box-align: stretch;
-}
-
-.devtools-toolbarbutton[type=menu] > .toolbarbutton-menu-dropmarker,
-.devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-dropmarker {
-  -moz-appearance: none !important;
-  list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-  border: 0;
-}
-
-/* Text input */
-
-.devtools-textinput,
-.devtools-searchinput {
-  -moz-appearance: none;
-  margin: 0 3px;
-  min-height: 22px;
-  background-color: transparent;
-  border: 1px solid hsla(210,8%,5%,.6);
-  border-radius: 20px;
-  background-image: linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35));
-  padding: 3px 8px;
-  box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset,
-              0 0 0 1px hsla(210,16%,76%,.1) inset,
-              0 1px 0 hsla(210,16%,76%,.15);
-  color: inherit;
-}
-
-.devtools-searchinput {
-  background-image: url(magnifying-glass.png), linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35));
-  background-repeat: no-repeat;
-  background-position: 4px center, top left, top left;
-  padding-top: 0;
-  padding-bottom: 0;
-  -moz-padding-start: 18px;
-  -moz-padding-end: 12px;
-  font-size: inherit;
-}
-
-.devtools-searchinput:-moz-locale-dir(rtl) {
-  background-position: calc(100% - 4px) center, top left, top left;
-}
-
-.devtools-searchinput > .textbox-input-box > .textbox-search-icons {
-  display: none;
-}
-
-.devtools-searchinput > .textbox-input-box > .textbox-input::-moz-placeholder {
-  opacity: 1.0;
-  color: hsl(208,10%,66%);
-}
-
-.devtools-no-search-result {
-  box-shadow: inset 0 0 0 1px hsla(0,68%,6%,.35);
-  border-color: hsl(10,70%,40%) hsl(10,75%,37%) hsl(10,80%,35%) !important;
-  background-image: url(magnifying-glass.png), linear-gradient(hsla(1,16%,76%,.45), hsla(1,16%,76%,.75));
-}
-
-/* Close button */
-
-.devtools-closebutton {
-  list-style-image: url("chrome://browser/skin/devtools/close.png");
-  -moz-appearance: none;
-  border: none;
-  margin: 0 4px;
-  min-width: 16px;
-  width: 16px;
-  opacity: 0.6;
-}
-
-.devtools-closebutton > .toolbarbutton-text {
-  display: none;
-}
-
-.devtools-closebutton:hover {
-  opacity: 0.8;
-}
-
-.devtools-closebutton:active {
-  opacity: 1;
-}
-
-/* Splitters */
-
-.devtools-horizontal-splitter {
-  -moz-appearance: none;
-  background-image: none;
-  border-top: 1px solid black;
-  border-bottom-width: 0;
-  min-height: 3px;
-  height: 3px;
-  margin-bottom: -3px;
-  position: relative;
-}
-
-.devtools-side-splitter {
-  -moz-appearance: none;
-  background-image: none;
-  border: 0;
-  -moz-border-start: 1px solid black;
-  min-width: 0;
-  width: 3px;
-  -moz-margin-end: -3px;
-  position: relative;
-  cursor: e-resize;
-}
-
-/* In-tools sidebar */
-
-.devtools-toolbox-side-iframe {
-  min-width: 465px;
-}
-
-.devtools-sidebar-tabs {
-  -moz-appearance: none;
-  margin: 0;
-}
-
-.devtools-sidebar-tabs > tabpanels {
-  padding: 0;
-}
-
-.devtools-sidebar-tabs > tabs {
-  -moz-appearance: none;
-  font: inherit;
-  position: static;
-  color: #b6babf;
-  margin-bottom: 0;
-  padding: 0;
-  background-color: #343c45;
-  border-width: 0 0 1px 0;
-  border-color: hsla(210,8%,5%,.6);
-  border-style: solid;
-  overflow: hidden;
-}
-
-.devtools-sidebar-tabs > tabs > .tabs-right,
-.devtools-sidebar-tabs > tabs > .tabs-left {
-  display: none;
-}
-
-.devtools-sidebar-tabs > tabs > tab {
-  -moz-appearance: none;
-  /* We want to match the height of a toolbar with a toolbarbutton
-   * First, we need to replicated the padding of toolbar (4px),
-   * then we need to take the border of the buttons into account (1px).
-   */
-  padding: 5px 3px !important;
-  -moz-padding-start: 6px;
-  padding: 0;
-  min-width: 78px;
-  /* toolbar's min-height is button min-height (25px) + padding (2 * 4px): 33px.
-   * -1px because the parent element (<tabs>) comes with a 1px bottom border.
-   */
-  min-height: 32px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  text-align: center;
-  color: inherit;
-  -moz-box-flex: 1;
-  border-width: 0;
-  position: static;
-  -moz-margin-start: -1px;
-}
-
-.devtools-sidebar-tabs > tabs > tab:-moz-focusring {
-  position: static;
-}
-
-.devtools-sidebar-tabs > tabs > tab:first-of-type {
-  -moz-margin-start: -3px;
-}
-
-.devtools-sidebar-tabs > tabs > tab {
-  background-size: calc(100% - 2px) 100%, 1px 100%;
-  background-repeat: no-repeat;
-  background-position: 1px, 0;
-}
-
-.devtools-sidebar-tabs:-moz-locale-dir(rtl) > tabs > tab {
-  background-position: calc(100% - 1px), 100%;
-}
-
-.devtools-sidebar-tabs > tabs > tab:last-of-type {
-  -moz-border-end-width: 0;
-}
-
-%define smallSeparator linear-gradient(transparent 15%, #5a6169 15%, #5a6169 85%, transparent 85%)
-%define solidSeparator linear-gradient(#2d5b7d, #2d5b7d)
-
-.devtools-sidebar-tabs > tabs > tab {
-  background-image: linear-gradient(transparent, transparent), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab:hover {
-  background-image: linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.2)), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab:hover:active {
-  background-image: linear-gradient(hsla(206,37%,4%,.4), hsla(206,37%,4%,.4)), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab {
-  background-image: linear-gradient(transparent, transparent), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab:hover {
-  background-image: linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.2)), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab:hover:active {
-  background-image: linear-gradient(hsla(206,37%,4%,.4), hsla(206,37%,4%,.4)), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] {
-  color: #f5f7fa;
-  background-image: linear-gradient(#1d4f73, #1d4f73), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true]:hover {
-  background-image: linear-gradient(#274f64, #274f64), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true]:hover:active {
-  background-image: linear-gradient(#1f3e4f, #1f3e4f), @solidSeparator@;
-}
-
-%include ../../shared/devtools/common.inc.css
--- a/browser/themes/osx/devtools/debugger.css
+++ b/browser/themes/osx/devtools/debugger.css
@@ -386,24 +386,35 @@
   width: 200px;
 }
 
 #resumption-order-panel {
   -moz-margin-start: -8px;
 }
 
 #resume {
-  list-style-image: url("chrome://browser/skin/devtools/debugger-play.png");
+  list-style-image: url("chrome://browser/skin/devtools/debugger-pause.png");
   -moz-image-region: rect(0px,16px,16px,0px);
+  transition: background 0.15s ease-in-out;
 }
 
 #resume[checked] {
+  background: none;
+  list-style-image: url("chrome://browser/skin/devtools/debugger-play.png");
   -moz-image-region: rect(0px,32px,16px,16px);
 }
 
+#resume ~ toolbarbutton {
+  transition: opacity 0.15s ease-in-out;
+}
+
+#resume:not([checked]) ~ toolbarbutton {
+  opacity: 0.5;
+}
+
 #step-over {
   list-style-image: url("chrome://browser/skin/devtools/debugger-step-over.png");
 }
 
 #step-in {
   list-style-image: url("chrome://browser/skin/devtools/debugger-step-in.png");
 }
 
deleted file mode 100644
--- a/browser/themes/osx/devtools/toolbox.css
+++ /dev/null
@@ -1,274 +0,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/. */
-
-#toolbox-controls {
-  margin: 0 4px;
-}
-
-#toolbox-controls > toolbarbutton,
-#toolbox-dock-buttons > toolbarbutton {
-  margin: 0 4px;
-  min-width: 16px;
-  width: 16px;
-}
-
-#toolbox-dock-bottom {
-  list-style-image: url("chrome://browser/skin/devtools/dock-bottom.png");
-}
-
-#toolbox-dock-side {
-  list-style-image: url("chrome://browser/skin/devtools/dock-side.png");
-}
-
-#toolbox-dock-window {
-  list-style-image: url("chrome://browser/skin/devtools/undock.png");
-}
-
-#toolbox-dock-window,
-#toolbox-dock-bottom,
-#toolbox-dock-side {
-  opacity: 0.6;
-}
-
-#toolbox-dock-window:hover,
-#toolbox-dock-bottom:hover,
-#toolbox-dock-side:hover {
-  opacity: 1;
-}
-
-/* Command buttons */
-
-.command-button {
-  padding: 0 8px;
-  margin: 0;
-  border-width: 0;
-  width: 16px;
-}
-
-.command-button:hover {
-  background-color: hsla(206,37%,4%,.2);
-}
-.command-button:hover:active, .command-button[checked=true]:not(:hover) {
-  background-color: hsla(206,37%,4%,.4);
-}
-
-#command-button-paintflashing {
-  list-style-image: url("chrome://browser/skin/devtools/command-paintflashing.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-paintflashing:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-#command-button-paintflashing:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-#command-button-paintflashing[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-responsive {
-  list-style-image: url("chrome://browser/skin/devtools/command-responsivemode.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-responsive:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-#command-button-responsive:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-#command-button-responsive[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-tilt {
-  list-style-image: url("chrome://browser/skin/devtools/command-tilt.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-tilt:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-
-#command-button-tilt:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-
-#command-button-tilt[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-scratchpad {
-  list-style-image: url("chrome://browser/skin/devtools/command-scratchpad.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-
-#command-button-scratchpad:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-
-#command-button-scratchpad:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-
-/* Tabs */
-
-.devtools-tabbar {
-  -moz-appearance: none;
-  background-image: url("background-noise-toolbar.png"),
-                    linear-gradient(#303840, #2d3640);
-  border-color: #060a0d;
-  border-style: solid;
-  border-width: 1px 0;
-  box-shadow: 0 1px 0 hsla(204,45%,98%,.05) inset,
-              0 -1px 0 hsla(206,37%,4%,.1) inset;
-  min-height: 32px;
-  padding: 0;
-}
-
-#toolbox-tabs {
-  margin: 0;
-  border-left: 1px solid hsla(206,37%,4%,.45);
-}
-
-.devtools-tab {
-  -moz-appearance: none;
-  min-width: 32px;
-  min-height: 32px;
-  max-width: 110px;
-  color: #b6babf;
-  margin: 0;
-  padding: 0;
-  background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1));
-  background-size: 1px 100%;
-  background-repeat: no-repeat;
-  background-position: left, right;
-  border-right: 1px solid hsla(206,37%,4%,.45);
-}
-
-.devtools-tab > image {
-  -moz-margin-end: 0;
-  -moz-margin-start: 4px;
-  opacity: 0.6;
-  width: 16px; /* Prevents collapse during theme switching */
-}
-
-#toolbox-tab-options > image {
-  margin: 0 8px;
-}
-
-.devtools-tab > label {
-  white-space: nowrap;
-}
-
-.devtools-tab:hover > image {
-  opacity: 0.8;
-}
-
-.devtools-tab:active > image,
-.devtools-tab[selected=true] > image {
-  opacity: 1;
-}
-
-.devtools-tab:hover {
-  background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(206,37%,4%,.1), hsla(206,37%,4%,.2));
-  background-size: 1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: left, right;
-  color: #ced3d9;
-}
-.devtools-tab:hover:active {
-  background-color: hsla(206,37%,4%,.2);
-  color: #f5f7fa;
-}
-
-.devtools-tab[selected=true] {
-  color: #f5f7fa;
-  background-image: radial-gradient(farthest-corner at center top, #9fdfff, hsla(200,100%,70%,.3)),
-                    radial-gradient(farthest-side at center top, hsla(200,100%,70%,.4), hsla(200,100%,70%,0)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.02), hsla(204,45%,98%,.04)),
-                    linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.3));
-  background-size: 100% 1px,
-                   100% 5px,
-                   1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: top right, top left, left, right;
-  box-shadow: 1px -1px 0 hsla(206,37%,4%,.2) inset;
-}
-
-.devtools-tab:not([selected=true]).highlighted {
-  color: #f5f7fa;
-  background-image: radial-gradient(farthest-corner at center top, #c0ff40, hsla(80,100%,63%,.5) 70%, hsla(80,100%,63%,.3) 97%),
-                    radial-gradient(farthest-side at center top, hsla(80,100%,35%,.5), hsla(80,100%,35%,0)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(99,100%,14%,.2), hsla(99,100%,14%,.2));
-  background-size: 100% 1px,
-                   100% 5px,
-                   1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: top right, top left, left, right;
-}
-
-.devtools-tab:not(.highlighted) > .highlighted-icon,
-.devtools-tab[selected=true] > .highlighted-icon,
-.devtools-tab:not([selected=true]).highlighted > .default-icon {
-  visibility: collapse;
-}
-
-.options-vertical-pane {
-  margin: 5px;
-  width: calc(50% - 30px);
-  min-width: 400px;
-  -moz-padding-start: 5px;
-}
-
-.options-vertical-pane > label {
-  padding: 2px 0;
-  font-size: 1.4rem;
-}
-
-.options-groupbox {
-  -moz-margin-start: 15px;
-  padding: 2px;
-}
-
-.options-groupbox > * {
-  padding: 2px;
-}
-
-.options-citation-label {
-  font-size: 1rem !important;
-  /* !important is required otherwise font-size will still be 1.4rem */
-  font-style: italic;
-  padding: 4px 0 0; /* To align it with the checkbox */
-}
-
-.options-citation-label + label {
-  padding: 3px 0 0 !important; /* To align it with the checkbox */
-  font-style: italic;
-}
-
-.hidden-labels-box:not(.visible) > label,
-.hidden-labels-box.visible ~ .hidden-labels-box > label:last-child {
-  display: none;
-}
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -243,19 +243,19 @@ browser.jar:
   skin/classic/browser/tabbrowser/tab-separator.png                      (tabbrowser/tab-separator.png)
   skin/classic/browser/tabbrowser/tab-separator@2x.png                   (tabbrowser/tab-separator@2x.png)
   skin/classic/browser/tabview/close.png                    (tabview/close.png)
   skin/classic/browser/tabview/edit-light.png               (tabview/edit-light.png)
   skin/classic/browser/tabview/search.png                   (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png           (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png                  (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css                  (tabview/tabview.css)
-* skin/classic/browser/devtools/common.css                  (devtools/common.css)
-  skin/classic/browser/devtools/dark-theme.css              (../shared/devtools/dark-theme.css)
-  skin/classic/browser/devtools/light-theme.css             (../shared/devtools/light-theme.css)
+* skin/classic/browser/devtools/common.css                  (../shared/devtools/common.css)
+* skin/classic/browser/devtools/dark-theme.css              (../shared/devtools/dark-theme.css)
+* skin/classic/browser/devtools/light-theme.css             (../shared/devtools/light-theme.css)
   skin/classic/browser/devtools/controls.png                (../shared/devtools/controls.png)
 * skin/classic/browser/devtools/widgets.css                 (devtools/widgets.css)
   skin/classic/browser/devtools/commandline-icon.png        (devtools/commandline-icon.png)
   skin/classic/browser/devtools/command-paintflashing.png   (devtools/command-paintflashing.png)
   skin/classic/browser/devtools/command-responsivemode.png  (devtools/command-responsivemode.png)
   skin/classic/browser/devtools/command-scratchpad.png      (devtools/command-scratchpad.png)
   skin/classic/browser/devtools/command-tilt.png            (devtools/command-tilt.png)
   skin/classic/browser/devtools/alerticon-warning.png       (devtools/alerticon-warning.png)
@@ -326,17 +326,16 @@ browser.jar:
   skin/classic/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png)
   skin/classic/browser/devtools/responsive-horizontal-resizer.png (devtools/responsive-horizontal-resizer.png)
   skin/classic/browser/devtools/responsive-background.png   (devtools/responsive-background.png)
   skin/classic/browser/devtools/toggle-tools.png            (devtools/toggle-tools.png)
   skin/classic/browser/devtools/dock-bottom.png             (devtools/dock-bottom.png)
   skin/classic/browser/devtools/dock-side.png               (devtools/dock-side.png)
 * skin/classic/browser/devtools/inspector.css               (devtools/inspector.css)
   skin/classic/browser/devtools/profiler-stopwatch.png      (devtools/profiler-stopwatch.png)
-  skin/classic/browser/devtools/toolbox.css                 (devtools/toolbox.css)
   skin/classic/browser/devtools/tool-options.png            (devtools/tool-options.png)
   skin/classic/browser/devtools/tool-webconsole.png         (devtools/tool-webconsole.png)
   skin/classic/browser/devtools/tool-debugger.png           (devtools/tool-debugger.png)
   skin/classic/browser/devtools/tool-debugger-paused.png    (devtools/tool-debugger-paused.png)
   skin/classic/browser/devtools/tool-inspector.png          (devtools/tool-inspector.png)
   skin/classic/browser/devtools/tool-styleeditor.png        (devtools/tool-styleeditor.png)
   skin/classic/browser/devtools/tool-profiler.png           (devtools/tool-profiler.png)
   skin/classic/browser/devtools/tool-network.png            (devtools/tool-network.png)
--- a/browser/themes/shared/UITour.inc.css
+++ b/browser/themes/shared/UITour.inc.css
@@ -2,19 +2,20 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 %endif
 
 /* UI Tour */
 
 html|div#UITourHighlight {
-  border-radius: 20px;
-  border: 2px #5B9CD9 solid;
-  box-shadow: 0 0 2px #5B9CD9, inset 0 0 1px #5B9CD9;
+  background-image: radial-gradient(50% 100%, rgba(0,149,220,0.4) 50%, rgba(0,149,220,0.6) 100%);
+  border-radius: 40px;
+  border: 1px solid white;
+  box-shadow: 0 0 3px 0 rgba(0,0,0,0.5);
   min-height: 32px;
   min-width: 32px;
 }
 
 #UITourTooltip {
   max-width: 20em;
 }
 
new file mode 100644
--- /dev/null
+++ b/browser/themes/shared/devtools/common.css
@@ -0,0 +1,219 @@
+%if 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/. */
+%endif
+
+:root {
+  font: message-box;
+}
+
+.devtools-monospace {
+%ifdef XP_MACOSX
+  font-family: Menlo, monospace;
+%endif
+%ifdef XP_LINUX
+  font-family: monospace;
+  font-size: 80%;
+%endif
+%ifdef XP_WIN
+  font-family: Consolas, monospace;
+%endif
+}
+
+/* Splitters */
+.devtools-horizontal-splitter {
+  -moz-appearance: none;
+  border-top: 1px solid black;
+  border-bottom-width: 0;
+  min-height: 3px;
+  height: 3px;
+  margin-bottom: -3px;
+  position: relative;
+}
+
+.devtools-side-splitter {
+  -moz-appearance: none;
+  border: 0;
+  -moz-border-start: 1px solid black;
+  min-width: 0;
+  width: 3px;
+  background-color: transparent;
+  -moz-margin-end: -3px;
+  position: relative;
+  cursor: e-resize;
+}
+
+.devtools-toolbox-side-iframe {
+  min-width: 465px;
+}
+
+/* Autocomplete Popup */
+/* Dark and light theme */
+
+.devtools-autocomplete-popup {
+  -moz-appearance: none !important;
+  border: 1px solid hsl(210,11%,10%);
+  box-shadow: 0 1px 0 hsla(209,29%,72%,.25) inset;
+  background-color: transparent;
+  background-image: linear-gradient(to bottom, hsla(209,18%,18%,0.9), hsl(210,11%,16%));
+  border-radius: 3px;
+  overflow-x: hidden;
+%ifdef XP_LINUX
+  max-height: 32rem;
+%else
+  max-height: 40rem;
+%endif
+}
+
+.devtools-autocomplete-listbox {
+  -moz-appearance: none !important;
+  background-color: transparent;
+  border-width: 0px !important;
+}
+
+.devtools-autocomplete-listbox > richlistitem,
+.devtools-autocomplete-listbox > richlistitem[selected] {
+  width: 100%;
+  background-color: transparent;
+  border-radius: 4px;
+}
+
+.devtools-autocomplete-listbox.dark-theme > richlistitem[selected],
+.devtools-autocomplete-listbox.dark-theme > richlistitem:hover {
+  background-color: rgba(0,0,0,0.5);
+}
+
+.devtools-autocomplete-listbox.dark-theme > richlistitem[selected] > .autocomplete-value,
+.devtools-autocomplete-listbox:focus.dark-theme > richlistitem[selected] > .initial-value {
+  color: hsl(208,100%,60%);
+}
+
+.devtools-autocomplete-listbox.dark-theme > richlistitem[selected] > label {
+  color: #eee;
+}
+
+.devtools-autocomplete-listbox.dark-theme > richlistitem > label {
+  color: #ccc;
+}
+
+.devtools-autocomplete-listbox > richlistitem > .initial-value,
+.devtools-autocomplete-listbox > richlistitem > .autocomplete-value {
+  margin: 0;
+  padding: 1px 0;
+}
+
+.devtools-autocomplete-listbox > richlistitem > .autocomplete-count {
+  text-align: right;
+}
+
+/* Rest of the light theme */
+
+.devtools-autocomplete-popup.light-theme {
+  border: 1px solid hsl(210,24%,90%);
+  box-shadow: 0 1px 0 hsla(209,29%,90%,.25) inset;
+  background-image: linear-gradient(to bottom, hsla(209,18%,100%,0.9), hsl(210,24%,95%));
+}
+
+.devtools-autocomplete-listbox.light-theme > richlistitem[selected],
+.devtools-autocomplete-listbox.light-theme > richlistitem:hover {
+  background-color: rgba(128,128,128,0.3);
+}
+
+.devtools-autocomplete-listbox.light-theme > richlistitem[selected] > .autocomplete-value,
+.devtools-autocomplete-listbox:focus.light-theme > richlistitem[selected] > .initial-value {
+  color: #222;
+}
+
+.devtools-autocomplete-listbox.light-theme > richlistitem > label {
+  color: #666;
+}
+
+/* Responsive container */
+
+.devtools-responsive-container {
+  -moz-box-orient: horizontal;
+}
+
+@media (max-width: 700px) {
+  .devtools-responsive-container {
+    -moz-box-orient: vertical;
+  }
+
+  .devtools-responsive-container > .devtools-side-splitter {
+    border: 0;
+    margin: 0;
+    border-top: 1px solid black;
+    min-height: 3px;
+    height: 3px;
+    margin-bottom: -3px;
+    /* In some edge case the cursor is not changed to n-resize */
+    cursor: n-resize;
+  }
+
+  .devtools-responsive-container > .devtools-sidebar-tabs {
+    min-height: 35vh;
+    max-height: 75vh;
+  }
+}
+
+/* Tooltip widget (see browser/devtools/shared/widgets/Tooltip.js) */
+
+.devtools-tooltip .panel-arrowcontent {
+  padding: 4px;
+}
+
+.devtools-tooltip .panel-arrowcontainer {
+  /* Reseting the transition used when panels are shown */
+  transition: none;
+  /* Panels slide up/down/left/right when they appear using a transform.
+  Since we want to remove the transition, we don't need to transform anymore
+  plus it can interfeer by causing mouseleave events on the underlying nodes */
+  transform: none;
+}
+
+.devtools-tooltip[clamped-dimensions] {
+  max-height: 400px;
+  max-width: 400px;
+}
+.devtools-tooltip[clamped-dimensions] .panel-arrowcontent {
+  overflow: hidden;
+}
+
+/* Tooltip: Simple Text */
+
+.devtools-tooltip-simple-text {
+  max-width: 400px;
+  margin: 0 -4px; /* Compensate for the .panel-arrowcontent padding. */
+  padding: 8px 12px;
+  white-space: pre-wrap;
+}
+
+.devtools-tooltip-simple-text:first-child {
+  margin-top: -4px;
+}
+
+.devtools-tooltip-simple-text:last-child {
+  margin-bottom: -4px;
+}
+
+/* Tooltip: Variables View */
+
+.devtools-tooltip-variables-view-box {
+  margin: -4px; /* Compensate for the .panel-arrowcontent padding. */
+}
+
+/* Tooltip: Tiles */
+
+.devtools-tooltip-tiles {
+  background-color: #eee;
+  background-image: linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc),
+    linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc);
+  background-size: 20px 20px;
+  background-position: 0 0, 10px 10px;
+}
+
+.devtools-tooltip-iframe {
+  border: none;
+  background: transparent;
+}
deleted file mode 100644
--- a/browser/themes/shared/devtools/common.inc.css
+++ /dev/null
@@ -1,175 +0,0 @@
-%if 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/. */
-%endif
-
-/* Autocomplete Popup */
-/* Dark and light theme */
-
-.devtools-autocomplete-popup {
-  -moz-appearance: none !important;
-  border: 1px solid hsl(210,11%,10%);
-  box-shadow: 0 1px 0 hsla(209,29%,72%,.25) inset;
-  background-color: transparent;
-  background-image: linear-gradient(to bottom, hsla(209,18%,18%,0.9), hsl(210,11%,16%));
-  border-radius: 3px;
-  overflow-x: hidden;
-%ifdef XP_LINUX
-  max-height: 32rem;
-%else
-  max-height: 40rem;
-%endif
-}
-
-.devtools-autocomplete-listbox {
-  -moz-appearance: none !important;
-  background-color: transparent;
-  border-width: 0px !important;
-}
-
-.devtools-autocomplete-listbox > richlistitem,
-.devtools-autocomplete-listbox > richlistitem[selected] {
-  width: 100%;
-  background-color: transparent;
-  border-radius: 4px;
-}
-
-.devtools-autocomplete-listbox.dark-theme > richlistitem[selected],
-.devtools-autocomplete-listbox.dark-theme > richlistitem:hover {
-  background-color: rgba(0,0,0,0.5);
-}
-
-.devtools-autocomplete-listbox.dark-theme > richlistitem[selected] > .autocomplete-value,
-.devtools-autocomplete-listbox:focus.dark-theme > richlistitem[selected] > .initial-value {
-  color: hsl(208,100%,60%);
-}
-
-.devtools-autocomplete-listbox.dark-theme > richlistitem[selected] > label {
-  color: #eee;
-}
-
-.devtools-autocomplete-listbox.dark-theme > richlistitem > label {
-  color: #ccc;
-}
-
-.devtools-autocomplete-listbox > richlistitem > .initial-value,
-.devtools-autocomplete-listbox > richlistitem > .autocomplete-value {
-  margin: 0;
-  padding: 1px 0;
-}
-
-.devtools-autocomplete-listbox > richlistitem > .autocomplete-count {
-  text-align: right;
-}
-
-/* Rest of the light theme */
-
-.devtools-autocomplete-popup.light-theme {
-  border: 1px solid hsl(210,24%,90%);
-  box-shadow: 0 1px 0 hsla(209,29%,90%,.25) inset;
-  background-image: linear-gradient(to bottom, hsla(209,18%,100%,0.9), hsl(210,24%,95%));
-}
-
-.devtools-autocomplete-listbox.light-theme > richlistitem[selected],
-.devtools-autocomplete-listbox.light-theme > richlistitem:hover {
-  background-color: rgba(128,128,128,0.3);
-}
-
-.devtools-autocomplete-listbox.light-theme > richlistitem[selected] > .autocomplete-value,
-.devtools-autocomplete-listbox:focus.light-theme > richlistitem[selected] > .initial-value {
-  color: #222;
-}
-
-.devtools-autocomplete-listbox.light-theme > richlistitem > label {
-  color: #666;
-}
-
-/* Responsive container */
-
-.devtools-responsive-container {
-  -moz-box-orient: horizontal;
-}
-
-@media (max-width: 700px) {
-  .devtools-responsive-container {
-    -moz-box-orient: vertical;
-  }
-
-  .devtools-responsive-container > .devtools-side-splitter {
-    border: 0;
-    margin: 0;
-    border-top: 1px solid black;
-    min-height: 3px;
-    height: 3px;
-    margin-bottom: -3px;
-    /* In some edge case the cursor is not changed to n-resize */
-    cursor: n-resize;
-  }
-
-  .devtools-responsive-container > .devtools-sidebar-tabs {
-    min-height: 35vh;
-    max-height: 75vh;
-  }
-}
-
-/* Tooltip widget (see browser/devtools/shared/widgets/Tooltip.js) */
-
-.devtools-tooltip .panel-arrowcontent {
-  padding: 4px;
-}
-
-.devtools-tooltip .panel-arrowcontainer {
-  /* Reseting the transition used when panels are shown */
-  transition: none;
-  /* Panels slide up/down/left/right when they appear using a transform.
-  Since we want to remove the transition, we don't need to transform anymore
-  plus it can interfeer by causing mouseleave events on the underlying nodes */
-  transform: none;
-}
-
-.devtools-tooltip[clamped-dimensions] {
-  max-height: 400px;
-  max-width: 400px;
-}
-.devtools-tooltip[clamped-dimensions] .panel-arrowcontent {
-  overflow: hidden;
-}
-
-/* Tooltip: Simple Text */
-
-.devtools-tooltip-simple-text {
-  max-width: 400px;
-  margin: 0 -4px; /* Compensate for the .panel-arrowcontent padding. */
-  padding: 8px 12px;
-  white-space: pre-wrap;
-}
-
-.devtools-tooltip-simple-text:first-child {
-  margin-top: -4px;
-}
-
-.devtools-tooltip-simple-text:last-child {
-  margin-bottom: -4px;
-}
-
-/* Tooltip: Variables View */
-
-.devtools-tooltip-variables-view-box {
-  margin: -4px; /* Compensate for the .panel-arrowcontent padding. */
-}
-
-/* Tooltip: Tiles */
-
-.devtools-tooltip-tiles {
-  background-color: #eee;
-  background-image: linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc),
-    linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc);
-  background-size: 20px 20px;
-  background-position: 0 0, 10px 10px;
-}
-
-.devtools-tooltip-iframe {
-  border: none;
-  background: transparent;
-}
--- a/browser/themes/shared/devtools/dark-theme.css
+++ b/browser/themes/shared/devtools/dark-theme.css
@@ -42,18 +42,17 @@
 .theme-checkbox[checked] {
   background-position: -42px 0;
 }
 
 .theme-selected {
   background: #26394D;
 }
 
-.theme-bg-darker,
-.cm-s-mozilla .CodeMirror-gutters {
+.theme-bg-darker {
   background-color: rgba(0,0,0,0.5);
 }
 
 .theme-bg-contrast { /* contrast bg color to attract attention on a container */
   background: #a18650;
 }
 
 .theme-link,
@@ -215,16 +214,17 @@ div.CodeMirror span.eval-text {
 }
 
 .cm-s-mozilla .CodeMirror-linenumber { /* line number text */
   color: #5f7387;
 }
 
 .cm-s-mozilla .CodeMirror-gutters { /* vertical line next to line numbers */
   border-right-color: #343c45;
+  background-color: #181d20;
 }
 
 .cm-s-markup-view pre {
   line-height: 1.4em;
   min-height: 1.4em;
 }
 
 /* XUL panel styling (see browser/devtools/shared/widgets/Tooltip.js) */
@@ -274,8 +274,10 @@ div.CodeMirror span.eval-text {
 .theme-tooltip-panel .devtools-tooltip-simple-text {
   color: white;
   border-bottom: 1px solid #434850;
 }
 
 .theme-tooltip-panel .devtools-tooltip-simple-text:last-child {
   border-bottom: 0;
 }
+
+%include toolbars.inc.css
--- a/browser/themes/shared/devtools/light-theme.css
+++ b/browser/themes/shared/devtools/light-theme.css
@@ -42,18 +42,17 @@
 .theme-checkbox[checked] {
   background-position: -14px 0;
 }
 
 .theme-selected {
   background-color: #CCC;
 }
 
-.theme-bg-darker,
-.cm-s-mozilla .CodeMirror-gutters {
+.theme-bg-darker {
   background: #EFEFEF;
 }
 
 .theme-bg-contrast { /* contrast bg color to attract attention on a container */
   background: #a18650;
 }
 
 .theme-link,
@@ -214,16 +213,17 @@ div.CodeMirror span.eval-text {
 }
 
 .cm-s-mozilla .CodeMirror-linenumber { /* line number text */
   color: #667380;
 }
 
 .cm-s-mozilla .CodeMirror-gutters { /* vertical line next to line numbers */
   border-right-color: #a6a6a6;
+  background-color: #f7f7f7;
 }
 
 .cm-s-markup-view pre {
   line-height: 1.4em;
   min-height: 1.4em;
 }
 
 /* XUL panel styling (see browser/devtools/shared/widgets/Tooltip.js) */
@@ -273,8 +273,10 @@ div.CodeMirror span.eval-text {
 .theme-tooltip-panel .devtools-tooltip-simple-text {
   color: black;
   border-bottom: 1px solid #d9e1e8;
 }
 
 .theme-tooltip-panel .devtools-tooltip-simple-text:last-child {
   border-bottom: 0;
 }
+
+%include toolbars.inc.css
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/themes/shared/devtools/toolbars.inc.css
@@ -0,0 +1,575 @@
+%if 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/. */
+%endif
+%filter substitution
+%define smallSeparator linear-gradient(transparent 15%, #5a6169 15%, #5a6169 85%, transparent 85%)
+%define solidSeparator linear-gradient(#2d5b7d, #2d5b7d)
+
+.devtools-toolbar {
+  -moz-appearance: none;
+  padding: 4px 3px;
+  border-bottom-width: 1px;
+  border-bottom-style: solid;
+}
+
+.devtools-menulist,
+.devtools-toolbarbutton {
+  -moz-appearance: none;
+  -moz-box-align: center;
+  min-width: 78px;
+  min-height: 22px;
+  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
+  border: 1px solid hsla(210,8%,5%,.45);
+  border-radius: 3px;
+  background: linear-gradient(hsla(212,7%,57%,.35), hsla(212,7%,57%,.1)) padding-box;
+  box-shadow: 0 1px 0 hsla(210,16%,76%,.15) inset, 0 0 0 1px hsla(210,16%,76%,.15) inset, 0 1px 0 hsla(210,16%,76%,.15);
+  margin: 0 3px;
+  color: inherit;
+}
+
+.devtools-toolbarbutton > .toolbarbutton-menubutton-button {
+  -moz-box-orient: horizontal;
+}
+
+.devtools-menulist:-moz-focusring,
+.devtools-toolbarbutton:-moz-focusring {
+  outline: 1px dotted hsla(210,30%,85%,0.7);
+  outline-offset: -4px;
+}
+
+.devtools-toolbarbutton:not([label]) {
+  min-width: 32px;
+}
+
+.devtools-toolbarbutton:not([label]) > .toolbarbutton-text {
+  display: none;
+}
+
+.devtools-toolbarbutton:not([checked=true]):hover:active {
+  border-color: hsla(210,8%,5%,.6);
+  background: linear-gradient(hsla(220,6%,10%,.3), hsla(212,7%,57%,.15) 65%, hsla(212,7%,57%,.3));
+  box-shadow: 0 0 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15);
+}
+
+.devtools-menulist[open=true],
+.devtools-toolbarbutton[open=true],
+.devtools-toolbarbutton[checked=true] {
+  border-color: hsla(210,8%,5%,.6) !important;
+  background: linear-gradient(hsla(220,6%,10%,.6), hsla(210,11%,18%,.45) 75%, hsla(210,11%,30%,.4));
+  box-shadow: 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15);
+}
+
+.devtools-toolbarbutton[checked=true] {
+  color: hsl(208,100%,60%);
+}
+
+.devtools-toolbarbutton[checked=true]:hover {
+  background-color: transparent !important;
+}
+
+.devtools-toolbarbutton[checked=true]:hover:active {
+  background-color: hsla(210,8%,5%,.2) !important;
+}
+
+.devtools-option-toolbarbutton {
+  -moz-appearance: none;
+  list-style-image: url("chrome://browser/skin/devtools/option-icon.png");
+  -moz-image-region: rect(0px 16px 16px 0px);
+  background: none;
+  border: none;
+}
+
+.devtools-option-toolbarbutton[open=true] {
+  -moz-image-region: rect(0px 32px 16px 16px);
+}
+
+.devtools-menulist > .menulist-label-box {
+  text-align: center;
+}
+
+.devtools-menulist > .menulist-dropmarker {
+  -moz-appearance: none;
+  display: -moz-box;
+  list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
+  -moz-box-align: center;
+  min-width: 16px;
+}
+
+.devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-button {
+  -moz-appearance: none;
+  color: inherit;
+  border-width: 0;
+  -moz-border-end: 1px solid hsla(210,8%,5%,.45);
+  box-shadow: -1px 0 0 hsla(210,16%,76%,.15) inset, 1px 0 0 hsla(210,16%,76%,.15);
+}
+
+.devtools-toolbarbutton[type=menu-button]:-moz-locale-dir(rtl) > .toolbarbutton-menubutton-button {
+  box-shadow: 1px 0 0 hsla(210,16%,76%,.15) inset, -1px 0 0 hsla(210,16%,76%,.15);
+}
+
+.devtools-toolbarbutton[type=menu-button] {
+  padding: 0 1px;
+  -moz-box-align: stretch;
+}
+
+.devtools-toolbarbutton[type=menu] > .toolbarbutton-menu-dropmarker,
+.devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-dropmarker {
+  -moz-appearance: none !important;
+  list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
+  -moz-box-align: center;
+  padding: 0 3px;
+}
+
+/* Text input */
+
+.devtools-textinput,
+.devtools-searchinput {
+  -moz-appearance: none;
+  margin: 0 3px;
+  min-height: 22px;
+  border: 1px solid hsla(210,8%,5%,.6);
+  border-radius: 20px;
+  background-color: transparent;
+  background-image: linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35));
+  padding: 3px;
+  box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset,
+              0 0 0 1px hsla(210,16%,76%,.1) inset,
+              0 1px 0 hsla(210,16%,76%,.15);
+  color: inherit;
+}
+
+.devtools-searchinput {
+  padding-top: 0;
+  padding-bottom: 0;
+  -moz-padding-start: 18px;
+  -moz-padding-end: 12px;
+  background-image: url(magnifying-glass.png), linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35));
+  background-position: 4px center, top left, top left;
+  background-repeat: no-repeat;
+  font-size: inherit;
+}
+
+.devtools-searchinput:-moz-locale-dir(rtl) {
+  background-position: calc(100% - 4px) center, top left, top left;
+}
+
+.devtools-searchinput > .textbox-input-box > .textbox-search-icons {
+  display: none;
+}
+
+.devtools-searchinput > .textbox-input-box > .textbox-input::-moz-placeholder {
+  color: hsl(208,10%,66%);
+  opacity: 1.0;
+}
+
+.devtools-no-search-result {
+  box-shadow: inset 0 0 0 1px hsla(0,68%,6%,.35);
+  border-color: hsl(10,70%,40%) hsl(10,75%,37%) hsl(10,80%,35%) !important;
+  background-image: url(magnifying-glass.png), linear-gradient(hsla(1,16%,76%,.45), hsla(1,16%,76%,.75));
+}
+
+/* Close button */
+
+.devtools-closebutton {
+  list-style-image: url("chrome://browser/skin/devtools/close.png");
+  -moz-appearance: none;
+  border: none;
+  margin: 0 4px;
+  min-width: 16px;
+  width: 16px;
+  opacity: 0.6;
+}
+
+.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;
+}
+
+.devtools-closebutton > .toolbarbutton-text {
+  display: none;
+}
+
+.devtools-closebutton:hover {
+  opacity: 0.8;
+}
+
+.devtools-closebutton:hover:active {
+  opacity: 1;
+}
+
+/* In-tools sidebar */
+
+.devtools-sidebar-tabs {
+  -moz-appearance: none;
+  margin: 0;
+}
+
+.devtools-sidebar-tabs > tabpanels {
+  -moz-appearance: none;
+  padding: 0;
+  border: 0;
+}
+
+.devtools-sidebar-tabs > tabs {
+  -moz-appearance: none;
+  position: static;
+  font: inherit;
+  color: #b6babf;
+  margin-bottom: 0;
+  padding: 0;
+  background-color: #343c45;
+  border-width: 0 0 1px 0;
+  border-color: hsla(210,8%,5%,.6);
+  border-style: solid;
+  overflow: hidden;
+}
+
+.devtools-sidebar-tabs > tabs > .tabs-right,
+.devtools-sidebar-tabs > tabs > .tabs-left {
+  display: none;
+}
+
+.devtools-sidebar-tabs > tabs > tab {
+  -moz-appearance: none;
+  /* We want to match the height of a toolbar with a toolbarbutton
+   * First, we need to replicated the padding of toolbar (4px),
+   * then we need to take the border of the buttons into account (1px).
+   */
+  padding: 5px 3px;
+  -moz-padding-start: 6px;
+  margin: 0;
+  min-width: 78px;
+  /* toolbar's min-height is button min-height (25px) + padding (2 * 4px): 33px.
+   * -1px because the parent element (<tabs>) comes with a 1px bottom border.
+   */
+  min-height: 32px;
+  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
+  text-align: center;
+  color: inherit;
+  -moz-box-flex: 1;
+  border-width: 0;
+  position: static;
+  -moz-margin-start: -1px;
+}
+
+.devtools-sidebar-tabs > tabs > tab:first-of-type {
+  -moz-margin-start: -3px;
+}
+
+.devtools-sidebar-tabs > tabs > tab {
+  background-size: calc(100% - 2px) 100%, 1px 100%;
+  background-repeat: no-repeat;
+  background-position: 1px, 0;
+}
+
+.devtools-sidebar-tabs:-moz-locale-dir(rtl) > tabs > tab {
+  background-position: calc(100% - 1px), 100%;
+}
+
+.devtools-sidebar-tabs > tabs > tab {
+  background-color: transparent;
+  background-image: linear-gradient(transparent, transparent), @smallSeparator@;
+}
+
+.devtools-sidebar-tabs > tabs > tab:hover {
+  background-image: linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.2)), @smallSeparator@;
+}
+
+.devtools-sidebar-tabs > tabs > tab:hover:active {
+  background-image: linear-gradient(hsla(206,37%,4%,.4), hsla(206,37%,4%,.4)), @smallSeparator@;
+}
+
+.devtools-sidebar-tabs > tabs > tab[selected=true] + tab {
+  background-image: linear-gradient(transparent, transparent), @solidSeparator@;
+}
+
+.devtools-sidebar-tabs > tabs > tab[selected=true] + tab:hover {
+  background-image: linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.2)), @solidSeparator@;
+}
+
+.devtools-sidebar-tabs > tabs > tab[selected=true] + tab:hover:active {
+  background-image: linear-gradient(hsla(206,37%,4%,.4), hsla(206,37%,4%,.4)), @solidSeparator@;
+}
+
+.devtools-sidebar-tabs > tabs > tab[selected=true] {
+  color: #f5f7fa;
+  background-image: linear-gradient(#1d4f73, #1d4f73), @solidSeparator@;
+}
+
+.devtools-sidebar-tabs > tabs > tab[selected=true]:hover {
+  background-image: linear-gradient(#274f64, #274f64), @solidSeparator@;
+}
+
+.devtools-sidebar-tabs > tabs > tab[selected=true]:hover:active {
+  background-image: linear-gradient(#1f3e4f, #1f3e4f), @solidSeparator@;
+}
+
+/* Toolbox - moved from toolbox.css.
+ * Rules that apply to the global toolbox like command buttons,
+ * devtools tabs, docking buttons, etc. */
+
+#toolbox-controls {
+  margin: 0 4px;
+}
+
+#toolbox-controls > toolbarbutton,
+#toolbox-dock-buttons > toolbarbutton {
+  -moz-appearance: none;
+  margin: 0 4px;
+  min-width: 16px;
+  width: 16px;
+}
+
+#toolbox-controls > toolbarbutton > .toolbarbutton-text,
+#toolbox-dock-buttons > toolbarbutton > .toolbarbutton-text,
+.command-button > .toolbarbutton-text {
+  display: none;
+}
+
+#toolbox-dock-bottom {
+  list-style-image: url("chrome://browser/skin/devtools/dock-bottom.png");
+}
+
+#toolbox-dock-side {
+  list-style-image: url("chrome://browser/skin/devtools/dock-side.png");
+}
+
+#toolbox-dock-window {
+  list-style-image: url("chrome://browser/skin/devtools/undock.png");
+}
+
+#toolbox-dock-window,
+#toolbox-dock-bottom,
+#toolbox-dock-side {
+  opacity: 0.6;
+}
+
+#toolbox-dock-window:hover,
+#toolbox-dock-bottom:hover,
+#toolbox-dock-side:hover {
+  opacity: 1;
+}
+
+#toolbox-controls-separator {
+  width: 3px;
+  background-image: linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0)),
+                    linear-gradient(hsla(206,37%,4%,0), hsla(206,37%,4%,.6), hsla(206,37%,4%,0)),
+                    linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0));
+  background-size: 1px 100%;
+  background-repeat: no-repeat;
+  background-position: 0, 1px, 2px;
+  -moz-margin-start: 8px;
+}
+
+/* Command buttons */
+
+.command-button {
+  -moz-appearance: none;
+  padding: 0 8px;
+  margin: 0;
+  width: 16px;
+}
+
+.command-button:hover {
+  background-color: hsla(206,37%,4%,.2);
+}
+.command-button:hover:active, .command-button[checked=true]:not(:hover) {
+  background-color: hsla(206,37%,4%,.4);
+}
+
+#command-button-paintflashing {
+  list-style-image: url("chrome://browser/skin/devtools/command-paintflashing.png");
+  -moz-image-region: rect(0px, 16px, 16px, 0px);
+}
+#command-button-paintflashing:hover {
+  -moz-image-region: rect(0px, 32px, 16px, 16px);
+}
+#command-button-paintflashing:hover:active {
+  -moz-image-region: rect(0px, 48px, 16px, 32px);
+}
+#command-button-paintflashing[checked=true] {
+  -moz-image-region: rect(0px, 64px, 16px, 48px);
+}
+
+#command-button-responsive {
+  list-style-image: url("chrome://browser/skin/devtools/command-responsivemode.png");
+  -moz-image-region: rect(0px, 16px, 16px, 0px);
+}
+#command-button-responsive:hover {
+  -moz-image-region: rect(0px, 32px, 16px, 16px);
+}
+#command-button-responsive:hover:active {
+  -moz-image-region: rect(0px, 48px, 16px, 32px);
+}
+#command-button-responsive[checked=true] {
+  -moz-image-region: rect(0px, 64px, 16px, 48px);
+}
+
+#command-button-tilt {
+  list-style-image: url("chrome://browser/skin/devtools/command-tilt.png");
+  -moz-image-region: rect(0px, 16px, 16px, 0px);
+}
+#command-button-tilt:hover {
+  -moz-image-region: rect(0px, 32px, 16px, 16px);
+}
+
+#command-button-tilt:hover:active {
+  -moz-image-region: rect(0px, 48px, 16px, 32px);
+}
+
+#command-button-tilt[checked=true] {
+  -moz-image-region: rect(0px, 64px, 16px, 48px);
+}
+
+#command-button-scratchpad {
+  list-style-image: url("chrome://browser/skin/devtools/command-scratchpad.png");
+  -moz-image-region: rect(0px, 16px, 16px, 0px);
+}
+
+#command-button-scratchpad:hover {
+  -moz-image-region: rect(0px, 32px, 16px, 16px);
+}
+
+#command-button-scratchpad:hover:active {
+  -moz-image-region: rect(0px, 48px, 16px, 32px);
+}
+
+/* Tabs */
+
+.devtools-tabbar {
+  -moz-appearance: none;
+  background-image: url("background-noise-toolbar.png"),
+                    linear-gradient(#303840, #2d3640);
+  border-color: #060a0d;
+  border-style: solid;
+  border-width: 1px 0;
+  box-shadow: 0 1px 0 hsla(204,45%,98%,.05) inset,
+              0 -1px 0 hsla(206,37%,4%,.1) inset;
+  min-height: 32px;
+  padding: 0;
+}
+
+#toolbox-tabs {
+  margin: 0;
+}
+
+.devtools-tab {
+  -moz-binding: url("chrome://global/content/bindings/general.xml#control-item");
+  -moz-box-align: center;
+}
+
+.devtools-tab {
+  -moz-appearance: none;
+  min-width: 32px;
+  min-height: 32px;
+  max-width: 127px;
+  color: #b6babf;
+  margin: 0;
+  padding: 0;
+  background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1));
+  background-size: 1px 100%;
+  background-repeat: no-repeat;
+  background-position: left, right;
+  border-right: 1px solid hsla(206,37%,4%,.45);
+  -moz-box-align: center;
+}
+
+.devtools-tab > image {
+  border: none;
+  -moz-margin-end: 0;
+  -moz-margin-start: 4px;
+  opacity: 0.6;
+  max-height: 16px;
+  width: 16px; /* Prevents collapse during theme switching */
+}
+
+#toolbox-tab-options > image {
+  margin: 0 8px;
+}
+
+.devtools-tab > label {
+  white-space: nowrap;
+}
+
+.devtools-tab:hover > image {
+  opacity: 0.8;
+}
+
+.devtools-tab:active > image,
+.devtools-tab[selected=true] > label {
+  opacity: 1;
+}
+
+.devtools-tab:hover {
+  background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(206,37%,4%,.1), hsla(206,37%,4%,.2));
+  background-size: 1px 100%,
+                   1px 100%,
+                   100%;
+  background-repeat: no-repeat,
+                     no-repeat,
+                     repeat-x;
+  background-position: left, right;
+  color: #ced3d9;
+}
+.devtools-tab:hover:active {
+  background-color: hsla(206,37%,4%,.2);
+  color: #f5f7fa;
+}
+
+.devtools-tab[selected=true] {
+  color: #f5f7fa;
+  background-image: radial-gradient(farthest-corner at center top, #9fdfff, hsla(200,100%,70%,.3)),
+                    radial-gradient(farthest-side at center top, hsla(200,100%,70%,.4), hsla(200,100%,70%,0)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(204,45%,98%,.02), hsla(204,45%,98%,.04)),
+                    linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.3));
+  background-size: 100% 1px,
+                   100% 5px,
+                   1px 100%,
+                   1px 100%,
+                   100%;
+  background-repeat: no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     repeat-x;
+  background-position: top right, top left, left, right;
+  box-shadow: 1px -1px 0 hsla(206,37%,4%,.2) inset;
+}
+
+.devtools-tab:not([selected=true]).highlighted {
+  color: #f5f7fa;
+  background-image: radial-gradient(farthest-corner at center top, #c0ff40, hsla(80,100%,63%,.5) 70%, hsla(80,100%,63%,.3) 97%),
+                    radial-gradient(farthest-side at center top, hsla(80,100%,35%,.5), hsla(80,100%,35%,0)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(99,100%,14%,.2), hsla(99,100%,14%,.2));
+  background-size: 100% 1px,
+                   100% 5px,
+                   1px 100%,
+                   1px 100%,
+                   100%;
+  background-repeat: no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     repeat-x;
+  background-position: top right, top left, left, right;
+}
+
+.devtools-tab:not(.highlighted) > .highlighted-icon,
+.devtools-tab[selected=true] > .highlighted-icon,
+.devtools-tab:not([selected=true]).highlighted > .default-icon {
+  visibility: collapse;
+}
+
+.hidden-labels-box:not(.visible) > label,
+.hidden-labels-box.visible ~ .hidden-labels-box > label:last-child {
+  display: none;
+}
--- a/browser/themes/shared/menupanel.inc.css
+++ b/browser/themes/shared/menupanel.inc.css
@@ -25,21 +25,16 @@ toolbarpaletteitem[place="palette"] > #h
 }
 
 #downloads-button[cui-areatype="menu-panel"],
 #downloads-indicator[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #downloads-button {
   -moz-image-region: rect(0px, 256px, 32px, 224px);
 }
 
-#switch-to-metro-button[cui-areatype="menu-panel"],
-toolbarpaletteitem[place="palette"] > #switch-to-metro-button {
-  -moz-image-region: rect(0px, 800px, 32px, 768px);
-}
-
 #add-ons-button[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #add-ons-button {
   -moz-image-region: rect(0px, 288px, 32px, 256px);
 }
 
 #open-file-button[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #open-file-button {
   -moz-image-region: rect(0px, 320px, 32px, 288px);
--- a/browser/themes/shared/toolbarbuttons.inc.css
+++ b/browser/themes/shared/toolbarbuttons.inc.css
@@ -11,21 +11,16 @@
 #back-button {
   -moz-image-region: rect(0, 36px, 18px, 18px);
 }
 
 #forward-button {
   -moz-image-region: rect(0, 72px, 18px, 54px);
 }
 
-#back-button:-moz-locale-dir(rtl) > .toolbarbutton-icon,
-#forward-button:-moz-locale-dir(rtl) {
-  transform: scaleX(-1);
-}
-
 #home-button[cui-areatype="toolbar"] {
   -moz-image-region: rect(0, 126px, 18px, 108px);
 }
 
 #bookmarks-menu-button[cui-areatype="toolbar"] {
   -moz-image-region: rect(0, 144px, 18px, 126px);
 }
 
@@ -44,20 +39,16 @@
 #downloads-button[cui-areatype="toolbar"] {
   -moz-image-region: rect(0, 198px, 18px, 180px);
 }
 
 #add-ons-button[cui-areatype="toolbar"] {
   -moz-image-region: rect(0, 216px, 18px, 198px);
 }
 
-#switch-to-metro-button[cui-areatype="toolbar"] {
-  -moz-image-region: rect(0, 648px, 18px, 630px);
-}
-
 #open-file-button[cui-areatype="toolbar"] {
   -moz-image-region: rect(0, 234px, 18px, 216px);
 }
 
 #save-page-button[cui-areatype="toolbar"] {
   -moz-image-region: rect(0, 252px, 18px, 234px);
 }
 
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3436a7d4f24b0c1f6a54827bcdc6cf5f8a208d45
GIT binary patch
literal 609
zc$@)Y0-pVeP)<h;3K|Lk000e1NJLTq000sI000sQ1^@s6R?d!B0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!14%?dRCwB~lud8cFc5}k>|~v0v)e^0
z0R_5|3Mo?m1^05|#DSl|FXGIB3##DGl>@2}2S7miYN16{^WiwQ8Am9atdR;*Em_Vw
z<7YhYyjir?!bJ=Q7c_!@3A%A}CqZNxB4)_gHs_pXkTs3ke*gOAd;q$>wKJl?Eymbw
z3eFH9qwVkXJDN;q52Gl8FdWegArx*EaQf@SztLJ87fCYV0R@ie004ru=6Mu}&!LE5
zJWhad4g?0yc>An%<AbhT-Qbruu2B%9U=FpCAj^U=L=bTTl*AX9p%02F<NEq+8B`)@
zrNDL7f!$432kGX6+yP^jR&dX5uie+0%FrIDZ=DWACA~1svSw?H+uH{V-#FqPk-ftq
z>EwZ^mB&(+-HTe)P}lXTH8xkeQHqj~Tn&|&!yi~Jr4Lft>;m%MwUJ<YM7{eY!qMG;
zI%%vKlrJ0QmInh+LSkQ<&%2<qC?Oz~$pSnYPhc{g5`9=&Rh9mY0wExZ$4jy4l$4^?
zO2lh}cb!J$FAr2#6%_dy@YZy^?Ud8P`N$cN_k`^lgn#kT{d>E2-hDXOJo<T(mibv)
z<kdpS>Z3LmF$f71bV=IPfqOo}Ud`dkbl-_n6Q4YNcI(ytoAmI<@gmRjMPnc(Q2O=D
v!RFrMN3&JXdH)jq1pS0>{|9vL_$|NyJKEAnS|+tG00000NkvXXu0mjfQDPe;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7fc04ea7dee3b5d32360025acd57956b846d3007
GIT binary patch
literal 455
zc$@*p0XY7NP)<h;3K|Lk000e1NJLTq000sI000sQ1^@s6R?d!B0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzX-PyuRCwBAV4xCU{Qv(yVMUCLoIpwn
zh$Vqo0*J+cSOka#f%pgzuVq0}%m$>yfmjAgivsaiAm$bj5U?;aGvn9Q)#X=LSLahy
zROFYFlM|4VlH%v(<z;{y1T-X;i;K(7(9n<%h(U_^m6VkD-@bkOosEr+IV>zpAE*YG
zgSkKi%th9pKYvbQ0s>?eXV0E}^y0;fFL(@r1DHlebVEo5Ow@`ssu=_eqX(BRU3!Wx
zdHwqJx36Bk`UZ@(dw9&afo#wZU||15SMl}h*Wcg2fBy^P|M~Oh-?wkyexoV-fozb5
zwY9Ypx<MQq94w$%!zPCW3<hUlQ$5y>>*?w77#JAvsi~>)DJv`U$;-?0J%9fE3kwSi
z6VbV!5t0W)pgCL&nrT7&k3h@@G}s!H4>dJ4L6-0<C@AnrOH1=fNJ#JjGwlqZnnHrb
x2-FfmXb~a~wFp!)2m>)ctQetI5HSD*7ywRHTFF5*R=NNH002ovPDHLkV1gUVzTyA?
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..47e6f301619150a71af57563017c032675fb366c
GIT binary patch
literal 1924
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
W$~M<*Y;m^y7Zm{^@<RXU6@LNqJ^^L`
index 307aa18ffd07bebfb89d357702df8a892fd2edeb..14a90c27b49b0f8cf90766357e5c2582b62ef230
GIT binary patch
literal 12983
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
index 36456fd820df7cf23fe9e61ec374cd486d5e276d..b42fd7475dbe89ff00dfcf875c45f76c839fab05
GIT binary patch
literal 9329
zc$@)oB#zsOP)<h;3K|Lk000e1NJLTq00MRZ000sQ1^@s6)~=JB0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBVB6G=otRCwC$T?cqn#TLGs(2<&lA{{A$
zLTHI}LI>%FB0UL7fY6&Xl_o_%1nH3~7y_ao(v>DkNf1zwDm)NS0Yy|gA(=OS_6$s}
zbK9~(eKOxS-|pVF_f9$IpZ}DrF~&44e`(LF{gQ^)TD;bv@BfD4`ls9|#(^g_#WilN
za$KWIX@9DUlAhPxRMY=OO;m{2a9(HgI+NE<yk^rLm%n5T^5Vm5Uiy4o{zZLnD1Xe4
zgDifU*Mg8Cs`DS0zjt37_50&?QM8W=*ro5cx_X)(v8#O|7F~38nV+EX>WW<aqc7i<
zw*Ttt9ss+ic<nZF<jC#Ah7H@wzen<#(ZlC|g4ZUzKI5TK_vIBg-oQ&B0Rkhl0>l;Y
z@$re~pZOK%WT9usVshPdyw>J5t%G~X$7^S*`8*v|ygbWm6akrMJOy^;@@UWS8pdk}
zUh_EwcIewmybjKiCCmH@6)G%4#dmC@eRli5GOxpVjn>uSw9ih7_~esMjwB=`+`E1I
z_T6{ieK(G8Yi0A?YP`N?@c&gDj<+Xy4JCjXZBS>^F*z;9tv|1Qd7Z@TbY5rhI+fRv
zyw<dFFE8>sf!8U#4&}8CuO-kg-d4=Ib1;WHR;yNR1^;ZPo7*kvexhyGDRhpngZ8y*
z_b2~B`UG<bv#vMw{TyB=^V)^i!WN6uss`g)UtgnR?aH5=G`CQ5KFs)`=fgN19~c-I
zTf27cl_W#TTL1(B1l!U4O(W@!wzSXX;r#Su{N&=bHR)29?mlsRu*rNk>!)ziU!ImU
zH1DTUZDU2;JO*};7})s@{50bek+JJChQ}nO8?cG_PB_F|)6X)ER~P^8J7^P27a5b3
zsoS!R+4^tDY7^LDAa-B2Y}rBnUo0spiA|d}Z8w1rr=?o<?AaI0m@#8dojP?^(m;1P
z6k?s)wr#s+^5n^1q)(rI9!*rIB`txjS0M=V<jJ#$f6kHsN6EBl)4scU_3Fd?dzkLr
zlDzhtGiOd50Y4S6sEB>z$B*AhinpYVd-C`7^?i5Ms#S+j@ttog<8)9_8}-_{b?b@s
z>(?LU-@BSAY71Z&7Qb!ui7z(3b`;>w0k8uY?%KL_>oo@s95~0pR3f8t@7}${g9i_u
zZ`G>R$8>M`Z9LxaBS((>z;p%M2wYhTuS}UT&6Cf)a^=c3zWptm&HLK%<Hvte{Qr*_
z&wPJz2V*ZRCMM>9+$Q=0@VRKwqOSl(O@#fEWy_Y0`SQyzPhY-#`HvenZrr|g>(<>r
z{`lk8sZ*ye(cEYZg-DAKU&S>hT)cSk_g{bg_4?Oee|>(zf(84UHEXttZ-0~5X1r$d
zHn1bsHoRZIexLIDy+dGBl$Kq)cHMCG>eU;}X2G#Ihrpe!_BCnuM4U^?Sq~D*^E#03
zSEXRFeGsn!kC5qy0uF1?puvYbcI^1>x8Hudk(ij6^z+X@|MBt1A0IARvgA?%HoivV
z`q;5!KUuX4jv-)SNB&^EcE|XoG2Gn@+?kCZA@3naE?l^9Rou_Mefz$L47O<J>;(!G
zcn^AO(4aw|@!w5(tq$FRZAFU~UBZ9+Db5S^!uaW=xNhgAOP3xfT)6Oi{QGm#_R`Nj
z`|MI`tBy|l3Az-d3lS!slp2Ev58eW~fr{^%+bZ`M*!>-VUEaQ*X7meNb~s1Rbu7n}
z3oP@zYb@P+cbLzzM5e_iGM}Y)So#ImSmvo0SeD-FS@!VQZ=dS-X+|wi1>2xbl)HED
z-Xl=sM1WO=5<GhJXz~EXASzd`+%gjMc1!WbjT?V-=gyr3TmwoC0E};c-T^xoh<kti
z_1Cup7yxL{GbQZbzyDlVSlD`8bIX=3CvM)nd54$~QL;jyK!^&(PVEpV9a90@4jnpl
z0mtB20(WUm?kOl+wrmS_@811i(Z+lB?D;RYVV|9LmL^QOdiCn91OSJSuUfS#Sdr(Q
z0y_@mN<_6Ovoh)CM=bHiM@eB#ORV7AidX?V05!B9z^RoW#4*%=1uPyf+UOdjRPB`h
z7%$?y6)RSJ&9{ZvJlF95Kl|*n6DBM8>9hit%N+EJS-SwJ*Z_B6gnLYwFkz?ud?<D7
zYtf>`>Ysl4={F9dHq*-9*Uod{9KLY+l9-W~aGsY;X_e96%a<=di04!E-xLArpd{aZ
z`|Vx%^XFfzZ`Zte^Df3dp?q-;F?Y7ww@sTiYcTIScka9vzy1CFV^GEa67!Nm4gw@_
zKyen}S#?cp|LUu+z9+?9@Db<{^kw*%F=KWJ8Ky4)`|aAb`-H%qOThv~i}o-Y!`LVF
zQ&lthBZE3|4_4sL0@#%S0U+ePSj^?jnG<rcD#_jegIg*a85y}jjAuG_rdS}39Xs}O
zTHNc)Y)?R)D6j@-ZdZ>KeT9V<o@4v=?I-!~KGc7x{l56(i&I$SnCMjHJYBqaadJD)
znl)<=&2LYv22;0f+jh3_Gey=GDqLhOz7uozSF+b3(ipTOql*$rFxNyD&!uCE(m8&_
zlKOcY*m3#PZu<1;Ux$Z>FAWF?7#JNLeSF@$c_;YiQB}phi4!O8<>$5i6R^t{wsLLW
z9-CR-R}VA4A$wSs*Wy{a5%J75DxPVh<CzctOwWI38McT0XT)LlRIg9j)8QYkF#&c;
zP=_*Q%9LFW8M{gVb$ZsNTeof-X(ep8Gyqd4U*q%7KmU%vfgRSQ{F6^Uxd@Dr+2lNb
z{`{}_Q~<lCbLY;DlaB?{A%VL9e20LSkKvv61>aZK0Ms=pRH)E<Cr_Td$Q4o|6e^w(
z-?0t*h;eaQ4JumU4%oG8*L?s(f~2<*Yi9!Nx_`ZE{AqS`8E=RcY~PMCC(Gy2!p(pk
z{eL6}Y=_1F$Hm2+?bNB$T0cL(g{b%r1u6CuD;jBGmh}YK)!}uFnAqqSu&m;|p+kpm
z)lK|?CS!31#)4BJuNXh3&mupQ4&132q!2K|s`J56pshI*mkg2sbb9sbwMn7i2k`zm
z1IA8uonL<W<r<VD^-oq$fgSa23xFOhc+f6C{`linMgQGz8xGud6AShZ9WzPlPna8{
zxk8ImjDu+QkVP@3+H)r6pq+DRJclZ*135IepXbZGjw9s{rllB}1v}ESj-$muAyPU<
zE+;kHw{QQ60I_G!p8dIZ@7|lS@EtX3)OOLQ9NgV0UAlA(xxOe_AbMUO0}DyCP1X+M
zDp&?}I&cRi>T(F|`pSzj=nrDZ>tcLkAx?|m4AMQI&EN~37kU9KrT|<3PxL(j=aaij
zS?U|t!!mXN*anPUnhY5-%)5U5`YkNDLqbB<5rfzq^IR-W$Vy`y*kQW>cMcY~DOhdJ
z?p_ZLZn-60hRngJ_>OHR?DeB4(GC~xT{msobSw#tYf!Kc$IzUshDGbbg$ws70I`dn
zS=J4qiftkKz7pe>Gw3VupRuvA$2ozt%kKE$=f$P~b|oU#RWBC4F46zZtE|v~ILiw>
zJt&Tqn0S>H=I0cPTvy!*s3S9MSIxeETOcOiH{X1d0!#sL5Fm0Ah>;1`;>sZfKm@x+
z;I5dN`4#^sgNjR+F8$8w@%;c&V2`lEwNT7iG5G-IRNxMk3!4<64vLKKExkf$wy9XL
zVk|d@{f7UJii+9@^C@bN9z8Z<8}{KCQV2eZYd`@sqyah{D_nVi10YtZQe`=rEW=1q
z6cj*D6b|H`=CuZ|ZF%k2t(8C6x+M0;8=PJp3)U_%v`LBO*vD%dUaRw(TL<jQbIGt;
z{5?Q0nYZ6KefsoeZX&!)%6W(Y$T$|~SO9!afZdqyzyJP<-ARRULEuhR=9&o&hae%^
z<~jGloq|Ei4P_0MSw0UeI6l$e9XfPaD>EHX@ML~^O1e%tfIF~VV8&n`<xKGz`C0Lm
z`mvkJG;7003iCS@CSCwVD2#RM)*UfupZjgY7hs=^8#iwA@4VnQKKXq88Q=MH-RAd-
z#lq%C1nfqfIC0{lopbp(|Ct{@S~|BO065$|;8O@?f`uc%#pcbMj{&Ga>2ntIYxEKJ
z!6c48#G;NC(Tx?#=XK#80DyyQkQ{*9M{BT}kR8~M_9o`n6Xj{=xMC#B>(aC9*%Hk8
zdIVgGIRJK(ILNpr{=a3*mT=!_kt<iOg#wf|Y0_ksB=?`j7zc|9;3hzisw`QuWIyC`
zL`1}TT0H0Vf{)!C6PBwj?hF5oegUvR-@}ap+g^S3)oq%w&#!V!^M%b`j4g8capHTI
z%xZI>n^3f9u~?Un&my^E8}=En*MCP~XUWnFT?knYStl%qitFcwFQ<GSOy#O=)YmR=
zFm{tBP1>6;U%r%#oqy-GD+7A%XVoX&V<r2<Kj`>f7g?H-ZpQANJrCs4GyUUP#kcOU
zvVHcmQv6(ppw5YNZ6JJ`;AbUYhf~kOgeqTSu+F4u=r~Fy-5=#^av^z~go_b#R|8Cj
zd=Hs3XP!?h<(F_j!o+I9xC9!3I}=b>Nnu6_0ic00#ze>JTUH+U4&{t}*REZ=Mc^ky
zXHIJq6cqFU%yBTkaqxUWD0jWW$3B2p2mx|h4;F%z1GMH5EuQ;e;gk+Lw|_kN@X7se
zUATT}$t`y6ea3zr>8{t7F>J%WZL427v|vj6on)SEECIXz00x4oqdv{5n5ft`7{`#=
z`3%nWGO%-`-~l=`x6`?%1JI!Ed!v6mspJb(+|&Cqc*d8x(%LT{gMKYls?_`FYhpDz
z!}m(C6ew84Xeomgni3N>fmq#o@Dr<1qs9t7kl})A4>5PX4iq!muE!g1yzx2QHvkg(
zb#`MsTLC-%J%*bRV+RZv@Da9iMShwC^$YmULC{WsJpTPFGhk<CVl*;2D((q_dzyUD
zq6qV?&ipB4h7kB;IGgs1QQyM-0*hRu{rs7K!NN$_|5;%g7RQjk@(a3qZh>Go#n`?t
zPj%00%GgQA>1BN}$V13qJgW)-1At;5j?sfVi}5o~SWif1p913#ONQ7+vP}5twiS8{
z44tkWuYlE*w+S|n+%h_N0oa+DFO!J{0Z1_yxjx+`^aSayv`%Ch%?nR_@1h?<_WT`z
zo$cp=`<LvmsklDoP8i0Od>*U~s%<j3^SUXvV#iJA8xFn1nv7>GAj%Ew7VU74{TaJ2
zvZ;IB-{0No{w&ioo;8@jSUrBu3;bN2*`S*W)Op}sTMVlbJ*YD(IF6t5il+{~<nMHx
zfK(2}b%qJQH#ip)s4Fde!od33G^H7WJDZ>m(Zms8N5HrMaKR)k%w}@IHn4a&2FKzY
zEoDUVG*0i|b_x{8C+RH-*u8!8;^N!vcfKh3jq8gmGa0))mQ$LqrL5S7eZMVbIQEYV
z3vTdpClRPi_9GE25`mgPlZhG#;41tZ$=TocF9vpRW1LXGb)gk+1Sot@*&mE660qI`
zc5lc^iUWi12tc+apQ_fRltX0Gm;xkB#&g353Bfin<q`AKQNPduC>uC%Ae_+K$|f}f
zKTim{T9{*U+kvf;-2^Ov-DUtduyd+5!FGPkVKZQ70$A(-nEOunSm7J>i)uRweBl>4
zM3#YILuDpaU-T?2+(vK>-Tf9sbg1YT@*mRAoo4~;g(;rcB&9qx1HcGeFp>2|1*kJ?
z4|$&++!+Bo_}5`9au9dP=$c$X|EjrzgG3+uL+<Do{hayzoJ`!~;DRCV!@`*Y2CAoW
z@I*4XP^(t04`8wd6OVgE5EofgsyGEM58->4Y=HoiOKjzz`dyF|7QiaR0q6~Javi<(
z!s0r%WvT%47WxC@DGa{q^0ANus%-+?dEFFSuj7t{PQz}qP9ym0t&1DjRq7VcmTr5n
zcmk*cphF1?k7w=qu^sq1I9K*zgFl#;%okl@YIsP0B*%(y{`~o{o3~V;@L57=!e53a
zp9?D`VTRRLm;s2<(2T&H9Pl6tOd|%M4&_Cx)F5mzvC!Vak=!Uk5~gCL>cC{gxtcrt
zKbg7d*|X;+Cqf9v!u)_X5`witUM+aSz`C36U0#^TE^@qgeu#O!G?n4lF};J<^K+XK
zu=9KFx#!*&|3ePWne}~0fVv1)k}#Ku?G(Z1CoxHrRTJIFY$=(1>gfLyY>`zPp>1I*
z0f>gOq!n*-tmGlAJq31%goBTkmx0|(nDWGa@}H|p%Dtqd<jX;M$e=-UM}HgM3m1Gh
z!2n}kU<?aZ6$Oh3FhyV_jDQ{ecN?%-Fulv*bI6b(TP&VU7U&0Ie&s7#fXQgEbztp8
zU(@z&Hh|s3vIONtkcG_D(J{U7sb}s&Lqp+1C7hT02|qC?+9E}Yz#Kjc3_O&&6s3I~
zY!uoZ=0uD?6E-^+*jaHd<{i0Y$R!A}LG&ptTD)zlPO<1w1!Ks;7m{@azD|)Q3xjg7
z^a%FfC|Cu-L6R&KV-FFXGlfqqXZ)@ZBb}Dq0>+6&5#|FiWlbfQpwtMSkO4zDf`@P{
z04TXfwDQEq_#u4n!YQDt2l-y={rX-2I|TqLEeIZJ@od-J@8NZ#y)c%QeT6Y5AD=sS
z?nSC?&~;un#RhlSozQzw0_!`NvEUAF@P^N|8y^5Wd~ey_y$_%LUSX{FfV(WX{oWhW
z!@Pw2US4XTD9!?$eAK{>6zR))mJEIw;ur)dP(Xr44z!`<xIA4~CrQWYOLCwD%mXTa
zEk(4f%-Dqq2XKe&JC~TGjFKP=1CwIM#{dEg!k(VjR|r-P%+dtr)jGXBq~2$VKSn39
zbK@90H9%d@O<?zan437EU#(3zho9?9z%D2J4#a<<y|o8<{$2st#r6#wHXNlWxoikz
z5yuxVUVN!=Vn*A6Npd;{VQ!K9o4SJ?Kwn^0B_ibPmLGoj;VQ8KFRCI>?G~J?Q$Ah?
zc3?iqUrzSB#AjJBcrw7%0XyXO`xbs-`o#stHGmz!H}?bjU1!d1&(vuP(BI*34wqd5
z;1dfVqB3Wi0J~55Sc#JsOGg3j#Bb~atCz~aE)y20Yu2p!)`?<8o6;D^!X{Kih$B#i
z3wrp=PJ>^g@VO$Hga9i<_D+MjNPt0{YY;p$QTWhNz(y3wGW2@|^qmM+Ltj!PW{T&O
zqk%mfk9F}3!Y5N)oA#%r8ZGY=3n-jxurMeOP=~hC1+-m(2^OClH*P!zpC?){`RIUM
z6UYx?iX~R>O#*JH6L1X)gv}zh&Nmf<C*=Ek8TmYg?;yE1buqD4I0kk$fXe`6T_B%g
zU&TE(23v}(5AfxD4D3=L*eOl19bb<7erVJ+Hl`0_;Vs?ZZTlKGs5|(<MRx8z_xD|^
z+@IZA#Ix}|7#rU88VhM1cUm?(fQ5od(@Eoy4~5<oTLMY}gX2+|V&OMOCcRwxPNK=4
zK*I7cQPeJlz<h!Px>*!zfGSWz?{h~chrm>x7|Cf5kT}}RzaIjXOle`VpA-Q*7q4kK
zPz#wcy#Cgt^V4|<8XrtYdh2Q*#`h(?{Yvf62-KyebCd4_%0viMVl9MuAprfda^=cz
z06=L)Ukk?w0ZR<05Hc+gH~=8xWTi}I$ohh@(A<f7A=HCm9&<9L;oHN{8;kyfsoYb+
zL2O#()HKDCk5D)Xqo9Tj8-7HN>^%Uab--6P#TF!`G8!No-~v8k_gQ{-66Z)Rpw^3R
z0B6LyW{?y!=1LjNiP^Jf@0AxB=gytG0>P(Zw#|SY7jiM=_b1p`0GDAp=kSH82<)mM
zPzz={BSzf_6af^#zm0qyLxszM?DGn+EVnge6CCOFKC)o(D01^pN(Vs}!W@gaMJC|c
zl`2(QE`SmGqEVwp7!PGqfw2QniWJ~Z#n=f`F1|~k4(=pr6bpj@fI2zA4F!OXl;=n?
zsdlA+i9e-q;Xaw4Vo@fa4<Aojq>URrdh`x?AM_I~jLM`^@PvyNtjG%)0rnTJFaYnA
zFg-c#4vpu=nmXydw}D->G`1Q_W2z#rL$L@3ApU<e#p($I6H{y#$WgtEg=$->nPR)P
z+`D9G`?G9DSH=c3c@R7SP`A87Jlk3_o}Gw!z}^jS5YOg?G4@)UGc2mb-uHD6Ra^z`
zARu_;&Q_D)iE66A2MD)szy0<Hy)PUwS{?;Yr~)#iv?rwu2G1)3h(UOgNlDHThtK?o
zUW1a;+*$q8*ada)sZ#}1Sb)1|Bh#Y86;BS_w}q*Zk)p|>a()Lut6x~lUf)0KB6gOW
zV-I#$)F_s8W-_Z$JmZ2!&uEzisFQ*x`U(b9N&_Q=TpkEEq+{SKlz8kD?L~}2Uwv>1
zatfOHBS~hNJETlHN#O8RL_T44j;LZj!M0hgwjp4_^1&=dQEH7~HrD%9I4Kmh=k?$T
z*>?^An4Z6jh~R|Z4wRe>vS0$zQYJw~TeTpwH)=RQfygBXuuRFjN687ADFsS^G=81{
zLo0(fv?mlft_L%_UIthJJ90UIvdgYe;7D%~0RNy=1a`I;lor0nBj6)vwg@yT$Rt2u
z)>o%=IwHZh92g^y1$oX>s--Rxv*qom;rrkYz)M6M$_3l7PY>#Jz%CFA2Epvhqyfp}
zAk89O3Ic-=T`Xk0d>t$>^ilF+p-=OoT`B}mB&V~2u7PR&!w*0F29_x-%AmvWytprH
z129K!MoPodP&ek4WAR~u9sZkiX7U0LIZyR^_5Uq+0<s9c#wOQK4xSJ`tfIi;pxWlG
z;0dKEwomgfE01V#<ld6bNo-{Oc*}=-vsOG?*)EBVZF=Nh|0Z9m-ke|s?!q<uX-cZ7
zqFCXZVG#+WDp@cg^g_~RqT)(ep@?&!{3v9(Ke1Q?kjWqH2b3l<lq(WOrZY=vB7+qL
zxJ#Fc!0tKt>{#_X01AMLkzfqSs}&vC_W9N96pyTli*VQYuI?&+^L<gximl|nb@};s
zeIC0qSkVa649pVLhCw9kkc_%Mwh6yA97_yS83hyB8GR<39aScLN`uf*XO@XJVdJjI
zkx^3c#1t~20ptYJ82^v#JLt5KV|0Em13N#g6y@|h2;~QB3nd5^0N_k!aIuZj=E%vQ
zTY!zjvm>Ag-vN%n?27Yvx(&E3w2{q*P(lFS()cM0zfA;Rz+oS$Hef0P$N;zmBZ7b|
zm}vEi+X&c+1jV?PUV$PgtA73ZAMV||_e?4VPdqdLlCBkq{?d=RWGe~}CXt^*6y*6M
zHlUL3K0C;u4&WR9RB~Dn6hz_@YaXGKv8j;`2J@t*=FT5CN&$FA(Y~58sFTLe^Qu5Q
zfEjY>sG$ON3SgH9U>^ZzkjG}eu^5lIHWC$+e{Y^t2%e~nc>t3+{42451^bHt3W`8)
zfN_lT;I;&_EMybq9jstRZrB~8R;Eh;e=OcGr&Z7V4*_;_A^)t}LZmxEzl-#1it9fO
zIVqoq->Pkd8@!V4M4h0xfWJ1T@qw6`O-{3gFP>%7tH-nXmEx1xy0xX<jNRH&{C7FN
zy<$9zt$miwZ*ZEu+2BBoNrGZSa0e%7&G_{vs!|Or5&f!zUiISSU7O7?LF8+IC9wHw
zF#v@q+1VFD5ulK-qz>Ua5WH}nM;<wPwURz{N?m<$i7xszPzCNx5)^w2*wxlEQkbOr
z!7g4GV<Z@P0^-WEht}N2PK@Cihf})8MzVWHM<pg6ADzgKjc{+{`=$-3wuK)X$iJ%+
z6i2`hOEPu*07qSbBUF5s6IGMXR)m29MxQ0WLQa+OAEqqor}m2Tl|ql0Aed(-0yyY^
zo$3{1nPCR<R0)!EbWSe=I|!3@F!KsV4)+gc0Lnpi4dlGiba|IVRIE4#uNOnxU<?b#
zegH9;XW$nk_bC`rY5bs{%9AMvfic<eUtnf2zl1ps=12Ia0La6~hs<|#z3eOFQMwa3
z`ZE=P9ooDh#u5DC5Sa&aA(`p%8nVGKgChza0V<F`6m8c?*Iz9G>O^1w7Ce|6m_O(<
zfCw<+1XRY5TY|5dYYX}kE-Xgvf_?IQHE_ETvLslQI}Y14O0Q%9%zDA%g0Uh1D~JFJ
zz^Y~h>J-3Em_4D?3P9%wxq-G4!E>C=yGc3&OjT`Kbh=U@cw#63M4vu=5U4N^rdNto
z4I_D#9DRv^KXMQ151mM_OdIG8rpgM~VR5MPef@_4yGTA~j+ptGV;_zo#<&uE2+6<E
zPJ-evs`{kGshgk}Z=RU=;{FVC>K)k?Tki}z*eHpes>g#DgLubP=0^nb&r1Avb;iD{
zlf*s_I>Q#!JhEqMz5N+1UMZ#ocQB8cME)3+>R=N@4kAn*%FR~N!8Ix)<%eJ*u+jyC
zM`lwyr6@ocfSfAfECx6n$)zYmJy^iXx35S80RgFqeoY2<!ne@km15okcI`xFd<<Zu
z*nkfQ1U;e=#j}ctVH02%ykTbWL3U&WOFS|nDK4h-iFP$|FY8z<Pwc+fknfU?j7(xj
zN3zvZn(eEQM{B~rt6nLV3(pV0W|avX#}K2J%L0&h1S==M{Q(M)e23Z@fI_9vBL)hS
zxr-bWVFK)u{WCok^pqK2PEKtrnWhZTHFc6uv`ZI^Rg6Qh&0q&*zbze@?V<4Bc}tGW
z1ZzhDLw&>;M>|ts(JWyWhcZBL5i?I$kppuRiK&ING474b7jR7&K+J{gGc(1>dtyZa
zP?DlP9ks7Xdq1=(RtJJy1SG=fUdNM9l`paRt%xyxhm=ndg$a6!WF{A&PPiYSK25%7
z|1t3qzR&)Mh-s3;N?<1}0py2f=ypSWj;QwTGPom92NvAV1em=J3kt>_l&|!LiE7OA
zcaGMAZ=GZco`rcV-grXq7gi-j_h#@!awdl6&6}@=TM1IvkiL*}%jLi}06^RmfIH2v
zcTy49&9NJ7r;<G^_1_ii^p#@I(43iL;r|$^J$M64Mha@n=q)trbyF;WomQZ<HoMOL
z3^6s2zPG;m>BKLqTwv#_-r&G4ktGD&W0wPOu>AoS*w%`t6IWF|8nZCyz!Nyf0@x|R
z9YvmYcKF=M??eR+3L0FB&h&9`4G6CYI3@$65U4BX@IH`XJQ5}&tc>9#3dI1y0v`x4
z69y|?Q2<2y;q_EBNmagumBlNpG<SZnlBw)tR~JGIbUu>H^4~o*_lu?hwR$6g>CT-y
zPl45gz%!a)+`L+S-mA4fkB{kmGQ45I6+A$qdr(2GRE+|fKmQ)pt#RR%2UdignmxG2
zHg2}9sseTb+@YUf`la_E-j)2}?qVC6g(ECLoos??4|Wc$511wNpXSb~=Ho=@L0BO&
z5dcHZ8Kz6(sxPyg1aineJX*?^+@sijNxh^fLQUoa%v*S?NF(IyLf$U`U|?#T4;BdE
zo&cua9pELALlHhnFkz9;U9gCb2LnO5?M4Bl$v}!(Cz!1Z@E}-3yq}raRTuSJeqH~y
z#Qo@VO_>$EI*VRS*ve`9TC}&J`O85y@;&ynbVI5Tyqbyvg*sV8Q<{~b`d2)f6=G?J
zS}8Rd+*yG-Y5cUrc*Cn0!Q2t3tNM@t!4GUXeC{Yn0Os7La5I3r4KeAe_k?;gcp{le
z!dQf5htkr#pwbtRN8;V(#NLJ4=tI-RhY`DKXO5W3o<{)e{*lES?eb?}N8k=-*;Q2!
z1#YQyV!@sYr~dm*xibmJ{LkDxQ0COhFDjf^u>OU^fjB1l*!;GD-F<L}R|`oQt#f(s
z>@M=NYDZ=pPlQq$qR)dhbs}QTCQv9&2p%ivspRAwLOw_?D_=j&odzYVjbpMnj4BE-
z*>2V*^+<>U(D|^G@98W}V6V1;kBbPP@U56ntIa`MHxA}X@!#oq^`Vp|>8lse%J6+X
z_%T7)W&-TQ|AI;F1CR@UMpR<x`p`Zfhkb^~vWc2IFI5wZ^9LfjPR>gR_6bZXOqO7e
zk%j}?P+=y~j9;V;Ffz*nK|h1Qr>Ba;>=i|tf=zBf<9IrmIOh-x)YD*b;Y;)AEt&(Z
zX<IgGi)doz+v@zMz&O2R1K8nOwc-0m`Pc@UjXyfR6<yzM8&9EU@J$89{C6wGNcK+C
z+$o)WAL3e-X+dDOZH8+pqr1)6T0a^~t<6B4)c@J24`G%@Zoucg01#Z{HwRr)R$?^)
z*gMby-<8V!C77hy1d1yg{HKfVYdDQTu)6tdT;FQ(VYINYGe->P!ee0fsDa&mfam|9
z7A*6iif!_-_JEy6AO@>>By-HHJud$jgGvYNTm<6M0MG%r$(2A}8al>h0qpdkEGJc;
zN7N+c2}sC!3Ev^%S(SwBP}=qm0hvON$ByUY$6$YEFff#ux9q<`z&{>C-WxyvMu6~d
f05Ff+#k~FxSAda|8Z6ga00000NkvXXu0mjfWo)RP
index 36456fd820df7cf23fe9e61ec374cd486d5e276d..b42fd7475dbe89ff00dfcf875c45f76c839fab05
GIT binary patch
literal 9329
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
index 307aa18ffd07bebfb89d357702df8a892fd2edeb..668f8c108f74fc128fbadb4bdb27daa73fda3767
GIT binary patch
literal 13762
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
index 307aa18ffd07bebfb89d357702df8a892fd2edeb..687cc1b3dad4197e98b3f39a8d75878c954b13f9
GIT binary patch
literal 14117
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
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -683,16 +683,21 @@ menuitem.bookmark-item {
 }
 
 #main-window:not([customizing]) #back-button[disabled] > .toolbarbutton-icon {
   box-shadow: 0 0 0 1px hsla(210,54%,20%,.55),
               0 1px 0 hsla(210,54%,20%,.65) !important;
   transition: none;
 }
 
+#back-button:-moz-locale-dir(rtl) > .toolbarbutton-icon,
+#forward-button:-moz-locale-dir(rtl) {
+  transform: scaleX(-1);
+}
+
 .unified-nav-back[_moz-menuactive]:-moz-locale-dir(ltr),
 .unified-nav-forward[_moz-menuactive]:-moz-locale-dir(rtl) {
   list-style-image: url("chrome://browser/skin/menu-back.png") !important;
 }
 
 .unified-nav-forward[_moz-menuactive]:-moz-locale-dir(ltr),
 .unified-nav-back[_moz-menuactive]:-moz-locale-dir(rtl) {
   list-style-image: url("chrome://browser/skin/menu-forward.png") !important;
@@ -2215,16 +2220,29 @@ toolbarbutton.bookmark-item[dragover="tr
   -moz-image-region: rect(0, 16px, 16px, 0);
   list-style-image: url(chrome://browser/skin/social/services-16.png);
 }
 
 #social-provider-button > .toolbarbutton-menu-dropmarker {
   display: none;
 }
 
+#switch-to-metro-button[cui-areatype="toolbar"] {
+  list-style-image: url(chrome://browser/skin/Metro_Glyph.png);
+}
+
+#switch-to-metro-button[cui-areatype="toolbar"]:-moz-lwtheme-brighttext {
+  list-style-image: url(chrome://browser/skin/Metro_Glyph-inverted.png);
+}
+
+#switch-to-metro-button[cui-areatype="menu-panel"],
+toolbarpaletteitem[place="palette"] > #switch-to-metro-button {
+  list-style-image: url(chrome://browser/skin/Metro_Glyph-menuPanel.png);
+}
+
 .toolbarbutton-badge-container {
   margin: 0;
   padding: 0;
   position: relative;
 }
 
 #nav-bar .toolbarbutton-1 > .toolbarbutton-badge-container {
   padding: 2px 5px;
deleted file mode 100644
--- a/browser/themes/windows/devtools/common.css
+++ /dev/null
@@ -1,364 +0,0 @@
-/* vim:set ts=2 sw=2 sts=2 et: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* Font for code */
-
-:root {
-  font: message-box;
-}
-
-.devtools-monospace {
-  font-family: Consolas, monospace;
-}
-
-/* Toolbar and Toolbar items */
-
-.devtools-toolbar {
-  -moz-appearance: none;
-  padding: 4px 3px;
-  border-bottom-width: 1px;
-  border-bottom-style: solid;
-}
-
-.devtools-menulist,
-.devtools-toolbarbutton {
-  -moz-appearance: none;
-  -moz-box-align: center;
-  min-width: 78px;
-  min-height: 22px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  border: 1px solid hsla(211,68%,6%,.5);
-  border-radius: 3px;
-  background: linear-gradient(hsla(209,13%,54%,.35), hsla(209,13%,54%,.1) 85%, hsla(209,13%,54%,.2)) padding-box;
-  box-shadow: 0 1px 0 hsla(209,29%,72%,.15) inset, 0 0 0 1px hsla(209,29%,72%,.1) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1);
-  margin: 0;
-  -moz-margin-end: 3px;
-  color: inherit;
-}
-
-.devtools-toolbarbutton > .toolbarbutton-menubutton-button {
-  -moz-box-orient: horizontal;
-}
-
-.devtools-menulist:-moz-focusring,
-.devtools-toolbarbutton:-moz-focusring {
-  outline: 1px dotted hsla(210,30%,85%,0.7);
-  outline-offset: -4px;
-}
-
-.devtools-toolbarbutton > .toolbarbutton-icon {
-  margin: 0;
-}
-
-.devtools-toolbarbutton:not([label]) {
-  min-width: 32px;
-}
-
-.devtools-toolbarbutton:not([label]) > .toolbarbutton-text {
-  display: none;
-}
-
-.devtools-toolbarbutton:not([checked=true]):hover:active {
-  background-color: hsla(210,18%,9%,.1);
-  background-image: linear-gradient(hsla(209,13%,54%,.35), hsla(209,13%,54%,.1) 85%, hsla(209,13%,54%,.2));
-  box-shadow: 0 1px 3px hsla(211,68%,6%,.5) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1);
-}
-
-.devtools-menulist[open=true],
-.devtools-toolbarbutton[open=true],
-.devtools-toolbarbutton[checked=true] {
-  border-color: hsla(211,68%,6%,.6);
-  background: linear-gradient(hsla(211,68%,6%,.1), hsla(211,68%,6%,.2));
-  box-shadow: 0 1px 3px hsla(211,68%,6%,.5) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1);
-}
-
-.devtools-toolbarbutton[checked=true] {
-  color: hsl(200,100%,60%) !important;
-}
-
-.devtools-toolbarbutton[checked=true]:hover:active {
-  background-color: hsla(211,68%,6%,.2);
-}
-
-.devtools-option-toolbarbutton {
-  -moz-appearance: none;
-  list-style-image: url("chrome://browser/skin/devtools/option-icon.png");
-  -moz-image-region: rect(0px 16px 16px 0px);
-  background: none;
-  border: none;
-}
-
-.devtools-option-toolbarbutton[open=true] {
-  -moz-image-region: rect(0px 32px 16px 16px);
-}
-
-.devtools-menulist > .menulist-label-box {
-  text-align: center;
-}
-
-.devtools-menulist > .menulist-dropmarker {
-  -moz-appearance: none;
-  list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-  border-width: 0;
-  background-color: transparent;
-}
-
-.devtools-menulist:focus:not([open="true"]):not(.menulist-compact) > .menulist-label-box {
-  color: hsl(210,30%,85%) !important;
-  background-color: transparent;
-}
-
-.devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-button {
-  -moz-appearance: none;
-  color: inherit;
-  border-width: 0;
-  -moz-border-end: 1px solid hsla(210,8%,5%,.45);
-  box-shadow: -1px 0 0 hsla(210,16%,76%,.15) inset, 1px 0 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-toolbarbutton[type=menu-button]:-moz-locale-dir(rtl) > .toolbarbutton-menubutton-button {
-  box-shadow: 1px 0 0 hsla(210,16%,76%,.15) inset, -1px 0 0 hsla(210,16%,76%,.15);
-}
-
-.devtools-toolbarbutton[type=menu-button] {
-  padding: 0 1px;
-  -moz-box-align: stretch;
-}
-
-.devtools-toolbarbutton[type=menu] > .toolbarbutton-menu-dropmarker,
-.devtools-toolbarbutton[type=menu-button] > .toolbarbutton-menubutton-dropmarker {
-  -moz-appearance: none !important;
-  list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-  -moz-box-align: center;
-}
-
-/* Text input */
-
-.devtools-textinput,
-.devtools-searchinput {
-  -moz-appearance: none;
-  margin: 0 3px;
-  min-height: 22px;
-  border: 1px solid hsla(211,68%,6%,.6);
-  box-shadow: inset 0 1px 0 hsla(211,68%,6%,.05), 0 0 0 1px hsla(210,40%,83%,.1);
-  border-radius: 2px;
-  background-color: transparent;
-  background-image: linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35));
-  padding: 3px;
-  transition-property: background-color, border-color, box-shadow;
-  transition-duration: 150ms;
-  transition-timing-function: ease;
-  color: inherit;
-}
-
-.devtools-searchinput {
-  background-image: url(magnifying-glass.png), linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35));
-  background-repeat: no-repeat;
-  background-position: 4px center, top left, top left;
-  padding-top: 0;
-  padding-bottom: 0;
-  -moz-padding-start: 18px;
-  -moz-padding-end: 12px;
-  font-size: inherit;
-}
-
-.devtools-searchinput[focused] {
-  border-color: hsl(200,70%,40%) hsl(200,75%,37%) hsl(200,80%,35%);
-  background-origin: padding-box;
-  background-clip: padding-box;
-  box-shadow: inset 0 0 0 1px hsla(211,68%,6%,.1);
-}
-
-.devtools-searchinput:-moz-locale-dir(rtl) {
-  background-position: calc(100% - 4px) center, top left, top left;
-}
-
-.devtools-searchinput > .textbox-input-box > .textbox-search-icons {
-  display: none;
-}
-
-.devtools-searchinput > .textbox-input-box > .textbox-input::-moz-placeholder {
-  opacity: 1.0;
-  color: hsl(208,10%,66%);
-}
-
-.devtools-no-search-result {
-  box-shadow: inset 0 0 0 1px hsla(0,68%,6%,.35);
-  border-color: hsl(10,70%,40%) hsl(10,75%,37%) hsl(10,80%,35%) !important;
-  background-image: url(magnifying-glass.png), linear-gradient(hsla(1,16%,76%,.45), hsla(1,16%,76%,.75));
-}
-
-/* Close button */
-
-.devtools-closebutton {
-  list-style-image: url("chrome://browser/skin/devtools/close.png");
-  -moz-appearance: none;
-  border: none;
-  margin: 0 4px;
-  min-width: 16px;
-  width: 16px;
-  opacity: 0.6;
-}
-
-.devtools-closebutton > .toolbarbutton-text {
-  display: none;
-}
-
-.devtools-closebutton:hover {
-  opacity: 0.8;
-}
-
-.devtools-closebutton:hover:active {
-  opacity: 1;
-}
-
-/* Splitters */
-
-.devtools-horizontal-splitter {
-  -moz-appearance: none;
-  border-width: 1px 0 0 0;
-  -moz-border-top-colors: black;
-  background-color: transparent;
-  min-height: 3px;
-  height: 3px;
-  margin-bottom: -3px;
-  position: relative;
-}
-
-.devtools-side-splitter {
-  border: 0;
-  -moz-border-start: 1px solid #242b33;
-  min-width: 0;
-  width: 3px;
-  background-color: transparent;
-  -moz-margin-end: -3px;
-  position: relative;
-  cursor: e-resize;
-}
-
-/* In-tools sidebar */
-
-.devtools-toolbox-side-iframe {
-  min-width: 465px;
-}
-
-.devtools-sidebar-tabs {
-  -moz-appearance: none;
-  margin: 0;
-}
-
-.devtools-sidebar-tabs > tabpanels {
-  -moz-appearance: none;
-  padding: 0;
-  border: 0;
-}
-
-.devtools-sidebar-tabs > tabs {
-  -moz-appearance: none;
-  position: static;
-  color: #b6babf;
-  margin-bottom: 0;
-  padding: 0;
-  background-color: #343c45;
-  border-width: 0 0 1px 0;
-  border-color: hsla(210,8%,5%,.6);
-  border-style: solid;
-  overflow: hidden;
-}
-
-.devtools-sidebar-tabs > tabs > .tabs-right,
-.devtools-sidebar-tabs > tabs > .tabs-left {
-  display: none;
-}
-
-.devtools-sidebar-tabs > tabs > tab {
-  -moz-appearance: none;
-  /* We want to match the height of a toolbar with a toolbarbutton
-   * First, we need to replicated the padding of toolbar (4px),
-   * then we need to take the border of the buttons into account (1px).
-   */
-  padding: 5px 3px;
-  -moz-padding-start: 6px;
-  margin: 0;
-  min-width: 78px;
-  /* toolbar's min-height is button min-height (25px) + padding (2 * 4px): 33px.
-   * -1px because the parent element (<tabs>) comes with a 1px bottom border.
-   */
-  min-height: 32px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  text-align: center;
-  color: inherit;
-  -moz-box-flex: 1;
-  border-width: 0;
-  background: transparent;
-  border-radius: 0;
-  position: static;
-  -moz-margin-start: -1px;
-}
-
-.devtools-sidebar-tabs > tabs > tab:-moz-focusring {
-  position: static;
-}
-
-.devtools-sidebar-tabs > tabs > tab:last-of-type {
-  -moz-border-end-width: 0;
-}
-
-.devtools-sidebar-tabs > tabs > tab:first-of-type {
-  -moz-margin-start: -3px;
-}
-
-.devtools-sidebar-tabs > tabs > tab {
-  background-size: calc(100% - 2px) 100%, 1px 100%;
-  background-repeat: no-repeat;
-  background-position: 1px, 0;
-}
-
-.devtools-sidebar-tabs:-moz-locale-dir(rtl) > tabs > tab {
-  background-position: calc(100% - 1px), 100%;
-}
-
-%filter substitution
-%define smallSeparator linear-gradient(transparent 15%, #5a6169 15%, #5a6169 85%, transparent 85%)
-%define solidSeparator linear-gradient(#2d5b7d, #2d5b7d)
-
-.devtools-sidebar-tabs > tabs > tab {
-  background-image: linear-gradient(transparent, transparent), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab:hover {
-  background-image: linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.2)), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab:hover:active {
-  background-image: linear-gradient(hsla(206,37%,4%,.4), hsla(206,37%,4%,.4)), @smallSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab {
-  background-image: linear-gradient(transparent, transparent), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab:hover {
-  background-image: linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.2)), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] + tab:hover:active {
-  background-image: linear-gradient(hsla(206,37%,4%,.4), hsla(206,37%,4%,.4)), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true] {
-  color: #f5f7fa;
-  background-image: linear-gradient(#1d4f73, #1d4f73), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true]:hover {
-  background-image: linear-gradient(#274f64, #274f64), @solidSeparator@;
-}
-
-.devtools-sidebar-tabs > tabs > tab[selected=true]:hover:active {
-  background-image: linear-gradient(#1f3e4f, #1f3e4f), @solidSeparator@;
-}
-
-%include ../../shared/devtools/common.inc.css
--- a/browser/themes/windows/devtools/debugger.css
+++ b/browser/themes/windows/devtools/debugger.css
@@ -384,24 +384,35 @@
   width: 200px;
 }
 
 #resumption-order-panel {
   -moz-margin-start: -8px;
 }
 
 #resume {
-  list-style-image: url("chrome://browser/skin/devtools/debugger-play.png");
+  list-style-image: url("chrome://browser/skin/devtools/debugger-pause.png");
   -moz-image-region: rect(0px,16px,16px,0px);
+  transition: background 0.15s ease-in-out;
 }
 
 #resume[checked] {
+  background: none;
+  list-style-image: url("chrome://browser/skin/devtools/debugger-play.png");
   -moz-image-region: rect(0px,32px,16px,16px);
 }
 
+#resume ~ toolbarbutton {
+  transition: opacity 0.15s ease-in-out;
+}
+
+#resume:not([checked]) ~ toolbarbutton {
+  opacity: 0.5;
+}
+
 #step-over {
   list-style-image: url("chrome://browser/skin/devtools/debugger-step-over.png");
 }
 
 #step-in {
   list-style-image: url("chrome://browser/skin/devtools/debugger-step-in.png");
 }
 
deleted file mode 100644
--- a/browser/themes/windows/devtools/toolbox.css
+++ /dev/null
@@ -1,283 +0,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/. */
-
-#toolbox-controls {
-  margin: 0 4px;
-}
-
-#toolbox-controls > toolbarbutton,
-#toolbox-dock-buttons > toolbarbutton {
-  -moz-appearance: none;
-  border: none;
-  margin: 0 4px;
-  min-width: 16px;
-  width: 16px;
-}
-
-#toolbox-dock-bottom {
-  list-style-image: url("chrome://browser/skin/devtools/dock-bottom.png");
-}
-
-#toolbox-dock-side {
-  list-style-image: url("chrome://browser/skin/devtools/dock-side.png");
-}
-
-#toolbox-dock-window {
-  list-style-image: url("chrome://browser/skin/devtools/undock.png");
-}
-
-#toolbox-dock-window,
-#toolbox-dock-bottom,
-#toolbox-dock-side {
-  opacity: 0.6;
-}
-
-#toolbox-dock-window:hover,
-#toolbox-dock-bottom:hover,
-#toolbox-dock-side:hover {
-  opacity: 1;
-}
-
-#toolbox-controls-separator {
-  width: 3px;
-  background-image: linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0)),
-                    linear-gradient(hsla(206,37%,4%,0), hsla(206,37%,4%,.6), hsla(206,37%,4%,0)),
-                    linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0));
-  background-size: 1px 100%;
-  background-repeat: no-repeat;
-  background-position: 0, 1px, 2px;
-  -moz-margin-start: 8px;
-}
-
-
-/* Command buttons */
-
-.command-button {
-  -moz-appearance: none;
-  border: none;
-  margin: 0;
-  padding: 0 8px;
-  width: 16px;
-}
-
-.command-button:hover {
-  background-color: hsla(206,37%,4%,.2);
-}
-.command-button:hover:active, .command-button[checked=true]:not(:hover) {
-  background-color: hsla(206,37%,4%,.4);
-}
-
-#command-button-paintflashing {
-  list-style-image: url("chrome://browser/skin/devtools/command-paintflashing.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-paintflashing:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-#command-button-paintflashing:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-#command-button-paintflashing[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-responsive {
-  list-style-image: url("chrome://browser/skin/devtools/command-responsivemode.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-responsive:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-#command-button-responsive:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-#command-button-responsive[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-tilt {
-  list-style-image: url("chrome://browser/skin/devtools/command-tilt.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-#command-button-tilt:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-
-#command-button-tilt:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-
-#command-button-tilt[checked=true] {
-  -moz-image-region: rect(0px, 64px, 16px, 48px);
-}
-
-#command-button-scratchpad {
-  list-style-image: url("chrome://browser/skin/devtools/command-scratchpad.png");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-
-#command-button-scratchpad:hover {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-
-#command-button-scratchpad:hover:active {
-  -moz-image-region: rect(0px, 48px, 16px, 32px);
-}
-
-/* Tabs */
-
-.devtools-tabbar {
-  -moz-appearance: none;
-  background-image: url("background-noise-toolbar.png"),
-                    linear-gradient(#303840, #2d3640);
-  border-bottom: 1px solid #060a0d;
-  box-shadow: 0 1px 0 hsla(204,45%,98%,.05) inset,
-              0 -1px 0 hsla(206,37%,4%,.1) inset;
-  min-height: 32px;
-  padding: 0;
-}
-
-#toolbox-tabs {
-  margin: 0;
-}
-
-.devtools-tab {
-  -moz-appearance: none;
-  min-width: 32px;
-  min-height: 32px;
-  max-width: 110px;
-  color: #b6babf;
-  margin: 0;
-  padding: 0;
-  background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1));
-  background-size: 1px 100%;
-  background-repeat: no-repeat;
-  background-position: left, right;
-  border-top: 1px solid #060a0d;
-  border-right: 1px solid hsla(206,37%,4%,.45);
-}
-
-.devtools-tab > image {
-  -moz-margin-end: 0;
-  -moz-margin-start: 4px;
-  opacity: 0.6;
-  width: 16px; /* Prevents collapse during theme switching */
-}
-
-#toolbox-tab-options > image {
-  margin: 0 8px;
-}
-
-.devtools-tab:hover > image {
-  opacity: 0.8;
-}
-
-.devtools-tab:active > image,
-.devtools-tab[selected=true] > image {
-  opacity: 1;
-}
-
-.devtools-tab:hover {
-  background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(206,37%,4%,.1), hsla(206,37%,4%,.2));
-  background-size: 1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: left, right;
-  color: #ced3d9;
-}
-.devtools-tab:hover:active {
-  background-color: hsla(206,37%,4%,.2);
-  color: #f5f7fa;
-}
-
-.devtools-tab[selected=true] {
-  color: #f5f7fa;
-  background-image: radial-gradient(farthest-corner at center top, #9fdfff, hsla(200,100%,70%,.3)),
-                    radial-gradient(farthest-side at center top, hsla(200,100%,70%,.4), hsla(200,100%,70%,0)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.02), hsla(204,45%,98%,.04)),
-                    linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.3));
-  background-size: 100% 1px,
-                   100% 5px,
-                   1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: top right, top left, left, right;
-  box-shadow: 1px -1px 0 hsla(206,37%,4%,.2) inset;
-}
-
-.devtools-tab:not([selected=true]).highlighted {
-  color: #f5f7fa;
-  background-image: radial-gradient(farthest-corner at center top, #c0ff40, hsla(80,100%,63%,.5) 70%, hsla(80,100%,63%,.3) 97%),
-                    radial-gradient(farthest-side at center top, hsla(80,100%,35%,.5), hsla(80,100%,35%,0)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
-                    linear-gradient(hsla(99,100%,14%,.2), hsla(99,100%,14%,.2));
-  background-size: 100% 1px,
-                   100% 5px,
-                   1px 100%,
-                   1px 100%,
-                   100%;
-  background-repeat: no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     no-repeat,
-                     repeat-x;
-  background-position: top right, top left, left, right;
-}
-
-.devtools-tab:not(.highlighted) > .highlighted-icon,
-.devtools-tab[selected=true] > .highlighted-icon,
-.devtools-tab:not([selected=true]).highlighted > .default-icon {
-  visibility: collapse;
-}
-
-.options-vertical-pane {
-  margin: 5px;
-  width: calc(50% - 30px);
-  min-width: 400px;
-  -moz-padding-start: 5px;
-}
-
-.options-vertical-pane > label {
-  padding: 2px 0;
-  font-size: 1.4rem;
-}
-
-.options-groupbox {
-  -moz-margin-start: 15px;
-  padding: 2px;
-}
-
-.options-groupbox > * {
-  padding: 2px;
-}
-
-.options-citation-label {
-  font-size: 1rem !important;
-  /* !important is required otherwise font-size will still be 1.4rem */
-  font-style: italic;
-  padding: 4px 0 0; /* To align it with the checkbox */
-}
-
-.options-citation-label + label {
-  padding: 3px 0 0 !important; /* To align it with the checkbox */
-  font-style: italic;
-}
-
-.hidden-labels-box:not(.visible) > label,
-.hidden-labels-box.visible ~ .hidden-labels-box > label:last-child {
-  display: none;
-}
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -45,16 +45,19 @@ browser.jar:
         skin/classic/browser/livemark-folder.png
         skin/classic/browser/menu-back.png
         skin/classic/browser/menu-forward.png
         skin/classic/browser/menuPanel.png
         skin/classic/browser/menuPanel-customize.png
         skin/classic/browser/menuPanel-exit.png
         skin/classic/browser/menuPanel-help.png
         skin/classic/browser/menuPanel-small.png
+        skin/classic/browser/Metro_Glyph.png                        (Metro_Glyph-aero.png)
+        skin/classic/browser/Metro_Glyph-inverted.png
+        skin/classic/browser/Metro_Glyph-menuPanel.png
         skin/classic/browser/mixed-content-blocked-16.png
         skin/classic/browser/mixed-content-blocked-64.png
         skin/classic/browser/monitor.png
         skin/classic/browser/monitor_16-10.png
         skin/classic/browser/notification-16.png
         skin/classic/browser/notification-64.png
         skin/classic/browser/pageInfo.css
         skin/classic/browser/pageInfo.png
@@ -165,19 +168,19 @@ browser.jar:
         skin/classic/browser/tabview/close.png                      (tabview/close.png)
         skin/classic/browser/tabview/edit-light.png                 (tabview/edit-light.png)
         skin/classic/browser/tabview/grain.png                      (tabview/grain.png)
         skin/classic/browser/tabview/search.png                     (tabview/search.png)
         skin/classic/browser/tabview/stack-expander.png             (tabview/stack-expander.png)
         skin/classic/browser/tabview/tabview.png                    (tabview/tabview.png)
         skin/classic/browser/tabview/tabview-inverted.png           (tabview/tabview-inverted.png)
         skin/classic/browser/tabview/tabview.css                    (tabview/tabview.css)
-*       skin/classic/browser/devtools/common.css                    (devtools/common.css)
-        skin/classic/browser/devtools/dark-theme.css                (../shared/devtools/dark-theme.css)
-        skin/classic/browser/devtools/light-theme.css               (../shared/devtools/light-theme.css)
+*       skin/classic/browser/devtools/common.css                    (../shared/devtools/common.css)
+*       skin/classic/browser/devtools/dark-theme.css                (../shared/devtools/dark-theme.css)
+*       skin/classic/browser/devtools/light-theme.css               (../shared/devtools/light-theme.css)
         skin/classic/browser/devtools/controls.png                  (../shared/devtools/controls.png)
 *       skin/classic/browser/devtools/widgets.css                   (devtools/widgets.css)
         skin/classic/browser/devtools/commandline-icon.png          (devtools/commandline-icon.png)
         skin/classic/browser/devtools/alerticon-warning.png         (devtools/alerticon-warning.png)
         skin/classic/browser/devtools/ruleview.css                  (devtools/ruleview.css)
         skin/classic/browser/devtools/commandline.css               (devtools/commandline.css)
         skin/classic/browser/devtools/command-paintflashing.png     (devtools/command-paintflashing.png)
         skin/classic/browser/devtools/command-responsivemode.png    (devtools/command-responsivemode.png)
@@ -248,17 +251,16 @@ browser.jar:
         skin/classic/browser/devtools/responsive-background.png     (devtools/responsive-background.png)
         skin/classic/browser/devtools/toggle-tools.png              (devtools/toggle-tools.png)
         skin/classic/browser/devtools/dock-bottom.png               (devtools/dock-bottom.png)
         skin/classic/browser/devtools/dock-side.png                 (devtools/dock-side.png)
         skin/classic/browser/devtools/floating-scrollbars.css       (devtools/floating-scrollbars.css)
         skin/classic/browser/devtools/floating-scrollbars-light.css (devtools/floating-scrollbars-light.css)
         skin/classic/browser/devtools/inspector.css                 (devtools/inspector.css)
         skin/classic/browser/devtools/profiler-stopwatch.png        (devtools/profiler-stopwatch.png)
-        skin/classic/browser/devtools/toolbox.css                   (devtools/toolbox.css)
         skin/classic/browser/devtools/tool-options.png              (devtools/tool-options.png)
         skin/classic/browser/devtools/tool-webconsole.png           (devtools/tool-webconsole.png)
         skin/classic/browser/devtools/tool-debugger.png             (devtools/tool-debugger.png)
         skin/classic/browser/devtools/tool-debugger-paused.png      (devtools/tool-debugger-paused.png)
         skin/classic/browser/devtools/tool-inspector.png            (devtools/tool-inspector.png)
         skin/classic/browser/devtools/tool-styleeditor.png          (devtools/tool-styleeditor.png)
         skin/classic/browser/devtools/tool-profiler.png             (devtools/tool-profiler.png)
         skin/classic/browser/devtools/tool-network.png              (devtools/tool-network.png)
@@ -349,16 +351,19 @@ browser.jar:
         skin/classic/aero/browser/livemark-folder.png                (livemark-folder-aero.png)
         skin/classic/aero/browser/menu-back.png                      (menu-back-aero.png)
         skin/classic/aero/browser/menu-forward.png                   (menu-forward-aero.png)
         skin/classic/aero/browser/menuPanel.png                      (menuPanel-aero.png)
         skin/classic/aero/browser/menuPanel-customize.png
         skin/classic/aero/browser/menuPanel-exit.png
         skin/classic/aero/browser/menuPanel-help.png
         skin/classic/aero/browser/menuPanel-small.png                (menuPanel-small-aero.png)
+        skin/classic/aero/browser/Metro_Glyph.png                    (Metro_Glyph-aero.png)
+        skin/classic/aero/browser/Metro_Glyph-inverted.png
+        skin/classic/aero/browser/Metro_Glyph-menuPanel.png
         skin/classic/aero/browser/mixed-content-blocked-16.png
         skin/classic/aero/browser/mixed-content-blocked-64.png
         skin/classic/aero/browser/monitor.png
         skin/classic/aero/browser/monitor_16-10.png
         skin/classic/aero/browser/notification-16.png
         skin/classic/aero/browser/notification-64.png
         skin/classic/aero/browser/pageInfo.css
         skin/classic/aero/browser/pageInfo.png                       (pageInfo-aero.png)
@@ -467,19 +472,19 @@ browser.jar:
         skin/classic/aero/browser/tabview/close.png                  (tabview/close.png)
         skin/classic/aero/browser/tabview/edit-light.png             (tabview/edit-light.png)
         skin/classic/aero/browser/tabview/grain.png                  (tabview/grain.png)
         skin/classic/aero/browser/tabview/search.png                 (tabview/search.png)
         skin/classic/aero/browser/tabview/stack-expander.png         (tabview/stack-expander.png)
         skin/classic/aero/browser/tabview/tabview.png                (tabview/tabview.png)
         skin/classic/aero/browser/tabview/tabview-inverted.png       (tabview/tabview-inverted.png)
         skin/classic/aero/browser/tabview/tabview.css                (tabview/tabview.css)
-*       skin/classic/aero/browser/devtools/common.css                (devtools/common.css)
-        skin/classic/aero/browser/devtools/dark-theme.css            (../shared/devtools/dark-theme.css)
-        skin/classic/aero/browser/devtools/light-theme.css           (../shared/devtools/light-theme.css)
+*       skin/classic/aero/browser/devtools/common.css                (../shared/devtools/common.css)
+*       skin/classic/aero/browser/devtools/dark-theme.css            (../shared/devtools/dark-theme.css)
+*       skin/classic/aero/browser/devtools/light-theme.css           (../shared/devtools/light-theme.css)
         skin/classic/aero/browser/devtools/controls.png              (../shared/devtools/controls.png)
 *       skin/classic/aero/browser/devtools/widgets.css               (devtools/widgets.css)
         skin/classic/aero/browser/devtools/commandline-icon.png      (devtools/commandline-icon.png)
         skin/classic/aero/browser/devtools/command-paintflashing.png  (devtools/command-paintflashing.png)
         skin/classic/aero/browser/devtools/command-responsivemode.png (devtools/command-responsivemode.png)
         skin/classic/aero/browser/devtools/command-scratchpad.png    (devtools/command-scratchpad.png)
         skin/classic/aero/browser/devtools/command-tilt.png          (devtools/command-tilt.png)
         skin/classic/aero/browser/devtools/alerticon-warning.png     (devtools/alerticon-warning.png)
@@ -550,17 +555,16 @@ browser.jar:
         skin/classic/aero/browser/devtools/responsive-background.png (devtools/responsive-background.png)
         skin/classic/aero/browser/devtools/toggle-tools.png          (devtools/toggle-tools.png)
         skin/classic/aero/browser/devtools/dock-bottom.png           (devtools/dock-bottom.png)
         skin/classic/aero/browser/devtools/dock-side.png             (devtools/dock-side.png)
         skin/classic/aero/browser/devtools/floating-scrollbars.css   (devtools/floating-scrollbars.css)
         skin/classic/aero/browser/devtools/floating-scrollbars-light.css (devtools/floating-scrollbars-light.css)
         skin/classic/aero/browser/devtools/inspector.css             (devtools/inspector.css)
         skin/classic/aero/browser/devtools/profiler-stopwatch.png    (devtools/profiler-stopwatch.png)
-        skin/classic/aero/browser/devtools/toolbox.css               (devtools/toolbox.css)
         skin/classic/aero/browser/devtools/tool-options.png          (devtools/tool-options.png)
         skin/classic/aero/browser/devtools/tool-webconsole.png       (devtools/tool-webconsole.png)
         skin/classic/aero/browser/devtools/tool-debugger.png         (devtools/tool-debugger.png)
         skin/classic/aero/browser/devtools/tool-debugger-paused.png  (devtools/tool-debugger-paused.png)
         skin/classic/aero/browser/devtools/tool-inspector.png        (devtools/tool-inspector.png)
         skin/classic/aero/browser/devtools/tool-styleeditor.png      (devtools/tool-styleeditor.png)
         skin/classic/aero/browser/devtools/tool-profiler.png         (devtools/tool-profiler.png)
         skin/classic/aero/browser/devtools/tool-network.png          (devtools/tool-network.png)
index 42b7468025f10ebb5b72c570f92192c333ed9b08..59061ec0aaa38b85dddacb4c31f257c4ad43ecf5
GIT binary patch
literal 25165
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
index 42b7468025f10ebb5b72c570f92192c333ed9b08..31d8d282579eea1379dcb5d918159b5fe43587d6
GIT binary patch
literal 20770
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
GqyGc&>J82S
--- a/build/autoconf/android.m4
+++ b/build/autoconf/android.m4
@@ -157,20 +157,20 @@ case "$target" in
         CPP="$android_toolchain"/bin/"$android_tool_prefix"-cpp
     fi
     LD="$android_toolchain"/bin/"$android_tool_prefix"-ld
     AR="$android_toolchain"/bin/"$android_tool_prefix"-ar
     RANLIB="$android_toolchain"/bin/"$android_tool_prefix"-ranlib
     STRIP="$android_toolchain"/bin/"$android_tool_prefix"-strip
     OBJCOPY="$android_toolchain"/bin/"$android_tool_prefix"-objcopy
 
-    CPPFLAGS="-isystem $android_platform/usr/include $CPPFLAGS"
+    CPPFLAGS="-idirafter $android_platform/usr/include $CPPFLAGS"
     CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS"
     CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions -Wno-psabi $CXXFLAGS"
-    ASFLAGS="-isystem $android_platform/usr/include -DANDROID $ASFLAGS"
+    ASFLAGS="-idirafter $android_platform/usr/include -DANDROID $ASFLAGS"
 
     dnl Add -llog by default, since we use it all over the place.
     dnl Add --allow-shlib-undefined, because libGLESv2 links to an
     dnl undefined symbol (present on the hardware, just not in the
     dnl NDK.)
     LDFLAGS="-mandroid -L$android_platform/usr/lib -Wl,-rpath-link=$android_platform/usr/lib --sysroot=$android_platform -llog -Wl,--allow-shlib-undefined $LDFLAGS"
     dnl prevent cross compile section from using these flags as host flags
     if test -z "$HOST_CPPFLAGS" ; then
@@ -235,17 +235,17 @@ if test "$OS_TARGET" = "Android" -a -z "
             elif test -e "$android_ndk/sources/cxx-stl/gnu-libstdc++/libs/$ANDROID_CPU_ARCH/libstdc++.a"; then
                 # android-ndk-r5c, android-ndk-r6, android-ndk-r6b
                 STLPORT_CPPFLAGS="-I$android_ndk/sources/cxx-stl/gnu-libstdc++/include -I$android_ndk/sources/cxx-stl/gnu-libstdc++/libs/$ANDROID_CPU_ARCH/include"
                 STLPORT_LIBS="-L$android_ndk/sources/cxx-stl/gnu-libstdc++/libs/$ANDROID_CPU_ARCH/ -lstdc++"
             else
                 AC_MSG_ERROR([Couldn't find path to gnu-libstdc++ in the android ndk])
             fi
         else
-            STLPORT_CPPFLAGS="-I$_topsrcdir/build/stlport/stlport -I$android_ndk/sources/cxx-stl/system/include"
+            STLPORT_CPPFLAGS="-isystem $_topsrcdir/build/stlport/stlport -isystem $android_ndk/sources/cxx-stl/system/include"
             STLPORT_LIBS="$_objdir/build/stlport/libstlport_static.a -static-libstdc++"
         fi
     fi
     CXXFLAGS="$CXXFLAGS $STLPORT_CPPFLAGS"
 fi
 AC_SUBST([MOZ_ANDROID_LIBSTDCXX])
 AC_SUBST([STLPORT_LIBS])
 
--- a/build/mobile/robocop/Makefile.in
+++ b/build/mobile/robocop/Makefile.in
@@ -26,17 +26,20 @@ ANDROID_ASSETS_DIR := $(TESTPATH)/assets
   FennecNativeDriver.java \
   FennecNativeElement.java \
   RoboCopException.java \
   RobocopUtils.java \
   PaintedSurface.java \
   $(NULL)
 
 java-harness := $(addprefix $(srcdir)/,$(_JAVA_HARNESS))
-java-tests   := $(wildcard $(TESTPATH)/*.java)
+java-tests   := \
+  $(wildcard $(TESTPATH)/*.java) \
+  $(wildcard $(TESTPATH)/components/*.java) \
+  $(wildcard $(TESTPATH)/helpers/*.java)
 
 # pre-process TestConstants.java.in
 PP_TARGETS         += testconstants
 testconstants-dep  := $(dir-tests)/TestConstants.java
 testconstants      := $(TESTPATH)/TestConstants.java.in
 testconstants_PATH := $(dir-tests)
 
 PP_TARGETS        += manifest
--- a/caps/src/nsScriptSecurityManager.cpp
+++ b/caps/src/nsScriptSecurityManager.cpp
@@ -1845,16 +1845,22 @@ nsScriptSecurityManager::CanCreateWrappe
 {
 // XXX Special case for nsIXPCException ?
     ClassInfoData objClassInfo = ClassInfoData(aClassInfo, nullptr);
     if (objClassInfo.IsDOMClass())
     {
         return NS_OK;
     }
 
+    // We give remote-XUL whitelisted domains a free pass here. See bug 932906.
+    if (!xpc::AllowXBLScope(js::GetContextCompartment(cx)))
+    {
+        return NS_OK;
+    }
+
     //--See if the object advertises a non-default level of access
     //  using nsISecurityCheckedComponent
     nsCOMPtr<nsISecurityCheckedComponent> checkedComponent =
         do_QueryInterface(aObj);
 
     nsXPIDLCString objectSecurityLevel;
     if (checkedComponent)
         checkedComponent->CanCreateWrapper((nsIID *)&aIID, getter_Copies(objectSecurityLevel));
--- a/configure.in
+++ b/configure.in
@@ -46,17 +46,17 @@ dnl ====================================
 _SUBDIR_HOST_CFLAGS="$HOST_CFLAGS"
 _SUBDIR_HOST_CXXFLAGS="$HOST_CXXFLAGS"
 _SUBDIR_HOST_LDFLAGS="$HOST_LDFLAGS"
 _SUBDIR_CONFIG_ARGS="$ac_configure_args"
 
 dnl Set the version number of the libs included with mozilla
 dnl ========================================================
 MOZJPEG=62
-MOZPNG=10606
+MOZPNG=10607
 NSPR_VERSION=4
 NSS_VERSION=3
 
 dnl Set the minimum version of toolkit libs used by mozilla
 dnl ========================================================
 GLIB_VERSION=1.2.0
 PERL_VERSION=5.006
 CAIRO_VERSION=1.10
@@ -3780,16 +3780,18 @@ if test "$MOZ_NATIVE_ZLIB" != 1; then
     MOZ_ZLIB_CFLAGS=
     MOZ_ZLIB_LIBS='$(call EXPAND_LIBNAME_PATH,mozz,'"$MOZ_BUILD_ROOT"'/modules/zlib/src)'
 fi
 
 if test "$MOZ_LINKER" = 1 -a "$MOZ_NATIVE_ZLIB" != 1; then
     AC_MSG_ERROR([Custom dynamic linker requires --with-system-zlib])
 fi
 
+MOZ_PNG_ARM_NEON=
+
 if test -z "$SKIP_LIBRARY_CHECKS"; then
 dnl system BZIP2 Support
 dnl ========================================================
 MOZ_ARG_WITH_STRING(system-bz2,
 [  --with-system-bz2[=PFX]
                           Use system libbz2 [installed at prefix PFX]],
     BZ2_DIR=$withval)
 
@@ -3854,24 +3856,20 @@ CFLAGS=$_SAVE_CFLAGS
 LDFLAGS=$_SAVE_LDFLAGS
 LIBS=$_SAVE_LIBS
 
 if test "${PNG_DIR}" -a -d "${PNG_DIR}" -a "$MOZ_NATIVE_PNG" = 1; then
     MOZ_PNG_CFLAGS="-I${PNG_DIR}/include"
     MOZ_PNG_LIBS="-L${PNG_DIR}/lib ${MOZ_PNG_LIBS}"
 fi
 
-MOZ_PNG_ARM_NEON=
-if test "$MOZ_NATIVE_PNG" != 1 -a "$CPU_ARCH" = "arm" ; then
-    MOZ_PNG_ARM_NEON=1
-fi
+fi # SKIP_LIBRARY_CHECKS
+
 AC_SUBST(MOZ_PNG_ARM_NEON)
 
-fi # SKIP_LIBRARY_CHECKS
-
 dnl system HunSpell Support
 dnl ========================================================
 MOZ_ARG_ENABLE_BOOL(system-hunspell,
 [  --enable-system-hunspell
                           Use system hunspell (located with pkgconfig)],
     MOZ_NATIVE_HUNSPELL=1 )
 
 if test -n "$MOZ_NATIVE_HUNSPELL"; then
@@ -9122,16 +9120,19 @@ if test -z "$MOZ_NATIVE_NSPR"; then
       export CPPFLAGS="-include $_topsrcdir/mozglue/linker/dladdr.h $CPPFLAGS"
     fi
     export LDFLAGS="$LDFLAGS $NSPR_LDFLAGS"
     export CFLAGS="$CFLAGS $MOZ_FRAMEPTR_FLAGS"
 
     AC_OUTPUT_SUBDIRS(nsprpub)
 
     # .. and restore them
+    unset CFLAGS
+    unset CPPFLAGS
+    unset LDFLAGS
     CFLAGS="$_SAVE_CFLAGS"
     CPPFLAGS="$_SAVE_CPPFLAGS"
     LDFLAGS="$_SAVE_LDFLAGS"
 
     ac_configure_args="$_SUBDIR_CONFIG_ARGS"
 fi
 
 dnl ========================================================
--- a/content/base/public/nsViewportInfo.h
+++ b/content/base/public/nsViewportInfo.h
@@ -9,17 +9,17 @@
 #include "mozilla/Attributes.h"
 #include "Units.h"
 
 /**
  * Default values for the nsViewportInfo class.
  */
 static const mozilla::LayoutDeviceToScreenScale kViewportMinScale(0.0f);
 static const mozilla::LayoutDeviceToScreenScale kViewportMaxScale(10.0f);
-static const mozilla::CSSIntSize kViewportMinSize(200, 223);
+static const mozilla::CSSIntSize kViewportMinSize(200, 40);
 static const mozilla::CSSIntSize kViewportMaxSize(10000, 10000);
 static const int32_t  kViewportDefaultScreenWidth = 980;
 
 /**
  * Information retrieved from the <meta name="viewport"> tag. See
  * nsContentUtils::GetViewportInfo for more information on this functionality.
  */
 class MOZ_STACK_CLASS nsViewportInfo
--- a/content/base/src/nsDOMBlobBuilder.cpp
+++ b/content/base/src/nsDOMBlobBuilder.cpp
@@ -252,30 +252,35 @@ nsDOMMultipartFile::ParseBlobArrayArgume
         if (subBlobs) {
           blobSet.AppendBlobs(*subBlobs);
         } else {
           blobSet.AppendBlob(blob);
         }
         continue;
       }
       if (JS_IsArrayBufferViewObject(obj)) {
-        blobSet.AppendVoidPtr(JS_GetArrayBufferViewData(obj),
-                              JS_GetArrayBufferViewByteLength(obj));
+        nsresult rv = blobSet.AppendVoidPtr(
+                                          JS_GetArrayBufferViewData(obj),
+                                          JS_GetArrayBufferViewByteLength(obj));
+        NS_ENSURE_SUCCESS(rv, rv);
         continue;
       }
       if (JS_IsArrayBufferObject(obj)) {
-        blobSet.AppendArrayBuffer(obj);
+        nsresult rv = blobSet.AppendArrayBuffer(obj);
+        NS_ENSURE_SUCCESS(rv, rv);
         continue;
       }
     }
 
     // coerce it to a string
     JSString* str = JS::ToString(aCx, element);
     NS_ENSURE_TRUE(str, NS_ERROR_TYPE_ERR);
-    blobSet.AppendString(str, aNativeEOL, aCx);
+
+    nsresult rv = blobSet.AppendString(str, aNativeEOL, aCx);
+    NS_ENSURE_SUCCESS(rv, rv);
   }
 
   mBlobs = blobSet.GetBlobs();
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDOMMultipartFile::GetMozFullPathInternal(nsAString &aFilename)
--- a/content/base/src/nsDOMFile.cpp
+++ b/content/base/src/nsDOMFile.cpp
@@ -643,19 +643,17 @@ nsDOMMemoryFile::DataOwner::sDataOwners;
 nsDOMMemoryFile::DataOwner::sMemoryReporterRegistered;
 
 NS_MEMORY_REPORTER_MALLOC_SIZEOF_FUN(DOMMemoryFileDataOwnerMallocSizeOf)
 
 class nsDOMMemoryFileDataOwnerMemoryReporter MOZ_FINAL
   : public MemoryMultiReporter
 {
 public:
-  nsDOMMemoryFileDataOwnerMemoryReporter()
-    : MemoryMultiReporter("dom-memory-file-data-owner")
-  {}
+  nsDOMMemoryFileDataOwnerMemoryReporter() {}
 
   NS_IMETHOD CollectReports(nsIMemoryReporterCallback *aCallback,
                             nsISupports *aClosure)
   {
     typedef nsDOMMemoryFile::DataOwner DataOwner;
 
     StaticMutexAutoLock lock(DataOwner::sDataOwnerMutex);
 
--- a/content/base/src/nsFrameMessageManager.cpp
+++ b/content/base/src/nsFrameMessageManager.cpp
@@ -1128,19 +1128,17 @@ struct MessageManagerReferentCount
 } // anonymous namespace
 
 namespace mozilla {
 namespace dom {
 
 class MessageManagerReporter MOZ_FINAL : public MemoryMultiReporter
 {
 public:
-  MessageManagerReporter()
-    : MemoryMultiReporter("message-manager")
-  {}
+  MessageManagerReporter() {}
 
   NS_IMETHOD CollectReports(nsIMemoryReporterCallback* aCallback,
                             nsISupports* aData);
 
   static const size_t kSuspectReferentCount = 300;
 protected:
   void CountReferents(nsFrameMessageManager* aMessageManager,
                       MessageManagerReferentCount* aReferentCount);
--- a/content/base/test/test_meta_viewport3.html
+++ b/content/base/test/test_meta_viewport3.html
@@ -15,40 +15,40 @@
 
     SimpleTest.waitForExplicitFinish();
 
     let tests = [];
 
     tests.push(function test1() {
       SpecialPowers.pushPrefEnv(scaleRatio(1.0),
         function() {
-          let info = getViewportInfo(800, 480);
+          let info = getViewportInfo(800, 80);
           is(info.defaultZoom, 2.5,   "initial zoom fits the displayWidth");
           is(info.width,       320,   "width is set explicitly");
-          is(info.height,      223,   "height is at the absolute minimum");
+          is(info.height,      40,   "height is at the absolute minimum");
           is(info.autoSize,    false, "width=device-width enables autoSize");
           is(info.allowZoom,   true,  "zooming is enabled by default");
 
           info = getViewportInfo(480, 800);
           is(info.defaultZoom, 1.5,   "initial zoom fits the new displayWidth");
           is(info.width,       320,   "explicit width is unchanged");
           is(info.height,      533,   "height changes proportional to displayHeight");
 
           nextTest();
         });
     });
 
     tests.push(function test2() {
       SpecialPowers.pushPrefEnv(scaleRatio(1.5),
         function() {
           // With an explicit width in CSS px, the scaleRatio has no effect.
-          let info = getViewportInfo(800, 480);
+          let info = getViewportInfo(800, 80);
           is(info.defaultZoom, 2.5,   "initial zoom still fits the displayWidth");
           is(info.width,       320,   "width is still set explicitly");
-          is(info.height,      223,   "height is still minimum height");
+          is(info.height,      40,   "height is still minimum height");
 
           nextTest();
         });
     });
 
     function getViewportInfo(aDisplayWidth, aDisplayHeight) {
       let defaultZoom = {}, allowZoom = {}, minZoom = {}, maxZoom = {},
           width = {}, height = {}, autoSize = {};
--- a/content/canvas/src/CanvasRenderingContext2D.cpp
+++ b/content/canvas/src/CanvasRenderingContext2D.cpp
@@ -3994,17 +3994,20 @@ CanvasRenderingContext2D::GetCanvasLayer
   }
 
   mTarget->Flush();
 
   if (!mResetLayer && aOldLayer) {
     CanvasRenderingContext2DUserData* userData =
       static_cast<CanvasRenderingContext2DUserData*>(
         aOldLayer->GetUserData(&g2DContextLayerUserData));
-    if (userData && userData->IsForContext(this)) {
+
+    CanvasLayer::Data data;
+    data.mGLContext = static_cast<GLContext*>(mTarget->GetGLContext());
+    if (userData && userData->IsForContext(this) && aOldLayer->IsDataValid(data)) {
       nsRefPtr<CanvasLayer> ret = aOldLayer;
       return ret.forget();
     }
   }
 
   nsRefPtr<CanvasLayer> canvasLayer = aManager->CreateCanvasLayer();
   if (!canvasLayer) {
     NS_WARNING("CreateCanvasLayer returned null!");
--- a/content/canvas/src/WebGLContextReporter.cpp
+++ b/content/canvas/src/WebGLContextReporter.cpp
@@ -94,17 +94,16 @@ WebGLMemoryTracker* WebGLMemoryTracker::
     if (!sUniqueInstance) {
         sUniqueInstance = new WebGLMemoryTracker;
         sUniqueInstance->InitMemoryReporter();
     }
     return sUniqueInstance;
 }
 
 WebGLMemoryTracker::WebGLMemoryTracker()
-    : MemoryMultiReporter("webgl")
 {
 }
 
 void
 WebGLMemoryTracker::InitMemoryReporter()
 {
     RegisterWeakMemoryReporter(this);
 }
--- a/content/events/src/nsEventListenerManager.cpp
+++ b/content/events/src/nsEventListenerManager.cpp
@@ -754,17 +754,17 @@ nsEventListenerManager::RemoveEventHandl
 
   uint32_t eventType = nsContentUtils::GetEventId(aName);
   nsListenerStruct* ls = FindEventHandler(eventType, aName, aTypeString);
 
   if (ls) {
     mListeners.RemoveElementAt(uint32_t(ls - &mListeners.ElementAt(0)));
     mNoListenerForEvent = NS_EVENT_NULL;
     mNoListenerForEventAtom = nullptr;
-    if (mTarget) {
+    if (mTarget && aName) {
       mTarget->EventListenerRemoved(aName);
     }
   }
 }
 
 nsresult
 nsEventListenerManager::CompileEventHandlerInternal(nsListenerStruct *aListenerStruct,
                                                     nsCxPusher& aPusher,
--- a/content/html/content/test/forms/mochitest.ini
+++ b/content/html/content/test/forms/mochitest.ini
@@ -19,20 +19,21 @@ support-files =
 [test_input_color_picker_initial.html]
 [test_input_color_picker_popup.html]
 [test_input_color_picker_update.html]
 [test_input_email.html]
 [test_input_event.html]
 [test_input_file_picker.html]
 [test_input_list_attribute.html]
 [test_input_number_key_events.html]
-# Spin buttons are hidden on Firefox OS and Firefox for Android:
-#skip-if = toolkit == "gonk" || os == 'android'
-#[test_input_number_mouse_events.html]
-#[test_input_number_rounding.html]
+[test_input_number_mouse_events.html]
+# Not run on Firefox OS and Firefox for Android where the spin buttons are hidden:
+skip-if = os == "android" || appname == "b2g"
+[test_input_number_rounding.html]
+skip-if = os == "android"
 [test_input_range_attr_order.html]
 [test_input_range_key_events.html]
 [test_input_range_mouse_and_touch_events.html]
 [test_input_range_rounding.html]
 [test_input_sanitization.html]
 [test_input_textarea_set_value_no_scroll.html]
 [test_input_typing_sanitization.html]
 [test_input_untrusted_key_events.html]
--- a/content/media/MediaDecoder.cpp
+++ b/content/media/MediaDecoder.cpp
@@ -1853,17 +1853,16 @@ MediaMemoryTracker::CollectReports(nsIHa
 MediaDecoderOwner*
 MediaDecoder::GetOwner()
 {
   MOZ_ASSERT(NS_IsMainThread());
   return mOwner;
 }
 
 MediaMemoryTracker::MediaMemoryTracker()
-  : MemoryMultiReporter("media")
 {
 }
 
 void
 MediaMemoryTracker::InitMemoryReporter()
 {
   RegisterWeakMemoryReporter(this);
 }
--- a/content/media/plugins/moz.build
+++ b/content/media/plugins/moz.build
@@ -7,17 +7,17 @@
 EXPORTS += [
     'MediaPluginDecoder.h',
     'MediaPluginHost.h',
     'MediaPluginReader.h',
     'MediaResourceServer.h',
     'MPAPI.h',
 ]
 
-SOURCES += [
+UNIFIED_SOURCES += [
     'MediaPluginDecoder.cpp',
     'MediaPluginHost.cpp',
     'MediaPluginReader.cpp',
     'MediaResourceServer.cpp',
 ]
 
 LOCAL_INCLUDES += [
     '/content/base/src',
--- a/content/xul/document/src/XULDocument.cpp
+++ b/content/xul/document/src/XULDocument.cpp
@@ -212,16 +212,19 @@ XULDocument::XULDocument(void)
 XULDocument::~XULDocument()
 {
     NS_ASSERTION(mNextSrcLoadWaiter == nullptr,
         "unreferenced document still waiting for script source to load?");
 
     // In case we failed somewhere early on and the forward observer
     // decls never got resolved.
     mForwardReferences.Clear();
+    // Likewise for any references we have to IDs where we might
+    // look for persisted data:
+    mPersistenceIds.Clear();
 
     // Destroy our broadcaster map.
     if (mBroadcasterMap) {
         PL_DHashTableDestroy(mBroadcasterMap);
     }
 
     if (mLocalStore) {
         nsCOMPtr<nsIRDFRemoteDataSource> remote =
@@ -2175,16 +2178,21 @@ XULDocument::ApplyPersistentAttributes()
     // model.
     if (!mLocalStore)
         return NS_OK;
 
     mApplyingPersistedAttrs = true;
     ApplyPersistentAttributesInternal();
     mApplyingPersistedAttrs = false;
 
+    // After we've applied persistence once, we should only reapply
+    // it to nodes created by overlays
+    mRestrictPersistence = true;
+    mPersistenceIds.Clear();
+
     return NS_OK;
 }
 
 
 nsresult 
 XULDocument::ApplyPersistentAttributesInternal()
 {
     nsCOMArray<nsIContent> elements;
@@ -2219,16 +2227,19 @@ XULDocument::ApplyPersistentAttributesIn
             continue;
 
         nsAutoString id;
         nsXULContentUtils::MakeElementID(this, nsDependentCString(uri), id);
 
         if (id.IsEmpty())
             continue;
 
+        if (mRestrictPersistence && !mPersistenceIds.Contains(id))
+            continue;
+
         // This will clear the array if there are no elements.
         GetElementsForID(id, elements);
 
         if (!elements.Count())
             continue;
 
         ApplyPersistentAttributesToElements(resource, elements);
     }
@@ -2971,16 +2982,25 @@ XULDocument::ResumeWalk()
                                                     getter_AddRefs(child),
                                                     false);
                     if (NS_FAILED(rv)) return rv;
 
                     // ...and append it to the content model.
                     rv = element->AppendChildTo(child, false);
                     if (NS_FAILED(rv)) return rv;
 
+                    // If we're only restoring persisted things on
+                    // some elements, store the ID here to do that.
+                    if (mRestrictPersistence) {
+                        nsIAtom* id = child->GetID();
+                        if (id) {
+                            mPersistenceIds.PutEntry(nsDependentAtomString(id));
+                        }
+                    }
+
                     // do pre-order document-level hookup, but only if
                     // we're in the master document. For an overlay,
                     // this will happen when the overlay is
                     // successfully resolved.
                     if (mState == eState_Master)
                         AddElementToDocumentPre(child);
                 }
                 else {
--- a/content/xul/document/src/XULDocument.h
+++ b/content/xul/document/src/XULDocument.h
@@ -321,16 +321,22 @@ protected:
      * stylesheet finishes loading while the PD walk is still in
      * progress (waiting for an overlay to finish loading).
      * mStillWalking prevents DoneLoading (and StartLayout) from being
      * called in this situation.
      */
     bool                       mStillWalking;
 
     /**
+     * These two values control where persistent attributes get applied.
+     */
+    bool                           mRestrictPersistence;
+    nsTHashtable<nsStringHashKey>  mPersistenceIds;
+
+    /**
      * An array of style sheets, that will be added (preserving order) to the
      * document after all of them are loaded (in DoneWalking).
      */
     nsTArray<nsRefPtr<nsCSSStyleSheet> > mOverlaySheets;
 
     nsCOMPtr<nsIDOMXULCommandDispatcher>     mCommandDispatcher; // [OWNER] of the focus tracker
 
     // Maintains the template builders that have been attached to
--- a/content/xul/document/test/chrome.ini
+++ b/content/xul/document/test/chrome.ini
@@ -13,9 +13,10 @@ support-files =
 [test_bug403868.xul]
 [test_bug414907.xul]
 [test_bug418216.xul]
 [test_bug445177.xul]
 [test_bug449457.xul]
 [test_bug468176.xul]
 [test_bug497875.xul]
 [test_bug583948.xul]
+[test_bug640158_overlay_persist.xul]
 [test_bug757137.xul]
new file mode 100644
--- /dev/null
+++ b/content/xul/document/test/overlay_640158.xul
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<overlay id="overlay1"
+         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+  <window id="rootwin">
+    <box id="bar" testattr="original"/>
+  </window>
+</overlay>
+
new file mode 100644
--- /dev/null
+++ b/content/xul/document/test/test_bug640158_overlay_persist.xul
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=640158
+-->
+<window title="Mozilla Bug 640158" id="rootwin"
+  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
+
+  <!-- test results are displayed in the html:body -->
+  <body xmlns="http://www.w3.org/1999/xhtml">
+  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=640158"
+     target="_blank">Mozilla Bug 640158</a>
+  </body>
+
+  <!-- test code goes here -->
+  <script type="application/javascript"><![CDATA[
+
+  SimpleTest.waitForExplicitFinish();
+  window.onload = function onload() {
+    is($("foo").getAttribute("testattr"), "original", "Attribute should be in original state");
+    // Change and persist another value:
+    $("foo").setAttribute("testattr", "changed");
+    document.persist("foo", "testattr");
+    $("foo").setAttribute("testattr", "original");
+
+    // Hacky times: check that items which are overlaid do get persisted into correctly,
+    // by first creating an extra element and persisting the value before loading an
+    // overlay that changes that value - the persisted value should be reinstated.
+    let root = document.documentElement;
+    let bar = document.createElement("box");
+    bar.id = "bar";
+    bar.setAttribute("testattr", "changed"); // The overlay we load has 'original'
+    root.appendChild(bar);
+    document.persist("bar", "testattr");
+    document.loadOverlay(location.href.replace(/[^\\\/]*.xul/, "overlay_bug640158.xul"), function() {
+      is($("foo").getAttribute("testattr"), "original",
+         "Non-overlaid attribute should still be in original state");
+      is($("bar").getAttribute("testattr"), "changed",
+         "Overlaid attribute should have been changed.");
+      SimpleTest.finish();
+    });
+  }
+
+  ]]></script>
+
+  <box id="foo" testattr="original"/>
+
+</window>
+
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -4206,19 +4206,16 @@ nsDocShell::LoadURI(const PRUnichar * aU
         // Call the fixup object.  This will clobber the rv from NS_NewURI
         // above, but that's fine with us.  Note that we need to do this even
         // if NS_NewURI returned a URI, because fixup handles nested URIs, etc
         // (things like view-source:mozilla.org for example).
         uint32_t fixupFlags = 0;
         if (aLoadFlags & LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP) {
           fixupFlags |= nsIURIFixup::FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP;
         }
-        if (aLoadFlags & LOAD_FLAGS_URI_IS_UTF8) {
-          fixupFlags |= nsIURIFixup::FIXUP_FLAG_USE_UTF8;
-        }
         nsCOMPtr<nsIInputStream> fixupStream;
         rv = sURIFixup->CreateFixupURI(uriString, fixupFlags,
                                        getter_AddRefs(fixupStream),
                                        getter_AddRefs(uri));
         if (fixupStream) {
             // CreateFixupURI only returns a post data stream if it succeeded
             // and changed the URI, in which case we should override the
             // passed-in post data.
--- a/docshell/base/nsIURIFixup.idl
+++ b/docshell/base/nsIURIFixup.idl
@@ -27,25 +27,22 @@ interface nsIURIFixup : nsISupports
 
     /**
      * Tell the fixup to make an alternate URI from the input URI, for example
      * to turn foo into www.foo.com.
      */
     const unsigned long FIXUP_FLAGS_MAKE_ALTERNATE_URI = 2;
 
     /**
-     * Use UTF-8 to encode the URI instead of platform charset.
-     */
-    const unsigned long FIXUP_FLAG_USE_UTF8 = 4;
-
-    /**
      * Fix common scheme typos.
      */
     const unsigned long FIXUP_FLAG_FIX_SCHEME_TYPOS = 8;
 
+    /* Note that flag 4 is available. */
+
     /**
      * Converts an internal URI (e.g. a wyciwyg URI) into one which we can
      * expose to the user, for example on the URL bar.
      *
      * @param  aURI       The URI to be converted
      * @return nsIURI     The converted, exposable URI
      * @throws NS_ERROR_MALFORMED_URI when the exposable portion of aURI is malformed
      * @throws NS_ERROR_UNKNOWN_PROTOCOL when we can't get a protocol handler service
--- a/docshell/base/nsIWebNavigation.idl
+++ b/docshell/base/nsIWebNavigation.idl
@@ -180,27 +180,24 @@ interface nsIWebNavigation : nsISupports
   const unsigned long LOAD_FLAGS_FORCE_ALLOW_COOKIES = 0x20000;
 
   /**
    * Prevent the owner principal from being inherited for this load.
    */
   const unsigned long LOAD_FLAGS_DISALLOW_INHERIT_OWNER = 0x40000;
 
   /**
-   * Assume the URI is encoded in UTF-8.
-   */
-  const unsigned long LOAD_FLAGS_URI_IS_UTF8 = 0x80000;
-
-  /**
    * This flag specifies that the URI may be submitted to a third-party
    * server for correction. This should only be applied to non-sensitive
    * URIs entered by users.  This flag must not be passed to Reload.
    */
   const unsigned long LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP = 0x100000;
 
+  /* Note that flag 0x80000 is available. */
+
   /**
    * Loads a given URI.  This will give priority to loading the requested URI
    * in the object implementing	this interface.  If it can't be loaded here
    * however, the URI dispatcher will go through its normal process of content
    * loading.
    *
    * @param aURI
    *        The URI string to load.  For HTTP and FTP URLs and possibly others,
--- a/dom/base/DOMRequest.cpp
+++ b/dom/base/DOMRequest.cpp
@@ -10,17 +10,17 @@
 #include "nsCxPusher.h"
 #include "nsThreadUtils.h"
 #include "DOMCursor.h"
 #include "nsIDOMEvent.h"
 
 using mozilla::dom::DOMRequest;
 using mozilla::dom::DOMRequestService;
 using mozilla::dom::DOMCursor;
-using mozilla::AutoPushJSContext;
+using mozilla::AutoSafeJSContext;
 
 DOMRequest::DOMRequest(nsIDOMWindow* aWindow)
   : mResult(JSVAL_VOID)
   , mDone(false)
 {
   SetIsDOMBinding();
   Init(aWindow);
 }
@@ -252,44 +252,34 @@ class FireSuccessAsyncTask : public nsRu
     mReq(aRequest),
     mResult(aResult),
     mIsSetup(false)
   {
   }
 
 public:
 
-  nsresult
+  void
   Setup()
   {
-    nsresult rv;
-    nsIScriptContext* sc = mReq->GetContextForEventHandlers(&rv);
-    if (!NS_SUCCEEDED(rv)) {
-      return rv;
-    }
-    AutoPushJSContext cx(sc->GetNativeContext());
-    if (!cx) {
-      return NS_ERROR_FAILURE;
-    }
+    AutoSafeJSContext cx;
     JS_AddValueRoot(cx, &mResult);
     mIsSetup = true;
-    return NS_OK;
   }
 
   // Due to the fact that initialization can fail during shutdown (since we
   // can't fetch a js context), set up an initiatization function to make sure
   // we can return the failure appropriately
   static nsresult
   Dispatch(DOMRequest* aRequest,
            const JS::Value& aResult)
   {
     NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
     nsRefPtr<FireSuccessAsyncTask> asyncTask = new FireSuccessAsyncTask(aRequest, aResult);
-    nsresult rv = asyncTask->Setup();
-    NS_ENSURE_SUCCESS(rv, rv);
+    asyncTask->Setup();
     if (NS_FAILED(NS_DispatchToMainThread(asyncTask))) {
       NS_WARNING("Failed to dispatch to main thread!");
       return NS_ERROR_FAILURE;
     }
     return NS_OK;
   }
 
   NS_IMETHODIMP
@@ -301,22 +291,18 @@ public:
 
   ~FireSuccessAsyncTask()
   {
     NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
     if(!mIsSetup) {
       // If we never set up, no reason to unroot
       return;
     }
-    nsresult rv;
-    nsIScriptContext* sc = mReq->GetContextForEventHandlers(&rv);
-    MOZ_ASSERT(NS_SUCCEEDED(rv));
-    AutoPushJSContext cx(sc->GetNativeContext());
-    MOZ_ASSERT(cx);
 
+    AutoSafeJSContext cx;
     JS_RemoveValueRoot(cx, &mResult);
   }
 private:
   nsRefPtr<DOMRequest> mReq;
   JS::Value mResult;
   bool mIsSetup;
 };
 
--- a/dom/base/ObjectWrapper.jsm
+++ b/dom/base/ObjectWrapper.jsm
@@ -7,44 +7,63 @@
 const Cu = Components.utils;
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
 this.EXPORTED_SYMBOLS = ["ObjectWrapper"];
 
 // Makes sure that we expose correctly chrome JS objects to content.
 
+const TypedArrayThings = [
+  "Int8Array",
+  "Uint8Array",
+  "Uint8ClampedArray",
+  "Int16Array",
+  "Uint16Array",
+  "Int32Array",
+  "Uint32Array",
+  "Float32Array",
+  "Float64Array",
+];
+
 this.ObjectWrapper = {
   getObjectKind: function objWrapper_getObjectKind(aObject) {
     if (aObject === null || aObject === undefined) {
       return "primitive";
     } else if (Array.isArray(aObject)) {
       return "array";
     } else if (aObject instanceof Ci.nsIDOMFile) {
       return "file";
     } else if (aObject instanceof Ci.nsIDOMBlob) {
       return "blob";
     } else if (aObject instanceof Date) {
       return "date";
+    } else if (TypedArrayThings.indexOf(aObject.constructor.name) !== -1) {
+      return aObject.constructor.name;
     } else if (typeof aObject == "object") {
       return "object";
     } else {
       return "primitive";
     }
   },
 
   wrap: function objWrapper_wrap(aObject, aCtxt) {
     // First check wich kind of object we have.
     let kind = this.getObjectKind(aObject);
     if (kind == "array") {
       let res = Cu.createArrayIn(aCtxt);
       aObject.forEach(function(aObj) {
         res.push(this.wrap(aObj, aCtxt));
       }, this);
       return res;
+    } else if (TypedArrayThings.indexOf(kind) !== -1) {
+      // This is slow, because from the perspective of the constructor in aCtxt
+      // aObject is a CCW, and it gets the indexed properties one by one rather
+      // instead of realizing that this is already a typed array thing.
+      return new aCtxt[kind](aObject);
     } else if (kind == "file") {
       return new aCtxt.File(aObject,
                             { name: aObject.name,
                               type: aObject.type });
     } else if (kind == "blob") {
       return new aCtxt.Blob([aObject], { type: aObject.type });
     } else if (kind == "date") {
       return Cu.createDateIn(aCtxt, aObject.getTime());
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -3738,17 +3738,17 @@ for (uint32_t i = 0; i < length; ++i) {
     if type.isDictionary():
         # There are no nullable dictionaries
         assert not type.nullable()
         # All optional dictionaries always have default values, so we
         # should be able to assume not isOptional here.
         assert not isOptional
 
         typeName = CGDictionary.makeDictionaryName(type.inner)
-        if not isMember:
+        if not isMember and not isCallbackReturnValue:
             # Since we're not a member and not nullable or optional, no one will
             # see our real type, so we can do the fast version of the dictionary
             # that doesn't pre-initialize members.
             typeName = "dictionary_detail::Fast" + typeName
 
         declType = CGGeneric(typeName)
 
         # We do manual default value handling here, because we
@@ -3778,17 +3778,21 @@ for (uint32_t i = 0; i < length; ++i) {
 
         template += ('if (!${declName}.Init(cx, %s, "%s")) {\n'
                      "%s\n"
                      "}" % (val, firstCap(sourceDescription),
                             exceptionCodeIndented.define()))
 
         # Dictionary arguments that might contain traceable things need to get
         # traced
-        if not isMember and typeNeedsRooting(type):
+        if not isMember and isCallbackReturnValue:
+            # Go ahead and just convert directly into our actual return value
+            declType = CGWrapper(declType, post="&")
+            declArgs = "retval"
+        elif not isMember and typeNeedsRooting(type):
             declType = CGTemplatedType("RootedDictionary", declType);
             declArgs = "cx"
         else:
             declArgs = None
 
         return JSToNativeConversionInfo(template, declType=declType,
                                         declArgs=declArgs)
 
@@ -9703,36 +9707,53 @@ class CGNativeMember(ClassMethod):
                 returnCode = "retval.SwapElements(${declName});"
             return "void", "", returnCode
         if type.isDate():
             result = CGGeneric("Date")
             if type.nullable():
                 result = CGTemplatedType("Nullable", result)
             return (result.define(), "%s()" % result.define(),
                     "return ${declName};")
+        if type.isDictionary():
+            if isMember:
+                # Only the first member of the tuple matters here, but return
+                # bogus values for the others in case someone decides to use
+                # them.
+                return CGDictionary.makeDictionaryName(type.inner), None, None
+            # In this case we convert directly into our outparam to start with
+            return "void", "", ""
+
         raise TypeError("Don't know how to declare return value for %s" %
                         type)
 
     def getArgs(self, returnType, argList):
         args = [self.getArg(arg) for arg in argList]
         # Now the outparams
         if returnType.isDOMString():
             args.append(Argument("nsString&", "retval"))
-        if returnType.isByteString():
+        elif returnType.isByteString():
             args.append(Argument("nsCString&", "retval"))
         elif returnType.isSequence():
             nullable = returnType.nullable()
             if nullable:
                 returnType = returnType.inner
             # And now the actual underlying type
             elementDecl = self.getReturnType(returnType.inner, True)
             type = CGTemplatedType("nsTArray", CGGeneric(elementDecl))
             if nullable:
                 type = CGTemplatedType("Nullable", type)
             args.append(Argument("%s&" % type.define(), "retval"))
+        elif returnType.isDictionary():
+            nullable = returnType.nullable()
+            if nullable:
+                returnType = returnType.inner
+            dictType = CGGeneric(CGDictionary.makeDictionaryName(returnType.inner))
+            if nullable:
+                dictType = CGTemplatedType("Nullable", dictType)
+            args.append(Argument("%s&" % dictType.define(), "retval"))
         # And the ErrorResult
         if not 'infallible' in self.extendedAttrs:
             # Use aRv so it won't conflict with local vars named "rv"
             args.append(Argument("ErrorResult&", "aRv"))
         # The legacycaller thisval
         if self.member.isMethod() and self.member.isLegacycaller():
             # If it has an identifier, we can't deal with it yet
             assert self.member.isIdentifierLess()
--- a/dom/bindings/parser/WebIDL.py
+++ b/dom/bindings/parser/WebIDL.py
@@ -2027,17 +2027,17 @@ class IDLWrapperType(IDLType):
     def isSerializable(self):
         if self.isInterface():
             if self.inner.isExternal():
                 return False
             return any(m.isMethod() and m.isJsonifier() for m in self.inner.members)
         elif self.isEnum():
             return True
         elif self.isDictionary():
-            return all(m.isSerializable() for m in self.inner.members)
+            return all(m.type.isSerializable() for m in self.inner.members)
         else:
             raise WebIDLError("IDLWrapperType wraps type %s that we don't know if "
                               "is serializable" % type(self.inner), [self.location])
 
     def resolveType(self, parentScope):
         assert isinstance(parentScope, IDLScope)
         self.inner.resolve(parentScope)
 
--- a/dom/bindings/test/TestBindingHeader.h
+++ b/dom/bindings/test/TestBindingHeader.h
@@ -336,16 +336,17 @@ public:
   void PassOptionalNonNullCallbackInterface(const Optional<OwningNonNull<TestCallbackInterface> >&);
   void PassOptionalCallbackInterfaceWithDefault(TestCallbackInterface*);
 
   already_AddRefed<IndirectlyImplementedInterface> ReceiveConsequentialInterface();
   void PassConsequentialInterface(IndirectlyImplementedInterface&);
 
   // Sequence types
   void GetReadonlySequence(nsTArray<int32_t>&);
+  void GetReadonlySequenceOfDictionaries(JSContext*, nsTArray<Dict>&);
   void ReceiveSequence(nsTArray<int32_t>&);
   void ReceiveNullableSequence(Nullable< nsTArray<int32_t> >&);
   void ReceiveSequenceOfNullableInts(nsTArray< Nullable<int32_t> >&);
   void ReceiveNullableSequenceOfNullableInts(Nullable< nsTArray< Nullable<int32_t> > >&);
   void PassSequence(const Sequence<int32_t> &);
   void PassNullableSequence(const Nullable< Sequence<int32_t> >&);
   void PassSequenceOfNullableInts(const Sequence<Nullable<int32_t> >&);
   void PassOptionalSequenceOfNullableInts(const Optional<Sequence<Nullable<int32_t> > > &);
--- a/dom/bindings/test/TestCodeGen.webidl
+++ b/dom/bindings/test/TestCodeGen.webidl
@@ -292,16 +292,18 @@ interface TestInterface {
 
   // Miscellaneous interface tests
   IndirectlyImplementedInterface receiveConsequentialInterface();
   void passConsequentialInterface(IndirectlyImplementedInterface arg);
 
   // Sequence types
   [Cached, Pure]
   readonly attribute sequence<long> readonlySequence;
+  [Cached, Pure]
+  readonly attribute sequence<Dict> readonlySequenceOfDictionaries;
   sequence<long> receiveSequence();
   sequence<long>? receiveNullableSequence();
   sequence<long?> receiveSequenceOfNullableInts();
   sequence<long?>? receiveNullableSequenceOfNullableInts();
   void passSequence(sequence<long> arg);
   void passNullableSequence(sequence<long>? arg);
   void passSequenceOfNullableInts(sequence<long?> arg);
   void passOptionalSequenceOfNullableInts(optional sequence<long?> arg);
--- a/dom/bindings/test/TestExampleGen.webidl
+++ b/dom/bindings/test/TestExampleGen.webidl
@@ -188,16 +188,18 @@ interface TestExampleInterface {
 
   // Miscellaneous interface tests
   IndirectlyImplementedInterface receiveConsequentialInterface();
   void passConsequentialInterface(IndirectlyImplementedInterface arg);
 
   // Sequence types
   [Cached, Pure]
   readonly attribute sequence<long> readonlySequence;
+  [Cached, Pure]
+  readonly attribute sequence<Dict> readonlySequenceOfDictionaries;
   sequence<long> receiveSequence();
   sequence<long>? receiveNullableSequence();
   sequence<long?> receiveSequenceOfNullableInts();
   sequence<long?>? receiveNullableSequenceOfNullableInts();
   void passSequence(sequence<long> arg);
   void passNullableSequence(sequence<long>? arg);
   void passSequenceOfNullableInts(sequence<long?> arg);
   void passOptionalSequenceOfNullableInts(optional sequence<long?> arg);
@@ -422,29 +424,28 @@ interface TestExampleInterface {
 
   // binaryNames tests
   void methodRenamedFrom();
   void methodRenamedFrom(byte argument);
   readonly attribute byte attributeGetterRenamedFrom;
   attribute byte attributeRenamedFrom;
 
   void passDictionary(optional Dict x);
-  // FIXME: Bug 863949 no dictionary return values in callbacks
-  // Dict receiveDictionary();
-  // Dict? receiveNullableDictionary();
+  Dict receiveDictionary();
+  Dict? receiveNullableDictionary();
   void passOtherDictionary(optional GrandparentDict x);
   void passSequenceOfDictionaries(sequence<Dict> x);
   // No support for nullable dictionaries inside a sequence (nor should there be)
   //  void passSequenceOfNullableDictionaries(sequence<Dict?> x);
   void passDictionaryOrLong(optional Dict x);
   void passDictionaryOrLong(long x);
 
   void passDictContainingDict(optional DictContainingDict arg);
   void passDictContainingSequence(optional DictContainingSequence arg);
-  //UNSUPPORTED DictContainingSequence receiveDictContainingSequence();
+  DictContainingSequence receiveDictContainingSequence();
 
   // EnforceRange/Clamp tests
   void dontEnforceRangeOrClamp(byte arg);
   void doEnforceRange([EnforceRange] byte arg);
   void doClamp([Clamp] byte arg);
   [EnforceRange] attribute byte enforcedByte;
   [Clamp] attribute byte clampedByte;
 
--- a/dom/bindings/test/TestJSImplGen.webidl
+++ b/dom/bindings/test/TestJSImplGen.webidl
@@ -209,16 +209,18 @@ interface TestJSImplInterface {
 
   // Miscellaneous interface tests
   IndirectlyImplementedInterface receiveConsequentialInterface();
   void passConsequentialInterface(IndirectlyImplementedInterface arg);
 
   // Sequence types
   [Cached, Pure]
   readonly attribute sequence<long> readonlySequence;
+  [Cached, Pure]
+  readonly attribute sequence<Dict> readonlySequenceOfDictionaries;
   sequence<long> receiveSequence();
   sequence<long>? receiveNullableSequence();
   sequence<long?> receiveSequenceOfNullableInts();
   sequence<long?>? receiveNullableSequenceOfNullableInts();
   void passSequence(sequence<long> arg);
   void passNullableSequence(sequence<long>? arg);
   void passSequenceOfNullableInts(sequence<long?> arg);
   void passOptionalSequenceOfNullableInts(optional sequence<long?> arg);
@@ -446,30 +448,29 @@ interface TestJSImplInterface {
 
   // binaryNames tests
   void methodRenamedFrom();
   void methodRenamedFrom(byte argument);
   readonly attribute byte attributeGetterRenamedFrom;
   attribute byte attributeRenamedFrom;
 
   void passDictionary(optional Dict x);
-  // FIXME: Bug 863949 no dictionary return values
-  //   Dict receiveDictionary();
-  //   Dict? receiveNullableDictionary();
+  Dict receiveDictionary();
+  // No support for nullable dictionary return values here yet
+  //  Dict? receiveNullableDictionary();
   void passOtherDictionary(optional GrandparentDict x);
   void passSequenceOfDictionaries(sequence<Dict> x);
   // No support for nullable dictionaries inside a sequence (nor should there be)
   //  void passSequenceOfNullableDictionaries(sequence<Dict?> x);
   void passDictionaryOrLong(optional Dict x);
   void passDictionaryOrLong(long x);
 
   void passDictContainingDict(optional DictContainingDict arg);
   void passDictContainingSequence(optional DictContainingSequence arg);
-  // FIXME: Bug 863949 no dictionary return values
-  //   DictContainingSequence receiveDictContainingSequence();
+  DictContainingSequence receiveDictContainingSequence();
 
   // EnforceRange/Clamp tests
   void dontEnforceRangeOrClamp(byte arg);
   void doEnforceRange([EnforceRange] byte arg);
   void doClamp([Clamp] byte arg);
   [EnforceRange] attribute byte enforcedByte;
   [Clamp] attribute byte clampedByte;
 
--- a/dom/bluetooth/Makefile.in
+++ b/dom/bluetooth/Makefile.in
@@ -7,29 +7,22 @@
 #     http://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-VPATH += $(srcdir)/ipc
-
 ifneq (,$(MOZ_B2G_BT))
 
 ifeq (gonk,$(MOZ_WIDGET_TOOLKIT))
 ifdef MOZ_B2G_BT_BLUEZ
 LOCAL_INCLUDES += $(MOZ_DBUS_CFLAGS)
 endif #MOZ_B2G_BT_BLUEZ
 else
 ifdef MOZ_ENABLE_DBUS
 LOCAL_INCLUDES += $(MOZ_DBUS_CFLAGS)
 CFLAGS += $(MOZ_DBUS_GLIB_CFLAGS)
 CXXFLAGS += $(MOZ_DBUS_GLIB_CFLAGS) -DHAVE_PTHREADS
 endif #MOZ_ENABLE_DBUS
 endif #MOZ_WIDGET_TOOLKIT
-
-# Add VPATH to LOCAL_INCLUDES so we are going to include the correct backend
-# subdirectory.
-LOCAL_INCLUDES += $(VPATH:%=-I%)
-
 endif #MOZ_B2G_BT
--- a/dom/bluetooth/moz.build
+++ b/dom/bluetooth/moz.build
@@ -67,16 +67,20 @@ if CONFIG['MOZ_B2G_BT']:
         LOCAL_INCLUDES += [
             'bluez',
             'bluez/linux',
         ]
         DEFINES['MOZ_BLUETOOTH_DBUS'] = True
 
     FINAL_LIBRARY = 'gklayout'
 
+    LOCAL_INCLUDES += [
+        'ipc',
+    ]
+
 EXPORTS.mozilla.dom.bluetooth.ipc += [
     'ipc/BluetoothMessageUtils.h',
 ]
 
 EXPORTS.mozilla.dom.bluetooth += [
     'BluetoothCommon.h',
 ]
 
deleted file mode 100644
--- a/dom/contacts/Makefile.in
+++ /dev/null
@@ -1,5 +0,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/.
-
-VPATH += $(srcdir)/fallback
--- a/dom/contacts/moz.build
+++ b/dom/contacts/moz.build
@@ -9,15 +9,15 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'andr
     TEST_DIRS += ['tests']
 
 EXTRA_COMPONENTS += [
     'ContactManager.js',
     'ContactManager.manifest',
 ]
 
 EXTRA_JS_MODULES += [
-    'ContactDB.jsm',
+    'fallback/ContactDB.jsm',
 ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'android':
     EXTRA_JS_MODULES += [
-        'ContactService.jsm'
+        'fallback/ContactService.jsm'
     ]
--- a/dom/devicestorage/moz.build
+++ b/dom/devicestorage/moz.build
@@ -13,17 +13,17 @@ EXPORTS += [
     'nsDeviceStorage.h',
 ]
 
 EXPORTS.mozilla.dom.devicestorage += [
     'DeviceStorageRequestChild.h',
     'DeviceStorageRequestParent.h',
 ]
 
-SOURCES += [
+UNIFIED_SOURCES += [
     'DeviceStorageRequestChild.cpp',
     'DeviceStorageRequestParent.cpp',
     'nsDeviceStorage.cpp',
 ]
 
 IPDL_SOURCES += [
     'PDeviceStorageRequest.ipdl',
 ]
--- a/dom/encoding/moz.build
+++ b/dom/encoding/moz.build
@@ -8,22 +8,19 @@ TEST_DIRS += ['test']
 
 EXPORTS.mozilla.dom += [
     'EncodingUtils.h',
     'FallbackEncoding.h',
     'TextDecoder.h',
     'TextEncoder.h',
 ]
 
-SOURCES += [
+UNIFIED_SOURCES += [
     'EncodingUtils.cpp',
     'FallbackEncoding.cpp',
-]
-
-UNIFIED_SOURCES += [
     'TextDecoder.cpp',
     'TextEncoder.cpp',
 ]
 
 FAIL_ON_WARNINGS = True
 
 FINAL_LIBRARY = 'gklayout'
 LOCAL_INCLUDES += [
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -191,19 +191,17 @@ MemoryReportRequestParent::~MemoryReport
 {
     MOZ_COUNT_DTOR(MemoryReportRequestParent);
 }
 
 // A memory reporter for ContentParent objects themselves.
 class ContentParentsMemoryReporter MOZ_FINAL : public MemoryMultiReporter
 {
 public:
-    ContentParentsMemoryReporter()
-      : MemoryMultiReporter("content-parents")
-    {}
+    ContentParentsMemoryReporter() {}
 
     NS_IMETHOD CollectReports(nsIMemoryReporterCallback* cb,
                               nsISupports* aClosure);
 };
 
 NS_IMETHODIMP
 ContentParentsMemoryReporter::CollectReports(nsIMemoryReporterCallback* cb,
                                              nsISupports* aClosure)
--- a/dom/ipc/TabChild.cpp
+++ b/dom/ipc/TabChild.cpp
@@ -1525,17 +1525,18 @@ TabChild::RecvUpdateFrame(const FrameMet
       return ProcessUpdateFrame(aFrameMetrics);
     }
   } else {
     // aFrameMetrics.mIsRoot is false, so we are trying to update a subframe.
     // This requires special handling.
     nsCOMPtr<nsIContent> content = nsLayoutUtils::FindContentFor(
                                       aFrameMetrics.mScrollId);
     if (content) {
-      APZCCallbackHelper::UpdateSubFrame(content, aFrameMetrics);
+      FrameMetrics newSubFrameMetrics(aFrameMetrics);
+      APZCCallbackHelper::UpdateSubFrame(content, newSubFrameMetrics);
       return true;
     }
   }
 
   // We've recieved a message that is out of date and we want to ignore.
   // However we can't reply without painting so we reply by painting the
   // exact same thing as we did before.
   return ProcessUpdateFrame(mLastMetrics);
--- a/dom/ipc/TabParent.cpp
+++ b/dom/ipc/TabParent.cpp
@@ -174,17 +174,21 @@ private:
     void CloseFile()
     {
         // It's possible for this to happen on the main thread if the dispatch
         // to the stream service fails after we've already opened the file so
         // we can't assert the thread we're running on.
 
         MOZ_ASSERT(mFD);
 
-        PR_Close(mFD);
+        PRStatus prrc;
+        prrc = PR_Close(mFD);
+        if (prrc != PR_SUCCESS) {
+          NS_ERROR("PR_Close() failed.");
+        }
         mFD = nullptr;
     }
 };
 
 namespace mozilla {
 namespace dom {
 
 TabParent* sEventCapturer;
--- a/dom/plugins/base/nsPluginHost.cpp
+++ b/dom/plugins/base/nsPluginHost.cpp
@@ -2316,17 +2316,24 @@ nsPluginHost::WritePluginInfo()
     PR_fprintf(fd, "%lld%c%c\n",
       invalidPlugins->mLastModifiedTime,
       PLUGIN_REGISTRY_FIELD_DELIMITER,
       PLUGIN_REGISTRY_END_OF_LINE_MARKER);
 
     invalidPlugins = invalidPlugins->mNext;
   }
 
-  PR_Close(fd);
+  PRStatus prrc;
+  prrc = PR_Close(fd);
+  if (prrc != PR_SUCCESS) {
+    // we should obtain a refined value based on prrc;
+    rv = NS_ERROR_FAILURE;
+    MOZ_ASSERT(false, "PR_Close() failed.");
+    return rv;
+  }
   nsCOMPtr<nsIFile> parent;
   rv = pluginReg->GetParent(getter_AddRefs(parent));
   NS_ENSURE_SUCCESS(rv, rv);
   rv = pluginReg->MoveToNative(parent, kPluginRegistryFilename);
   return rv;
 }
 
 nsresult
@@ -2393,17 +2400,25 @@ nsPluginHost::ReadPluginInfo()
   rv = pluginReg->OpenNSPRFileDesc(PR_RDONLY, 0444, &fd);
   if (NS_FAILED(rv))
     return rv;
 
   // set rv to return an error on goto out
   rv = NS_ERROR_FAILURE;
 
   int32_t bread = PR_Read(fd, registry, flen);
-  PR_Close(fd);
+
+  PRStatus prrc;
+  prrc = PR_Close(fd);
+  if (prrc != PR_SUCCESS) {
+    // Strange error: this is one of those "Should not happen" error.
+    // we may want to report something more refined than  NS_ERROR_FAILURE.
+    MOZ_ASSERT(false, "PR_Close() failed.");
+    return rv;
+  }
 
   if (flen > bread)
     return rv;
 
   if (!ReadSectionHeader(reader, "HEADER"))
     return rv;;
 
   if (!reader.NextLine())
--- a/dom/plugins/base/nsPluginTags.cpp
+++ b/dom/plugins/base/nsPluginTags.cpp
@@ -76,16 +76,17 @@ nsPluginTag::nsPluginTag(nsPluginInfo* a
     mCachedBlocklistState(nsIBlocklistService::STATE_NOT_BLOCKED),
     mCachedBlocklistStateValid(false)
 {
   InitMime(aPluginInfo->fMimeTypeArray,
            aPluginInfo->fMimeDescriptionArray,
            aPluginInfo->fExtensionArray,
            aPluginInfo->fVariantCount);
   EnsureMembersAreUTF8();
+  FixupVersion();
 }
 
 nsPluginTag::nsPluginTag(const char* aName,
                          const char* aDescription,
                          const char* aFileName,
                          const char* aFullPath,
                          const char* aVersion,
                          const char* const* aMimeTypes,
@@ -106,16 +107,17 @@ nsPluginTag::nsPluginTag(const char* aNa
     mNiceFileName(),
     mCachedBlocklistState(nsIBlocklistService::STATE_NOT_BLOCKED),
     mCachedBlocklistStateValid(false)
 {
   InitMime(aMimeTypes, aMimeDescriptions, aExtensions,
            static_cast<uint32_t>(aVariants));
   if (!aArgsAreUTF8)
     EnsureMembersAreUTF8();
+  FixupVersion();
 }
 
 nsPluginTag::~nsPluginTag()
 {
   NS_ASSERTION(!mNext, "Risk of exhausting the stack space, bug 486349");
 }
 
 NS_IMPL_ISUPPORTS1(nsPluginTag, nsIPluginTag)
@@ -245,16 +247,25 @@ nsresult nsPluginTag::EnsureMembersAreUT
     for (uint32_t i = 0; i < mMimeDescriptions.Length(); ++i) {
       ConvertToUTF8(decoder, mMimeDescriptions[i]);
     }
   }
   return NS_OK;
 #endif
 }
 
+void nsPluginTag::FixupVersion()
+{
+#if defined(XP_LINUX)
+  if (mIsFlashPlugin) {
+    mVersion.ReplaceChar(',', '.');
+  }
+#endif
+}
+
 NS_IMETHODIMP
 nsPluginTag::GetDescription(nsACString& aDescription)
 {
   aDescription = mDescription;
   return NS_OK;
 }
 
 NS_IMETHODIMP
--- a/dom/plugins/base/nsPluginTags.h
+++ b/dom/plugins/base/nsPluginTags.h
@@ -93,11 +93,12 @@ private:
   uint16_t      mCachedBlocklistState;
   bool          mCachedBlocklistStateValid;
 
   void InitMime(const char* const* aMimeTypes,
                 const char* const* aMimeDescriptions,
                 const char* const* aExtensions,
                 uint32_t aVariantCount);
   nsresult EnsureMembersAreUTF8();
+  void FixupVersion();
 };
 
 #endif // nsPluginTags_h_
--- a/dom/plugins/ipc/PluginModuleParent.cpp
+++ b/dom/plugins/ipc/PluginModuleParent.cpp
@@ -1555,22 +1555,24 @@ PluginModuleParent::AllocPCrashReporterP
 #else
     return nullptr;
 #endif
 }
 
 bool
 PluginModuleParent::DeallocPCrashReporterParent(PCrashReporterParent* actor)
 {
+#ifdef MOZ_CRASHREPORTER
 #ifdef XP_WIN
     mozilla::MutexAutoLock lock(mCrashReporterMutex);
     if (actor == static_cast<PCrashReporterParent*>(mCrashReporter)) {
         mCrashReporter = nullptr;
     }
 #endif
+#endif
     delete actor;
     return true;
 }
 
 bool
 PluginModuleParent::RecvSetCursor(const NSCursorInfo& aCursorInfo)
 {
     PLUGIN_LOG_DEBUG(("%s", FULLFUNCTION));
--- a/dom/plugins/test/testplugin/testplugin.mk
+++ b/dom/plugins/test/testplugin/testplugin.mk
@@ -4,18 +4,16 @@
 # You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Don't use STL wrappers; nptest isn't Gecko code
 STL_FLAGS =
 
 # must link statically with the CRT; nptest isn't Gecko code
 USE_STATIC_LIBS = 1
 
-VPATH += $(topsrcdir)/build
-
 ifeq ($(MOZ_WIDGET_TOOLKIT),qt)
 include $(topsrcdir)/config/config.mk
 CXXFLAGS        += $(MOZ_QT_CFLAGS)
 CFLAGS          += $(MOZ_QT_CFLAGS)
 EXTRA_DSO_LDOPTS = \
                 $(MOZ_QT_LIBS) \
                 $(XLDFLAGS) \
                 $(XLIBS)
--- a/dom/telephony/moz.build
+++ b/dom/telephony/moz.build
@@ -20,17 +20,17 @@ EXPORTS.mozilla.dom += [
 
 EXPORTS.mozilla.dom.telephony += [
     'ipc/TelephonyChild.h',
     'ipc/TelephonyParent.h',
     'TelephonyCommon.h',
     'TelephonyFactory.h',
 ]
 
-SOURCES += [
+UNIFIED_SOURCES += [
     'CallEvent.cpp',
     'CallsList.cpp',
     'ipc/TelephonyChild.cpp',
     'ipc/TelephonyIPCProvider.cpp',
     'ipc/TelephonyParent.cpp',
     'Telephony.cpp',
     'TelephonyCall.cpp',
     'TelephonyCallGroup.cpp',
--- a/dom/webidl/PeerConnectionImpl.webidl
+++ b/dom/webidl/PeerConnectionImpl.webidl
@@ -62,16 +62,17 @@ interface PeerConnectionImpl  {
    */
   [Throws]
   void addIceCandidate(DOMString candidate, DOMString mid, unsigned short level);
 
   /* Puts the SIPCC engine back to 'kIdle', shuts down threads, deletes state */
   void close();
 
   /* Attributes */
+  readonly attribute DOMString fingerprint;
   readonly attribute DOMString localDescription;
   readonly attribute DOMString remoteDescription;
 
   readonly attribute PCImplIceConnectionState iceConnectionState;
   readonly attribute PCImplIceGatheringState iceGatheringState;
   readonly attribute PCImplReadyState readyState;
   readonly attribute PCImplSignalingState signalingState;
   readonly attribute PCImplSipccState sipccState;
--- a/dom/webidl/PeerConnectionObserver.webidl
+++ b/dom/webidl/PeerConnectionObserver.webidl
@@ -44,13 +44,10 @@ interface PeerConnectionObserver
   void onAddStream(MediaStream stream);
   void onRemoveStream();
   void onAddTrack();
   void onRemoveTrack();
 
   /* Helper function to access supported constraints defined in webidl. Needs to
    * be in a separate webidl object we hold, so putting it here was convenient.
    */
-// TODO: Bug 863949
-//  MediaConstraintSet getSupportedConstraints(optional
-  object getSupportedConstraints(optional
-      MediaConstraintSet constraints);
+  MediaConstraintSet getSupportedConstraints(optional MediaConstraintSet constraints);
 };
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -2014,18 +2014,17 @@ class WorkerPrivate::MemoryReporter MOZ_
 
   SharedMutex mMutex;
   WorkerPrivate* mWorkerPrivate;
   nsCString mRtPath;
   bool mAlreadyMappedToAddon;
 
 public:
   MemoryReporter(WorkerPrivate* aWorkerPrivate)
-  : MemoryMultiReporter("workers"),
-    mMutex(aWorkerPrivate->mMutex), mWorkerPrivate(aWorkerPrivate),
+  : mMutex(aWorkerPrivate->mMutex), mWorkerPrivate(aWorkerPrivate),
     mAlreadyMappedToAddon(false)
   {
     aWorkerPrivate->AssertIsOnWorkerThread();
 
     nsCString escapedDomain(aWorkerPrivate->Domain());
     escapedDomain.ReplaceChar('/', '\\');
 
     NS_ConvertUTF16toUTF8 escapedURL(aWorkerPrivate->ScriptURL());
--- a/gfx/gl/GLBlitHelper.cpp
+++ b/gfx/gl/GLBlitHelper.cpp
@@ -15,19 +15,17 @@ namespace gl {
 GLBlitHelper::GLBlitHelper(GLContext* gl)
     : mGL(gl)
     , mTexBlit_Buffer(0)
     , mTexBlit_VertShader(0)
     , mTex2DBlit_FragShader(0)
     , mTex2DRectBlit_FragShader(0)
     , mTex2DBlit_Program(0)
     , mTex2DRectBlit_Program(0)
-    , mTexBlit_UseDrawNotCopy(false)
 {
-    mTexBlit_UseDrawNotCopy = Preferences::GetBool("gl.blit-draw-not-copy", false);
 }
 
 GLBlitHelper::~GLBlitHelper()
 {
     DeleteTexBlitProgram();
 }
 
 // Allowed to be destructive of state we restore in functions below.
@@ -485,25 +483,16 @@ void
 GLBlitHelper::BlitTextureToTexture(GLuint srcTex, GLuint destTex,
                                 const gfxIntSize& srcSize,
                                 const gfxIntSize& destSize,
                                 GLenum srcTarget, GLenum destTarget)
 {
     MOZ_ASSERT(mGL->fIsTexture(srcTex));
     MOZ_ASSERT(mGL->fIsTexture(destTex));
 
-    if (mTexBlit_UseDrawNotCopy) {
-        // Draw is texture->framebuffer
-        ScopedFramebufferForTexture destWrapper(mGL, destTex, destTarget);
-
-        BlitTextureToFramebuffer(srcTex, destWrapper.FB(),
-                                 srcSize, destSize, srcTarget);
-        return;
-    }
-
     // Generally, just use the CopyTexSubImage path
     ScopedFramebufferForTexture srcWrapper(mGL, srcTex, srcTarget);
 
     BlitFramebufferToTexture(srcWrapper.FB(), destTex,
                              srcSize, destSize, destTarget);
 }
 
 }
--- a/gfx/gl/GLBlitHelper.h
+++ b/gfx/gl/GLBlitHelper.h
@@ -25,18 +25,16 @@ class GLBlitHelper MOZ_FINAL
 
     GLuint mTexBlit_Buffer;
     GLuint mTexBlit_VertShader;
     GLuint mTex2DBlit_FragShader;
     GLuint mTex2DRectBlit_FragShader;
     GLuint mTex2DBlit_Program;
     GLuint mTex2DRectBlit_Program;
 
-    bool mTexBlit_UseDrawNotCopy;
-
     void UseBlitProgram();
     void SetBlitFramebufferForDestTexture(GLuint aTexture);
 
     bool UseTexQuadProgram(GLenum target, const nsIntSize& srcSize);
     bool InitTexQuadProgram(GLenum target = LOCAL_GL_TEXTURE_2D);
     void DeleteTexBlitProgram();
 
 public:
--- a/gfx/layers/CopyableCanvasLayer.cpp
+++ b/gfx/layers/CopyableCanvasLayer.cpp
@@ -64,16 +64,22 @@ CopyableCanvasLayer::Initialize(const Da
     mNeedsYFlip = false;
   } else {
     NS_ERROR("CanvasLayer created without mSurface, mDrawTarget or mGLContext?");
   }
 
   mBounds.SetRect(0, 0, aData.mSize.width, aData.mSize.height);
 }
 
+bool
+CopyableCanvasLayer::IsDataValid(const Data& aData)
+{
+  return mGLContext == aData.mGLContext;
+}
+
 void
 CopyableCanvasLayer::UpdateSurface(gfxASurface* aDestSurface, Layer* aMaskLayer)
 {
   if (!IsDirty())
     return;
   Painted();
 
   if (mDrawTarget) {
--- a/gfx/layers/CopyableCanvasLayer.h
+++ b/gfx/layers/CopyableCanvasLayer.h
@@ -35,17 +35,18 @@ class CanvasClientWebGL;
  */
 class CopyableCanvasLayer : public CanvasLayer
 {
 public:
   CopyableCanvasLayer(LayerManager* aLayerManager, void *aImplData);
   virtual ~CopyableCanvasLayer();
 
   virtual void Initialize(const Data& aData);
-  
+
+  virtual bool IsDataValid(const Data& aData);
 
 protected:
   void PaintWithOpacity(gfxContext* aContext,
                         float aOpacity,
                         Layer* aMaskLayer,
                         gfxContext::GraphicsOperator aOperator = gfxContext::OPERATOR_OVER);
 
   void UpdateSurface(gfxASurface* aDestSurface = nullptr, Layer* aMaskLayer = nullptr);
--- a/gfx/layers/Layers.h
+++ b/gfx/layers/Layers.h
@@ -325,22 +325,41 @@ public: