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

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

Issue 2484283004: [DevTools] added BreakpointManager.possibleBreakpoints method (Closed)
Patch Set: addressed comments Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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 03e0c7790c25813053fbd7a5baec76637d3f9ad6..46310859b8332b71005a7c9b91259332d1ebc768 100644
--- a/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptSourceFrame.js
+++ b/third_party/WebKit/Source/devtools/front_end/sources/JavaScriptSourceFrame.js
@@ -259,12 +259,12 @@ WebInspector.JavaScriptSourceFrame = class extends WebInspector.UISourceCodeFram
if (!breakpoints.length) {
// This row doesn't have a breakpoint: We want to show Add Breakpoint and Add and Edit Breakpoint.
contextMenu.appendItem(
- WebInspector.UIString('Add breakpoint'), this._createNewBreakpoint.bind(this, lineNumber, 0, '', true));
+ WebInspector.UIString('Add breakpoint'), this._createNewBreakpoint.bind(this, lineNumber, '', true));
contextMenu.appendItem(
WebInspector.UIString('Add conditional breakpoint…'), this._editBreakpointCondition.bind(this, lineNumber));
contextMenu.appendItem(
WebInspector.UIString('Never pause here'),
- this._createNewBreakpoint.bind(this, lineNumber, 0, 'false', true));
+ this._createNewBreakpoint.bind(this, lineNumber, 'false', true));
} else {
var breakpoint = breakpoints[0];
@@ -615,7 +615,7 @@ WebInspector.JavaScriptSourceFrame = class extends WebInspector.UISourceCodeFram
if (breakpoint)
breakpoint.setCondition(newText);
else
- this._createNewBreakpoint(lineNumber, 0, newText, true);
+ this._createNewBreakpoint(lineNumber, newText, true);
}
var config = new WebInspector.InplaceEditor.Config(finishEditing.bind(this, true), finishEditing.bind(this, false));
@@ -1022,18 +1022,59 @@ WebInspector.JavaScriptSourceFrame = class extends WebInspector.UISourceCodeFram
else
breakpoints[0].remove();
} else
- this._createNewBreakpoint(lineNumber, 0, '', true);
+ this._createNewBreakpoint(lineNumber, '', true);
}
/**
* @param {number} lineNumber
- * @param {number} columnNumber
* @param {string} condition
* @param {boolean} enabled
*/
- _createNewBreakpoint(lineNumber, columnNumber, condition, enabled) {
- this._setBreakpoint(lineNumber, columnNumber, condition, enabled);
- WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.ScriptsBreakpointSet);
+ _createNewBreakpoint(lineNumber, condition, enabled) {
+ findPossibleBreakpoints.call(this, lineNumber)
+ .then(checkNextLineIfNeeded.bind(this, lineNumber, 4))
+ .then(setBreakpoint.bind(this));
+
+ /**
+ * @this {!WebInspector.JavaScriptSourceFrame}
+ * @param {number} lineNumber
+ * @return {!Promise<?Array<!WebInspector.UILocation>>}
+ */
+ function findPossibleBreakpoints(lineNumber) {
+ const maxLengthToCheck = 1024;
+ if (lineNumber >= this._textEditor.linesCount)
+ return Promise.resolve(/** @type {?Array<!WebInspector.UILocation>} */([]));
+ if (this._textEditor.line(lineNumber).length >= maxLengthToCheck)
+ return Promise.resolve(/** @type {?Array<!WebInspector.UILocation>} */([]));
+ return this._breakpointManager.possibleBreakpoints(this.uiSourceCode(), new WebInspector.TextRange(lineNumber, 0, lineNumber + 1, 0))
+ .then(locations => locations.length ? locations : null);
+ }
+
+ /**
+ * @this {!WebInspector.JavaScriptSourceFrame}
+ * @param {number} currentLineNumber
+ * @param {number} linesToCheck
+ * @param {?Array<!WebInspector.UILocation>} locations
+ * @return {!Promise<?Array<!WebInspector.UILocation>>}
+ */
+ function checkNextLineIfNeeded(currentLineNumber, linesToCheck, locations) {
+ if (locations || linesToCheck <= 0)
+ return Promise.resolve(locations);
+ return findPossibleBreakpoints.call(this, currentLineNumber + 1)
+ .then(checkNextLineIfNeeded.bind(this, currentLineNumber + 1, linesToCheck - 1));
+ }
+
+ /**
+ * @this {!WebInspector.JavaScriptSourceFrame}
+ * @param {?Array<!WebInspector.UILocation>} locations
+ */
+ function setBreakpoint(locations) {
+ if (!locations || !locations.length)
+ this._setBreakpoint(lineNumber, 0, condition, enabled);
+ else
+ this._setBreakpoint(locations[0].lineNumber, locations[0].columnNumber, condition, enabled);
+ WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.ScriptsBreakpointSet);
+ }
}
toggleBreakpointOnCurrentLine() {
@@ -1057,6 +1098,16 @@ WebInspector.JavaScriptSourceFrame = class extends WebInspector.UISourceCodeFram
return;
this._breakpointManager.setBreakpoint(this.uiSourceCode(), lineNumber, columnNumber, condition, enabled);
+ this._breakpointWasSetForTest(lineNumber, columnNumber, condition, enabled);
+ }
+
+ /**
+ * @param {number} lineNumber
+ * @param {number} columnNumber
+ * @param {string} condition
+ * @param {boolean} enabled
+ */
+ _breakpointWasSetForTest(lineNumber, columnNumber, condition, enabled) {
}
/**

Powered by Google App Engine
This is Rietveld 408576698