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
|
/* 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/. */
"use strict";
class TracerCommand {
constructor({ commands }) {
this.#targetConfigurationCommand = commands.targetConfigurationCommand;
this.#resourceCommand = commands.resourceCommand;
}
#resourceCommand;
#targetConfigurationCommand;
#isTracing = false;
async initialize() {
return this.#resourceCommand.watchResources(
[this.#resourceCommand.TYPES.JSTRACER_STATE],
{ onAvailable: this.onResourcesAvailable }
);
}
destroy() {
this.#resourceCommand.unwatchResources(
[this.#resourceCommand.TYPES.JSTRACER_STATE],
{ onAvailable: this.onResourcesAvailable }
);
}
onResourcesAvailable = resources => {
for (const resource of resources) {
if (resource.resourceType != this.#resourceCommand.TYPES.JSTRACER_STATE) {
continue;
}
this.#isTracing = resource.enabled;
}
};
/**
* Get the dictionary passed to the server codebase as a SessionData.
* This contains all settings to fine tune the tracer actual behavior.
*
* @return {JSON}
* Configuration object.
*/
#getTracingOptions() {
return {
logMethod: Services.prefs.getStringPref(
"devtools.debugger.javascript-tracing-log-method",
""
),
traceValues: Services.prefs.getBoolPref(
"devtools.debugger.javascript-tracing-values",
false
),
traceOnNextInteraction: Services.prefs.getBoolPref(
"devtools.debugger.javascript-tracing-on-next-interaction",
false
),
traceOnNextLoad: Services.prefs.getBoolPref(
"devtools.debugger.javascript-tracing-on-next-load",
false
),
traceFunctionReturn: Services.prefs.getBoolPref(
"devtools.debugger.javascript-tracing-function-return",
false
),
};
}
/**
* Toggle JavaScript tracing for all targets.
*/
async toggle() {
this.#isTracing = !this.#isTracing;
await this.#targetConfigurationCommand.updateConfiguration({
tracerOptions: this.#isTracing ? this.#getTracingOptions() : undefined,
});
}
}
module.exports = TracerCommand;
|