commit cb2357bac13971269b17b679f210fad9061d7629
parent 2aeb9fe5a0e8a22608123381aee8c7be798ad17c
Author: Alexandre Poirot <poirot.alex@gmail.com>
Date: Mon, 6 Oct 2025 12:40:32 +0000
Bug 1917012 - [devtools] Use distinct method to retrieve source text content from a location or a source object. r=devtools-reviewers,bomsy
This prevents have to create a transient location object when we only have a source object.
Differential Revision: https://phabricator.services.mozilla.com/D264239
Diffstat:
7 files changed, 41 insertions(+), 31 deletions(-)
diff --git a/devtools/client/debugger/src/actions/ast/setInScopeLines.js b/devtools/client/debugger/src/actions/ast/setInScopeLines.js
@@ -4,7 +4,7 @@
import {
hasInScopeLines,
- getSourceTextContent,
+ getSourceTextContentForLocation,
getVisibleSelectedFrame,
} from "../../selectors/index";
@@ -26,7 +26,10 @@ export function setInScopeLines(editor) {
}
const { location } = visibleFrame;
- const sourceTextContent = getSourceTextContent(getState(), location);
+ const sourceTextContent = getSourceTextContentForLocation(
+ getState(),
+ location
+ );
// Ignore if in scope lines have already be computed, or if the selected location
// doesn't have its content already fully fetched.
diff --git a/devtools/client/debugger/src/actions/sources/loadSourceText.js b/devtools/client/debugger/src/actions/sources/loadSourceText.js
@@ -4,7 +4,7 @@
import { PROMISE } from "../utils/middleware/promise";
import {
- getSourceTextContent,
+ getSourceTextContentForSource,
getSettledSourceTextContent,
getSourcesEpoch,
getBreakpointsForSource,
@@ -173,12 +173,10 @@ export const loadGeneratedSourceText = memoizeableAction(
return null;
}
- const sourceTextContent = getSourceTextContent(
+ const sourceTextContent = getSourceTextContentForSource(
getState(),
- createLocation({
- source: sourceActor.sourceObject,
- sourceActor,
- })
+ sourceActor.sourceObject,
+ sourceActor
);
if (!sourceTextContent || sourceTextContent.state === "pending") {
@@ -212,11 +210,9 @@ export const loadOriginalSourceText = memoizeableAction(
return null;
}
- const sourceTextContent = getSourceTextContent(
+ const sourceTextContent = getSourceTextContentForSource(
getState(),
- createLocation({
- source,
- })
+ source
);
if (!sourceTextContent || sourceTextContent.state === "pending") {
return sourceTextContent;
diff --git a/devtools/client/debugger/src/actions/sources/select.js b/devtools/client/debugger/src/actions/sources/select.js
@@ -28,7 +28,7 @@ import {
getSelectedLocation,
getShouldSelectOriginalLocation,
canPrettyPrintSource,
- getSourceTextContent,
+ getSourceTextContentForLocation,
tabExists,
hasSource,
hasSourceActor,
@@ -312,7 +312,10 @@ export function selectLocation(
return;
}
- const sourceTextContent = getSourceTextContent(getState(), location);
+ const sourceTextContent = getSourceTextContentForLocation(
+ getState(),
+ location
+ );
if (
keepContext &&
diff --git a/devtools/client/debugger/src/actions/ui.js b/devtools/client/debugger/src/actions/ui.js
@@ -7,7 +7,7 @@ import {
getPaneCollapse,
getQuickOpenEnabled,
getSource,
- getSourceTextContent,
+ getSourceTextContentForLocation,
getIgnoreListSourceUrls,
getSourceByURL,
getBreakpointsForSource,
@@ -215,7 +215,7 @@ export function setSearchOptions(searchKey, searchOptions) {
export function copyToClipboard(location) {
return ({ getState }) => {
- const content = getSourceTextContent(getState(), location);
+ const content = getSourceTextContentForLocation(getState(), location);
if (content && isFulfilled(content) && content.value.type === "text") {
copyToTheClipboard(content.value.value);
}
diff --git a/devtools/client/debugger/src/components/Editor/DebugLine.js b/devtools/client/debugger/src/components/Editor/DebugLine.js
@@ -10,7 +10,7 @@ import { connect } from "devtools/client/shared/vendor/react-redux";
import {
getVisibleSelectedFrame,
getPauseReason,
- getSourceTextContent,
+ getSourceTextContentForLocation,
getCurrentThread,
getViewport,
getSelectedTraceLocation,
@@ -169,7 +169,7 @@ const mapStateToProps = state => {
return {};
}
- const sourceTextContent = getSourceTextContent(state, location);
+ const sourceTextContent = getSourceTextContentForLocation(state, location);
if (!isDocumentReady(location, sourceTextContent)) {
return {};
}
diff --git a/devtools/client/debugger/src/selectors/sources-content.js b/devtools/client/debugger/src/selectors/sources-content.js
@@ -9,19 +9,27 @@ import {
getFirstSourceActorForGeneratedSource,
} from "../selectors/sources";
-export function getSourceTextContent(state, location) {
- if (location.source.isOriginal) {
+export function getSourceTextContentForLocation(state, location) {
+ return getSourceTextContentForSource(
+ state,
+ location.source,
+ location.sourceActor
+ );
+}
+
+export function getSourceTextContentForSource(
+ state,
+ source,
+ sourceActor = null
+) {
+ if (source.isOriginal) {
return state.sourcesContent.mutableOriginalSourceTextContentMapBySourceId.get(
- location.source.id
+ source.id
);
}
- let { sourceActor } = location;
if (!sourceActor) {
- sourceActor = getFirstSourceActorForGeneratedSource(
- state,
- location.source.id
- );
+ sourceActor = getFirstSourceActorForGeneratedSource(state, source.id);
}
return state.sourcesContent.mutableGeneratedSourceTextContentMapBySourceActorId.get(
sourceActor.id
@@ -29,7 +37,7 @@ export function getSourceTextContent(state, location) {
}
export function getSettledSourceTextContent(state, location) {
- const content = getSourceTextContent(state, location);
+ const content = getSourceTextContentForLocation(state, location);
return asSettled(content);
}
@@ -40,7 +48,7 @@ export function getSelectedSourceTextContent(state) {
return null;
}
- return getSourceTextContent(state, location);
+ return getSourceTextContentForLocation(state, location);
}
export function getSourcesEpoch(state) {
diff --git a/devtools/client/debugger/src/selectors/sources.js b/devtools/client/debugger/src/selectors/sources.js
@@ -18,7 +18,7 @@ import {
getBreakableLinesForSourceActors,
isSourceActorWithSourceMap,
} from "./source-actors";
-import { getSourceTextContent } from "./sources-content";
+import { getSourceTextContentForLocation } from "./sources-content";
export function hasSource(state, id) {
return state.sources.mutableSources.has(id);
@@ -252,7 +252,7 @@ export function canPrettyPrintSource(state, location) {
return false;
}
- const content = getSourceTextContent(state, location);
+ const content = getSourceTextContentForLocation(state, location);
const sourceContent = content && isFulfilled(content) ? content.value : null;
if (
@@ -283,7 +283,7 @@ export function getPrettyPrintMessage(state, location) {
return L10N.getStr("sourceFooter.prettyPrint.hasSourceMapMessage");
}
- const content = getSourceTextContent(state, location);
+ const content = getSourceTextContentForLocation(state, location);
const sourceContent = content && isFulfilled(content) ? content.value : null;
if (!sourceContent) {