diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
index 6e50017143..b24f828e4d 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -382,6 +382,8 @@
@RESPATH@/components/DownloadLegacy.js
@RESPATH@/components/BrowserPageThumbs.manifest
@RESPATH@/components/crashmonitor.manifest
+@RESPATH@/components/jsconsole-clhandler.manifest
+@RESPATH@/components/jsconsole-clhandler.js
@RESPATH@/components/nsCrashMonitor.js
@RESPATH@/components/SiteSpecificUserAgent.js
@RESPATH@/components/SiteSpecificUserAgent.manifest
diff --git a/toolkit/components/console/content/console.css b/toolkit/components/console/content/console.css
new file mode 100644
index 0000000000..e05f13c3ef
--- /dev/null
+++ b/toolkit/components/console/content/console.css
@@ -0,0 +1,74 @@
+/* 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/. */
+
+
+.console-box {
+ -moz-binding: url("chrome://global/content/consoleBindings.xml#console-box");
+ overflow: auto;
+}
+
+.console-rows {
+ -moz-user-focus: normal;
+}
+
+.console-row[type="error"],
+.console-row[type="warning"] {
+ -moz-binding: url("chrome://global/content/consoleBindings.xml#error");
+}
+
+.console-row[type="message"] {
+ -moz-binding: url("chrome://global/content/consoleBindings.xml#message");
+}
+
+.console-msg-text,
+.console-error-msg {
+ white-space: pre-wrap;
+}
+
+.console-error-source {
+ -moz-binding: url("chrome://global/content/consoleBindings.xml#console-error-source");
+}
+
+.console-dots {
+ width: 1px;
+}
+
+/* :::::::::: hiding and showing of rows for each mode :::::::::: */
+
+.console-box[mode="Warnings"] > .console-box-internal > .console-rows
+ > .console-row[type="error"],
+.console-box[mode="Messages"] > .console-box-internal > .console-rows
+ > .console-row[type="error"]
+{
+ display: none;
+}
+
+.console-box[mode="Errors"] > .console-box-internal > .console-rows
+ > .console-row[type="warning"],
+.console-box[mode="Messages"] > .console-box-internal > .console-rows
+ > .console-row[type="warning"]
+{
+ display: none;
+}
+
+.console-box[mode="Errors"] > .console-box-internal > .console-rows
+ > .console-row[type="message"],
+.console-box[mode="Warnings"] > .console-box-internal > .console-rows
+ > .console-row[type="message"]
+{
+ display: none;
+}
+
+.filtered-by-string {
+ display: none;
+}
+
+/* If line number is 0, hide the line number section */
+.lineNumberRow[line="0"] {
+ display: none;
+}
+
+#TextboxEval {
+ direction: ltr;
+}
diff --git a/toolkit/components/console/content/console.js b/toolkit/components/console/content/console.js
new file mode 100644
index 0000000000..ad68026078
--- /dev/null
+++ b/toolkit/components/console/content/console.js
@@ -0,0 +1,111 @@
+// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+
+/* 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/. */
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+var gConsole, gConsoleBundle, gTextBoxEval, gEvaluator, gCodeToEvaluate;
+var gFilter;
+
+/* :::::::: Console Initialization ::::::::::::::: */
+
+window.onload = function()
+{
+ gConsole = document.getElementById("ConsoleBox");
+ gConsoleBundle = document.getElementById("ConsoleBundle");
+ gTextBoxEval = document.getElementById("TextboxEval");
+ gEvaluator = document.getElementById("Evaluator");
+ gFilter = document.getElementById("Filter");
+
+ updateSortCommand(gConsole.sortOrder);
+ updateModeCommand(gConsole.mode);
+
+ gEvaluator.addEventListener("load", loadOrDisplayResult, true);
+}
+
+/* :::::::: Console UI Functions ::::::::::::::: */
+
+function changeFilter()
+{
+ gConsole.filter = gFilter.value;
+
+ document.persist("ConsoleBox", "filter");
+}
+
+function changeMode(aMode)
+{
+ switch (aMode) {
+ case "Errors":
+ case "Warnings":
+ case "Messages":
+ gConsole.mode = aMode;
+ break;
+ case "All":
+ gConsole.mode = null;
+ }
+
+ document.persist("ConsoleBox", "mode");
+}
+
+function clearConsole()
+{
+ gConsole.clear();
+}
+
+function changeSortOrder(aOrder)
+{
+ updateSortCommand(gConsole.sortOrder = aOrder);
+}
+
+function updateSortCommand(aOrder)
+{
+ var orderString = aOrder == 'reverse' ? "Descend" : "Ascend";
+ var bc = document.getElementById("Console:sort"+orderString);
+ bc.setAttribute("checked", true);
+
+ orderString = aOrder == 'reverse' ? "Ascend" : "Descend";
+ bc = document.getElementById("Console:sort"+orderString);
+ bc.setAttribute("checked", false);
+}
+
+function updateModeCommand(aMode)
+{
+ /* aMode can end up invalid if it set by an extension that replaces */
+ /* mode and then it is uninstalled or disabled */
+ var bc = document.getElementById("Console:mode" + aMode) ||
+ document.getElementById("Console:modeAll");
+ bc.setAttribute("checked", true);
+}
+
+function onEvalKeyPress(aEvent)
+{
+ if (aEvent.keyCode == 13)
+ evaluateTypein();
+}
+
+function evaluateTypein()
+{
+ gCodeToEvaluate = gTextBoxEval.value;
+ // reset the iframe first; the code will be evaluated in loadOrDisplayResult
+ // below, once about:blank has completed loading (see bug 385092)
+ gEvaluator.contentWindow.location = "about:blank";
+}
+
+function loadOrDisplayResult()
+{
+ if (gCodeToEvaluate) {
+ gEvaluator.contentWindow.location = "javascript: " +
+ gCodeToEvaluate.replace(/%/g, "%25");
+ gCodeToEvaluate = "";
+ return;
+ }
+
+ var resultRange = gEvaluator.contentDocument.createRange();
+ resultRange.selectNode(gEvaluator.contentDocument.documentElement);
+ var result = resultRange.toString();
+ if (result)
+ Services.console.logStringMessage(result);
+ // or could use appendMessage which doesn't persist
+}
diff --git a/toolkit/components/console/content/console.xul b/toolkit/components/console/content/console.xul
new file mode 100644
index 0000000000..0abd0a9811
--- /dev/null
+++ b/toolkit/components/console/content/console.xul
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+ %console;
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/toolkit/components/console/content/consoleBindings.xml b/toolkit/components/console/content/consoleBindings.xml
new file mode 100644
index 0000000000..1b00326bfc
--- /dev/null
+++ b/toolkit/components/console/content/consoleBindings.xml
@@ -0,0 +1,547 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 250
+
+
+
+
+ 200
+
+
+
+ Services.prefs.getBoolPref("javascript.options.showInConsole");
+
+
+
+ return this.mCount
+
+
+
+ return this.mMode;
+
+
+
+
+ return this.mFilter;
+
+
+
+
+ return this.getAttribute("sortOrder");
+ this.setAttribute("sortOrder", val); return val;
+
+ null
+
+ return this.mSelectedItem
+
+
+
+
+
+
+
+
+
+
+
+
+ = limit; --i)
+ if (!messages[i].message)
+ break;
+
+ // Populate with messages after latest "clear"
+ while (++i < messages.length)
+ this.appendItem(messages[i]);
+ ]]>
+
+
+
+
+
+
+
+
+
+
+ aString.length)
+ aMiddleCharacter = halfLimit;
+
+ let startPosition = 0;
+ let endPosition = aString.length;
+ if (aMiddleCharacter - halfLimit >= 0)
+ startPosition = aMiddleCharacter - halfLimit;
+ if (aMiddleCharacter + halfLimit <= aString.length)
+ endPosition = aMiddleCharacter + halfLimit;
+ if (endPosition - startPosition < this.fieldMaxLength)
+ endPosition += this.fieldMaxLength - (endPosition - startPosition);
+ let truncatedString = aString.substring(startPosition, endPosition);
+ let Ci = Components.interfaces;
+ let ellipsis = Services.prefs.getComplexValue("intl.ellipsis",
+ Ci.nsIPrefLocalizedString).data;
+ if (startPosition > 0) {
+ truncatedString = ellipsis + truncatedString;
+ aMiddleCharacter += ellipsis.length;
+ }
+ if (endPosition < aString.length)
+ truncatedString = truncatedString + ellipsis;
+
+ return {
+ string: truncatedString,
+ column: aMiddleCharacter - startPosition
+ };
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ this.limit) this.deleteFirst();
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ this.init();
+ this.destroy();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ null
+ null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/toolkit/components/console/jar.mn b/toolkit/components/console/jar.mn
new file mode 100644
index 0000000000..26e54c6fbb
--- /dev/null
+++ b/toolkit/components/console/jar.mn
@@ -0,0 +1,9 @@
+# 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/.
+
+toolkit.jar:
+ content/global/console.js (content/console.js)
+ content/global/console.xul (content/console.xul)
+ content/global/console.css (content/console.css)
+ content/global/consoleBindings.xml (content/consoleBindings.xml)
diff --git a/toolkit/components/console/jsconsole-clhandler.js b/toolkit/components/console/jsconsole-clhandler.js
new file mode 100644
index 0000000000..7e5d0ea51e
--- /dev/null
+++ b/toolkit/components/console/jsconsole-clhandler.js
@@ -0,0 +1,40 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/* vim:sw=4:sr:sta:et:sts: */
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+function jsConsoleHandler() {}
+jsConsoleHandler.prototype = {
+ handle: function clh_handle(cmdLine) {
+ if (!cmdLine.handleFlag("jsconsole", false))
+ return;
+
+ var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
+ getService(Ci.nsIWindowMediator);
+ var console = wm.getMostRecentWindow("global:console");
+ if (!console) {
+ var wwatch = Cc["@mozilla.org/embedcomp/window-watcher;1"].
+ getService(Ci.nsIWindowWatcher);
+ wwatch.openWindow(null, "chrome://global/content/console.xul", "_blank",
+ "chrome,dialog=no,all", cmdLine);
+ } else {
+ console.focus(); // the Error console was already open
+ }
+
+ if (cmdLine.state == Ci.nsICommandLine.STATE_REMOTE_AUTO)
+ cmdLine.preventDefault = true;
+ },
+
+ helpInfo : " -jsconsole Open the Error console.\n",
+
+ classID: Components.ID("{2cd0c310-e127-44d0-88fc-4435c9ab4d4b}"),
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler]),
+};
+
+this.NSGetFactory = XPCOMUtils.generateNSGetFactory([jsConsoleHandler]);
diff --git a/toolkit/components/console/jsconsole-clhandler.manifest b/toolkit/components/console/jsconsole-clhandler.manifest
new file mode 100644
index 0000000000..8e8c9b8bbf
--- /dev/null
+++ b/toolkit/components/console/jsconsole-clhandler.manifest
@@ -0,0 +1,3 @@
+component {2cd0c310-e127-44d0-88fc-4435c9ab4d4b} jsconsole-clhandler.js
+contract @mozilla.org/toolkit/console-clh;1 {2cd0c310-e127-44d0-88fc-4435c9ab4d4b}
+category command-line-handler b-jsconsole @mozilla.org/toolkit/console-clh;1
diff --git a/toolkit/components/console/moz.build b/toolkit/components/console/moz.build
new file mode 100644
index 0000000000..d730b9aa3f
--- /dev/null
+++ b/toolkit/components/console/moz.build
@@ -0,0 +1,14 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+MOCHITEST_CHROME_MANIFESTS += ['tests/chrome.ini']
+
+EXTRA_COMPONENTS += [
+ 'jsconsole-clhandler.js',
+ 'jsconsole-clhandler.manifest',
+]
+
+JAR_MANIFESTS += ['jar.mn']
diff --git a/toolkit/components/console/tests/chrome.ini b/toolkit/components/console/tests/chrome.ini
new file mode 100644
index 0000000000..0480c3533e
--- /dev/null
+++ b/toolkit/components/console/tests/chrome.ini
@@ -0,0 +1,3 @@
+[DEFAULT]
+
+[test_hugeURIs.xul]
diff --git a/toolkit/components/console/tests/test_hugeURIs.xul b/toolkit/components/console/tests/test_hugeURIs.xul
new file mode 100644
index 0000000000..87a571e8d1
--- /dev/null
+++ b/toolkit/components/console/tests/test_hugeURIs.xul
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+ Mozilla Bug 796179
+
+
+
+
+
+
+
+
+
diff --git a/toolkit/components/moz.build b/toolkit/components/moz.build
index 74f3ad7f83..509332800e 100644
--- a/toolkit/components/moz.build
+++ b/toolkit/components/moz.build
@@ -18,6 +18,7 @@ DIRS += [
'apppicker',
'asyncshutdown',
'commandlines',
+ 'console',
'contentprefs',
'contextualidentity',
'cookie',
diff --git a/toolkit/locales/jar.mn b/toolkit/locales/jar.mn
index 32add622bc..c28cf6f499 100644
--- a/toolkit/locales/jar.mn
+++ b/toolkit/locales/jar.mn
@@ -33,6 +33,8 @@
locale/@AB_CD@/global/config.dtd (%chrome/global/config.dtd)
locale/@AB_CD@/global/config.properties (%chrome/global/config.properties)
locale/@AB_CD@/global/contentAreaCommands.properties (%chrome/global/contentAreaCommands.properties)
+ locale/@AB_CD@/global/console.dtd (%chrome/global/console.dtd)
+ locale/@AB_CD@/global/console.properties (%chrome/global/console.properties)
#ifndef MOZ_FENNEC
locale/@AB_CD@/global/customizeToolbar.dtd (%chrome/global/customizeToolbar.dtd)
locale/@AB_CD@/global/customizeToolbar.properties (%chrome/global/customizeToolbar.properties)
diff --git a/toolkit/themes/linux/global/console/console-toolbar.png b/toolkit/themes/linux/global/console/console-toolbar.png
new file mode 100644
index 0000000000..05277b6508
Binary files /dev/null and b/toolkit/themes/linux/global/console/console-toolbar.png differ
diff --git a/toolkit/themes/linux/global/console/console.css b/toolkit/themes/linux/global/console/console.css
new file mode 100644
index 0000000000..7c900376d6
--- /dev/null
+++ b/toolkit/themes/linux/global/console/console.css
@@ -0,0 +1,156 @@
+/* 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/. */
+
+/* ===== console.css ====================================================
+ == Styles used by the Error Console window.
+ ====================================================================== */
+
+@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+
+.console-box {
+ background-color: -moz-Field;
+ color: -moz-FieldText;
+}
+
+/* ::::: console rows ::::: */
+
+.console-row {
+ border-bottom: 1px dotted threedshadow;
+ padding: 4px 0px;
+}
+
+.console-row-icon {
+ padding: 4px;
+ -moz-padding-start: 5px;
+ -moz-box-align: start !important;
+}
+
+.console-row-msg > label:first-child,
+.console-row-file > label:first-child {
+ display: none;
+}
+
+.console-time {
+ font-weight: normal !important;
+}
+
+.console-icon {
+ list-style-image: inherit;
+}
+
+.console-error-msg {
+ margin-bottom: 2px;
+}
+
+/* ..... error rows ..... */
+
+.console-row-code {
+ padding-top: 3px;
+ padding-bottom: 3px;
+ -moz-padding-start: 3px;
+ -moz-padding-end: 0px;
+ color: #0000BB;
+ font-size: larger;
+}
+
+.console-dots,
+.console-caret {
+ height: 9px;
+}
+
+.console-dots {
+ background: url("chrome://global/skin/console/console-error-dash.gif") repeat-x top;
+}
+
+.console-caret {
+ width: 7px;
+ background: url("chrome://global/skin/console/console-error-caret.gif") no-repeat top;
+}
+
+/* ..... message rows ..... */
+
+.console-row[type="message"] {
+ font-family: monospace;
+}
+
+/* ..... selected state ..... */
+
+.console-row[selected="true"] {
+ background-image: url("chrome://global/skin/console/itemSelected.png");
+}
+
+.console-row-code[selected="true"],
+.console-row-content[selected="true"] > .console-row-file > .console-error-source > .text-link {
+ color: inherit !important;
+}
+
+/* ::::: icons ::::: */
+
+.console-row[type="error"],
+.console-row[type="exception"] {
+ list-style-image: url("moz-icon://stock/gtk-dialog-error?size=menu");
+}
+
+.console-row[type="error"] .console-row-msg,
+.console-row[type="exception"] .console-row-msg {
+ font-weight: bold;
+}
+
+.console-row[type="warning"] {
+ list-style-image: url("moz-icon://stock/gtk-dialog-warning?size=menu");
+}
+
+.console-row[type="message"] {
+ list-style-image: url("moz-icon://stock/gtk-dialog-info?size=menu");
+}
+
+/* ::::: toolbars ::::: */
+
+#TextboxEval {
+ margin: 2px !important;
+}
+
+#ButtonEval {
+ margin-top: 2px !important;
+ margin-bottom: 2px !important;
+ -moz-margin-start: 0px !important;
+ -moz-margin-end: 2px !important;
+}
+
+/* Toolbar icons */
+
+toolbar#ToolbarMode toolbarbutton {
+ -moz-box-orient: horizontal;
+}
+
+#Console\:modeAll {
+ list-style-image: url("chrome://global/skin/console/console-toolbar.png");
+}
+
+#Console\:modeErrors {
+ list-style-image: url("moz-icon://stock/gtk-dialog-error?size=toolbar");
+}
+
+#Console\:modeWarnings {
+ list-style-image: url("moz-icon://stock/gtk-dialog-warning?size=toolbar");
+}
+
+#Console\:modeMessages {
+ list-style-image: url("moz-icon://stock/gtk-dialog-info?size=toolbar");
+}
+
+#Console\:clear {
+ list-style-image: url("moz-icon://stock/gtk-clear?size=toolbar");
+}
+
+toolbar#ToolbarMode .toolbarbutton-text {
+ -moz-padding-end: 4px;
+}
+
+/* ::::: Fix Error Console toolbar button text spacing ::::: */
+
+.toolbarbutton-text {
+ -moz-padding-start: 0px;
+ -moz-padding-end: 5px;
+}
diff --git a/toolkit/themes/linux/global/console/console.png b/toolkit/themes/linux/global/console/console.png
new file mode 100644
index 0000000000..c1be13b6db
Binary files /dev/null and b/toolkit/themes/linux/global/console/console.png differ
diff --git a/toolkit/themes/linux/global/jar.mn b/toolkit/themes/linux/global/jar.mn
index e67ea020e5..5bde219fdd 100644
--- a/toolkit/themes/linux/global/jar.mn
+++ b/toolkit/themes/linux/global/jar.mn
@@ -51,3 +51,7 @@ toolkit.jar:
skin/classic/global/toolbar/spring.png (toolbar/spring.png)
skin/classic/global/tree/twisty-clsd.png (tree/twisty-clsd.png)
skin/classic/global/tree/twisty-open.png (tree/twisty-open.png)
+
+ skin/classic/global/console/console.css (console/console.css)
+ skin/classic/global/console/console.png (console/console.png)
+ skin/classic/global/console/console-toolbar.png (console/console-toolbar.png)
diff --git a/toolkit/themes/osx/global/console/console-error-caret.gif b/toolkit/themes/osx/global/console/console-error-caret.gif
new file mode 100644
index 0000000000..a8f30f9263
Binary files /dev/null and b/toolkit/themes/osx/global/console/console-error-caret.gif differ
diff --git a/toolkit/themes/osx/global/console/console-error-dash.gif b/toolkit/themes/osx/global/console/console-error-dash.gif
new file mode 100644
index 0000000000..74679a25e2
Binary files /dev/null and b/toolkit/themes/osx/global/console/console-error-dash.gif differ
diff --git a/toolkit/themes/osx/global/console/console.css b/toolkit/themes/osx/global/console/console.css
new file mode 100644
index 0000000000..f18f6f680c
--- /dev/null
+++ b/toolkit/themes/osx/global/console/console.css
@@ -0,0 +1,165 @@
+/* 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/. */
+
+/* ===== console.css ====================================================
+ == Styles used by the Error Console window.
+ ======================================================================= */
+
+/* View buttons */
+@import "chrome://global/skin/viewbuttons.css";
+
+%include ../shared.inc
+@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+
+.console-box {
+ background-color: -moz-Field;
+ color: -moz-FieldText;
+ overflow: auto;
+}
+
+/* ::::: console rows ::::: */
+
+.console-row {
+ border-bottom: 1px solid #A3A3A3;
+ padding: 4px;
+}
+
+.console-row-file {
+ color: #505050;
+}
+
+.console-row-msg > label:first-child {
+ font-weight: bold;
+}
+
+.console-row-msg > label, .comsole-row-msg > description, .console-error-msg, .console-row-file, .console-row-code {
+ margin: 2px;
+}
+
+.console-row-file > label {
+ margin: 0;
+}
+
+.console-msg-text {
+ white-space: pre-wrap !important;
+}
+.console-icon {
+ list-style-image: inherit;
+ padding-right: 6px;
+ padding-left: 6px;
+}
+
+/* ..... error rows ..... */
+
+.console-row-code {
+ color: #0000BB;
+ font-size: larger;
+}
+
+.console-dots,
+.console-caret {
+ height: 9px;
+}
+
+.console-dots {
+ background: url("chrome://global/skin/console/console-error-dash.gif") repeat-x top;
+}
+
+.console-caret {
+ width: 7px;
+ background: url("chrome://global/skin/console/console-error-caret.gif") no-repeat top;
+}
+
+/* ..... message rows ..... */
+
+.console-row[type="message"] {
+ font-family: monospace;
+}
+
+/* ..... selected state ..... */
+
+.console-row[selected="true"] {
+ background-color: #3D80DF !important;
+ color: #FFF;
+}
+
+.console-row-code[selected="true"],
+.console-row-content[selected="true"] > .console-row-file,
+.console-row-content[selected="true"] > .console-row-file > .console-error-source > .text-link {
+ color: #FFF !important;
+}
+
+/* ::::: row colors ::::: */
+
+.console-row[type="error"],
+.console-row[type="exception"] {
+ background-color: #FFD0DC;
+}
+
+.console-row[type="warning"] {
+ background-color: #F8F3CC;
+}
+
+.console-row[type="message"] {
+ background-color: #D3EDFF;
+}
+
+/* ::::: toolbars ::::: */
+
+#ToolbarEval {
+ -moz-appearance: none;
+ background: @scopeBarBackground@;
+ border-bottom: @scopeBarSeparatorBorder@;
+ padding: 2px;
+}
+
+#ToolbarEval > label {
+ font-weight: bold;
+ color: @scopeBarTitleColor@;
+}
+
+#TextfieldEval {
+ margin: 2px !important;
+}
+
+#ButtonEval {
+ margin: 0 4px;
+ padding: 1px 10px;
+ -moz-appearance: none;
+ border-radius: 10000px;
+ border: @roundButtonBorder@;
+ background: @roundButtonBackground@;
+ box-shadow: @roundButtonShadow@;
+}
+
+#ButtonEval:hover:active {
+ text-shadow: @loweredShadow@;
+ background: @roundButtonPressedBackground@;
+ box-shadow: @roundButtonPressedShadow@;
+}
+
+toolbarseparator {
+ min-height: 1em;
+ background-image: none;
+}
+
+/* Toolbar icons */
+
+#ToolbarMode {
+ -moz-box-pack: center;
+}
+
+#ToolbarMode toolbarbutton > .toolbarbutton-icon {
+ display: none;
+}
+
+#Console\:clear {
+ -moz-box-orient: vertical;
+ -moz-box-align: center;
+ -moz-appearance: toolbarbutton;
+ font: menu;
+ text-shadow: @loweredShadow@;
+ margin: 4px 0 9px;
+ padding: 0 1px;
+}
diff --git a/toolkit/themes/osx/global/jar.mn b/toolkit/themes/osx/global/jar.mn
index def597650d..e979d4a8c3 100644
--- a/toolkit/themes/osx/global/jar.mn
+++ b/toolkit/themes/osx/global/jar.mn
@@ -73,6 +73,9 @@ toolkit.jar:
skin/classic/global/arrow/panelarrow-vertical@2x.png (arrow/panelarrow-vertical@2x.png)
skin/classic/global/checkbox/cbox-check.gif (checkbox/cbox-check.gif)
skin/classic/global/checkbox/cbox-check-dis.gif (checkbox/cbox-check-dis.gif)
+ skin/classic/global/console/console-error-caret.gif (console/console-error-caret.gif)
+ skin/classic/global/console/console-error-dash.gif (console/console-error-dash.gif)
+* skin/classic/global/console/console.css (console/console.css)
skin/classic/global/dirListing/dirListing.css (dirListing/dirListing.css)
skin/classic/global/dirListing/folder.png (dirListing/folder.png)
skin/classic/global/dirListing/remote.png (dirListing/remote.png)
diff --git a/toolkit/themes/windows/global/console/console-error-caret.gif b/toolkit/themes/windows/global/console/console-error-caret.gif
new file mode 100644
index 0000000000..a8f30f9263
Binary files /dev/null and b/toolkit/themes/windows/global/console/console-error-caret.gif differ
diff --git a/toolkit/themes/windows/global/console/console-error-dash.gif b/toolkit/themes/windows/global/console/console-error-dash.gif
new file mode 100644
index 0000000000..74679a25e2
Binary files /dev/null and b/toolkit/themes/windows/global/console/console-error-dash.gif differ
diff --git a/toolkit/themes/windows/global/console/console-toolbar.png b/toolkit/themes/windows/global/console/console-toolbar.png
new file mode 100644
index 0000000000..fc681f9268
Binary files /dev/null and b/toolkit/themes/windows/global/console/console-toolbar.png differ
diff --git a/toolkit/themes/windows/global/console/console.css b/toolkit/themes/windows/global/console/console.css
new file mode 100644
index 0000000000..d918fb73c8
--- /dev/null
+++ b/toolkit/themes/windows/global/console/console.css
@@ -0,0 +1,218 @@
+/* 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/. */
+
+/* ===== console.css ====================================================
+ == Styles used by the Error Console window.
+ ====================================================================== */
+
+@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+
+.console-box {
+ background-color: -moz-Field;
+ color: -moz-FieldText;
+}
+
+/* ::::: console rows ::::: */
+
+.console-row {
+ border-bottom: 1px solid ThreeDLightShadow;
+ padding: 4px 0px;
+}
+
+.console-row-icon {
+ padding: 4px;
+ -moz-padding-start: 5px;
+ -moz-box-align: start !important;
+}
+
+.console-row-msg > label:first-child,
+.console-row-file > label:first-child {
+ display: none;
+}
+
+.console-time {
+ font-weight: normal !important;
+}
+
+.console-icon {
+ list-style-image: inherit;
+}
+
+.console-error-msg {
+ margin-bottom: 2px;
+}
+
+/* ..... error rows ..... */
+
+.console-row-code {
+ padding-top: 3px;
+ padding-bottom: 3px;
+ -moz-padding-start: 3px;
+ -moz-padding-end: 0px;
+ color: #0000BB;
+ font-size: larger;
+}
+
+.console-dots,
+.console-caret {
+ height: 9px;
+}
+
+.console-dots {
+ background: url("chrome://global/skin/console/console-error-dash.gif") repeat-x top;
+}
+
+.console-caret {
+ width: 7px;
+ background: url("chrome://global/skin/console/console-error-caret.gif") no-repeat top;
+}
+
+/* ..... message rows ..... */
+
+.console-row[type="message"] {
+ font-family: monospace;
+}
+
+/* ..... selected state ..... */
+
+.console-row[selected="true"] {
+ background-image: url("chrome://global/skin/console/itemSelected.png");
+}
+
+.console-row-code[selected="true"],
+.console-row-content[selected="true"] > .console-row-file > .console-error-source > .text-link {
+ color: inherit !important;
+}
+
+/* ::::: icons ::::: */
+
+.console-row[type="error"],
+.console-row[type="exception"] {
+ list-style-image: url("chrome://global/skin/icons/error-16.png");
+}
+
+.console-row[type="error"] .console-row-msg,
+.console-row[type="exception"] .console-row-msg {
+ font-weight: bold;
+}
+
+.console-row[type="warning"] {
+ list-style-image: url("chrome://global/skin/icons/warning-16.png");
+}
+
+.console-row[type="message"] {
+ list-style-image: url("chrome://global/skin/icons/information-16.png");
+}
+
+/* ::::: toolbars ::::: */
+
+#TextboxEval {
+ margin: 2px !important;
+}
+
+#ButtonEval {
+ margin-top: 2px !important;
+ margin-bottom: 2px !important;
+ -moz-margin-start: 0px !important;
+ -moz-margin-end: 2px !important;
+}
+
+toolbarseparator {
+ min-height: 1em;
+}
+
+/* Toolbar icons */
+
+#ToolbarMode toolbarbutton {
+ min-width: 57px;
+ padding: 4px !important;
+}
+
+toolbar#ToolbarMode toolbarbutton:active,
+toolbar#ToolbarMode toolbarbutton[checked="true"] {
+ -moz-padding-start: 5px !important;
+ -moz-padding-end: 3px !important;
+}
+
+
+toolbar#ToolbarMode toolbarbutton {
+ list-style-image: url("chrome://global/skin/console/console-toolbar.png");
+ -moz-box-orient: horizontal;
+ padding: 4px !important;
+}
+
+#Console\:modeAll {
+ -moz-image-region: rect(0px 24px 24px 0px);
+}
+
+#Console\:modeAll {
+ -moz-image-region: rect(0px 24px 24px 0px);
+}
+
+#Console\:modeAll:hover,
+#Console\:modeAll[checked="true"] {
+ -moz-image-region: rect(24px 24px 48px 0px);
+}
+
+#Console\:modeErrors {
+ -moz-image-region: rect(0px 96px 24px 72px);
+}
+
+#Console\:modeErrors:hover,
+#Console\:modeErrors[checked="true"] {
+ -moz-image-region: rect(24px 96px 48px 72px);
+}
+
+#Console\:modeWarnings {
+ -moz-image-region: rect(0px 72px 24px 48px);
+}
+
+#Console\:modeWarnings:hover,
+#Console\:modeWarnings[checked="true"] {
+ -moz-image-region: rect(24px 72px 48px 48px);
+}
+
+#Console\:modeMessages {
+ -moz-image-region: rect(0px 48px 24px 24px);
+}
+
+#Console\:modeMessages:hover,
+#Console\:modeMessages[checked="true"] {
+ -moz-image-region: rect(24px 48px 48px 24px);
+}
+
+#Console\:clear {
+ -moz-image-region: rect(0px 120px 24px 96px);
+}
+
+#Console\:clear:hover,
+#Console\:clear[checked="true"] {
+ -moz-image-region: rect(24px 120px 48px 96px);
+}
+
+toolbar#ToolbarMode .toolbarbutton-icon {
+ padding: 2px 0 !important;
+}
+
+toolbar#ToolbarMode .toolbarbutton-text {
+ -moz-padding-end: 4px;
+}
+
+
+/* ::::: Fix Error Console toolbar button text spacing ::::: */
+
+.toolbarbutton-text {
+ -moz-padding-start: 0px;
+ -moz-padding-end: 5px;
+}
+
+%ifdef XP_WIN
+#ToolbarMode {
+ -moz-appearance: -moz-win-browsertabbar-toolbox;
+}
+
+#ToolbarEval {
+ -moz-appearance: toolbox;
+}
+%endif
diff --git a/toolkit/themes/windows/global/console/itemSelected.png b/toolkit/themes/windows/global/console/itemSelected.png
new file mode 100644
index 0000000000..964cd6acc6
Binary files /dev/null and b/toolkit/themes/windows/global/console/itemSelected.png differ
diff --git a/toolkit/themes/windows/global/jar.mn b/toolkit/themes/windows/global/jar.mn
index c3ad17af12..48613e7947 100644
--- a/toolkit/themes/windows/global/jar.mn
+++ b/toolkit/themes/windows/global/jar.mn
@@ -20,6 +20,11 @@ toolkit.jar:
#endif
skin/classic/global/colorpicker.css
skin/classic/global/commonDialog.css
+* skin/classic/global/console/console.css (console/console.css)
+ skin/classic/global/console/console-toolbar.png (console/console-toolbar.png)
+ skin/classic/global/console/console-error-caret.gif (console/console-error-caret.gif)
+ skin/classic/global/console/console-error-dash.gif (console/console-error-dash.gif)
+ skin/classic/global/console/itemSelected.png (console/itemSelected.png)
skin/classic/global/findBar.css
* skin/classic/global/global.css
skin/classic/global/listbox.css