Merge f-t to m-c
authorPhil Ringnalda <philringnalda@gmail.com>
Mon, 20 Jan 2014 18:42:07 -0800
changeset 180364 cdc0ab2c0cbad488f517812a3cf1694eeddaa84f
parent 180355 99715b654c8728ffe179264009953df529da27cf (current diff)
parent 180363 cf528dfe5797ed7498c958c30da274051b9025bd (diff)
child 180386 a3463896324c8a3469f8aa3068de1110f43c1f73
child 180402 9331d1b011c42fff21a7aadc151a24a124799ca0
child 180413 6427c85ecddd16f66365073cadd56e2b1a61c482
child 180453 64e3364098fd3430f434593505e5f9366e2eaf90
push id3343
push userffxbld
push dateMon, 17 Mar 2014 21:55:32 +0000
treeherdermozilla-beta@2f7d3415f79f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone29.0a1
first release with
nightly linux32
cdc0ab2c0cba / 29.0a1 / 20140121030204 / files
nightly linux64
cdc0ab2c0cba / 29.0a1 / 20140121030204 / files
nightly mac
cdc0ab2c0cba / 29.0a1 / 20140121030204 / files
nightly win32
cdc0ab2c0cba / 29.0a1 / 20140121030204 / files
nightly win64
cdc0ab2c0cba / 29.0a1 / 20140121030204 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge f-t to m-c
toolkit/themes/windows/global/arrow/panelarrow-horizontal-white.png
toolkit/themes/windows/global/arrow/panelarrow-vertical-white.png
--- a/browser/devtools/inspector/test/browser_inspector_bug_958456_highlight_comments.js
+++ b/browser/devtools/inspector/test/browser_inspector_bug_958456_highlight_comments.js
@@ -31,31 +31,41 @@ function test() {
   }, true);
   content.location = TEST_PAGE;
 }
 
 function startTests() {
   Task.spawn(function() {
     yield prepareHighlighter();
 
+    // Highlighter should be shown on this element
     yield hoverElement("#id1");
     assertHighlighterShownOn("#id1");
 
+    // But not over a comment
     yield hoverComment();
     assertHighlighterHidden();
 
+    // It should be shown again when coming back to the same element tough
+    yield hoverElement("#id1");
+    assertHighlighterShownOn("#id1");
+
+    // Shown here too
     yield hoverElement("#id2");
     assertHighlighterShownOn("#id2");
 
+    // But not over a script tag
     yield hoverElement("script");
     assertHighlighterHidden();
 
+    // Shown here
     yield hoverElement("#id3");
     assertHighlighterShownOn("#id3");
 
+    // But not over a hidden element
     yield hoverElement("#id4");
     assertHighlighterHidden();
   }).then(null, Cu.reportError).then(finishTest);
 }
 
 function finishTest() {
   doc = inspector = markupView = null;
   gBrowser.removeCurrentTab();
--- a/browser/devtools/webconsole/test/browser_webconsole_bug_653531_highlighter_console_helper.js
+++ b/browser/devtools/webconsole/test/browser_webconsole_bug_653531_highlighter_console_helper.js
@@ -2,18 +2,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 // Tests that the $0 console helper works as intended.
 
 let inspector, h1;
 
-function createDocument()
-{
+function createDocument() {
   let doc = content.document;
   let div = doc.createElement("div");
   h1 = doc.createElement("h1");
   let p1 = doc.createElement("p");
   let p2 = doc.createElement("p");
   let div2 = doc.createElement("div");
   let p3 = doc.createElement("p");
   doc.title = "Inspector Tree Selection Test";
@@ -37,83 +36,65 @@ function createDocument()
   div.appendChild(p1);
   div.appendChild(p2);
   div2.appendChild(p3);
   doc.body.appendChild(div);
   doc.body.appendChild(div2);
   setupHighlighterTests();
 }
 
-function setupHighlighterTests()
-{
+function setupHighlighterTests() {
   ok(h1, "we have the header node");
   openInspector(runSelectionTests);
 }
 
-function runSelectionTests(aInspector)
-{
+function runSelectionTests(aInspector) {
   inspector = aInspector;
+
   inspector.toolbox.startPicker();
   inspector.toolbox.once("picker-started", () => {
-    EventUtils.synthesizeMouse(h1, 2, 2, {type: "mousemove"}, content);
-    inspector.toolbox.once("picker-node-hovered", () => {
-      executeSoon(performTestComparisons);
+    info("Picker mode started, now clicking on H1 to select that node");
+    executeSoon(() => {
+      EventUtils.synthesizeMouseAtCenter(h1, {}, content);
+      inspector.toolbox.once("picker-stopped", () => {
+        info("Picker mode stopped, H1 selected, now switching to the console");
+        openConsole(gBrowser.selectedTab).then(performWebConsoleTests);
+      });
     });
   });
 }
 
-function getHighlighterOutline()
-{
-  return gBrowser.selectedBrowser.parentNode
-    .querySelector(".highlighter-container .highlighter-outline");
-}
-
-function performTestComparisons()
-{
-  let outline = getHighlighterOutline();
-  ok(outline && !outline.hasAttribute("hidden"), "inspector is highlighting");
-
-  EventUtils.synthesizeMouseAtCenter(h1, {}, content);
-  inspector.toolbox.once("picker-stopped", () => {
-    openConsole(gBrowser.selectedTab, performWebConsoleTests);
-  });
-}
-
-function performWebConsoleTests(hud)
-{
+function performWebConsoleTests(hud) {
   let target = TargetFactory.forTab(gBrowser.selectedTab);
   let jsterm = hud.jsterm;
   outputNode = hud.outputNode;
 
   jsterm.clearOutput();
   jsterm.execute("$0", onNodeOutput);
 
-  function onNodeOutput(node)
-  {
+  function onNodeOutput(node) {
     isnot(node.textContent.indexOf("<h1>"), -1, "correct output for $0");
 
     jsterm.clearOutput();
     jsterm.execute("$0.textContent = 'bug653531'", onNodeUpdate);
   }
 
-  function onNodeUpdate(node)
-  {
+  function onNodeUpdate(node) {
     isnot(node.textContent.indexOf("bug653531"), -1,
           "correct output for $0.textContent");
     is(inspector.selection.node.textContent, "bug653531",
        "node successfully updated");
 
     inspector = h1 = null;
     gBrowser.removeCurrentTab();
     finishTest();
   }
 }
 
-function test()
-{
+function test() {
   waitForExplicitFinish();
 
   gBrowser.selectedTab = gBrowser.addTab();
   gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
     gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
     waitForFocus(createDocument, content);
   }, true);
 
--- a/browser/modules/BrowserUITelemetry.jsm
+++ b/browser/modules/BrowserUITelemetry.jsm
@@ -127,16 +127,24 @@ XPCOMUtils.defineLazyGetter(this, "ALL_B
   ]
   return DEFAULT_ITEMS.concat(PALETTE_ITEMS)
                       .concat(SPECIAL_CASES);
 });
 
 const OTHER_MOUSEUP_MONITORED_ITEMS = [
   "PlacesChevron",
   "PlacesToolbarItems",
+  "menubar-items",
+];
+
+// Items that open arrow panels will often be overlapped by
+// the panel that they're opening by the time the mouseup
+// event is fired, so for these items, we monitor mousedown.
+const MOUSEDOWN_MONITORED_ITEMS = [
+  "PanelUI-menu-button",
 ];
 
 // Weakly maps browser windows to objects whose keys are relative
 // timestamps for when some kind of session started. For example,
 // when a customization session started. That way, when the window
 // exits customization mode, we can determine how long the session
 // lasted.
 const WINDOW_DURATION_MAP = new WeakMap();
@@ -255,16 +263,23 @@ this.BrowserUITelemetry = {
 
     for (let itemID of OTHER_MOUSEUP_MONITORED_ITEMS) {
       let item = document.getElementById(itemID);
       if (item) {
         item.addEventListener("mouseup", this);
       }
     }
 
+    for (let itemID of MOUSEDOWN_MONITORED_ITEMS) {
+      let item = document.getElementById(itemID);
+      if (item) {
+        item.addEventListener("mousedown", this);
+      }
+    }
+
     WINDOW_DURATION_MAP.set(aWindow, {});
   },
 
   _unregisterWindow: function(aWindow) {
     aWindow.removeEventListener("unload", this);
     let document = aWindow.document;
 
     for (let areaID of CustomizableUI.areas) {
@@ -275,44 +290,67 @@ this.BrowserUITelemetry = {
     }
 
     for (let itemID of OTHER_MOUSEUP_MONITORED_ITEMS) {
       let item = document.getElementById(itemID);
       if (item) {
         item.removeEventListener("mouseup", this);
       }
     }
+
+    for (let itemID of MOUSEDOWN_MONITORED_ITEMS) {
+      let item = document.getElementById(itemID);
+      if (item) {
+        item.removeEventListener("mousedown", this);
+      }
+    }
   },
 
   handleEvent: function(aEvent) {
     switch(aEvent.type) {
       case "unload":
         this._unregisterWindow(aEvent.currentTarget);
         break;
       case "mouseup":
         this._handleMouseUp(aEvent);
         break;
+      case "mousedown":
+        this._handleMouseDown(aEvent);
+        break;
     }
   },
 
   _handleMouseUp: function(aEvent) {
     let targetID = aEvent.currentTarget.id;
 
     switch (targetID) {
       case "PlacesToolbarItems":
         this._PlacesToolbarItemsMouseUp(aEvent);
         break;
       case "PlacesChevron":
         this._PlacesChevronMouseUp(aEvent);
         break;
+      case "menubar-items":
+        this._menubarMouseUp(aEvent);
+        break;
       default:
         this._checkForBuiltinItem(aEvent);
     }
   },
 
+  _handleMouseDown: function(aEvent) {
+    if (aEvent.currentTarget.id == "PanelUI-menu-button") {
+      // _countMouseUpEvent expects a detail for the second argument,
+      // but we don't really have any details to give. Just passing in
+      // "button" is probably simpler than trying to modify
+      // _countMouseUpEvent for this particular case.
+      this._countMouseUpEvent("click-menu-button", "button", aEvent.button);
+    }
+  },
+
   _PlacesChevronMouseUp: function(aEvent) {
     let target = aEvent.originalTarget;
     let result = target.id == "PlacesChevron" ? "chevron" : "overflowed-item";
     this._countMouseUpEvent("click-bookmarks-bar", result, aEvent.button);
   },
 
   _PlacesToolbarItemsMouseUp: function(aEvent) {
     let target = aEvent.originalTarget;
@@ -320,16 +358,23 @@ this.BrowserUITelemetry = {
     if (!target.classList.contains("bookmark-item")) {
       return;
     }
 
     let result = target.hasAttribute("container") ? "container" : "item";
     this._countMouseUpEvent("click-bookmarks-bar", result, aEvent.button);
   },
 
+  _menubarMouseUp: function(aEvent) {
+    let target = aEvent.originalTarget;
+    let tag = target.localName
+    let result = (tag == "menu" || tag == "menuitem") ? tag : "other";
+    this._countMouseUpEvent("click-menubar", result, aEvent.button);
+  },
+
   _bookmarksMenuButtonMouseUp: function(aEvent) {
     let bookmarksWidget = CustomizableUI.getWidget("bookmarks-menu-button");
     if (bookmarksWidget.areaType == CustomizableUI.TYPE_MENU_PANEL) {
       // In the menu panel, only the star is visible, and that opens up the
       // bookmarks subview.
       this._countMouseUpEvent("click-bookmarks-menu-button", "in-panel",
                               aEvent.button);
     } else {
@@ -386,16 +431,23 @@ this.BrowserUITelemetry = {
     // Determine if the window is in the maximized, normal or
     // fullscreen state.
     result.sizemode = document.documentElement.getAttribute("sizemode");
 
     // Determine if the Bookmarks bar is currently visible
     let bookmarksBar = document.getElementById("PersonalToolbar");
     result.bookmarksBarEnabled = bookmarksBar && !bookmarksBar.collapsed;
 
+    // Determine if the menubar is currently visible. On OS X, the menubar
+    // is never shown, despite not having the collapsed attribute set.
+    let menuBar = document.getElementById("toolbar-menubar");
+    result.menuBarEnabled =
+      menuBar && Services.appinfo.OS != "Darwin"
+              && menuBar.getAttribute("autohide") != "true";
+
     // Examine all customizable areas and see what default items
     // are present and missing.
     let defaultKept = [];
     let defaultMoved = [];
     let nondefaultAdded = [];
 
     for (let areaID of CustomizableUI.areas) {
       let items = CustomizableUI.getWidgetIdsInArea(areaID);
--- a/toolkit/devtools/server/actors/highlighter.js
+++ b/toolkit/devtools/server/actors/highlighter.js
@@ -509,16 +509,17 @@ BoxModelHighlighter.prototype = {
     if (!aRect) {
       return false;
     }
 
     let oldRect = this._contentRect;
 
     if (oldRect && aRect.top == oldRect.top && aRect.left == oldRect.left &&
         aRect.width == oldRect.width && aRect.height == oldRect.height) {
+      this._showOutline();
       return true; // same rectangle
     }
 
     let aRectScaled = this.layoutHelpers.getZoomedRect(this.win, aRect);
     let isShown = false;
 
     if (aRectScaled.left >= 0 && aRectScaled.top >= 0 &&
         aRectScaled.width > 0 && aRectScaled.height > 0) {
new file mode 100644
--- /dev/null
+++ b/toolkit/themes/windows/global/arrow/panelarrow-horizontal-themed.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<svg xmlns="http://www.w3.org/2000/svg"
+     width="10"
+     height="20">
+  <path d="M 10,0 L 0,10 10,20 z"
+        fill="ThreeDShadow"/>
+  <path d="M 10,1 L 1,10 10,19 z"
+        fill="-moz-field"/>
+</svg>
deleted file mode 100644
index 24f06bcd5e3a7515bf82fa84fe30b61f21021d75..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
--- a/toolkit/themes/windows/global/arrow/panelarrow-horizontal.svg
+++ b/toolkit/themes/windows/global/arrow/panelarrow-horizontal.svg
@@ -2,12 +2,12 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <svg xmlns="http://www.w3.org/2000/svg"
      width="10"
      height="20">
   <path d="M 10,0 L 0,10 10,20 z"
-        fill="ThreeDShadow"/>
+        fill="hsla(210,4%,10%,.2)"/>
   <path d="M 10,1 L 1,10 10,19 z"
-        fill="-moz-Dialog"/>
+        fill="-moz-field"/>
 </svg>
new file mode 100644
--- /dev/null
+++ b/toolkit/themes/windows/global/arrow/panelarrow-vertical-themed.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<svg xmlns="http://www.w3.org/2000/svg"
+     width="20"
+     height="10">
+  <path d="M 0,10 L 10,0 20,10 z"
+        fill="ThreeDShadow"/>
+  <path d="M 1,10 L 10,1 19,10 z"
+        fill="-moz-field"/>
+</svg>
deleted file mode 100644
index 91ba69db285dbb8c03f577197f51d939d5c1aec5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
--- a/toolkit/themes/windows/global/arrow/panelarrow-vertical.svg
+++ b/toolkit/themes/windows/global/arrow/panelarrow-vertical.svg
@@ -2,12 +2,12 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <svg xmlns="http://www.w3.org/2000/svg"
      width="20"
      height="10">
   <path d="M 0,10 L 10,0 20,10 z"
-        fill="ThreeDShadow"/>
+        fill="hsla(210,4%,10%,.2)"/>
   <path d="M 1,10 L 10,1 19,10 z"
-        fill="-moz-Dialog"/>
+        fill="-moz-field"/>
 </svg>
--- a/toolkit/themes/windows/global/jar.mn
+++ b/toolkit/themes/windows/global/jar.mn
@@ -77,19 +77,19 @@ toolkit.jar:
         skin/classic/global/arrow/arrow-rit-hov.gif              (arrow/arrow-rit.gif)
         skin/classic/global/arrow/arrow-rit-sharp.gif            (arrow/arrow-rit-sharp.gif)
         skin/classic/global/arrow/arrow-rit-sharp-end.gif        (arrow/arrow-rit-sharp-end.gif)
         skin/classic/global/arrow/arrow-up.gif                   (arrow/arrow-up.gif)
         skin/classic/global/arrow/arrow-up-dis.gif               (arrow/arrow-up-dis.gif)
         skin/classic/global/arrow/arrow-up-hov.gif               (arrow/arrow-up-hov.gif)
         skin/classic/global/arrow/arrow-up-sharp.gif             (arrow/arrow-up-sharp.gif)
         skin/classic/global/arrow/panelarrow-horizontal.svg      (arrow/panelarrow-horizontal.svg)
-        skin/classic/global/arrow/panelarrow-horizontal-white.png (arrow/panelarrow-horizontal-white.png)
         skin/classic/global/arrow/panelarrow-vertical.svg        (arrow/panelarrow-vertical.svg)
-        skin/classic/global/arrow/panelarrow-vertical-white.png  (arrow/panelarrow-vertical-white.png)
+        skin/classic/global/arrow/panelarrow-horizontal-themed.svg (arrow/panelarrow-horizontal-themed.svg)
+        skin/classic/global/arrow/panelarrow-vertical-themed.svg   (arrow/panelarrow-vertical-themed.svg)
         skin/classic/global/checkbox/cbox-check.gif              (checkbox/cbox-check.gif)
         skin/classic/global/checkbox/cbox-check-dis.gif          (checkbox/cbox-check-dis.gif)
         skin/classic/global/console/console.css                  (console/console.css)
         skin/classic/global/console/console-toolbar.png          (console/console-toolbar.png)
         skin/classic/global/console/console-error-caret.gif      (console/console-error-caret.gif)
         skin/classic/global/console/console-error-dash.gif       (console/console-error-dash.gif)
         skin/classic/global/console/itemSelected.png             (console/itemSelected.png)
 *       skin/classic/global/dirListing/dirListing.css            (dirListing/dirListing.css)
@@ -220,17 +220,17 @@ toolkit.jar:
         skin/classic/aero/global/linkTree.css
 *       skin/classic/aero/global/listbox.css                             (listbox-aero.css)
 *       skin/classic/aero/global/menu.css                                (menu-aero.css)
 *       skin/classic/aero/global/menulist.css                            (menulist-aero.css)
         skin/classic/aero/global/netError.css
         skin/classic/aero/global/numberbox.css
 *       skin/classic/aero/global/notification.css                        (notification-aero.css)
         skin/classic/aero/global/passwordmgr.css
-*       skin/classic/aero/global/popup.css
+*       skin/classic/aero/global/popup.css                               (popup-aero.css)
         skin/classic/aero/global/preferences.css
         skin/classic/aero/global/printPageSetup.css
         skin/classic/aero/global/printPreview.css
         skin/classic/aero/global/progressmeter.css
         skin/classic/aero/global/radio.css
         skin/classic/aero/global/resizer.css
         skin/classic/aero/global/richlistbox.css
         skin/classic/aero/global/scale.css
@@ -262,19 +262,19 @@ toolkit.jar:
         skin/classic/aero/global/arrow/arrow-rit-hov.gif                 (arrow/arrow-rit.gif)
         skin/classic/aero/global/arrow/arrow-rit-sharp.gif               (arrow/arrow-rit-sharp.gif)
         skin/classic/aero/global/arrow/arrow-rit-sharp-end.gif           (arrow/arrow-rit-sharp-end.gif)
         skin/classic/aero/global/arrow/arrow-up.gif                      (arrow/arrow-up.gif)
         skin/classic/aero/global/arrow/arrow-up-dis.gif                  (arrow/arrow-up-dis.gif)
         skin/classic/aero/global/arrow/arrow-up-hov.gif                  (arrow/arrow-up-hov.gif)
         skin/classic/aero/global/arrow/arrow-up-sharp.gif                (arrow/arrow-up-sharp.gif)
         skin/classic/aero/global/arrow/panelarrow-horizontal.svg         (arrow/panelarrow-horizontal.svg)
-        skin/classic/aero/global/arrow/panelarrow-horizontal-white.png   (arrow/panelarrow-horizontal-white.png)
         skin/classic/aero/global/arrow/panelarrow-vertical.svg           (arrow/panelarrow-vertical.svg)
-        skin/classic/aero/global/arrow/panelarrow-vertical-white.png     (arrow/panelarrow-vertical-white.png)
+        skin/classic/aero/global/arrow/panelarrow-horizontal-themed.svg  (arrow/panelarrow-horizontal-themed.svg)
+        skin/classic/aero/global/arrow/panelarrow-vertical-themed.svg    (arrow/panelarrow-vertical-themed.svg)
         skin/classic/aero/global/checkbox/cbox-check.gif                 (checkbox/cbox-check.gif)
         skin/classic/aero/global/checkbox/cbox-check-dis.gif             (checkbox/cbox-check-dis.gif)
 *       skin/classic/aero/global/console/console.css                     (console/console-aero.css)
         skin/classic/aero/global/console/console-toolbar.png             (console/console-toolbar-aero.png)
         skin/classic/aero/global/console/console-error-caret.gif         (console/console-error-caret.gif)
         skin/classic/aero/global/console/console-error-dash.gif          (console/console-error-dash.gif)
         skin/classic/aero/global/console/itemSelected.png                (console/itemSelected.png)
 *       skin/classic/aero/global/dirListing/dirListing.css               (dirListing/dirListing.css)
new file mode 100644
--- /dev/null
+++ b/toolkit/themes/windows/global/popup-aero.css
@@ -0,0 +1,7 @@
+% This Source Code Form is subject to the terms of the Mozilla Public
+% License, v. 2.0. If a copy of the MPL was not distributed with this
+% file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+%define WINDOWS_AERO
+%include popup.css
+%undef WINDOWS_AERO
--- a/toolkit/themes/windows/global/popup.css
+++ b/toolkit/themes/windows/global/popup.css
@@ -70,45 +70,56 @@ panel[type="arrow"][side="bottom"] {
 
 panel[type="arrow"][side="left"],
 panel[type="arrow"][side="right"] {
   margin-top: -20px;
   margin-bottom: -20px;
 }
 
 .panel-arrowcontent {
-  border-radius: 4px;
   padding: 10px;
-  color: -moz-DialogText;
-  background: -moz-Dialog;
+  color: -moz-FieldText;
+  background: -moz-field;
   background-clip: padding-box;
   border: 1px solid ThreeDShadow;
   margin: 4px;
 }
 
+%ifdef WINDOWS_AERO
+@media (-moz-os-version: windows-vista),
+       (-moz-os-version: windows-win7) {
+%endif
+/* < Win8 */
+.panel-arrowcontent {
+  border-radius: 4px;
+}
+%ifdef WINDOWS_AERO
+}
+%endif
+
 .panel-arrow[side="top"],
 .panel-arrow[side="bottom"] {
-  list-style-image: url("chrome://global/skin/arrow/panelarrow-vertical.svg");
+  list-style-image: url("chrome://global/skin/arrow/panelarrow-vertical-themed.svg");
   position: relative;
   margin-left: 10px;
   margin-right: 10px;
 }
 
 .panel-arrow[side="top"] {
   margin-bottom: -5px;
 }
 
 .panel-arrow[side="bottom"] {
   transform: scaleY(-1);
   margin-top: -5px;
 }
 
 .panel-arrow[side="left"],
 .panel-arrow[side="right"] {
-  list-style-image: url("chrome://global/skin/arrow/panelarrow-horizontal.svg");
+  list-style-image: url("chrome://global/skin/arrow/panelarrow-horizontal-themed.svg");
   position: relative;
   margin-top: 10px;
   margin-bottom: 10px;
 }
 
 .panel-arrow[side="left"] {
   margin-right: -5px;
 }
@@ -116,44 +127,29 @@ panel[type="arrow"][side="right"] {
 .panel-arrow[side="right"] {
   transform: scaleX(-1);
   margin-left: -5px;
 }
 
 %ifdef XP_WIN
 @media (-moz-windows-default-theme) {
   .panel-arrowcontent {
-    border-color: rgba(0,0,0,.3);
-    box-shadow: 0 0 4px rgba(0,0,0,.3);
-  }
-
-  .panel-arrowcontent[side="top"] {
-    background-image: linear-gradient(white 1px, rgba(255,255,255,0) 15px);
-  }
-
-  .panel-arrowcontent[side="bottom"] {
-    background-image: linear-gradient(to top, white 1px, rgba(255,255,255,0) 15px);
-  }
-
-  .panel-arrowcontent[side="left"] {
-    background-image: linear-gradient(to right, white 1px, rgba(255,255,255,0) 15px);
-  }
-
-  .panel-arrowcontent[side="right"] {
-    background-image: linear-gradient(to left, white 1px, rgba(255,255,255,0) 15px);
+    border-color: hsla(210,4%,10%,.2);
+    box-shadow: 0 3px 5px hsla(210,4%,10%,.1),
+                0 0 7px hsla(210,4%,10%,.1);
   }
 
   .panel-arrow[side="top"],
   .panel-arrow[side="bottom"] {
-    list-style-image: url("chrome://global/skin/arrow/panelarrow-vertical-white.png");
+    list-style-image: url("chrome://global/skin/arrow/panelarrow-vertical.svg");
   }
 
   .panel-arrow[side="left"],
   .panel-arrow[side="right"] {
-    list-style-image: url("chrome://global/skin/arrow/panelarrow-horizontal-white.png");
+    list-style-image: url("chrome://global/skin/arrow/panelarrow-horizontal.svg");
   }
 }
 %endif
 
 /* ::::: tooltip ::::: */
 
 tooltip {
   -moz-appearance: tooltip;
--- a/toolkit/themes/windows/mozapps/extensions/extensions.css
+++ b/toolkit/themes/windows/mozapps/extensions/extensions.css
@@ -294,21 +294,31 @@
     width: 12em;
   }
 }
 
 @media (-moz-windows-default-theme) {
   #header-search {
     -moz-appearance: none;
     border: 1px solid rgba(0, 0, 0, 0.32);
-    border-radius: 2.5px;
     padding-bottom: 2px;
     background-color: rgba(255, 255, 255, 0.4);
   }
 
+%ifdef WINDOWS_AERO
+@media (-moz-os-version: windows-vista),
+       (-moz-os-version: windows-win7) {
+%endif
+  #header-search {
+    border-radius: 2.5px;
+  }
+%ifdef WINDOWS_AERO
+}
+%endif
+
   #header-search:hover {
     background-color: rgba(255, 255, 255, .75);
   }
 
   #header-search[focused] {
     background-color: white;
   }
 }
@@ -1133,23 +1143,33 @@ button.button-link:not([disabled="true"]
 .header-button {
   -moz-appearance: none;
   padding: 1px 3px;
   color: #444;
   text-shadow: 0 0 3px white;
   background: linear-gradient(rgba(251, 252, 253, 0.95), rgba(246, 247, 248, 0) 49%, 
                               rgba(211, 212, 213, 0.45) 51%, rgba(225, 226, 229, 0.3));
   background-clip: padding-box;
-  border-radius: 2.5px;
   border: 1px solid rgba(31, 64, 100, 0.4);
   border-top-color: rgba(31, 64, 100, 0.3);
   box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.25) inset,
               0 0 2px 1px rgba(255, 255, 255, 0.25) inset;
 }
 
+%ifdef WINDOWS_AERO
+@media (-moz-os-version: windows-vista),
+       (-moz-os-version: windows-win7) {
+%endif
+  .header-button {
+    border-radius: 2.5px;
+  }
+%ifdef WINDOWS_AERO
+}
+%endif
+
 .header-button[disabled="true"] {
   opacity: 0.8;
 }
 
 .header-button[disabled="true"] > .toolbarbutton-icon {
   opacity: 0.4;
 }
 
--- a/widget/windows/WinTaskbar.cpp
+++ b/widget/windows/WinTaskbar.cpp
@@ -215,16 +215,17 @@ WinTaskbar::Initialize() {
                                   CLSCTX_INPROC_SERVER,
                                   IID_ITaskbarList4,
                                   (void**)&mTaskbar);
   if (FAILED(hr))
     return false;
 
   hr = mTaskbar->HrInit();
   if (FAILED(hr)) {
+    // This may fail with shell extensions like blackbox installed.
     NS_WARNING("Unable to initialize taskbar");
     NS_RELEASE(mTaskbar);
     return false;
   }
   return true;
 }
 
 WinTaskbar::WinTaskbar() 
@@ -361,17 +362,19 @@ WinTaskbar::RegisterAppUserModelID() {
   if (hDLL)
     ::FreeLibrary(hDLL);
 
   return retVal;
 }
 
 NS_IMETHODIMP
 WinTaskbar::GetAvailable(bool *aAvailable) {
-  *aAvailable = IsWin7OrLater();
+  // ITaskbarList4::HrInit() may fail with shell extensions like blackbox
+  // installed. Initialize early to return available=false in those cases.
+  *aAvailable = IsWin7OrLater() && Initialize();
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 WinTaskbar::CreateTaskbarTabPreview(nsIDocShell *shell, nsITaskbarPreviewController *controller, nsITaskbarTabPreview **_retval) {
   if (!Initialize())
     return NS_ERROR_NOT_AVAILABLE;