forked from mirrors/gecko-dev
83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
/* 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;
|