Bug 659625 - part1: implement Console::clear in dom/base/Console.cpp;r=baku

Remove the noop implementation of console.clear and actually clear the
console storage.

mozReview-Commit-ID: B9NGhRARKoR
MozReview-Commit-ID: 2sMEGB2BsAs

--HG--
extra : rebase_source : a889ffce5ef82224feb691b499f790da9ae6f34f
extra : source : 89cfa8c724e1fcb0909e1414b6051dbd62b40105
This commit is contained in:
Julian Descottes 2016-04-13 16:33:43 +02:00
parent 2f85846508
commit 0fac5939fc
6 changed files with 106 additions and 3 deletions

View File

@ -1042,6 +1042,7 @@ METHOD(Error, "error")
METHOD(Exception, "exception")
METHOD(Debug, "debug")
METHOD(Table, "table")
METHOD(Clear, "clear")
void
Console::Trace(JSContext* aCx)
@ -1537,6 +1538,11 @@ Console::ProcessCallData(JSContext* aCx, ConsoleCallData* aData,
innerID.AppendInt(aData->mInnerIDNumber);
}
if (aData->mMethodName == MethodClear) {
nsresult rv = mStorage->ClearEvents(innerID);
NS_WARN_IF(NS_FAILED(rv));
}
if (NS_FAILED(mStorage->RecordEvent(innerID, outerID, eventValue))) {
NS_WARNING("Failed to record a console event.");
}

View File

@ -115,6 +115,9 @@ public:
void
Count(JSContext* aCx, const Sequence<JS::Value>& aData);
void
Clear(JSContext* aCx, const Sequence<JS::Value>& aData);
void
NoopMethod();
@ -156,7 +159,8 @@ private:
MethodTimeEnd,
MethodTimeStamp,
MethodAssert,
MethodCount
MethodCount,
MethodClear
};
void

View File

@ -649,6 +649,7 @@ skip-if = toolkit == 'android' #bug 687032
[test_bug650776.html]
[test_bug650784.html]
[test_bug656283.html]
[test_bug659625.html]
[test_bug664916.html]
[test_bug666604.html]
skip-if = buildapp == 'b2g' # b2g(dom.disable_open_during_load not implemented in b2g) b2g-debug(dom.disable_open_during_load not implemented in b2g) b2g-desktop(dom.disable_open_during_load not implemented in b2g)

View File

@ -0,0 +1,92 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=659625
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 659625</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=659625">Mozilla Bug 659625</a>
<script type="application/javascript">
const { Cc, Ci } = SpecialPowers;
let consoleStorage = Cc["@mozilla.org/consoleAPI-storage;1"];
let storage = consoleStorage.getService(Ci.nsIConsoleAPIStorage);
let clearAndCheckStorage = () => {
console.clear();
ok(storage.getEvents().length === 1,
"Only one event remains in consoleAPIStorage");
ok(storage.getEvents()[0].level === "clear",
"Remaining event has level 'clear'");
}
storage.clearEvents();
ok(storage.getEvents().length === 0,
"Console is empty when test is starting");
clearAndCheckStorage();
console.log("log");
console.debug("debug");
console.warn("warn");
console.error("error");
console.exception("exception");
ok(storage.getEvents().length === 6,
"5 new console events have been registered for logging variants");
clearAndCheckStorage();
console.trace();
ok(storage.getEvents().length === 2,
"1 new console event registered for trace");
clearAndCheckStorage();
console.dir({});
ok(storage.getEvents().length === 2,
"1 new console event registered for dir");
clearAndCheckStorage();
console.count("count-label");
console.count("count-label");
ok(storage.getEvents().length === 3,
"2 new console events registered for 2 count calls");
clearAndCheckStorage();
console.group("group-label")
console.log("group-log");
ok(storage.getEvents().length === 3,
"2 new console events registered for group + log");
clearAndCheckStorage();
console.groupCollapsed("group-collapsed")
console.log("group-collapsed-log");
ok(storage.getEvents().length === 3,
"2 new console events registered for groupCollapsed + log");
clearAndCheckStorage();
console.group("closed-group-label")
console.log("group-log");
console.groupEnd()
ok(storage.getEvents().length === 4,
"3 new console events registered for group/groupEnd");
clearAndCheckStorage();
console.time("time-label");
console.timeEnd();
ok(storage.getEvents().length === 3,
"2 new console events registered for time/timeEnd");
clearAndCheckStorage();
console.timeStamp("timestamp-label");
ok(storage.getEvents().length === 2,
"1 new console event registered for timeStamp");
clearAndCheckStorage();
// Check that console.clear() clears previous clear messages
clearAndCheckStorage();
</script>
</body>
</html>

View File

@ -23,6 +23,7 @@ interface Console {
void time(optional any time);
void timeEnd(optional any time);
void timeStamp(optional any data);
void clear(any... data);
void profile(any... data);
void profileEnd(any... data);
@ -32,8 +33,6 @@ interface Console {
// No-op methods for compatibility with other browsers.
[BinaryName="noopMethod"]
void clear();
[BinaryName="noopMethod"]
void markTimeline();
[BinaryName="noopMethod"]
void timeline();

View File

@ -283,6 +283,7 @@ const LOG_LEVELS = {
"debug": 2,
"log": 3,
"info": 3,
"clear": 3,
"trace": 3,
"timeEnd": 3,
"time": 3,