Merge fx-team to m-c.
authorRyan VanderMeulen <ryanvm@gmail.com>
Thu, 05 Dec 2013 17:35:21 -0500
changeset 174662 7f4ce3bb50d043727cc829a4e0c0df2cd67cc18f
parent 174635 ee425b3ccc294bcef1c065e28095e25796870343 (current diff)
parent 174661 fb87b500de165887d052a19b87493ffe682ff890 (diff)
child 174663 81befccd2547543e07fbaf620d72b5b1f6be6af7
child 174708 2831368a5e052002621ae52c314c2c37ec346650
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 fx-team to m-c.
browser/devtools/debugger/debugger-panel.js
browser/devtools/netmonitor/netmonitor-panel.js
toolkit/themes/osx/global/media/volumeThumb.png
toolkit/themes/osx/global/media/volumeThumb@2x.png
toolkit/themes/windows/global/media/volumeThumb.png
--- 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/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/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
--- 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/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/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/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/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/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);
 }
 
--- 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");
 }
 
--- 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);
--- 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");
 }
 
--- 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
zc$}S8c~BE)6kiY#1uBZ8f}^ZKM65}6bHFANF(e>Sf{2KCpe)G(AtbwG7qfu%R#01S
zL<dCctsGUT7SW1`3Tg$a1tOr}QLF-9cm%E5jRo83IR4RZ=G*UkZ-2k{-o9gYZD`08
z#{sSb003}Q1j)mg6SQnQTjoioroLbf7b+l<nu*6!M$~`-QZ*iffeIZOhlOFNIwk2c
z<_iFQ5;ftGRHQOktip91)PmvAIs&jPUq6~aRa%S!W3V`lUc!2Ex{L*C)DqTgp%PLO
zGAv#blxo0criO&8Qnf0Pn&meM^rgj&0Ubu6AgxQ(lVV!J`e;|o+%0M@3;YP7v=Y|e
zK}9M<K^bnqKp{uSRza`;^bv7jAuK@P2_O%G`CN$4h52llCx%2~SP1qk7URvJjunT=
z1ABZil7tmcQG}SwH5!c^BcFpC;<&I#B;rCmE|14%5Nt9<PoXqhPrCP7kYl9Epdly?
zt_LkL8iOZO5*DlX6Lf@9`N^=J>`4@pGA@l0T$lrKbvkY@nxw+8*e|2W@Du{$hG8V0
zY)~=vh;{#$t1nY6KqeaTbc2Q|3YsX#RmnO`PbuUQ7W0Oq)~Lk@BnUvH{z!li5AsG}
z7=aMJNFb03U>Tn$3-Io>@i{J^FBHms<T4?|4}{?WJ|cj8q*AF&g!l;g0{_5Xu0l^z
zs9uHjay9>O{lCZ+%M2Jw;f8P=Pwef0(0H7}$#|RqWi!3OaY|IB(OVQ=mIC#}iWxME
zFm<2-*MT21EY^G`f>^!~Mbs)Do7p_J07V6C1j5v87*eBZ4Dm+1c`8;9U;TeF$7KTI
z{-<SnRZJgRuAc^g5k8F&rf25Hzzj%!_T~f3+!ZS1(r~)5dG<8iS>aT;<Qf7yO&{S&
zpdQ<YM>LK|&omDs<Qeu>n(1#xY$^dabUa2qB623r7nNJ>Z;r_MbwB|<M(*TUZZ)E&
zVr!C5-Mt5N2Mq=0|8e*RJLTx3yeD~uxufT5&D&QlZUCyIO6Fg1I%K!pc~xzZM@P{y
zTJ-dt^K1Qwojx^BU2H@d_O_rWY%21wu|0mpy5aiW%_~|RhX1sTwDKof5o6wINm?$u
zYTb9$u-$}g5P0KNIPs*e#c%#x--H~)C22G`_LuRHQ{Sng=r%+Vvn0RaI#8Xv5H;T$
zXijt4mF41mbq!~$;&=(=z~3{rcENCK_k!%}NfFuwbof-!5S!GrW@T_;KQQZRxBXYV
z*jjSbjj_;r<ZHe4G1HOu(rBiSvWi!`oj6yN|4nmy2apq^n80Cs9Ok*ac-<-Ws`xPe
zRe^B1Cc$Jn01zRn&P$PFUdvxQ=R6v6L;&3C&dxa76`VF}XX2&qpj>O&`f9b~Zr#@B
z(!i0j%+1U1FQ~{Lld*n$pJlIB>dJpyqY*#cbD0|KP%|gU$;OJ#ZP>`Wl+>Dbt_?AP
z=PG~hY<y^a<L$J2Z<n~9tMPkRlF)Q&!!XP>ILK>OMfE(>;^$rD^kZ`hGN&F$&nX@v
zGf8CCJEqnv-8O|)-T)T+nLYg<+?tVB=U(R=*=OGbd8M*oh#<SX%(UsGZ_U!+{tB<(
z!j7(%y-agxx_Wcbro;R0w42Xow!H9{Zs^>bRDP$?!8hZ4n<MqcZqTGEH$))Ch0!gx
z^FBNs_4xg}i3$kX?FZQRjf;6lAMQS*90t1|3M-I~UU`k^)(ZCy`u;Y3py+Z|ze!WX
zMw_egeBW{I3+wx(dOAJag}PO>1y@FWdm?*AVC}s}tk^zhpSAW+NIuy_v{E5n<))_4
zIOouTXY7MLtX%3cTx*H0By47WB00X4{Ln<KGw&N?etG?3+3iHVI6JfRZu;D)(%dKX
zf^qwTMhYs|Bu`#lJ}Pn>)xCSm@<D@hx_^H$t1BU+*fd8uZ(CuzsOEhdr@`lTRYB*-
zxVKR!b`)O-93C*EqCneKxK3AkZK$?vopGo8st$5X(NdSSoE=ut?QNxYE84DfWofJP
zPBc8%VbdO;{Xygw)o^Tf^ZL1cW1^wKD`R%m0eKO|*7|Gh>Y=-14>}GN=Q~=<AF{gd
z)|D2YJUhBYA926_bkxoGk`3*BtJDFvPrXbxH@2)fm^#dMvd8|5DV<B7CI6{dW(91c
W$~M<*Y;m^y7Zm{^@<RXU6@LNqJ^^L`
index 307aa18ffd07bebfb89d357702df8a892fd2edeb..14a90c27b49b0f8cf90766357e5c2582b62ef230
GIT binary patch
literal 12983
zc$@*ZGDyvdP)<h;3K|Lk000e1NJLTq00MRZ000sQ1^@s6)~=JB0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBVPSxH1eRCwC$T?cqn)z&oxX?C##(mNys
zNGKts_ul&?lS!NON+1LhI)aFbii$idVBzsZnjlCOBmyc5Pf&_Jih`8T6GG0v*3C?u
z40jshE8ow2-)1i7?sMkeQ}$lFoRhnR5O>|7J9LNc&>gx%cjyk?q5pkq{73K8y5Jv9
zEwh&VqebeQzgnfdas4ikRoYu8tWkD%;Xj=2y2Ve&9s`m<ad-Vc`8?INuhswRvp?O-
zW-;iUKhuVKz+F~V(bnmpR9^pyer(gBTfeR(UjL{1q;oHumwVedT<bZ|;UfBG++BA*
z|Itr}ZhiaQ>4iHV^XE&y?w|qxNf~nIbLS)X`AdOa`{H$N?@e2>vaM=SL#v`sh4qZR
z!s^AN;x3RCuB}Tx6|K@1HMGlEyyk(z)%RQS;9dI+nqfQ4Mc6pFG<4}bsNhd5&UOHY
z#T~o%A9%|EvwMFhw2_6jTHYoA_n^#kT6gL(-~}VkPzD|=BTCB(Jn0tpO^c^{4xCHk
z^{u{7mp+4r4;|$xhB$g~tZZ);)J+Jr?*0BVBR&DJTY&3smbQWZbL`e{@S47MBWnlR
zj}|0c*P-lF+#6}pJN35R*k{lP(QmM$M7(C11)#2#-3T|~9hx9Kf?@^c@-Yj4f1CdA
zckN@h31i&u769fn0L)tSMN@ma?e-Wj^csL?r5Wp>bLZZ+ANCwzf4GnB@Uy6Up|{Pj
zQ+U>$xYyFmx$<K#8;4`v`wdx(-<*JY_WvfsBMdU7MrO|V;{8vsA9~pg6FmnE6+QY7
z5#2S!YnJhzrms%0j=BBY7j=5u4%eY!qSrtN(Q}|Zsg`yB*OUszY!JqA5ytT(`lKF)
z%aP8#Y+pqAQ)bNTt(ZUT$EH4R>T8to9(gQY`#lF%l5WTQQI6nQ_74~`it+>NZqN#|
z<Z1VQ?NN6IC{kB<unhMezm@fAh{%inH#&cyv!>#AAC-B|CvmUR)HvzNAO0TaEY?x+
zpI(bS2S#`8Yj=vo>pL**zX;fM$Y0mCy>jt)4`r_u56w9y?pbhAw0gT%v{-yY+_mI}
zXz^~XXua^FxM%J$abNB#@t|tS_m3B>YirI!ck636W4Noo2#8V&zX%1DA{CF-EeN1?
zJqFls88qBg^s^gz8VkS6EhvN`nAn%u29(i<SQOT`;3=@eZ!1uLBLsb2qe2~i1@E~U
zi{2B@X$`^l78X*CY=86{yoeyBNB^Nz>{c@GX@&ah2Ml!*-TDq*WM<#AMV+OCN4g6V
zuK&)mTbX2dwom;clclj5IMnImTLgC2m66t^hjvx{cwoo)A8=j3GBW|HH2~#YTa1yD
zSBP*Aj250jF%t3G$tzUw9(l-XPMh{l-guuR5g45!5wBTh!NRlh3XEP8rOXjwiE7~!
z9P_#*{lVYzN1y8c{wU923fDI+?OOoMdLIBxZCkqJ5f~$~3d>X&!&(5xN)zvNw^v}~
z7+3#D>3K*}|9S?#$@j%v9tMSQ0CPRmP#Z%>c?r+pSmEXuDMq>lU~RinK^=gA&&Jr?
zcF%}3H~I{k38UlM5J%6O#t-xLq#NGH%|EIxB3?E1)6YJ)$Gh~>rO!U!Je2pyLtfS~
zw|~7t;>3ihvtwQSBCe0CoUU;82@`KG`oM+c;u|4Qx7NV=Y>)Z+3Bce5eTC2evmEzV
zg749PvlluAbEVGFBS>%_xCcZFSHB1`!p)!0br$0|+E{%W>&4?LWA*!3OT0%Oi<|&`
z?JBi$jMsnC02pZF;C$IVFiQA@C175J@7%a~TThKaZd3=s$nhI!?<^pPf5aM)c>51_
z+)UYxb!*V*wi)J9>lG3&JAaH3=a%homrDl5sU`Hu6#(V;^zWhU1L&U%#&oLv=;rc=
zzZD*rG7o)2pj+~1`WU~xIyO<27?Y?<;PoAt_Fn|-Ix0U}(IIQC=rH~}(Y|blxUZsG
zw3=8gtg5QTU6ZOs3w*c6|L+^OLp(C^JMnnVI`O1x>2i~xuAkkE5fJ#H3F#s>tw03E
zsxYCHlWzso!8+dP>=!NqV^mP?!B8TjgDh>wc9?U%i*L9Hid9LV0oMCs0x=7o<9=BE
zpAL2M6cFz4;KU2>uted7Z$8@)c)GASzjyKup>Vt)1M0>ObM?a_OA=HHP=af9!5y#R
z0a(d<evt|>%-I*<&Q5LgnR*O(q?e8Tc6(=^>xrp3lN4#WRlG*q+j-BD{=xG(uwP<Q
z^F@p*AK)XT0m9YB(te&0Y~5$^G>4Vq>M|j&{9RN<TEAHl)S|nY&+z<k^br9=KxEQ}
z(u&E6yT92xh{S9ENW})vkXS(;@V;P9n;fh7^dgavQ7jR!S!RK<u?mPtm>QW(V3#R^
zqmwc$=?^H&3;Mqwu25qRgwxQGwcs)C=jGbs+=xpnY-&rF=uyPyp7fkz6@<1?aEHE2
zr$Xm*@Oju~U=##@WI`&8mU{;b9d*LdGe`^q(1B-9cCESkhONh3{*_9DhMRv>vIM|~
zx%d*S{0xQYa~nNNkHYh^ez=QoO>nI0F#AEDhhRB4HciAPtEZwL9t2s-2vKX^i%!g#
zO<vY9w|^rQS<-uw0{OmpZ-PTt0Nc>`3^Cd}Om<EI2+SDa9sqEWD67<c!xdtrdmsVB
zi~lxI*W1<^;HjR*fOlxzzO2Hr>d7;o3stHM#(Iau|4NXDIdmT2u9Lh%AF-7NJ3eiV
zD6F>RA+Nchj>dsoK$Jwh{xjeXKy0Zu09{0Kwg`$=?)<WPS5G`s3xJ?|@m{Mt_AqSx
zezW)c`|%8?IiCU8FAf^vTH_WFNdSCh!JF?I^k({n#m)DPNURHvOBI$7>Rk5?jeSL~
zO|QU+R?r3KKn(z5?mGSDOC5prb_z~_7KY_tWHb54d5cf`z=*_o{RfW{7SA1c76B-0
zF<*~+`iG`<={2A?iPtRSz5k^5x_iIDf@Hz_EP%Ya(NE6H+Gu#)AdilL*#`1x;$H>q
z7A)Ho_Gq`kXS>_`*6LmxqDQ+8It#wgX27mb>Pn}cs+BivW}XvWigpT9pC?OpiayVr
z6J1fKXWB|9BZ^}Ng;gjNVH_q^XhH@B?lcNjiv&6rA3Am&1!$Bq8;eved_&`wpE-N(
zUQ0W0+45CSc!$L9py!3{jP?m-$lxt=z#X2$3gB{uvu~IPh=y>FPW~DC{bfaZUR88*
z=3Alh={2E==^`XP4Q*#Z07Tpb?0!3S`Vr5d=&g|uG?920TE|*&CxJQ}hgB{Bh`dK0
z@NPeJ_-K10Ztxy`?M55~h&-QHT9M}J7ydU=Zprv`mhm2W%<zP?!Nj#2Jkn!ha9o;5
z$}W?L02o5;Q?y|Vp4O(?sR*=gH4$Og%5dw7pQ<PRBmq0n4_}lYK-t*JQ0p$^16tf|
zP_V<~8|LEI;1ixG(6`TGt~>>5H(==KuRztj26f;)@{pHxOg$GZ_C$3_Gh&$uCG#y8
zcK@NHgdMyG48hVkiB{!F-VJ(vd5<6rUZhWqwFQ85BTSJgbSX43Lj=U62r3=|Rehq7
zVD7tUiH3$oP~4MMP$q#p1A?p*+P@kUn<~9iq_nQG&Jaw;DKqWxPOc-}1FjIn1^}#K
z4xEQFd|XB#aeTUc_W2fj0E3*Mn3Q#aF)25wsJ!qFgBi~6GidB>2=~}yEPe(Mt&34+
zFN#RYk`%u_9~G}3jHc&be!Uw!jvg4pLz=MQA$Z7lF%*lkv$!|prB@erCok*h_itQ!
zp|pm%mUWeHAl5w%u0~3dzUc|_k4~26h1@eWdQ7~kL*mj!LMF$lRBAsuB~SY1|5;As
z*I~5JH!^@W9g&3x@!bbwFcDFU?;$5HAzb<f%G+UG-i`5m23>Rx@A<tZB;E`32q@Q}
zXWn7-c6x3CqLMcMa_o3_jN`qaHlX|0uHR$_kNr`;Pv1eqUzMvr99})jPg7$@9`YLF
z(R$AaHe@`1?KM0Wr<Xtm{)_z_j`@;XQXWiCGyv^=h_q~_L4|&_*X!%YA?H(IklfpE
z@W?8TaZGBSpiJcW$6$=P9^kc`f;njoesA>uBYJD%5l~M<UQ8pzI*%BN7{n%LjHO2%
z&;28QyA7xvWY7@;@K|MLktOnvvJ;-gQuly}!l=a52^L2UM!MBQ&s>@I%pAAOoPsCr
zYyZ>(Bwn-3#W(B<cxwMszz(uYkj&+WEUah5A{g>ej(86|*QL;Y_x=yV`Lcy+83scC
z-63N%sUG$M|9?`h%owm+U%fvtBxB-XMaisVy4Q+Q8A5qT#)QM`ckT~p2JCDUD?S>U
zvs*aLsuz9ps+$1Z%U}E|T2?lC>|WUMYg2i*!fG+>*?KW3Z?_nLy7Gv5$c#pBK$cKs
zjgc(il<Z=Hx`!+oAap=0<o~RpfT0&DQC*D1m9zTS-%fS7MPzLCW%cf!(aM}^PVnfI
zT*+$!p}0^kEUNcTk@UocKmdotsaF4Z=x}e%B7X41$zPv{P-HGo$SfAgIb$VI<PjKs
zL9U&e3m2abj7r{0ML?nB3dI6<|60&00tS}xUSM?c_S3(g>1@Qx7~X%#s8i0~AxBCp
zro^J|m+lN#f&hZQL|Gi~f#)=NW$I@`>3xjJ_TvEi(e)1SviKtW8V`$3nO80muPFrJ
z0Tko`hB}Bk%TPB{6LPfzSo5w5wJxa&vz`lj_nnD$s}F1||5038D#Y2zLY%{}<NAj!
zV}E?R!ge)zK+mC0G3t8iZma+hSuS}sqLMeDUmw<%(*s1(8OMjoLtfS~HSQkhlcel1
z&4^{j>I{dcIXFIDGEAr#Vlju4a>^v)Tx1#V(Sz*Z>}xdV4k4+8iYc=aCYVX&WgT<h
zMN1)g-eIo3095WYEDQ=a0RAc7VeuGWdJZ#1N><^7cNTx-2t|0NymBf%UF{~%oD&4k
z*u}W?0x5KZv7c&WU0G{@!Bfw_yuddoCV5YI5<Hu6D#^17p;mOOLK@*<6}*O5;bCon
z44EDjqdLQ}APAM~8$K(a2TG>@tT`_PQfUT8C9XpFd@HXra*D=7Y40JAS7_W#^ML=S
z7jyjNnX%?7W%9C)p*c0$E94A~Tdl#waQ^#$|HOsg+A@xXvv+8XOsH!w!+(Q@yCK{i
zD23bMQIoDQj!SX>-Qh0uaK}ma7!oHh!)#DK-x)}cX+H{45C5nnF{Wa&JLRJOc*Z7Y
z7V|#Vo$TDE@!@V_4N0JaX%r!`!iXof1%T8-UIS=-G1SRRn!_Ysqima`3&2BOOXd#r
z#zBH+8p)X39|7FELLP4CI8oMm2SwTHc~)n#uLnDNUZh8#9{MQghzN!HhlqrXeNoC>
zsf_n9Cr|cAx(vYd?0*MXxp3j)gPy@LyBKkTPMm^qFJN>9j*9IyH5VSRME+5xQx`ip
z`|O}so`!4xA&nj?^tb42BKJ;mZUEo{?3@G0`3UprLlXM$L-flEUl=^(`A-2m$_6?4
zU~rybE)b_scgqp)QLez??SekqPk=oNeQzkmW!7`^d`83bPook03Peyu{8PGRoMXT?
zj~WTZ-UI62(9keY_qw4$$dJU-Un7720CvL?KK+-^*xy9JbRmYS8-d-Mn;L=KyzRe=
zxnDM3zrLmM+cvvec+U{R6LlO=_a*?;f5;394K5~jN(ul%f(9U9B1tdB{4o+I5+=k}
zc~Cd74M4{lcA^9f^Tta8kk%7Df$T7Nailh&IMx{S9QGZ&wI32^$xGKh!i$n%P0kr7
zJsU%gTr8NBe?w;*^xPq@XCtj{csY)J``y0IT49Lxt?@2z`5~O5P>+$GlWoJpbHPws
z1a}AxY>iDV6tOCVsH0Wz0IG!af4pl@jM6BmgO@4{?|;Q3D0*8?@pvWr=tQ7Yzd#~h
zvn;1%d<sGd+hCntVV&j{yYq2QGKPZanITx=1Ww5xFH{8;5~bvqOJ%$#d2hf=frv3Y
zqycs<0nlFkVPnZp7k{3AvElsU22ry_NOWo<sG^ZhPZHX4@__fk{?CgJqV9`qL*pT9
ziFtFCzmb+*6s|9r^p$3cx*(jqti!s-7OoeRo-%h_Gh&(1I#|fMePM`_0rW7|$940-
zblZX8UqHpnezSyF2O*8O%y}0r(fdQi6OQ>!<ABz@ENFH0+e@!C!!x0=s!uSN9{{z?
zE-H)B&TD+Pjz~y-f$Jj*ZQ^;pmjMVrBNyoa*8JNTgJ68$je4zqKXbNA2->A041=d0
z;W&o$BP=xPT6gb1bipu$@|fz7ke2rXl*#h2B((&tIX-fIqaD}5BV5(U!#hU<Q_3Mk
z_-PdKGo8Fc0akp@>+|cjp$S!)ouf)#){&c27{iA-ca^y?__&rd9$)r1zxjWb^FF~D
z_?zX~A?;)nJx7cZ0BGHS7yU|@B11AT5keINr@`<n(gO@2eU)G=K=Ldmi_u=en+>F-
z*sxE1!xI}g&T>4FiK&kMXa};fUeA-gm4+VW0pA%wV3eVL!97Rvke7A3>dATnHN5Y_
zegGBxKlKAWpd4EguUW=><RP!Q;128VZq(mHospPTD)omm<UGH*Hqic$oU6KZBI1-m
z7%R!UN}a>`3u6KTOi<o;&deWM#P!8{)I(TbM}2~$)0!C~eFjYf;I3`daih&7CxY-=
z)-@UtnLN`SUis^AFw{mX(gTo2Z~_L{Xj6TmFEg03(Kxq4B<Bl_5=PXxP9hW2=K-8C
z&Bb8uoufzKjj(vt;!jqsWe)3;dei|%_a;kHU2gY>`QapU`5Ea@QPvwFDN5iUc@k?z
zGQ#BKkB&TOHFM6qK=vnb52G*2%)BRNKKDl%4KH|IAC?1li&yUm?Clu*%dmiy-*vBt
z1<DZ0dpm~wvUtso<{mrGgiY5I$6XVN(8KO2jlgbrMzwhN^FO?F1a$;-{5Y$sMI3nJ
zQHOQ)yjp5n09-g!im8PYBqD%{hc_#dAy9OXmgw;qVZf^Zq3{MlT|6u<wvkp;DSa!j
zP@|!2B9e0?3Q0g4ZUGkzyJZ6<AV*#<$`}BjBmmCT!ii07G9<!94>xIrVJju#Y81R_
zp>e8Lw8{_4#|m}k!m2&*ADvPYk(6D7->88%r^d-U%%~TK;4UgT`_m)|{EpWE!m$u0
zS(}Z4IxM(+0IPcch{Q#)%ItAoAqm&QusF5vL`nj%<bvhB7-d#Dc;7>v8?38sXX4aZ
z{_r-PSHOa6?B9t-N$PtjASjJ9RnupCX@Fg;u^ugKt3s^bI=Hd;usHLM5XZ(EC-D4p
zeZirsVCy%>y0@@l8<Mwfs8dHO8!D4$pMU8QeUQaGB+Q8>B{b)Smmec9>!5B2;|o0r
zi?gB`vCNd!M}+`S%e4e`Nge02e7{uinQx$fQ}BGBA#H%+$0m!{$s^!-|43z{C)NUD
zozdRG&)+PB5^j1IL!=epGC7Br6<KA{dVpspNf)5#@<l1q10}B#cv0u7emldQ{iM7x
zdej|o-EZ)yUm*iBkg{Nfw1bYpu_+rE>SY`7zMO^kt-YC{*Qa3}S7Xgd=>QRmj87ty
zGE$ktNAOBO%@DR+-)P?%Udtn;<0s|NqZXHz|3#9zc#YP>R#Y}2N1wl08+a#6l?m&}
z^|y@!W&jKjNzP;xiuad&;=*Up^mi}*pXI#I&^-9Pn&mP2hp(X0RppdCvvSR6BN(!q
zG-FOwXk6+E$}Li8eA>yemD3XI>gsweU$u55cxSQ>HVeoayg`u(-MF5(1~6Y`*UoSk
zpD<}dPEgG0=0-t)1k@q{dN}S#-;j0)_Zm2?8L^BC%@@Bxa0S^YShqR&vR}ZwL~e-E
z=19V0-Q+3dwKfNmJmf{4H_Vtnt&k?MjNWurUZZiQS<4ay#id^=9X~ll4xocNL3UoC
zJcbASAdMcK`}c*!rR}3W3s1_vT3cJ&m1VkZz}r{L-_`0TbBV_IkWpTjOc)TYLSvP$
zaok3Ghi+Z+(LWsY!KplONsyHbG$i<*+Hx9%41Gr_GUm~XXQ;i@?80pDJtmjK%1`Cg
z+0M|(*Uia=Gqq#boLo8V<d%REX{1M><YguCT3b#YL-n~9(u*sN5+hhrL=M21a-Vff
zj8*H(X|p54VTdBiAh_A9U`)kh+A^*!q(czgJ)jTl)_k!y)L&V4GQMcqS>5aS!s#~?
z%6T7rA<ckYSp4?uxh2;{{um*`;v2ymzgMjJ1K9C8Jg)H`zY9u*$StZ9VR2txZkE&F
z>N|--jFTk2xXL6Egm4FuEFg0W_>jUN9pEdobh1H`+6a!jU`*ihw~V!sjy4#^a`Xt8
zBM&l%-6!RJ!E=TDzB0W5d=%7OhPoOX_&#<ckdU9WoD)U+9Ln5sZWvexrDkPh!aSrA
ze2=*!^g<6E`#`Q=c#k}qMc7L>6y7-To(%ygyr3$WATmlO86|1qE3(c{pZ!9BR+w<7
zE9ky5*A~O8f~*()w6XAKaq0~r4wuLi?j2m8e+0bmmbtWWU|sEQS+9VIPPC@|k(BNg
z5Z)}bfN;ZR3NwUJUTgB=`Gq}5Ue>|x&W<`lox6&E2Cw8DCa|XxB8b-|mhm2W07zh=
z4*6F1H~qsCmSXX3*sy8a&@mIHsTh_v)Hn2eQGt>8OhZR|A8dN|;Fw|pDE;3zMUlz5
zf_3%B-v<K4+%|j+2p`Xo_$yR)1YF+1(Y^*l6n<fz5~u(#>Ri*m9{__PEHVB2(1gs|
z&;&K!Jq3nZAeH+2AnOgAw)TW)<CjDj1bzUjeFr;EH6!%uj@+SB1dL324^2qh@!U(V
z+rh~Do%v1#(iE&*k8*vZedpx#+-F?<qolA|R8r=9@Q`nzw~o(;`7%+TU#<;HK8ET!
zIC;;f=ZEtoA+uBh!VH!29>4j2mh(RO!2fFVFj4sHLCEj&2##Il<QdRYvv%94vWv^8
zXe4E$#$reKyfN$>*xf5Q_G8v@3y65#fDCB~#dMUZ2Jq(3lNkeR7^_=?;koh&jbEuR
zPvhXR_+Z&e7lxBVH6TwPsIZJ{rqLj(l;n{<U`BYn0PE$3r^fq%l!j)WQeLyHan8nZ
zZQWoUQ=ks=^JD528ZXMcaeR)0(aPLC5sIvXkxA+g=D+c_8~aeMKEkV3L9uC<HOAk;
zn?OK>;s@TtyuK_~KR7yhKGs7W9SD{X>Rb<sPI|@EJR3W4>R`yc<CN<dyCQSvrkq^R
zFONp_2<u$<!GPi}Z$s_jca5gMy!p=JdmP;Zcba-GM?}x4ca0HwOtr%tPJe0hmQu=J
z=9rUstt~f}=gIr(vMDAhqjXZ!HS3s60Sbt8;#x?`9xG_1y8DGaq+7<&tg~0(Lk2>z
z13&}yt_{(En?kV((K~-0tG*~E=Lw+-Zv<}}mp6jCuRr`%{PK3=^%u(;zcWIr#q=y8
z%F{23q{y9zbYJAu>C=zEl3Ys9P9_AEddw7w2&@>Mj889?LXBD?s`d<u-7VKCNZ{=r
z8ke?{7DZOsRFOS)n#e+1sQ@9g+9@<h^lm_qZ8q$Nj@`v@l9r#(mIfiC+h#JtAYt)o
ztA9Fl<O#Vp)~wrLjgZ0>DG$acbpD@C2FKQP2#{5@?D#(HD-snJ6WRyZJMmmFlOYF!
z8iF{!M@C6iQ@#$bS;l+hF#;0XAfGD|g5^>Mc-80=IpRHl+6z@P=7i{nZWu}h-9Of~
z#i*)4>kqE~{K9o{2+@ll@|)A)N>O+8`8x2t58e^1qYcCI^WKt=T0@XtrZNH8^3?r}
z<0npb4vSMQ1YoL1o{SXwArE<3hjp8WX$zIGO0Ur{;FwE&tPgxq#(S{5Da<Zs<d#J0
z_08i9E6^&1=cjWxK!&0Ik=jDeCKoF~3^v6a_yZuuMG~MGGc4qYb$mjiV+@VCIb>+;
zeZu1R5v<X(ju7iyy%4Bf6DV=^UP$jay-5gb{U9@cXfQmzqk6ZUD!Zf#z`uszgds)%
zyK&rsm{VM?U?`uS_fZ}}XOOzk+Cb>l3fB1;Y>253!4A`ej1sKLj03CJZRiW3{C9#7
zT?52d#^cKOWl95n`(fr`>g2(3EIaD_|6wh^ejmw|nHB!gs|SG57U><)0A#gFq%>rW
zohs6?F6kkcHpe)5J<V_apXIzyKJeGUyO6}>c(xOtk`)pZlPXBuVG5;s3ZAe-0A}au
znWtRk8h}UiFz=Cv-XF@5IHlU)Q8f{X>2oL-0hk-$VSN_A_oycKwkKrM$BjF9RrT1E
z<)#0giRv+$%_B+D^{viFdc#t(ipK$P-_Qa(fd8h@F0LK5z>YlR)%Bps<PEoim**1#
zNJcP}l4ni5XT#=gRD4fsLaLk#cgv@^*oDL6_D|{*&M}5t0TNX@xv5I_s|3QKy9SML
z--KgoT>k3K6FSivH;nNK08=MKjus)jT?-Gnn>oOa&#XTV`m&@^w~mqe&X{qdIr7C-
z)-dZc$Om5BeVm78q%fG(H<q?T?<~pOb^<Y`x#MRVrOYvOmP|O#e#|MKAy~)6SlKzk
z+Z+eOi!yQ5+Vwmib_jFx;xy4qmQhCP1G^8`f92!gpS0gAq3EdYwIOowOWqGY?`FU*
zJ^age#>O2L^U{SV3ixC51VP>VL#oAwzSZKuqCdQM<=)j|fl`Qys3Srh^5sqE>YO`Y
z^AxP2r36b7cp5idq!di3FRqwcY+&Fz85pb<U+w;;7k2D@nF_#@gU)SKqUB2wa_Fts
zMh7E<-bt7D*ol+<;Y!~^L7I&LN}+;NX0JGP`uC3dNyN>(6H&<<6Cs3=4E#I70kR<_
zB=|lEGJ1G3cC%R_=Wmq{6q6FxEPp>KyL3BfE3Z=u#tUC8IN+DH;57>F0wH*EE1r>v
zfZ~sdJ*KIgJSG-Jn;2!zVuH#XjFlXvVZmcJ;#-ESTn)H;V4|<}nElI@N5$cpLVTOm
zoQ}*AdzUH>Pw=rWBCjr}`=gJORua%axvz(Su+rW1LeD7N*r7P0p$Z;3EAo(+b!6V@
zo|1~G$pEZZxDW|)<%j?n8)z<$pENT@KMV<hz6AjLJLL8Bz=BNT;*<;lSZgF+vv2r~
z^nmMCGv_K|RXIxm)=ws?vYWgLAu&nA7#27542FoQ3L(+SH|5XJBW`XR<dqw*kQn7$
z$(sQWF%<hX%;zR$ie%^=$c5^K?{I|S>gjPw24D@0RJ>wj4pBHg_{xH}J+Lw96pc27
z&@KTmNE<O=pzWrYgQ0UALE$T7=-k)S#$hS*>5$Su5O_UGm3L##yjNY2C)N==@V;Og
zgyfl~u?RUJXEF1AncItV4hu~w1LW^MLdC7$NBqB`elzybuZQIJtu6q#2{1yl$4zUd
zB)C3<@Y~Wl)hVZ}BtJu(tgq?YcEK^KO*BZ!ADvntrK0d!N(VrgNZQbYGTx)nOQnW9
z-ECSgo=lp{NO-_5&<JFxoM{L4qkXs`;3^d|y`cct4T_BXN_|6)@5nW!O)NLIzRa1A
z1Zr_9S<+u}!RC>#c;;GP9{B^}HOqL9JVrrXZ`;<8nX3u-r8FSOETp>Z2B_=D`DxA=
z;ux#B?%4evmr;C11!E=={lm>4wj<p3+KzDjme(w!K0-+MiW^deAdlw!mHA=--0cB4
zivgtOpg(Gm>a=g}ORwFt>+5ejdIUxtfE=vBy=NgW^T2zrInE8HIGK_q#?}CH^X#3y
zzsGM{>-2wb%-J=Jg3#0EX(EUDul&$hCz;F7=Pjsw)+iC|F8yT92!Q^7($NuYM6V+H
zGl0juMQhgN2Y>%$G>lpsdg!$47vApC+EBJWuv@wHo2Y=4(wgKkGp^}gCzr|)$^%kL
zYQPuK4A|ubZyPZ&WMBO|iUv{XRc-RPlbNp7;-lCGF*R^sePO`15ppj^a2Ku2TFM1R
zbW7m_L0pf}L%byeM1@|x>uc;{&8=o<W?{lb!cu||T0ob%r2~#6)mGT;xGEN*vn&D@
zx}Q^W))3U0s+*Z#78#3t7XCi0<L#K#PwIs)I>XYQ4XVODr>8ZCTIvZOD})GFQ7NSs
zHRkvsiG4eg%{yPKt?dL5yHyHX;2sqm-f=DJv@mBv>P}={Ys<-FGPyP+c2g>THxEEi
zj_9%R2##KBs6KbLg4$I2S<gDYG4Hh42O0boEQP%#jl}Ey72=oAvVW`ewVqC1xpoT6
zDm_CL>Knch$+VQGb=Es{lfd%Q<;(4nGck=k<YgTLbEn<7Ni!2M)>qV+H(H>prA&YW
zEV2s|r#%}fmncumig|9#y`=YohDr*+i6X1?ph8{x6Fpuz<<li)9Fe3xt~rW@-hggA
zGNNfL;!?UY2U7p{O%Zq921O+fGzR8Pks(n3+)J<Z!ZX#RV@+`_08m{ASdK%=!Tnet
zbxuBEC!ydP66kqHKOwAEhcg6k`l}KEfL=%`_!(Z3Bk+=WF+`tPFgBauBpAv4*hwuN
zw-Kw%Dxr5NHm!)eEN?n{5F0RjA`?`~8FS_ZZ{E6N=)!lFxYOf03L0qWC=Yl4u!NT?
zr$3jJkWsXmz=b(40W!dj?@MFJH88ps;3W@$@gW)Gs}0ttExf-ULxJDaNBn<~31dh$
zZw+;H+hQ1)hFWgL%$t-%j^qKDB7N)MBR@fftIp9W?|rb$27vV^diFTqIG>rqk(@K;
zQ|xm5jPsJ^G*r_8w7`3K@kjr#HQ-4YiSe$9<Z&w*#h26b%jbnD)W<^*QVl`az41GJ
ze_7@9WVxfMsPOsRB<8DyBdkPkY5+VKy2LWxBafEf5LnOxHhm*p*YGz6>L7dDz*t^G
z4-{o5BSbLRc5U9aqp!K3j-MCjztO9ptTO$4&4pgc*(LK+Fb*7x7#J!fUc*TtlsP4@
zeYNLX+mx)L@l&69Za}lVvHnA+VPje?bJQ#$)?r;e?^k!MtAmd20TZx^<sbC^;;cbW
zjiGBbVd^X&kC6B}7(O44@(37*_4^&_bTZ}K(0Z?o$r57@0V(AKMjB+a8o&2o4**Mh
zXWv@tECm2iCJbLw9<9IfLwQRwAJ}Eo7fqTgN~XLZOS}gUTRl@4wr=0qFIJVm%}^dL
z#;}JS@=k*hb%<2viG}aJ?}=l}deigVRQAsM9K)76<D*aafowo_de?@?M#I<qfa1yi
zdltPEa7g^k_o#T$sam`-yjt?str*zov0E_!|F=W=uxhcy?WlOe`;eIFy~pTZMIg9~
zNy%ACP>>A;NGlQwqaNOY7)!z3wjI@dVpH>XQ5X_{(5mWXJ3P|T0mtGm^$Aac@S7|N
zz*tq@r^k+;>}2M1w2Mksf2e@>0)mhmHZG#Q53%r`gJN5X@W?-r(7G9m@GTeb;86y=
z1ZodhGHDRd8KqNbWlNw=d;i+C+D<Vkd0Po$$>S*<Gcm&80mY%1yv38Bmnc+cA{#0<
zoQIfjoOuIOEcp{>Hvu|cvyA<YoRvey+5lK<UFBoF_|ooiSH%xiLL8hbe&1G5b9Q^t
z1zwAPR*IVHF_*ye7I_UNoWdY@nc&$In<60WHbN1F!gJXH!n*_JPAG)nMlLGykk`<z
zKJA#5Pktr_R_Y}h7+U2?1qhH{GiBEEVTQbr6ijM(bvfTSSEw-5kmH(gP8T&?&@89I
z3XDxTZs-|elhWIBzL>HI^@*WhfWnTqVqKa7^|TbTan@nHx>)kaA?$Lza_X$kID4uv
z6nS?_q(9IYBUm7Sz>d^s<ib}7C;q~4IP<wM|9@f`j$XJwLYaMn-fiqy{)}ZfL(C=y
zo*@-HZV1zElk>1@azt8dj!wBdJU;a~>|R~w9USG(JUMuk4i}YA3Yh)Et06I}+_i22
z(Kl|&Z;EeJR8%frNDz0x&SDDLKNP43L!i>`SmuUFmUnz}1;#$(+``%(Wr19AWF6i9
zCeSOadah|5T0*R+3oh9wpKtkMV0?PP+wf+d20%VkGGSV#W*6d98HMFl$b0)OA*=K}
zj;C3&dfn%P<PzHf-bZ4yS`G8xVANb0KV=p@)$MC*>$)v`_XCfab6*Kvx_s3r%^Yth
zAJ$9QMQ<TNYesS9PW;|#Lm@QYBTtI7d4b1lB<wcUk1%?xr~qk9k$BBAQ~eKsu^2lW
zS74oAB&b6!X7!g}?dfd^sMGc{=OV9HtX|g{VaZF`<7P0w7&)mEu5vv<kNtl5$j?t`
zywnfqD(J?1uYg+SVkZ%J!y|4Ek(XW^<bPh$n^&LV(D`)cM#K1iGe)VNsk>Q%>m@2V
zb1v?^PM%n$It#jJ<?ZlP8FL5_w9|ls-Z+O13a7o{;iWN0d6_q1me~%4zv{z?m#+os
z6yb`D#V|bUQz7%xFn@F@Rq}|BtH%be#oFk^(O-^riBHX$W?&B8t+x*DmMhb%(~OpV
zzT3kgAa$2VeDQwWYeU5Q;B&tT*gfOByUl#heP1l`JR-jKYY;yHPyXgC#AWWm!iMI{
zhy?%UB*c&I4dP?xBVwV;z8!Ntcboi^K?HYksd-Bo^2(d=jGzYqe|h1Gr31yzgiF0I
zz}+4$Tv(QM!BI(WmbQbFwiO89HP9;-o0k9CfgcZbHWq%>|NMID^iv7x`EOzp-=IsI
zN|1SSbjxC=*jXgj?u|*xR2Tvaw1C4CGd^Kn3{d|rT~Mb7?sk%gyv7c6W)9hyY4aqC
z(DB$ADmNe$+aX!Fp<u#nkzX-O@*<|>jr$(QFZ{s1&c{N{$35iu)WbVt@NnUh5mpZX
zw5=8UtHkkj8D~~Zvj4Wy+xiXAo2#Y{+k0|-=GlgQl?~uoQ)q8x@NnrXSFSu7pPC17
zmve*4jo~bwDM#Wp%Xp7G<TYdNw5^))TqMTqLhg82qaa+LpE2j9U_;|1fn$tqF)TGL
zF$@?Kojj&VaYri)ne)Xy!yGUO?C@u;tivz{mMV98U9m;}UK!6&ePQJs)8GI+n3r`%
z`sLoj^2wPv+F{olZ!d8|?r2|lna&fy(n2NCTbEf_KGo3qlQ2?FWN3^ecoUkAKEh$U
z%T)yv39im*g&lzE6)HyWFvWRu*4kHlzIg&5<QpWEkEW*wV7?|kMcrKk{+@dF#rgg>
zt?!tWQ;mvcjufut_$24)C{gKr#_^KC)_Rff*Kkhj_pdUqLfUN&uO81dGfL!P!a3{c
z_BT>Db|vGtQY8<(WyE@@zgs5U{g}oh+=b((D_1n--8EigYxz*4_epvTVANcxXasd_
z^%PPYeV}5<`!i+syo3mB@F^TODZmgf?~!NntQQiDrQPVX-99`aZ64PiiPzc#ij5}E
zyZV1ckeirMv>2Y1ox8r?+sjf=cazaF$}5%NA9>YmyGLE!^<LPha+vv_7<WHI^&%DN
z^Ko`wol0{;fjLB8)VYql$7bmch)i9@U%7F%9q#6de67!q{_?Mza`1ln*YQVjZxeWY
zk-Fi5!?4er59~6eb*?WvSjKxsywmlRqg?m&VA6xEE0avgp1=BIZf>4lKDDV_zsL1b
zgC4q#&)bZaeEMZf?~%cmh6g0q>0S>HRNhP|?>#c;68NHT0(Sho;=a4hBA5MduW~wc
zW827M;upuu0CqRT^`Z6Rl>KF~d+0H-Vc4M?%N+MF`kV6}v;XSDd4Rk4wEU$63>2>V
zlh+b(x8;j3`zkVvUMno0lwnLM8&hWL!tyd@cIop6Ed+HsZ9F>n<u`&8GmDo1-2I3%
z`c7l<?*V{a_~NU7bJP{M2I@bVtS+97znsy<5D&t#Pm_nd#@g~jIEssl<fjvwGE^@2
z!Jo>p!;UN|R|a9OpNh(-<idjQeCg8Vt_9;J6(a0-L`oz^m<BmGeGG+SE8JT2|C_q&
z&b2c}?yK~&ey`l6MR?Z0yE>A_yS9i#*`m*8IqiQ<)nPmS-_t}NJ%T=l(=2ZlLPnRO
zc$ON7*DT{bQ;Ej<A>3)t&I^Mj{R`+QJQD%NJbjYTL!T7uxaaA$1n{ZtWjm}Js3SsU
zSLyL-1a^i!c9NGPBI%l?f*zsfD{}J_Uds7MxHqaecn>_+qm#4dn_3SVMSb^hH$OEt
z2z?FD3U^62pq=YDWAQgcLq9~mlkAypIVBY-*ckB}`t(e8(fE`mi#|p<ouNK%N`VJK
zG6vB0cRZ>Hp5IgEdg|5rWl=cjv_#rulv`S=7rwaZn1|fb2`M=K<1_)C$vy@T&LjJk
zb@cle>$;91YVKyHVPuS?BV)jeI?ejqKv>Zd>U6sm9?tgq0K1&eRZN*3Ysoo%vUyhC
zVVfCx<8D7&>94RjH6xbs9(hLlgm1B6t+rQW7S1D?1L~x?6`n8?-maB6*Kb+%?yq~^
zid@(K;5aCx0A(-8FRN_&!}b~ZW7UY-EXXY`?`lkT-LB0Oe&Gp=5gDq*CW(y*6Av*G
zLbiu@a|?Lu{KFH?{`=F7#z*;0YlCI_hJ~CABB;|}Yv#(HJ0HWq?za7{Sl!Pu$G!IJ
zhaXtDW5`d3zqLDZ{hu~RuI#b>>EPBO2Nte!_|E=T9-QDVCA;)lRnC~1mMCO7aHm-~
z_xy=A?$_*?v-%TlwAP^fE*eX@ljhiyyUncs@NMFe-SuP1t|A;n+68|K>hs*P%Cd9k
z&Ue>6mx<TEo&LRhcIkxi056*qY1vO10(N6Zx99}$HV2?BF5Bj=4k&vN)J{VWW!p*s
zPXV5}Wusa=srwfvjP&u7*eKI;`Kon}BwlO6PpxlZ%;=5isv(p0aemqc2)G&uDv1C}
z&ih0p?u<!FdjfxU>tQI#9V~+v`g}-y>boX>`&I;fk3Xq6dRhp6AJFU^?4eVibNdNH
zYef@6)q0BV(Ve^6chEWT_-Rd9Hw&JrZD5ol4S$bzoo?Qu5q|CSnA^wQ^kvCkxvTNN
zK!H528LPIpp{<S<^i4+#+iq_zsMDEm9W=7R>NfS2wPr4~)0KxBIdA=M9Iu|5zHVuR
zucd~EypLMYey3Y8EX-IV|MhF({~fUV3m^XB+v&c%^SN!~(o!Q7?>FQ*(J1{6h6I{+
z^8^8$2GF(D?3A_AP)kkOgBqUJrhuKyGq(IU_e%$vvk5zC1bz#RAk~&Xc4sF2HJ`WM
t`{1#K?<}^t(-U_-cRqJMcYvK~`aiTHb`>V@^SJ;3002ovPDHLkV1g1AS#JOU
index 36456fd820df7cf23fe9e61ec374cd486d5e276d..b42fd7475dbe89ff00dfcf875c45f76c839fab05
GIT binary patch
literal 9329
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
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;
--- 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");
 }
 
--- 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
@@ -348,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)
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/mobile/android/base/BrowserApp.java
+++ b/mobile/android/base/BrowserApp.java
@@ -873,19 +873,16 @@ abstract public class BrowserApp extends
 
         super.onDestroy();
     }
 
     @Override
     protected void initializeChrome() {
         super.initializeChrome();
 
-        mBrowserToolbar.updateBackButton(false);
-        mBrowserToolbar.updateForwardButton(false);
-
         mDoorHangerPopup.setAnchor(mBrowserToolbar.getDoorHangerAnchor());
 
         // Listen to margin changes to position the toolbar correctly
         if (isDynamicToolbarEnabled()) {
             refreshToolbarHeight();
             mLayerView.getLayerMarginsAnimator().showMargins(true);
             mLayerView.getLayerClient().setOnMetricsChangedListener(this);
         }
--- a/mobile/android/base/menu/GeckoMenuItem.java
+++ b/mobile/android/base/menu/GeckoMenuItem.java
@@ -137,21 +137,17 @@ public class GeckoMenuItem implements Me
 
     @Override
     public int getOrder() {
         return mOrder;
     }
 
     @Override
     public SubMenu getSubMenu() {
-        // For consistency with hasSubMenu.
-        if (mActionProvider == null) {
-            return mSubMenu;
-        }
-        return null;
+        return mSubMenu;
     }
 
     @Override
     public CharSequence getTitle() {
         return mTitle;
     }
 
     @Override
--- a/mobile/android/base/toolbar/BrowserToolbar.java
+++ b/mobile/android/base/toolbar/BrowserToolbar.java
@@ -48,17 +48,16 @@ import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.ContextMenu;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MenuInflater;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.ViewGroup.MarginLayoutParams;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 import android.view.animation.AlphaAnimation;
 import android.view.animation.Interpolator;
 import android.view.animation.TranslateAnimation;
 import android.view.inputmethod.InputMethodManager;
@@ -99,16 +98,21 @@ public class BrowserToolbar extends Geck
     public interface OnStartEditingListener {
         public void onStartEditing();
     }
 
     public interface OnStopEditingListener {
         public void onStopEditing();
     }
 
+    private enum ForwardButtonAnimation {
+        SHOW,
+        HIDE
+    }
+
     private View mUrlDisplayContainer;
     private ToolbarEditLayout mUrlEditLayout;
     private View mUrlBarEntry;
     private ImageView mUrlBarRightEdge;
     private GeckoTextView mTitle;
     private int mTitlePadding;
     private boolean mSiteSecurityVisible;
     private boolean mSwitchingTabs;
@@ -270,19 +274,21 @@ public class BrowserToolbar extends Geck
             mUrlBarRightEdge.getDrawable().setLevel(6000);
         }
 
         mTitle = (GeckoTextView) findViewById(R.id.url_bar_title);
         mTitlePadding = mTitle.getPaddingRight();
 
         mTabs = (ShapedButton) findViewById(R.id.tabs);
         mTabsCounter = (TabCounter) findViewById(R.id.tabs_counter);
+
         mBack = (ImageButton) findViewById(R.id.back);
+        setButtonEnabled(mBack, false);
         mForward = (ImageButton) findViewById(R.id.forward);
-        mForward.setEnabled(false); // initialize the forward button to not be enabled
+        setButtonEnabled(mForward, false);
 
         mFavicon = (ImageButton) findViewById(R.id.favicon);
         if (Build.VERSION.SDK_INT >= 11) {
             if (Build.VERSION.SDK_INT >= 16) {
                 mFavicon.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
             }
             mFavicon.setLayerType(View.LAYER_TYPE_HARDWARE, null);
         }
@@ -559,28 +565,28 @@ public class BrowserToolbar extends Geck
 
         if (tabs.isSelectedTab(tab)) {
             switch (msg) {
                 case TITLE:
                     updateTitle();
                     break;
 
                 case START:
-                    updateBackButton(canDoBack(tab));
-                    updateForwardButton(canDoForward(tab));
+                    updateBackButton(tab);
+                    updateForwardButton(tab);
                     if (tab.getState() == Tab.STATE_LOADING) {
                         setProgressVisibility(true);
                     }
                     setSecurityMode(tab.getSecurityMode());
                     setPageActionVisibility(mStop.getVisibility() == View.VISIBLE);
                     break;
 
                 case STOP:
-                    updateBackButton(canDoBack(tab));
-                    updateForwardButton(canDoForward(tab));
+                    updateBackButton(tab);
+                    updateForwardButton(tab);
                     setProgressVisibility(false);
                     // Reset the title in case we haven't navigated to a new page yet.
                     updateTitle();
                     break;
 
                 case SELECTED:
                 case LOAD_ERROR:
                     updateTitle();
@@ -588,18 +594,18 @@ public class BrowserToolbar extends Geck
                 case LOCATION_CHANGE:
                     // A successful location change will cause Tab to notify
                     // us of a title change, so we don't update the title here.
                     refresh();
                     break;
 
                 case CLOSED:
                 case ADDED:
-                    updateBackButton(canDoBack(tab));
-                    updateForwardButton(canDoForward(tab));
+                    updateBackButton(tab);
+                    updateForwardButton(tab);
                     break;
 
                 case FAVICON:
                     setFavicon(tab.getFavicon());
                     break;
 
                 case SECURITY_CHANGE:
                     setSecurityMode(tab.getSecurityMode());
@@ -1114,16 +1120,25 @@ public class BrowserToolbar extends Geck
             mActionItemBar.getChildAt(i).setEnabled(enabled);
         }
         ViewHelper.setAlpha(mActionItemBar, alpha);
 
         final Tab tab = Tabs.getInstance().getSelectedTab();
         if (tab != null) {
             setButtonEnabled(mBack, canDoBack(tab));
             setButtonEnabled(mForward, canDoForward(tab));
+
+            // Once the editing mode is finished, we have to ensure that the
+            // forward button slides away if necessary. This is because we might
+            // have only disabled it (without hiding it) when the toolbar entered
+            // editing mode.
+            if (!mIsEditing) {
+                animateForwardButton(canDoForward(tab) ?
+                                     ForwardButtonAnimation.SHOW : ForwardButtonAnimation.HIDE);
+            }
         }
     }
 
     public void setIsEditing(boolean isEditing) {
         mIsEditing = isEditing;
         mUrlEditLayout.setEnabled(isEditing);
     }
 
@@ -1367,87 +1382,103 @@ public class BrowserToolbar extends Geck
             // This alpha value has to be in sync with the one used
             // in updateChildrenForEditing().
             drawable.setAlpha(enabled ? 255 : 61);
         }
 
         button.setEnabled(enabled);
     }
 
-    public void updateBackButton(boolean enabled) {
-        setButtonEnabled(mBack, enabled);
+    public void updateBackButton(Tab tab) {
+        setButtonEnabled(mBack, canDoBack(tab));
     }
 
-    public void updateForwardButton(final boolean enabled) {
-        if (mForward.isEnabled() == enabled)
+    private void animateForwardButton(final ForwardButtonAnimation animation) {
+        // If the forward button is not visible, we must be
+        // in the phone UI.
+        if (mForward.getVisibility() != View.VISIBLE) {
             return;
+        }
 
-        // Save the state on the forward button so that we can skip animations
-        // when there's nothing to change
-        setButtonEnabled(mForward, enabled);
+        final boolean showing = (animation == ForwardButtonAnimation.SHOW);
 
-        if (mForward.getVisibility() != View.VISIBLE)
+        // if the forward button's margin is non-zero, this means it has already
+        // been animated to be visible¸ and vice-versa.
+        MarginLayoutParams fwdParams = (MarginLayoutParams) mForward.getLayoutParams();
+        if ((fwdParams.leftMargin > mDefaultForwardMargin && showing) ||
+            (fwdParams.leftMargin == mDefaultForwardMargin && !showing)) {
             return;
+        }
 
         // We want the forward button to show immediately when switching tabs
         mForwardAnim = new PropertyAnimator(mSwitchingTabs ? 10 : FORWARD_ANIMATION_DURATION);
         final int width = mForward.getWidth() / 2;
 
         mForwardAnim.addPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() {
             @Override
             public void onPropertyAnimationStart() {
-                if (!enabled) {
+                if (!showing) {
                     // Set the margin before the transition when hiding the forward button. We
                     // have to do this so that the favicon isn't clipped during the transition
-                    ViewGroup.MarginLayoutParams layoutParams =
-                        (ViewGroup.MarginLayoutParams)mUrlDisplayContainer.getLayoutParams();
+                    MarginLayoutParams layoutParams =
+                        (MarginLayoutParams) mUrlDisplayContainer.getLayoutParams();
                     layoutParams.leftMargin = 0;
 
                     // Do the same on the URL edit container
-                    layoutParams = (ViewGroup.MarginLayoutParams) mUrlEditLayout.getLayoutParams();
+                    layoutParams = (MarginLayoutParams) mUrlEditLayout.getLayoutParams();
                     layoutParams.leftMargin = 0;
 
                     requestLayout();
                     // Note, we already translated the favicon, site security, and text field
                     // in prepareForwardAnimation, so they should appear to have not moved at
                     // all at this point.
                 }
             }
 
             @Override
             public void onPropertyAnimationEnd() {
-                if (enabled) {
-                    ViewGroup.MarginLayoutParams layoutParams =
-                        (ViewGroup.MarginLayoutParams)mUrlDisplayContainer.getLayoutParams();
+                if (showing) {
+                    MarginLayoutParams layoutParams =
+                        (MarginLayoutParams) mUrlDisplayContainer.getLayoutParams();
                     layoutParams.leftMargin = mUrlBarViewOffset;
 
-                    layoutParams = (ViewGroup.MarginLayoutParams) mUrlEditLayout.getLayoutParams();
+                    layoutParams = (MarginLayoutParams) mUrlEditLayout.getLayoutParams();
                     layoutParams.leftMargin = mUrlBarViewOffset;
 
                     ViewHelper.setTranslationX(mTitle, 0);
                     ViewHelper.setTranslationX(mFavicon, 0);
                     ViewHelper.setTranslationX(mSiteSecurity, 0);
                 }
 
-                ViewGroup.MarginLayoutParams layoutParams =
-                    (ViewGroup.MarginLayoutParams)mForward.getLayoutParams();
-                layoutParams.leftMargin = mDefaultForwardMargin + (mForward.isEnabled() ? width : 0);
+                MarginLayoutParams layoutParams = (MarginLayoutParams) mForward.getLayoutParams();
+                layoutParams.leftMargin = mDefaultForwardMargin + (showing ? width : 0);
                 ViewHelper.setTranslationX(mForward, 0);
 
                 requestLayout();
                 mForwardAnim = null;
             }
         });
 
-        prepareForwardAnimation(mForwardAnim, enabled, width);
+        prepareForwardAnimation(mForwardAnim, animation, width);
         mForwardAnim.start();
     }
 
-    private void prepareForwardAnimation(PropertyAnimator anim, boolean enabled, int width) {
-        if (!enabled) {
+    public void updateForwardButton(Tab tab) {
+        final boolean enabled = canDoForward(tab);
+        if (mForward.isEnabled() == enabled)
+            return;
+
+        // Save the state on the forward button so that we can skip animations
+        // when there's nothing to change
+        setButtonEnabled(mForward, enabled);
+        animateForwardButton(enabled ? ForwardButtonAnimation.SHOW : ForwardButtonAnimation.HIDE);
+    }
+
+    private void prepareForwardAnimation(PropertyAnimator anim, ForwardButtonAnimation animation, int width) {
+        if (animation == ForwardButtonAnimation.HIDE) {
             anim.attach(mForward,
                       PropertyAnimator.Property.TRANSLATION_X,
                       -width);
             anim.attach(mForward,
                       PropertyAnimator.Property.ALPHA,
                       0);
             anim.attach(mTitle,
                       PropertyAnimator.Property.TRANSLATION_X,
@@ -1505,18 +1536,18 @@ public class BrowserToolbar extends Geck
 
     private void refresh() {
         Tab tab = Tabs.getInstance().getSelectedTab();
         if (tab != null) {
             setFavicon(tab.getFavicon());
             setProgressVisibility(tab.getState() == Tab.STATE_LOADING);
             setSecurityMode(tab.getSecurityMode());
             setPageActionVisibility(mStop.getVisibility() == View.VISIBLE);
-            updateBackButton(canDoBack(tab));
-            updateForwardButton(canDoForward(tab));
+            updateBackButton(tab);
+            updateForwardButton(tab);
 
             final boolean isPrivate = tab.isPrivate();
             setPrivateMode(isPrivate);
             mTabs.setPrivateMode(isPrivate);
             mTitle.setPrivateMode(isPrivate);
             mMenu.setPrivateMode(isPrivate);
             mMenuIcon.setPrivateMode(isPrivate);
             mUrlEditLayout.setPrivateMode(isPrivate);
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -7734,16 +7734,17 @@ let Reader = {
   _downloadDocument: function Reader_downloadDocument(url, callback) {
     // We want to parse those arbitrary pages safely, outside the privileged
     // context of chrome. We create a hidden browser element to fetch the
     // loaded page's document object then discard the browser element.
 
     let browser = document.createElement("browser");
     browser.setAttribute("type", "content");
     browser.setAttribute("collapsed", "true");
+    browser.setAttribute("disablehistory", "true");
 
     document.documentElement.appendChild(browser);
     browser.stop();
 
     browser.webNavigation.allowAuth = false;
     browser.webNavigation.allowImages = false;
     browser.webNavigation.allowJavascript = false;
     browser.webNavigation.allowMetaRedirects = true;
--- a/mobile/android/components/Snippets.js
+++ b/mobile/android/components/Snippets.js
@@ -9,18 +9,16 @@ Cu.import("resource://gre/modules/XPCOMU
 
 XPCOMUtils.defineLazyModuleGetter(this, "Home", "resource://gre/modules/Home.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "Task", "resource://gre/modules/Task.jsm");
 
 XPCOMUtils.defineLazyGetter(this, "gEncoder", function() { return new gChromeWin.TextEncoder(); });
 XPCOMUtils.defineLazyGetter(this, "gDecoder", function() { return new gChromeWin.TextDecoder(); });
 
-const SNIPPETS_ENABLED = Services.prefs.getBoolPref("browser.snippets.enabled");
-
 // URL to fetch snippets, in the urlFormatter service format.
 const SNIPPETS_UPDATE_URL_PREF = "browser.snippets.updateUrl";
 
 // URL to send stats data to metrics.
 const SNIPPETS_STATS_URL_PREF = "browser.snippets.statsUrl";
 
 // URL to fetch country code, a value that's cached and refreshed once per month.
 const SNIPPETS_GEO_URL_PREF = "browser.snippets.geoUrl";
@@ -295,29 +293,29 @@ function _httpGetRequest(url, callback) 
 
 function Snippets() {}
 
 Snippets.prototype = {
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsITimerCallback]),
   classID: Components.ID("{a78d7e59-b558-4321-a3d6-dffe2f1e76dd}"),
 
   observe: function(subject, topic, data) {
-    if (!SNIPPETS_ENABLED) {
+    if (!Services.prefs.getBoolPref("browser.snippets.enabled")) {
       return;
     }
     switch(topic) {
       case "profile-after-change":
         loadSnippetsFromCache();
         break;
     }
   },
 
   // By default, this timer fires once every 24 hours. See the "browser.snippets.updateInterval" pref.
   notify: function(timer) {
-    if (!SNIPPETS_ENABLED) {
+    if (!Services.prefs.getBoolPref("browser.snippets.enabled")) {
       return;
     }
     update();
     sendStats();
   }
 };
 
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([Snippets]);
--- a/mobile/locales/en-US/searchplugins/bing.xml
+++ b/mobile/locales/en-US/searchplugins/bing.xml
@@ -1,14 +1,14 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
 <ShortName>Bing</ShortName>
-<Image width="16" height="16">data:image/png;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAVpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8ysf97zf+24//F6f/F6f/F6f+K0/9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP+Z2P/////////w+f/F6f/F6f/i9P/////////T7v9Bt/8Vpv8Vpv8Vpv8Vpv/T7v/////w+f97zf8Vpv8Vpv8Vpv8Vpv9QvP/T7v/////w+f9Bt/8Vpv8Vpv97zf////////9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP/i9P/////i9P8Vpv8Vpv+24//////i9P8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv+K0/////////8Vpv8Vpv/F6f////////8krP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv+n3v/////w+f8Vpv8Vpv/F6f////////+n3v8krP8Vpv8Vpv8Vpv8Vpv8Vpv9tx/////////+Z2P8Vpv8Vpv/F6f/////////////i9P+K0/9QvP9QvP9tx//F6f////////+n3v8Vpv8Vpv8Vpv/F6f/////T7v+Z2P/i9P////////////////////+24/9QvP8Vpv8Vpv8Vpv8Vpv/F6f/////F6f8Vpv8Vpv8krP9QvP9QvP9Bt/8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv/F6f/////F6f8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv9Bt/9QvP9Bt/8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8AAHBsAABhdAAAbiAAAHJ0AABsaQAAdGkAACBDAABlbgAAUEEAAEVYAAAuQwAAOy4AAEU7AABBVAAAQ00AAC5W</Image>
+<Image width="16" height="16">data:image/png;base64,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</Image>
 <Url type="text/html" method="GET" template="http://www.bing.com/search">
   <Param name="q" value="{searchTerms}" />
   <MozParam name="pc" condition="defaultEngine" trueValue="MOZI" falseValue="" />
   <MozParam name="form" condition="defaultEngine" trueValue="MOZSBR" falseValue="" />
 </Url>
 <SearchForm>http://www.bing.com</SearchForm>
 </SearchPlugin>
--- a/toolkit/content/tests/widgets/test_videocontrols.html
+++ b/toolkit/content/tests/widgets/test_videocontrols.html
@@ -25,24 +25,25 @@ const videoHeight = 240;
 const videoDuration = 3.8329999446868896;
 
 const playButtonWidth = 28;
 const playButtonHeight = 28;
 const muteButtonWidth = 33;
 const muteButtonHeight = 28;
 const durationWidth = 34;
 const fullscreenButtonWidth = document.mozFullScreenEnabled ? 28 : 0;
-const scrubberWidth = videoWidth - playButtonWidth - muteButtonWidth - durationWidth - fullscreenButtonWidth;
+const volumeSliderWidth = 32;
+const scrubberWidth = videoWidth - playButtonWidth - durationWidth - muteButtonWidth - volumeSliderWidth - fullscreenButtonWidth;
 const scrubberHeight = 28;
 
 // Play button is on the bottom-left
 const playButtonCenterX = 0 + Math.round(playButtonWidth / 2);
 const playButtonCenterY = videoHeight - Math.round(playButtonHeight / 2);
-// Mute button is on the bottom-right before the full screen button
-const muteButtonCenterX = videoWidth - Math.round(muteButtonWidth / 2) - fullscreenButtonWidth;
+// Mute button is on the bottom-right before the full screen button and volume slider
+const muteButtonCenterX = videoWidth - Math.round(muteButtonWidth / 2) - volumeSliderWidth - fullscreenButtonWidth;
 const muteButtonCenterY = videoHeight - Math.round(muteButtonHeight / 2);
 // Scrubber bar is between the play and mute buttons. We don't need it's
 // X center, just the offset of its box.
 const scrubberOffsetX = 0 + playButtonWidth;
 const scrubberCenterY = videoHeight - Math.round(scrubberHeight / 2);
 
 function runTest(event) {
   ok(true, "----- test #" + testnum + " -----");
--- a/toolkit/content/widgets/videocontrols.css
+++ b/toolkit/content/widgets/videocontrols.css
@@ -87,17 +87,18 @@ html|span.statActivity[activity="playing
 html|span.statActivity[activity="ended"] > html|span.statActivityEnded,
 html|span.statActivity[seeking] > html|span.statActivitySeeking {
   display: inline;
 }
 
 .controlBar[size="hidden"],
 .controlBar[size="small"] .durationBox,
 .controlBar[size="small"] .durationLabel,
-.controlBar[size="small"] .positionLabel {
+.controlBar[size="small"] .positionLabel,
+.controlBar[size="small"] .volumeStack {
   visibility: collapse;
 }
 
 .controlBar[size="small"] .scrubberStack,
 .controlBar[size="small"] .backgroundBar,
 .controlBar[size="small"] .bufferBar,
 .controlBar[size="small"] .progressBar,
 .controlBar[size="small"] .scrubber {
--- a/toolkit/content/widgets/videocontrols.xml
+++ b/toolkit/content/widgets/videocontrols.xml
@@ -282,19 +282,20 @@
                     </stack>
                     <vbox class="durationBox">
                         <label class="positionLabel" role="presentation"/>
                         <label class="durationLabel" role="presentation"/>
                     </vbox>
                     <button class="muteButton"
                             mutelabel="&muteButton.muteLabel;"
                             unmutelabel="&muteButton.unmuteLabel;"/>
-                    <stack class="volumeStack" hidden="true" fadeout="true">
-                        <box class="volumeBackgroundBar"/>
-                        <scale class="volumeControl" orient="vertical" dir="reverse" movetoclick="true"/>
+                    <stack class="volumeStack">
+                      <box class="volumeBackground"/>
+                      <box class="volumeForeground" anonid="volumeForeground"/>
+                      <scale class="volumeControl" movetoclick="true"/>
                     </stack>
                     <button class="fullscreenButton"
                             enterfullscreenlabel="&fullscreenButton.enterfullscreenlabel;"
                             exitfullscreenlabel="&fullscreenButton.exitfullscreenlabel;"/>
                 </hbox>
             </vbox>
         </stack>
     </xbl:content>
@@ -308,17 +309,16 @@
 
             this.Utils = {
                 debug : false,
                 video : null,
                 videocontrols : null,
                 controlBar : null,
                 playButton : null,
                 muteButton : null,
-                volumeStack    : null,
                 volumeControl  : null,
                 durationLabel  : null,
                 positionLabel  : null,
                 scrubberThumb  : null,
                 scrubber       : null,
                 progressBar    : null,
                 bufferBar      : null,
                 statusOverlay  : null,
@@ -337,16 +337,23 @@
 
                 firstFrameShown : false,
                 timeUpdateCount : 0,
                 maxCurrentTimeSeen : 0,
                 _isAudioOnly : false,
                 get isAudioOnly() { return this._isAudioOnly; },
                 set isAudioOnly(val) {
                     this._isAudioOnly = val;
+                    if (this._isAudioOnly) {
+                        this.controlBar.setAttribute("audio-only", true);
+                    } else {
+                        this.controlBar.removeAttribute("audio-only");
+                    }
+                    this.adjustControlSize();
+
                     if (!this.isTopLevelSyntheticDocument)
                         return;
                     if (this._isAudioOnly) {
                         this.video.style.height = this._controlBarHeight + "px";
                         this.video.style.width = "66%";
                     } else {
                         this.video.style.removeProperty("height");
                         this.video.style.removeProperty("width");
@@ -457,16 +464,17 @@
                         this.setupStatusFader(true);
                     }
 
                     // An event handler for |onresize| should be added when bug 227495 is fixed.
                     this.controlBar.hidden = false;
                     this._playButtonWidth = this.playButton.clientWidth;
                     this._durationLabelWidth = this.durationLabel.clientWidth;
                     this._muteButtonWidth = this.muteButton.clientWidth;
+                    this._volumeControlWidth = this.volumeControl.clientWidth;
                     this._fullscreenButtonWidth = this.fullscreenButton.clientWidth;
                     this._controlBarHeight = this.controlBar.clientHeight;
                     this.controlBar.hidden = true;
                     this.adjustControlSize();
 
                     // Preserve Statistics when toggling fullscreen mode due to bug 714071.
                     if (XPCNativeWrapper.unwrap(this.video).mozMediaStatisticsShowing)
                         this.showStatistics(true);
@@ -549,19 +557,21 @@
                             // We throttle timechange events, so the thumb might not be
                             // exactly at the end when the video finishes.
                             this.showPosition(Math.round(this.video.currentTime * 1000),
                                               Math.round(this.video.duration * 1000));
                             this.startFadeIn(this.controlBar);
                             this.setupStatusFader();
                             break;
                         case "volumechange":
-                            var volume = this.video.muted ? 0 : Math.round(this.video.volume * 100);
+                            var volume = this.video.muted ? 0 : this.video.volume;
+                            var volumePercentage = Math.round(volume * 100);
                             this.setMuteButtonState(this.video.muted);
-                            this.volumeControl.value = volume;
+                            this.volumeControl.value = volumePercentage;
+                            this.volumeForeground.style.paddingRight = (1 - volume) * this._volumeControlWidth + "px";
                             break;
                         case "loadedmetadata":
                             this.adjustControlSize();
                             // If a <video> doesn't have any video data, treat it as <audio>
                             // and show the controls (they won't fade back out)
                             if (this.video instanceof HTMLVideoElement &&
                                 (this.video.videoWidth == 0 || this.video.videoHeight == 0)) {
                                 this.isAudioOnly = true;
@@ -849,31 +859,16 @@
                     var endTime = 0;
                     if (index >= 0) {
                         endTime = Math.round(buffered.end(index) * 1000);
                     }
                     this.bufferBar.max = duration;
                     this.bufferBar.value = endTime;
                 },
 
-                onVolumeMouseInOut : function (event) {
-                    let doc = this.video.ownerDocument;
-                    let win = doc.defaultView;
-                    if (this.isVideoWithoutAudioTrack() ||
-                        (this.isAudioOnly && this.isTopLevelSyntheticDocument)) {
-                        return;
-                    }
-                    // Ignore events caused by transitions between mute button and volumeStack,
-                    // or between nodes inside these two elements.
-                    if (this.isEventWithin(event, this.muteButton, this.volumeStack))
-                        return;
-                    var isMouseOver = (event.type == "mouseover");
-                    this.startFade(this.volumeStack, isMouseOver);
-                },
-
                 _controlsHiddenByTimeout : false,
                 _showControlsTimeout : 0,
                 SHOW_CONTROLS_TIMEOUT_MS: 500,
                 _showControlsFn : function () {
                     if (Utils.video.mozMatchesSelector("video:hover")) {
                         Utils.startFadeIn(Utils.controlBar, false);
                         Utils._showControlsTimeout = 0;
                         Utils._controlsHiddenByTimeout = false;
@@ -1355,34 +1350,41 @@
                   let doc = this.video.ownerDocument;
                   let win = doc.defaultView;
                   return doc.mozSyntheticDocument && win === win.top;
                 },
 
                 _playButtonWidth : 0,
                 _durationLabelWidth : 0,
                 _muteButtonWidth : 0,
+                _volumeControlWidth : 0,
                 _fullscreenButtonWidth : 0,
                 _controlBarHeight : 0,
                 _overlayPlayButtonHeight : 64,
                 _overlayPlayButtonWidth : 64,
+                _volumeStackMarginEnd : 8,
                 adjustControlSize : function adjustControlSize() {
                     let doc = this.video.ownerDocument;
-                    let isAudioOnly = this.isAudioOnly;
-                    if (isAudioOnly && !this.isTopLevelSyntheticDocument)
-                        return;
 
                     // The scrubber has |flex=1|, therefore |minScrubberWidth|
                     // was generated by empirical testing.
                     let minScrubberWidth = 25;
                     let minWidthAllControls = this._playButtonWidth +
                                               minScrubberWidth +
                                               this._durationLabelWidth +
                                               this._muteButtonWidth +
+                                              this._volumeControlWidth +
                                               this._fullscreenButtonWidth;
+
+                    let isAudioOnly = this.isAudioOnly;
+                    if (isAudioOnly) {
+                        // When the fullscreen button is hidden we add margin-end to the volume stack.
+                        minWidthAllControls -= this._fullscreenButtonWidth - this._volumeStackMarginEnd;
+                    }
+
                     let minHeightForControlBar = this._controlBarHeight;
                     let minWidthOnlyPlayPause = this._playButtonWidth + this._muteButtonWidth;
 
                     let videoHeight = isAudioOnly ? minHeightForControlBar : this.video.clientHeight;
                     let videoWidth = isAudioOnly ? minWidthAllControls : this.video.clientWidth;
 
                     if (this._overlayPlayButtonHeight > videoHeight || this._overlayPlayButtonWidth > videoWidth)
                         this.clickToPlay.hidden = true;
@@ -1395,48 +1397,48 @@
                     else if (videoWidth < minWidthAllControls)
                         size = "small";
                     this.controlBar.setAttribute("size", size);
                 },
 
                 init : function (binding) {
                     this.video = binding.parentNode;
                     this.videocontrols = binding;
-                    this.isAudioOnly = (this.video instanceof HTMLAudioElement);
 
                     this.statusIcon    = document.getAnonymousElementByAttribute(binding, "class", "statusIcon");
                     this.controlBar    = document.getAnonymousElementByAttribute(binding, "class", "controlBar");
                     this.playButton    = document.getAnonymousElementByAttribute(binding, "class", "playButton");
                     this.muteButton    = document.getAnonymousElementByAttribute(binding, "class", "muteButton");
                     this.volumeControl = document.getAnonymousElementByAttribute(binding, "class", "volumeControl");
-                    this.volumeStack   = document.getAnonymousElementByAttribute(binding, "class", "volumeStack");
                     this.progressBar   = document.getAnonymousElementByAttribute(binding, "class", "progressBar");
                     this.bufferBar     = document.getAnonymousElementByAttribute(binding, "class", "bufferBar");
                     this.scrubber      = document.getAnonymousElementByAttribute(binding, "class", "scrubber");
                     this.scrubberThumb = document.getAnonymousElementByAttribute(this.scrubber, "class", "scale-thumb");
                     this.durationLabel = document.getAnonymousElementByAttribute(binding, "class", "durationLabel");
                     this.positionLabel = document.getAnonymousElementByAttribute(binding, "class", "positionLabel");
                     this.statusOverlay = document.getAnonymousElementByAttribute(binding, "class", "statusOverlay");
                     this.statsOverlay  = document.getAnonymousElementByAttribute(binding, "class", "statsOverlay");
                     this.controlsSpacer     = document.getAnonymousElementByAttribute(binding, "class", "controlsSpacer");
                     this.clickToPlay        = document.getAnonymousElementByAttribute(binding, "class", "clickToPlay");
                     this.fullscreenButton   = document.getAnonymousElementByAttribute(binding, "class", "fullscreenButton");
+                    this.volumeForeground   = document.getAnonymousElementByAttribute(binding, "anonid", "volumeForeground");
 
                     this.statsTable       = document.getAnonymousElementByAttribute(binding, "class", "statsTable");
                     this.stats.filename   = document.getAnonymousElementByAttribute(binding, "class", "statFilename");
                     this.stats.size       = document.getAnonymousElementByAttribute(binding, "class", "statSize");
                     this.stats.activity   = document.getAnonymousElementByAttribute(binding, "class", "statActivity");
                     this.stats.volume     = document.getAnonymousElementByAttribute(binding, "class", "statVolume");
                     this.stats.readyState = document.getAnonymousElementByAttribute(binding, "class", "statReadyState");
                     this.stats.netState   = document.getAnonymousElementByAttribute(binding, "class", "statNetState");
                     this.stats.framesParsed    = document.getAnonymousElementByAttribute(binding, "class", "statFramesParsed");
                     this.stats.framesDecoded   = document.getAnonymousElementByAttribute(binding, "class", "statFramesDecoded");
                     this.stats.framesPresented = document.getAnonymousElementByAttribute(binding, "class", "statFramesPresented");
                     this.stats.framesPainted   = document.getAnonymousElementByAttribute(binding, "class", "statFramesPainted");
 
+                    this.isAudioOnly = (this.video instanceof HTMLAudioElement);
                     this.setupInitialState();
                     this.setupNewLoadState();
 
                     // Use the handleEvent() callback for all media events.
                     // The "error" event listener must capture, so that it can trap error events
                     // from the <source> children, which don't bubble.
                     for each (let event in this.videoEvents)
                         this.video.addEventListener(event, this, (event == "error") ? true : false);
@@ -1454,25 +1456,16 @@
 
                     addListener(this.muteButton, "command", this.toggleMute);
                     addListener(this.playButton, "command", this.togglePause);
                     addListener(this.fullscreenButton, "command", this.toggleFullscreen);
                     addListener(this.clickToPlay, "click", this.clickToPlayClickHandler);
                     addListener(this.controlsSpacer, "click", this.clickToPlayClickHandler);
                     addListener(this.controlsSpacer, "dblclick", this.toggleFullscreen);
 
-                    if (this.isAudioOnly) {
-                      this.controlBar.classList.add("audio");
-                    } else {
-                      addListener(this.muteButton, "mouseover", this.onVolumeMouseInOut);
-                      addListener(this.muteButton, "mouseout", this.onVolumeMouseInOut);
-                      addListener(this.volumeStack, "mouseover", this.onVolumeMouseInOut);
-                      addListener(this.volumeStack, "mouseout", this.onVolumeMouseInOut);
-                    }
-
                     addListener(this.videocontrols, "resizevideocontrols", this.adjustControlSize);
                     addListener(this.videocontrols, "transitionend", this.onTransitionEnd);
                     addListener(this.video.ownerDocument, "mozfullscreenchange", this.onFullscreenChange);
                     addListener(this.video, "keypress", this.keyHandler);
 
                     this.log("--- videocontrols initialized ---");
                 }
             };
@@ -1534,21 +1527,22 @@
                         <spacer flex="1"/>
                         <button class="playButton"
                                 playlabel="&playButton.playLabel;"
                                 pauselabel="&playButton.pauseLabel;"/>
                         <spacer flex="1"/>
                         <button class="muteButton"
                                 mutelabel="&muteButton.muteLabel;"
                                 unmutelabel="&muteButton.unmuteLabel;"/>
-                        <stack class="volumeStack" hidden="true" fadeout="true">
-                            <box class="volumeBackgroundBar"/>
-                            <scale class="volumeControl" orient="vertical" dir="reverse" movetoclick="true"/>
+                        <stack class="volumeStack">
+                          <box class="volumeBackground"/>
+                          <box class="volumeForeground" anonid="volumeForeground"/>
+                          <scale class="volumeControl" movetoclick="true"/>
                         </stack>
-                    </hbox>
+                      </hbox>
                     <stack class="scrubberStack" flex="1">
                         <box class="backgroundBar"/>
                         <progressmeter class="bufferBar"/>
                         <progressmeter class="progressBar" max="10000"/>
                         <scale class="scrubber" movetoclick="true"/>
                     </stack>
                     <vbox class="durationBox">
                         <label class="positionLabel" role="presentation"/>
--- a/toolkit/devtools/server/actors/tracer.js
+++ b/toolkit/devtools/server/actors/tracer.js
@@ -9,16 +9,35 @@ const { Cu } = require("chrome");
 const { reportException } =
   Cu.import("resource://gre/modules/devtools/DevToolsUtils.jsm", {}).DevToolsUtils;
 
 const { DebuggerServer } = Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
 
 Cu.import("resource://gre/modules/jsdebugger.jsm");
 addDebuggerToGlobal(this);
 
+// TODO bug 943125: remove this polyfill and use Debugger.Frame.prototype.depth
+// once it is implemented.
+if (!Object.getOwnPropertyDescriptor(Debugger.Frame.prototype, "depth")) {
+  Debugger.Frame.prototype._depth = null;
+  Object.defineProperty(Debugger.Frame.prototype, "depth", {
+    get: function () {
+      if (this._depth === null) {
+        if (!this.older) {
+          this._depth = 0;
+        } else {
+          this._depth = 1 + this.older.depth;
+        }
+      }
+
+      return this._depth;
+    }
+  });
+}
+
 const { setTimeout } = require("sdk/timers");
 
 /**
  * The number of milliseconds we should buffer frame enter/exit packets before
  * sending.
  */
 const BUFFER_SEND_DELAY = 50;
 
@@ -39,17 +58,18 @@ const TRACE_TYPES = new Set([
   "time",
   "return",
   "throw",
   "yield",
   "name",
   "location",
   "callsite",
   "parameterNames",
-  "arguments"
+  "arguments",
+  "depth"
 ]);
 
 /**
  * Creates a TraceActor. TraceActor provides a stream of function
  * call/return packets to a remote client gathering a full trace.
  */
 function TraceActor(aConn, aParentActor)
 {
@@ -64,16 +84,17 @@ function TraceActor(aConn, aParentActor)
   this._requestsForTraceType = Object.create(null);
   for (let type of TRACE_TYPES) {
     this._requestsForTraceType[type] = 0;
   }
 
   this._sequence = 0;
   this._bufferSendTimer = null;
   this._buffer = [];
+  this.onExitFrame = this.onExitFrame.bind(this);
 
   this.global = aParentActor.window.wrappedJSObject;
 }
 
 TraceActor.prototype = {
   actorPrefix: "trace",
 
   get attached() { return this._attached; },
@@ -343,29 +364,38 @@ TraceActor.prototype = {
       for (let arg of aFrame.arguments) {
         if (i++ > MAX_ARGUMENTS) {
           break;
         }
         packet.arguments.push(createValueGrip(arg, true));
       }
     }
 
-    aFrame.onPop = this.onExitFrame.bind(this);
+    if (this._requestsForTraceType.depth) {
+      packet.depth = aFrame.depth;
+    }
+
+    const onExitFrame = this.onExitFrame;
+    aFrame.onPop = function (aCompletion) {
+      onExitFrame(this, aCompletion);
+    };
 
     this._send(packet);
   },
 
   /**
    * Called by the engine when a frame is exited. Sends an unsolicited packet to
    * the client carrying requested trace information.
    *
+   * @param Debugger.Frame aFrame
+   *        The Debugger.Frame that was just exited.
    * @param aCompletion object
    *        The debugger completion value for the frame.
    */
-  onExitFrame: function(aCompletion) {
+  onExitFrame: function(aFrame, aCompletion) {
     let packet = {
       type: "exitedFrame",
       sequence: this._sequence++,
     };
 
     if (!aCompletion) {
       packet.why = "terminated";
     } else if (aCompletion.hasOwnProperty("return")) {
@@ -375,16 +405,20 @@ TraceActor.prototype = {
     } else {
       packet.why = "throw";
     }
 
     if (this._requestsForTraceType.time) {
       packet.time = Date.now() - this._startTime;
     }
 
+    if (this._requestsForTraceType.depth) {
+      packet.depth = aFrame.depth;
+    }
+
     if (aCompletion) {
       if (this._requestsForTraceType.return) {
         packet.return = createValueGrip(aCompletion.return, true);
       }
 
       if (this._requestsForTraceType.throw) {
         packet.throw = createValueGrip(aCompletion.throw, true);
       }
new file mode 100644
--- /dev/null
+++ b/toolkit/devtools/server/tests/unit/test_trace_actor-08.js
@@ -0,0 +1,125 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Test the "depth" trace type.
+ */
+
+let { defer } = devtools.require("sdk/core/promise");
+
+var gDebuggee;
+var gClient;
+var gTraceClient;
+
+function run_test()
+{
+  initTestTracerServer();
+  gDebuggee = addTestGlobal("test-tracer-actor");
+  gClient = new DebuggerClient(DebuggerServer.connectPipe());
+  gClient.connect(function() {
+    attachTestTab(gClient, "test-tracer-actor", function(aResponse, aTabClient) {
+      gClient.attachTracer(aResponse.traceActor, function(aResponse, aTraceClient) {
+        gTraceClient = aTraceClient;
+        test_frame_depths();
+      });
+    });
+  });
+  do_test_pending();
+}
+
+function test_frame_depths()
+{
+  const tracesStopped = defer();
+  gClient.addListener("traces", (aEvent, { traces }) => {
+    for (let t of traces) {
+      check_trace(t);
+    }
+    tracesStopped.resolve();
+  });
+
+  start_trace()
+    .then(eval_code)
+    .then(() => tracesStopped.promise)
+    .then(stop_trace)
+    .then(function() {
+      finishClient(gClient);
+    }).then(null, error => {
+      do_check_true(false, "Should not get an error, got: " + error);
+    });
+}
+
+function start_trace()
+{
+  let deferred = defer();
+  gTraceClient.startTrace(["depth", "name"], null, function() { deferred.resolve(); });
+  return deferred.promise;
+}
+
+function eval_code()
+{
+  gDebuggee.eval("(" + function iife() {
+    function first() {
+      second();
+    }
+
+    function second() {
+      third();
+    }
+
+    function third() {
+    }
+
+    first();
+  } + ")()");
+}
+
+function stop_trace()
+{
+  let deferred = defer();
+  gTraceClient.stopTrace(null, function() { deferred.resolve(); });
+  return deferred.promise;
+}
+
+function check_trace({ sequence, depth, name })
+{
+  switch(sequence) {
+  case 0:
+    do_check_eq(name, "(eval)");
+    // Fall through
+  case 9:
+    do_check_eq(depth, 0);
+    break;
+
+  case 1:
+    do_check_eq(name, "iife");
+    // Fall through
+  case 8:
+    do_check_eq(depth, 1);
+    break;
+
+  case 2:
+    do_check_eq(name, "first");
+    // Fall through
+  case 7:
+    do_check_eq(depth, 2);
+    break;
+
+  case 3:
+    do_check_eq(name, "second");
+    // Fall through
+  case 6:
+    do_check_eq(depth, 3);
+    break;
+
+  case 4:
+    do_check_eq(name, "third");
+    // Fall through
+  case 5:
+    do_check_eq(depth, 4);
+    break;
+
+  default:
+    // Should have covered all sequences.
+    do_check_true(false);
+  }
+}
--- a/toolkit/devtools/server/tests/unit/xpcshell.ini
+++ b/toolkit/devtools/server/tests/unit/xpcshell.ini
@@ -184,9 +184,10 @@ reason = bug 820380
 [test_add_actors.js]
 [test_trace_actor-01.js]
 [test_trace_actor-02.js]
 [test_trace_actor-03.js]
 [test_trace_actor-04.js]
 [test_trace_actor-05.js]
 [test_trace_actor-06.js]
 [test_trace_actor-07.js]
+[test_trace_actor-08.js]
 [test_ignore_caught_exceptions.js]
--- a/toolkit/themes/osx/global/jar.mn
+++ b/toolkit/themes/osx/global/jar.mn
@@ -169,18 +169,18 @@ toolkit.jar:
   skin/classic/global/media/fullscreenButton@2x.png                  (media/fullscreenButton@2x.png)
   skin/classic/global/media/scrubberThumb.png                        (media/scrubberThumb.png)
   skin/classic/global/media/scrubberThumb@2x.png                     (media/scrubberThumb@2x.png)
   skin/classic/global/media/scrubberThumbWide.png                    (media/scrubberThumbWide.png)
   skin/classic/global/media/scrubberThumbWide@2x.png                 (media/scrubberThumbWide@2x.png)
   skin/classic/global/media/error.png                                (media/error.png)
   skin/classic/global/media/throbber.png                             (media/throbber.png)
   skin/classic/global/media/stalled.png                              (media/stalled.png)
-  skin/classic/global/media/volumeThumb.png                          (media/volumeThumb.png)
-  skin/classic/global/media/volumeThumb@2x.png                       (media/volumeThumb@2x.png)
+  skin/classic/global/media/volume-empty.png                         (media/volume-empty.png)
+  skin/classic/global/media/volume-full.png                          (media/volume-full.png)
   skin/classic/global/media/clicktoplay-bgtexture.png                (media/clicktoplay-bgtexture.png)
   skin/classic/global/media/videoClickToPlayButton.svg               (media/videoClickToPlayButton.svg)
   skin/classic/global/menu/menu-arrow.png                            (menu/menu-arrow.png)
   skin/classic/global/menu/menu-arrow@2x.png                         (menu/menu-arrow@2x.png)
   skin/classic/global/menu/menu-check.png                            (menu/menu-check.png)
   skin/classic/global/menu/menu-check@2x.png                         (menu/menu-check@2x.png)
   skin/classic/global/scale/scale-tray-horiz.gif                     (scale/scale-tray-horiz.gif)
   skin/classic/global/scale/scale-tray-vert.gif                      (scale/scale-tray-vert.gif)
--- a/toolkit/themes/osx/global/media/videocontrols.css
+++ b/toolkit/themes/osx/global/media/videocontrols.css
@@ -54,54 +54,57 @@
 .muteButton[muted] {
   background-image: url(chrome://global/skin/media/unmuteButton.png);
 }
 
 .muteButton[noAudio] {
   background-image: url(chrome://global/skin/media/noAudio.png);
 }
 
+.muteButton[noAudio] + .volumeStack {
+  display: none;
+}
+
 .fullscreenButton {
   background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton.png"), 0, 16, 16, 0);
 }
 
 .fullscreenButton[fullscreened] {
   background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton.png"), 0, 32, 16, 16);
 }
 
-.volumeStack {
-  width: 28px;
-  height: 70px;
-  background-color: rgba(35,31,32,.74);
-  /* use negative margin to place stack over the mute button to its left. */
-  margin: -70px 3px 28px -31px;
-  overflow: hidden; /* crop it when sliding down, don't grow the control bar */
-  position: relative; /* Trick to work around negative margin interfering with dragging the thumb. */
-  padding-top: 6px;
+.volumeControl {
+  width: 32px;
+  opacity: 0;
 }
 
-.volumeControl {
-  min-height: 64px;
+.volumeBackground,
+.volumeForeground {
+  background-repeat: no-repeat;
+  background-position: center;
+  width: 32px;
 }
 
-/* .scale-thumb is an element inside the <scale> implementation. */
-.volumeControl .scale-thumb {
-  /* Override the default thumb appearance with a custom image. */
-  -moz-appearance: none;
-  background: url(chrome://global/skin/media/volumeThumb.png) no-repeat center;
-  border: none;
-  min-width: 20px;
-  min-height: 10px;
+.volumeBackground {
+  background-image: url(chrome://global/skin/media/volume-empty.png);
+}
+
+.volumeForeground {
+  background-image: url(chrome://global/skin/media/volume-full.png);
+  background-clip: content-box;
 }
 
-.volumeBackgroundBar {
-  /* margin left/right: make bar 8px wide (control width = 28, minus 2 * 10 margin) */
-  margin: 0 10px;
-  background-color: rgba(255,255,255,.75);
-  border-radius: 2.5px;
+.controlBar[audio-only] > .volumeStack {
+  /* This value is duplicated in the videocontrols.xml adjustControlSize function. */
+  -moz-margin-end: 8px;
+}
+
+.volumeControl .scale-thumb {
+  min-width: 0;
+  opacity: 0;
 }
 
 .durationBox {
   -moz-box-pack: center;
 }
 
 .durationLabel {
   margin-left: -22px; /* 1/2 of scrubber thumb width, for overhang. */
@@ -332,20 +335,16 @@ html|table {
   .fullscreenButton {
     background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton@2x.png"), 0, 32, 32, 0);
     background-size: 16px 16px;
   }
   .fullscreenButton[fullscreened] {
     background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton@2x.png"), 0, 64, 32, 32);
     background-size: 16px 16px;
   }
-  .volumeControl .scale-thumb {
-    background-image: url(chrome://global/skin/media/volumeThumb@2x.png);
-    background-size: 20px 10px;
-  }
   .timeThumb {
     background-image: url(chrome://global/skin/media/scrubberThumb@2x.png);
     background-size: 33px 28px;
   }
   .timeThumb[showhours="true"] {
     background-image: url(chrome://global/skin/media/scrubberThumbWide@2x.png);
     background-size: 45px 28px;
   }
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..589abfbd5816bb3ec179a3fdf6530106356dba8e
GIT binary patch
literal 295
zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYelw^r(L`iUdT1k0gQ7VIDN`6wR
zf@f}GdTLN=VoGJ<$y6JlqLZF3jv*DdlK%YvZ-3Z<Y1*-4ZdJD>`Hrv!tU2xE+<j((
z4pXA`iXU841Qtw6UFRX@>U`8sNR(BCZJ~Ndj`*Y+6VFVBb_;2N|4o~gKje1uViXqW
zc4`)2TgUX#U!_h>Ao`MyIKxM6joE@;*%yty4Geh<7%UxxGz}XM`0f&Oarnd3QLfOL
z$zZ51R4-;Cc<Bt|jRWN>WmdCdOoGgo%w+!1m>ST-V{@`pWUJR9*^G-P7<A2fI4pan
ql^!hANIM|h%GSdiE6dCx!SL>yqE+B(ySG43F?hQAxvX<aXaWGv&|&KU
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4398a569b8c76d0b42fd2900abfcdec1747a0483
GIT binary patch
literal 297
zc$@(#0oMMBP)<h;3K|Lk000e1NJLTq001BW000mO1^@s6cL04^0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy%Sl8*RCwBA{Qv(y!$1O-&!0cj+s<$x
zHh^MX#!sI<(aIt-B#S`U3M!5g<SbOO%oWL^XsFmpVl<Ky0?0w=3HA~YFfua2&BW$Y
zT;jMKzy`#>pzLWt^9_I&U<*P<BE|4JKoshm-B7WsK&*vD10yXQ07?U|&=hFVGfOZr
z3@`vWKoXXipx`Dw9e^tlasu&pD0?O}jhNFa4PXP`k=W^Ia?wcHkY*u3D)2yZR0K83
v0crqCw4&IY-VVS8qL3ZNIMCHGK!5=N%h^ktibA+A00000NkvXXu0mjf898vG
deleted file mode 100644
index 5ac7cdd84dd9c65ce0ceb532f7b98d2cfd7bdb40..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 31d8073c33173f154b65f039b817b2b12c625e07..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/toolkit/themes/windows/global/jar.mn
+++ b/toolkit/themes/windows/global/jar.mn
@@ -158,17 +158,18 @@ toolkit.jar:
         skin/classic/global/media/muteButton.png                 (media/muteButton.png)
         skin/classic/global/media/unmuteButton.png               (media/unmuteButton.png)
         skin/classic/global/media/noAudio.png                    (media/noAudio.png)
         skin/classic/global/media/fullscreenButton.png           (media/fullscreenButton.png)
         skin/classic/global/media/scrubberThumb.png              (media/scrubberThumb.png)
         skin/classic/global/media/scrubberThumbWide.png          (media/scrubberThumbWide.png)
         skin/classic/global/media/throbber.png                   (media/throbber.png)
         skin/classic/global/media/stalled.png                    (media/stalled.png)
-        skin/classic/global/media/volumeThumb.png                (media/volumeThumb.png)
+        skin/classic/global/media/volume-empty.png               (media/volume-empty.png)
+        skin/classic/global/media/volume-full.png                (media/volume-full.png)
         skin/classic/global/media/error.png                      (media/error.png)
         skin/classic/global/media/clicktoplay-bgtexture.png      (media/clicktoplay-bgtexture.png)
         skin/classic/global/media/videoClickToPlayButton.svg     (media/videoClickToPlayButton.svg)
         skin/classic/global/printpreview/arrow-left.png          (printpreview/arrow-left.png)
         skin/classic/global/printpreview/arrow-left-end.png      (printpreview/arrow-left-end.png)
         skin/classic/global/printpreview/arrow-right.png         (printpreview/arrow-right.png)
         skin/classic/global/printpreview/arrow-right-end.png     (printpreview/arrow-right-end.png)
         skin/classic/global/radio/radio-check.gif                (radio/radio-check.gif)
@@ -339,17 +340,18 @@ toolkit.jar:
         skin/classic/aero/global/media/muteButton.png                    (media/muteButton.png)
         skin/classic/aero/global/media/unmuteButton.png                  (media/unmuteButton.png)
         skin/classic/aero/global/media/noAudio.png                       (media/noAudio.png)
         skin/classic/aero/global/media/fullscreenButton.png              (media/fullscreenButton.png)
         skin/classic/aero/global/media/scrubberThumb.png                 (media/scrubberThumb.png)
         skin/classic/aero/global/media/scrubberThumbWide.png             (media/scrubberThumbWide.png)
         skin/classic/aero/global/media/throbber.png                      (media/throbber.png)
         skin/classic/aero/global/media/stalled.png                       (media/stalled.png)
-        skin/classic/aero/global/media/volumeThumb.png                   (media/volumeThumb.png)
+        skin/classic/aero/global/media/volume-empty.png                  (media/volume-empty.png)
+        skin/classic/aero/global/media/volume-full.png                   (media/volume-full.png)
         skin/classic/aero/global/media/error.png                         (media/error.png)
         skin/classic/aero/global/media/clicktoplay-bgtexture.png         (media/clicktoplay-bgtexture.png)
         skin/classic/aero/global/media/videoClickToPlayButton.svg        (media/videoClickToPlayButton.svg)
         skin/classic/aero/global/printpreview/arrow-left.png             (printpreview/arrow-left-aero.png)
         skin/classic/aero/global/printpreview/arrow-left-end.png         (printpreview/arrow-left-end-aero.png)
         skin/classic/aero/global/printpreview/arrow-right.png            (printpreview/arrow-right-aero.png)
         skin/classic/aero/global/printpreview/arrow-right-end.png        (printpreview/arrow-right-end-aero.png)
         skin/classic/aero/global/radio/radio-check.gif                   (radio/radio-check.gif)
--- a/toolkit/themes/windows/global/media/videocontrols.css
+++ b/toolkit/themes/windows/global/media/videocontrols.css
@@ -54,54 +54,57 @@
 .muteButton[muted] {
   background-image: url(chrome://global/skin/media/unmuteButton.png);
 }
 
 .muteButton[noAudio] {
   background-image: url(chrome://global/skin/media/noAudio.png);
 }
 
+.muteButton[noAudio] + .volumeStack {
+  display: none;
+}
+
 .fullscreenButton {
   background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton.png"), 0, 16, 16, 0);
 }
 
 .fullscreenButton[fullscreened] {
   background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton.png"), 0, 32, 16, 16);
 }
 
-.volumeStack {
-  width: 28px;
-  height: 70px;
-  background-color: rgba(35,31,32,.74);
-  /* use negative margin to place stack over the mute button to its left. */
-  margin: -70px 3px 28px -31px;
-  overflow: hidden; /* crop it when sliding down, don't grow the control bar */
-  position: relative; /* Trick to work around negative margin interfering with dragging the thumb. */
-  padding-top: 6px;
+.volumeControl {
+  width: 32px;
+  opacity: 0;
 }
 
-.volumeControl {
-  min-height: 64px;
+.volumeBackground,
+.volumeForeground {
+  background-repeat: no-repeat;
+  background-position: center;
+  width: 32px;
 }
 
-/* .scale-thumb is an element inside the <scale> implementation. */
-.volumeControl .scale-thumb {
-  /* Override the default thumb appearance with a custom image. */
-  -moz-appearance: none;
-  background: url(chrome://global/skin/media/volumeThumb.png) no-repeat center;
-  border: none;
-  min-width: 20px;
-  min-height: 10px;
+.volumeBackground {
+  background-image: url(chrome://global/skin/media/volume-empty.png);
+}
+
+.volumeForeground {
+  background-image: url(chrome://global/skin/media/volume-full.png);
+  background-clip: content-box;
 }
 
-.volumeBackgroundBar {
-  /* margin left/right: make bar 8px wide (control width = 28, minus 2 * 10 margin) */
-  margin: 0 10px;
-  background-color: rgba(255,255,255,.75);
-  border-radius: 2.5px;
+.controlBar[audio-only] > .volumeStack {
+  /* This value is duplicated in the videocontrols.xml adjustControlSize function. */
+  -moz-margin-end: 8px;
+}
+
+.volumeControl .scale-thumb {
+  min-width: 0;
+  opacity: 0;
 }
 
 .durationBox {
   -moz-box-pack: center;
 }
 
 .durationLabel {
   margin-left: -22px; /* 1/2 of scrubber thumb width, for overhang. */
@@ -165,17 +168,18 @@
 
 .scrubber .scale-slider {
   /* abs(margin-top) + margin-bottom + bar height == timeThumb height */
   margin-top: -10px;
   margin-bottom: 10px;
 }
 
 /* .scale-thumb is an element inside the <scale> implementation. */
-.scrubber .scale-thumb {
+.scrubber .scale-thumb,
+.volumeControl .scale-thumb {
   /* Override the default thumb appearance with a custom image. */
   -moz-appearance: none;
   background: transparent;
   border: none;
 }
 
 .timeThumb {
   background: url(chrome://global/skin/media/scrubberThumb.png) no-repeat center;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..589abfbd5816bb3ec179a3fdf6530106356dba8e
GIT binary patch
literal 295
zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYelw^r(L`iUdT1k0gQ7VIDN`6wR
zf@f}GdTLN=VoGJ<$y6JlqLZF3jv*DdlK%YvZ-3Z<Y1*-4ZdJD>`Hrv!tU2xE+<j((
z4pXA`iXU841Qtw6UFRX@>U`8sNR(BCZJ~Ndj`*Y+6VFVBb_;2N|4o~gKje1uViXqW
zc4`)2TgUX#U!_h>Ao`MyIKxM6joE@;*%yty4Geh<7%UxxGz}XM`0f&Oarnd3QLfOL
z$zZ51R4-;Cc<Bt|jRWN>WmdCdOoGgo%w+!1m>ST-V{@`pWUJR9*^G-P7<A2fI4pan
ql^!hANIM|h%GSdiE6dCx!SL>yqE+B(ySG43F?hQAxvX<aXaWGv&|&KU
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4398a569b8c76d0b42fd2900abfcdec1747a0483
GIT binary patch
literal 297
zc$@(#0oMMBP)<h;3K|Lk000e1NJLTq001BW000mO1^@s6cL04^0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy%Sl8*RCwBA{Qv(y!$1O-&!0cj+s<$x
zHh^MX#!sI<(aIt-B#S`U3M!5g<SbOO%oWL^XsFmpVl<Ky0?0w=3HA~YFfua2&BW$Y
zT;jMKzy`#>pzLWt^9_I&U<*P<BE|4JKoshm-B7WsK&*vD10yXQ07?U|&=hFVGfOZr
z3@`vWKoXXipx`Dw9e^tlasu&pD0?O}jhNFa4PXP`k=W^Ia?wcHkY*u3D)2yZR0K83
v0crqCw4&IY-VVS8qL3ZNIMCHGK!5=N%h^ktibA+A00000NkvXXu0mjf898vG
deleted file mode 100644
index 5ac7cdd84dd9c65ce0ceb532f7b98d2cfd7bdb40..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001