From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../client/debugger/src/reducers/source-actors.js | 109 +++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 devtools/client/debugger/src/reducers/source-actors.js (limited to 'devtools/client/debugger/src/reducers/source-actors.js') diff --git a/devtools/client/debugger/src/reducers/source-actors.js b/devtools/client/debugger/src/reducers/source-actors.js new file mode 100644 index 0000000000..fd99955742 --- /dev/null +++ b/devtools/client/debugger/src/reducers/source-actors.js @@ -0,0 +1,109 @@ +/* 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 . */ + +/** + * This reducer stores the list of all source actors as well their breakable lines. + * + * There is a one-one relationship with Source Actors from the server codebase, + * as well as SOURCE Resources distributed by the ResourceCommand API. + * + */ +function initialSourceActorsState() { + return { + // Map(Source Actor ID: string => SourceActor: object) + // See create.js: `createSourceActor` for the shape of the source actor objects. + mutableSourceActors: new Map(), + + // Map(Source Actor ID: string => Breakable lines: Array) + // The array is the list of all lines where breakpoints can be set + mutableBreakableLines: new Map(), + + // Set(Source Actor ID: string) + // List of all IDs of source actor which have a valid related source map / original source. + // The SourceActor object may have a sourceMapURL attribute set, + // but this may be invalid. The source map URL or source map file content may be invalid. + // In these scenarios we will remove the source actor from this set. + mutableSourceActorsWithSourceMap: new Set(), + + // Map(Source Actor ID: string => string) + // Store the exception message when processing the sourceMapURL field of the source actor. + mutableSourceMapErrors: new Map(), + + // Map(Source Actor ID: string => string) + // When a bundle has a functional sourcemap, reports the resolved source map URL. + mutableResolvedSourceMapURL: new Map(), + }; +} + +export const initial = initialSourceActorsState(); + +export default function update(state = initialSourceActorsState(), action) { + switch (action.type) { + case "INSERT_SOURCE_ACTORS": { + for (const sourceActor of action.sourceActors) { + state.mutableSourceActors.set(sourceActor.id, sourceActor); + + // If the sourceMapURL attribute is set, consider that it is valid. + // But this may be revised later and removed from this Set. + if (sourceActor.sourceMapURL) { + state.mutableSourceActorsWithSourceMap.add(sourceActor.id); + } + } + return { + ...state, + }; + } + + case "REMOVE_THREAD": { + for (const sourceActor of state.mutableSourceActors.values()) { + if (sourceActor.thread == action.threadActorID) { + state.mutableSourceActors.delete(sourceActor.id); + state.mutableBreakableLines.delete(sourceActor.id); + state.mutableSourceActorsWithSourceMap.delete(sourceActor.id); + } + } + return { + ...state, + }; + } + + case "SET_SOURCE_ACTOR_BREAKABLE_LINES": + state.mutableBreakableLines.set( + action.sourceActor.id, + action.breakableLines + ); + + return { + ...state, + }; + + case "CLEAR_SOURCE_ACTOR_MAP_URL": + if ( + state.mutableSourceActorsWithSourceMap.delete(action.sourceActor.id) + ) { + return { + ...state, + }; + } + return state; + + case "SOURCE_MAP_ERROR": { + state.mutableSourceMapErrors.set( + action.sourceActor.id, + action.errorMessage + ); + return { ...state }; + } + + case "RESOLVED_SOURCEMAP_URL": { + state.mutableResolvedSourceMapURL.set( + action.sourceActor.id, + action.resolvedSourceMapURL + ); + return { ...state }; + } + } + + return state; +} -- cgit v1.2.3