зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 1416218ae397 (bug 1580334) for Devtools failure on Debugger. CLOSED TREE
--HG-- extra : amend_source : 5480f365a0c5ea13f3be30ced032db85ade8418d
This commit is contained in:
Родитель
5913925d4e
Коммит
a740ed290d
|
@ -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),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче