diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /devtools/shared/commands/tracer/tracer-command.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream/124.0.1.tar.xz firefox-upstream/124.0.1.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/shared/commands/tracer/tracer-command.js')
-rw-r--r-- | devtools/shared/commands/tracer/tracer-command.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/devtools/shared/commands/tracer/tracer-command.js b/devtools/shared/commands/tracer/tracer-command.js new file mode 100644 index 0000000000..f512c15d9e --- /dev/null +++ b/devtools/shared/commands/tracer/tracer-command.js @@ -0,0 +1,85 @@ +/* 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.#targetCommand = commands.targetCommand; + this.#targetConfigurationCommand = commands.targetConfigurationCommand; + this.#resourceCommand = commands.resourceCommand; + } + + #resourceCommand; + #targetCommand; + #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; |