1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
/* 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/. */
import { ContentProcessDomain } from "chrome://remote/content/cdp/domains/ContentProcessDomain.sys.mjs";
const CONSOLE_MESSAGE_LEVEL_MAP = {
[Ci.nsIConsoleMessage.debug]: "verbose",
[Ci.nsIConsoleMessage.info]: "info",
[Ci.nsIConsoleMessage.warn]: "warning",
[Ci.nsIConsoleMessage.error]: "error",
};
export class Log extends ContentProcessDomain {
constructor(session) {
super(session);
this.enabled = false;
}
destructor() {
this.disable();
super.destructor();
}
enable() {
if (!this.enabled) {
this.enabled = true;
Services.console.registerListener(this);
}
}
disable() {
if (this.enabled) {
this.enabled = false;
Services.console.unregisterListener(this);
}
}
_getLogCategory(category) {
if (category.startsWith("CORS")) {
return "network";
} else if (category.includes("javascript")) {
return "javascript";
}
return "other";
}
// nsIObserver
/**
* Takes all script error messages that do not have an exception attached,
* and emits a "Log.entryAdded" event.
*
* @param {nsIConsoleMessage} message
* Message originating from the nsIConsoleService.
*/
observe(message) {
if (message instanceof Ci.nsIScriptError && !message.hasException) {
let url;
if (message.sourceName !== "debugger eval code") {
url = message.sourceName;
}
const entry = {
source: this._getLogCategory(message.category),
level: CONSOLE_MESSAGE_LEVEL_MAP[message.logLevel],
text: message.errorMessage,
timestamp: message.timeStamp,
url,
lineNumber: message.lineNumber,
};
this.emit("Log.entryAdded", { entry });
}
}
// XPCOM
get QueryInterface() {
return ChromeUtils.generateQI(["nsIConsoleListener"]);
}
}
|