Bug 861338 - [browserconsole] Cache Console.jsm API calls with ConsoleAPIStorage.jsm; r=jwalker

This commit is contained in:
Mihai Sucan 2013-06-07 20:13:48 +03:00
parent 0d38b4e3d9
commit f8f7fa75e5
4 changed files with 44 additions and 28 deletions

View File

@ -7,15 +7,32 @@
function test()
{
let storage = Cu.import("resource://gre/modules/ConsoleAPIStorage.jsm", {}).ConsoleAPIStorage;
storage.clearEvents();
let console = Cu.import("resource://gre/modules/devtools/Console.jsm", {}).console;
console.log("bug861338-log-cached");
HUDConsoleUI.toggleBrowserConsole().then(consoleOpened);
let hud = null;
function consoleOpened(aHud)
{
hud = aHud;
hud.jsterm.clearOutput(true);
waitForMessages({
webconsole: hud,
messages: [{
name: "cached console.log message",
text: "bug861338-log-cached",
category: CATEGORY_WEBDEV,
severity: SEVERITY_LOG,
}],
}).then(onCachedMessage);
}
let console = Cu.import("resource://gre/modules/devtools/Console.jsm", {}).console;
function onCachedMessage()
{
hud.jsterm.clearOutput(true);
console.time("foobarTimer");
let foobar = { bug851231prop: "bug851231value" };
@ -69,7 +86,7 @@ function test()
name: "console.trace output",
consoleTrace: {
file: "browser_console_consolejsm_output.js",
fn: "consoleOpened",
fn: "onCachedMessage",
},
},
{

View File

@ -72,9 +72,6 @@ function testCSSPruning(hudRef) {
{
let msg = hudRef.outputNode.querySelector(".webconsole-msg-cssparser " +
".webconsole-msg-repeat");
if (msg) {
console.debug(msg, msg.getAttribute("value"));
}
return msg && msg.getAttribute("value") == 5;
},
successFn: function()

View File

@ -2,6 +2,8 @@
* 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";
let Cu = Components.utils;
let Ci = Components.interfaces;
let Cc = Components.classes;
@ -13,7 +15,7 @@ const STORAGE_MAX_EVENTS = 200;
this.EXPORTED_SYMBOLS = ["ConsoleAPIStorage"];
var _consoleStorage = {};
var _consoleStorage = new Map();
/**
* The ConsoleAPIStorage is meant to cache window.console API calls for later
@ -78,17 +80,15 @@ this.ConsoleAPIStorage = {
getEvents: function CS_getEvents(aId)
{
if (aId != null) {
return (_consoleStorage[aId] || []).slice(0);
return (_consoleStorage.get(aId) || []).slice(0);
}
let ids = [];
let result = [];
for each (let events in _consoleStorage) {
ids.push(events);
for (let [id, events] of _consoleStorage) {
result.push.apply(result, events);
}
let result = [].concat.apply([], ids);
return result.sort(function(a, b) {
return a.timeStamp - b.timeStamp;
});
@ -97,22 +97,19 @@ this.ConsoleAPIStorage = {
/**
* Record an event associated with the given window ID.
*
* @param string aWindowID
* The ID of the inner window for which the event occurred.
* @param string aId
* The ID of the inner window for which the event occurred or "jsm" for
* messages logged from JavaScript modules..
* @param object aEvent
* A JavaScript object you want to store.
*/
recordEvent: function CS_recordEvent(aWindowID, aEvent)
recordEvent: function CS_recordEvent(aId, aEvent)
{
let ID = parseInt(aWindowID);
if (isNaN(ID)) {
throw new Error("Invalid window ID argument");
if (!_consoleStorage.has(aId)) {
_consoleStorage.set(aId, []);
}
if (!_consoleStorage[ID]) {
_consoleStorage[ID] = [];
}
let storage = _consoleStorage[ID];
let storage = _consoleStorage.get(aId);
storage.push(aEvent);
// truncate
@ -120,7 +117,7 @@ this.ConsoleAPIStorage = {
storage.shift();
}
Services.obs.notifyObservers(aEvent, "console-storage-cache-event", ID);
Services.obs.notifyObservers(aEvent, "console-storage-cache-event", aId);
},
/**
@ -134,10 +131,10 @@ this.ConsoleAPIStorage = {
clearEvents: function CS_clearEvents(aId)
{
if (aId != null) {
delete _consoleStorage[aId];
_consoleStorage.delete(aId);
}
else {
_consoleStorage = {};
_consoleStorage.clear();
Services.obs.notifyObservers(null, "console-storage-reset", null);
}
},

View File

@ -22,7 +22,10 @@
this.EXPORTED_SYMBOLS = [ "console" ];
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/ConsoleAPIStorage.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
@ -453,7 +456,8 @@ function createMultiLineDumper(aLevel) {
function sendConsoleAPIMessage(aLevel, aFrame, aArgs, aOptions = {})
{
let consoleEvent = {
ID: aFrame.filename,
ID: "jsm",
innerID: aFrame.filename,
level: aLevel,
filename: aFrame.filename,
lineNumber: aFrame.lineNumber,
@ -487,6 +491,7 @@ function sendConsoleAPIMessage(aLevel, aFrame, aArgs, aOptions = {})
}
Services.obs.notifyObservers(consoleEvent, "console-api-log-event", null);
ConsoleAPIStorage.recordEvent("jsm", consoleEvent);
}
/**