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 --- .../debugger/src/reducers/source-blackbox.js | 145 +++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 devtools/client/debugger/src/reducers/source-blackbox.js (limited to 'devtools/client/debugger/src/reducers/source-blackbox.js') diff --git a/devtools/client/debugger/src/reducers/source-blackbox.js b/devtools/client/debugger/src/reducers/source-blackbox.js new file mode 100644 index 0000000000..3ccca49790 --- /dev/null +++ b/devtools/client/debugger/src/reducers/source-blackbox.js @@ -0,0 +1,145 @@ +/* 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 . */ + +/** + * Reducer containing all data about sources being "black boxed". + * + * i.e. sources which should be ignored by the debugger. + * Typically, these sources should be hidden from paused stack frames, + * and any debugger statement or breakpoint should be ignored. + */ + +export function initialSourceBlackBoxState(state) { + return { + /* FORMAT: + * blackboxedRanges: { + * [source url]: [range, range, ...], -- source lines blackboxed + * [source url]: [], -- whole source blackboxed + * ... + * } + */ + blackboxedRanges: state?.blackboxedRanges ?? {}, + + blackboxedSet: state?.blackboxedRanges + ? new Set(Object.keys(state.blackboxedRanges)) + : new Set(), + + sourceMapIgnoreListUrls: [], + }; +} + +function update(state = initialSourceBlackBoxState(), action) { + switch (action.type) { + case "BLACKBOX_WHOLE_SOURCES": { + const { sources } = action; + + const currentBlackboxedRanges = { ...state.blackboxedRanges }; + const currentBlackboxedSet = new Set(state.blackboxedSet); + + for (const source of sources) { + currentBlackboxedRanges[source.url] = []; + currentBlackboxedSet.add(source.url); + } + + return { + ...state, + blackboxedRanges: currentBlackboxedRanges, + blackboxedSet: currentBlackboxedSet, + }; + } + + case "BLACKBOX_SOURCE_RANGES": { + const { source, ranges } = action; + + const currentBlackboxedRanges = { ...state.blackboxedRanges }; + const currentBlackboxedSet = new Set(state.blackboxedSet); + + if (!currentBlackboxedRanges[source.url]) { + currentBlackboxedRanges[source.url] = []; + currentBlackboxedSet.add(source.url); + } else { + currentBlackboxedRanges[source.url] = [ + ...state.blackboxedRanges[source.url], + ]; + } + + // Add new blackboxed lines in acsending order + for (const newRange of ranges) { + const index = currentBlackboxedRanges[source.url].findIndex( + range => + range.end.line <= newRange.start.line && + range.end.column <= newRange.start.column + ); + currentBlackboxedRanges[source.url].splice(index + 1, 0, newRange); + } + + return { + ...state, + blackboxedRanges: currentBlackboxedRanges, + blackboxedSet: currentBlackboxedSet, + }; + } + + case "UNBLACKBOX_WHOLE_SOURCES": { + const { sources } = action; + + const currentBlackboxedRanges = { ...state.blackboxedRanges }; + const currentBlackboxedSet = new Set(state.blackboxedSet); + + for (const source of sources) { + delete currentBlackboxedRanges[source.url]; + currentBlackboxedSet.delete(source.url); + } + + return { + ...state, + blackboxedRanges: currentBlackboxedRanges, + blackboxedSet: currentBlackboxedSet, + }; + } + + case "UNBLACKBOX_SOURCE_RANGES": { + const { source, ranges } = action; + + const currentBlackboxedRanges = { + ...state.blackboxedRanges, + [source.url]: [...state.blackboxedRanges[source.url]], + }; + + for (const newRange of ranges) { + const index = currentBlackboxedRanges[source.url].findIndex( + range => + range.start.line === newRange.start.line && + range.end.line === newRange.end.line + ); + + if (index !== -1) { + currentBlackboxedRanges[source.url].splice(index, 1); + } + } + + return { + ...state, + blackboxedRanges: currentBlackboxedRanges, + }; + } + + case "ADD_SOURCEMAP_IGNORE_LIST_SOURCES": { + return { + ...state, + sourceMapIgnoreListUrls: [ + ...state.sourceMapIgnoreListUrls, + ...action.ignoreListUrls, + ], + }; + } + + case "NAVIGATE": + return initialSourceBlackBoxState(state); + } + + return state; +} + +export default update; -- cgit v1.2.3