mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 585237 - Limit the number of lines displayed in the Web Console. r=sdwilsh a=blocking2.0+
This commit is contained in:
parent
1c699544d4
commit
f78f8c9b7e
@ -111,6 +111,11 @@ const NEW_GROUP_DELAY = 5000;
|
||||
// search.
|
||||
const SEARCH_DELAY = 200;
|
||||
|
||||
// The number of lines that are displayed in the console output by default.
|
||||
// The user can change this number by adjusting the hidden
|
||||
// "devtools.hud.loglimit" preference.
|
||||
const DEFAULT_LOG_LIMIT = 200;
|
||||
|
||||
const ERRORS = { LOG_MESSAGE_MISSING_ARGS:
|
||||
"Missing arguments: aMessage, aConsoleNode and aMessageNode are required.",
|
||||
CANNOT_GET_HUD: "Cannot getHeads Up Display with provided ID",
|
||||
@ -1094,6 +1099,48 @@ NetworkPanel.prototype =
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//// Private utility functions for the HUD service
|
||||
|
||||
/**
|
||||
* Destroys lines of output if more lines than the allowed log limit are
|
||||
* present.
|
||||
*
|
||||
* @param nsIDOMNode aConsoleNode
|
||||
* The DOM node that holds the output of the console.
|
||||
* @returns void
|
||||
*/
|
||||
function pruneConsoleOutputIfNecessary(aConsoleNode)
|
||||
{
|
||||
let logLimit;
|
||||
try {
|
||||
let prefBranch = Services.prefs.getBranch("devtools.hud.");
|
||||
logLimit = prefBranch.getIntPref("loglimit");
|
||||
} catch (e) {
|
||||
logLimit = DEFAULT_LOG_LIMIT;
|
||||
}
|
||||
|
||||
let messageNodes = aConsoleNode.querySelectorAll(".hud-msg-node");
|
||||
for (let i = 0; i < messageNodes.length - logLimit; i++) {
|
||||
let messageNode = messageNodes[i];
|
||||
let groupNode = messageNode.parentNode;
|
||||
if (!groupNode.classList.contains("hud-group")) {
|
||||
throw new Error("pruneConsoleOutputIfNecessary: message node not in a " +
|
||||
"HUD group");
|
||||
}
|
||||
|
||||
groupNode.removeChild(messageNode);
|
||||
|
||||
// If there are no more children, then remove the group itself.
|
||||
if (!groupNode.querySelector(".hud-msg-node")) {
|
||||
groupNode.parentNode.removeChild(groupNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//// The HUD service
|
||||
|
||||
function HUD_SERVICE()
|
||||
{
|
||||
// TODO: provide mixins for FENNEC: bug 568621
|
||||
@ -1861,6 +1908,8 @@ HUD_SERVICE.prototype =
|
||||
|
||||
// store this message in the storage module:
|
||||
this.storage.recordEntry(aMessage.hudId, aMessage);
|
||||
|
||||
pruneConsoleOutputIfNecessary(aConsoleNode);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -3915,6 +3964,7 @@ JSTerm.prototype = {
|
||||
|
||||
lastGroupNode.appendChild(node);
|
||||
ConsoleUtils.scrollToVisible(node);
|
||||
pruneConsoleOutputIfNecessary(this.outputNode);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -3954,6 +4004,7 @@ JSTerm.prototype = {
|
||||
|
||||
lastGroupNode.appendChild(node);
|
||||
ConsoleUtils.scrollToVisible(node);
|
||||
pruneConsoleOutputIfNecessary(this.outputNode);
|
||||
},
|
||||
|
||||
clearOutput: function JST_clearOutput()
|
||||
|
@ -45,6 +45,7 @@ include $(topsrcdir)/config/rules.mk
|
||||
|
||||
_BROWSER_TEST_FILES = \
|
||||
browser_HUDServiceTestsAll.js \
|
||||
browser_webconsole_bug_585237_line_limit.js \
|
||||
browser_webconsole_bug_588967_input_expansion.js \
|
||||
browser_webconsole_netlogging.js \
|
||||
browser_webconsole_bug_581231_close_button.js \
|
||||
|
@ -0,0 +1,87 @@
|
||||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*
|
||||
* Contributor(s):
|
||||
* Patrick Walton <pcwalton@mozilla.com>
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// Tests that the Web Console limits the number of lines displayed according to
|
||||
// the user's preferences.
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/HUDService.jsm");
|
||||
|
||||
const TEST_URI = "http://example.com/browser/toolkit/components/console/hudservice/tests/browser/test-console.html";
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
content.location.href = TEST_URI;
|
||||
waitForFocus(onFocus);
|
||||
}
|
||||
|
||||
function onFocus() {
|
||||
gBrowser.selectedBrowser.addEventListener("DOMContentLoaded", testLineLimit,
|
||||
false);
|
||||
}
|
||||
|
||||
function testLineLimit() {
|
||||
gBrowser.selectedBrowser.removeEventListener("DOMContentLoaded",
|
||||
testLineLimit, false);
|
||||
|
||||
HUDService.activateHUDForContext(gBrowser.selectedTab);
|
||||
|
||||
let hudId = HUDService.displaysIndex()[0];
|
||||
let console = gBrowser.selectedBrowser.contentWindow.wrappedJSObject.console;
|
||||
let hudBox = HUDService.getHeadsUpDisplay(hudId);
|
||||
|
||||
let prefBranch = Services.prefs.getBranch("devtools.hud.");
|
||||
prefBranch.setIntPref("loglimit", 20);
|
||||
|
||||
for (let i = 0; i < 20; i++) {
|
||||
console.log("foo");
|
||||
}
|
||||
is(countMessageNodes(), 20, "there are 20 message nodes in the output " +
|
||||
"when the log limit is set to 20");
|
||||
isnot(countGroupNodes(), 0, "there is at least one group node in the " +
|
||||
"output when the log limit is set to 20");
|
||||
|
||||
console.log("bar");
|
||||
is(countMessageNodes(), 20, "there are still 20 message nodes in the " +
|
||||
"output when adding one more");
|
||||
|
||||
prefBranch.setIntPref("loglimit", 30);
|
||||
for (let i = 0; i < 20; i++) {
|
||||
console.log("boo");
|
||||
}
|
||||
is(countMessageNodes(), 30, "there are 30 message nodes in the output " +
|
||||
"when the log limit is set to 30");
|
||||
|
||||
prefBranch.setIntPref("loglimit", 0);
|
||||
console.log("baz");
|
||||
is(countMessageNodes(), 0, "there are no message nodes in the output when " +
|
||||
"the log limit is set to zero");
|
||||
is(countGroupNodes(), 0, "there are no group nodes in the output when the " +
|
||||
"log limit is set to zero");
|
||||
|
||||
prefBranch.clearUserPref("loglimit");
|
||||
|
||||
HUDService.deactivateHUDForContext(gBrowser.selectedTab);
|
||||
finish();
|
||||
}
|
||||
|
||||
function countMessageNodes() {
|
||||
let hudId = HUDService.displaysIndex()[0];
|
||||
let hudBox = HUDService.getHeadsUpDisplay(hudId);
|
||||
return hudBox.querySelectorAll(".hud-msg-node").length;
|
||||
}
|
||||
|
||||
function countGroupNodes() {
|
||||
let hudId = HUDService.displaysIndex()[0];
|
||||
let hudBox = HUDService.getHeadsUpDisplay(hudId);
|
||||
return hudBox.querySelectorAll(".hud-group").length;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user