Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sources/JavaScriptSourceFrame.js

Issue 2881893002: [DevTools] Support async step in from arbitrary position (Closed)
Patch Set: addressed comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 509
510 /** 510 /**
511 * @param {!MouseEvent} event 511 * @param {!MouseEvent} event
512 */ 512 */
513 _onMouseMove(event) { 513 _onMouseMove(event) {
514 if (this._executionLocation && this._controlDown && UI.KeyboardShortcut.even tHasCtrlOrMeta(event)) { 514 if (this._executionLocation && this._controlDown && UI.KeyboardShortcut.even tHasCtrlOrMeta(event)) {
515 if (!this._continueToLocationDecorations) 515 if (!this._continueToLocationDecorations)
516 this._showContinueToLocations(); 516 this._showContinueToLocations();
517 } 517 }
518 if (this._continueToLocationDecorations) { 518 if (this._continueToLocationDecorations) {
519 this.textEditor.element.classList.toggle( 519 var textPosition = this.textEditor.coordinatesToCursorPosition(event.x, ev ent.y);
520 'source-frame-async-step-in-hovered', 520 var hovering = !!event.target.enclosingNodeOrSelfWithClass('source-frame-a sync-step-in');
521 !!event.target.enclosingNodeOrSelfWithClass('source-frame-async-step-i n')); 521 this._setAsyncStepInHoveredLine(textPosition ? textPosition.startLine : nu ll, hovering);
522 } 522 }
523 } 523 }
524 524
525 /** 525 /**
526 * @param {?number} line
527 * @param {boolean} hovered
528 */
529 _setAsyncStepInHoveredLine(line, hovered) {
530 if (this._asyncStepInHoveredLine === line && this._asyncStepInHovered === ho vered)
531 return;
532 if (this._asyncStepInHovered && this._asyncStepInHoveredLine)
533 this.textEditor.toggleLineClass(this._asyncStepInHoveredLine, 'source-fram e-async-step-in-hovered', false);
534 this._asyncStepInHoveredLine = line;
535 this._asyncStepInHovered = hovered;
536 if (this._asyncStepInHovered && this._asyncStepInHoveredLine)
537 this.textEditor.toggleLineClass(this._asyncStepInHoveredLine, 'source-fram e-async-step-in-hovered', true);
538 }
539
540 /**
526 * @param {!MouseEvent} event 541 * @param {!MouseEvent} event
527 */ 542 */
528 _onMouseDown(event) { 543 _onMouseDown(event) {
529 if (!this._executionLocation || !UI.KeyboardShortcut.eventHasCtrlOrMeta(even t)) 544 if (!this._executionLocation || !UI.KeyboardShortcut.eventHasCtrlOrMeta(even t))
530 return; 545 return;
531 if (!this._continueToLocationDecorations) 546 if (!this._continueToLocationDecorations)
532 return; 547 return;
533 event.consume(); 548 event.consume();
534 var textPosition = this.textEditor.coordinatesToCursorPosition(event.x, even t.y); 549 var textPosition = this.textEditor.coordinatesToCursorPosition(event.x, even t.y);
535 if (!textPosition) 550 if (!textPosition)
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 var highlightRange = new TextUtils.TextRange(lineNumber, token.startColu mn, lineNumber, token.endColumn - 1); 732 var highlightRange = new TextUtils.TextRange(lineNumber, token.startColu mn, lineNumber, token.endColumn - 1);
718 var decoration = this.textEditor.highlightRange(highlightRange, 'source- frame-continue-to-location'); 733 var decoration = this.textEditor.highlightRange(highlightRange, 'source- frame-continue-to-location');
719 this._continueToLocationDecorations.set(decoration, location.continueToL ocation.bind(location)); 734 this._continueToLocationDecorations.set(decoration, location.continueToL ocation.bind(location));
720 if (location.type === Protocol.Debugger.BreakLocationType.Call) 735 if (location.type === Protocol.Debugger.BreakLocationType.Call)
721 previousCallLine = lineNumber; 736 previousCallLine = lineNumber;
722 737
723 var isAsyncCall = (line[token.startColumn - 1] === '.' && tokenContent = == 'then') || 738 var isAsyncCall = (line[token.startColumn - 1] === '.' && tokenContent = == 'then') ||
724 tokenContent === 'setTimeout' || tokenContent === 'setInterval'; 739 tokenContent === 'setTimeout' || tokenContent === 'setInterval';
725 var isCurrentPosition = this._executionLocation && lineNumber === this._ executionLocation.lineNumber && 740 var isCurrentPosition = this._executionLocation && lineNumber === this._ executionLocation.lineNumber &&
726 location.columnNumber === this._executionLocation.columnNumber; 741 location.columnNumber === this._executionLocation.columnNumber;
727 if (location.type === Protocol.Debugger.BreakLocationType.Call && isAsyn cCall && isCurrentPosition) { 742 if (location.type === Protocol.Debugger.BreakLocationType.Call && isAsyn cCall) {
728 var functionPosition = line.indexOf('(', token.endColumn); 743 var functionPosition = line.indexOf('(', token.endColumn);
729 if (functionPosition !== -1) { 744 if (functionPosition !== -1) {
730 functionPosition++; 745 functionPosition++;
731 while (functionPosition < line.length && line[functionPosition] === ' ') 746 while (functionPosition < line.length && line[functionPosition] === ' ')
732 functionPosition++; 747 functionPosition++;
733 var nextToken = this.textEditor.tokenAtTextPosition(lineNumber, func tionPosition); 748 var nextToken = this.textEditor.tokenAtTextPosition(lineNumber, func tionPosition);
734 if (nextToken) { 749 if (nextToken) {
735 if (line.substring(nextToken.startColumn, nextToken.endColumn) === '(') { 750 if (line.substring(nextToken.startColumn, nextToken.endColumn) === '(') {
736 var closeParen = line.indexOf(')', nextToken.endColumn); 751 var closeParen = line.indexOf(')', nextToken.endColumn);
737 nextToken.endColumn = closeParen === -1 ? line.length : closePar en + 1; 752 nextToken.endColumn = closeParen === -1 ? line.length : closePar en + 1;
738 } 753 }
739 highlightRange = 754 highlightRange =
740 new TextUtils.TextRange(lineNumber, nextToken.startColumn, lin eNumber, nextToken.endColumn - 1); 755 new TextUtils.TextRange(lineNumber, nextToken.startColumn, lin eNumber, nextToken.endColumn - 1);
741 decoration = this.textEditor.highlightRange(highlightRange, 'sourc e-frame-async-step-in'); 756 decoration = this.textEditor.highlightRange(highlightRange, 'sourc e-frame-async-step-in');
742 this._continueToLocationDecorations.set(decoration, () => { 757 this._continueToLocationDecorations.set(
743 debuggerModel.scheduleStepIntoAsync(); 758 decoration, this._asyncStepIn.bind(this, location, isCurrentPo sition));
744 debuggerModel.stepInto();
745 });
746 } 759 }
747 } 760 }
748 } 761 }
749 } 762 }
750 } 763 }
751 } 764 }
752 765
753 /** 766 /**
767 * @param {!SDK.DebuggerModel.BreakLocation} location
768 * @param {boolean} isCurrentPosition
769 */
770 _asyncStepIn(location, isCurrentPosition) {
771 if (!isCurrentPosition)
772 location.continueToLocation(asyncStepIn);
773 else
774 asyncStepIn();
775
776 function asyncStepIn() {
777 location.debuggerModel.scheduleStepIntoAsync();
778 location.debuggerModel.stepInto();
779 }
780 }
781
782 /**
754 * @param {!SDK.DebuggerModel.CallFrame} callFrame 783 * @param {!SDK.DebuggerModel.CallFrame} callFrame
755 * @param {?Array.<!SDK.RemoteObjectProperty>} properties 784 * @param {?Array.<!SDK.RemoteObjectProperty>} properties
756 * @param {?Array.<!SDK.RemoteObjectProperty>} internalProperties 785 * @param {?Array.<!SDK.RemoteObjectProperty>} internalProperties
757 */ 786 */
758 _prepareScopeVariables(callFrame, properties, internalProperties) { 787 _prepareScopeVariables(callFrame, properties, internalProperties) {
759 if (!properties || !properties.length || properties.length > 500 || !this.is Showing()) { 788 if (!properties || !properties.length || properties.length > 500 || !this.is Showing()) {
760 this._clearValueWidgets(); 789 this._clearValueWidgets();
761 return; 790 return;
762 } 791 }
763 792
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 }); 942 });
914 } 943 }
915 944
916 _clearContinueToLocationsNoRestore() { 945 _clearContinueToLocationsNoRestore() {
917 if (!this._continueToLocationDecorations) 946 if (!this._continueToLocationDecorations)
918 return; 947 return;
919 this.textEditor.operation(() => { 948 this.textEditor.operation(() => {
920 for (var decoration of this._continueToLocationDecorations.keys()) 949 for (var decoration of this._continueToLocationDecorations.keys())
921 this.textEditor.removeHighlight(decoration); 950 this.textEditor.removeHighlight(decoration);
922 this._continueToLocationDecorations = null; 951 this._continueToLocationDecorations = null;
923 this.textEditor.element.classList.remove('source-frame-async-step-in-hover ed'); 952 this._setAsyncStepInHoveredLine(null, false);
924 }); 953 });
925 } 954 }
926 955
927 _clearContinueToLocations() { 956 _clearContinueToLocations() {
928 if (!this._continueToLocationDecorations) 957 if (!this._continueToLocationDecorations)
929 return; 958 return;
930 this.textEditor.operation(() => { 959 this.textEditor.operation(() => {
931 this.textEditor.showExecutionLineBackground(); 960 this.textEditor.showExecutionLineBackground();
932 this._generateValuesInSource(); 961 this._generateValuesInSource();
933 this._clearContinueToLocationsNoRestore(); 962 this._clearContinueToLocationsNoRestore();
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 return; 1606 return;
1578 this.bookmark.clear(); 1607 this.bookmark.clear();
1579 this.bookmark = null; 1608 this.bookmark = null;
1580 } 1609 }
1581 }; 1610 };
1582 1611
1583 Sources.JavaScriptSourceFrame.BreakpointDecoration.bookmarkSymbol = Symbol('book mark'); 1612 Sources.JavaScriptSourceFrame.BreakpointDecoration.bookmarkSymbol = Symbol('book mark');
1584 Sources.JavaScriptSourceFrame.BreakpointDecoration._elementSymbolForTest = Symbo l('element'); 1613 Sources.JavaScriptSourceFrame.BreakpointDecoration._elementSymbolForTest = Symbo l('element');
1585 1614
1586 Sources.JavaScriptSourceFrame.continueToLocationDecorationSymbol = Symbol('bookm ark'); 1615 Sources.JavaScriptSourceFrame.continueToLocationDecorationSymbol = Symbol('bookm ark');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698