Merge fx-team to m-c
authorVictor Porof <vporof@mozilla.com>
Sun, 23 Jun 2013 19:00:17 +0300
changeset 147667 e7e9726025dabe48caafa36b06bf0ee62f1cb377
parent 147651 4c4f75c20e9ba7448417307d1fccc25b2ab8e234 (current diff)
parent 147666 de9bcd3c8e6c41b43c3b7e7510abd03faaf92174 (diff)
child 147668 9c3576b138480540631bdbbb55f207705334b454
push id2697
push userbbajaj@mozilla.com
push dateMon, 05 Aug 2013 18:49:53 +0000
treeherdermozilla-beta@dfec938c7b63 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone24.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/app/profile/firefox.js
browser/base/content/browser.xul
browser/themes/linux/browser.css
browser/themes/linux/devtools/goto-mdn.png
browser/themes/linux/devtools/tools-icons-small.png
browser/themes/linux/devtools/widgets.css
browser/themes/linux/jar.mn
browser/themes/osx/browser.css
browser/themes/osx/devtools/goto-mdn.png
browser/themes/osx/devtools/toolbarbutton-close.png
browser/themes/osx/devtools/tools-icons-small.png
browser/themes/osx/devtools/widgets.css
browser/themes/osx/jar.mn
browser/themes/windows/browser.css
browser/themes/windows/devtools/goto-mdn.png
browser/themes/windows/devtools/toolbarbutton-close.png
browser/themes/windows/devtools/tools-icons-small.png
browser/themes/windows/devtools/widgets.css
browser/themes/windows/jar.mn
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1126,23 +1126,39 @@ pref("devtools.gcli.eagerHelper", 2);
 
 // Remember the Web Console filters
 pref("devtools.webconsole.filter.network", true);
 pref("devtools.webconsole.filter.networkinfo", true);
 pref("devtools.webconsole.filter.csserror", true);
 pref("devtools.webconsole.filter.cssparser", true);
 pref("devtools.webconsole.filter.exception", true);
 pref("devtools.webconsole.filter.jswarn", true);
+pref("devtools.webconsole.filter.jslog", true);
 pref("devtools.webconsole.filter.error", true);
 pref("devtools.webconsole.filter.warn", true);
 pref("devtools.webconsole.filter.info", true);
 pref("devtools.webconsole.filter.log", true);
 pref("devtools.webconsole.filter.secerror", true);
 pref("devtools.webconsole.filter.secwarn", true);
 
+// Remember the Browser Console filters
+pref("devtools.browserconsole.filter.network", true);
+pref("devtools.browserconsole.filter.networkinfo", true);
+pref("devtools.browserconsole.filter.csserror", true);
+pref("devtools.browserconsole.filter.cssparser", true);
+pref("devtools.browserconsole.filter.exception", true);
+pref("devtools.browserconsole.filter.jswarn", true);
+pref("devtools.browserconsole.filter.jslog", true);
+pref("devtools.browserconsole.filter.error", true);
+pref("devtools.browserconsole.filter.warn", true);
+pref("devtools.browserconsole.filter.info", true);
+pref("devtools.browserconsole.filter.log", true);
+pref("devtools.browserconsole.filter.secerror", true);
+pref("devtools.browserconsole.filter.secwarn", true);
+
 // Text size in the Web Console. Use 0 for the system default size.
 pref("devtools.webconsole.fontSize", 0);
 
 // Persistent logging: |true| if you want the Web Console to keep all of the
 // logged messages after reloading the page, |false| if you want the output to
 // be cleared each time page navigation happens.
 pref("devtools.webconsole.persistlog", false);
 
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -593,18 +593,17 @@ statuspanel[inactive][previoustype=overL
 html|*#gcli-tooltip-frame,
 html|*#gcli-output-frame,
 #gcli-output,
 #gcli-tooltip {
   overflow-x: hidden;
 }
 
 .gclitoolbar-input-node,
-.gclitoolbar-complete-node,
-.gclitoolbar-prompt {
+.gclitoolbar-complete-node {
   direction: ltr;
 }
 
 #developer-toolbar-toolbox-button[error-count] > .toolbarbutton-icon {
   display: none;
 }
 
 #developer-toolbar-toolbox-button[error-count]:before {
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -1120,21 +1120,18 @@
              hidden="true">
 #ifdef XP_MACOSX
           <toolbarbutton id="developer-toolbar-closebutton"
                          class="devtools-closebutton"
                          oncommand="DeveloperToolbar.hide();"
                          tooltiptext="&devToolbarCloseButton.tooltiptext;"/>
 #endif
           <stack class="gclitoolbar-stack-node" flex="1">
-            <hbox class="gclitoolbar-prompt">
-              <label class="gclitoolbar-prompt-label">&#187;</label>
-            </hbox>
+            <textbox class="gclitoolbar-input-node" rows="1"/>
             <hbox class="gclitoolbar-complete-node"/>
-            <textbox class="gclitoolbar-input-node" rows="1"/>
           </stack>
           <toolbarbutton id="developer-toolbar-toolbox-button"
                          class="developer-toolbar-button"
                          observes="devtoolsMenuBroadcaster_DevToolbox"
                          tooltiptext="&devToolbarToolsButton.tooltip;"/>
 #ifndef XP_MACOSX
           <toolbarbutton id="developer-toolbar-closebutton"
                          class="devtools-closebutton"
--- a/browser/devtools/debugger/DebuggerPanel.jsm
+++ b/browser/devtools/debugger/DebuggerPanel.jsm
@@ -19,16 +19,19 @@ this.DebuggerPanel = function DebuggerPa
   this.panelWin = iframeWindow;
   this._toolbox = toolbox;
 
   this._view = this.panelWin.DebuggerView;
   this._controller = this.panelWin.DebuggerController;
   this._controller._target = this.target;
   this._bkp = this._controller.Breakpoints;
 
+  this.highlightWhenPaused = this.highlightWhenPaused.bind(this);
+  this.unhighlightWhenResumed = this.unhighlightWhenResumed.bind(this);
+
   EventEmitter.decorate(this);
 }
 
 DebuggerPanel.prototype = {
   /**
    * Open is effectively an asynchronous constructor.
    *
    * @return object
@@ -43,30 +46,34 @@ DebuggerPanel.prototype = {
     } else {
       promise = Promise.resolve(this.target);
     }
 
     return promise
       .then(() => this._controller.startupDebugger())
       .then(() => this._controller.connect())
       .then(() => {
+        this.target.on("thread-paused", this.highlightWhenPaused);
+        this.target.on("thread-resumed", this.unhighlightWhenResumed);
         this.isReady = true;
         this.emit("ready");
         return this;
       })
       .then(null, function onError(aReason) {
         Cu.reportError("DebuggerPanel open failed. " +
                        reason.error + ": " + reason.message);
       });
   },
 
   // DevToolPanel API
   get target() this._toolbox.target,
 
   destroy: function() {
+    this.target.off("thread-paused", this.highlightWhenPaused);
+    this.target.off("thread-resumed", this.unhighlightWhenResumed);
     this.emit("destroyed");
     return Promise.resolve(null);
   },
 
   // DebuggerPanel API
 
   addBreakpoint: function() {
     this._bkp.addBreakpoint.apply(this._bkp, arguments);
@@ -77,10 +84,18 @@ DebuggerPanel.prototype = {
   },
 
   getBreakpoint: function() {
     return this._bkp.getBreakpoint.apply(this._bkp, arguments);
   },
 
   getAllBreakpoints: function() {
     return this._bkp.store;
+  },
+
+  highlightWhenPaused: function() {
+    this._toolbox.highlightTool("jsdebugger");
+  },
+
+  unhighlightWhenResumed: function() {
+    this._toolbox.unhighlightTool("jsdebugger");
   }
 };
--- a/browser/devtools/debugger/debugger-panes.js
+++ b/browser/devtools/debugger/debugger-panes.js
@@ -1388,17 +1388,17 @@ WatchExpressionsView.prototype = Heritag
 
     let closeNode = document.createElement("toolbarbutton");
     closeNode.className = "plain variables-view-delete";
 
     closeNode.addEventListener("click", this._onClose, false);
     inputNode.addEventListener("blur", this._onBlur, false);
     inputNode.addEventListener("keypress", this._onKeyPress, false);
 
-    aElementNode.className = "dbg-expression title";
+    aElementNode.className = "dbg-expression";
     aElementNode.appendChild(arrowNode);
     aElementNode.appendChild(inputNode);
     aElementNode.appendChild(closeNode);
 
     aAttachment.arrowNode = arrowNode;
     aAttachment.inputNode = inputNode;
     aAttachment.closeNode = closeNode;
   },
--- a/browser/devtools/debugger/test/Makefile.in
+++ b/browser/devtools/debugger/test/Makefile.in
@@ -89,16 +89,17 @@ MOCHITEST_BROWSER_TESTS = \
 	browser_dbg_bug723071_editor-breakpoints-contextmenu.js \
 	browser_dbg_bug740825_conditional-breakpoints-01.js \
 	browser_dbg_bug740825_conditional-breakpoints-02.js \
 	browser_dbg_bug727429_watch-expressions-01.js \
 	browser_dbg_bug727429_watch-expressions-02.js \
 	browser_dbg_bug731394_editor-contextmenu.js \
 	browser_dbg_bug737803_editor_actual_location.js \
 	browser_dbg_bug786070_hide_nonenums.js \
+	browser_dbg_bug868163_highight_on_pause.js \
 	browser_dbg_displayName.js \
 	browser_dbg_pause-exceptions.js \
 	browser_dbg_multiple-windows.js \
 	browser_dbg_iframes.js \
 	browser_dbg_bfcache.js \
 	browser_dbg_progress-listener-bug.js \
 	browser_dbg_chrome-debugging.js \
 	browser_dbg_source_maps-01.js \
new file mode 100644
--- /dev/null
+++ b/browser/devtools/debugger/test/browser_dbg_bug868163_highight_on_pause.js
@@ -0,0 +1,78 @@
+/* vim:set ts=2 sw=2 sts=2 et: */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Tests that debugger's tab is highlighted when it is paused and not the
+// currently selected tool.
+
+var gTab = null;
+var gDebugger = null;
+var gToolbox = null;
+var gToolboxTab = null;
+
+function test() {
+  debug_tab_pane(STACK_URL, function(aTab, aDebuggee, aPane) {
+    gTab = aTab;
+    gDebugger = aPane.panelWin;
+    gToolbox = aPane._toolbox;
+    gToolboxTab = gToolbox.doc.getElementById("toolbox-tab-jsdebugger");
+    testPause();
+  });
+}
+
+function testPause() {
+  is(gDebugger.DebuggerController.activeThread.paused, false,
+    "Should be running after debug_tab_pane.");
+
+  gDebugger.DebuggerController.activeThread.addOneTimeListener("paused", function() {
+    Services.tm.currentThread.dispatch({ run: function() {
+
+      gToolbox.selectTool("webconsole").then(() => {
+        ok(gToolboxTab.classList.contains("highlighted"),
+           "The highlighted class is present");
+        ok(!gToolboxTab.hasAttribute("selected") ||
+           gToolboxTab.getAttribute("selected") != "true",
+           "The tab is not selected");
+      }).then(() => gToolbox.selectTool("jsdebugger")).then(() => {
+        ok(gToolboxTab.classList.contains("highlighted"),
+           "The highlighted class is present");
+        ok(gToolboxTab.hasAttribute("selected") &&
+           gToolboxTab.getAttribute("selected") == "true",
+           "and the tab is selected, so the orange glow will not be present.");
+      }).then(testResume);
+    }}, 0);
+  });
+
+  EventUtils.sendMouseEvent({ type: "mousedown" },
+    gDebugger.document.getElementById("resume"),
+    gDebugger);
+}
+
+function testResume() {
+  gDebugger.DebuggerController.activeThread.addOneTimeListener("resumed", function() {
+    Services.tm.currentThread.dispatch({ run: function() {
+
+      gToolbox.selectTool("webconsole").then(() => {
+        ok(!gToolboxTab.classList.contains("highlighted"),
+           "The highlighted class is not present now after the resume");
+        ok(!gToolboxTab.hasAttribute("selected") ||
+           gToolboxTab.getAttribute("selected") != "true",
+           "The tab is not selected");
+      }).then(closeDebuggerAndFinish);
+    }}, 0);
+  });
+
+  EventUtils.sendMouseEvent({ type: "mousedown" },
+    gDebugger.document.getElementById("resume"),
+    gDebugger);
+}
+
+registerCleanupFunction(function() {
+  removeTab(gTab);
+  gTab = null;
+  gDebugger = null;
+  gToolbox = null;
+  gToolboxTab = null;
+});
--- a/browser/devtools/framework/sidebar.js
+++ b/browser/devtools/framework/sidebar.js
@@ -1,39 +1,50 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
+const {Cu} = require("chrome");
+
+Cu.import("resource://gre/modules/Services.jsm");
+
 var Promise = require("sdk/core/promise");
 var EventEmitter = require("devtools/shared/event-emitter");
 var Telemetry = require("devtools/shared/telemetry");
 
 const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
 /**
  * ToolSidebar provides methods to register tabs in the sidebar.
  * It's assumed that the sidebar contains a xul:tabbox.
  *
  * @param {Node} tabbox
  *  <tabbox> node;
  * @param {ToolPanel} panel
  *  Related ToolPanel instance;
+ * @param {String} uid
+ *  Unique ID
  * @param {Boolean} showTabstripe
  *  Show the tabs.
  */
-function ToolSidebar(tabbox, panel, showTabstripe=true)
+function ToolSidebar(tabbox, panel, uid, showTabstripe=true)
 {
   EventEmitter.decorate(this);
 
   this._tabbox = tabbox;
+  this._uid = uid;
   this._panelDoc = this._tabbox.ownerDocument;
   this._toolPanel = panel;
 
+  try {
+    this._width = Services.prefs.getIntPref("devtools.toolsidebar-width." + this._uid);
+  } catch(e) {}
+
   this._telemetry = new Telemetry();
 
   this._tabbox.tabpanels.addEventListener("select", this, true);
 
   this._tabs = new Map();
 
   if (!showTabstripe) {
     this._tabbox.setAttribute("hidetabs", "true");
@@ -160,23 +171,27 @@ ToolSidebar.prototype = {
       this.hide();
     }
   },
 
   /**
    * Show the sidebar.
    */
   show: function ToolSidebar_show() {
+    if (this._width) {
+      this._tabbox.width = this._width;
+    }
     this._tabbox.removeAttribute("hidden");
   },
 
   /**
    * Show the sidebar.
    */
   hide: function ToolSidebar_hide() {
+    Services.prefs.setIntPref("devtools.toolsidebar-width." + this._uid, this._tabbox.width);
     this._tabbox.setAttribute("hidden", "true");
   },
 
   /**
    * Return the window containing the tab content.
    */
   getWindowForTab: function ToolSidebar_getWindowForTab(id) {
     if (!this._tabs.has(id)) {
@@ -191,16 +206,18 @@ ToolSidebar.prototype = {
    * Clean-up.
    */
   destroy: function ToolSidebar_destroy() {
     if (this._destroyed) {
       return Promise.resolve(null);
     }
     this._destroyed = true;
 
+    Services.prefs.setIntPref("devtools.toolsidebar-width." + this._uid, this._tabbox.width);
+
     this._tabbox.tabpanels.removeEventListener("select", this, true);
 
     while (this._tabbox.tabpanels.hasChildNodes()) {
       this._tabbox.tabpanels.removeChild(this._tabbox.tabpanels.firstChild);
     }
 
     while (this._tabbox.tabs.hasChildNodes()) {
       this._tabbox.tabs.removeChild(this._tabbox.tabs.firstChild);
--- a/browser/devtools/framework/test/Makefile.in
+++ b/browser/devtools/framework/test/Makefile.in
@@ -22,11 +22,12 @@ MOCHITEST_BROWSER_FILES = \
 		browser_toolbox_tool_ready.js \
 		browser_toolbox_sidebar.js \
 		browser_toolbox_window_shortcuts.js \
 		browser_toolbox_window_title_changes.js \
 		browser_toolbox_options.js \
 		browser_toolbox_options_disablejs.js \
 		browser_toolbox_options_disablejs.html \
 		browser_toolbox_options_disablejs_iframe.html \
+		browser_toolbox_highlight.js \
 		$(NULL)
 
 include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/browser/devtools/framework/test/browser_toolbox_highlight.js
@@ -0,0 +1,84 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+let Toolbox = devtools.Toolbox;
+let temp = {};
+Cu.import("resource://gre/modules/Services.jsm", temp);
+let Services = temp.Services;
+temp = null;
+let toolbox = null;
+
+function test() {
+  waitForExplicitFinish();
+
+  const URL = "data:text/plain;charset=UTF-8,Nothing to see here, move along";
+
+  const TOOL_ID_1 = "jsdebugger";
+  const TOOL_ID_2 = "webconsole";
+
+  addTab(URL, () => {
+    let target = TargetFactory.forTab(gBrowser.selectedTab);
+    gDevTools.showToolbox(target, TOOL_ID_1, Toolbox.HostType.BOTTOM)
+             .then(aToolbox => {
+                toolbox = aToolbox;
+                // select tool 2
+                toolbox.selectTool(TOOL_ID_2)
+                       // and highlight the first one
+                       .then(highlightTab.bind(null, TOOL_ID_1))
+                       // to see if it has the proper class.
+                       .then(checkHighlighted.bind(null, TOOL_ID_1))
+                       // Now switch back to first tool
+                       .then(() => toolbox.selectTool(TOOL_ID_1))
+                       // to check again. But there is no easy way to test if
+                       // it is showing orange or not.
+                       .then(checkNoHighlightWhenSelected.bind(null, TOOL_ID_1))
+                       // Switch to tool 2 again
+                       .then(() => toolbox.selectTool(TOOL_ID_2))
+                       // and check again.
+                       .then(checkHighlighted.bind(null, TOOL_ID_1))
+                       // Now unhighlight the tool
+                       .then(unhighlightTab.bind(null, TOOL_ID_1))
+                       // to see the classes gone.
+                       .then(checkNoHighlight.bind(null, TOOL_ID_1))
+                       // Now close the toolbox and exit.
+                       .then(() => executeSoon(() => {
+                          toolbox.destroy()
+                                 .then(() => {
+                                   toolbox = null;
+                                   gBrowser.removeCurrentTab();
+                                   finish();
+                                 });
+                        }));
+              });
+  });
+}
+
+function highlightTab(toolId) {
+  info("Highlighting tool " + toolId + "'s tab.");
+  toolbox.highlightTool(toolId);
+}
+
+function unhighlightTab(toolId) {
+  info("Unhighlighting tool " + toolId + "'s tab.");
+  toolbox.unhighlightTool(toolId);
+}
+
+function checkHighlighted(toolId) {
+  let tab = toolbox.doc.getElementById("toolbox-tab-" + toolId);
+  ok(tab.classList.contains("highlighted"), "The highlighted class is present");
+  ok(!tab.hasAttribute("selected") || tab.getAttribute("selected") != "true",
+     "The tab is not selected");
+}
+
+function checkNoHighlightWhenSelected(toolId) {
+  let tab = toolbox.doc.getElementById("toolbox-tab-" + toolId);
+  ok(tab.classList.contains("highlighted"), "The highlighted class is present");
+  ok(tab.hasAttribute("selected") && tab.getAttribute("selected") == "true",
+     "and the tab is selected, so the orange glow will not be present.");
+}
+
+function checkNoHighlight(toolId) {
+  let tab = toolbox.doc.getElementById("toolbox-tab-" + toolId);
+  ok(!tab.classList.contains("highlighted"),
+     "The highlighted class is not present");
+}
--- a/browser/devtools/framework/test/browser_toolbox_sidebar.js
+++ b/browser/devtools/framework/test/browser_toolbox_sidebar.js
@@ -47,17 +47,17 @@ function test() {
 
   addTab("about:blank", function(aBrowser, aTab) {
     let target = TargetFactory.forTab(gBrowser.selectedTab);
     gDevTools.showToolbox(target, toolDefinition.id).then(function(toolbox) {
       let panel = toolbox.getPanel(toolDefinition.id);
       ok(true, "Tool open");
 
       let tabbox = panel.panelDoc.getElementById("sidebar");
-      panel.sidebar = new ToolSidebar(tabbox, panel, true);
+      panel.sidebar = new ToolSidebar(tabbox, panel, "testbug865688", true);
 
       panel.sidebar.on("new-tab-registered", function(event, id) {
         registeredTabs[id] = true;
       });
 
       panel.sidebar.once("tab1-ready", function(event) {
         info(event);
         readyTabs.tab1 = true;
@@ -114,23 +114,35 @@ function test() {
 
     panel.sidebar.once("tab1-unselected", function() {
       ok(true, "received 'unselected' event");
       panel.sidebar.once("tab2-selected", function() {
         ok(true, "received 'selected' event");
         panel.sidebar.hide();
         is(panel.sidebar._tabbox.getAttribute("hidden"), "true", "Sidebar hidden");
         is(panel.sidebar.getWindowForTab("tab1").location.href, tab1URL, "Window is accessible");
-        finishUp(panel);
+        testWidth(panel);
       });
     });
 
     panel.sidebar.select("tab2");
   }
 
+  function testWidth(panel) {
+    let tabbox = panel.panelDoc.getElementById("sidebar");
+    tabbox.width = 420;
+    panel.sidebar.destroy().then(function() {
+      tabbox.width = 0;
+      panel.sidebar = new ToolSidebar(tabbox, panel, "testbug865688", true);
+      panel.sidebar.show();
+      is(panel.panelDoc.getElementById("sidebar").width, 420, "Width restored")
+      finishUp(panel);
+    });
+  }
+
   function finishUp(panel) {
     panel.sidebar.destroy();
     gDevTools.unregisterTool(toolDefinition.id);
 
     executeSoon(function() {
       gBrowser.removeCurrentTab();
       finish();
     });
--- a/browser/devtools/framework/test/browser_toolbox_tool_ready.js
+++ b/browser/devtools/framework/test/browser_toolbox_tool_ready.js
@@ -1,23 +1,26 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test() {
   addTab().then(function(data) {
-    let toolIds = [ "jsdebugger", "styleeditor", "webconsole", "inspector" ];
+    let toolIds = gDevTools.getToolDefinitionArray().map((def) => def.id);
 
     let open = function(index) {
       let toolId = toolIds[index];
 
       info("About to open " + index + "/" + toolId);
       gDevTools.showToolbox(data.target, toolId).then(function(toolbox) {
         ok(toolbox, "toolbox exists for " + toolId);
         is(toolbox.currentToolId, toolId, "currentToolId should be " + toolId);
 
+        let panel = toolbox.getCurrentPanel();
+        ok(panel.isReady, toolId + " panel should be ready");
+
         let nextIndex = index + 1;
         if (nextIndex >= toolIds.length) {
           toolbox.destroy();
           finish();
         }
         else {
           open(nextIndex);
         }
--- a/browser/devtools/framework/toolbox-options.js
+++ b/browser/devtools/framework/toolbox-options.js
@@ -1,56 +1,85 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
-const {Cu} = require("chrome");
+const {Cu, Cc, Ci} = require("chrome");
 
 let Promise = require("sdk/core/promise");
 let EventEmitter = require("devtools/shared/event-emitter");
 
+Cu.import('resource://gre/modules/XPCOMUtils.jsm');
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource:///modules/devtools/gDevTools.jsm");
 
 exports.OptionsPanel = OptionsPanel;
 
+XPCOMUtils.defineLazyGetter(this, "l10n", function() {
+  let bundle = Services.strings.createBundle("chrome://browser/locale/devtools/toolbox.properties");
+  let l10n = function(aName, ...aArgs) {
+    try {
+      if (aArgs.length == 0) {
+        return bundle.GetStringFromName(aName);
+      } else {
+        return bundle.formatStringFromName(aName, aArgs, aArgs.length);
+      }
+    } catch (ex) {
+      Services.console.logStringMessage("Error reading '" + aName + "'");
+    }
+  };
+  return l10n;
+});
+
 /**
  * Represents the Options Panel in the Toolbox.
  */
 function OptionsPanel(iframeWindow, toolbox) {
   this.panelDoc = iframeWindow.document;
   this.panelWin = iframeWindow;
   this.toolbox = toolbox;
+  this.isReady = false;
+
+  // Make restart method available from xul
+  this.panelWin.restart = this.restart;
 
   EventEmitter.decorate(this);
 };
 
 OptionsPanel.prototype = {
 
-  open: function OP_open() {
+  get target() {
+    return this.toolbox.target;
+  },
+
+  open: function() {
     let deferred = Promise.defer();
 
     this.setupToolsList();
     this.populatePreferences();
+    this.prepareRestartPreferences();
 
     this._disableJSClicked = this._disableJSClicked.bind(this);
 
     let disableJSNode = this.panelDoc.getElementById("devtools-disable-javascript");
     disableJSNode.addEventListener("click", this._disableJSClicked, false);
 
+    this.isReady = true;
     this.emit("ready");
     deferred.resolve(this);
     return deferred.promise;
   },
 
-  setupToolsList: function OP_setupToolsList() {
+  setupToolsList: function() {
     let defaultToolsBox = this.panelDoc.getElementById("default-tools-box");
     let additionalToolsBox = this.panelDoc.getElementById("additional-tools-box");
+    let toolsNotSupportedLabel = this.panelDoc.getElementById("tools-not-supported-label");
+    let atleastOneToolNotSupported = false;
 
     defaultToolsBox.textContent = "";
     additionalToolsBox.textContent = "";
 
     let pref = function(key) {
       try {
         return Services.prefs.getBoolPref(key);
       }
@@ -66,52 +95,61 @@ OptionsPanel.prototype = {
       if (this.checked) {
         gDevTools.emit("tool-registered", id);
       }
       else {
         gDevTools.emit("tool-unregistered", toolDefinition);
       }
     };
 
+    let createToolCheckbox = tool => {
+      let checkbox = this.panelDoc.createElement("checkbox");
+      checkbox.setAttribute("id", tool.id);
+      checkbox.setAttribute("tooltiptext", tool.tooltip || "");
+      if (tool.isTargetSupported(this.target)) {
+        checkbox.setAttribute("label", tool.label);
+      }
+      else {
+        atleastOneToolNotSupported = true;
+        checkbox.setAttribute("label",
+                              l10n("options.toolNotSupportedMarker", tool.label));
+      }
+      checkbox.setAttribute("checked", pref(tool.visibilityswitch));
+      checkbox.addEventListener("command", onCheckboxClick.bind(checkbox, tool.id));
+      return checkbox;
+    };
+
     // Populating the default tools lists
     for (let tool of gDevTools.getDefaultTools()) {
       if (tool.id == "options") {
         continue;
       }
-      let checkbox = this.panelDoc.createElement("checkbox");
-      checkbox.setAttribute("id", tool.id);
-      checkbox.setAttribute("label", tool.label);
-      checkbox.setAttribute("tooltiptext", tool.tooltip || "");
-      checkbox.setAttribute("checked", pref(tool.visibilityswitch));
-      checkbox.addEventListener("command", onCheckboxClick.bind(checkbox, tool.id));
-      defaultToolsBox.appendChild(checkbox);
+      defaultToolsBox.appendChild(createToolCheckbox(tool));
     }
 
     // Populating the additional tools list that came from add-ons.
     let atleastOneAddon = false;
     for (let tool of gDevTools.getAdditionalTools()) {
       atleastOneAddon = true;
-      let checkbox = this.panelDoc.createElement("checkbox");
-      checkbox.setAttribute("id", tool.id);
-      checkbox.setAttribute("label", tool.label);
-      checkbox.setAttribute("tooltiptext", tool.tooltip || "");
-      checkbox.setAttribute("checked", pref(tool.visibilityswitch));
-      checkbox.addEventListener("command", onCheckboxClick.bind(checkbox, tool.id));
-      additionalToolsBox.appendChild(checkbox);
+      additionalToolsBox.appendChild(createToolCheckbox(tool));
     }
 
     if (!atleastOneAddon) {
       additionalToolsBox.style.display = "none";
       additionalToolsBox.previousSibling.style.display = "none";
     }
 
+    if (!atleastOneToolNotSupported) {
+      toolsNotSupportedLabel.style.display = "none";
+    }
+
     this.panelWin.focus();
   },
 
-  populatePreferences: function OP_populatePreferences() {
+  populatePreferences: function() {
     let prefCheckboxes = this.panelDoc.querySelectorAll("checkbox[data-pref]");
     for (let checkbox of prefCheckboxes) {
       checkbox.checked = Services.prefs.getBoolPref(checkbox.getAttribute("data-pref"));
       checkbox.addEventListener("command", function() {
         let data = {
           pref: this.getAttribute("data-pref"),
           newValue: this.checked
         };
@@ -138,16 +176,48 @@ OptionsPanel.prototype = {
         data.oldValue = Services.prefs.getCharPref(data.pref);
         Services.prefs.setCharPref(data.pref, data.newValue);
         gDevTools.emit("pref-changed", data);
       }.bind(radiogroup));
     }
   },
 
   /**
+   * Hides any label in a box with class "hidden-labels-box" at page load. The
+   * labels are shown again when the user click on the checkbox in the box.
+   */
+  prepareRestartPreferences: function() {
+    let labels = this.panelDoc.querySelectorAll(".hidden-labels-box > label");
+    for (let label of labels) {
+      label.style.display = "none";
+    }
+    let checkboxes = this.panelDoc.querySelectorAll(".hidden-labels-box > checkbox");
+    for (let checkbox of checkboxes) {
+      checkbox.addEventListener("command", function(target) {
+        target.nextSibling.style.display = "";
+        target.nextSibling.nextSibling.style.display = "";
+      }.bind(null, checkbox));
+    }
+  },
+
+  restart: function() {
+    let canceled = Cc["@mozilla.org/supports-PRBool;1"]
+                     .createInstance(Ci.nsISupportsPRBool);
+    Services.obs.notifyObservers(canceled, "quit-application-requested", "restart");
+    if (canceled.data) {
+      return;
+    }
+
+    // restart
+    Cc['@mozilla.org/toolkit/app-startup;1']
+      .getService(Ci.nsIAppStartup)
+      .quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
+  },
+
+  /**
    * Disables JavaScript for the currently loaded tab. We force a page refresh
    * here because setting docShell.allowJavascript to true fails to block JS
    * execution from event listeners added using addEventListener(), AJAX calls
    * and timers. The page refresh prevents these things from being added in the
    * first place.
    *
    * @param {Event} event
    *        The event sent by checking / unchecking the disable JS checkbox.
--- a/browser/devtools/framework/toolbox-options.xul
+++ b/browser/devtools/framework/toolbox-options.xul
@@ -13,16 +13,19 @@
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <hbox id="options-panel-container" flex="1">
     <hbox id="options-panel" flex="1">
       <vbox id="tools-box" class="options-vertical-pane" flex="1">
         <label value="&options.selectDefaultTools.label;"/>
         <vbox id="default-tools-box" class="options-groupbox" tabindex="0"/>
         <label value="&options.selectAdditionalTools.label;"/>
         <vbox id="additional-tools-box" class="options-groupbox"/>
+        <label id="tools-not-supported-label"
+               class="options-citation-label"
+               value="&options.toolNotSupported.label;"/>
       </vbox>
       <vbox class="options-vertical-pane" flex="1">
         <label value="&options.selectDevToolsTheme.label;"/>
         <radiogroup id="devtools-theme-box"
                     class="options-groupbox"
                     data-pref="devtools.theme"
                     orient="horizontal">
           <radio value="light" label="&options.lightTheme.label;"/>
@@ -31,24 +34,40 @@
         <label value="&options.webconsole.label;"/>
         <vbox id="webconsole-options" class="options-groupbox">
           <checkbox label="&options.enablePersistentLogging.label;"
                     tooltiptext="&options.enablePersistentLogging.tooltip;"
                     data-pref="devtools.webconsole.persistlog"/>
         </vbox>
         <label value="&options.context.advancedSettings;"/>
         <vbox id="context-options" class="options-groupbox">
-          <checkbox label="&options.enableChrome.label2;"
-                    tooltiptext="&options.enableChrome.tooltip;"
-                    data-pref="devtools.chrome.enabled"/>
-          <checkbox label="&options.enableRemote.label2;"
-                    tooltiptext="&options.enableRemote.tooltip;"
-                    data-pref="devtools.debugger.remote-enabled"/>
-          <checkbox id="devtools-disable-javascript"
-                    label="&options.disableJavaScript.label;"
-                    tooltiptext="&options.disableJavaScript.tooltip;"/>
-          <label value="&options.context.requiresRestart;"/>
-          <label value="&options.context.triggersPageRefresh;"/>
+          <hbox>
+            <checkbox id="devtools-disable-javascript"
+                      label="&options.disableJavaScript.label2;"
+                      tooltiptext="&options.disableJavaScript.tooltip;"/>
+            <label class="options-citation-label"
+                   value="(&options.context.triggersPageRefresh2;)"/>
+          </hbox>
+          <hbox class="hidden-labels-box">
+            <checkbox label="&options.enableChrome.label3;"
+                      tooltiptext="&options.enableChrome.tooltip;"
+                      data-pref="devtools.chrome.enabled"/>
+            <label class="options-citation-label"
+                   value="&options.context.requiresRestart2;"/>
+            <label class="text-link"
+                   onclick="restart()"
+                   value="&options.restartButton.label;"/>
+          </hbox>
+          <hbox class="hidden-labels-box">
+            <checkbox label="&options.enableRemote.label3;"
+                      tooltiptext="&options.enableRemote.tooltip;"
+                      data-pref="devtools.debugger.remote-enabled"/>
+            <label class="options-citation-label"
+                   value="&options.context.requiresRestart2;"/>
+            <label class="text-link"
+                   onclick="restart()"
+                   value="&options.restartButton.label;"/>
+          </hbox>
         </vbox>
       </vbox>
     </hbox>
   </hbox>
 </window>
--- a/browser/devtools/framework/toolbox.js
+++ b/browser/devtools/framework/toolbox.js
@@ -366,17 +366,25 @@ Toolbox.prototype = {
 
     // spacer lets us center the image and label, while allowing cropping
     let spacer = this.doc.createElement("spacer");
     spacer.setAttribute("flex", "1");
     radio.appendChild(spacer);
 
     if (toolDefinition.icon) {
       let image = this.doc.createElement("image");
-      image.setAttribute("src", toolDefinition.icon);
+      image.className = "default-icon";
+      image.setAttribute("src",
+                         toolDefinition.icon || toolDefinition.highlightedicon);
+      radio.appendChild(image);
+      // Adding the highlighted icon image
+      image = this.doc.createElement("image");
+      image.className = "highlighted-icon";
+      image.setAttribute("src",
+                         toolDefinition.highlightedicon || toolDefinition.icon);
       radio.appendChild(image);
     }
 
     if (toolDefinition.label) {
       let label = this.doc.createElement("label");
       label.setAttribute("value", toolDefinition.label)
       label.setAttribute("crop", "end");
       label.setAttribute("flex", "1");
@@ -405,31 +413,42 @@ Toolbox.prototype = {
         }
       });
     }
 
     this._addKeysToWindow();
   },
 
   /**
-   * Load a tool with a given id.
+   * Ensure the tool with the given id is loaded.
    *
    * @param {string} id
    *        The id of the tool to load.
    */
   loadTool: function TBOX_loadTool(id) {
     let deferred = Promise.defer();
     let iframe = this.doc.getElementById("toolbox-panel-iframe-" + id);
 
     if (iframe) {
-      this.once(id + "-ready", () => { deferred.resolve() });
+      let panel = this._toolPanels.get(id);
+      if (panel) {
+        deferred.resolve(panel);
+      } else {
+        this.once(id + "-ready", (panel) => {
+          deferred.resolve(panel);
+        });
+      }
       return deferred.promise;
     }
 
     let definition = gDevTools.getToolDefinitionMap().get(id);
+    if (!definition) {
+      deferred.reject(new Error("no such tool id "+id));
+      return deferred.promise;
+    }
     iframe = this.doc.createElement("iframe");
     iframe.className = "toolbox-panel-iframe";
     iframe.id = "toolbox-panel-iframe-" + id;
     iframe.setAttribute("flex", 1);
     iframe.setAttribute("forceOwnRefreshDriver", "");
     iframe.tooltip = "aHTMLTooltip";
 
     let vbox = this.doc.getElementById("toolbox-panel-" + id);
@@ -454,18 +473,16 @@ Toolbox.prototype = {
 
   /**
    * Switch to the tool with the given id
    *
    * @param {string} id
    *        The id of the tool to switch to
    */
   selectTool: function TBOX_selectTool(id) {
-    let deferred = Promise.defer();
-
     let selected = this.doc.querySelector(".devtools-tab[selected]");
     if (selected) {
       selected.removeAttribute("selected");
     }
     let tab = this.doc.getElementById("toolbox-tab-" + id);
     tab.setAttribute("selected", "true");
 
     let prevToolId = this._currentToolId;
@@ -503,51 +520,47 @@ Toolbox.prototype = {
     }
     tabstrip.selectedItem = tab;
 
     // and select the right iframe
     let deck = this.doc.getElementById("toolbox-deck");
     deck.selectedIndex = index;
 
     this._currentToolId = id;
-
-    let resolveSelected = panel => {
-      this.emit("select", id);
-      this.emit(id + "-selected", panel);
-      deferred.resolve(panel);
-    };
-
-    let iframe = this.doc.getElementById("toolbox-panel-iframe-" + id);
-    if (!iframe) {
-      this.loadTool(id).then((panel) => {
-        this.emit("select", id);
-        this.emit(id + "-selected", panel);
-        deferred.resolve(panel);
-      });
-    } else {
-      let panel = this._toolPanels.get(id);
-      // only emit 'select' event if the iframe has been loaded
-      if (panel && (!panel.contentDocument ||
-                    panel.contentDocument.readyState == "complete")) {
-        resolveSelected(panel);
-      }
-      else if (panel) {
-        let boundLoad = function() {
-          panel.removeEventListener("DOMContentLoaded", boundLoad, true);
-          resolveSelected(panel);
-        };
-        panel.addEventListener("DOMContentLoaded", boundLoad, true);
-      }
-    }
-
     if (id != "options") {
       Services.prefs.setCharPref(this._prefs.LAST_TOOL, id);
     }
 
-    return deferred.promise;
+    return this.loadTool(id).then((panel) => {
+      this.emit("select", id);
+      this.emit(id + "-selected", panel);
+      return panel;
+    });
+  },
+
+  /**
+   * Highlights the tool's tab if it is not the currently selected tool.
+   *
+   * @param {string} id
+   *        The id of the tool to highlight
+   */
+  highlightTool: function TBOX_highlightTool(id) {
+    let tab = this.doc.getElementById("toolbox-tab-" + id);
+    tab && tab.classList.add("highlighted");
+  },
+
+  /**
+   * De-highlights the tool's tab.
+   *
+   * @param {string} id
+   *        The id of the tool to unhighlight
+   */
+  unhighlightTool: function TBOX_unhighlightTool(id) {
+    let tab = this.doc.getElementById("toolbox-tab-" + id);
+    tab && tab.classList.remove("highlighted");
   },
 
   /**
    * Raise the toolbox host.
    */
   raise: function TBOX_raise() {
     this._host.raise();
   },
--- a/browser/devtools/framework/toolbox.xul
+++ b/browser/devtools/framework/toolbox.xul
@@ -25,28 +25,30 @@
          modifiers="shift, accel"/>
   </keyset>
 
   <notificationbox id="toolbox-notificationbox" flex="1">
     <toolbar class="devtools-tabbar">
 #ifdef XP_MACOSX
       <hbox id="toolbox-controls">
         <toolbarbutton id="toolbox-close"
+                       class="devtools-closebutton"
                        tooltiptext="&toolboxCloseButton.tooltip;"/>
         <hbox id="toolbox-dock-buttons"/>
       </hbox>
 #endif
       <hbox id="toolbox-tabs" flex="1">
       </hbox>
       <hbox id="toolbox-buttons" pack="end"/>
 #ifndef XP_MACOSX
       <vbox id="toolbox-controls-separator"/>
       <hbox id="toolbox-controls">
         <hbox id="toolbox-dock-buttons"/>
         <toolbarbutton id="toolbox-close"
+                       class="devtools-closebutton"
                        tooltiptext="&toolboxCloseButton.tooltip;"/>
       </hbox>
 #endif
     </toolbar>
     <deck id="toolbox-deck" flex="1">
     </deck>
   </notificationbox>
 </window>
--- a/browser/devtools/inspector/inspector-panel.js
+++ b/browser/devtools/inspector/inspector-panel.js
@@ -216,17 +216,17 @@ InspectorPanel.prototype = {
     this.searchSuggestions = new SelectorSearch(searchDoc, this.searchBox, setNodeFunction);
   },
 
   /**
    * Build the sidebar.
    */
   setupSidebar: function InspectorPanel_setupSidebar() {
     let tabbox = this.panelDoc.querySelector("#inspector-sidebar");
-    this.sidebar = new ToolSidebar(tabbox, this);
+    this.sidebar = new ToolSidebar(tabbox, this, "inspector");
 
     let defaultTab = Services.prefs.getCharPref("devtools.inspector.activeSidebar");
 
     this._setDefaultSidebar = function(event, toolId) {
       Services.prefs.setCharPref("devtools.inspector.activeSidebar", toolId);
     }.bind(this);
 
     this.sidebar.on("select", this._setDefaultSidebar);
--- a/browser/devtools/jar.mn
+++ b/browser/devtools/jar.mn
@@ -8,17 +8,17 @@ browser.jar:
     content/browser/devtools/markup-view.xhtml                         (markupview/markup-view.xhtml)
     content/browser/devtools/markup-view.css                           (markupview/markup-view.css)
     content/browser/devtools/netmonitor.xul                            (netmonitor/netmonitor.xul)
     content/browser/devtools/netmonitor.css                            (netmonitor/netmonitor.css)
     content/browser/devtools/netmonitor-controller.js                  (netmonitor/netmonitor-controller.js)
     content/browser/devtools/netmonitor-view.js                        (netmonitor/netmonitor-view.js)
     content/browser/devtools/NetworkPanel.xhtml                        (webconsole/NetworkPanel.xhtml)
     content/browser/devtools/webconsole.js                             (webconsole/webconsole.js)
-    content/browser/devtools/webconsole.xul                            (webconsole/webconsole.xul)
+*   content/browser/devtools/webconsole.xul                            (webconsole/webconsole.xul)
 *   content/browser/devtools/scratchpad.xul                            (scratchpad/scratchpad.xul)
     content/browser/devtools/scratchpad.js                             (scratchpad/scratchpad.js)
     content/browser/devtools/splitview.css                             (shared/splitview.css)
     content/browser/devtools/theme-switching.js                        (shared/theme-switching.js)
     content/browser/devtools/styleeditor.xul                           (styleeditor/styleeditor.xul)
     content/browser/devtools/styleeditor.css                           (styleeditor/styleeditor.css)
     content/browser/devtools/computedview.xhtml                        (styleinspector/computedview.xhtml)
     content/browser/devtools/cssruleview.xhtml                         (styleinspector/cssruleview.xhtml)
--- a/browser/devtools/main.js
+++ b/browser/devtools/main.js
@@ -108,16 +108,17 @@ Tools.inspector = {
 Tools.jsdebugger = {
   id: "jsdebugger",
   key: l10n("debuggerMenu.commandkey", debuggerStrings),
   accesskey: l10n("debuggerMenu.accesskey", debuggerStrings),
   modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   ordinal: 3,
   visibilityswitch: "devtools.debugger.enabled",
   icon: "chrome://browser/skin/devtools/tool-debugger.png",
+  highlightedicon: "chrome://browser/skin/devtools/tool-debugger-paused.png",
   url: "chrome://browser/content/devtools/debugger.xul",
   label: l10n("ToolboxDebugger.label", debuggerStrings),
   tooltip: l10n("ToolboxDebugger.tooltip", debuggerStrings),
 
   isTargetSupported: function(target) {
     return true;
   },
 
--- a/browser/devtools/scratchpad/scratchpad.js
+++ b/browser/devtools/scratchpad/scratchpad.js
@@ -1480,17 +1480,17 @@ var Scratchpad = {
 /**
  * Encapsulates management of the sidebar containing the VariablesView for
  * object inspection.
  */
 function ScratchpadSidebar(aScratchpad)
 {
   let ToolSidebar = devtools.require("devtools/framework/sidebar").ToolSidebar;
   let tabbox = document.querySelector("#scratchpad-sidebar");
-  this._sidebar = new ToolSidebar(tabbox, this);
+  this._sidebar = new ToolSidebar(tabbox, this, "scratchpad");
   this._scratchpad = aScratchpad;
 }
 
 ScratchpadSidebar.prototype = {
   /*
    * The ToolSidebar for this sidebar.
    */
   _sidebar: null,
--- a/browser/devtools/shared/splitview.css
+++ b/browser/devtools/shared/splitview.css
@@ -79,17 +79,17 @@ ol.splitview-nav > li.splitview-filtered
 }
 
 .splitview-portrait-resizer {
   display: none;
 }
 
 /* portrait mode */
 @media (max-width: 550px) {
-  #splitview-details-toolbar {
+  .splitview-landscape-splitter {
     display: none;
   }
 
   .splitview-portrait-resizer {
     display: -moz-box;
   }
 
   .splitview-controller {
--- a/browser/devtools/shared/widgets/VariablesView.jsm
+++ b/browser/devtools/shared/widgets/VariablesView.jsm
@@ -2368,16 +2368,17 @@ Variable.prototype = Heritage.extend(Sco
         editNode.addEventListener("mousedown", this._onEdit.bind(this), false);
         this._title.appendChild(editNode);
       }
     }
     if (ownerView.delete) {
       if (!this._isUndefined || !(ownerView.getter && ownerView.setter)) {
         let deleteNode = this._deleteNode = this.document.createElement("toolbarbutton");
         deleteNode.className = "plain variables-view-delete";
+        deleteNode.setAttribute("ordinal", 2);
         deleteNode.addEventListener("click", this._onDelete.bind(this), false);
         this._title.appendChild(deleteNode);
       }
     }
     if (ownerView.contextMenuId) {
       this._title.setAttribute("context", ownerView.contextMenuId);
     }
 
--- a/browser/devtools/styleeditor/styleeditor.xul
+++ b/browser/devtools/styleeditor/styleeditor.xul
@@ -54,27 +54,28 @@
                       label="&newButton.label;"/>
           <xul:toolbarbutton class="style-editor-importButton devtools-toolbarbutton"
                       accesskey="&importButton.accesskey;"
                       tooltiptext="&importButton.tooltip;"
                       label="&importButton.label;"/>
         </xul:toolbar>
       </xul:box>
       <xul:box id="splitview-resizer-target" class="splitview-nav-container"
-              persist="width height">
+              persist="height">
         <ol class="splitview-nav" tabindex="0"></ol>
         <div class="splitview-nav placeholder empty">
           <p><strong>&noStyleSheet.label;</strong></p>
           <p>&noStyleSheet-tip-start.label;
             <a href="#"
               class="style-editor-newButton">&noStyleSheet-tip-action.label;</a>
             &noStyleSheet-tip-end.label;</p>
         </div>
       </xul:box> <!-- .splitview-nav-container -->
     </xul:box>   <!-- .splitview-controller -->
+    <xul:splitter class="devtools-side-splitter splitview-landscape-splitter"/>
     <xul:box class="splitview-side-details"/>
 
     <div id="splitview-templates" hidden="true">
       <li id="splitview-tpl-summary-stylesheet" tabindex="0">
         <a class="stylesheet-enabled" tabindex="0" href="#"
           title="&visibilityToggle.tooltip;"
           accesskey="&saveButton.accesskey;"></a>
         <hgroup class="stylesheet-info">
@@ -90,19 +91,14 @@
           </div>
         </hgroup>
       </li>
 
       <xul:box id="splitview-tpl-details-stylesheet" class="splitview-details">
         <xul:resizer class="splitview-portrait-resizer"
                     dir="bottom"
                     element="splitview-resizer-target"/>
-        <xul:toolbar id="splitview-details-toolbar" class="devtools-toolbar">
-          <xul:resizer class="splitview-landscape-resizer"
-                      dir="bottomend"
-                      element="splitview-resizer-target"/>
-        </xul:toolbar>
         <xul:box class="stylesheet-editor-input textbox"
                 data-placeholder="&editorTextbox.placeholder;"/>
       </xul:box>
     </div> <!-- #splitview-templates -->
   </xul:box>   <!-- .splitview-root -->
 </xul:window>
--- a/browser/devtools/webconsole/HUDService.jsm
+++ b/browser/devtools/webconsole/HUDService.jsm
@@ -38,16 +38,19 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 
 let Telemetry = devtools.require("devtools/shared/telemetry");
 
 const STRINGS_URI = "chrome://browser/locale/devtools/webconsole.properties";
 let l10n = new WebConsoleUtils.l10n(STRINGS_URI);
 
 const BROWSER_CONSOLE_WINDOW_FEATURES = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
 
+// The preference prefix for all of the Browser Console filters.
+const BROWSER_CONSOLE_FILTER_PREFS_PREFIX = "devtools.browserconsole.filter.";
+
 this.EXPORTED_SYMBOLS = ["HUDService"];
 
 ///////////////////////////////////////////////////////////////////////////
 //// The HUD service
 
 function HUD_SERVICE()
 {
   this.hudReferences = {};
@@ -200,24 +203,27 @@ function WebConsole(aTarget, aIframeWind
   this.target = aTarget;
 
   this.browserWindow = this.chromeWindow.top;
 
   let element = this.browserWindow.document.documentElement;
   if (element.getAttribute("windowtype") != "navigator:browser") {
     this.browserWindow = HUDService.currentContext();
   }
+
+  this.ui = new this.iframeWindow.WebConsoleFrame(this);
 }
 
 WebConsole.prototype = {
   iframeWindow: null,
   chromeWindow: null,
   browserWindow: null,
   hudId: null,
   target: null,
+  ui: null,
   _browserConsole: false,
   _destroyer: null,
 
   /**
    * Getter for HUDService.lastFinishedRequestCallback.
    *
    * @see HUDService.lastFinishedRequestCallback
    * @type function
@@ -247,17 +253,16 @@ WebConsole.prototype = {
   /**
    * Initialize the Web Console instance.
    *
    * @return object
    *         A Promise for the initialization.
    */
   init: function WC_init()
   {
-    this.ui = new this.iframeWindow.WebConsoleFrame(this);
     return this.ui.init().then(() => this);
   },
 
   /**
    * Retrieve the Web Console panel title.
    *
    * @return string
    *         The Web Console panel title.
@@ -540,16 +545,18 @@ BrowserConsole.prototype = Heritage.exte
    *         A Promise for the initialization.
    */
   init: function BC_init()
   {
     if (this._bc_init) {
       return this._bc_init;
     }
 
+    this.ui._filterPrefsPrefix = BROWSER_CONSOLE_FILTER_PREFS_PREFIX;
+
     let window = this.iframeWindow;
 
     // Make sure that the closing of the Browser Console window destroys this
     // instance.
     let onClose = () => {
       window.removeEventListener("unload", onClose);
       this.destroy();
     };
--- a/browser/devtools/webconsole/test/Makefile.in
+++ b/browser/devtools/webconsole/test/Makefile.in
@@ -132,16 +132,19 @@ MOCHITEST_BROWSER_FILES = \
 	browser_console_native_getters.js \
 	browser_bug_871156_ctrlw_close_tab.js \
 	browser_console_private_browsing.js \
 	browser_console_nsiconsolemessage.js \
 	browser_webconsole_bug_817834_add_edited_input_to_history.js \
 	browser_console_addonsdk_loader_exception.js \
 	browser_console_error_source_click.js \
 	browser_console_clear_on_reload.js \
+	browser_console_keyboard_accessibility.js \
+	browser_console_filters.js \
+	browser_console_dead_objects.js \
 	head.js \
 	$(NULL)
 
 ifeq ($(OS_ARCH), Darwin)
 MOCHITEST_BROWSER_FILES += \
 	browser_webconsole_bug_804845_ctrl_key_nav.js \
         $(NULL)
 endif
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/browser_console_dead_objects.js
@@ -0,0 +1,79 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Check that Dead Objects do not break the Web/Browser Consoles. See bug 883649.
+
+const TEST_URI = "data:text/html;charset=utf8,<p>dead objects!";
+
+function test()
+{
+  let hud = null;
+
+  addTab(TEST_URI);
+  browser.addEventListener("load", function onLoad() {
+    browser.removeEventListener("load", onLoad, true);
+    info("open the browser console");
+    HUDConsoleUI.toggleBrowserConsole().then(onBrowserConsoleOpen);
+  }, true);
+
+  function onBrowserConsoleOpen(aHud)
+  {
+    hud = aHud;
+    ok(hud, "browser console opened");
+
+    hud.jsterm.clearOutput();
+    hud.jsterm.execute("foobarzTezt = content.document", onAddVariable);
+  }
+
+  function onAddVariable()
+  {
+    gBrowser.removeCurrentTab();
+
+    hud.jsterm.execute("foobarzTezt", onReadVariable);
+  }
+
+  function onReadVariable()
+  {
+    isnot(hud.outputNode.textContent.indexOf("[object DeadObject]"), -1,
+          "dead object found");
+
+    hud.jsterm.setInputValue("foobarzTezt");
+
+    for (let c of ".hello") {
+      EventUtils.synthesizeKey(c, {}, hud.iframeWindow);
+    }
+
+    hud.jsterm.execute(null, onReadProperty);
+  }
+
+  function onReadProperty()
+  {
+    isnot(hud.outputNode.textContent.indexOf("can't access dead object"), -1,
+          "'cannot access dead object' message found");
+
+    // Click the second execute output.
+    let clickable = hud.outputNode.querySelectorAll(".webconsole-msg-output")[1]
+                    .querySelector(".hud-clickable");
+    ok(clickable, "clickable object found");
+    isnot(clickable.textContent.indexOf("[object DeadObject]"), -1,
+          "message text check");
+
+    hud.jsterm.once("variablesview-fetched", onFetched);
+    EventUtils.synthesizeMouse(clickable, 2, 2, {}, hud.iframeWindow);
+  }
+
+  function onFetched()
+  {
+    hud.jsterm.execute("delete window.foobarzTezt; 2013-26", onCalcResult);
+  }
+
+  function onCalcResult()
+  {
+    isnot(hud.outputNode.textContent.indexOf("1987"), -1, "result message found");
+
+    // executeSoon() is needed to get out of the execute() event loop.
+    executeSoon(finishTest);
+  }
+}
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/browser_console_filters.js
@@ -0,0 +1,71 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Check that the Browser Console does not use the same filter prefs as the Web
+// Console. See bug 878186.
+
+const TEST_URI = "data:text/html;charset=utf8,<p>browser console filters";
+const WEB_CONSOLE_PREFIX = "devtools.webconsole.filter.";
+const BROWSER_CONSOLE_PREFIX = "devtools.browserconsole.filter.";
+
+function test()
+{
+  addTab(TEST_URI);
+  browser.addEventListener("load", function onLoad() {
+    browser.removeEventListener("load", onLoad, true);
+    info("open the web console");
+    openConsole(null, consoleOpened);
+  }, true);
+}
+
+function consoleOpened(hud)
+{
+  ok(hud, "web console opened");
+
+  is(Services.prefs.getBoolPref(BROWSER_CONSOLE_PREFIX + "exception"), true,
+     "'exception' filter is enabled (browser console)");
+  is(Services.prefs.getBoolPref(WEB_CONSOLE_PREFIX + "exception"), true,
+     "'exception' filter is enabled (web console)");
+
+  info("toggle 'exception' filter");
+  hud.setFilterState("exception", false);
+
+  is(Services.prefs.getBoolPref(BROWSER_CONSOLE_PREFIX + "exception"), true,
+     "'exception' filter is enabled (browser console)");
+  is(Services.prefs.getBoolPref(WEB_CONSOLE_PREFIX + "exception"), false,
+     "'exception' filter is disabled (web console)");
+
+  hud.setFilterState("exception", true);
+
+  executeSoon(() => closeConsole(null, onWebConsoleClose));
+}
+
+function onWebConsoleClose()
+{
+  info("web console closed");
+  HUDConsoleUI.toggleBrowserConsole().then(onBrowserConsoleOpen);
+}
+
+function onBrowserConsoleOpen(hud)
+{
+  ok(hud, "browser console opened");
+
+  is(Services.prefs.getBoolPref(BROWSER_CONSOLE_PREFIX + "exception"), true,
+     "'exception' filter is enabled (browser console)");
+  is(Services.prefs.getBoolPref(WEB_CONSOLE_PREFIX + "exception"), true,
+     "'exception' filter is enabled (web console)");
+
+  info("toggle 'exception' filter");
+  hud.setFilterState("exception", false);
+
+  is(Services.prefs.getBoolPref(BROWSER_CONSOLE_PREFIX + "exception"), false,
+     "'exception' filter is disabled (browser console)");
+  is(Services.prefs.getBoolPref(WEB_CONSOLE_PREFIX + "exception"), true,
+     "'exception' filter is enabled (web console)");
+
+  hud.setFilterState("exception", true);
+
+  executeSoon(finishTest);
+}
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/browser_console_keyboard_accessibility.js
@@ -0,0 +1,69 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Check that basic keyboard shortcuts work in the web console.
+
+function test()
+{
+  const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-console.html";
+  let hud = null;
+
+  addTab(TEST_URI);
+
+  browser.addEventListener("load", function onLoad() {
+    browser.removeEventListener("load", onLoad, true);
+    openConsole(null, consoleOpened);
+  }, true);
+
+  function consoleOpened(aHud)
+  {
+    hud = aHud;
+    ok(hud, "Web Console opened");
+
+    content.console.log("foobarz1");
+    waitForMessages({
+      webconsole: hud,
+      messages: [{
+        text: "foobarz1",
+        category: CATEGORY_WEBDEV,
+        severity: SEVERITY_LOG,
+      }],
+    }).then(onConsoleMessage);
+  }
+
+  function onConsoleMessage()
+  {
+    hud.jsterm.once("messages-cleared", onClear);
+    info("try ctrl-k to clear output");
+    EventUtils.synthesizeKey("K", { accelKey: true });
+  }
+
+  function onClear()
+  {
+    is(hud.outputNode.textContent.indexOf("foobarz1"), -1, "output cleared");
+    is(hud.jsterm.inputNode.getAttribute("focused"), "true",
+       "jsterm input is focused");
+
+    info("try ctrl-f to focus filter");
+    EventUtils.synthesizeKey("F", { accelKey: true });
+    ok(!hud.jsterm.inputNode.getAttribute("focused"),
+       "jsterm input is not focused");
+    is(hud.ui.filterBox.getAttribute("focused"), "true",
+       "filter input is focused");
+
+    if (Services.appinfo.OS == "Darwin") {
+      EventUtils.synthesizeKey("t", { ctrlKey: true });
+    }
+    else {
+      EventUtils.synthesizeKey("N", { altKey: true });
+    }
+
+    let net = hud.ui.document.querySelector("toolbarbutton[category=net]");
+    is(hud.ui.document.activeElement, net,
+       "accesskey for Network category focuses the Net button");
+
+    finishTest();
+  }
+}
--- a/browser/devtools/webconsole/test/browser_console_nsiconsolemessage.js
+++ b/browser/devtools/webconsole/test/browser_console_nsiconsolemessage.js
@@ -70,10 +70,26 @@ function onBrowserConsoleOpen(hud)
         text: "test2 for bug859756",
         category: CATEGORY_JS,
       },
       {
         text: "do-not-show-me",
         category: CATEGORY_JS,
       },
     ],
-  }).then(finishTest);
+  }).then(testFiltering);
+
+  function testFiltering(results)
+  {
+    let msg = [...results[2].matched][0];
+    ok(msg, "message element for do-not-show-me (nsIConsoleMessage)");
+    isnot(msg.textContent.indexOf("do-not-show"), -1, "element content is correct");
+    ok(!msg.classList.contains("hud-filtered-by-type"), "element is not filtered");
+
+    hud.setFilterState("jslog", false);
+
+    ok(msg.classList.contains("hud-filtered-by-type"), "element is filtered");
+
+    hud.setFilterState("jslog", true);
+
+    finishTest();
+  }
 }
--- a/browser/devtools/webconsole/test/browser_webconsole_bug_585991_autocomplete_keys.js
+++ b/browser/devtools/webconsole/test/browser_webconsole_bug_585991_autocomplete_keys.js
@@ -1,37 +1,39 @@
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const TEST_URI = "data:text/html;charset=utf-8,<p>bug 585991 - autocomplete popup keyboard usage test";
-let HUD;
+let HUD, popup, jsterm, inputNode, completeNode;
 
 function test() {
   addTab(TEST_URI);
   browser.addEventListener("load", function onLoad() {
     browser.removeEventListener("load", onLoad, true);
     openConsole(null, consoleOpened);
   }, true);
 }
 
 function consoleOpened(aHud) {
   HUD = aHud;
+  info("web console opened");
 
   content.wrappedJSObject.foobarBug585991 = {
     "item0": "value0",
     "item1": "value1",
     "item2": "value2",
     "item3": "value3",
   };
 
-  let jsterm = HUD.jsterm;
-  let popup = jsterm.autocompletePopup;
-  let completeNode = jsterm.completeNode;
+  jsterm = HUD.jsterm;
+  popup = jsterm.autocompletePopup;
+  completeNode = jsterm.completeNode;
+  inputNode = jsterm.inputNode;
 
   ok(!popup.isOpen, "popup is not open");
 
   popup._panel.addEventListener("popupshown", function onShown() {
     popup._panel.removeEventListener("popupshown", onShown, false);
 
     ok(popup.isOpen, "popup is open");
 
@@ -85,33 +87,30 @@ function consoleOpened(aHud) {
 
     EventUtils.synthesizeKey("VK_UP", {});
 
     is(popup.selectedIndex, 0, "index 0 is selected");
     is(popup.selectedItem.label, "watch", "watch is selected");
     is(completeNode.value, prefix + "watch",
         "completeNode.value holds watch");
 
-    popup._panel.addEventListener("popuphidden", autocompletePopupHidden, false);
-
+    info("press Tab and wait for popup to hide");
+    popup._panel.addEventListener("popuphidden", popupHideAfterTab, false);
     EventUtils.synthesizeKey("VK_TAB", {});
   }, false);
 
+  info("wait for completion: window.foobarBug585991.");
   jsterm.setInputValue("window.foobarBug585991");
   EventUtils.synthesizeKey(".", {});
 }
 
-function autocompletePopupHidden()
+function popupHideAfterTab()
 {
-  let jsterm = HUD.jsterm;
-  let popup = jsterm.autocompletePopup;
-  let completeNode = jsterm.completeNode;
-  let inputNode = jsterm.inputNode;
-
-  popup._panel.removeEventListener("popuphidden", autocompletePopupHidden, false);
+  // At this point the completion suggestion should be accepted.
+  popup._panel.removeEventListener("popuphidden", popupHideAfterTab, false);
 
   ok(!popup.isOpen, "popup is not open");
 
   is(inputNode.value, "window.foobarBug585991.watch",
      "completion was successful after VK_TAB");
 
   ok(!completeNode.value, "completeNode is empty");
 
@@ -141,34 +140,31 @@ function autocompletePopupHidden()
       is(inputNode.value, "window.foobarBug585991.",
          "completion was cancelled");
 
       ok(!completeNode.value, "completeNode is empty");
 
       executeSoon(testReturnKey);
     }, false);
 
+    info("press Escape to close the popup");
     executeSoon(function() {
       EventUtils.synthesizeKey("VK_ESCAPE", {});
     });
   }, false);
 
+  info("wait for completion: window.foobarBug585991.");
   executeSoon(function() {
     jsterm.setInputValue("window.foobarBug585991");
     EventUtils.synthesizeKey(".", {});
   });
 }
 
 function testReturnKey()
 {
-  let jsterm = HUD.jsterm;
-  let popup = jsterm.autocompletePopup;
-  let completeNode = jsterm.completeNode;
-  let inputNode = jsterm.inputNode;
-
   popup._panel.addEventListener("popupshown", function onShown() {
     popup._panel.removeEventListener("popupshown", onShown, false);
 
     ok(popup.isOpen, "popup is open");
 
     is(popup.itemCount, 18, "popup.itemCount is correct");
 
     is(popup.selectedIndex, 17, "First index from bottom is selected");
@@ -182,63 +178,106 @@ function testReturnKey()
     is(completeNode.value, prefix + "watch",
         "completeNode.value holds watch");
 
     EventUtils.synthesizeKey("VK_DOWN", {});
 
     is(popup.selectedIndex, 1, "index 1 is selected");
     is(popup.selectedItem.label, "valueOf", "valueOf is selected");
     is(completeNode.value, prefix + "valueOf",
-        "completeNode.value holds valueOf");
+       "completeNode.value holds valueOf");
 
     popup._panel.addEventListener("popuphidden", function onHidden() {
       popup._panel.removeEventListener("popuphidden", onHidden, false);
 
       ok(!popup.isOpen, "popup is not open after VK_RETURN");
 
-      // modified by bug 873250
-      is(inputNode.value, "", "no completion after VK_RETURN");
-      isnot(jsterm.lastInputValue, "window.foobarBug585991.valueOf",
-        "lastInputValue is not window.foobarBug585991.valueOf");
-      EventUtils.synthesizeKey("VK_UP", {});
-      is(inputNode.value, jsterm.lastInputValue, "previous entry was lastInputNode")
+      is(inputNode.value, "window.foobarBug585991.valueOf",
+         "completion was successful after VK_RETURN");
 
       ok(!completeNode.value, "completeNode is empty");
 
       dontShowArrayNumbers();
     }, false);
 
-    EventUtils.synthesizeKey("VK_RETURN", {});
+    info("press Return to accept suggestion. wait for popup to hide");
+
+    executeSoon(() => EventUtils.synthesizeKey("VK_RETURN", {}));
   }, false);
 
+  info("wait for completion suggestions: window.foobarBug585991.");
+
   executeSoon(function() {
     jsterm.setInputValue("window.foobarBug58599");
     EventUtils.synthesizeKey("1", {});
     EventUtils.synthesizeKey(".", {});
   });
 }
 
 function dontShowArrayNumbers()
 {
+  info("dontShowArrayNumbers");
   content.wrappedJSObject.foobarBug585991 = ["Sherlock Holmes"];
 
   let jsterm = HUD.jsterm;
   let popup = jsterm.autocompletePopup;
   let completeNode = jsterm.completeNode;
 
   popup._panel.addEventListener("popupshown", function onShown() {
     popup._panel.removeEventListener("popupshown", onShown, false);
 
     let sameItems = popup.getItems().map(function(e) {return e.label;});
     ok(!sameItems.some(function(prop, index) { prop === "0"; }),
        "Completing on an array doesn't show numbers.");
 
-    popup._panel.addEventListener("popuphidden", consoleOpened, false);
+    popup._panel.addEventListener("popuphidden", testReturnWithNoSelection, false);
 
-    EventUtils.synthesizeKey("VK_TAB", {});
-
-    executeSoon(finishTest);
+    info("wait for popup to hide");
+    executeSoon(() => EventUtils.synthesizeKey("VK_ESCAPE", {}));
   }, false);
 
-  jsterm.setInputValue("window.foobarBug585991");
-  EventUtils.synthesizeKey(".", {});
+  info("wait for popup to show");
+  executeSoon(() => {
+    jsterm.setInputValue("window.foobarBug585991");
+    EventUtils.synthesizeKey(".", {});
+  });
 }
 
+function testReturnWithNoSelection()
+{
+  popup._panel.removeEventListener("popuphidden", testReturnWithNoSelection, false);
+
+  info("test pressing return with open popup, but no selection, see bug 873250");
+  content.wrappedJSObject.testBug873250a = "hello world";
+  content.wrappedJSObject.testBug873250b = "hello world 2";
+
+  popup._panel.addEventListener("popupshown", function onShown() {
+    popup._panel.removeEventListener("popupshown", onShown);
+
+    ok(popup.isOpen, "popup is open");
+    is(popup.itemCount, 2, "popup.itemCount is correct");
+    isnot(popup.selectedIndex, -1, "popup.selectedIndex is correct");
+
+    info("press Return and wait for popup to hide");
+    popup._panel.addEventListener("popuphidden", popupHideAfterReturnWithNoSelection);
+    executeSoon(() => EventUtils.synthesizeKey("VK_RETURN", {}));
+  });
+
+  executeSoon(() => {
+    info("wait for popup to show");
+    jsterm.setInputValue("window.testBu");
+    EventUtils.synthesizeKey("g", {});
+  });
+}
+
+function popupHideAfterReturnWithNoSelection()
+{
+  popup._panel.removeEventListener("popuphidden", popupHideAfterReturnWithNoSelection);
+
+  ok(!popup.isOpen, "popup is not open after VK_RETURN");
+
+  is(inputNode.value, "", "inputNode is empty after VK_RETURN");
+  is(completeNode.value, "", "completeNode is empty");
+  is(jsterm.history[jsterm.history.length-1], "window.testBug",
+     "jsterm history is correct");
+
+  executeSoon(finishTest);
+}
--- a/browser/devtools/webconsole/test/browser_webconsole_bug_622303_persistent_filters.js
+++ b/browser/devtools/webconsole/test/browser_webconsole_bug_622303_persistent_filters.js
@@ -7,17 +7,18 @@ let prefs = {
     "networkinfo"
   ],
   "css": [
     "csserror",
     "cssparser"
   ],
   "js": [
     "exception",
-    "jswarn"
+    "jswarn",
+    "jslog",
   ],
   "logging": [
      "error",
      "warn",
      "info",
      "log"
   ]
 };
--- a/browser/devtools/webconsole/webconsole.js
+++ b/browser/devtools/webconsole/webconsole.js
@@ -116,17 +116,17 @@ const SEVERITY_CLASS_FRAGMENTS = [
 // first by category (rows) and then by severity (columns).
 //
 // Most of these rather idiosyncratic names are historical and predate the
 // division of message type into "category" and "severity".
 const MESSAGE_PREFERENCE_KEYS = [
 //  Error         Warning   Info    Log
   [ "network",    null,         null,   "networkinfo", ],  // Network
   [ "csserror",   "cssparser",  null,   null,          ],  // CSS
-  [ "exception",  "jswarn",     null,   null,          ],  // JS
+  [ "exception",  "jswarn",     null,   "jslog",       ],  // JS
   [ "error",      "warn",       "info", "log",         ],  // Web Developer
   [ null,         null,         null,   null,          ],  // Input
   [ null,         null,         null,   null,          ],  // Output
   [ "secerror",   "secwarn",    null,   null,          ],  // Security
 ];
 
 // A mapping from the console API log event levels to the Web Console
 // severities.
@@ -198,16 +198,17 @@ function WebConsoleFrame(aWebConsoleOwne
 {
   this.owner = aWebConsoleOwner;
   this.hudId = this.owner.hudId;
 
   this._repeatNodes = {};
   this._outputQueue = [];
   this._pruneCategoriesQueue = {};
   this._networkRequests = {};
+  this.filterPrefs = {};
 
   this._toggleFilter = this._toggleFilter.bind(this);
   this._flushMessageQueue = this._flushMessageQueue.bind(this);
 
   this._outputTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
   this._outputTimerInitialized = false;
 
   EventEmitter.decorate(this);
@@ -305,16 +306,23 @@ WebConsoleFrame.prototype = {
   /**
    * Preferences for filtering messages by type.
    * @see this._initDefaultFilterPrefs()
    * @type object
    */
   filterPrefs: null,
 
   /**
+   * Prefix used for filter preferences.
+   * @private
+   * @type string
+   */
+  _filterPrefsPrefix: FILTER_PREFS_PREFIX,
+
+  /**
    * The nesting depth of the currently active console group.
    */
   groupDepth: 0,
 
   /**
    * The current target location.
    * @type string
    */
@@ -514,57 +522,41 @@ WebConsoleFrame.prototype = {
   },
 
   /**
    * Initialize the default filter preferences.
    * @private
    */
   _initDefaultFilterPrefs: function WCF__initDefaultFilterPrefs()
   {
-    this.filterPrefs = {
-      network: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "network"),
-      networkinfo: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "networkinfo"),
-      csserror: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "csserror"),
-      cssparser: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "cssparser"),
-      exception: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "exception"),
-      jswarn: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "jswarn"),
-      error: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "error"),
-      info: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "info"),
-      warn: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "warn"),
-      log: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "log"),
-      secerror: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "secerror"),
-      secwarn: Services.prefs.getBoolPref(FILTER_PREFS_PREFIX + "secwarn"),
-    };
+    let prefs = ["network", "networkinfo", "csserror", "cssparser", "exception",
+                 "jswarn", "jslog", "error", "info", "warn", "log", "secerror",
+                 "secwarn"];
+    for (let pref of prefs) {
+      this.filterPrefs[pref] = Services.prefs
+                               .getBoolPref(this._filterPrefsPrefix + pref);
+    }
   },
 
   /**
-   * Sets the click events for all binary toggle filter buttons.
+   * Sets the events for the filter input field.
    * @private
    */
   _setFilterTextBoxEvents: function WCF__setFilterTextBoxEvents()
   {
-    let timer = null;
+    let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
     let timerEvent = this.adjustVisibilityOnSearchStringChange.bind(this);
 
     let onChange = function _onChange() {
-      let timer;
-
       // To improve responsiveness, we let the user finish typing before we
       // perform the search.
-      if (timer == null) {
-        let timerClass = Cc["@mozilla.org/timer;1"];
-        timer = timerClass.createInstance(Ci.nsITimer);
-      }
-      else {
-        timer.cancel();
-      }
-
+      timer.cancel();
       timer.initWithCallback(timerEvent, SEARCH_DELAY,
                              Ci.nsITimer.TYPE_ONE_SHOT);
-    }.bind(this);
+    };
 
     this.filterBox.addEventListener("command", onChange, false);
     this.filterBox.addEventListener("input", onChange, false);
   },
 
   /**
    * Creates one of the filter buttons on the toolbar.
    *
@@ -591,16 +583,24 @@ WebConsoleFrame.prototype = {
         let prefKey = aMenuItem.getAttribute("prefKey");
         let checked = this.filterPrefs[prefKey];
         aMenuItem.setAttribute("checked", checked);
         someChecked = someChecked || checked;
       }, this);
 
       aButton.setAttribute("checked", someChecked);
     }, this);
+
+    if (!this.owner._browserConsole) {
+      // The Browser Console displays nsIConsoleMessages which are messages that
+      // end up in the JS category, but they are not errors or warnings, they
+      // are just log messages. The Web Console does not show such messages.
+      let jslog = this.document.querySelector("menuitem[prefKey=jslog]");
+      jslog.hidden = true;
+    }
   },
 
   /**
    * Increase, decrease or reset the font size.
    *
    * @param string size
    *        The size of the font change. Accepted values are "+" and "-".
    *        An unmatched size assumes a font reset.
@@ -736,17 +736,17 @@ WebConsoleFrame.prototype = {
    * @param string aToggleType
    * @param boolean aState
    * @returns void
    */
   setFilterState: function WCF_setFilterState(aToggleType, aState)
   {
     this.filterPrefs[aToggleType] = aState;
     this.adjustVisibilityForMessageType(aToggleType, aState);
-    Services.prefs.setBoolPref(FILTER_PREFS_PREFIX + aToggleType, aState);
+    Services.prefs.setBoolPref(this._filterPrefsPrefix + aToggleType, aState);
   },
 
   /**
    * Get the filter state for a specific toggle button.
    *
    * @param string aToggleType
    * @returns boolean
    */
@@ -2849,24 +2849,32 @@ JSTerm.prototype = {
 
   /**
    * Last input value.
    * @type string
    */
   lastInputValue: "",
 
   /**
-   * Indicate input node changed since last focus.
+   * Tells if the input node changed since the last focus.
    *
    * @private
    * @type boolean
    */
   _inputChanged: false,
 
   /**
+   * Tells if the autocomplete popup was navigated since the last open.
+   *
+   * @private
+   * @type boolean
+   */
+  _autocompletePopupNavigated: false,
+
+  /**
    * History of code that was executed.
    * @type array
    */
   history: null,
   autocompletePopup: null,
   inputNode: null,
   completeNode: null,
 
@@ -3055,18 +3063,16 @@ JSTerm.prototype = {
    * @param function [aCallback]
    *        Optional function to invoke when the result is displayed.
    */
   execute: function JST_execute(aExecuteString, aCallback)
   {
     // attempt to execute the content of the inputNode
     aExecuteString = aExecuteString || this.inputNode.value;
     if (!aExecuteString) {
-      this.writeOutput(l10n.getStr("executeEmptyInput"), CATEGORY_OUTPUT,
-                       SEVERITY_LOG);
       return;
     }
 
     let node = this.writeOutput(aExecuteString, CATEGORY_INPUT, SEVERITY_LOG);
     let onResult = this._executeResultCallback.bind(this, node, aCallback);
 
     let options = { frame: this.SELECTED_FRAME };
     this.requestEvaluation(aExecuteString, options).then(onResult, onResult);
@@ -3233,17 +3239,17 @@ JSTerm.prototype = {
    *
    * @see devtools/framework/sidebar.js
    * @private
    */
   _createSidebar: function JST__createSidebar()
   {
     let tabbox = this.hud.document.querySelector("#webconsole-sidebar");
     let ToolSidebar = devtools.require("devtools/framework/sidebar").ToolSidebar;
-    this.sidebar = new ToolSidebar(tabbox, this);
+    this.sidebar = new ToolSidebar(tabbox, this, "webconsole");
     this.sidebar.show();
   },
 
   /**
    * Add the variables view tab to the sidebar.
    *
    * @private
    * @return object
@@ -3593,16 +3599,18 @@ JSTerm.prototype = {
     node._outputAfterNode = aNodeAfter;
     this.hud.outputMessage(aCategory, node);
     return node;
   },
 
   /**
    * Clear the Web Console output.
    *
+   * This method emits the "messages-cleared" notification.
+   *
    * @param boolean aClearStorage
    *        True if you want to clear the console messages storage associated to
    *        this Web Console.
    */
   clearOutput: function JST_clearOutput(aClearStorage)
   {
     let hud = this.hud;
     let outputNode = hud.outputNode;
@@ -3615,20 +3623,24 @@ JSTerm.prototype = {
     hud._outputQueue.forEach(hud._pruneItemFromQueue, hud);
     hud._outputQueue = [];
     hud._networkRequests = {};
     hud._repeatNodes = {};
 
     if (aClearStorage) {
       this.webConsoleClient.clearMessagesCache();
     }
+
+    this.emit("messages-cleared");
   },
 
   /**
    * Remove all of the private messages from the Web Console output.
+   *
+   * This method emits the "private-messages-cleared" notification.
    */
   clearPrivateMessages: function JST_clearPrivateMessages()
   {
     let nodes = this.hud.outputNode.querySelectorAll("richlistitem[private]");
     for (let node of nodes) {
       this.hud.removeOutputMessage(node);
     }
     this.emit("private-messages-cleared");
@@ -3689,41 +3701,45 @@ JSTerm.prototype = {
   /**
    * The inputNode "keypress" event handler.
    *
    * @private
    * @param nsIDOMEvent aEvent
    */
   _keyPress: function JST__keyPress(aEvent)
   {
+    let inputNode = this.inputNode;
+    let inputUpdated = false;
+
     if (aEvent.ctrlKey) {
-      let inputNode = this.inputNode;
-      let closePopup = false;
       switch (aEvent.charCode) {
         case 97:
           // control-a
+          this.clearCompletion();
+
           if (Services.appinfo.OS == "WINNT") {
-            closePopup = true;
+            // Allow Select All on Windows.
             break;
           }
+
           let lineBeginPos = 0;
           if (this.hasMultilineInput()) {
             // find index of closest newline <= to cursor
             for (let i = inputNode.selectionStart-1; i >= 0; i--) {
               if (inputNode.value.charAt(i) == "\r" ||
                   inputNode.value.charAt(i) == "\n") {
                 lineBeginPos = i+1;
                 break;
               }
             }
           }
           inputNode.setSelectionRange(lineBeginPos, lineBeginPos);
           aEvent.preventDefault();
-          closePopup = true;
           break;
+
         case 101:
           // control-e
           if (Services.appinfo.OS == "WINNT") {
             break;
           }
           let lineEndPos = inputNode.value.length;
           if (this.hasMultilineInput()) {
             // find index of closest newline >= cursor
@@ -3732,99 +3748,144 @@ JSTerm.prototype = {
                   inputNode.value.charAt(i) == "\n") {
                 lineEndPos = i;
                 break;
               }
             }
           }
           inputNode.setSelectionRange(lineEndPos, lineEndPos);
           aEvent.preventDefault();
+          this.clearCompletion();
           break;
+
         case 110:
           // Control-N differs from down arrow: it ignores autocomplete state.
           // Note that we preserve the default 'down' navigation within
           // multiline text.
           if (Services.appinfo.OS == "Darwin" &&
               this.canCaretGoNext() &&
               this.historyPeruse(HISTORY_FORWARD)) {
             aEvent.preventDefault();
+            // Ctrl-N is also used to focus the Network category button on MacOSX.
+            // The preventDefault() call doesn't prevent the focus from moving
+            // away from the input.
+            inputNode.focus();
           }
-          closePopup = true;
+          this.clearCompletion();
           break;
+
         case 112:
           // Control-P differs from up arrow: it ignores autocomplete state.
           // Note that we preserve the default 'up' navigation within
           // multiline text.
           if (Services.appinfo.OS == "Darwin" &&
               this.canCaretGoPrevious() &&
               this.historyPeruse(HISTORY_BACK)) {
             aEvent.preventDefault();
+            // Ctrl-P may also be used to focus some category button on MacOSX.
+            // The preventDefault() call doesn't prevent the focus from moving
+            // away from the input.
+            inputNode.focus();
           }
-          closePopup = true;
+          this.clearCompletion();
           break;
         default:
           break;
       }
-      if (closePopup) {
-        if (this.autocompletePopup.isOpen) {
-          this.clearCompletion();
-        }
-      }
       return;
     }
     else if (aEvent.shiftKey &&
         aEvent.keyCode == Ci.nsIDOMKeyEvent.DOM_VK_RETURN) {
       // shift return
       // TODO: expand the inputNode height by one line
       return;
     }
 
-    let inputUpdated = false;
-
-    switch(aEvent.keyCode) {
+    switch (aEvent.keyCode) {
       case Ci.nsIDOMKeyEvent.DOM_VK_ESCAPE:
         if (this.autocompletePopup.isOpen) {
           this.clearCompletion();
           aEvent.preventDefault();
         }
         else if (this.sidebar) {
           this._sidebarDestroy();
+          aEvent.preventDefault();
         }
         break;
 
-      // Bug 873250 - always enter, ignore autocomplete
       case Ci.nsIDOMKeyEvent.DOM_VK_RETURN:
-        this.execute();
+        if (this._autocompletePopupNavigated &&
+            this.autocompletePopup.isOpen &&
+            this.autocompletePopup.selectedIndex > -1) {
+          this.acceptProposedCompletion();
+        }
+        else {
+          this.execute();
+          this._inputChanged = false;
+        }
         aEvent.preventDefault();
         break;
 
       case Ci.nsIDOMKeyEvent.DOM_VK_UP:
         if (this.autocompletePopup.isOpen) {
           inputUpdated = this.complete(this.COMPLETE_BACKWARD);
+          if (inputUpdated) {
+            this._autocompletePopupNavigated = true;
+          }
         }
         else if (this.canCaretGoPrevious()) {
           inputUpdated = this.historyPeruse(HISTORY_BACK);
         }
         if (inputUpdated) {
           aEvent.preventDefault();
         }
         break;
 
       case Ci.nsIDOMKeyEvent.DOM_VK_DOWN:
         if (this.autocompletePopup.isOpen) {
           inputUpdated = this.complete(this.COMPLETE_FORWARD);
+          if (inputUpdated) {
+            this._autocompletePopupNavigated = true;
+          }
         }
         else if (this.canCaretGoNext()) {
           inputUpdated = this.historyPeruse(HISTORY_FORWARD);
         }
         if (inputUpdated) {
           aEvent.preventDefault();
         }
         break;
 
+      case Ci.nsIDOMKeyEvent.DOM_VK_HOME:
+      case Ci.nsIDOMKeyEvent.DOM_VK_END:
+      case Ci.nsIDOMKeyEvent.DOM_VK_LEFT:
+        if (this.autocompletePopup.isOpen || this.lastCompletion.value) {
+          this.clearCompletion();
+        }
+        break;
+
+      case Ci.nsIDOMKeyEvent.DOM_VK_RIGHT: {
+        let cursorAtTheEnd = this.inputNode.selectionStart ==
+                             this.inputNode.selectionEnd &&
+                             this.inputNode.selectionStart ==
+                             this.inputNode.value.length;
+        let haveSuggestion = this.autocompletePopup.isOpen ||
+                             this.lastCompletion.value;
+        let useCompletion = cursorAtTheEnd || this._autocompletePopupNavigated;
+        if (haveSuggestion && useCompletion &&
+            this.complete(this.COMPLETE_HINT_ONLY) &&
+            this.lastCompletion.value &&
+            this.acceptProposedCompletion()) {
+          aEvent.preventDefault();
+        }
+        if (this.autocompletePopup.isOpen) {
+          this.clearCompletion();
+        }
+        break;
+      }
       case Ci.nsIDOMKeyEvent.DOM_VK_TAB:
         // Generate a completion and accept the first proposed value.
         if (this.complete(this.COMPLETE_HINT_ONLY) &&
             this.lastCompletion &&
             this.acceptProposedCompletion()) {
           aEvent.preventDefault();
         }
         else if (this._inputChanged) {
@@ -4091,19 +4152,21 @@ JSTerm.prototype = {
     let completionType = this.lastCompletion.completionType;
     this.lastCompletion = {
       value: inputValue,
       matchProp: lastPart,
     };
 
     if (items.length > 1 && !popup.isOpen) {
       popup.openPopup(inputNode);
+      this._autocompletePopupNavigated = false;
     }
     else if (items.length < 2 && popup.isOpen) {
       popup.hidePopup();
+      this._autocompletePopupNavigated = false;
     }
 
     if (items.length == 1) {
       popup.selectedIndex = 0;
     }
 
     this.onAutocompleteSelect();
 
@@ -4139,16 +4202,17 @@ JSTerm.prototype = {
    */
   clearCompletion: function JSTF_clearCompletion()
   {
     this.autocompletePopup.clearItems();
     this.lastCompletion = { value: null };
     this.updateCompleteNode("");
     if (this.autocompletePopup.isOpen) {
       this.autocompletePopup.hidePopup();
+      this._autocompletePopupNavigated = false;
     }
   },
 
   /**
    * Accept the proposed input completion.
    *
    * @return boolean
    *         True if there was a selected completion item and the input value
@@ -4406,20 +4470,22 @@ CommandController.prototype = {
         // Only enable "copy" if nodes are selected.
         return this.owner.outputNode.selectedCount > 0;
       case "consoleCmd_openURL":
       case "consoleCmd_copyURL": {
         // Only enable URL-related actions if node is Net Activity.
         let selectedItem = this.owner.outputNode.selectedItem;
         return selectedItem && "url" in selectedItem;
       }
+      case "consoleCmd_clearOutput":
       case "cmd_fontSizeEnlarge":
       case "cmd_fontSizeReduce":
       case "cmd_fontSizeReset":
       case "cmd_selectAll":
+      case "cmd_find":
         return true;
       case "cmd_close":
         return this.owner.owner._browserConsole;
     }
     return false;
   },
 
   doCommand: function CommandController_doCommand(aCommand)
@@ -4429,16 +4495,22 @@ CommandController.prototype = {
         this.copy();
         break;
       case "consoleCmd_openURL":
         this.openURL();
         break;
       case "consoleCmd_copyURL":
         this.copyURL();
         break;
+      case "consoleCmd_clearOutput":
+        this.owner.jsterm.clearOutput(true);
+        break;
+      case "cmd_find":
+        this.owner.filterBox.focus();
+        break;
       case "cmd_selectAll":
         this.selectAll();
         break;
       case "cmd_fontSizeEnlarge":
         this.owner.changeFontSize("+");
         break;
       case "cmd_fontSizeReduce":
         this.owner.changeFontSize("-");
--- a/browser/devtools/webconsole/webconsole.xul
+++ b/browser/devtools/webconsole/webconsole.xul
@@ -29,29 +29,34 @@
   <commandset id="consoleCommands"
               commandupdater="true"
               events="richlistbox-select"
               oncommandupdate="goUpdateConsoleCommands();">
     <command id="consoleCmd_openURL"
              oncommand="goDoCommand('consoleCmd_openURL');"/>
     <command id="consoleCmd_copyURL"
              oncommand="goDoCommand('consoleCmd_copyURL');"/>
+    <command id="consoleCmd_clearOutput"
+             oncommand="goDoCommand('consoleCmd_clearOutput');"/>
+    <command id="cmd_find" oncommand="goDoCommand('cmd_find');"/>
     <command id="cmd_fullZoomEnlarge" oncommand="goDoCommand('cmd_fontSizeEnlarge');"/>
     <command id="cmd_fullZoomReduce" oncommand="goDoCommand('cmd_fontSizeReduce');"/>
     <command id="cmd_fullZoomReset" oncommand="goDoCommand('cmd_fontSizeReset');"/>
     <command id="cmd_close" oncommand="goDoCommand('cmd_close');" disabled="true"/>
   </commandset>
   <keyset id="consoleKeys">
     <key id="key_fullZoomReduce"  key="&fullZoomReduceCmd.commandkey;" command="cmd_fullZoomReduce"  modifiers="accel"/>
     <key key="&fullZoomReduceCmd.commandkey2;"  command="cmd_fullZoomReduce" modifiers="accel"/>
     <key id="key_fullZoomEnlarge" key="&fullZoomEnlargeCmd.commandkey;" command="cmd_fullZoomEnlarge" modifiers="accel"/>
     <key key="&fullZoomEnlargeCmd.commandkey2;" command="cmd_fullZoomEnlarge" modifiers="accel"/>
     <key key="&fullZoomEnlargeCmd.commandkey3;" command="cmd_fullZoomEnlarge" modifiers="accel"/>
     <key id="key_fullZoomReset" key="&fullZoomResetCmd.commandkey;" command="cmd_fullZoomReset" modifiers="accel"/>
     <key key="&fullZoomResetCmd.commandkey2;" command="cmd_fullZoomReset" modifiers="accel"/>
+    <key key="&findCmd.key;" command="cmd_find" modifiers="accel"/>
+    <key key="&clearOutputCmd.key;" command="consoleCmd_clearOutput" modifiers="accel"/>
     <key key="&closeCmd.key;" command="cmd_close" modifiers="accel"/>
   </keyset>
   <keyset id="editMenuKeys"/>
 
   <popupset id="mainPopupSet">
     <menupopup id="output-contextmenu"
                onpopupshowing="ConsoleContextMenu.build(event);">
       <menuitem id="saveBodiesContextMenu" type="checkbox" label="&saveBodies.label;"
@@ -67,90 +72,108 @@
     </menupopup>
   </popupset>
 
   <box class="hud-outer-wrapper devtools-responsive-container" flex="1">
     <vbox class="hud-console-wrapper" flex="1">
       <toolbar class="hud-console-filter-toolbar devtools-toolbar" mode="full">
         <toolbarbutton label="&btnPageNet.label;" type="menu-button"
                        category="net" class="devtools-toolbarbutton webconsole-filter-button"
-                       tooltiptext="&btnPageNet.tooltip;">
+                       tooltiptext="&btnPageNet.tooltip;"
+#ifdef XP_MACOSX
+                       accesskey="&btnPageNet.accesskeyMacOSX;"
+#else
+                       accesskey="&btnPageNet.accesskey;"
+#endif
+                       tabindex="3">
           <menupopup>
             <menuitem label="&btnConsoleErrors;" type="checkbox" autocheck="false"
                       prefKey="network"/>
             <menuitem label="&btnConsoleLog;" type="checkbox" autocheck="false"
                       prefKey="networkinfo"/>
             <menuseparator id="saveBodiesSeparator" />
             <menuitem id="saveBodies" type="checkbox" label="&saveBodies.label;"
                       accesskey="&saveBodies.accesskey;"/>
           </menupopup>
         </toolbarbutton>
         <toolbarbutton label="&btnPageCSS.label;" type="menu-button"
                        category="css" class="devtools-toolbarbutton webconsole-filter-button"
-                       tooltiptext="&btnPageCSS.tooltip;">
+                       tooltiptext="&btnPageCSS.tooltip;"
+                       accesskey="&btnPageCSS.accesskey;"
+                       tabindex="4">
           <menupopup>
             <menuitem label="&btnConsoleErrors;" type="checkbox" autocheck="false"
                       prefKey="csserror"/>
             <menuitem label="&btnConsoleWarnings;" type="checkbox"
                       autocheck="false" prefKey="cssparser"/>
           </menupopup>
         </toolbarbutton>
         <toolbarbutton label="&btnPageJS.label;" type="menu-button"
                        category="js" class="devtools-toolbarbutton webconsole-filter-button"
-                       tooltiptext="&btnPageJS.tooltip;">
+                       tooltiptext="&btnPageJS.tooltip;"
+                       accesskey="&btnPageJS.accesskey;"
+                       tabindex="5">
           <menupopup>
             <menuitem label="&btnConsoleErrors;" type="checkbox"
                       autocheck="false" prefKey="exception"/>
             <menuitem label="&btnConsoleWarnings;" type="checkbox"
                       autocheck="false" prefKey="jswarn"/>
+            <menuitem label="&btnConsoleLog;" type="checkbox"
+                      autocheck="false" prefKey="jslog"/>
           </menupopup>
         </toolbarbutton>
         <toolbarbutton label="&btnPageSecurity.label;" type="menu-button"
                        category="security" class="devtools-toolbarbutton webconsole-filter-button"
-                       tooltiptext="&btnPageSecurity.tooltip;">
+                       tooltiptext="&btnPageSecurity.tooltip;"
+                       accesskey="&btnPageSecurity.accesskey;"
+                       tabindex="6">
           <menupopup>
             <menuitem label="&btnConsoleErrors;" type="checkbox"
                       autocheck="false" prefKey="secerror"/>
             <menuitem label="&btnConsoleWarnings;" type="checkbox"
                       autocheck="false" prefKey="secwarn"/>
           </menupopup>
         </toolbarbutton>
         <toolbarbutton label="&btnPageLogging.label;" type="menu-button"
                        category="logging" class="devtools-toolbarbutton webconsole-filter-button"
-                       tooltiptext="&btnPageLogging.tooltip;">
+                       tooltiptext="&btnPageLogging.tooltip;"
+                       accesskey="&btnPageLogging.accesskey;"
+                       tabindex="7">
           <menupopup>
             <menuitem label="&btnConsoleErrors;" type="checkbox"
                       autocheck="false" prefKey="error"/>
             <menuitem label="&btnConsoleWarnings;" type="checkbox"
                       autocheck="false" prefKey="warn"/>
             <menuitem label="&btnConsoleInfo;" type="checkbox" autocheck="false"
                       prefKey="info"/>
             <menuitem label="&btnConsoleLog;" type="checkbox" autocheck="false"
                       prefKey="log"/>
           </menupopup>
         </toolbarbutton>
 
         <toolbarbutton class="webconsole-clear-console-button devtools-toolbarbutton"
-                       label="&btnClear.label;" tooltiptext="&btnClear.tooltip;"/>
+                       label="&btnClear.label;" tooltiptext="&btnClear.tooltip;"
+                       accesskey="&btnClear.accesskey;"
+                       tabindex="8"/>
 
         <spacer flex="1"/>
 
         <textbox class="compact hud-filter-box devtools-searchinput" type="search"
-                 placeholder="&filterOutput.placeholder;"/>
+                 placeholder="&filterOutput.placeholder;" tabindex="2"/>
       </toolbar>
 
       <richlistbox class="hud-output-node" orient="vertical" flex="1"
                    seltype="multiple" context="output-contextmenu"
-                   style="direction:ltr;"/>
+                   style="direction:ltr;" tabindex="1"/>
 
       <hbox class="jsterm-input-container" style="direction:ltr">
         <stack class="jsterm-stack-node" flex="1">
           <textbox class="jsterm-complete-node" multiline="true" rows="1"
                    tabindex="-1"/>
-          <textbox class="jsterm-input-node" multiline="true" rows="1"/>
+          <textbox class="jsterm-input-node" multiline="true" rows="1" tabindex="0"/>
         </stack>
       </hbox>
     </vbox>
 
     <splitter class="devtools-side-splitter"/>
 
     <tabbox id="webconsole-sidebar" class="devtools-sidebar-tabs" hidden="true" width="300">
       <tabs/>
--- a/browser/locales/en-US/chrome/browser/devtools/toolbox.dtd
+++ b/browser/locales/en-US/chrome/browser/devtools/toolbox.dtd
@@ -9,55 +9,64 @@
 
 <!ENTITY toolboxCloseButton.tooltip    "Close Developer Tools">
 <!ENTITY toolboxOptionsButton.key      "O">
 
 <!-- LOCALIZATION NOTE (options.context.advancedSettings): This is the label for
   -  the heading of the advanced settings group in the options panel. -->
 <!ENTITY options.context.advancedSettings "Advanced settings">
 
-<!-- LOCALIZATION NOTE (options.context.requiresRestart): This is the requires
-  -  restart label at the bottom of the advanced settings group in the options
-  -  panel. -->
-<!ENTITY options.context.requiresRestart  "* Requires browser restart">
+<!-- LOCALIZATION NOTE (options.context.requiresRestart2): This is the requires
+  -  restart label at right of settings that require a browser restart to be
+  -  effective. -->
+<!ENTITY options.context.requiresRestart2  "Requires browser restart">
 
-<!-- LOCALIZATION NOTE (options.context.triggersPageRefresh): This is the
-  -  triggers page refresh label at the bottom of the advanced settings group in
-  -  the options panel. -->
-<!ENTITY options.context.triggersPageRefresh  "&#8224; Triggers page refresh">
+<!-- LOCALIZATION NOTE (options.restartButton.label): This is the label for the
+  -  restart button next to options.context.requiresRestart2 label. -->
+<!ENTITY options.restartButton.label  "Restart now">
 
-<!-- LOCALIZATION NOTE (options.enableChrome.label): This is the label for the
+<!-- LOCALIZATION NOTE (options.context.triggersPageRefresh2): This is the
+  -  triggers page refresh label next to the settings in the advanced settings
+  -  group in the options panel which trigger page reload. -->
+<!ENTITY options.context.triggersPageRefresh2  "Current session only, reloads the page">
+
+<!-- LOCALIZATION NOTE (options.enableChrome.label3): This is the label for the
   -  checkbox that toggles chrome debugging, i.e. devtools.chrome.enabled
   -  boolean preference in about:config, in the options panel. -->
-<!ENTITY options.enableChrome.label2    "Enable chrome debugging *">
-<!ENTITY options.enableChrome.tooltip  "Turning this option on will allow you to use various developer tools in browser context">
+<!ENTITY options.enableChrome.label3    "Enable chrome debugging">
+<!ENTITY options.enableChrome.tooltip   "Turning this option on will allow you to use various developer tools in browser context">
 
-<!-- LOCALIZATION NOTE (options.enableRemote.label): This is the label for the
+<!-- LOCALIZATION NOTE (options.enableRemote.label3): This is the label for the
   -  checkbox that toggles remote debugging, i.e. devtools.debugger.remote-enabled
   -  boolean preference in about:config, in the options panel. -->
-<!ENTITY options.enableRemote.label2    "Enable remote debugging *">
-<!ENTITY options.enableRemote.tooltip  "Turning this option on will allow the developer tools to debug remote Firefox instance like Firefox OS">
+<!ENTITY options.enableRemote.label3    "Enable remote debugging">
+<!ENTITY options.enableRemote.tooltip   "Turning this option on will allow the developer tools to debug remote Firefox instance like Firefox OS">
 
-<!-- LOCALIZATION NOTE (options.disableJavaScript.label,
+<!-- LOCALIZATION NOTE (options.disableJavaScript.label2,
   -  options.disableJavaScript.tooltip): This is the options panel label and
-  - tooltip for the checkbox that toggles JavaScript on or off. -->
-<!ENTITY options.disableJavaScript.label    "Disable JavaScript for the current tab (temporary) &#8224;">
-<!ENTITY options.disableJavaScript.tooltip  "Turning this option on will disable JavaScript for the current tab. If the tab or the toolbox is closed then this setting will be forgotten.">
+  -  tooltip for the checkbox that toggles JavaScript on or off. -->
+<!ENTITY options.disableJavaScript.label2    "Disable JavaScript">
+<!ENTITY options.disableJavaScript.tooltip   "Turning this option on will disable JavaScript for the current tab. If the tab or the toolbox is closed then this setting will be forgotten.">
 
 <!-- LOCALIZATION NOTE (options.selectDefaultTools.label): This is the label for
   -  the heading of group of checkboxes corresponding to the default developer
   -  tools. -->
 <!ENTITY options.selectDefaultTools.label     "Default Firefox Developer Tools">
 
-<!-- LOCALIZATION NOTE (options.selectDefaultTools.label): This is the label for
+<!-- LOCALIZATION NOTE (options.selectAdditionalTools.label): This is the label for
   -  the heading of group of checkboxes corresponding to the developer tools
   -  added by add-ons. This heading is hidden when there is no developer tool
   -  installed by add-ons. -->
 <!ENTITY options.selectAdditionalTools.label  "Developer Tools installed by add-ons">
 
+<!-- LOCALIZATION NOTE (options.toolNotSupported.label): This is the label for
+  -  the explanation of the * marker on a tool which is currently not supported
+  -  for the target of the toolbox. -->
+<!ENTITY options.toolNotSupported.label  "* Not supported for current toolbox target">
+
 <!-- LOCALIZATION NOTE (options.selectDevToolsTheme.label): This is the label for
   -  the heading of the radiobox corresponding to the theme of the developer
   -  tools. -->
 <!ENTITY options.selectDevToolsTheme.label   "Choose DevTools theme:">
 <!ENTITY options.darkTheme.label             "Dark theme">
 <!ENTITY options.lightTheme.label            "Light theme">
 
 <!-- LOCALIZATION NOTE (options.webconsole.label): This is the label for the
--- a/browser/locales/en-US/chrome/browser/devtools/toolbox.properties
+++ b/browser/locales/en-US/chrome/browser/devtools/toolbox.properties
@@ -33,8 +33,14 @@ toolbox.titleTemplate=%1$S - %2$S
 
 # LOCALIZATION NOTE (toolbox.defaultTitle): This is used as the tool
 # name when no tool is selected.
 toolbox.defaultTitle=Developer Tools
 
 # LOCALIZATION NOTE (optionsButton.tooltip): This is used as the tooltip
 # for the optiosn panel tab.
 optionsButton.tooltip=Toolbox Options
+
+# LOCALIZATION NOTE (options.toolNotSupported): This is the template
+# used to add a * marker to the label for the Options Panel tool checkbox for the
+# tool which is not supported for the current toolbox target.
+# The name of the tool: %1$S.
+options.toolNotSupportedMarker=%1$S *
--- a/browser/locales/en-US/chrome/browser/devtools/webConsole.dtd
+++ b/browser/locales/en-US/chrome/browser/devtools/webConsole.dtd
@@ -40,44 +40,58 @@
 <!ENTITY openURL.accesskey "T">
 
 <!-- LOCALIZATION NOTE (btnPageNet.label): This string is used for the menu
   -  button that allows users to toggle the network logging output.
   -  This string and the following strings toggle various kinds of output
   -  filters. -->
 <!ENTITY btnPageNet.label   "Net">
 <!ENTITY btnPageNet.tooltip "Log network access">
+<!ENTITY btnPageNet.accesskey "N">
+<!-- LOCALIZATION NOTE (btnPageNet.accesskeyMacOSX): This string is used as
+  -  access key for the menu button that allows users to toggle the network
+  -  logging output. On MacOSX accesskeys are available with Ctrl-*. Please make
+  -  sure you do not use the following letters: A, E, N and P. These are used
+  -  for editing commands in text inputs. -->
+<!ENTITY btnPageNet.accesskeyMacOSX "t">
 <!ENTITY btnPageCSS.label   "CSS">
 <!ENTITY btnPageCSS.tooltip "Log CSS parsing errors">
+<!ENTITY btnPageCSS.accesskey "C">
 <!ENTITY btnPageJS.label    "JS">
 <!ENTITY btnPageJS.tooltip  "Log JavaScript exceptions">
+<!ENTITY btnPageJS.accesskey  "J">
 <!ENTITY btnPageSecurity.label "Security">
 <!ENTITY btnPageSecurity.tooltip "Log security errors and warnings">
+<!ENTITY btnPageSecurity.accesskey "S">
 
 <!-- LOCALIZATION NOTE (btnPageLogging): This is used as the text of the
   -  the toolbar. It shows or hides messages that the web developer inserted on
   -  the page for debugging purposes, using calls such console.log() and
   -  console.error(). -->
 <!ENTITY btnPageLogging.label   "Logging">
 <!ENTITY btnPageLogging.tooltip "Log messages sent to the window.console object">
+<!ENTITY btnPageLogging.accesskey "L">
 <!ENTITY btnConsoleErrors       "Errors">
 <!ENTITY btnConsoleInfo         "Info">
 <!ENTITY btnConsoleWarnings     "Warnings">
 <!ENTITY btnConsoleLog          "Log">
 
 <!ENTITY filterOutput.placeholder "Filter output">
 <!ENTITY btnClear.label        "Clear">
 <!ENTITY btnClear.tooltip      "Clear the Web Console output">
+<!ENTITY btnClear.accesskey    "r">
 
 <!ENTITY fullZoomEnlargeCmd.commandkey  "+">
 <!ENTITY fullZoomEnlargeCmd.commandkey2 "="> <!-- + is above this key on many keyboards -->
 <!ENTITY fullZoomEnlargeCmd.commandkey3 "">
 
 <!ENTITY fullZoomReduceCmd.commandkey   "-">
 <!ENTITY fullZoomReduceCmd.commandkey2  "">
 
 <!ENTITY fullZoomResetCmd.commandkey    "0">
 <!ENTITY fullZoomResetCmd.commandkey2   "">
 
 <!ENTITY copyURLCmd.label     "Copy Link Location">
 <!ENTITY copyURLCmd.accesskey "a">
 
-<!ENTITY closeCmd.key  "W">
+<!ENTITY closeCmd.key         "W">
+<!ENTITY findCmd.key          "F">
+<!ENTITY clearOutputCmd.key   "K">
--- a/browser/locales/en-US/chrome/browser/devtools/webconsole.properties
+++ b/browser/locales/en-US/chrome/browser/devtools/webconsole.properties
@@ -155,20 +155,16 @@ ToolboxWebconsole.tooltip=Web Console
 # string. This string is clickable such that the rest of the string is
 # retrieved from the server.
 longStringEllipsis=[…]
 
 # LOCALIZATION NOTE (longStringTooLong): the string displayed after the user
 # tries to expand a long string.
 longStringTooLong=The string you are trying to view is too long to be displayed by the Web Console.
 
-# LOCALIZATION NOTE (executeEmptyInput): the string displayed when the user
-# tries to execute code, but the input is empty.
-executeEmptyInput=No value to execute.
-
 # LOCALIZATION NOTE (NetworkPanel.fetchRemainingResponseContentLink): the
 # string  displayed in the network panel when the response body is only
 # partially available. Parameters: %S is the amount of bytes that need to be
 # fetched.
 NetworkPanel.fetchRemainingResponseContentLink=Fetch the remaining %S bytes
 
 # LOCALIZATION NOTE (NetworkPanel.fetchRemainingRequestContentLink): the
 # string displayed in the network panel when the request body is only
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -2065,105 +2065,28 @@ toolbar[mode="text"] toolbarbutton.chevr
   font-size: 300%;
 }
 
 .full-screen-approval-button,
 #full-screen-remember-decision {
   font-size: 120%;
 }
 
-/* Developer toolbar */
-
-#developer-toolbar {
-  border-top: 1px solid hsla(210, 8%, 5%, .65);
-}
-
 %include ../shared/devtools/responsivedesign.inc.css
 %include ../shared/devtools/highlighter.inc.css
 %include ../shared/devtools/commandline.inc.css
 
 .gcli-panel {
   padding: 0;
 }
 
-.gclitoolbar-input-node {
-  border-color: hsl(210,11%,10%);
-  box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset,
-              0 0 0 1px hsla(210,16%,76%,.1) inset,
-              0 1px 0 hsla(210,16%,76%,.15);
-}
-
 .gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
   color: hsl(210,11%,16%);
 }
 
-.gclitoolbar-prompt {
-  background-color: hsl(210,11%,16%);
-}
-
-/* Web Console */
-
-.web-console-frame {
-  border-bottom: 1px solid #aaa;
-}
-
-.web-console-frame[animated] {
-  transition: height 100ms;
-}
-
-/* Developer Toolbar */
-
-#developer-toolbar-toolbox-button {
-  min-width: 18px;
-}
-
-#developer-toolbar-toolbox-button > .toolbarbutton-text {
-  display: none;
-}
-
-#developer-toolbar-toolbox-button > .toolbarbutton-icon {
-  -moz-margin-end: 0;
-}
-
-.developer-toolbar-button {
-  -moz-appearance: none;
-  min-width: 78px;
-  min-height: 22px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  border-radius: 3px;
-  color: inherit;
-  border: 1px solid transparent;
-  margin: 0 5px;
-  padding: 0 10px;
-  list-style-image: url("chrome://browser/skin/devtools/tools-icons-small.png");
-}
-
-.developer-toolbar-button[open=true],
-.developer-toolbar-button:active:hover,
-.developer-toolbar-button[checked=true] {
-  border-color: hsla(210,8%,5%,.6);
-  background: rgba(0,0,0,.6);
-  box-shadow: 0 1px 2px rgba(0,0,0,.5) inset, 0 1px 0 hsla(210,16%,76%,.15);
-}
-
-.developer-toolbar-button:hover,
-.developer-toolbar-button[checked=true],
-.developer-toolbar-button[open=true] {
-  color: hsl(208,100%,60%) !important;
-  text-shadow: 0 0 6px hsl(208,100%,60%);
-}
-
-.developer-toolbar-button[checked=true] {
-  background: rgba(0,0,0,.4);
-}
-
-#developer-toolbar-toolbox-button {
-  -moz-image-region: rect(64px, 22px, 80px, 0);
-}
-
 /* Error counter */
 
 #developer-toolbar-toolbox-button[error-count]:before {
   color: #FDF3DE;
   min-width: 16px;
   text-shadow: none;
   background-image: linear-gradient(#B4211B, #8A1915);
   border-radius: 1px;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e120a392606af02764ee50b2fbec64caeab4f8f3
GIT binary patch
literal 375
zc$@)u0f_#IP)<h;3K|Lk000e1NJLTq001BW000mO1^@s6cL04^0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz8A(JzRCwBA{Qv(y!$1Nih5-fx?f@2K
z&V}30(xA*kKzsv;(fMFtpelvcFs<olVey#?#B+ccoeu`rGL3PDz$_?j2gKr7_{4_j
zY#_G8!Y3*U=0RzHAm+lt#|J<@=7zG50kI?+Uy2w9`~l*nP<9Lu|3l*wN;lttSQg5D
z3N;Uz&qhol{0hWtq3jead_v#}D5*f%Ke6zM$_0!B_@w4ACQ`B?DBgmg>^WHYgn$eX
zpM$d5vGDOa02D{jQ1%jNRz>FjBVai{5I=^prGc0ejsFX0IRFjj1SoqW5Pyf}VHp1#
z0n3?z_yd$}4a6^@i4ewrhPNO>vg{C4a~c|-5P(^h2F-T=(fF7NZL~5PXa@iU7yuB?
VM>c5s8}I-C002ovPDHLkV1f<PmE`~c
--- a/browser/themes/linux/devtools/commandline.css
+++ b/browser/themes/linux/devtools/commandline.css
@@ -5,19 +5,19 @@
 .gcli-body {
   margin: 0;
   font: message-box;
   color: hsl(210,30%,85%);
 }
 
 #gcli-output-root,
 #gcli-tooltip-root {
-  border: 1px solid hsl(210,11%,10%);
+  border: 1px solid hsl(206,37%,4%);
   box-shadow: 0 1px 0 hsla(209,29%,72%,.25) inset;
-  background-image: linear-gradient(hsla(209,11%,18%,0.9), hsl(210,11%,16%));
+  background-image: linear-gradient(hsla(209,18%,18%,0.9), hsl(209,23%,18%));
   border-radius: 3px;
 }
 
 #gcli-output-root {
   padding: 5px 10px;
   border-bottom-left-radius: 0;
   border-bottom-right-radius: 0;
   border-bottom: 0;
@@ -27,19 +27,19 @@
   padding: 5px 0px;
 }
 
 #gcli-tooltip-connector {
   margin-top: -1px;
   margin-left: 8px;
   width: 20px;
   height: 10px;
-  border-left: 1px solid hsl(210,11%,10%);
-  border-right: 1px solid hsl(210,11%,10%);
-  background-color: hsl(210,11%,16%);
+  border-left: 1px solid hsl(206,37%,4%);
+  border-right: 1px solid hsl(206,37%,4%);
+  background-color: hsl(209,23%,18%);
 }
 
 .gcli-tt-description,
 .gcli-tt-error {
   padding: 0 10px;
 }
 
 .gcli-row-out {
@@ -78,18 +78,18 @@
 
 .gcli-out-shortcut,
 .gcli-help-synopsis {
   padding: 0 3px;
   margin: 0 4px;
   font-weight: normal;
   font-size: 90%;
   border-radius: 3px;
-  background-color: hsl(210,11%,16%);
-  border: 1px solid hsl(210,11%,10%);
+  background-color: hsl(209,23%,18%);
+  border: 1px solid hsl(206,37%,4%);
 }
 
 .gcli-out-shortcut:before,
 .gcli-help-synopsis:before {
   color: hsl(210,30%,85%);
   -moz-padding-end: 2px;
 }
 
--- a/browser/themes/linux/devtools/common.css
+++ b/browser/themes/linux/devtools/common.css
@@ -41,17 +41,17 @@
 }
 
 .devtools-toolbarbutton > .toolbarbutton-menubutton-button {
   -moz-box-orient: horizontal;
 }
 
 .devtools-menulist:-moz-focusring,
 .devtools-toolbarbutton:-moz-focusring {
-  outline: 1px dotted hsla(210,30%,85%,0.4);
+  outline: 1px dotted hsla(210,30%,85%,0.7);
   outline-offset: -4px;
 }
 
 .devtools-toolbarbutton:not([label]) {
   min-width: 32px;
 }
 
 .devtools-toolbarbutton:not([label]) > .toolbarbutton-text {
@@ -179,27 +179,43 @@
   box-shadow: inset 0 0 0 1px hsla(0,68%,6%,.35);
   border-color: hsl(10,70%,40%) hsl(10,75%,37%) hsl(10,80%,35%) !important;
   background-image: url(magnifying-glass.png), linear-gradient(hsla(1,16%,76%,.45), hsla(1,16%,76%,.75));
 }
 
 /* Close button */
 
 .devtools-closebutton {
-  list-style-image: url("moz-icon://stock/gtk-close?size=menu");
-  margin-top: 0;
-  margin-bottom: 0;
+  list-style-image: url("chrome://browser/skin/devtools/close.png");
+  -moz-appearance: none;
+  border: none;
+  margin: 0 4px;
+  min-width: 16px;
+  width: 16px;
+  opacity: 0.6;
 }
 
 .devtools-closebutton > .toolbarbutton-icon {
   /* XXX Buttons have padding in widget/ that we don't want here but can't override with good CSS, so we must
      use evil CSS to give the impression of smaller content */
   margin: -4px;
 }
 
+.devtools-closebutton > .toolbarbutton-text {
+  display: none;
+}
+
+.devtools-closebutton:hover {
+  opacity: 0.8;
+}
+
+.devtools-closebutton:hover:active {
+  opacity: 1;
+}
+
 /* Splitters */
 
 .devtools-horizontal-splitter {
   -moz-appearance: none;
   border-top: 1px solid black;
   border-bottom-width: 0;
   min-height: 3px;
   height: 3px;
--- a/browser/themes/linux/devtools/computedview.css
+++ b/browser/themes/linux/devtools/computedview.css
@@ -77,22 +77,16 @@ body {
   }
 }
 
 .property-content {
   padding-left: 17px;
 }
 
 /* From skin */
-.helplink {
-  /* FIXME: remove this image 
-  background-image: url("chrome://browser/skin/devtools/goto-mdn.png");
-  */
-}
-
 .expander {
   visibility: hidden;
   margin-left: -12px!important;
 }
 
 .expander[open] {
   margin-left: -17px!important;
 }
--- a/browser/themes/linux/devtools/debugger.css
+++ b/browser/themes/linux/devtools/debugger.css
@@ -78,23 +78,22 @@
 
 #expressions {
   min-height: 10px;
   max-height: 125px;
 }
 
 .dbg-expression {
   height: 20px;
-  -moz-padding-start: 8px;
 }
 
 .dbg-expression-arrow {
-  width: 10px;
+  width: 16px;
   height: auto;
-  background: url("chrome://browser/skin/devtools/commandline.png") 0px 4px no-repeat;
+  background: -moz-image-rect(url("chrome://browser/skin/devtools/commandline-icon.png"), 0, 32, 16, 16);
 }
 
 .dbg-expression-input {
   -moz-padding-start: 2px !important;
   font-family: Menlo, Monaco, monospace;
 }
 
 /* Searchbox and the search operations help panel */
deleted file mode 100644
index dbe064863d65ac3123a7a60070114dd465852de2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/linux/devtools/splitview.css
+++ b/browser/themes/linux/devtools/splitview.css
@@ -90,32 +90,18 @@
   width: auto;
   min-width: 48px;
   min-height: 0;
 }
 
 
 /* Resizers */
 
-.splitview-landscape-resizer {
-  -moz-appearance: none;
-  width: 7px;
-  background-image: linear-gradient(to right, black 1px, rgba(255,255,255,0.2) 1px);
-  background-size: 2px 10px;
-  background-clip: padding-box;
-  background-repeat: repeat-x;
-  border-width: 1px;
-  border-style: solid;
-  border-color: rgba(255, 255, 255, 0.05);
-  margin: 5px 0;
-  transform: translateX(-7px);
-}
-
-.splitview-landscape-resizer:-moz-locale-dir(rtl) {
-  transform: translateX(7px);
+.splitview-landscape-splitter {
+  -moz-border-start-color: transparent;
 }
 
 .splitview-portrait-resizer {
   -moz-appearance: none;
   background: linear-gradient(black 1px, rgba(255,255,255,0.2) 1px),
               linear-gradient(hsl(210,11%,36%), hsl(210,11%,18%));
   height: 12px;
   background-size: 10px 2px, 100% 12px;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8a40d0d116d76c6ec4a77a459797f9f5e112df69
GIT binary patch
literal 1787
zc$@+I1_b$uP)<h;3K|Lk000e1NJLTq002M$000mO1^@s6rssJn00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D03mcmSad^jWnpw_
zZ*Cw|X>DZyGB7bSIxsdmF*G1DF*-3bIx;qAA1Jf{00v`8L_t(oN5z(FOcYlX$9HyS
zm&dXzZ^2eTv0!~fsu<D6SRZ{^ZT-;rO0XZ=P>fnJX%(pzB`MmMwg|LZp*FTeZ8fGf
z0fV+tDoHEa(m<n97Gnu-7WTpJ?C#8L|7Ws;tFjOJr8ha5*ZtqQzjMw#_cE#wo5Ll<
zqN@fr7@_5a5M`s?pijnw7S;{D>p$qHKobEoLeGby&v^B7nr{+ph9Pb80xnFev32z}
zxU9D8cfQ{|L}M_)2I5^p3i_<^s8k7F!R>G@_f0UJ@*UtaaK8;U+57G{0F;bFpM$=i
z!7{y?I_TF2(*vGEpY+(789S2~Wv|uhqoPRT=pSsmb@J@<a6kt=s{;)L_=y1D1dBmG
zH_tnbZ{+3uKpK1t>O8=wp)0{of{8Adt7YH*{YT`9gr+Cwor7h-Jc1xJ9y)Y*ONjc|
z3F)bMk1bvF8XFlAC5ocT+Sz4ktvXf%J)61iSUQ{(8_)rQC@%3jNCf=7H}mt)ojLQJ
z74VeG8*!x+^V=jzT1P*FNq}!H+`apQ!-qc|27EZ)?ZuVG38a4qAE}QB_-pT%mgep+
zDKSB(!@E=7as261C(O#+D0oz?TM$*2&Th-ClV4XbjP9&PuUkH4?W&6!eN;|B2QUmn
z>qjDMZf<TkfBwA1GCV}k8<7<hU3pmqXz7Z+-Do^rRaHG~9v&k2V%QuQEib<f|IbqN
zot>Qr5q%T%1b-T~6gEA8JdQQ!qXoc|^)&w4&T66?wJ~wal3!R>${Gym5y^?m0y+R`
z<5VV)ojq?3;8VTuRM13YM@PV7hzzhR`pk@s6`1@?Jnw})LHeGa-hjmrdMouKOG!!D
z1pOl1pMuS!cY}k2jsOl|oxD?W34)5uFlTm>E<LR%@wp|%j3Fvkes8l%ejR}Hrf*bj
z<qTk1HUm-L0GmiZce~w#Sx?O!@HYXZC#C+V1Jr8u0&nCgD=4KqGpA4Q44|hXW>Fjf
z{Yu=Qfl*c<HsbB6>C@WA(qnDMFdR3{?cgy_K}E(TCL~8M&RM96(#6oT!!+a=xqJ88
zm<|9uO@56=qe)a8fGb7YO+QCuoQ;i*mtA%%Ip>iEc$)kUj^n2K=qZvk2I=iBEiKgn
z^t8+>;q=*x1H4yR@9}u7?d`^*vGi2f7_H_-!!rvDJqEpA$pGK0ljp^OhO4!#R(Io(
zO74Y!8Ie}jFFfcriJ~O1teP7c8R`4+!i7J!Zr#?42@uo+%?n?Emvdnl2GoMk1!x{o
z40k%6#;Xktb?et}xaUVt@a3=-%D{;B-+;EGCPcd2?&cd!P1P^0THW@rUV)EXH2)Je
zA(k>#Zj#kz#}*<YD_Fr~vf6&XUhD4bEsKarX?ef_KJaPE<Wc?miry`%MFFFFK>Z2Y
zHJ0~%;IkAxs(%NHSJ{Ds2WdG3(<|^);N%A9{rTnb<68;~cT+v^tC!(5nw8p|xgV?J
zV(!Bao2|C`x*C_MyHyfhqDK<CxNt*LWc;*loCU;D2YBIMLCEO9B1g`_^L_Yn?THg7
zEC80@`D=iu$rr#VZRNgzHv;|$;D<uc({@LZU#$ECnb%xh{nfUeyLJr((gQwDrPZub
z&(HdZiJ36EGkE~-xKvxI7MU`QE{=d7VUQgFcv`co@%8bC;4h8?emk_YeBnzE94M!K
zKLq$N=*nPE`@(;5^yv0Id)^xi0w1jk(>^O@&8kpE8}4t*X0z3OrM_G(Fy;Q>>0e3_
zTw!-OoLFme)koyJ^Yb@{1n-^j>sZ@7*7*qO5&1S8dP0Kt>Prx9I~6z5<NhX`_f{}?
zuQt^^`^gf4=T&Z}OQb`OFle$kf2upeN}S)wD~^^O;B>j7l9DI=Y&M&X1fQFmTTh3c
zV3AV>!8(mgoS0N)x7(Wlf2W{eM<pG4Le<0Zlj0K+i+G;D2>7Pr;(Y~l=m}A;cQdMZ
zuIc7qo}Qk5$z-xfSL#3Gn6NS~BD#01wD(=cvIB;OhVS8!vphUJoCEyj`ua=O5PvR@
zg`J@Vhm<^Qn_+-I`fW{(c|3Z6{{sDo*!Cg;|8_-XWzd@81JN%H^taj<%uf+G&gQvV
zSIVlxDl`$%eZk;q47mnqBlT2(Xz!;Y;T+H8|8G4Cpw9Bojci8EPL@QsEi!IOgGLu`
d3I(3#{x4m^`SZ%g&9DFf002ovPDHLkV1f!>R#yN3
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4c968f542d8f8ef351fe4dc16370082a28c4fdf6
GIT binary patch
literal 441
zc$@*b0Y?6bP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004iNkl<Zc-p0t
z&nv@W9LL{DisnE#a911%2Ze*vF4STN$u3KgF|FojBVw@{MT==kl&inMZgQ8%Y-Y2u
zaYH7f_V|1jPcz@y%Hj1reBbZ)>$yA+gb@EC`6(zWmbe~JMl2Dh#M>7q!~$n2-QR+(
zduWMAXB1*14gN>j6L%B^n^9<~m~ccO{(?K){ULBfQNA9*bMG4ZDQHq+_yDtOBw)Bp
zn+hpd4Z~``gP@{{Kn6-XEa>4LLmQhEEC+CIyG;s^g+lEL^xUP*g%m7?5VwY<ARDSK
zJM^@9mxB2l#OFgf3t)7kc`k^U6ij+>IdhYnfDTd<f;L_$7&?M;DwthBho~)d5O)p7
za7jU{33X;aUZ#U+%QU7;$HTDz1b16TQJ;E|^1Jt8HV2U4f)ZxJbe$x@UEZW$<r2*v
zCPsXS8T}ASaHiSCICmA_0teNddF?tkb_UOIHSEKO!Hd^{Q+WCgvCY}{SV17kC#r~A
jqLFAIYKThC(qH2zvCVaN4v|;$00000NkvXXu0mjfz_+~V
--- a/browser/themes/linux/devtools/toolbox.css
+++ b/browser/themes/linux/devtools/toolbox.css
@@ -21,31 +21,25 @@
 #toolbox-dock-side {
   list-style-image: url("chrome://browser/skin/devtools/dock-side.png");
 }
 
 #toolbox-dock-window {
   list-style-image: url("chrome://browser/skin/devtools/undock.png");
 }
 
-#toolbox-close {
-  list-style-image: url("chrome://browser/skin/devtools/close.png");
-}
-
 #toolbox-dock-window,
 #toolbox-dock-bottom,
-#toolbox-dock-side,
-#toolbox-close {
+#toolbox-dock-side {
   opacity: 0.6;
 }
 
 #toolbox-dock-window:hover,
 #toolbox-dock-bottom:hover,
-#toolbox-dock-side:hover,
-#toolbox-close:hover {
+#toolbox-dock-side:hover {
   opacity: 1;
 }
 
 #toolbox-controls-separator {
   width: 3px;
   background-image: linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0)),
                     linear-gradient(hsla(206,37%,4%,0), hsla(206,37%,4%,.6), hsla(206,37%,4%,0)),
                     linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0));
@@ -223,16 +217,42 @@
                      no-repeat,
                      no-repeat,
                      no-repeat,
                      repeat-x;
   background-position: top right, top left, left, right;
   box-shadow: 1px -1px 0 hsla(206,37%,4%,.2) inset;
 }
 
+.devtools-tab:not([selected=true]).highlighted {
+  color: #f5f7fa;
+  background-image: radial-gradient(farthest-corner at center top, #c0ff40, hsla(80,100%,63%,.5) 70%, hsla(80,100%,63%,.3) 97%),
+                    radial-gradient(farthest-side at center top, hsla(80,100%,35%,.5), hsla(80,100%,35%,0)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(99,100%,14%,.2), hsla(99,100%,14%,.2));
+  background-size: 100% 1px,
+                   100% 5px,
+                   1px 100%,
+                   1px 100%,
+                   100%;
+  background-repeat: no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     repeat-x;
+  background-position: top right, top left, left, right;
+}
+
+.devtools-tab:not(.highlighted) > .highlighted-icon,
+.devtools-tab[selected=true] > .highlighted-icon,
+.devtools-tab:not([selected=true]).highlighted > .default-icon {
+  visibility: collapse;
+}
+
 #options-panel {
   background-image: url("chrome://browser/skin/newtab/noise.png");
 }
 
 .options-vertical-pane {
   margin: 15px;
   width: calc(50% - 30px);
   min-width: 400px;
@@ -247,8 +267,21 @@
 .options-groupbox {
   -moz-margin-start: 15px;
   padding: 4px;
 }
 
 .options-groupbox > * {
   padding: 2px;
 }
+
+.options-citation-label {
+  font-size: 1rem !important;
+  /* !important is required otherwise font-size will still be 1.4rem */
+  font-style: italic;
+  padding: 4px 0 0; /* To align it with the checkbox */
+  color: #444;
+}
+
+.options-citation-label + label {
+  padding: 3px 0 0 !important; /* To align it with the checkbox */
+  font-style: italic;
+}
deleted file mode 100644
index 12e9c72acc819abb8dcc9985d94ea3b1b9bbda2a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0945af275e8860ed810900b6d1f36d1707622eae
GIT binary patch
literal 833
zc$@)21HSx;P)<h;3K|Lk000e1NJLTq001xm000mO1ONa4`lmEH0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!<4Ht8R5;7El;2BJVHn3Brx(sMZKPg>
zgrXC?aWeOd$#xvEHACBUTU(oF%gxPcKhB(xWT0XS5>X*$rA{N67hZZLcp-TaLEY3}
zVPU0olMbGqqf^e=)u7@FXYcv$<^8<x_j%p}2>(}wOp>7jFJV2ZM5-r8LI3;{K>32T
zDGWilDN?X0ykN!h+#)LAVG_ngnj}Y+4=`iJ$*%%g381Dr1QyVN9<<O38hYyK%~Bo0
zn$sDwF^EEdw%~^wBtMM;5S5Kd0e#CGd+TUL_S^dF4eS#gzX3XEQTBb@-U&u9S~@?(
zp`Dx#Y{;Ep1bQG8h*b512RxOrPy|BcjEDi&rA+C(A-$K`&zM$9=U-&db`DU19Sk1_
z@L6_-^%&jRNBH#fAQ-@osvLj^cc>q2yMc>IW%6ARZLxlE11|<t?627#FsZgV^Bgl`
zx&L(yl@frit^1hA>Fm_e6iy$ftUVNx7|?y;_M8sYyMdivY+2PPhv)>nG$Q-K8&{kO
zGhs*c=PF(k)j$BWf~h%pbPuO#`J{#e6FFkQb?B8pe6B||wk&GP#(*Oy55WFda}O~#
z#^xOS{+4PX1!%yibN}XX0w<1=W-rx33g`k~`RL1bp@o;s%2Du<BLOJ(Gv+5Hevgyu
zDe;*e?`3iwbsmwWld`AX3#Z7=*t+r}a#qHLa2B<~DRu)@F>px%SJLUCxIJ)~{<Y%d
ziej&p@v5}QpAtg$8m>7g)Z$AbzsOwlB%E>ign)=f@{0_3XLI&og|fFFu5QlaT`Uo`
zse_u*vCZjyl)Xvg-R4f6^EORFHzd?vW*GY5R@t!H3kh<PQh*G-SbZ|8q>=a|P}At4
z%(c|}21>q_p296KHhRu3nmh$w5=S@OMe@^#-sP!6KNS^Qky<zH*)Ec!*1Z)ut5cYj
z^DszCzyK*BjOBcoEfi3Um(hj6Jh{j%&dp%3PVy-fR7Y-sfWOioZs(PVino5$00000
LNkvXXu0mjf5T1k#
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..af42a28df9c4a32ecdc6cbe670abbe5c7f4fe316
GIT binary patch
literal 238
zc%17D@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`>;M1%^YZe5<kqcQ_4M>|
zb90|Rf4*hQmKQHxOqej?*|TR)o;>mP_Wt|#@8idh`}_NCY;1s9fBpLP=g%Lhi+dV@
z9FdYBzhDLn1q&Ao2ylVo$0x1s1Lb`^T^vIy;-;Rm6gptQ!{nf-bARXm|JQx2V%qW;
ze^0HP*DWkHX%=t8uLWY6yCqw?Kd-B^JN_teTD|<I`Jy{d=dEEmdMrvJX}3VY?A_h*
Yyjz(x`pY@_fd(^py85}Sb4q9e08YbUw*UYD
--- a/browser/themes/linux/devtools/webconsole.css
+++ b/browser/themes/linux/devtools/webconsole.css
@@ -1,268 +1,23 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-/* General output styles */
-
-.webconsole-timestamp {
-  color: GrayText;
-  margin-top: 0;
-  margin-bottom: 0;
-  font-family: "DejaVu Sans Mono", monospace;
-}
-
-.hud-msg-node {
-  list-style-image: url(chrome://browser/skin/devtools/webconsole.png);
-  -moz-image-region: rect(0, 1px, 0, 0);
-}
-
-.webconsole-msg-icon {
-  margin: 3px 4px;
-  width: 8px;
-  height: 8px;
-}
-
-.hud-clickable {
-  cursor: pointer;
-  text-decoration: underline;
-}
-
-.webconsole-msg-body {
-  margin-top: 0;
-  margin-bottom: 3px;
-  -moz-margin-start: 3px;
-  -moz-margin-end: 6px;
-  white-space: pre-wrap;
-  font-family: "DejaVu Sans Mono", monospace;
-}
-
-.webconsole-msg-body-piece {
-  margin: 0;
-}
+%include ../../shared/devtools/webconsole.inc.css
 
-.webconsole-msg-url {
-  margin: 0 6px;
-}
-
-/* Repeated messages */
-.webconsole-msg-repeat {
-  margin: 2px 0;
-  padding-left: 4px;
-  padding-right: 4px;
-  color: white;
-  background-color: red;
-  border-radius: 40px;
-  font: message-box;
-  font-size: 0.9em;
-  font-weight: 600;
-}
-
-/* TODO move this and other functional rules to content - bug 635359 */
-.webconsole-msg-repeat[value="1"] {
-  display: none;
-}
-
-.webconsole-location {
-  margin-top: 0;
-  margin-bottom: 0;
-  -moz-margin-start: 0;
-  -moz-margin-end: 6px;
-  width: 10em;
-  text-align: end;
-}
-
-.webconsole-mixed-content {
-  color: #FF0000;
-}
-
-.webconsole-mixed-content-link {
-  color: #0000EE;
-  margin: 0;
-}
-
-.hud-msg-node[selected="true"] > .webconsole-timestamp,
-.hud-msg-node[selected="true"] > .webconsole-location {
-  color: inherit;
+.webconsole-timestamp,
+.webconsole-msg-body {
+  font-family: "DejaVu Sans Mono", monospace;
 }
 
 .jsterm-input-node,
 .jsterm-complete-node {
   font: 0.9em "DejaVu Sans Mono", monospace;
 }
 
 .hud-output-node {
-  -moz-appearance: none;
-  border-bottom: 1px solid ThreeDShadow;
-  margin: 0;
   font-size: 0.9em;
 }
 
-.hud-filtered-by-type,
-.hud-filtered-by-string {
-  display: none;
-}
-
-.hidden-message {
-  display: block;
-  visibility: hidden;
-  height: 0;
-  overflow: hidden;
-}
-
-/* WebConsole colored drops */
-
-.webconsole-filter-button[checked] {
-  color: white !important;
-}
-
-.webconsole-filter-button > .toolbarbutton-menubutton-button:before {
-  content: "";
-  display: inline-block;
-  height: 8px;
-  width: 8px;
-  border-radius: 50%;
-  margin-left: 5px;
-  border-width: 1px;
-  border-style: solid;
-}
-
-/* Network styles */
-.webconsole-filter-button[category="net"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#444444, #000000);
-  border-color: #777;
-}
-
-.webconsole-msg-network > .webconsole-msg-icon-container {
-  -moz-border-start: solid #000 6px;
-}
-
-.webconsole-msg-network.webconsole-msg-error {
-  -moz-image-region: rect(0, 16px, 8px, 8px);
-}
-
-/* CSS styles */
-.webconsole-filter-button[category="css"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#2DC3F3, #00B6F0);
-  border-color: #1BA2CC;
-}
-
-.webconsole-msg-cssparser > .webconsole-msg-icon-container {
-  -moz-border-start: solid #00b6f0 6px;
-}
-
-.webconsole-msg-cssparser.webconsole-msg-error {
-  -moz-image-region: rect(8px, 16px, 16px, 8px);
-}
-
-.webconsole-msg-cssparser.webconsole-msg-warn {
-  -moz-image-region: rect(8px, 24px, 16px, 16px);
-}
-
-/* JS styles */
-.webconsole-filter-button[category="js"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#FCB142, #FB9500);
-  border-color: #E98A00;
-}
-
-.webconsole-msg-exception > .webconsole-msg-icon-container {
-  -moz-border-start: solid #fb9500 6px;
-}
-
-.webconsole-msg-exception.webconsole-msg-error {
-  -moz-image-region: rect(16px, 16px, 24px, 8px);
-}
-
-.webconsole-msg-exception.webconsole-msg-warn {
-  -moz-image-region: rect(16px, 24px, 24px, 16px);
-}
-
-/* Web Developer styles */
-.webconsole-filter-button[category="logging"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#B9B9B9, #AAAAAA);
-  border-color: #929292;
-}
-
-.webconsole-msg-console > .webconsole-msg-icon-container {
-  -moz-border-start: solid #cbcbcb 6px;
-}
-
-.webconsole-msg-console.webconsole-msg-error,
-.webconsole-msg-output.webconsole-msg-error {
-  -moz-image-region: rect(24px, 16px, 32px, 8px);
-}
-
-.webconsole-msg-console.webconsole-msg-warn {
-  -moz-image-region: rect(24px, 24px, 32px, 16px);
-}
-
-.webconsole-msg-console.webconsole-msg-info {
-  -moz-image-region: rect(24px, 32px, 32px, 24px);
-}
-
-/* Input and output styles */
-.webconsole-msg-input > .webconsole-msg-icon-container,
-.webconsole-msg-output > .webconsole-msg-icon-container {
-  border-left: solid #808080 6px;
-}
-
-.webconsole-msg-input {
-  -moz-image-region: rect(24px, 40px, 32px, 32px);
-}
-
-.webconsole-msg-output {
-  -moz-image-region: rect(24px, 48px, 32px, 40px);
-}
-
-/* JSTerm Styles */
-.jsterm-input-node,
-.jsterm-complete-node {
-  border: none;
-  padding: 0 0 0 16px;
-  -moz-appearance: none;
-}
-
 .jsterm-input-node {
   width: 98%;
-  background: url("chrome://browser/skin/devtools/commandline.png") 4px 3px no-repeat;
 }
-
-:-moz-any(.jsterm-input-node,
-          .jsterm-complete-node) > .textbox-input-box > .textbox-textarea {
-  overflow-x: hidden;
-}
-
-.jsterm-complete-node > .textbox-input-box > .textbox-textarea {
-  color: GrayText;
-}
-
-.webconsole-msg-inspector iframe {
-  height: 7em;
-  margin-bottom: 15px;
-  -moz-margin-end: 15px;
-  border-radius: 4px;
-  box-shadow: 0 0 12px #dfdfdf;
-}
-
-#webconsole-sidebar > tabs {
-  height: 0;
-  border: none;
-}
-
-/* Security styles */
-
-.webconsole-msg-security > .webconsole-msg-icon-container {
-  -moz-border-start: solid red 6px;
-}
-
-.webconsole-filter-button[category="security"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#FF3030, #FF7D7D);
-  border-color: #D12C2C;
-}
-
-.webconsole-msg-security.webconsole-msg-error {
-  -moz-image-region: rect(32px, 16px, 40px, 8px);
-}
-
-.webconsole-msg-security.webconsole-msg-warn {
-  -moz-image-region: rect(32px, 24px, 40px, 16px);
-}
--- a/browser/themes/linux/devtools/widgets.css
+++ b/browser/themes/linux/devtools/widgets.css
@@ -566,36 +566,38 @@
   -moz-padding-start: 4px;
   -moz-border-start: 1px dotted #000;
   color: #080;
 }
 
 /* Variables and properties editing */
 
 .variables-view-delete {
-  list-style-image: url("moz-icon://stock/gtk-close?size=menu");
-  opacity: 0;
+  list-style-image: url("chrome://browser/skin/devtools/vview-delete.png");
+  -moz-image-region: rect(0,16px,16px,0);
 }
 
 .variables-view-delete:hover {
-  opacity: 1;
+  -moz-image-region: rect(0,32px,16px,16px);
 }
 
-*:hover > .title > .variables-view-delete:not(:hover),
-*:focus > .title > .variables-view-delete:not(:hover) {
-  opacity: 0.5;
-  transition: opacity 0.2s ease-in-out;
+.variables-view-delete:active {
+  -moz-image-region: rect(0,48px,16px,32px);
+}
+
+*:not(:hover) .variables-view-delete {
+  display: none;
 }
 
 .variables-view-delete > .toolbarbutton-text {
   display: none;
 }
 
 .variables-view-edit {
-  background: url("chrome://browser/skin/tabview/edit-light.png") center no-repeat;
+  background: url("chrome://browser/skin/devtools/vview-edit.png") center no-repeat;
   width: 20px;
   height: 16px;
   cursor: pointer;
 }
 
 .variables-view-throbber {
   background: url("chrome://global/skin/icons/loading_16.png") center no-repeat;
   width: 16px;
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -119,25 +119,24 @@ browser.jar:
   skin/classic/browser/tabview/search.png             (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png     (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png            (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css            (tabview/tabview.css)
 * skin/classic/browser/devtools/common.css            (devtools/common.css)
   skin/classic/browser/devtools/dark-theme.css        (devtools/dark-theme.css)
   skin/classic/browser/devtools/light-theme.css       (devtools/light-theme.css)
   skin/classic/browser/devtools/widgets.css           (devtools/widgets.css)
-  skin/classic/browser/devtools/commandline.png       (devtools/commandline.png)
+  skin/classic/browser/devtools/commandline-icon.png  (devtools/commandline-icon.png)
   skin/classic/browser/devtools/command-paintflashing.png  (devtools/command-paintflashing.png)
   skin/classic/browser/devtools/command-responsivemode.png (devtools/command-responsivemode.png)
   skin/classic/browser/devtools/command-scratchpad.png (devtools/command-scratchpad.png)
   skin/classic/browser/devtools/command-tilt.png      (devtools/command-tilt.png)
   skin/classic/browser/devtools/alerticon-warning.png (devtools/alerticon-warning.png)
-  skin/classic/browser/devtools/goto-mdn.png          (devtools/goto-mdn.png)
   skin/classic/browser/devtools/ruleview.css          (devtools/ruleview.css)
-  skin/classic/browser/devtools/webconsole.css                  (devtools/webconsole.css)
+* skin/classic/browser/devtools/webconsole.css                  (devtools/webconsole.css)
   skin/classic/browser/devtools/webconsole_networkpanel.css     (devtools/webconsole_networkpanel.css)
   skin/classic/browser/devtools/webconsole.png                  (devtools/webconsole.png)
   skin/classic/browser/devtools/checkbox-dark.png     (devtools/checkbox-dark.png)
   skin/classic/browser/devtools/checkbox-light.png    (devtools/checkbox-light.png)
   skin/classic/browser/devtools/commandline.css              (devtools/commandline.css)
   skin/classic/browser/devtools/markup-view.css      (devtools/markup-view.css)
   skin/classic/browser/devtools/orion.css             (devtools/orion.css)
   skin/classic/browser/devtools/orion-container.css   (devtools/orion-container.css)
@@ -190,31 +189,34 @@ browser.jar:
   skin/classic/browser/devtools/debugger-pause.png     (devtools/debugger-pause.png)
   skin/classic/browser/devtools/debugger-play.png      (devtools/debugger-play.png)
   skin/classic/browser/devtools/debugger-step-in.png   (devtools/debugger-step-in.png)
   skin/classic/browser/devtools/debugger-step-out.png  (devtools/debugger-step-out.png)
   skin/classic/browser/devtools/debugger-step-over.png (devtools/debugger-step-over.png)
   skin/classic/browser/devtools/responsive-se-resizer.png (devtools/responsive-se-resizer.png)
   skin/classic/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png)
   skin/classic/browser/devtools/responsive-background.png (devtools/responsive-background.png)
-  skin/classic/browser/devtools/tools-icons-small.png     (devtools/tools-icons-small.png)
+  skin/classic/browser/devtools/toggle-tools.png          (devtools/toggle-tools.png)
   skin/classic/browser/devtools/dock-bottom.png           (devtools/dock-bottom.png)
   skin/classic/browser/devtools/dock-side.png             (devtools/dock-side.png)
   skin/classic/browser/devtools/floating-scrollbars.css   (devtools/floating-scrollbars.css)
   skin/classic/browser/devtools/floating-scrollbars-light.css (devtools/floating-scrollbars-light.css)
   skin/classic/browser/devtools/inspector.css             (devtools/inspector.css)
   skin/classic/browser/devtools/toolbox.css               (devtools/toolbox.css)
   skin/classic/browser/devtools/tool-options.png          (devtools/tool-options.png)
   skin/classic/browser/devtools/tool-webconsole.png       (devtools/tool-webconsole.png)
   skin/classic/browser/devtools/tool-debugger.png         (devtools/tool-debugger.png)
+  skin/classic/browser/devtools/tool-debugger-paused.png  (devtools/tool-debugger-paused.png)
   skin/classic/browser/devtools/tool-inspector.png        (devtools/tool-inspector.png)
   skin/classic/browser/devtools/tool-styleeditor.png      (devtools/tool-styleeditor.png)
   skin/classic/browser/devtools/tool-profiler.png         (devtools/tool-profiler.png)
   skin/classic/browser/devtools/tool-network.png          (devtools/tool-network.png)
   skin/classic/browser/devtools/close.png                 (devtools/close.png)
+  skin/classic/browser/devtools/vview-delete.png          (devtools/vview-delete.png)
+  skin/classic/browser/devtools/vview-edit.png            (devtools/vview-edit.png)
   skin/classic/browser/devtools/undock.png                (devtools/undock.png)
   skin/classic/browser/devtools/font-inspector.css        (devtools/font-inspector.css)
   skin/classic/browser/devtools/computedview.css          (devtools/computedview.css)
   skin/classic/browser/devtools/arrow-e.png               (devtools/arrow-e.png)
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/sync-16-throbber.png
   skin/classic/browser/sync-16.png
   skin/classic/browser/sync-24-throbber.png
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -3567,108 +3567,29 @@ toolbarbutton.chevron > .toolbarbutton-m
   font-size: 300%;
 }
 
 .full-screen-approval-button,
 #full-screen-remember-decision {
   font-size: 120%;
 }
 
-/* Developer toolbar */
-
-#developer-toolbar {
-  border-top: 1px solid hsla(210, 8%, 5%, .65);
-  padding-top: 4px;
-  padding-bottom: 4px;
-}
-
-#developer-toolbar:-moz-locale-dir(ltr) {
-  padding-left: 2px;
-  padding-right: 16px; /* use -moz-padding-end when/if bug 631729 gets fixed */
-}
-
-#developer-toolbar:-moz-locale-dir(rtl) {
-  padding-left: 4px;
-  padding-right: 18px; /* use -moz-padding-end when/if bug 631729 gets fixed */
-}
-
 %include ../shared/devtools/responsivedesign.inc.css
 %include ../shared/devtools/highlighter.inc.css
 %include ../shared/devtools/commandline.inc.css
 
-.gclitoolbar-input-node,
-.gclitoolbar-complete-node,
-.gclitoolbar-prompt {
-  border-radius: @toolbarbuttonCornerRadius@;
-}
-
-.gclitoolbar-input-node {
-  border-color: hsl(210,11%,10%);
-  box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset,
-              0 0 0 1px hsla(210,16%,76%,.1) inset,
-              0 1px 0 hsla(210,16%,76%,.15);
-}
-
 .gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
   color: hsl(210,11%,16%);
 }
 
-.gclitoolbar-prompt {
-  background-color: hsl(210,11%,16%);
-}
-
-/* Web Console */
-
-.web-console-frame {
-  border-bottom: 1px solid #aaa;
-}
-
-.web-console-frame[animated] {
-  transition: height 100ms;
-}
-
 /* Developer Toolbar */
 
-#developer-toolbar-toolbox-button {
-  min-width: 18px;
-}
-
-#developer-toolbar-toolbox-button > .toolbarbutton-text {
-  display: none;
-}
-
-.developer-toolbar-button {
-  -moz-appearance: none;
-  min-width: 78px;
-  min-height: 22px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  border-radius: @toolbarbuttonCornerRadius@;
-  color: inherit;
-  border: 1px solid transparent;
-  margin: 0 5px;
-  padding: 0 10px;
-  list-style-image: url("chrome://browser/skin/devtools/tools-icons-small.png");
-}
-
-.developer-toolbar-button[open=true],
-.developer-toolbar-button:active:hover,
-.developer-toolbar-button[checked=true] {
-  border-color: hsla(210,8%,5%,.6);
-  background: rgba(0,0,0,.6);
-  box-shadow: 0 1px 2px rgba(0,0,0,.5) inset, 0 1px 0 hsla(210,16%,76%,.15);
-}
-
-.developer-toolbar-button[checked=true] {
-  color: hsl(208,100%,60%) !important;
-  background: rgba(0,0,0,.4);
-  text-shadow: 0 0 6px hsl(208,100%,60%);
-}
-
-#developer-toolbar-toolbox-button {
-  -moz-image-region: rect(64px, 16px, 80px, 0);
+#developer-toolbar-closebutton {
+  margin-left: 8px;
+  margin-right: 8px;
 }
 
 /* Error counter */
 
 #developer-toolbar-toolbox-button[error-count]:before {
   color: #FDF3DE;
   min-width: 16px;
   text-shadow: none;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e120a392606af02764ee50b2fbec64caeab4f8f3
GIT binary patch
literal 375
zc$@)u0f_#IP)<h;3K|Lk000e1NJLTq001BW000mO1^@s6cL04^0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz8A(JzRCwBA{Qv(y!$1Nih5-fx?f@2K
z&V}30(xA*kKzsv;(fMFtpelvcFs<olVey#?#B+ccoeu`rGL3PDz$_?j2gKr7_{4_j
zY#_G8!Y3*U=0RzHAm+lt#|J<@=7zG50kI?+Uy2w9`~l*nP<9Lu|3l*wN;lttSQg5D
z3N;Uz&qhol{0hWtq3jead_v#}D5*f%Ke6zM$_0!B_@w4ACQ`B?DBgmg>^WHYgn$eX
zpM$d5vGDOa02D{jQ1%jNRz>FjBVai{5I=^prGc0ejsFX0IRFjj1SoqW5Pyf}VHp1#
z0n3?z_yd$}4a6^@i4ewrhPNO>vg{C4a~c|-5P(^h2F-T=(fF7NZL~5PXa@iU7yuB?
VM>c5s8}I-C002ovPDHLkV1f<PmE`~c
--- a/browser/themes/osx/devtools/commandline.css
+++ b/browser/themes/osx/devtools/commandline.css
@@ -5,20 +5,20 @@
 .gcli-body {
   margin: 0;
   font: message-box;
   color: hsl(210,30%,85%);
 }
 
 #gcli-output-root,
 #gcli-tooltip-root {
-  border: 1px solid hsl(210,11%,10%);
+  border: 1px solid hsl(206,37%,4%);
   box-shadow: 0 1px 0 hsla(209,29%,72%,.25) inset;
   background-image: url(background-noise-toolbar.png),
-                    linear-gradient(hsla(209,18%,18%,0.9), hsl(210,11%,16%));
+                    linear-gradient(hsla(209,18%,18%,0.9), hsl(209,23%,18%));
   border-radius: 3px;
 }
 
 #gcli-output-root {
   padding: 5px 10px;
   border-bottom-left-radius: 0;
   border-bottom-right-radius: 0;
   border-bottom: 0;
@@ -28,19 +28,19 @@
   padding: 5px 0px;
 }
 
 #gcli-tooltip-connector {
   margin-top: -1px;
   margin-left: 8px;
   width: 20px;
   height: 10px;
-  border-left: 1px solid hsl(210,11%,10%);
-  border-right: 1px solid hsl(210,11%,10%);
-  background-color: hsl(210,11%,16%);
+  border-left: 1px solid hsl(206,37%,4%);
+  border-right: 1px solid hsl(206,37%,4%);
+  background-color: hsl(209,23%,18%);
   background-image: url(background-noise-toolbar.png);
 }
 
 .gcli-tt-description,
 .gcli-tt-error {
   padding: 0 10px;
 }
 
@@ -80,18 +80,18 @@
 
 .gcli-out-shortcut,
 .gcli-help-synopsis {
   padding: 0 3px;
   margin: 0 4px;
   font-weight: normal;
   font-size: 90%;
   border-radius: 3px;
-  background-color: hsl(210,11%,16%);
-  border: 1px solid hsl(210,11%,10%);
+  background-color: hsl(209,23%,18%);
+  border: 1px solid hsl(206,37%,4%);
 }
 
 .gcli-out-shortcut:before,
 .gcli-help-synopsis:before {
   color: hsl(210,30%,85%);
   -moz-padding-end: 2px;
 }
 
--- a/browser/themes/osx/devtools/common.css
+++ b/browser/themes/osx/devtools/common.css
@@ -45,17 +45,17 @@
 }
 
 .devtools-menulist {
   margin: 0 2px;
 }
 
 .devtools-menulist:-moz-focusring,
 .devtools-toolbarbutton:-moz-focusring {
-  outline: 1px dotted hsla(210,30%,85%,0.4);
+  outline: 1px dotted hsla(210,30%,85%,0.7);
   outline-offset: -4px;
 }
 
 .devtools-toolbarbutton > .toolbarbutton-text {
   margin: 1px 6px;
 }
 
 .devtools-toolbarbutton:not([label]) {
@@ -183,33 +183,35 @@
   box-shadow: inset 0 0 0 1px hsla(0,68%,6%,.35);
   border-color: hsl(10,70%,40%) hsl(10,75%,37%) hsl(10,80%,35%) !important;
   background-image: url(magnifying-glass.png), linear-gradient(hsla(1,16%,76%,.45), hsla(1,16%,76%,.75));
 }
 
 /* Close button */
 
 .devtools-closebutton {
-  list-style-image: url("chrome://browser/skin/devtools/toolbarbutton-close.png");
-  -moz-image-region: rect(0, 16px, 16px, 0);
+  list-style-image: url("chrome://browser/skin/devtools/close.png");
+  -moz-appearance: none;
+  border: none;
+  margin: 0 4px;
   min-width: 16px;
   width: 16px;
-  margin: 0 4px;
+  opacity: 0.6;
 }
 
 .devtools-closebutton > .toolbarbutton-text {
   display: none;
 }
 
 .devtools-closebutton:hover {
-  -moz-image-region: rect(0, 32px, 16px, 16px);
+  opacity: 0.8;
 }
 
 .devtools-closebutton:active {
-  -moz-image-region: rect(0, 48px, 16px, 32px);
+  opacity: 1;
 }
 
 /* Splitters */
 
 .devtools-horizontal-splitter {
   -moz-appearance: none;
   background-image: none;
   border-top: 1px solid black;
--- a/browser/themes/osx/devtools/computedview.css
+++ b/browser/themes/osx/devtools/computedview.css
@@ -95,22 +95,16 @@ body {
   }
 }
 
 .property-content {
   padding-left: 17px;
 }
 
 /* From skin */
-.helplink {
-  /* FIXME: remove this image 
-  background-image: url("chrome://browser/skin/devtools/goto-mdn.png");
-  */
-}
-
 .expander {
   visibility: hidden;
   margin-left: -12px!important;
 }
 
 .expander[open] {
   margin-left: -17px!important;
 }
--- a/browser/themes/osx/devtools/debugger.css
+++ b/browser/themes/osx/devtools/debugger.css
@@ -80,23 +80,22 @@
 
 #expressions {
   min-height: 10px;
   max-height: 125px;
 }
 
 .dbg-expression {
   height: 20px;
-  -moz-padding-start: 8px;
 }
 
 .dbg-expression-arrow {
-  width: 10px;
+  width: 16px;
   height: auto;
-  background: url("chrome://browser/skin/devtools/commandline.png") 0px 4px no-repeat;
+  background: -moz-image-rect(url("chrome://browser/skin/devtools/commandline-icon.png"), 0, 32, 16, 16);
 }
 
 .dbg-expression-input {
   -moz-padding-start: 2px !important;
   font-family: Menlo, Monaco, monospace;
 }
 
 /* Searchbox and the search operations help panel */
deleted file mode 100644
index dbe064863d65ac3123a7a60070114dd465852de2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/osx/devtools/splitview.css
+++ b/browser/themes/osx/devtools/splitview.css
@@ -90,32 +90,18 @@
   width: auto;
   min-width: 48px;
   min-height: 0;
 }
 
 
 /* Resizers */
 
-.splitview-landscape-resizer {
-  -moz-appearance: none;
-  width: 7px;
-  background-image: linear-gradient(to right, black 1px, rgba(255,255,255,0.2) 1px);
-  background-size: 2px 10px;
-  background-clip: padding-box;
-  background-repeat: repeat-x;
-  border-width: 1px;
-  border-style: solid;
-  border-color: rgba(255, 255, 255, 0.05);
-  margin: 5px 0;
-  transform: translateX(-7px);
-}
-
-.splitview-landscape-resizer:-moz-locale-dir(rtl) {
-  transform: translateX(7px);
+.splitview-landscape-splitter {
+  -moz-border-start-color: transparent;
 }
 
 .splitview-portrait-resizer {
   -moz-appearance: none;
   background: linear-gradient(black 1px, rgba(255,255,255,0.2) 1px),
               linear-gradient(hsl(210,11%,36%), hsl(210,11%,18%));
   height: 12px;
   background-size: 10px 2px, 100% 12px;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8a40d0d116d76c6ec4a77a459797f9f5e112df69
GIT binary patch
literal 1787
zc$@+I1_b$uP)<h;3K|Lk000e1NJLTq002M$000mO1^@s6rssJn00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D03mcmSad^jWnpw_
zZ*Cw|X>DZyGB7bSIxsdmF*G1DF*-3bIx;qAA1Jf{00v`8L_t(oN5z(FOcYlX$9HyS
zm&dXzZ^2eTv0!~fsu<D6SRZ{^ZT-;rO0XZ=P>fnJX%(pzB`MmMwg|LZp*FTeZ8fGf
z0fV+tDoHEa(m<n97Gnu-7WTpJ?C#8L|7Ws;tFjOJr8ha5*ZtqQzjMw#_cE#wo5Ll<
zqN@fr7@_5a5M`s?pijnw7S;{D>p$qHKobEoLeGby&v^B7nr{+ph9Pb80xnFev32z}
zxU9D8cfQ{|L}M_)2I5^p3i_<^s8k7F!R>G@_f0UJ@*UtaaK8;U+57G{0F;bFpM$=i
z!7{y?I_TF2(*vGEpY+(789S2~Wv|uhqoPRT=pSsmb@J@<a6kt=s{;)L_=y1D1dBmG
zH_tnbZ{+3uKpK1t>O8=wp)0{of{8Adt7YH*{YT`9gr+Cwor7h-Jc1xJ9y)Y*ONjc|
z3F)bMk1bvF8XFlAC5ocT+Sz4ktvXf%J)61iSUQ{(8_)rQC@%3jNCf=7H}mt)ojLQJ
z74VeG8*!x+^V=jzT1P*FNq}!H+`apQ!-qc|27EZ)?ZuVG38a4qAE}QB_-pT%mgep+
zDKSB(!@E=7as261C(O#+D0oz?TM$*2&Th-ClV4XbjP9&PuUkH4?W&6!eN;|B2QUmn
z>qjDMZf<TkfBwA1GCV}k8<7<hU3pmqXz7Z+-Do^rRaHG~9v&k2V%QuQEib<f|IbqN
zot>Qr5q%T%1b-T~6gEA8JdQQ!qXoc|^)&w4&T66?wJ~wal3!R>${Gym5y^?m0y+R`
z<5VV)ojq?3;8VTuRM13YM@PV7hzzhR`pk@s6`1@?Jnw})LHeGa-hjmrdMouKOG!!D
z1pOl1pMuS!cY}k2jsOl|oxD?W34)5uFlTm>E<LR%@wp|%j3Fvkes8l%ejR}Hrf*bj
z<qTk1HUm-L0GmiZce~w#Sx?O!@HYXZC#C+V1Jr8u0&nCgD=4KqGpA4Q44|hXW>Fjf
z{Yu=Qfl*c<HsbB6>C@WA(qnDMFdR3{?cgy_K}E(TCL~8M&RM96(#6oT!!+a=xqJ88
zm<|9uO@56=qe)a8fGb7YO+QCuoQ;i*mtA%%Ip>iEc$)kUj^n2K=qZvk2I=iBEiKgn
z^t8+>;q=*x1H4yR@9}u7?d`^*vGi2f7_H_-!!rvDJqEpA$pGK0ljp^OhO4!#R(Io(
zO74Y!8Ie}jFFfcriJ~O1teP7c8R`4+!i7J!Zr#?42@uo+%?n?Emvdnl2GoMk1!x{o
z40k%6#;Xktb?et}xaUVt@a3=-%D{;B-+;EGCPcd2?&cd!P1P^0THW@rUV)EXH2)Je
zA(k>#Zj#kz#}*<YD_Fr~vf6&XUhD4bEsKarX?ef_KJaPE<Wc?miry`%MFFFFK>Z2Y
zHJ0~%;IkAxs(%NHSJ{Ds2WdG3(<|^);N%A9{rTnb<68;~cT+v^tC!(5nw8p|xgV?J
zV(!Bao2|C`x*C_MyHyfhqDK<CxNt*LWc;*loCU;D2YBIMLCEO9B1g`_^L_Yn?THg7
zEC80@`D=iu$rr#VZRNgzHv;|$;D<uc({@LZU#$ECnb%xh{nfUeyLJr((gQwDrPZub
z&(HdZiJ36EGkE~-xKvxI7MU`QE{=d7VUQgFcv`co@%8bC;4h8?emk_YeBnzE94M!K
zKLq$N=*nPE`@(;5^yv0Id)^xi0w1jk(>^O@&8kpE8}4t*X0z3OrM_G(Fy;Q>>0e3_
zTw!-OoLFme)koyJ^Yb@{1n-^j>sZ@7*7*qO5&1S8dP0Kt>Prx9I~6z5<NhX`_f{}?
zuQt^^`^gf4=T&Z}OQb`OFle$kf2upeN}S)wD~^^O;B>j7l9DI=Y&M&X1fQFmTTh3c
zV3AV>!8(mgoS0N)x7(Wlf2W{eM<pG4Le<0Zlj0K+i+G;D2>7Pr;(Y~l=m}A;cQdMZ
zuIc7qo}Qk5$z-xfSL#3Gn6NS~BD#01wD(=cvIB;OhVS8!vphUJoCEyj`ua=O5PvR@
zg`J@Vhm<^Qn_+-I`fW{(c|3Z6{{sDo*!Cg;|8_-XWzd@81JN%H^taj<%uf+G&gQvV
zSIVlxDl`$%eZk;q47mnqBlT2(Xz!;Y;T+H8|8G4Cpw9Bojci8EPL@QsEi!IOgGLu`
d3I(3#{x4m^`SZ%g&9DFf002ovPDHLkV1f!>R#yN3
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4c968f542d8f8ef351fe4dc16370082a28c4fdf6
GIT binary patch
literal 441
zc$@*b0Y?6bP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004iNkl<Zc-p0t
z&nv@W9LL{DisnE#a911%2Ze*vF4STN$u3KgF|FojBVw@{MT==kl&inMZgQ8%Y-Y2u
zaYH7f_V|1jPcz@y%Hj1reBbZ)>$yA+gb@EC`6(zWmbe~JMl2Dh#M>7q!~$n2-QR+(
zduWMAXB1*14gN>j6L%B^n^9<~m~ccO{(?K){ULBfQNA9*bMG4ZDQHq+_yDtOBw)Bp
zn+hpd4Z~``gP@{{Kn6-XEa>4LLmQhEEC+CIyG;s^g+lEL^xUP*g%m7?5VwY<ARDSK
zJM^@9mxB2l#OFgf3t)7kc`k^U6ij+>IdhYnfDTd<f;L_$7&?M;DwthBho~)d5O)p7
za7jU{33X;aUZ#U+%QU7;$HTDz1b16TQJ;E|^1Jt8HV2U4f)ZxJbe$x@UEZW$<r2*v
zCPsXS8T}ASaHiSCICmA_0teNddF?tkb_UOIHSEKO!Hd^{Q+WCgvCY}{SV17kC#r~A
jqLFAIYKThC(qH2zvCVaN4v|;$00000NkvXXu0mjfz_+~V
deleted file mode 100644
index 887daf052a6eda0b463bd75ca65dd998449cd330..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/osx/devtools/toolbox.css
+++ b/browser/themes/osx/devtools/toolbox.css
@@ -20,31 +20,25 @@
 #toolbox-dock-side {
   list-style-image: url("chrome://browser/skin/devtools/dock-side.png");
 }
 
 #toolbox-dock-window {
   list-style-image: url("chrome://browser/skin/devtools/undock.png");
 }
 
-#toolbox-close {
-  list-style-image: url("chrome://browser/skin/devtools/close.png");
-}
-
 #toolbox-dock-window,
 #toolbox-dock-bottom,
-#toolbox-dock-side,
-#toolbox-close {
+#toolbox-dock-side {
   opacity: 0.6;
 }
 
 #toolbox-dock-window:hover,
 #toolbox-dock-bottom:hover,
-#toolbox-dock-side:hover,
-#toolbox-close:hover {
+#toolbox-dock-side:hover {
   opacity: 1;
 }
 
 /* Command buttons */
 
 .command-button {
   padding: 0 8px;
   margin: 0;
@@ -209,16 +203,42 @@
                      no-repeat,
                      no-repeat,
                      no-repeat,
                      repeat-x;
   background-position: top right, top left, left, right;
   box-shadow: 1px -1px 0 hsla(206,37%,4%,.2) inset;
 }
 
+.devtools-tab:not([selected=true]).highlighted {
+  color: #f5f7fa;
+  background-image: radial-gradient(farthest-corner at center top, #c0ff40, hsla(80,100%,63%,.5) 70%, hsla(80,100%,63%,.3) 97%),
+                    radial-gradient(farthest-side at center top, hsla(80,100%,35%,.5), hsla(80,100%,35%,0)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(99,100%,14%,.2), hsla(99,100%,14%,.2));
+  background-size: 100% 1px,
+                   100% 5px,
+                   1px 100%,
+                   1px 100%,
+                   100%;
+  background-repeat: no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     repeat-x;
+  background-position: top right, top left, left, right;
+}
+
+.devtools-tab:not(.highlighted) > .highlighted-icon,
+.devtools-tab[selected=true] > .highlighted-icon,
+.devtools-tab:not([selected=true]).highlighted > .default-icon {
+  visibility: collapse;
+}
+
 #options-panel {
   background-image: url("chrome://browser/skin/newtab/noise.png");
 }
 
 .options-vertical-pane {
   margin: 15px;
   width: calc(50% - 30px);
   min-width: 400px;
@@ -233,8 +253,21 @@
 .options-groupbox {
   -moz-margin-start: 15px;
   padding: 4px;
 }
 
 .options-groupbox > * {
   padding: 2px;
 }
+
+.options-citation-label {
+  font-size: 1rem !important;
+  /* !important is required otherwise font-size will still be 1.4rem */
+  font-style: italic;
+  padding: 4px 0 0; /* To align it with the checkbox */
+  color: #444;
+}
+
+.options-citation-label + label {
+  padding: 3px 0 0 !important; /* To align it with the checkbox */
+  font-style: italic;
+}
deleted file mode 100644
index 12e9c72acc819abb8dcc9985d94ea3b1b9bbda2a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0945af275e8860ed810900b6d1f36d1707622eae
GIT binary patch
literal 833
zc$@)21HSx;P)<h;3K|Lk000e1NJLTq001xm000mO1ONa4`lmEH0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!<4Ht8R5;7El;2BJVHn3Brx(sMZKPg>
zgrXC?aWeOd$#xvEHACBUTU(oF%gxPcKhB(xWT0XS5>X*$rA{N67hZZLcp-TaLEY3}
zVPU0olMbGqqf^e=)u7@FXYcv$<^8<x_j%p}2>(}wOp>7jFJV2ZM5-r8LI3;{K>32T
zDGWilDN?X0ykN!h+#)LAVG_ngnj}Y+4=`iJ$*%%g381Dr1QyVN9<<O38hYyK%~Bo0
zn$sDwF^EEdw%~^wBtMM;5S5Kd0e#CGd+TUL_S^dF4eS#gzX3XEQTBb@-U&u9S~@?(
zp`Dx#Y{;Ep1bQG8h*b512RxOrPy|BcjEDi&rA+C(A-$K`&zM$9=U-&db`DU19Sk1_
z@L6_-^%&jRNBH#fAQ-@osvLj^cc>q2yMc>IW%6ARZLxlE11|<t?627#FsZgV^Bgl`
zx&L(yl@frit^1hA>Fm_e6iy$ftUVNx7|?y;_M8sYyMdivY+2PPhv)>nG$Q-K8&{kO
zGhs*c=PF(k)j$BWf~h%pbPuO#`J{#e6FFkQb?B8pe6B||wk&GP#(*Oy55WFda}O~#
z#^xOS{+4PX1!%yibN}XX0w<1=W-rx33g`k~`RL1bp@o;s%2Du<BLOJ(Gv+5Hevgyu
zDe;*e?`3iwbsmwWld`AX3#Z7=*t+r}a#qHLa2B<~DRu)@F>px%SJLUCxIJ)~{<Y%d
ziej&p@v5}QpAtg$8m>7g)Z$AbzsOwlB%E>ign)=f@{0_3XLI&og|fFFu5QlaT`Uo`
zse_u*vCZjyl)Xvg-R4f6^EORFHzd?vW*GY5R@t!H3kh<PQh*G-SbZ|8q>=a|P}At4
z%(c|}21>q_p296KHhRu3nmh$w5=S@OMe@^#-sP!6KNS^Qky<zH*)Ec!*1Z)ut5cYj
z^DszCzyK*BjOBcoEfi3Um(hj6Jh{j%&dp%3PVy-fR7Y-sfWOioZs(PVino5$00000
LNkvXXu0mjf5T1k#
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..af42a28df9c4a32ecdc6cbe670abbe5c7f4fe316
GIT binary patch
literal 238
zc%17D@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`>;M1%^YZe5<kqcQ_4M>|
zb90|Rf4*hQmKQHxOqej?*|TR)o;>mP_Wt|#@8idh`}_NCY;1s9fBpLP=g%Lhi+dV@
z9FdYBzhDLn1q&Ao2ylVo$0x1s1Lb`^T^vIy;-;Rm6gptQ!{nf-bARXm|JQx2V%qW;
ze^0HP*DWkHX%=t8uLWY6yCqw?Kd-B^JN_teTD|<I`Jy{d=dEEmdMrvJX}3VY?A_h*
Yyjz(x`pY@_fd(^py85}Sb4q9e08YbUw*UYD
--- a/browser/themes/osx/devtools/webconsole.css
+++ b/browser/themes/osx/devtools/webconsole.css
@@ -1,272 +1,18 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 %include ../shared.inc
+%include ../../shared/devtools/webconsole.inc.css
 
 /* General output styles */
 
-.webconsole-timestamp {
-  color: GrayText;
-  margin-top: 0;
-  margin-bottom: 0;
-  font-family: Menlo, Monaco, monospace;
-}
-
-.hud-msg-node {
-  list-style-image: url(chrome://browser/skin/devtools/webconsole.png);
-  -moz-image-region: rect(0, 1px, 0, 0);
-}
-
-.webconsole-msg-icon {
-  margin: 3px 4px;
-  width: 8px;
-  height: 8px;
-}
-
-.hud-clickable {
-  cursor: pointer;
-  text-decoration: underline;
-}
-
+.webconsole-timestamp,
 .webconsole-msg-body {
-  margin-top: 0;
-  margin-bottom: 3px;
-  -moz-margin-start: 3px;
-  -moz-margin-end: 6px;
-  white-space: pre-wrap;
   font-family: Menlo, Monaco, monospace;
 }
 
-.webconsole-msg-body-piece {
-  margin: 0;
-}
-
-.webconsole-msg-url {
-  margin: 0 6px;
-}
-
-/* Repeated messages */
-.webconsole-msg-repeat {
-  margin: 2px 0;
-  padding-left: 4px;
-  padding-right: 4px;
-  color: white;
-  background-color: red;
-  border-radius: 40px;
-  font: message-box;
-  font-size: 0.9em;
-  font-weight: 600;
-}
-
-/* TODO move this and other functional rules to content - bug 635359 */
-.webconsole-msg-repeat[value="1"] {
-  display: none;
-}
-
-.webconsole-location {
-  margin-top: 0;
-  margin-bottom: 0;
-  -moz-margin-start: 0;
-  -moz-margin-end: 6px;
-  width: 10em;
-  text-align: end;
-}
-
-.hud-msg-node[selected="true"] > .webconsole-timestamp,
-.hud-msg-node[selected="true"] > .webconsole-location {
-  color: inherit;
-}
-
 .jsterm-input-node,
 .jsterm-complete-node {
   font: 1em Menlo, Monaco, monospace;
 }
-
-.hud-output-node {
-  -moz-appearance: none;
-  border-bottom: 1px solid ThreeDShadow;
-  margin: 0;
-}
-
-.hud-filtered-by-type,
-.hud-filtered-by-string {
-  display: none;
-}
-
-.hidden-message {
-  display: block;
-  visibility: hidden;
-  height: 0;
-  overflow: hidden;
-}
-
-/* WebConsole colored drops */
-
-.webconsole-filter-button[checked] {
-  color: white !important;
-}
-
-.webconsole-filter-button > .toolbarbutton-menubutton-button:before {
-  content: "";
-  display: inline-block;
-  height: 8px;
-  width: 8px;
-  border-radius: 50%;
-  margin-left: 5px;
-  border-width: 1px;
-  border-style: solid;
-}
-
-/* Network styles */
-.webconsole-filter-button[category="net"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#444444, #000000);
-  border-color: #777;
-}
-
-.webconsole-msg-network > .webconsole-msg-icon-container {
-  -moz-border-start: solid #000 6px;
-}
-
-.webconsole-msg-network.webconsole-msg-error {
-  -moz-image-region: rect(0, 16px, 8px, 8px);
-}
-
-/* CSS styles */
-.webconsole-filter-button[category="css"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#2DC3F3, #00B6F0);
-  border-color: #1BA2CC;
-}
-
-.webconsole-msg-cssparser > .webconsole-msg-icon-container {
-  -moz-border-start: solid #00b6f0 6px;
-}
-
-.webconsole-msg-cssparser.webconsole-msg-error {
-  -moz-image-region: rect(8px, 16px, 16px, 8px);
-}
-
-.webconsole-msg-cssparser.webconsole-msg-warn {
-  -moz-image-region: rect(8px, 24px, 16px, 16px);
-}
-
-/* JS styles */
-.webconsole-filter-button[category="js"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#FCB142, #FB9500);
-  border-color: #E98A00;
-}
-
-.webconsole-msg-exception > .webconsole-msg-icon-container {
-  -moz-border-start: solid #fb9500 6px;
-}
-
-.webconsole-msg-exception.webconsole-msg-error {
-  -moz-image-region: rect(16px, 16px, 24px, 8px);
-}
-
-.webconsole-msg-exception.webconsole-msg-warn {
-  -moz-image-region: rect(16px, 24px, 24px, 16px);
-}
-
-/* Web Developer styles */
-.webconsole-filter-button[category="logging"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#B9B9B9, #AAAAAA);
-  border-color: #929292;
-}
-
-.webconsole-msg-console > .webconsole-msg-icon-container {
-  -moz-border-start: solid #cbcbcb 6px;
-}
-
-.webconsole-msg-console.webconsole-msg-error,
-.webconsole-msg-output.webconsole-msg-error {
-  -moz-image-region: rect(24px, 16px, 32px, 8px);
-}
-
-.webconsole-msg-console.webconsole-msg-warn {
-  -moz-image-region: rect(24px, 24px, 32px, 16px);
-}
-
-.webconsole-msg-console.webconsole-msg-info {
-  -moz-image-region: rect(24px, 32px, 32px, 24px);
-}
-
-.webconsole-mixed-content {
-  color: #FF0000;
-}
-
-.webconsole-mixed-content-link {
-  color: #0000EE;
-  margin: 0;
-}
-
-/* Input and output styles */
-.webconsole-msg-input > .webconsole-msg-icon-container,
-.webconsole-msg-output > .webconsole-msg-icon-container {
-  border-left: solid #808080 6px;
-}
-
-.webconsole-msg-input {
-  -moz-image-region: rect(24px, 40px, 32px, 32px);
-}
-
-.webconsole-msg-output {
-  -moz-image-region: rect(24px, 48px, 32px, 40px);
-}
-
-/* JSTerm Styles */
-.jsterm-input-container {
-  background: white;
-}
-
-.jsterm-input-node,
-.jsterm-complete-node {
-  border: none;
-  padding: 0 0 0 16px;
-  -moz-appearance: none;
-}
-
-.jsterm-input-node {
-  background: url("chrome://browser/skin/devtools/commandline.png") 4px 2px no-repeat;
-}
-
-:-moz-any(.jsterm-input-node,
-          .jsterm-complete-node) > .textbox-input-box > .textbox-textarea {
-  overflow-x: hidden;
-}
-
-.jsterm-complete-node > .textbox-input-box > .textbox-textarea {
-  color: GrayText;
-}
-
-.webconsole-msg-inspector iframe {
-  height: 7em;
-  margin-bottom: 15px;
-  -moz-margin-end: 15px;
-  border-radius: 4px;
-  box-shadow: 0 0 12px #dfdfdf;
-}
-
-#webconsole-sidebar > tabs {
-  height: 0;
-  border: none;
-}
-
-/* Security styles */
-
-.webconsole-msg-security > .webconsole-msg-icon-container {
-  -moz-border-start: solid red 6px;
-}
-
-.webconsole-filter-button[category="security"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#FF3030, #FF7D7D);
-  border-color: #D12C2C;
-}
-
-.webconsole-msg-security.webconsole-msg-error {
-  -moz-image-region: rect(32px, 16px, 40px, 8px);
-}
-
-.webconsole-msg-security.webconsole-msg-warn {
-  -moz-image-region: rect(32px, 24px, 40px, 16px);
-}
--- a/browser/themes/osx/devtools/widgets.css
+++ b/browser/themes/osx/devtools/widgets.css
@@ -566,37 +566,38 @@
   -moz-padding-start: 4px;
   -moz-border-start: 1px dotted #000;
   color: #080;
 }
 
 /* Variables and properties editing */
 
 .variables-view-delete {
-  list-style-image: url("chrome://browser/skin/devtools/toolbarbutton-close.png");
-  -moz-image-region: rect(0,32px,16px,16px);
-  opacity: 0;
+  list-style-image: url("chrome://browser/skin/devtools/vview-delete.png");
+  -moz-image-region: rect(0,16px,16px,0);
 }
 
 .variables-view-delete:hover {
-  opacity: 1;
+  -moz-image-region: rect(0,32px,16px,16px);
 }
 
-*:hover > .title > .variables-view-delete:not(:hover),
-*:focus > .title > .variables-view-delete:not(:hover) {
-  opacity: 0.5;
-  transition: opacity 0.2s ease-in-out;
+.variables-view-delete:active {
+  -moz-image-region: rect(0,48px,16px,32px);
+}
+
+*:not(:hover) .variables-view-delete {
+  display: none;
 }
 
 .variables-view-delete > .toolbarbutton-text {
   display: none;
 }
 
 .variables-view-edit {
-  background: url("chrome://browser/skin/tabview/edit-light.png") center no-repeat;
+  background: url("chrome://browser/skin/devtools/vview-edit.png") center no-repeat;
   width: 20px;
   height: 16px;
   cursor: pointer;
 }
 
 .variables-view-throbber {
   background: url("chrome://global/skin/icons/loading_16.png") center no-repeat;
   width: 16px;
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -207,34 +207,32 @@ browser.jar:
   skin/classic/browser/tabview/search.png                   (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png           (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png                  (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css                  (tabview/tabview.css)
 * skin/classic/browser/devtools/common.css                  (devtools/common.css)
   skin/classic/browser/devtools/dark-theme.css              (devtools/dark-theme.css)
   skin/classic/browser/devtools/light-theme.css             (devtools/light-theme.css)
   skin/classic/browser/devtools/widgets.css                 (devtools/widgets.css)
-  skin/classic/browser/devtools/commandline.png             (devtools/commandline.png)
+  skin/classic/browser/devtools/commandline-icon.png        (devtools/commandline-icon.png)
   skin/classic/browser/devtools/command-paintflashing.png   (devtools/command-paintflashing.png)
   skin/classic/browser/devtools/command-responsivemode.png  (devtools/command-responsivemode.png)
   skin/classic/browser/devtools/command-scratchpad.png      (devtools/command-scratchpad.png)
   skin/classic/browser/devtools/command-tilt.png            (devtools/command-tilt.png)
   skin/classic/browser/devtools/alerticon-warning.png       (devtools/alerticon-warning.png)
-  skin/classic/browser/devtools/goto-mdn.png                (devtools/goto-mdn.png)
   skin/classic/browser/devtools/ruleview.css                (devtools/ruleview.css)
   skin/classic/browser/devtools/commandline.css             (devtools/commandline.css)
   skin/classic/browser/devtools/checkbox-dark.png           (devtools/checkbox-dark.png)
   skin/classic/browser/devtools/checkbox-light.png          (devtools/checkbox-light.png)
   skin/classic/browser/devtools/markup-view.css             (devtools/markup-view.css)
   skin/classic/browser/devtools/orion.css                   (devtools/orion.css)
   skin/classic/browser/devtools/orion-container.css         (devtools/orion-container.css)
   skin/classic/browser/devtools/orion-task.png              (devtools/orion-task.png)
   skin/classic/browser/devtools/orion-breakpoint.png        (devtools/orion-breakpoint.png)
   skin/classic/browser/devtools/orion-debug-location.png    (devtools/orion-debug-location.png)
-  skin/classic/browser/devtools/toolbarbutton-close.png     (devtools/toolbarbutton-close.png)
 * skin/classic/browser/devtools/webconsole.css                  (devtools/webconsole.css)
   skin/classic/browser/devtools/webconsole_networkpanel.css     (devtools/webconsole_networkpanel.css)
   skin/classic/browser/devtools/webconsole.png                  (devtools/webconsole.png)
   skin/classic/browser/devtools/breadcrumbs-scrollbutton.png                 (devtools/breadcrumbs-scrollbutton.png)
   skin/classic/browser/devtools/breadcrumbs/ltr-end-pressed.png              (devtools/breadcrumbs/ltr-end-pressed.png)
   skin/classic/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png     (devtools/breadcrumbs/ltr-end-selected-pressed.png)
   skin/classic/browser/devtools/breadcrumbs/ltr-end-selected.png             (devtools/breadcrumbs/ltr-end-selected.png)
   skin/classic/browser/devtools/breadcrumbs/ltr-end.png                      (devtools/breadcrumbs/ltr-end.png)
@@ -279,29 +277,32 @@ browser.jar:
   skin/classic/browser/devtools/debugger-pause.png          (devtools/debugger-pause.png)
   skin/classic/browser/devtools/debugger-play.png           (devtools/debugger-play.png)
   skin/classic/browser/devtools/debugger-step-in.png        (devtools/debugger-step-in.png)
   skin/classic/browser/devtools/debugger-step-out.png       (devtools/debugger-step-out.png)
   skin/classic/browser/devtools/debugger-step-over.png      (devtools/debugger-step-over.png)
   skin/classic/browser/devtools/responsive-se-resizer.png   (devtools/responsive-se-resizer.png)
   skin/classic/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png)
   skin/classic/browser/devtools/responsive-background.png   (devtools/responsive-background.png)
-  skin/classic/browser/devtools/tools-icons-small.png       (devtools/tools-icons-small.png)
+  skin/classic/browser/devtools/toggle-tools.png            (devtools/toggle-tools.png)
   skin/classic/browser/devtools/dock-bottom.png             (devtools/dock-bottom.png)
   skin/classic/browser/devtools/dock-side.png               (devtools/dock-side.png)
 * skin/classic/browser/devtools/inspector.css               (devtools/inspector.css)
   skin/classic/browser/devtools/toolbox.css                 (devtools/toolbox.css)
   skin/classic/browser/devtools/tool-options.png            (devtools/tool-options.png)
   skin/classic/browser/devtools/tool-webconsole.png         (devtools/tool-webconsole.png)
   skin/classic/browser/devtools/tool-debugger.png           (devtools/tool-debugger.png)
+  skin/classic/browser/devtools/tool-debugger-paused.png    (devtools/tool-debugger-paused.png)
   skin/classic/browser/devtools/tool-inspector.png          (devtools/tool-inspector.png)
   skin/classic/browser/devtools/tool-styleeditor.png        (devtools/tool-styleeditor.png)
   skin/classic/browser/devtools/tool-profiler.png           (devtools/tool-profiler.png)
   skin/classic/browser/devtools/tool-network.png            (devtools/tool-network.png)
   skin/classic/browser/devtools/close.png                   (devtools/close.png)
+  skin/classic/browser/devtools/vview-delete.png            (devtools/vview-delete.png)
+  skin/classic/browser/devtools/vview-edit.png              (devtools/vview-edit.png)
   skin/classic/browser/devtools/undock.png                  (devtools/undock.png)
   skin/classic/browser/devtools/font-inspector.css          (devtools/font-inspector.css)
   skin/classic/browser/devtools/computedview.css            (devtools/computedview.css)
   skin/classic/browser/devtools/arrow-e.png                 (devtools/arrow-e.png)
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/sync-throbber.png
   skin/classic/browser/sync-16.png
   skin/classic/browser/sync-32.png
--- a/browser/themes/shared/devtools/commandline.inc.css
+++ b/browser/themes/shared/devtools/commandline.inc.css
@@ -1,76 +1,117 @@
 %if 0
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 %endif
 
+/* Developer toolbar */
+
+#developer-toolbar {
+  padding: 0;
+  min-height: 32px;
+  background-image: url(devtools/background-noise-toolbar.png), linear-gradient(#303840, #2d3640);
+  border-top: 1px solid #060a0d;
+  box-shadow: 0 1px 0 hsla(204,45%,98%,.05) inset, 0 -1px 0 hsla(206,37%,4%,.1) inset;
+}
+
+.developer-toolbar-button {
+  -moz-appearance: none;
+  border: none;
+  background: transparent;
+  margin: 0;
+  padding: 0 10px;
+  width: 32px;
+}
+
+.developer-toolbar-button > image {
+  margin: auto 10px;
+}
+
+#developer-toolbar-toolbox-button {
+  list-style-image: url("chrome://browser/skin/devtools/toggle-tools.png");
+  -moz-image-region: rect(0px, 16px, 16px, 0px);
+}
+
+#developer-toolbar-toolbox-button:hover {
+  -moz-image-region: rect(0px, 32px, 16px, 16px);
+}
+
+#developer-toolbar-toolbox-button:hover:active {
+  -moz-image-region: rect(0px, 48px, 16px, 32px);
+}
+
+#developer-toolbar-toolbox-button[checked=true] {
+  -moz-image-region: rect(0px, 64px, 16px, 48px);
+}
+
+/* GCLI */
+
 html|*#gcli-tooltip-frame,
 html|*#gcli-output-frame {
   padding: 0;
   border-width: 0;
   background-color: transparent;
 }
 
 #gcli-output,
 #gcli-tooltip {
   border-width: 0;
   background-color: transparent;
   -moz-appearance: none;
-  margin-bottom: -2px;
 }
 
 .gclitoolbar-input-node,
-.gclitoolbar-complete-node,
-.gclitoolbar-prompt {
+.gclitoolbar-complete-node {
   margin: 0;
-  -moz-margin-end: 5px;
   -moz-box-align: center;
   padding-top: 0;
   padding-bottom: 0;
-  padding-right: 4px;
-  border: 1px solid transparent;
-  border-radius: 3px;
+  padding-right: 8px;
   text-shadow: none;
+  box-shadow: none;
+  border-width: 0;
+  background-color: transparent;
 }
 
 .gclitoolbar-input-node {
+  -moz-appearance: none;
+  color: hsl(210,30%,85%);
   padding-left: 20px;
-  background-color: transparent;
-  -moz-appearance: none;
-  border-color: hsl(210,24%,10%);
-  color: hsl(210,30%,85%);
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  box-shadow: inset 0 1px 0 hsla(211,68%,6%,.05),
-              0 0 0 1px hsla(210,40%,83%,.1);
+  background-color: #242b33;
+  background-repeat: no-repeat;
+  background-position: 4px center;
+  box-shadow: 0 1px 1px hsla(206,37%,4%,.2) inset,
+              1px 0 0 hsla(206,37%,4%,.2) inset,
+              -1px 0 0 hsla(206,37%,4%,.2) inset;
+  line-height: 32px;
+  outline-style: none;
+  background-image: -moz-image-rect(url("chrome://browser/skin/devtools/commandline-icon.png"), 0, 16, 16, 0);
+}
+
+.gclitoolbar-input-node[focused="true"] {
+  background-image: -moz-image-rect(url("chrome://browser/skin/devtools/commandline-icon.png"), 0, 32, 16, 16);
+  background-color: #232e38;
 }
 
 .gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
   background-color: hsl(210,30%,85%);
   color: hsl(210,24%,16%);
   text-shadow: none;
 }
 
 .gclitoolbar-complete-node {
   padding-left: 21px;
   background-color: transparent;
   color: transparent;
+  z-index: 100;
+  pointer-events: none;
 }
 
-.gclitoolbar-prompt {
-  padding-left: 4px;
-  padding-bottom: 2px;
-  font-size: 150%;
-  font-weight: bold;
-  color: hsl(210,30%,85%);
-  background-color: hsl(210,24%,16%);
-}
-
-.gclitoolbar-prompt-label,
 .gcli-in-incomplete,
 .gcli-in-error,
 .gcli-in-ontab,
 .gcli-in-todo,
 .gcli-in-closebrace,
 .gcli-in-param,
 .gcli-in-valid {
   margin: 0;
new file mode 100644
--- /dev/null
+++ b/browser/themes/shared/devtools/webconsole.inc.css
@@ -0,0 +1,273 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* General output styles */
+
+.webconsole-timestamp {
+  color: GrayText;
+  margin-top: 0;
+  margin-bottom: 0;
+  font-family: monospace;
+}
+
+.hud-msg-node {
+  list-style-image: url(chrome://browser/skin/devtools/webconsole.png);
+  -moz-image-region: rect(0, 1px, 0, 0);
+}
+
+.webconsole-msg-icon {
+  margin: 3px 4px;
+  width: 8px;
+  height: 8px;
+}
+
+.hud-clickable {
+  cursor: pointer;
+  text-decoration: underline;
+}
+
+.webconsole-msg-body {
+  margin-top: 0;
+  margin-bottom: 3px;
+  -moz-margin-start: 3px;
+  -moz-margin-end: 6px;
+  white-space: pre-wrap;
+  font-family: monospace;
+}
+
+.webconsole-msg-body-piece {
+  margin: 0;
+}
+
+.webconsole-msg-url {
+  margin: 0 6px;
+}
+
+/* Repeated messages */
+.webconsole-msg-repeat {
+  margin: 2px 0;
+  padding-left: 4px;
+  padding-right: 4px;
+  color: white;
+  background-color: red;
+  border-radius: 40px;
+  font: message-box;
+  font-size: 0.9em;
+  font-weight: 600;
+}
+
+.webconsole-msg-repeat[value="1"] {
+  display: none;
+}
+
+.webconsole-location {
+  margin-top: 0;
+  margin-bottom: 0;
+  -moz-margin-start: 0;
+  -moz-margin-end: 6px;
+  width: 10em;
+  text-align: end;
+}
+
+.webconsole-mixed-content {
+  color: #FF0000;
+}
+
+.webconsole-mixed-content-link {
+  color: #0000EE;
+  margin: 0;
+}
+
+.hud-msg-node[selected="true"] > .webconsole-timestamp,
+.hud-msg-node[selected="true"] > .webconsole-location {
+  color: inherit;
+}
+
+.jsterm-input-container {
+  background: white;
+}
+
+.jsterm-input-node,
+.jsterm-complete-node {
+  font-family: monospace;
+}
+
+.hud-output-node {
+  -moz-appearance: none;
+  border-bottom: 1px solid ThreeDShadow;
+  margin: 0;
+}
+
+.hud-filtered-by-type,
+.hud-filtered-by-string {
+  display: none;
+}
+
+.hidden-message {
+  display: block;
+  visibility: hidden;
+  height: 0;
+  overflow: hidden;
+}
+
+/* WebConsole colored drops */
+
+.webconsole-filter-button {
+  -moz-user-focus: normal;
+}
+
+.webconsole-filter-button[checked] {
+  color: white !important;
+}
+
+.webconsole-filter-button > .toolbarbutton-menubutton-button:before {
+  content: "";
+  display: inline-block;
+  height: 8px;
+  width: 8px;
+  border-radius: 50%;
+  margin-left: 5px;
+  border-width: 1px;
+  border-style: solid;
+}
+
+/* Network styles */
+.webconsole-filter-button[category="net"] > .toolbarbutton-menubutton-button:before {
+  background-image: linear-gradient(#444444, #000000);
+  border-color: #777;
+}
+
+.webconsole-msg-network > .webconsole-msg-icon-container {
+  -moz-border-start: solid #000 6px;
+}
+
+.webconsole-msg-network.webconsole-msg-error {
+  -moz-image-region: rect(0, 16px, 8px, 8px);
+}
+
+/* CSS styles */
+.webconsole-filter-button[category="css"] > .toolbarbutton-menubutton-button:before {
+  background-image: linear-gradient(#2DC3F3, #00B6F0);
+  border-color: #1BA2CC;
+}
+
+.webconsole-msg-cssparser > .webconsole-msg-icon-container {
+  -moz-border-start: solid #00b6f0 6px;
+}
+
+.webconsole-msg-cssparser.webconsole-msg-error {
+  -moz-image-region: rect(8px, 16px, 16px, 8px);
+}
+
+.webconsole-msg-cssparser.webconsole-msg-warn {
+  -moz-image-region: rect(8px, 24px, 16px, 16px);
+}
+
+/* JS styles */
+.webconsole-filter-button[category="js"] > .toolbarbutton-menubutton-button:before {
+  background-image: linear-gradient(#FCB142, #FB9500);
+  border-color: #E98A00;
+}
+
+.webconsole-msg-exception > .webconsole-msg-icon-container {
+  -moz-border-start: solid #fb9500 6px;
+}
+
+.webconsole-msg-exception.webconsole-msg-error {
+  -moz-image-region: rect(16px, 16px, 24px, 8px);
+}
+
+.webconsole-msg-exception.webconsole-msg-warn {
+  -moz-image-region: rect(16px, 24px, 24px, 16px);
+}
+
+/* Web Developer styles */
+.webconsole-filter-button[category="logging"] > .toolbarbutton-menubutton-button:before {
+  background-image: linear-gradient(#B9B9B9, #AAAAAA);
+  border-color: #929292;
+}
+
+.webconsole-msg-console > .webconsole-msg-icon-container {
+  -moz-border-start: solid #cbcbcb 6px;
+}
+
+.webconsole-msg-console.webconsole-msg-error,
+.webconsole-msg-output.webconsole-msg-error {
+  -moz-image-region: rect(24px, 16px, 32px, 8px);
+}
+
+.webconsole-msg-console.webconsole-msg-warn {
+  -moz-image-region: rect(24px, 24px, 32px, 16px);
+}
+
+.webconsole-msg-console.webconsole-msg-info {
+  -moz-image-region: rect(24px, 32px, 32px, 24px);
+}
+
+/* Input and output styles */
+.webconsole-msg-input > .webconsole-msg-icon-container,
+.webconsole-msg-output > .webconsole-msg-icon-container {
+  border-left: solid #808080 6px;
+}
+
+.webconsole-msg-input {
+  -moz-image-region: rect(24px, 40px, 32px, 32px);
+}
+
+.webconsole-msg-output {
+  -moz-image-region: rect(24px, 48px, 32px, 40px);
+}
+
+/* JSTerm Styles */
+.jsterm-input-node,
+.jsterm-complete-node {
+  border: none;
+  padding: 0 0 0 16px;
+  -moz-appearance: none;
+}
+
+.jsterm-input-node {
+  background: -moz-image-rect(url("chrome://browser/skin/devtools/commandline-icon.png"), 0, 32, 16, 16) no-repeat;
+}
+
+:-moz-any(.jsterm-input-node,
+          .jsterm-complete-node) > .textbox-input-box > .textbox-textarea {
+  overflow-x: hidden;
+}
+
+.jsterm-complete-node > .textbox-input-box > .textbox-textarea {
+  color: GrayText;
+}
+
+.webconsole-msg-inspector iframe {
+  height: 7em;
+  margin-bottom: 15px;
+  -moz-margin-end: 15px;
+  border-radius: 4px;
+  box-shadow: 0 0 12px #dfdfdf;
+}
+
+#webconsole-sidebar > tabs {
+  height: 0;
+  border: none;
+}
+
+/* Security styles */
+
+.webconsole-msg-security > .webconsole-msg-icon-container {
+  -moz-border-start: solid red 6px;
+}
+
+.webconsole-filter-button[category="security"] > .toolbarbutton-menubutton-button:before {
+  background-image: linear-gradient(#FF3030, #FF7D7D);
+  border-color: #D12C2C;
+}
+
+.webconsole-msg-security.webconsole-msg-error {
+  -moz-image-region: rect(32px, 16px, 40px, 8px);
+}
+
+.webconsole-msg-security.webconsole-msg-warn {
+  -moz-image-region: rect(32px, 24px, 40px, 16px);
+}
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -2796,92 +2796,20 @@ toolbarbutton.bookmark-item[dragover="tr
   font-size: 300%;
 }
 
 .full-screen-approval-button,
 #full-screen-remember-decision {
   font-size: 120%;
 }
 
-/* Developer toolbar */
-
-#developer-toolbar {
-  border-top: 1px solid hsla(211,68%,6%,.65) !important;
-}
-
 %include ../shared/devtools/responsivedesign.inc.css
 %include ../shared/devtools/highlighter.inc.css
 %include ../shared/devtools/commandline.inc.css
 
-.gclitoolbar-input-node {
-  border-color: hsl(210,24%,10%);
-  box-shadow: inset 0 1px 0 hsla(211,68%,6%,.05),
-              0 0 0 1px hsla(210,40%,83%,.1);
-}
-
-/* Web Console */
-
-.web-console-frame {
-  border-bottom: 1px solid #aaa;
-}
-
-.web-console-frame[animated] {
-  transition: height 100ms;
-}
-
-/* Developer Toolbar */
-
-#developer-toolbar-toolbox-button {
-  min-width: 18px;
-}
-
-#developer-toolbar-toolbox-button > .toolbarbutton-text {
-  display: none;
-}
-
-#developer-toolbar-toolbox-button > .toolbarbutton-icon {
-  -moz-margin-end: 0;
-}
-
-.developer-toolbar-button {
-  -moz-appearance: none;
-  min-width: 78px;
-  min-height: 22px;
-  text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
-  border-radius: 3px;
-  color: inherit;
-  border: 1px solid transparent;
-  margin: 0 5px;
-  padding: 0 10px;
-  list-style-image: url("chrome://browser/skin/devtools/tools-icons-small.png");
-}
-
-.developer-toolbar-button[open=true],
-.developer-toolbar-button:active:hover,
-.developer-toolbar-button[checked=true] {
-  border-color: hsla(210,8%,5%,.6);
-  background: rgba(0,0,0,.6);
-  box-shadow: 0 1px 2px rgba(0,0,0,.5) inset, 0 1px 0 hsla(210,16%,76%,.1);
-}
-
-.developer-toolbar-button:hover,
-.developer-toolbar-button[checked=true],
-.developer-toolbar-button[open=true] {
-  color: hsl(208,100%,60%) !important;
-  text-shadow: 0 0 6px hsl(208,100%,60%);
-}
-
-.developer-toolbar-button[checked=true] {
-  background: rgba(0,0,0,.4);
-}
-
-#developer-toolbar-toolbox-button {
-  -moz-image-region: rect(64px, 16px, 80px, 0);
-}
-
 /* Error counter */
 
 #developer-toolbar-toolbox-button[error-count]:before {
   color: #FDF3DE;
   min-width: 16px;
   text-shadow: none;
   background-image: linear-gradient(#B4211B, #8A1915);
   border-radius: 1px;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e120a392606af02764ee50b2fbec64caeab4f8f3
GIT binary patch
literal 375
zc$@)u0f_#IP)<h;3K|Lk000e1NJLTq001BW000mO1^@s6cL04^0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz8A(JzRCwBA{Qv(y!$1Nih5-fx?f@2K
z&V}30(xA*kKzsv;(fMFtpelvcFs<olVey#?#B+ccoeu`rGL3PDz$_?j2gKr7_{4_j
zY#_G8!Y3*U=0RzHAm+lt#|J<@=7zG50kI?+Uy2w9`~l*nP<9Lu|3l*wN;lttSQg5D
z3N;Uz&qhol{0hWtq3jead_v#}D5*f%Ke6zM$_0!B_@w4ACQ`B?DBgmg>^WHYgn$eX
zpM$d5vGDOa02D{jQ1%jNRz>FjBVai{5I=^prGc0ejsFX0IRFjj1SoqW5Pyf}VHp1#
z0n3?z_yd$}4a6^@i4ewrhPNO>vg{C4a~c|-5P(^h2F-T=(fF7NZL~5PXa@iU7yuB?
VM>c5s8}I-C002ovPDHLkV1f<PmE`~c
--- a/browser/themes/windows/devtools/commandline.css
+++ b/browser/themes/windows/devtools/commandline.css
@@ -5,19 +5,19 @@
 .gcli-body {
   margin: 0;
   font: message-box;
   color: hsl(210,30%,85%);
 }
 
 #gcli-output-root,
 #gcli-tooltip-root {
-  border: 1px solid hsl(210,24%,10%);
+  border: 1px solid hsl(206,37%,4%);
   box-shadow: 0 1px 0 hsla(209,29%,72%,.25) inset;
-  background-image: linear-gradient(hsla(209,18%,18%,0.9), hsl(210,24%,16%));
+  background-image: linear-gradient(hsla(209,18%,18%,0.9), hsl(209,23%,18%));
   border-radius: 3px;
 }
 
 #gcli-output-root {
   padding: 5px 10px;
   border-bottom-left-radius: 0;
   border-bottom-right-radius: 0;
   border-bottom: 0;
@@ -27,19 +27,19 @@
   padding: 5px 0px;
 }
 
 #gcli-tooltip-connector {
   margin-top: -1px;
   margin-left: 8px;
   width: 20px;
   height: 10px;
-  border-left: 1px solid hsl(210,24%,10%);
-  border-right: 1px solid hsl(210,24%,10%);
-  background-color: hsl(210,24%,16%);
+  border-left: 1px solid hsl(206,37%,4%);
+  border-right: 1px solid hsl(206,37%,4%);
+  background-color: hsl(209,23%,18%);
 }
 
 .gcli-tt-description,
 .gcli-tt-error {
   padding: 0 10px;
 }
 
 .gcli-row-out {
@@ -78,18 +78,18 @@
 
 .gcli-out-shortcut,
 .gcli-help-synopsis {
   padding: 0 3px;
   margin: 0 4px;
   font-weight: normal;
   font-size: 90%;
   border-radius: 3px;
-  background-color: hsl(210,24%,16%);
-  border: 1px solid hsl(210,24%,10%);
+  background-color: hsl(209,23%,18%);
+  border: 1px solid hsl(206,37%,4%);
 }
 
 .gcli-out-shortcut:before,
 .gcli-help-synopsis:before {
   color: hsl(210,30%,85%);
   -moz-padding-end: 2px;
 }
 
--- a/browser/themes/windows/devtools/common.css
+++ b/browser/themes/windows/devtools/common.css
@@ -41,17 +41,17 @@
 }
 
 .devtools-toolbarbutton > .toolbarbutton-menubutton-button {
   -moz-box-orient: horizontal;
 }
 
 .devtools-menulist:-moz-focusring,
 .devtools-toolbarbutton:-moz-focusring {
-  outline: 1px dotted hsla(210,30%,85%,0.4);
+  outline: 1px dotted hsla(210,30%,85%,0.7);
   outline-offset: -4px;
 }
 
 .devtools-toolbarbutton > .toolbarbutton-icon {
   margin: 0;
 }
 
 .devtools-toolbarbutton:not([label]) {
@@ -190,34 +190,35 @@
   box-shadow: inset 0 0 0 1px hsla(0,68%,6%,.35);
   border-color: hsl(10,70%,40%) hsl(10,75%,37%) hsl(10,80%,35%) !important;
   background-image: url(magnifying-glass.png), linear-gradient(hsla(1,16%,76%,.45), hsla(1,16%,76%,.75));
 }
 
 /* Close button */
 
 .devtools-closebutton {
-  list-style-image: url("chrome://browser/skin/devtools/toolbarbutton-close.png");
-  -moz-image-region: rect(0, 16px, 16px, 0);
+  list-style-image: url("chrome://browser/skin/devtools/close.png");
+  -moz-appearance: none;
+  border: none;
+  margin: 0 4px;
   min-width: 16px;
   width: 16px;
-  -moz-appearance: none;
-  border-style: none;
+  opacity: 0.6;
 }
 
 .devtools-closebutton > .toolbarbutton-text {
   display: none;
 }
 
 .devtools-closebutton:hover {
-  -moz-image-region: rect(0, 32px, 16px, 16px);
+  opacity: 0.8;
 }
 
 .devtools-closebutton:hover:active {
-  -moz-image-region: rect(0, 48px, 16px, 32px);
+  opacity: 1;
 }
 
 /* Splitters */
 
 .devtools-horizontal-splitter {
   -moz-appearance: none;
   border-width: 1px 0 0 0;
   -moz-border-top-colors: black;
--- a/browser/themes/windows/devtools/computedview.css
+++ b/browser/themes/windows/devtools/computedview.css
@@ -95,22 +95,16 @@ body {
   }
 }
 
 .property-content {
   padding-left: 17px;
 }
 
 /* From skin */
-.helplink {
-  /* FIXME: remove this image 
-  background-image: url("chrome://browser/skin/devtools/goto-mdn.png");
-  */
-}
-
 .expander {
   visibility: hidden;
   margin-left: -12px!important;
 }
 
 .expander[open] {
   margin-left: -17px!important;
 }
--- a/browser/themes/windows/devtools/debugger.css
+++ b/browser/themes/windows/devtools/debugger.css
@@ -78,23 +78,22 @@
 
 #expressions {
   min-height: 10px;
   max-height: 125px;
 }
 
 .dbg-expression {
   height: 20px;
-  -moz-padding-start: 8px;
 }
 
 .dbg-expression-arrow {
-  width: 10px;
+  width: 16px;
   height: auto;
-  background: url("chrome://browser/skin/devtools/commandline.png") 0px 4px no-repeat;
+  background: -moz-image-rect(url("chrome://browser/skin/devtools/commandline-icon.png"), 0, 32, 16, 16);
 }
 
 .dbg-expression-input {
   -moz-padding-start: 2px !important;
   font-family: Menlo, Monaco, monospace;
 }
 
 /* Searchbox and the search operations help panel */
deleted file mode 100644
index dbe064863d65ac3123a7a60070114dd465852de2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/windows/devtools/splitview.css
+++ b/browser/themes/windows/devtools/splitview.css
@@ -91,32 +91,18 @@
   width: auto;
   min-width: 48px;
   min-height: 0;
 }
 
 
 /* Resizers */
 
-.splitview-landscape-resizer {
-  -moz-appearance: none;
-  width: 7px;
-  background-image: linear-gradient(to right, black 1px, rgba(255,255,255,0.2) 1px);
-  background-size: 2px 10px;
-  background-clip: padding-box;
-  background-repeat: repeat-x;
-  border-width: 1px;
-  border-style: solid;
-  border-color: rgba(255, 255, 255, 0.05);
-  margin: 5px 0;
-  transform: translateX(-7px);
-}
-
-.splitview-landscape-resizer:-moz-locale-dir(rtl) {
-  transform: translateX(7px);
+.splitview-landscape-splitter {
+  -moz-border-start-color: transparent;
 }
 
 .splitview-portrait-resizer {
   -moz-appearance: none;
   background: linear-gradient(black 1px, rgba(255,255,255,0.2) 1px),
               linear-gradient(hsl(209,18%,34%), hsl(210,24%,16%));
   height: 12px;
   background-size: 10px 2px, 100% 12px;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8a40d0d116d76c6ec4a77a459797f9f5e112df69
GIT binary patch
literal 1787
zc$@+I1_b$uP)<h;3K|Lk000e1NJLTq002M$000mO1^@s6rssJn00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D03mcmSad^jWnpw_
zZ*Cw|X>DZyGB7bSIxsdmF*G1DF*-3bIx;qAA1Jf{00v`8L_t(oN5z(FOcYlX$9HyS
zm&dXzZ^2eTv0!~fsu<D6SRZ{^ZT-;rO0XZ=P>fnJX%(pzB`MmMwg|LZp*FTeZ8fGf
z0fV+tDoHEa(m<n97Gnu-7WTpJ?C#8L|7Ws;tFjOJr8ha5*ZtqQzjMw#_cE#wo5Ll<
zqN@fr7@_5a5M`s?pijnw7S;{D>p$qHKobEoLeGby&v^B7nr{+ph9Pb80xnFev32z}
zxU9D8cfQ{|L}M_)2I5^p3i_<^s8k7F!R>G@_f0UJ@*UtaaK8;U+57G{0F;bFpM$=i
z!7{y?I_TF2(*vGEpY+(789S2~Wv|uhqoPRT=pSsmb@J@<a6kt=s{;)L_=y1D1dBmG
zH_tnbZ{+3uKpK1t>O8=wp)0{of{8Adt7YH*{YT`9gr+Cwor7h-Jc1xJ9y)Y*ONjc|
z3F)bMk1bvF8XFlAC5ocT+Sz4ktvXf%J)61iSUQ{(8_)rQC@%3jNCf=7H}mt)ojLQJ
z74VeG8*!x+^V=jzT1P*FNq}!H+`apQ!-qc|27EZ)?ZuVG38a4qAE}QB_-pT%mgep+
zDKSB(!@E=7as261C(O#+D0oz?TM$*2&Th-ClV4XbjP9&PuUkH4?W&6!eN;|B2QUmn
z>qjDMZf<TkfBwA1GCV}k8<7<hU3pmqXz7Z+-Do^rRaHG~9v&k2V%QuQEib<f|IbqN
zot>Qr5q%T%1b-T~6gEA8JdQQ!qXoc|^)&w4&T66?wJ~wal3!R>${Gym5y^?m0y+R`
z<5VV)ojq?3;8VTuRM13YM@PV7hzzhR`pk@s6`1@?Jnw})LHeGa-hjmrdMouKOG!!D
z1pOl1pMuS!cY}k2jsOl|oxD?W34)5uFlTm>E<LR%@wp|%j3Fvkes8l%ejR}Hrf*bj
z<qTk1HUm-L0GmiZce~w#Sx?O!@HYXZC#C+V1Jr8u0&nCgD=4KqGpA4Q44|hXW>Fjf
z{Yu=Qfl*c<HsbB6>C@WA(qnDMFdR3{?cgy_K}E(TCL~8M&RM96(#6oT!!+a=xqJ88
zm<|9uO@56=qe)a8fGb7YO+QCuoQ;i*mtA%%Ip>iEc$)kUj^n2K=qZvk2I=iBEiKgn
z^t8+>;q=*x1H4yR@9}u7?d`^*vGi2f7_H_-!!rvDJqEpA$pGK0ljp^OhO4!#R(Io(
zO74Y!8Ie}jFFfcriJ~O1teP7c8R`4+!i7J!Zr#?42@uo+%?n?Emvdnl2GoMk1!x{o
z40k%6#;Xktb?et}xaUVt@a3=-%D{;B-+;EGCPcd2?&cd!P1P^0THW@rUV)EXH2)Je
zA(k>#Zj#kz#}*<YD_Fr~vf6&XUhD4bEsKarX?ef_KJaPE<Wc?miry`%MFFFFK>Z2Y
zHJ0~%;IkAxs(%NHSJ{Ds2WdG3(<|^);N%A9{rTnb<68;~cT+v^tC!(5nw8p|xgV?J
zV(!Bao2|C`x*C_MyHyfhqDK<CxNt*LWc;*loCU;D2YBIMLCEO9B1g`_^L_Yn?THg7
zEC80@`D=iu$rr#VZRNgzHv;|$;D<uc({@LZU#$ECnb%xh{nfUeyLJr((gQwDrPZub
z&(HdZiJ36EGkE~-xKvxI7MU`QE{=d7VUQgFcv`co@%8bC;4h8?emk_YeBnzE94M!K
zKLq$N=*nPE`@(;5^yv0Id)^xi0w1jk(>^O@&8kpE8}4t*X0z3OrM_G(Fy;Q>>0e3_
zTw!-OoLFme)koyJ^Yb@{1n-^j>sZ@7*7*qO5&1S8dP0Kt>Prx9I~6z5<NhX`_f{}?
zuQt^^`^gf4=T&Z}OQb`OFle$kf2upeN}S)wD~^^O;B>j7l9DI=Y&M&X1fQFmTTh3c
zV3AV>!8(mgoS0N)x7(Wlf2W{eM<pG4Le<0Zlj0K+i+G;D2>7Pr;(Y~l=m}A;cQdMZ
zuIc7qo}Qk5$z-xfSL#3Gn6NS~BD#01wD(=cvIB;OhVS8!vphUJoCEyj`ua=O5PvR@
zg`J@Vhm<^Qn_+-I`fW{(c|3Z6{{sDo*!Cg;|8_-XWzd@81JN%H^taj<%uf+G&gQvV
zSIVlxDl`$%eZk;q47mnqBlT2(Xz!;Y;T+H8|8G4Cpw9Bojci8EPL@QsEi!IOgGLu`
d3I(3#{x4m^`SZ%g&9DFf002ovPDHLkV1f!>R#yN3
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4c968f542d8f8ef351fe4dc16370082a28c4fdf6
GIT binary patch
literal 441
zc$@*b0Y?6bP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004iNkl<Zc-p0t
z&nv@W9LL{DisnE#a911%2Ze*vF4STN$u3KgF|FojBVw@{MT==kl&inMZgQ8%Y-Y2u
zaYH7f_V|1jPcz@y%Hj1reBbZ)>$yA+gb@EC`6(zWmbe~JMl2Dh#M>7q!~$n2-QR+(
zduWMAXB1*14gN>j6L%B^n^9<~m~ccO{(?K){ULBfQNA9*bMG4ZDQHq+_yDtOBw)Bp
zn+hpd4Z~``gP@{{Kn6-XEa>4LLmQhEEC+CIyG;s^g+lEL^xUP*g%m7?5VwY<ARDSK
zJM^@9mxB2l#OFgf3t)7kc`k^U6ij+>IdhYnfDTd<f;L_$7&?M;DwthBho~)d5O)p7
za7jU{33X;aUZ#U+%QU7;$HTDz1b16TQJ;E|^1Jt8HV2U4f)ZxJbe$x@UEZW$<r2*v
zCPsXS8T}ASaHiSCICmA_0teNddF?tkb_UOIHSEKO!Hd^{Q+WCgvCY}{SV17kC#r~A
jqLFAIYKThC(qH2zvCVaN4v|;$00000NkvXXu0mjfz_+~V
deleted file mode 100644
index 4a58465b9b7ea3b3c7c14b36214524fb9b0e38b7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/windows/devtools/toolbox.css
+++ b/browser/themes/windows/devtools/toolbox.css
@@ -22,31 +22,25 @@
 #toolbox-dock-side {
   list-style-image: url("chrome://browser/skin/devtools/dock-side.png");
 }
 
 #toolbox-dock-window {
   list-style-image: url("chrome://browser/skin/devtools/undock.png");
 }
 
-#toolbox-close {
-  list-style-image: url("chrome://browser/skin/devtools/close.png");
-}
-
 #toolbox-dock-window,
 #toolbox-dock-bottom,
-#toolbox-dock-side,
-#toolbox-close {
+#toolbox-dock-side {
   opacity: 0.6;
 }
 
 #toolbox-dock-window:hover,
 #toolbox-dock-bottom:hover,
-#toolbox-dock-side:hover,
-#toolbox-close:hover {
+#toolbox-dock-side:hover {
   opacity: 1;
 }
 
 #toolbox-controls-separator {
   width: 3px;
   background-image: linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0)),
                     linear-gradient(hsla(206,37%,4%,0), hsla(206,37%,4%,.6), hsla(206,37%,4%,0)),
                     linear-gradient(hsla(204,45%,98%,0), hsla(204,45%,98%,.1), hsla(204,45%,98%,0));
@@ -218,16 +212,42 @@
                      no-repeat,
                      no-repeat,
                      no-repeat,
                      repeat-x;
   background-position: top right, top left, left, right;
   box-shadow: 1px -1px 0 hsla(206,37%,4%,.2) inset;
 }
 
+.devtools-tab:not([selected=true]).highlighted {
+  color: #f5f7fa;
+  background-image: radial-gradient(farthest-corner at center top, #c0ff40, hsla(80,100%,63%,.5) 70%, hsla(80,100%,63%,.3) 97%),
+                    radial-gradient(farthest-side at center top, hsla(80,100%,35%,.5), hsla(80,100%,35%,0)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
+                    linear-gradient(hsla(99,100%,14%,.2), hsla(99,100%,14%,.2));
+  background-size: 100% 1px,
+                   100% 5px,
+                   1px 100%,
+                   1px 100%,
+                   100%;
+  background-repeat: no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     no-repeat,
+                     repeat-x;
+  background-position: top right, top left, left, right;
+}
+
+.devtools-tab:not(.highlighted) > .highlighted-icon,
+.devtools-tab[selected=true] > .highlighted-icon,
+.devtools-tab:not([selected=true]).highlighted > .default-icon {
+  visibility: collapse;
+}
+
 #options-panel {
   background-image: url("chrome://browser/skin/newtab/noise.png");
 }
 
 .options-vertical-pane {
   margin: 15px;
   width: calc(50% - 30px);
   min-width: 400px;
@@ -242,8 +262,21 @@
 .options-groupbox {
   -moz-margin-start: 15px;
   padding: 4px;
 }
 
 .options-groupbox > * {
   padding: 2px;
 }
+
+.options-citation-label {
+  font-size: 1rem !important;
+  /* !important is required otherwise font-size will still be 1.4rem */
+  font-style: italic;
+  padding: 4px 0 0; /* To align it with the checkbox */
+  color: #444;
+}
+
+.options-citation-label + label {
+  padding: 3px 0 0 !important; /* To align it with the checkbox */
+  font-style: italic;
+}
deleted file mode 100644
index 12e9c72acc819abb8dcc9985d94ea3b1b9bbda2a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9604653c0d4280d4bc4901b85786181f4f3d7929
GIT binary patch
literal 1451
zc${^TX;71A5XU2hYN3eLdVsY9$QhssIo^<i03kpE(Z&!U7%=CHAc!EKf>60{ksE;+
zBo<UGC`F-GsZebzw^qu41qlfd10mc6ZKw84{n9V}&GYR3XJ=>k!~XM_hkc9<%?x2M
zm@%D3WkDGU{T<srfa39(k29cT8t=u4_dgXDe^ziBgn5Wh2|;uENx^ZD1q#H8u{|IO
z2GfgUGT2`4{-4Uq%A%qoNT5(C1OkCXA|VY8|8LL4q#TN`<WrMV3b|Z4rBKQh(+cG@
zR8%Nu-uJv0%IVpe8I?}V%szPVa7Lwyiai${mw4jTnV5v+*fYrqNvW^Z^GO%7)N>m3
z+`O-^Us_gvdUj!YPGMHwB~FMSJHI%mpm=Uxv#_uj94gGrEy^t{&AV7Ouh9e^J;vpU
zxjZoMVySj<G4LoaR1j8JT%lcD;)^4SD{3?vt!6<h5`*H1=#uj4l8PFwcB!ngwya8`
z8@IR=9vQQ`x>i{&g<@oM+~U&m%E~JABBEj;?L}ii_2uQ25T1w|Dp*@v#}UY@YwK(4
z>sS}!A38QhM@ONAKw*$*ED{a)&>2n$lrsjv0QilK4Y(r$z!UKVR|1K=xw&a)@8Io2
z$Ki==HisR+q0<<?ehdbKNu~O*{Da73cQV<-lj=<(x%triXmkdV<Ob<K|HU5e0C#YN
zCIBuZD%Fqb<%h?+;t6g<qC1h~PI9HVk|`7_-Q2<w=R(5aNzN#&GYUXqaA=InF}_GB
z3=@jNprwI<!CWqn8^R0WhK7V3v$ciu_(FenU=WAP;c!tXfW-=6`3Km+;b=5~#sCMc
zY%DFUZEWFa4DP@Ia|{MYAd(TzXaK<DU5I!*(ZLDf;Dm&h!r@ME_!n3#0SgdpY~VJw
z_5eTt0HV2tm6esPUewtL$VSiOS%>{$COZyTySaOK`5j_&LwR6WSakf^#KffY$;l}x
zDPLVkO-oD9%*xHnFDNK1ym+a&q_nKOyrQDAO2=g#)jDb*Y9$iM6&+HDy1J`Z>+5CL
z8X6iKn{MB^)7tuNTU%Ru$3uwD&dwhmJ?iTI@$utdo<8mA>FMq5>+9?9?;jW#7<}>D
z$jI2(@9!BOAD@7DH90AtnwnB7ry<v>)N1wo!UE*7r4`5%>+9>f<3m7K-F)*#nBGN$
z!L}^ZsUB>*AraqwYm{AT+9wr5xi_T+L9p%T?vIWZst!r@4a!ueZGsc>f!b##2D?_y
zjg8vux!yqWIJ!)AG}AwQ?O?q*At?1qGr4<kr=e!&T(_A^=FFSw;7oQFzROHew%Qk`
zC|!+QDO0AIHHp$?vUJ8F&r~r3%gJCaeot_2ZRt#*@Qqu8xf{(x{o|(vk%5j(&j6}i
zHsMe4+$-gMy6=d=NSEx{{ac-)<G1vTI2l#kw?8ZQ1Cr5l?X1Bt)08hqzw1|6U*EgA
zPoGWst4lU~_awJ%r_mFW?B2Kbk=sAx)XHv0Z5w9JHeXlaSD!u)mL?^=0-44_r&?S`
zt_L<ew<)Xn<)aG;muqf($n?CK)6z1p$=Is;Zf-8AoFcLMwewo5;C#onC-nUM5eE|l
z?@V~ZJ((rbv!tNt@tXgOMyW)5Rmsv{jvtZ&)(!2ht~<Ug*x&5ZKKwjZ-MZUb;clEY
zIEx+}yw_28K05n;oP`w!4DjM`sBF-p8*Z^s_1eK+UHjVBY0EH^A1MUE#s)A91clsG
zCk6X!@pPBFx39sC`X`~>U50lj{O*Lyk92&reQO4Pf5PWL`%5cZBfA*irk{qpdV6wc
z$;py$qW<1JX38uMow{^0Ep0a*+lE5M8d+|Mwt)rQsG}w6?GZuFhS9waQ(Gwf^nU<-
C>D-tA
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..af42a28df9c4a32ecdc6cbe670abbe5c7f4fe316
GIT binary patch
literal 238
zc%17D@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`>;M1%^YZe5<kqcQ_4M>|
zb90|Rf4*hQmKQHxOqej?*|TR)o;>mP_Wt|#@8idh`}_NCY;1s9fBpLP=g%Lhi+dV@
z9FdYBzhDLn1q&Ao2ylVo$0x1s1Lb`^T^vIy;-;Rm6gptQ!{nf-bARXm|JQx2V%qW;
ze^0HP*DWkHX%=t8uLWY6yCqw?Kd-B^JN_teTD|<I`Jy{d=dEEmdMrvJX}3VY?A_h*
Yyjz(x`pY@_fd(^py85}Sb4q9e08YbUw*UYD
--- a/browser/themes/windows/devtools/webconsole.css
+++ b/browser/themes/windows/devtools/webconsole.css
@@ -1,277 +1,21 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-/* General output styles */
-
-.webconsole-timestamp {
-  color: GrayText;
-  margin-top: 0;
-  margin-bottom: 0;
-  font-family: Consolas, Lucida Console, monospace;
-}
-
-.hud-msg-node {
-  list-style-image: url(chrome://browser/skin/devtools/webconsole.png);
-  -moz-image-region: rect(0, 1px, 0, 0);
-}
-
-.webconsole-msg-icon {
-  margin: 3px 4px;
-  width: 8px;
-  height: 8px;
-}
-
-.hud-clickable {
-  cursor: pointer;
-  text-decoration: underline;
-}
-
-.webconsole-msg-body {
-  margin-top: 0;
-  margin-bottom: 3px;
-  -moz-margin-start: 3px;
-  -moz-margin-end: 6px;
-  white-space: pre-wrap;
-  font-family: Consolas, Lucida Console, monospace;
-}
+%include ../../shared/devtools/webconsole.inc.css
 
-.webconsole-msg-body-piece {
-  margin: 0;
-}
-
-.webconsole-msg-url {
-  margin: 0 6px;
-}
-
-/* Repeated messages */
-.webconsole-msg-repeat {
-  margin: 2px 0;
-  padding-left: 4px;
-  padding-right: 4px;
-  color: white;
-  background-color: red;
-  border-radius: 40px;
-  font: message-box;
-  font-size: 0.9em;
-  font-weight: 600;
-}
-
-/* TODO move this and other functional rules to content - bug 635359 */
-.webconsole-msg-repeat[value="1"] {
-  display: none;
-}
-
-.webconsole-location {
-  margin-top: 0;
-  margin-bottom: 0;
-  -moz-margin-start: 0;
-  -moz-margin-end: 6px;
-  width: 10em;
-  text-align: end;
-}
-
-.hud-msg-node[selected="true"] > .webconsole-timestamp,
-.hud-msg-node[selected="true"] > .webconsole-location {
-  color: inherit;
-}
-
+.webconsole-timestamp,
+.webconsole-msg-body,
 .jsterm-input-node,
 .jsterm-complete-node {
   font-family: Consolas, Lucida Console, monospace;
 }
 
-.hud-output-node {
-  -moz-appearance: none;
-  border-bottom: 1px solid ThreeDShadow;
-  margin: 0;
-}
-
-.hud-filtered-by-type,
-.hud-filtered-by-string {
-  display: none;
-}
-
-.hidden-message {
-  display: block;
-  visibility: hidden;
-  height: 0;
-  overflow: hidden;
-}
-
-/* WebConsole colored drops */
-
-.webconsole-filter-button[checked] {
-  color: white !important;
-}
-
-.webconsole-filter-button > .toolbarbutton-menubutton-button:before {
-  content: "";
-  display: inline-block;
-  height: 8px;
-  width: 8px;
-  border-radius: 50%;
-  margin-left: 5px;
-  border-width: 1px;
-  border-style: solid;
-}
-
-/* Network styles */
-.webconsole-filter-button[category="net"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#444444, #000000);
-  border-color: #777;
-}
-
-.webconsole-msg-network > .webconsole-msg-icon-container {
-  -moz-border-start: solid #000 6px;
-}
-
-.webconsole-msg-network.webconsole-msg-error {
-  -moz-image-region: rect(0, 16px, 8px, 8px);
-}
-
-/* CSS styles */
-.webconsole-filter-button[category="css"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#2DC3F3, #00B6F0);
-  border-color: #1BA2CC;
-}
-
-.webconsole-msg-cssparser > .webconsole-msg-icon-container {
-  -moz-border-start: solid #00b6f0 6px;
-}
-
-.webconsole-msg-cssparser.webconsole-msg-error {
-  -moz-image-region: rect(8px, 16px, 16px, 8px);
-}
-
-.webconsole-msg-cssparser.webconsole-msg-warn {
-  -moz-image-region: rect(8px, 24px, 16px, 16px);
-}
-
-/* JS styles */
-.webconsole-filter-button[category="js"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#FCB142, #FB9500);
-  border-color: #E98A00;
-}
-
-.webconsole-msg-exception > .webconsole-msg-icon-container {
-  -moz-border-start: solid #fb9500 6px;
-}
-
-.webconsole-msg-exception.webconsole-msg-error {
-  -moz-image-region: rect(16px, 16px, 24px, 8px);
-}
-
-.webconsole-msg-exception.webconsole-msg-warn {
-  -moz-image-region: rect(16px, 24px, 24px, 16px);
-}
-
-/* Web Developer styles */
-.webconsole-filter-button[category="logging"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#B9B9B9, #AAAAAA);
-  border-color: #929292;
-}
-
-.webconsole-msg-console > .webconsole-msg-icon-container {
-  -moz-border-start: solid #cbcbcb 6px;
-}
-
-.webconsole-msg-console.webconsole-msg-error,
-.webconsole-msg-output.webconsole-msg-error {
-  -moz-image-region: rect(24px, 16px, 32px, 8px);
-}
-
-.webconsole-msg-console.webconsole-msg-warn {
-  -moz-image-region: rect(24px, 24px, 32px, 16px);
-}
-
-.webconsole-msg-console.webconsole-msg-info {
-  -moz-image-region: rect(24px, 32px, 32px, 24px);
-}
-
-.webconsole-mixed-content {
-  color: #FF0000;
-}
-
-.webconsole-mixed-content-link {
-  color: #0000EE;
-  margin: 0;
-}
-
-/* Input and output styles */
-.webconsole-msg-input > .webconsole-msg-icon-container,
-.webconsole-msg-output > .webconsole-msg-icon-container {
-  border-left: solid #808080 6px;
-}
-
-.webconsole-msg-input {
-  -moz-image-region: rect(24px, 40px, 32px, 32px);
-}
-
-.webconsole-msg-output {
-  -moz-image-region: rect(24px, 48px, 32px, 40px);
-}
-
-/* JSTerm Styles */
-.jsterm-input-node,
-.jsterm-complete-node {
-  border: none;
-  padding: 0 0 0 16px;
-  -moz-appearance: none;
-}
-
-.jsterm-input-node {
-  background: url("chrome://browser/skin/devtools/commandline.png") 4px 3px no-repeat;
-}
-
-:-moz-any(.jsterm-input-node,
-          .jsterm-complete-node) > .textbox-input-box > .textbox-textarea {
-  overflow-x: hidden;
-}
-
-.jsterm-complete-node > .textbox-input-box > .textbox-textarea {
-  color: GrayText;
-}
-
-/* Filter */
-
 /*
  * This hardcoded width likely due to a toolkit Windows specific bug.
  * See http://hg.mozilla.org/mozilla-central/annotate/f38d6df93cad/toolkit/themes/winstripe/global/textbox-aero.css#l7
  */
 
 .hud-filter-box {
   width: 200px;
 }
-
-.webconsole-msg-inspector iframe {
-  height: 7em;
-  margin-bottom: 15px;
-  -moz-margin-end: 15px;
-  border-radius: 4px;
-  box-shadow: 0 0 12px #dfdfdf;
-}
-
-#webconsole-sidebar > tabs {
-  height: 0;
-  border: none;
-}
-
-/* Security styles */
-
-.webconsole-msg-security > .webconsole-msg-icon-container {
-  -moz-border-start: solid red 6px;
-}
-
-.webconsole-filter-button[category="security"] > .toolbarbutton-menubutton-button:before {
-  background-image: linear-gradient(#FF3030, #FF7D7D);
-  border-color: #D12C2C;
-}
-
-.webconsole-msg-security.webconsole-msg-error {
-  -moz-image-region: rect(32px, 16px, 40px, 8px);
-}
-
-.webconsole-msg-security.webconsole-msg-warn {
-  -moz-image-region: rect(32px, 24px, 40px, 16px);
-}
--- a/browser/themes/windows/devtools/widgets.css
+++ b/browser/themes/windows/devtools/widgets.css
@@ -569,37 +569,38 @@
   -moz-padding-start: 4px;
   -moz-border-start: 1px dotted #000;
   color: #080;
 }
 
 /* Variables and properties editing */
 
 .variables-view-delete {
-  list-style-image: url("chrome://browser/skin/devtools/toolbarbutton-close.png");
-  -moz-image-region: rect(0,32px,16px,16px);
-  opacity: 0;
+  list-style-image: url("chrome://browser/skin/devtools/vview-delete.png");
+  -moz-image-region: rect(0,16px,16px,0);
 }
 
 .variables-view-delete:hover {
-  opacity: 1;
+  -moz-image-region: rect(0,32px,16px,16px);
 }
 
-*:hover > .title > .variables-view-delete:not(:hover),
-*:focus > .title > .variables-view-delete:not(:hover) {
-  opacity: 0.5;
-  transition: opacity 0.2s ease-in-out;
+.variables-view-delete:active {
+  -moz-image-region: rect(0,48px,16px,32px);
+}
+
+*:not(:hover) .variables-view-delete {
+  display: none;
 }
 
 .variables-view-delete > .toolbarbutton-text {
   display: none;
 }
 
 .variables-view-edit {
-  background: url("chrome://browser/skin/tabview/edit-light.png") center no-repeat;
+  background: url("chrome://browser/skin/devtools/vview-edit.png") center no-repeat;
   width: 20px;
   height: 16px;
   cursor: pointer;
 }
 
 .variables-view-throbber {
   background: url("chrome://global/skin/icons/loading_16.png") center no-repeat;
   width: 16px;
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -145,35 +145,33 @@ browser.jar:
         skin/classic/browser/tabview/stack-expander.png             (tabview/stack-expander.png)
         skin/classic/browser/tabview/tabview.png                    (tabview/tabview.png)
         skin/classic/browser/tabview/tabview-inverted.png           (tabview/tabview-inverted.png)
         skin/classic/browser/tabview/tabview.css                    (tabview/tabview.css)
 *       skin/classic/browser/devtools/common.css                    (devtools/common.css)
         skin/classic/browser/devtools/dark-theme.css                (devtools/dark-theme.css)
         skin/classic/browser/devtools/light-theme.css               (devtools/light-theme.css)
         skin/classic/browser/devtools/widgets.css                   (devtools/widgets.css)
-        skin/classic/browser/devtools/commandline.png               (devtools/commandline.png)
+        skin/classic/browser/devtools/commandline-icon.png          (devtools/commandline-icon.png)
         skin/classic/browser/devtools/alerticon-warning.png         (devtools/alerticon-warning.png)
-        skin/classic/browser/devtools/goto-mdn.png                  (devtools/goto-mdn.png)
         skin/classic/browser/devtools/ruleview.css                  (devtools/ruleview.css)
         skin/classic/browser/devtools/commandline.css               (devtools/commandline.css)
         skin/classic/browser/devtools/command-paintflashing.png     (devtools/command-paintflashing.png)
         skin/classic/browser/devtools/command-responsivemode.png    (devtools/command-responsivemode.png)
         skin/classic/browser/devtools/command-scratchpad.png        (devtools/command-scratchpad.png)
         skin/classic/browser/devtools/command-tilt.png              (devtools/command-tilt.png)
         skin/classic/browser/devtools/checkbox-dark.png             (devtools/checkbox-dark.png)
         skin/classic/browser/devtools/checkbox-light.png            (devtools/checkbox-light.png)
         skin/classic/browser/devtools/markup-view.css               (devtools/markup-view.css)
         skin/classic/browser/devtools/orion.css                     (devtools/orion.css)
         skin/classic/browser/devtools/orion-container.css           (devtools/orion-container.css)
         skin/classic/browser/devtools/orion-task.png                (devtools/orion-task.png)
         skin/classic/browser/devtools/orion-breakpoint.png          (devtools/orion-breakpoint.png)
         skin/classic/browser/devtools/orion-debug-location.png      (devtools/orion-debug-location.png)
-        skin/classic/browser/devtools/toolbarbutton-close.png       (devtools/toolbarbutton-close.png)
-        skin/classic/browser/devtools/webconsole.css                  (devtools/webconsole.css)
+*       skin/classic/browser/devtools/webconsole.css                  (devtools/webconsole.css)
         skin/classic/browser/devtools/webconsole_networkpanel.css     (devtools/webconsole_networkpanel.css)
         skin/classic/browser/devtools/webconsole.png                  (devtools/webconsole.png)
         skin/classic/browser/devtools/breadcrumbs-scrollbutton.png                 (devtools/breadcrumbs-scrollbutton.png)
         skin/classic/browser/devtools/breadcrumbs/ltr-end-pressed.png              (devtools/breadcrumbs/ltr-end-pressed.png)
         skin/classic/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png     (devtools/breadcrumbs/ltr-end-selected-pressed.png)
         skin/classic/browser/devtools/breadcrumbs/ltr-end-selected.png             (devtools/breadcrumbs/ltr-end-selected.png)
         skin/classic/browser/devtools/breadcrumbs/ltr-end.png                      (devtools/breadcrumbs/ltr-end.png)
         skin/classic/browser/devtools/breadcrumbs/ltr-middle-pressed.png           (devtools/breadcrumbs/ltr-middle-pressed.png)
@@ -217,31 +215,34 @@ browser.jar:
         skin/classic/browser/devtools/debugger-pause.png            (devtools/debugger-pause.png)
         skin/classic/browser/devtools/debugger-play.png             (devtools/debugger-play.png)
         skin/classic/browser/devtools/debugger-step-in.png          (devtools/debugger-step-in.png)
         skin/classic/browser/devtools/debugger-step-out.png         (devtools/debugger-step-out.png)
         skin/classic/browser/devtools/debugger-step-over.png        (devtools/debugger-step-over.png)
         skin/classic/browser/devtools/responsive-se-resizer.png     (devtools/responsive-se-resizer.png)
         skin/classic/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png)
         skin/classic/browser/devtools/responsive-background.png     (devtools/responsive-background.png)
-        skin/classic/browser/devtools/tools-icons-small.png         (devtools/tools-icons-small.png)
+        skin/classic/browser/devtools/toggle-tools.png              (devtools/toggle-tools.png)
         skin/classic/browser/devtools/dock-bottom.png               (devtools/dock-bottom.png)
         skin/classic/browser/devtools/dock-side.png                 (devtools/dock-side.png)
         skin/classic/browser/devtools/floating-scrollbars.css       (devtools/floating-scrollbars.css)
         skin/classic/browser/devtools/floating-scrollbars-light.css (devtools/floating-scrollbars-light.css)
         skin/classic/browser/devtools/inspector.css                 (devtools/inspector.css)
         skin/classic/browser/devtools/toolbox.css                   (devtools/toolbox.css)
         skin/classic/browser/devtools/tool-options.png              (devtools/tool-options.png)
         skin/classic/browser/devtools/tool-webconsole.png           (devtools/tool-webconsole.png)
         skin/classic/browser/devtools/tool-debugger.png             (devtools/tool-debugger.png)
+        skin/classic/browser/devtools/tool-debugger-paused.png      (devtools/tool-debugger-paused.png)
         skin/classic/browser/devtools/tool-inspector.png            (devtools/tool-inspector.png)
         skin/classic/browser/devtools/tool-styleeditor.png          (devtools/tool-styleeditor.png)
         skin/classic/browser/devtools/tool-profiler.png             (devtools/tool-profiler.png)
         skin/classic/browser/devtools/tool-network.png              (devtools/tool-network.png)
         skin/classic/browser/devtools/close.png                     (devtools/close.png)
+        skin/classic/browser/devtools/vview-delete.png              (devtools/vview-delete.png)
+        skin/classic/browser/devtools/vview-edit.png                (devtools/vview-edit.png)
         skin/classic/browser/devtools/undock.png                    (devtools/undock.png)
         skin/classic/browser/devtools/font-inspector.css            (devtools/font-inspector.css)
         skin/classic/browser/devtools/computedview.css              (devtools/computedview.css)
         skin/classic/browser/devtools/arrow-e.png                   (devtools/arrow-e.png)
 #ifdef MOZ_SERVICES_SYNC
         skin/classic/browser/sync-throbber.png
         skin/classic/browser/sync-16.png
         skin/classic/browser/sync-32.png
@@ -397,35 +398,33 @@ browser.jar:
         skin/classic/aero/browser/tabview/stack-expander.png         (tabview/stack-expander.png)
         skin/classic/aero/browser/tabview/tabview.png                (tabview/tabview.png)
         skin/classic/aero/browser/tabview/tabview-inverted.png       (tabview/tabview-inverted.png)
         skin/classic/aero/browser/tabview/tabview.css                (tabview/tabview.css)
 *       skin/classic/aero/browser/devtools/common.css                (devtools/common.css)
         skin/classic/aero/browser/devtools/dark-theme.css            (devtools/dark-theme.css)
         skin/classic/aero/browser/devtools/light-theme.css           (devtools/light-theme.css)
         skin/classic/aero/browser/devtools/widgets.css               (devtools/widgets.css)
-        skin/classic/aero/browser/devtools/commandline.png           (devtools/commandline.png)
+        skin/classic/aero/browser/devtools/commandline-icon.png      (devtools/commandline-icon.png)
         skin/classic/aero/browser/devtools/command-paintflashing.png  (devtools/command-paintflashing.png)
         skin/classic/aero/browser/devtools/command-responsivemode.png (devtools/command-responsivemode.png)
         skin/classic/aero/browser/devtools/command-scratchpad.png    (devtools/command-scratchpad.png)
         skin/classic/aero/browser/devtools/command-tilt.png          (devtools/command-tilt.png)
         skin/classic/aero/browser/devtools/checkbox-dark.png         (devtools/checkbox-dark.png)
         skin/classic/aero/browser/devtools/checkbox-light.png        (devtools/checkbox-light.png)
         skin/classic/aero/browser/devtools/alerticon-warning.png     (devtools/alerticon-warning.png)
-        skin/classic/aero/browser/devtools/goto-mdn.png              (devtools/goto-mdn.png)
         skin/classic/aero/browser/devtools/ruleview.css              (devtools/ruleview.css)
         skin/classic/aero/browser/devtools/commandline.css           (devtools/commandline.css)
         skin/classic/aero/browser/devtools/markup-view.css           (devtools/markup-view.css)
         skin/classic/aero/browser/devtools/orion.css                 (devtools/orion.css)
         skin/classic/aero/browser/devtools/orion-container.css       (devtools/orion-container.css)
         skin/classic/aero/browser/devtools/orion-task.png            (devtools/orion-task.png)
         skin/classic/aero/browser/devtools/orion-breakpoint.png      (devtools/orion-breakpoint.png)
         skin/classic/aero/browser/devtools/orion-debug-location.png  (devtools/orion-debug-location.png)
-        skin/classic/aero/browser/devtools/toolbarbutton-close.png   (devtools/toolbarbutton-close.png)
-        skin/classic/aero/browser/devtools/webconsole.css                  (devtools/webconsole.css)
+*       skin/classic/aero/browser/devtools/webconsole.css                  (devtools/webconsole.css)
         skin/classic/aero/browser/devtools/webconsole_networkpanel.css     (devtools/webconsole_networkpanel.css)
         skin/classic/aero/browser/devtools/webconsole.png                  (devtools/webconsole.png)
         skin/classic/aero/browser/devtools/breadcrumbs-scrollbutton.png                 (devtools/breadcrumbs-scrollbutton.png)
         skin/classic/aero/browser/devtools/breadcrumbs/ltr-end-pressed.png              (devtools/breadcrumbs/ltr-end-pressed.png)
         skin/classic/aero/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png     (devtools/breadcrumbs/ltr-end-selected-pressed.png)
         skin/classic/aero/browser/devtools/breadcrumbs/ltr-end-selected.png             (devtools/breadcrumbs/ltr-end-selected.png)
         skin/classic/aero/browser/devtools/breadcrumbs/ltr-end.png                      (devtools/breadcrumbs/ltr-end.png)
         skin/classic/aero/browser/devtools/breadcrumbs/ltr-middle-pressed.png           (devtools/breadcrumbs/ltr-middle-pressed.png)
@@ -469,31 +468,34 @@ browser.jar:
         skin/classic/aero/browser/devtools/debugger-pause.png        (devtools/debugger-pause.png)
         skin/classic/aero/browser/devtools/debugger-play.png         (devtools/debugger-play.png)
         skin/classic/aero/browser/devtools/debugger-step-in.png      (devtools/debugger-step-in.png)
         skin/classic/aero/browser/devtools/debugger-step-out.png     (devtools/debugger-step-out.png)
         skin/classic/aero/browser/devtools/debugger-step-over.png    (devtools/debugger-step-over.png)
         skin/classic/aero/browser/devtools/responsive-se-resizer.png (devtools/responsive-se-resizer.png)
         skin/classic/aero/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png)
         skin/classic/aero/browser/devtools/responsive-background.png (devtools/responsive-background.png)
-        skin/classic/aero/browser/devtools/tools-icons-small.png     (devtools/tools-icons-small.png)
+        skin/classic/aero/browser/devtools/toggle-tools.png          (devtools/toggle-tools.png)
         skin/classic/aero/browser/devtools/dock-bottom.png           (devtools/dock-bottom.png)
         skin/classic/aero/browser/devtools/dock-side.png             (devtools/dock-side.png)
         skin/classic/aero/browser/devtools/floating-scrollbars.css   (devtools/floating-scrollbars.css)
         skin/classic/aero/browser/devtools/floating-scrollbars-light.css (devtools/floating-scrollbars-light.css)
         skin/classic/aero/browser/devtools/inspector.css             (devtools/inspector.css)
         skin/classic/aero/browser/devtools/toolbox.css               (devtools/toolbox.css)
         skin/classic/aero/browser/devtools/tool-options.png          (devtools/tool-options.png)
         skin/classic/aero/browser/devtools/tool-webconsole.png       (devtools/tool-webconsole.png)
         skin/classic/aero/browser/devtools/tool-debugger.png         (devtools/tool-debugger.png)
+        skin/classic/aero/browser/devtools/tool-debugger-paused.png  (devtools/tool-debugger-paused.png)
         skin/classic/aero/browser/devtools/tool-inspector.png        (devtools/tool-inspector.png)
         skin/classic/aero/browser/devtools/tool-styleeditor.png      (devtools/tool-styleeditor.png)
         skin/classic/aero/browser/devtools/tool-profiler.png         (devtools/tool-profiler.png)
         skin/classic/aero/browser/devtools/tool-network.png          (devtools/tool-network.png)
         skin/classic/aero/browser/devtools/close.png                 (devtools/close.png)
+        skin/classic/aero/browser/devtools/vview-delete.png          (devtools/vview-delete.png)
+        skin/classic/aero/browser/devtools/vview-edit.png            (devtools/vview-edit.png)
         skin/classic/aero/browser/devtools/undock.png                (devtools/undock.png)
         skin/classic/aero/browser/devtools/font-inspector.css        (devtools/font-inspector.css)
         skin/classic/aero/browser/devtools/computedview.css          (devtools/computedview.css)
         skin/classic/aero/browser/devtools/arrow-e.png               (devtools/arrow-e.png)
 #ifdef MOZ_SERVICES_SYNC
         skin/classic/aero/browser/sync-throbber.png
         skin/classic/aero/browser/sync-16.png
         skin/classic/aero/browser/sync-32.png
--- a/toolkit/devtools/server/actors/script.js
+++ b/toolkit/devtools/server/actors/script.js
@@ -1611,17 +1611,28 @@ ObjectActor.prototype = {
    * Handle a protocol request to provide the prototype and own properties of
    * the object.
    *
    * @param aRequest object
    *        The protocol request object.
    */
   onPrototypeAndProperties: function OA_onPrototypeAndProperties(aRequest) {
     let ownProperties = Object.create(null);
-    for (let name of this.obj.getOwnPropertyNames()) {
+    let names;
+    try {
+      names = this.obj.getOwnPropertyNames();
+    } catch (ex) {
+      // The above can throw if this.obj points to a dead object.
+      // TODO: we should use Cu.isDeadWrapper() - see bug 885800.
+      return { from: this.actorID,
+               prototype: this.threadActor.createValueGrip(null),
+               ownProperties: ownProperties,
+               safeGetterValues: Object.create(null) };
+    }
+    for (let name of names) {
       ownProperties[name] = this._propertyDescriptor(name);
     }
     return { from: this.actorID,
              prototype: this.threadActor.createValueGrip(this.obj.proto),
              ownProperties: ownProperties,
              safeGetterValues: this._findSafeGetterValues(ownProperties) };
   },
 
--- a/toolkit/devtools/webconsole/WebConsoleUtils.jsm
+++ b/toolkit/devtools/webconsole/WebConsoleUtils.jsm
@@ -790,18 +790,25 @@ function JSPropertyProvider(aScope, aInp
     }
 
     // If obj is undefined or null (which is what "== null" does),
     // then there is no chance to run completion on it. Exit here.
     if (obj == null) {
       return null;
     }
 
-    // Skip Iterators and Generators.
-    if (WCU.isIteratorOrGenerator(obj)) {
+    try {
+      // Skip Iterators and Generators.
+      if (WCU.isIteratorOrGenerator(obj)) {
+        return null;
+      }
+    }
+    catch (ex) {
+      // The above can throw if |obj| is a dead object.
+      // TODO: we should use Cu.isDeadWrapper() - see bug 885800.
       return null;
     }
   }
 
   let matches = Object.keys(getMatchedProps(obj, {matchProp:matchProp}));
 
   return {
     matchProp: matchProp,