| Index: third_party/WebKit/Source/devtools/front_end/sources/JavaScriptSourceFrame.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptSourceFrame.js b/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptSourceFrame.js
|
| index 871728aee8367a93d3d38f24ae44c29966f1355d..ad3581c54551ae349ed98dcf2c456a2d55912f45 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptSourceFrame.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptSourceFrame.js
|
| @@ -516,12 +516,27 @@ Sources.JavaScriptSourceFrame = class extends SourceFrame.UISourceCodeFrame {
|
| this._showContinueToLocations();
|
| }
|
| if (this._continueToLocationDecorations) {
|
| - this.textEditor.element.classList.toggle(
|
| - 'source-frame-async-step-in-hovered',
|
| - !!event.target.enclosingNodeOrSelfWithClass('source-frame-async-step-in'));
|
| + var textPosition = this.textEditor.coordinatesToCursorPosition(event.x, event.y);
|
| + var hovering = !!event.target.enclosingNodeOrSelfWithClass('source-frame-async-step-in');
|
| + this._setAsyncStepInHoveredLine(textPosition ? textPosition.startLine : null, hovering);
|
| }
|
| }
|
|
|
| + /**
|
| + * @param {?number} line
|
| + * @param {boolean} hovered
|
| + */
|
| + _setAsyncStepInHoveredLine(line, hovered) {
|
| + if (this._asyncStepInHoveredLine === line && this._asyncStepInHovered === hovered)
|
| + return;
|
| + if (this._asyncStepInHovered && this._asyncStepInHoveredLine)
|
| + this.textEditor.toggleLineClass(this._asyncStepInHoveredLine, 'source-frame-async-step-in-hovered', false);
|
| + this._asyncStepInHoveredLine = line;
|
| + this._asyncStepInHovered = hovered;
|
| + if (this._asyncStepInHovered && this._asyncStepInHoveredLine)
|
| + this.textEditor.toggleLineClass(this._asyncStepInHoveredLine, 'source-frame-async-step-in-hovered', true);
|
| + }
|
| +
|
| /**
|
| * @param {!MouseEvent} event
|
| */
|
| @@ -724,7 +739,7 @@ Sources.JavaScriptSourceFrame = class extends SourceFrame.UISourceCodeFrame {
|
| tokenContent === 'setTimeout' || tokenContent === 'setInterval';
|
| var isCurrentPosition = this._executionLocation && lineNumber === this._executionLocation.lineNumber &&
|
| location.columnNumber === this._executionLocation.columnNumber;
|
| - if (location.type === Protocol.Debugger.BreakLocationType.Call && isAsyncCall && isCurrentPosition) {
|
| + if (location.type === Protocol.Debugger.BreakLocationType.Call && isAsyncCall) {
|
| var functionPosition = line.indexOf('(', token.endColumn);
|
| if (functionPosition !== -1) {
|
| functionPosition++;
|
| @@ -739,10 +754,8 @@ Sources.JavaScriptSourceFrame = class extends SourceFrame.UISourceCodeFrame {
|
| highlightRange =
|
| new TextUtils.TextRange(lineNumber, nextToken.startColumn, lineNumber, nextToken.endColumn - 1);
|
| decoration = this.textEditor.highlightRange(highlightRange, 'source-frame-async-step-in');
|
| - this._continueToLocationDecorations.set(decoration, () => {
|
| - debuggerModel.scheduleStepIntoAsync();
|
| - debuggerModel.stepInto();
|
| - });
|
| + this._continueToLocationDecorations.set(
|
| + decoration, this._asyncStepIn.bind(this, location, isCurrentPosition));
|
| }
|
| }
|
| }
|
| @@ -750,6 +763,22 @@ Sources.JavaScriptSourceFrame = class extends SourceFrame.UISourceCodeFrame {
|
| }
|
| }
|
|
|
| + /**
|
| + * @param {!SDK.DebuggerModel.BreakLocation} location
|
| + * @param {boolean} isCurrentPosition
|
| + */
|
| + _asyncStepIn(location, isCurrentPosition) {
|
| + if (!isCurrentPosition)
|
| + location.continueToLocation(asyncStepIn);
|
| + else
|
| + asyncStepIn();
|
| +
|
| + function asyncStepIn() {
|
| + location.debuggerModel.scheduleStepIntoAsync();
|
| + location.debuggerModel.stepInto();
|
| + }
|
| + }
|
| +
|
| /**
|
| * @param {!SDK.DebuggerModel.CallFrame} callFrame
|
| * @param {?Array.<!SDK.RemoteObjectProperty>} properties
|
| @@ -920,7 +949,7 @@ Sources.JavaScriptSourceFrame = class extends SourceFrame.UISourceCodeFrame {
|
| for (var decoration of this._continueToLocationDecorations.keys())
|
| this.textEditor.removeHighlight(decoration);
|
| this._continueToLocationDecorations = null;
|
| - this.textEditor.element.classList.remove('source-frame-async-step-in-hovered');
|
| + this._setAsyncStepInHoveredLine(null, false);
|
| });
|
| }
|
|
|
|
|