Backed out changeset 1416218ae397 (bug 1580334) for Devtools failure on Debugger. CLOSED TREE

--HG--
extra : amend_source : 5480f365a0c5ea13f3be30ced032db85ade8418d
This commit is contained in:
Dorel Luca 2019-09-21 05:50:47 +03:00
Родитель 5913925d4e
Коммит a740ed290d
9 изменённых файлов: 44 добавлений и 142 удалений

Просмотреть файл

@ -168,14 +168,6 @@ DebuggerPanel.prototype = {
return this._actions.selectSourceURL(cx, url, { line, column });
},
previewPausedLocation(location) {
return this._actions.previewPausedLocation(location);
},
clearPreviewPausedLocation() {
return this._actions.clearPreviewPausedLocation();
},
async selectSource(sourceId, line, column) {
const cx = this._selectors.getContext(this._getState());
const location = { sourceId, line, column };

Просмотреть файл

@ -30,7 +30,3 @@ export { toggleSkipPausing, setSkipPausing } from "./skipPausing";
export { toggleMapScopes } from "./mapScopes";
export { setExpandedScope } from "./expandScopes";
export { generateInlinePreview } from "./inlinePreview";
export {
previewPausedLocation,
clearPreviewPausedLocation,
} from "./previewPausedLocation";

Просмотреть файл

@ -19,7 +19,6 @@ CompiledModules(
'mapScopes.js',
'paused.js',
'pauseOnExceptions.js',
'previewPausedLocation.js',
'resumed.js',
'selectFrame.js',
'skipPausing.js',

Просмотреть файл

@ -1,39 +0,0 @@
/* 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/>. */
// @flow
import { selectLocation } from "../sources";
import { getContext, getSourceByURL } from "../../selectors";
import type { ThunkArgs } from "../types";
type Location = {
sourceUrl: string,
column: number,
line: number,
};
export function previewPausedLocation(location: Location) {
return ({ dispatch, getState }: ThunkArgs) => {
const cx = getContext(getState());
const source = getSourceByURL(getState(), location.sourceUrl);
if (!source) {
return;
}
const sourceLocation = { ...location, sourceId: source.id };
dispatch(selectLocation(cx, sourceLocation));
dispatch({
type: "PREVIEW_PAUSED_LOCATION",
location: sourceLocation,
});
};
}
export function clearPreviewPausedLocation() {
return {
type: "CLEAR_PREVIEW_PAUSED_LOCATION",
};
}

Просмотреть файл

@ -5,13 +5,7 @@
// @flow
import typeof SourceMaps from "devtools-source-map";
import type {
ThreadList,
Thread,
Context,
ThreadId,
SourceLocation,
} from "../../types";
import type { ThreadList, Thread, Context, ThreadId } from "../../types";
import type { State } from "../../reducers/types";
import type { MatchedLocations } from "../../reducers/file-search";
import type { TreeNode } from "../../utils/sources-tree/types";
@ -155,13 +149,6 @@ export type DebuggeeAction =
+type: "SELECT_THREAD",
+cx: Context,
+thread: ThreadId,
|}
| {|
+type: "PREVIEW_PAUSED_LOCATION",
+location: SourceLocation,
|}
| {|
+type: "CLEAR_PREVIEW_PAUSED_LOCATION",
|};
export type {

Просмотреть файл

@ -20,13 +20,12 @@ import {
getPauseReason,
getSourceWithContent,
getCurrentThread,
getPausePreviewLocation,
} from "../../selectors";
import type { SourceLocation, Why, SourceWithContent } from "../../types";
import type { Frame, Why, SourceWithContent } from "../../types";
type Props = {
location: SourceLocation,
frame: Frame,
why: Why,
source: ?SourceWithContent,
};
@ -36,40 +35,42 @@ type TextClasses = {
lineClass: string,
};
function isDocumentReady(source: ?SourceWithContent, location) {
return location && source && source.content && hasDocument(location.sourceId);
function isDocumentReady(source: ?SourceWithContent, frame) {
return (
frame && source && source.content && hasDocument(frame.location.sourceId)
);
}
export class DebugLine extends PureComponent<Props> {
debugExpression: null;
componentDidMount() {
const { why, location, source } = this.props;
this.setDebugLine(why, location, source);
const { why, frame, source } = this.props;
this.setDebugLine(why, frame, source);
}
componentWillUnmount() {
const { why, location, source } = this.props;
this.clearDebugLine(why, location, source);
const { why, frame, source } = this.props;
this.clearDebugLine(why, frame, source);
}
componentDidUpdate(prevProps: Props) {
const { why, location, source } = this.props;
const { why, frame, source } = this.props;
startOperation();
this.clearDebugLine(prevProps.why, prevProps.location, prevProps.source);
this.setDebugLine(why, location, source);
this.clearDebugLine(prevProps.why, prevProps.frame, prevProps.source);
this.setDebugLine(why, frame, source);
endOperation();
}
setDebugLine(why: Why, location: SourceLocation, source: ?SourceWithContent) {
if (!isDocumentReady(source, location)) {
setDebugLine(why: Why, frame: Frame, source: ?SourceWithContent) {
if (!isDocumentReady(source, frame)) {
return;
}
const sourceId = location.sourceId;
const sourceId = frame.location.sourceId;
const doc = getDocument(sourceId);
let { line, column } = toEditorPosition(location);
let { line, column } = toEditorPosition(frame.location);
let { markTextClass, lineClass } = this.getTextClasses(why);
doc.addLineClass(line, "line", lineClass);
@ -91,12 +92,8 @@ export class DebugLine extends PureComponent<Props> {
);
}
clearDebugLine(
why: Why,
location: SourceLocation,
source: ?SourceWithContent
) {
if (!isDocumentReady(source, location)) {
clearDebugLine(why: Why, frame: Frame, source: ?SourceWithContent) {
if (!isDocumentReady(source, frame)) {
return;
}
@ -104,15 +101,15 @@ export class DebugLine extends PureComponent<Props> {
this.debugExpression.clear();
}
const sourceId = location.sourceId;
const { line } = toEditorPosition(location);
const sourceId = frame.location.sourceId;
const { line } = toEditorPosition(frame.location);
const doc = getDocument(sourceId);
const { lineClass } = this.getTextClasses(why);
doc.removeLineClass(line, "line", lineClass);
}
getTextClasses(why: Why): TextClasses {
if (why && isException(why)) {
if (isException(why)) {
return {
markTextClass: "debug-expression-error",
lineClass: "new-debug-line-error",
@ -129,11 +126,9 @@ export class DebugLine extends PureComponent<Props> {
const mapStateToProps = state => {
const frame = getVisibleSelectedFrame(state);
const previewLocation = getPausePreviewLocation(state);
const location = previewLocation || (frame && frame.location);
return {
location,
source: location && getSourceWithContent(state, location.sourceId),
frame,
source: frame && getSourceWithContent(state, frame.location.sourceId),
why: getPauseReason(state, getCurrentThread(state)),
};
};

Просмотреть файл

@ -41,11 +41,13 @@ function generateDefaults(editor, overrides) {
};
}
function createLocation(line) {
function createFrame(line) {
return {
sourceId: "foo",
line,
column: 2,
location: {
sourceId: "foo",
line,
column: 2,
},
};
}
@ -78,9 +80,9 @@ describe("DebugLine Component", () => {
},
});
const line = 2;
const location = createLocation(line);
const frame = createFrame(line);
component.setProps({ ...props, location });
component.setProps({ ...props, frame });
expect(doc.removeLineClass.mock.calls).toEqual([]);
expect(doc.addLineClass.mock.calls).toEqual([
@ -105,10 +107,10 @@ describe("DebugLine Component", () => {
const firstLine = 2;
const secondLine = 2;
component.setProps({ ...props, location: createLocation(firstLine) });
component.setProps({ ...props, frame: createFrame(firstLine) });
component.setProps({
...props,
frame: createLocation(secondLine),
frame: createFrame(secondLine),
});
expect(doc.removeLineClass.mock.calls).toEqual([
@ -141,9 +143,9 @@ describe("DebugLine Component", () => {
it("should not set the debug line", () => {
const { component, props, doc } = render({ frame: null });
const line = 2;
const location = createLocation(line);
const frame = createFrame(line);
component.setProps({ ...props, location });
component.setProps({ ...props, frame });
expect(doc.removeLineClass).not.toHaveBeenCalled();
});
});

Просмотреть файл

@ -3,7 +3,7 @@
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
// @flow
/* eslint complexity: ["error", 35]*/
/* eslint complexity: ["error", 30]*/
/**
* Pause reducer
@ -29,7 +29,6 @@ import type {
Context,
ThreadContext,
Previews,
SourceLocation,
} from "../types";
export type Command =
@ -97,7 +96,6 @@ export type PauseState = {
mapScopes: boolean,
shouldPauseOnExceptions: boolean,
shouldPauseOnCaughtExceptions: boolean,
previewLocation: ?SourceLocation,
};
function createPauseState(thread: ThreadId = "UnknownThread") {
@ -111,7 +109,6 @@ function createPauseState(thread: ThreadId = "UnknownThread") {
isPaused: false,
pauseCounter: 0,
},
previewLocation: null,
threads: {},
canRewind: false,
skipPausing: prefs.skipPausing,
@ -194,7 +191,6 @@ function update(
state = {
...state,
previewLocation: null,
threadcx: {
...state.threadcx,
pauseCounter: state.threadcx.pauseCounter + 1,
@ -211,14 +207,6 @@ function update(
});
}
case "PREVIEW_PAUSED_LOCATION": {
return { ...state, previewLocation: action.location };
}
case "CLEAR_PREVIEW_PAUSED_LOCATION": {
return { ...state, previewLocation: null };
}
case "MAP_FRAMES": {
const { selectedFrameId, frames } = action;
return updateThreadState({ frames, selectedFrameId });
@ -689,8 +677,4 @@ export function getLastExpandedScopes(state: State, thread: ThreadId) {
return getThreadPauseState(state.pause, thread).lastExpandedScopes;
}
export function getPausePreviewLocation(state: State) {
return state.pause.previewLocation;
}
export default update;

Просмотреть файл

@ -101,13 +101,6 @@ function sameLocation(m1, m2) {
);
}
function getMessageLocation(message) {
const {
frame: { source, line, column },
} = message;
return { sourceUrl: source, line, column };
}
/*
*
* The player has 4 valid states
@ -348,6 +341,11 @@ class WebReplayPlayer extends Component {
}
}
async clearPreviewLocation() {
const dbg = await this.toolbox.loadTool("jsdebugger");
dbg.clearPreviewPausedLocation();
}
unhighlightConsoleMessage() {
if (this.hoveredMessage) {
this.hoveredMessage.classList.remove("highlight");
@ -376,20 +374,9 @@ class WebReplayPlayer extends Component {
}
onMessageMouseEnter(message) {
this.previewLocation(message);
this.showMessage(message);
}
async previewLocation(closestMessage) {
const dbg = await this.toolbox.loadTool("jsdebugger");
dbg.previewPausedLocation(getMessageLocation(closestMessage));
}
async clearPreviewLocation() {
const dbg = await this.toolbox.loadTool("jsdebugger");
dbg.clearPreviewPausedLocation();
}
onProgressBarClick(e) {
if (!e.altKey) {
return;
@ -416,7 +403,6 @@ class WebReplayPlayer extends Component {
onPlayerMouseLeave() {
this.unhighlightConsoleMessage();
this.clearPreviewLocation();
return this.threadFront.paintCurrentPoint();
}
@ -628,7 +614,7 @@ class WebReplayPlayer extends Component {
e.stopPropagation();
this.seek(message.executionPoint);
},
onMouseEnter: () => this.onMessageMouseEnter(message),
onMouseEnter: () => this.onMessageMouseEnter(message.executionPoint),
});
}