Index: Source/devtools/front_end/sdk/BreakpointManager.js |
diff --git a/Source/devtools/front_end/sdk/BreakpointManager.js b/Source/devtools/front_end/sdk/BreakpointManager.js |
deleted file mode 100644 |
index 3d092b2d691800932bfe5286d68528387123513d..0000000000000000000000000000000000000000 |
--- a/Source/devtools/front_end/sdk/BreakpointManager.js |
+++ /dev/null |
@@ -1,1068 +0,0 @@ |
-/* |
- * Copyright (C) 2011 Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions are |
- * met: |
- * |
- * * Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * * Redistributions in binary form must reproduce the above |
- * copyright notice, this list of conditions and the following disclaimer |
- * in the documentation and/or other materials provided with the |
- * distribution. |
- * * Neither the name of Google Inc. nor the names of its |
- * contributors may be used to endorse or promote products derived from |
- * this software without specific prior written permission. |
- * |
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-/** |
- * @constructor |
- * @extends {WebInspector.Object} |
- * @implements {WebInspector.TargetManager.Observer} |
- * @param {!WebInspector.Setting} breakpointStorage |
- * @param {!WebInspector.Workspace} workspace |
- * @param {!WebInspector.TargetManager} targetManager |
- * @param {!WebInspector.DebuggerWorkspaceBinding} debuggerWorkspaceBinding |
- */ |
-WebInspector.BreakpointManager = function(breakpointStorage, workspace, targetManager, debuggerWorkspaceBinding) |
-{ |
- this._storage = new WebInspector.BreakpointManager.Storage(this, breakpointStorage); |
- this._workspace = workspace; |
- this._targetManager = targetManager; |
- this._debuggerWorkspaceBinding = debuggerWorkspaceBinding; |
- |
- this._breakpointsActive = true; |
- this._breakpointsForUISourceCode = new Map(); |
- this._breakpointsForPrimaryUISourceCode = new Map(); |
- /** @type {!StringMultimap.<!WebInspector.BreakpointManager.Breakpoint>} */ |
- this._provisionalBreakpoints = new StringMultimap(); |
- |
- this._workspace.addEventListener(WebInspector.Workspace.Events.ProjectRemoved, this._projectRemoved, this); |
- this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this); |
- this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, this._uiSourceCodeRemoved, this); |
-} |
- |
-WebInspector.BreakpointManager.Events = { |
- BreakpointAdded: "breakpoint-added", |
- BreakpointRemoved: "breakpoint-removed", |
- BreakpointsActiveStateChanged: "BreakpointsActiveStateChanged" |
-} |
- |
-WebInspector.BreakpointManager._sourceFileId = function(uiSourceCode) |
-{ |
- if (!uiSourceCode.url) |
- return ""; |
- return uiSourceCode.uri(); |
-} |
- |
-/** |
- * @param {string} sourceFileId |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
- * @return {string} |
- */ |
-WebInspector.BreakpointManager._breakpointStorageId = function(sourceFileId, lineNumber, columnNumber) |
-{ |
- if (!sourceFileId) |
- return ""; |
- return sourceFileId + ":" + lineNumber + ":" + columnNumber; |
-} |
- |
-WebInspector.BreakpointManager.prototype = { |
- /** |
- * @param {!WebInspector.Target} target |
- */ |
- targetAdded: function(target) { |
- if (!this._breakpointsActive) |
- target.debuggerAgent().setBreakpointsActive(this._breakpointsActive); |
- }, |
- |
- /** |
- * @param {!WebInspector.Target} target |
- */ |
- targetRemoved: function(target) { }, |
- |
- /** |
- * @param {string} sourceFileId |
- * @return {!StringMap.<!WebInspector.BreakpointManager.Breakpoint>} |
- */ |
- _provisionalBreakpointsForSourceFileId: function(sourceFileId) |
- { |
- var result = new StringMap(); |
- var breakpoints = this._provisionalBreakpoints.get(sourceFileId).values(); |
- for (var i = 0; i < breakpoints.length; ++i) |
- result.put(breakpoints[i]._breakpointStorageId(), breakpoints[i]); |
- return result; |
- }, |
- |
- removeProvisionalBreakpointsForTest: function() |
- { |
- var breakpoints = this._provisionalBreakpoints.values(); |
- for (var i = 0; i < breakpoints.length; ++i) |
- breakpoints[i].remove(); |
- this._provisionalBreakpoints.clear(); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- _restoreBreakpoints: function(uiSourceCode) |
- { |
- var sourceFileId = WebInspector.BreakpointManager._sourceFileId(uiSourceCode); |
- if (!sourceFileId) |
- return; |
- |
- this._storage.mute(); |
- var breakpointItems = this._storage.breakpointItems(uiSourceCode); |
- var provisionalBreakpoints = this._provisionalBreakpointsForSourceFileId(sourceFileId); |
- for (var i = 0; i < breakpointItems.length; ++i) { |
- var breakpointItem = breakpointItems[i]; |
- var itemStorageId = WebInspector.BreakpointManager._breakpointStorageId(breakpointItem.sourceFileId, breakpointItem.lineNumber, breakpointItem.columnNumber); |
- var provisionalBreakpoint = provisionalBreakpoints.get(itemStorageId); |
- if (provisionalBreakpoint) { |
- if (!this._breakpointsForPrimaryUISourceCode.get(uiSourceCode)) |
- this._breakpointsForPrimaryUISourceCode.put(uiSourceCode, []); |
- this._breakpointsForPrimaryUISourceCode.get(uiSourceCode).push(provisionalBreakpoint); |
- provisionalBreakpoint._updateBreakpoint(); |
- } else { |
- this._innerSetBreakpoint(uiSourceCode, breakpointItem.lineNumber, breakpointItem.columnNumber, breakpointItem.condition, breakpointItem.enabled); |
- } |
- } |
- this._provisionalBreakpoints.removeAll(sourceFileId); |
- this._storage.unmute(); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _uiSourceCodeAdded: function(event) |
- { |
- var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data); |
- this._restoreBreakpoints(uiSourceCode); |
- if (uiSourceCode.contentType() === WebInspector.resourceTypes.Script || uiSourceCode.contentType() === WebInspector.resourceTypes.Document) |
- uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.SourceMappingChanged, this._uiSourceCodeMappingChanged, this); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _uiSourceCodeRemoved: function(event) |
- { |
- var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data); |
- this._removeUISourceCode(uiSourceCode); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _uiSourceCodeMappingChanged: function(event) |
- { |
- var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.target); |
- var isIdentity = /** @type {boolean} */ (event.data.isIdentity); |
- var target = /** @type {!WebInspector.Target} */ (event.data.target); |
- if (isIdentity) |
- return; |
- var breakpoints = this._breakpointsForPrimaryUISourceCode.get(uiSourceCode) || []; |
- for (var i = 0; i < breakpoints.length; ++i) |
- breakpoints[i]._updateInDebuggerForTarget(target); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- _removeUISourceCode: function(uiSourceCode) |
- { |
- var breakpoints = this._breakpointsForPrimaryUISourceCode.get(uiSourceCode) || []; |
- var sourceFileId = WebInspector.BreakpointManager._sourceFileId(uiSourceCode); |
- for (var i = 0; i < breakpoints.length; ++i) { |
- breakpoints[i]._resetLocations(); |
- if (breakpoints[i].enabled()) |
- this._provisionalBreakpoints.put(sourceFileId, breakpoints[i]); |
- } |
- uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.SourceMappingChanged, this._uiSourceCodeMappingChanged, this); |
- this._breakpointsForPrimaryUISourceCode.remove(uiSourceCode); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
- * @param {string} condition |
- * @param {boolean} enabled |
- * @return {!WebInspector.BreakpointManager.Breakpoint} |
- */ |
- setBreakpoint: function(uiSourceCode, lineNumber, columnNumber, condition, enabled) |
- { |
- this.setBreakpointsActive(true); |
- return this._innerSetBreakpoint(uiSourceCode, lineNumber, columnNumber, condition, enabled); |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
- * @param {string} condition |
- * @param {boolean} enabled |
- * @return {!WebInspector.BreakpointManager.Breakpoint} |
- */ |
- _innerSetBreakpoint: function(uiSourceCode, lineNumber, columnNumber, condition, enabled) |
- { |
- var breakpoint = this.findBreakpoint(uiSourceCode, lineNumber, columnNumber); |
- if (breakpoint) { |
- breakpoint._updateState(condition, enabled); |
- return breakpoint; |
- } |
- var projectId = uiSourceCode.project().id(); |
- var path = uiSourceCode.path(); |
- var sourceFileId = WebInspector.BreakpointManager._sourceFileId(uiSourceCode); |
- breakpoint = new WebInspector.BreakpointManager.Breakpoint(this, projectId, path, sourceFileId, lineNumber, columnNumber, condition, enabled); |
- if (!this._breakpointsForPrimaryUISourceCode.get(uiSourceCode)) |
- this._breakpointsForPrimaryUISourceCode.put(uiSourceCode, []); |
- this._breakpointsForPrimaryUISourceCode.get(uiSourceCode).push(breakpoint); |
- return breakpoint; |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
- * @return {?WebInspector.BreakpointManager.Breakpoint} |
- */ |
- findBreakpoint: function(uiSourceCode, lineNumber, columnNumber) |
- { |
- var breakpoints = this._breakpointsForUISourceCode.get(uiSourceCode); |
- var lineBreakpoints = breakpoints ? breakpoints.get(String(lineNumber)) : null; |
- var columnBreakpoints = lineBreakpoints ? lineBreakpoints.get(String(columnNumber)) : null; |
- return columnBreakpoints ? columnBreakpoints[0] : null; |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @param {number} lineNumber |
- * @return {?WebInspector.BreakpointManager.Breakpoint} |
- */ |
- findBreakpointOnLine: function(uiSourceCode, lineNumber) |
- { |
- var breakpoints = this._breakpointsForUISourceCode.get(uiSourceCode); |
- var lineBreakpoints = breakpoints ? breakpoints.get(String(lineNumber)) : null; |
- return lineBreakpoints ? lineBreakpoints.values()[0][0] : null; |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @return {!Array.<!WebInspector.BreakpointManager.Breakpoint>} |
- */ |
- breakpointsForUISourceCode: function(uiSourceCode) |
- { |
- var result = []; |
- var uiSourceCodeBreakpoints = this._breakpointsForUISourceCode.get(uiSourceCode); |
- var breakpoints = uiSourceCodeBreakpoints ? uiSourceCodeBreakpoints.values() : []; |
- for (var i = 0; i < breakpoints.length; ++i) { |
- var lineBreakpoints = breakpoints[i]; |
- var columnBreakpointArrays = lineBreakpoints ? lineBreakpoints.values() : []; |
- result = result.concat.apply(result, columnBreakpointArrays); |
- } |
- return result; |
- }, |
- |
- /** |
- * @return {!Array.<!WebInspector.BreakpointManager.Breakpoint>} |
- */ |
- allBreakpoints: function() |
- { |
- var result = []; |
- var uiSourceCodes = this._breakpointsForUISourceCode.keys(); |
- for (var i = 0; i < uiSourceCodes.length; ++i) |
- result = result.concat(this.breakpointsForUISourceCode(uiSourceCodes[i])); |
- return result; |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @return {!Array.<!{breakpoint: !WebInspector.BreakpointManager.Breakpoint, uiLocation: !WebInspector.UILocation}>} |
- */ |
- breakpointLocationsForUISourceCode: function(uiSourceCode) |
- { |
- var uiSourceCodeBreakpoints = this._breakpointsForUISourceCode.get(uiSourceCode); |
- var lineNumbers = uiSourceCodeBreakpoints ? uiSourceCodeBreakpoints.keys() : []; |
- var result = []; |
- for (var i = 0; i < lineNumbers.length; ++i) { |
- var lineBreakpoints = uiSourceCodeBreakpoints.get(lineNumbers[i]); |
- var columnNumbers = lineBreakpoints.keys(); |
- for (var j = 0; j < columnNumbers.length; ++j) { |
- var columnBreakpoints = lineBreakpoints.get(columnNumbers[j]); |
- var lineNumber = parseInt(lineNumbers[i], 10); |
- var columnNumber = parseInt(columnNumbers[j], 10); |
- for (var k = 0; k < columnBreakpoints.length; ++k) { |
- var breakpoint = columnBreakpoints[k]; |
- var uiLocation = uiSourceCode.uiLocation(lineNumber, columnNumber); |
- result.push({breakpoint: breakpoint, uiLocation: uiLocation}); |
- } |
- } |
- } |
- return result; |
- }, |
- |
- /** |
- * @return {!Array.<!{breakpoint: !WebInspector.BreakpointManager.Breakpoint, uiLocation: !WebInspector.UILocation}>} |
- */ |
- allBreakpointLocations: function() |
- { |
- var result = []; |
- var uiSourceCodes = this._breakpointsForUISourceCode.keys(); |
- for (var i = 0; i < uiSourceCodes.length; ++i) |
- result = result.concat(this.breakpointLocationsForUISourceCode(uiSourceCodes[i])); |
- return result; |
- }, |
- |
- /** |
- * @param {boolean} toggleState |
- */ |
- toggleAllBreakpoints: function(toggleState) |
- { |
- var breakpoints = this.allBreakpoints(); |
- for (var i = 0; i < breakpoints.length; ++i) |
- breakpoints[i].setEnabled(toggleState); |
- }, |
- |
- removeAllBreakpoints: function() |
- { |
- var breakpoints = this.allBreakpoints(); |
- for (var i = 0; i < breakpoints.length; ++i) |
- breakpoints[i].remove(); |
- }, |
- |
- _projectRemoved: function(event) |
- { |
- var project = /** @type {!WebInspector.Project} */ (event.data); |
- var uiSourceCodes = project.uiSourceCodes(); |
- for (var i = 0; i < uiSourceCodes.length; ++i) |
- this._removeUISourceCode(uiSourceCodes[i]); |
- }, |
- |
- /** |
- * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint |
- * @param {boolean} removeFromStorage |
- */ |
- _removeBreakpoint: function(breakpoint, removeFromStorage) |
- { |
- var uiSourceCode = breakpoint.uiSourceCode(); |
- var breakpoints = uiSourceCode ? this._breakpointsForPrimaryUISourceCode.get(uiSourceCode) || [] : []; |
- breakpoints.remove(breakpoint); |
- if (removeFromStorage) |
- this._storage._removeBreakpoint(breakpoint); |
- this._provisionalBreakpoints.remove(breakpoint._sourceFileId, breakpoint); |
- }, |
- |
- /** |
- * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint |
- * @param {!WebInspector.UILocation} uiLocation |
- */ |
- _uiLocationAdded: function(breakpoint, uiLocation) |
- { |
- var breakpoints = this._breakpointsForUISourceCode.get(uiLocation.uiSourceCode); |
- if (!breakpoints) { |
- breakpoints = new StringMap(); |
- this._breakpointsForUISourceCode.put(uiLocation.uiSourceCode, breakpoints); |
- } |
- var lineBreakpoints = breakpoints.get(String(uiLocation.lineNumber)); |
- if (!lineBreakpoints) { |
- lineBreakpoints = new StringMap(); |
- breakpoints.put(String(uiLocation.lineNumber), lineBreakpoints); |
- } |
- var columnBreakpoints = lineBreakpoints.get(String(uiLocation.columnNumber)); |
- if (!columnBreakpoints) { |
- columnBreakpoints = []; |
- lineBreakpoints.put(String(uiLocation.columnNumber), columnBreakpoints); |
- } |
- columnBreakpoints.push(breakpoint); |
- this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.BreakpointAdded, {breakpoint: breakpoint, uiLocation: uiLocation}); |
- }, |
- |
- /** |
- * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint |
- * @param {!WebInspector.UILocation} uiLocation |
- */ |
- _uiLocationRemoved: function(breakpoint, uiLocation) |
- { |
- var breakpoints = this._breakpointsForUISourceCode.get(uiLocation.uiSourceCode); |
- if (!breakpoints) |
- return; |
- |
- var lineBreakpoints = breakpoints.get(String(uiLocation.lineNumber)); |
- if (!lineBreakpoints) |
- return; |
- var columnBreakpoints = lineBreakpoints.get(String(uiLocation.columnNumber)); |
- if (!columnBreakpoints) |
- return; |
- columnBreakpoints.remove(breakpoint); |
- if (!columnBreakpoints.length) |
- lineBreakpoints.remove(String(uiLocation.columnNumber)); |
- if (!lineBreakpoints.size()) |
- breakpoints.remove(String(uiLocation.lineNumber)); |
- if (!breakpoints.size()) |
- this._breakpointsForUISourceCode.remove(uiLocation.uiSourceCode); |
- this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.BreakpointRemoved, {breakpoint: breakpoint, uiLocation: uiLocation}); |
- }, |
- |
- /** |
- * @param {boolean} active |
- */ |
- setBreakpointsActive: function(active) |
- { |
- if (this._breakpointsActive === active) |
- return; |
- |
- this._breakpointsActive = active; |
- var targets = WebInspector.targetManager.targets(); |
- for (var i = 0; i < targets.length; ++i) |
- targets[i].debuggerAgent().setBreakpointsActive(active); |
- |
- this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.BreakpointsActiveStateChanged, active); |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- breakpointsActive: function() |
- { |
- return this._breakpointsActive; |
- }, |
- |
- __proto__: WebInspector.Object.prototype |
-} |
- |
-/** |
- * @constructor |
- * @implements {WebInspector.TargetManager.Observer} |
- * @param {!WebInspector.BreakpointManager} breakpointManager |
- * @param {string} projectId |
- * @param {string} path |
- * @param {string} sourceFileId |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
- * @param {string} condition |
- * @param {boolean} enabled |
- */ |
-WebInspector.BreakpointManager.Breakpoint = function(breakpointManager, projectId, path, sourceFileId, lineNumber, columnNumber, condition, enabled) |
-{ |
- this._breakpointManager = breakpointManager; |
- this._projectId = projectId; |
- this._path = path; |
- this._lineNumber = lineNumber; |
- this._columnNumber = columnNumber; |
- this._sourceFileId = sourceFileId; |
- |
- /** @type {!Object.<string, number>} */ |
- this._numberOfDebuggerLocationForUILocation = {}; |
- |
- // Force breakpoint update. |
- /** @type {string} */ this._condition; |
- /** @type {boolean} */ this._enabled; |
- /** @type {boolean} */ this._isRemoved; |
- /** @type {!WebInspector.UILocation|undefined} */ this._fakePrimaryLocation; |
- |
- this._currentState = null; |
- /** @type {!Map.<!WebInspector.Target, !WebInspector.BreakpointManager.TargetBreakpoint>}*/ |
- this._targetBreakpoints = new Map(); |
- this._updateState(condition, enabled); |
- this._breakpointManager._targetManager.observeTargets(this); |
-} |
- |
-WebInspector.BreakpointManager.Breakpoint.prototype = { |
- /** |
- * @param {!WebInspector.Target} target |
- */ |
- targetAdded: function(target) |
- { |
- this._targetBreakpoints.put(target, new WebInspector.BreakpointManager.TargetBreakpoint(target, this, this._breakpointManager._debuggerWorkspaceBinding)); |
- }, |
- |
- /** |
- * @param {!WebInspector.Target} target |
- */ |
- targetRemoved: function(target) |
- { |
- var targetBreakpoint = this._targetBreakpoints.remove(target); |
- targetBreakpoint._cleanUpAfterDebuggerIsGone(); |
- targetBreakpoint._removeEventListeners(); |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- projectId: function() |
- { |
- return this._projectId; |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- path: function() |
- { |
- return this._path; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- lineNumber: function() |
- { |
- return this._lineNumber; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- columnNumber: function() |
- { |
- return this._columnNumber; |
- }, |
- |
- /** |
- * @return {?WebInspector.UISourceCode} |
- */ |
- uiSourceCode: function() |
- { |
- return this._breakpointManager._workspace.uiSourceCode(this._projectId, this._path); |
- }, |
- |
- /** |
- * @param {?WebInspector.UILocation} oldUILocation |
- * @param {!WebInspector.UILocation} newUILocation |
- */ |
- _replaceUILocation: function(oldUILocation, newUILocation) |
- { |
- if (this._isRemoved) |
- return; |
- |
- this._removeUILocation(oldUILocation, true); |
- this._removeFakeBreakpointAtPrimaryLocation(); |
- |
- if (!this._numberOfDebuggerLocationForUILocation[newUILocation.id()]) |
- this._numberOfDebuggerLocationForUILocation[newUILocation.id()] = 0; |
- |
- if (++this._numberOfDebuggerLocationForUILocation[newUILocation.id()] === 1) |
- this._breakpointManager._uiLocationAdded(this, newUILocation); |
- }, |
- |
- /** |
- * @param {?WebInspector.UILocation} uiLocation |
- * @param {boolean=} muteCreationFakeBreakpoint |
- */ |
- _removeUILocation: function(uiLocation, muteCreationFakeBreakpoint) |
- { |
- if (!uiLocation || --this._numberOfDebuggerLocationForUILocation[uiLocation.id()] !== 0) |
- return; |
- |
- delete this._numberOfDebuggerLocationForUILocation[uiLocation.id()]; |
- this._breakpointManager._uiLocationRemoved(this, uiLocation); |
- if (!muteCreationFakeBreakpoint) |
- this._fakeBreakpointAtPrimaryLocation(); |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- enabled: function() |
- { |
- return this._enabled; |
- }, |
- |
- /** |
- * @param {boolean} enabled |
- */ |
- setEnabled: function(enabled) |
- { |
- this._updateState(this._condition, enabled); |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- condition: function() |
- { |
- return this._condition; |
- }, |
- |
- /** |
- * @param {string} condition |
- */ |
- setCondition: function(condition) |
- { |
- this._updateState(condition, this._enabled); |
- }, |
- |
- /** |
- * @param {string} condition |
- * @param {boolean} enabled |
- */ |
- _updateState: function(condition, enabled) |
- { |
- if (this._enabled === enabled && this._condition === condition) |
- return; |
- this._enabled = enabled; |
- this._condition = condition; |
- this._breakpointManager._storage._updateBreakpoint(this); |
- this._updateBreakpoint(); |
- }, |
- |
- _updateBreakpoint: function() |
- { |
- this._removeFakeBreakpointAtPrimaryLocation(); |
- this._fakeBreakpointAtPrimaryLocation(); |
- var targetBreakpoints = this._targetBreakpoints.values(); |
- for (var i = 0; i < targetBreakpoints.length; ++i) |
- targetBreakpoints[i]._scheduleUpdateInDebugger(); |
- }, |
- |
- /** |
- * @param {boolean=} keepInStorage |
- */ |
- remove: function(keepInStorage) |
- { |
- |
- this._isRemoved = true; |
- var removeFromStorage = !keepInStorage; |
- this._removeFakeBreakpointAtPrimaryLocation(); |
- var targetBreakpoints = this._targetBreakpoints.values(); |
- for (var i = 0; i < targetBreakpoints.length; ++i) { |
- targetBreakpoints[i]._scheduleUpdateInDebugger(); |
- targetBreakpoints[i]._removeEventListeners(); |
- } |
- |
- this._breakpointManager._removeBreakpoint(this, removeFromStorage); |
- this._breakpointManager._targetManager.unobserveTargets(this); |
- }, |
- |
- /** |
- * @param {!WebInspector.Target} target |
- */ |
- _updateInDebuggerForTarget: function(target) |
- { |
- this._targetBreakpoints.get(target)._scheduleUpdateInDebugger(); |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- _breakpointStorageId: function() |
- { |
- return WebInspector.BreakpointManager._breakpointStorageId(this._sourceFileId, this._lineNumber, this._columnNumber); |
- }, |
- |
- _fakeBreakpointAtPrimaryLocation: function() |
- { |
- if (this._isRemoved || !Object.isEmpty(this._numberOfDebuggerLocationForUILocation) || this._fakePrimaryLocation) |
- return; |
- |
- var uiSourceCode = this._breakpointManager._workspace.uiSourceCode(this._projectId, this._path); |
- if (!uiSourceCode) |
- return; |
- |
- this._fakePrimaryLocation = uiSourceCode.uiLocation(this._lineNumber, this._columnNumber); |
- this._breakpointManager._uiLocationAdded(this, this._fakePrimaryLocation); |
- }, |
- |
- _removeFakeBreakpointAtPrimaryLocation: function() |
- { |
- if (this._fakePrimaryLocation) { |
- this._breakpointManager._uiLocationRemoved(this, this._fakePrimaryLocation); |
- delete this._fakePrimaryLocation; |
- } |
- }, |
- |
- _resetLocations: function() |
- { |
- this._removeFakeBreakpointAtPrimaryLocation(); |
- var targetBreakpoints = this._targetBreakpoints.values(); |
- for (var i = 0; i < targetBreakpoints.length; ++i) |
- targetBreakpoints[i]._resetLocations(); |
- } |
-} |
- |
-/** |
- * @constructor |
- * @extends {WebInspector.SDKObject} |
- * @param {!WebInspector.Target} target |
- * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint |
- * @param {!WebInspector.DebuggerWorkspaceBinding} debuggerWorkspaceBinding |
- */ |
-WebInspector.BreakpointManager.TargetBreakpoint = function(target, breakpoint, debuggerWorkspaceBinding) |
-{ |
- WebInspector.SDKObject.call(this, target); |
- this._breakpoint = breakpoint; |
- this._debuggerWorkspaceBinding = debuggerWorkspaceBinding; |
- |
- /** @type {!Array.<!WebInspector.DebuggerWorkspaceBinding.Location>} */ |
- this._liveLocations = []; |
- |
- /** @type {!Object.<string, !WebInspector.UILocation>} */ |
- this._uiLocations = {}; |
- target.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerWasDisabled, this._cleanUpAfterDebuggerIsGone, this); |
- target.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerWasEnabled, this._scheduleUpdateInDebugger, this); |
- this._hasPendingUpdate = false; |
- this._isUpdating = false; |
- this._cancelCallback = false; |
- this._currentState = null; |
- if (target.debuggerModel.debuggerEnabled()) |
- this._scheduleUpdateInDebugger(); |
-} |
- |
-WebInspector.BreakpointManager.TargetBreakpoint.prototype = { |
- |
- /** |
- * @return {!WebInspector.DebuggerModel} |
- */ |
- _debuggerModel: function() |
- { |
- return this.target().debuggerModel; |
- }, |
- |
- _resetLocations: function() |
- { |
- var uiLocations = Object.values(this._uiLocations); |
- for (var i = 0; i < uiLocations.length; ++i) |
- this._breakpoint._removeUILocation(uiLocations[i]); |
- |
- this._uiLocations = {}; |
- |
- for (var i = 0; i < this._liveLocations.length; ++i) |
- this._liveLocations[i].dispose(); |
- this._liveLocations = []; |
- }, |
- |
- _scheduleUpdateInDebugger: function() |
- { |
- if (this._isUpdating) { |
- this._hasPendingUpdate = true; |
- return; |
- } |
- |
- this._isUpdating = true; |
- this._updateInDebugger(this._didUpdateInDebugger.bind(this)); |
- }, |
- |
- _didUpdateInDebugger: function() |
- { |
- this._isUpdating = false; |
- if (this._hasPendingUpdate) { |
- this._hasPendingUpdate = false; |
- this._scheduleUpdateInDebugger(); |
- } |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- _scriptDiverged: function() |
- { |
- var uiSourceCode = this._breakpoint.uiSourceCode(); |
- if (!uiSourceCode) |
- return false; |
- var scriptFile = this._debuggerWorkspaceBinding.scriptFile(uiSourceCode, this.target()); |
- return !!scriptFile && scriptFile.hasDivergedFromVM(); |
- |
- }, |
- |
- /** |
- * @param {function()} callback |
- */ |
- _updateInDebugger: function(callback) |
- { |
- if (this.target().isDetached()) { |
- this._cleanUpAfterDebuggerIsGone(); |
- callback(); |
- return; |
- } |
- |
- var uiSourceCode = this._breakpoint.uiSourceCode(); |
- var lineNumber = this._breakpoint._lineNumber; |
- var columnNumber = this._breakpoint._columnNumber; |
- var condition = this._breakpoint.condition(); |
- |
- var debuggerLocation = uiSourceCode ? this._debuggerWorkspaceBinding.uiLocationToRawLocation(this.target(), uiSourceCode, lineNumber, columnNumber) : null; |
- var newState; |
- if (this._breakpoint._isRemoved || !this._breakpoint.enabled() || this._scriptDiverged()) |
- newState = null; |
- else if (debuggerLocation) { |
- var script = debuggerLocation.script(); |
- if (script.sourceURL) |
- newState = new WebInspector.BreakpointManager.Breakpoint.State(script.sourceURL, null, debuggerLocation.lineNumber, debuggerLocation.columnNumber, condition); |
- else |
- newState = new WebInspector.BreakpointManager.Breakpoint.State(null, debuggerLocation.scriptId, debuggerLocation.lineNumber, debuggerLocation.columnNumber, condition) |
- } else if (this._breakpoint._currentState && this._breakpoint._currentState.url) { |
- var position = this._breakpoint._currentState; |
- newState = new WebInspector.BreakpointManager.Breakpoint.State(position.url, null, position.lineNumber, position.columnNumber, condition); |
- } else if (uiSourceCode && uiSourceCode.url) |
- newState = new WebInspector.BreakpointManager.Breakpoint.State(uiSourceCode.url, null, lineNumber, columnNumber, condition); |
- |
- if (this._debuggerId && WebInspector.BreakpointManager.Breakpoint.State.equals(newState, this._currentState)) { |
- callback(); |
- return; |
- } |
- |
- this._breakpoint._currentState = newState; |
- |
- if (this._debuggerId) { |
- this._resetLocations(); |
- this._debuggerModel().removeBreakpoint(this._debuggerId, this._didRemoveFromDebugger.bind(this, callback)); |
- this._scheduleUpdateInDebugger(); |
- this._currentState = null; |
- return; |
- } |
- |
- if (!newState) { |
- callback(); |
- return; |
- } |
- |
- var updateCallback = this._didSetBreakpointInDebugger.bind(this, callback); |
- if (newState.url) |
- this._debuggerModel().setBreakpointByURL(newState.url, newState.lineNumber, newState.columnNumber, this._breakpoint.condition(), updateCallback); |
- else if (newState.scriptId) |
- this._debuggerModel().setBreakpointBySourceId(/** @type {!WebInspector.DebuggerModel.Location} */ (debuggerLocation), condition, updateCallback); |
- |
- this._currentState = newState; |
- }, |
- |
- /** |
- * @param {function()} callback |
- * @param {?DebuggerAgent.BreakpointId} breakpointId |
- * @param {!Array.<!WebInspector.DebuggerModel.Location>} locations |
- */ |
- _didSetBreakpointInDebugger: function(callback, breakpointId, locations) |
- { |
- if (this._cancelCallback) { |
- this._cancelCallback = false; |
- callback(); |
- return; |
- } |
- |
- if (!breakpointId) { |
- this._breakpoint.remove(true); |
- callback(); |
- return; |
- } |
- |
- this._debuggerId = breakpointId; |
- this.target().debuggerModel.addBreakpointListener(this._debuggerId, this._breakpointResolved, this); |
- for (var i = 0; i < locations.length; ++i) { |
- if (!this._addResolvedLocation(locations[i])) |
- break; |
- } |
- callback(); |
- }, |
- |
- /** |
- * @param {function()} callback |
- */ |
- _didRemoveFromDebugger: function(callback) |
- { |
- if (this._cancelCallback) { |
- this._cancelCallback = false; |
- callback(); |
- return; |
- } |
- |
- this._resetLocations(); |
- this.target().debuggerModel.removeBreakpointListener(this._debuggerId, this._breakpointResolved, this); |
- delete this._debuggerId; |
- callback(); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _breakpointResolved: function(event) |
- { |
- this._addResolvedLocation(/** @type {!WebInspector.DebuggerModel.Location}*/ (event.data)); |
- }, |
- |
- /** |
- * @param {!WebInspector.DebuggerModel.Location} location |
- * @param {!WebInspector.UILocation} uiLocation |
- */ |
- _locationUpdated: function(location, uiLocation) |
- { |
- var oldUILocation = this._uiLocations[location.id()] || null; |
- this._uiLocations[location.id()] = uiLocation; |
- this._breakpoint._replaceUILocation(oldUILocation, uiLocation); |
- }, |
- |
- /** |
- * @param {!WebInspector.DebuggerModel.Location} location |
- * @return {boolean} |
- */ |
- _addResolvedLocation: function(location) |
- { |
- var uiLocation = this._debuggerWorkspaceBinding.rawLocationToUILocation(location); |
- var breakpoint = this._breakpoint._breakpointManager.findBreakpoint(uiLocation.uiSourceCode, uiLocation.lineNumber, uiLocation.columnNumber); |
- if (breakpoint && breakpoint !== this._breakpoint) { |
- // location clash |
- this._breakpoint.remove(); |
- return false; |
- } |
- this._liveLocations.push(this._debuggerWorkspaceBinding.createLiveLocation(location, this._locationUpdated.bind(this, location))); |
- return true; |
- }, |
- |
- _cleanUpAfterDebuggerIsGone: function() |
- { |
- if (this._isUpdating) |
- this._cancelCallback = true; |
- |
- this._resetLocations(); |
- this._currentState = null; |
- if (this._debuggerId) |
- this._didRemoveFromDebugger(function() {}); |
- }, |
- |
- _removeEventListeners: function() |
- { |
- this.target().debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.DebuggerWasDisabled, this._cleanUpAfterDebuggerIsGone, this); |
- this.target().debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.DebuggerWasEnabled, this._scheduleUpdateInDebugger, this); |
- }, |
- |
- __proto__: WebInspector.SDKObject.prototype |
-} |
- |
-/** |
- * @constructor |
- * @param {?string} url |
- * @param {?string} scriptId |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
- * @param {string} condition |
- */ |
-WebInspector.BreakpointManager.Breakpoint.State = function(url, scriptId, lineNumber, columnNumber, condition) |
-{ |
- this.url = url; |
- this.scriptId = scriptId; |
- this.lineNumber = lineNumber; |
- this.columnNumber = columnNumber; |
- this.condition = condition; |
-} |
- |
-/** |
- * @param {?WebInspector.BreakpointManager.Breakpoint.State|undefined} stateA |
- * @param {?WebInspector.BreakpointManager.Breakpoint.State|undefined} stateB |
- * @return {boolean} |
- */ |
-WebInspector.BreakpointManager.Breakpoint.State.equals = function(stateA, stateB) |
-{ |
- if (!stateA || !stateB) |
- return false; |
- |
- if (stateA.scriptId || stateB.scriptId) |
- return false; |
- |
- return stateA.url === stateB.url && stateA.lineNumber === stateB.lineNumber && stateA.columnNumber === stateB.columnNumber && stateA.condition === stateB.condition; |
-} |
- |
-/** |
- * @constructor |
- * @param {!WebInspector.BreakpointManager} breakpointManager |
- * @param {!WebInspector.Setting} setting |
- */ |
-WebInspector.BreakpointManager.Storage = function(breakpointManager, setting) |
-{ |
- this._breakpointManager = breakpointManager; |
- this._setting = setting; |
- var breakpoints = this._setting.get(); |
- /** @type {!Object.<string, !WebInspector.BreakpointManager.Storage.Item>} */ |
- this._breakpoints = {}; |
- for (var i = 0; i < breakpoints.length; ++i) { |
- var breakpoint = /** @type {!WebInspector.BreakpointManager.Storage.Item} */ (breakpoints[i]); |
- breakpoint.columnNumber = breakpoint.columnNumber || 0; |
- this._breakpoints[breakpoint.sourceFileId + ":" + breakpoint.lineNumber + ":" + breakpoint.columnNumber] = breakpoint; |
- } |
-} |
- |
-WebInspector.BreakpointManager.Storage.prototype = { |
- mute: function() |
- { |
- this._muted = true; |
- }, |
- |
- unmute: function() |
- { |
- delete this._muted; |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- * @return {!Array.<!WebInspector.BreakpointManager.Storage.Item>} |
- */ |
- breakpointItems: function(uiSourceCode) |
- { |
- var result = []; |
- var sourceFileId = WebInspector.BreakpointManager._sourceFileId(uiSourceCode); |
- for (var id in this._breakpoints) { |
- var breakpoint = this._breakpoints[id]; |
- if (breakpoint.sourceFileId === sourceFileId) |
- result.push(breakpoint); |
- } |
- return result; |
- }, |
- |
- /** |
- * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint |
- */ |
- _updateBreakpoint: function(breakpoint) |
- { |
- if (this._muted || !breakpoint._breakpointStorageId()) |
- return; |
- this._breakpoints[breakpoint._breakpointStorageId()] = new WebInspector.BreakpointManager.Storage.Item(breakpoint); |
- this._save(); |
- }, |
- |
- /** |
- * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint |
- */ |
- _removeBreakpoint: function(breakpoint) |
- { |
- if (this._muted) |
- return; |
- delete this._breakpoints[breakpoint._breakpointStorageId()]; |
- this._save(); |
- }, |
- |
- _save: function() |
- { |
- var breakpointsArray = []; |
- for (var id in this._breakpoints) |
- breakpointsArray.push(this._breakpoints[id]); |
- this._setting.set(breakpointsArray); |
- } |
-} |
- |
-/** |
- * @constructor |
- * @param {!WebInspector.BreakpointManager.Breakpoint} breakpoint |
- */ |
-WebInspector.BreakpointManager.Storage.Item = function(breakpoint) |
-{ |
- this.sourceFileId = breakpoint._sourceFileId; |
- this.lineNumber = breakpoint.lineNumber(); |
- this.columnNumber = breakpoint.columnNumber(); |
- this.condition = breakpoint.condition(); |
- this.enabled = breakpoint.enabled(); |
-} |
- |
-/** @type {!WebInspector.BreakpointManager} */ |
-WebInspector.breakpointManager; |