Bug 1171298 - Show the ConsoleAPI message prefix in web/browser consoles. r=bgrins,Mossop

--HG--
extra : commitid : IP32ABnsILt
extra : rebase_source : 53b2ac21e5f137e7739e3d895d639816baeb750f
This commit is contained in:
Matthew Noorenberghe 2015-06-04 14:11:45 -07:00
parent dd1be2fe6e
commit 0967be5f0a
6 changed files with 62 additions and 5 deletions

View File

@ -47,7 +47,7 @@ branch.addObserver(SDK_LOG_LEVEL_PREF, logLevelObserver, true);
function PlainTextConsole(print, innerID) {
let consoleOptions = {
prefix: self.name + ": ",
prefix: self.name,
maxLogLevel: logLevel,
dump: print,
innerID: innerID,

View File

@ -683,6 +683,7 @@ Messages.Simple = function(message, options = {})
this.severity = options.severity;
this.location = options.location;
this.timestamp = options.timestamp || Date.now();
this.prefix = options.prefix;
this.private = !!options.private;
this._message = message;
@ -712,6 +713,12 @@ Messages.Simple.prototype = Heritage.extend(Messages.BaseMessage.prototype,
*/
location: null,
/**
* Message prefix
* @type string|null
*/
prefix: null,
/**
* Tells if this message comes from a private browsing context.
* @type boolean
@ -809,6 +816,7 @@ Messages.Simple.prototype = Heritage.extend(Messages.BaseMessage.prototype,
rid.category = this.category;
rid.severity = this.severity;
rid.prefix = this.prefix;
rid.private = this.private;
rid.location = this.location;
rid.link = this._link;
@ -841,6 +849,13 @@ Messages.Simple.prototype = Heritage.extend(Messages.BaseMessage.prototype,
icon.className = "icon";
icon.title = l10n.getStr("severity." + this._severityNameCompat);
let prefixNode;
if (this.prefix) {
prefixNode = this.document.createElementNS(XHTML_NS, "span");
prefixNode.className = "prefix devtools-monospace";
prefixNode.textContent = this.prefix + ":";
}
// Apply the current group by indenting appropriately.
// TODO: remove this once bug 778766 is fixed.
let indent = this._groupDepthCompat * COMPAT.GROUP_INDENT;
@ -862,6 +877,9 @@ Messages.Simple.prototype = Heritage.extend(Messages.BaseMessage.prototype,
this.element.appendChild(timestamp.element);
this.element.appendChild(indentNode);
this.element.appendChild(icon);
if (prefixNode) {
this.element.appendChild(prefixNode);
}
this.element.appendChild(body);
if (repeatNode) {
this.element.appendChild(repeatNode);
@ -1280,6 +1298,7 @@ Messages.ConsoleGeneric = function(packet)
timestamp: packet.timeStamp,
category: "webdev",
severity: CONSOLE_API_LEVELS_TO_SEVERITIES[packet.level],
prefix: packet.prefix,
private: packet.private,
filterDuplicates: true,
location: {

View File

@ -7,11 +7,11 @@
"use strict";
let test = asyncTest(function*() {
add_task(function*() {
let storage = Cc["@mozilla.org/consoleAPI-storage;1"].getService(Ci.nsIConsoleAPIStorage);
storage.clearEvents();
let console = Cu.import("resource://gre/modules/devtools/Console.jsm", {}).console;
let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
console.log("bug861338-log-cached");
let hud = yield HUDService.toggleBrowserConsole();
@ -134,4 +134,35 @@ let test = asyncTest(function*() {
name: "bug851231prop",
value: "bug851231value",
}], { webconsole: hud });
yield HUDService.toggleBrowserConsole();
});
add_task(function* test_prefix() {
let storage = Cc["@mozilla.org/consoleAPI-storage;1"].getService(Ci.nsIConsoleAPIStorage);
storage.clearEvents();
let {ConsoleAPI} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
let consoleOptions = {
maxLogLevel: "error",
prefix: "Log Prefix",
};
let console2 = new ConsoleAPI(consoleOptions);
console2.error("Testing a prefix");
console2.log("Below the maxLogLevel");
let hud = yield HUDService.toggleBrowserConsole();
yield waitForMessages({
webconsole: hud,
messages: [{
name: "cached console.error message",
prefix: "Log Prefix:",
severity: SEVERITY_ERROR,
text: "Testing a prefix",
}],
});
hud.jsterm.clearOutput(true);
yield HUDService.toggleBrowserConsole();
});

View File

@ -1292,6 +1292,11 @@ function waitForMessages(aOptions)
aRule.clickableElements = clickables;
}
if ("prefix" in aRule) {
let prefixNode = aElement.querySelector(".prefix");
is(prefixNode && prefixNode.textContent, aRule.prefix, "Check prefix");
}
let count = aRule.count || 1;
if (!aRule.matched) {
aRule.matched = new Set();

View File

@ -23,10 +23,11 @@ a {
box-sizing: border-box;
}
.message > .prefix,
.message > .timestamp {
flex: none;
color: GrayText;
margin: 4px 6px 0 0;
margin: 3px 6px 0 0;
}
.message > .indent {

View File

@ -443,7 +443,7 @@ function stopTimer(aName, aTimestamp) {
function dumpMessage(aConsole, aLevel, aMessage) {
aConsole.dump(
"console." + aLevel + ": " +
aConsole.prefix +
(aConsole.prefix ? aConsole.prefix + ": " : "") +
aMessage + "\n"
);
}
@ -533,6 +533,7 @@ function sendConsoleAPIMessage(aConsole, aLevel, aFrame, aArgs, aOptions = {})
functionName: aFrame.functionName,
timeStamp: Date.now(),
arguments: aArgs,
prefix: aConsole.prefix,
};
consoleEvent.wrappedJSObject = consoleEvent;