Index: third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js b/third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js |
index fe4246383828943b93ef1a2347834d3ed0f61e9d..0fd44be807054ad300bd3a16c31e27259ee6a2eb 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js |
+++ b/third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js |
@@ -36,165 +36,27 @@ |
WebInspector.DOMBreakpointsSidebarPane = function() |
{ |
WebInspector.BreakpointsSidebarPaneBase.call(this); |
+ this.registerRequiredCSS("components/breakpointsList.css"); |
this._domBreakpointsSetting = WebInspector.settings.createLocalSetting("domBreakpoints", []); |
this.listElement.classList.add("dom-breakpoints-list"); |
- this._breakpointElements = {}; |
- |
- this._breakpointTypes = { |
- SubtreeModified: "subtree-modified", |
- AttributeModified: "attribute-modified", |
- NodeRemoved: "node-removed" |
- }; |
- this._breakpointTypeLabels = {}; |
- this._breakpointTypeLabels[this._breakpointTypes.SubtreeModified] = WebInspector.UIString("Subtree Modified"); |
- this._breakpointTypeLabels[this._breakpointTypes.AttributeModified] = WebInspector.UIString("Attribute Modified"); |
- this._breakpointTypeLabels[this._breakpointTypes.NodeRemoved] = WebInspector.UIString("Node Removed"); |
+ /** @type {!Map<string, !Element>} */ |
+ this._breakpointElements = new Map(); |
- this._contextMenuLabels = {}; |
- this._contextMenuLabels[this._breakpointTypes.SubtreeModified] = WebInspector.UIString.capitalize("Subtree ^modifications"); |
- this._contextMenuLabels[this._breakpointTypes.AttributeModified] = WebInspector.UIString.capitalize("Attributes ^modifications"); |
- this._contextMenuLabels[this._breakpointTypes.NodeRemoved] = WebInspector.UIString.capitalize("Node ^removal"); |
- |
- WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspector.DOMModel.Events.NodeRemoved, this._nodeRemoved, this); |
- WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.InspectedURLChanged, this._inspectedURLChanged, this); |
- this._inspectedURL = WebInspector.targetManager.inspectedURL(); |
+ WebInspector.domBreakpointManager.addEventListener(WebInspector.DOMBreakpointManager.Events.BreakpointsChanged, this._reloadBreakpointElements, this); |
this._update(); |
+ this._reloadBreakpointElements(); |
} |
-WebInspector.DOMBreakpointsSidebarPane.Marker = "breakpoint-marker"; |
- |
WebInspector.DOMBreakpointsSidebarPane.prototype = { |
- _inspectedURLChanged: function() |
+ _reloadBreakpointElements: function() |
{ |
- this._breakpointElements = {}; |
+ this._breakpointElements.clear(); |
this.reset(); |
- this._inspectedURL = WebInspector.targetManager.inspectedURL(); |
- }, |
- |
- /** |
- * @param {!WebInspector.DOMNode} node |
- * @param {!WebInspector.ContextMenu} contextMenu |
- * @param {boolean} createSubMenu |
- */ |
- populateNodeContextMenu: function(node, contextMenu, createSubMenu) |
- { |
- if (node.pseudoType()) |
- return; |
- |
- var nodeBreakpoints = this._nodeBreakpoints(node); |
- |
- /** |
- * @param {!DOMDebuggerAgent.DOMBreakpointType} type |
- * @this {WebInspector.DOMBreakpointsSidebarPane} |
- */ |
- function toggleBreakpoint(type) |
- { |
- if (!nodeBreakpoints[type]) |
- this._setBreakpoint(node, type, true); |
- else |
- this._removeBreakpoint(node, type); |
- this._saveBreakpoints(); |
- } |
- |
- var breakpointsMenu = createSubMenu ? contextMenu.appendSubMenuItem(WebInspector.UIString("Break on...")) : contextMenu; |
- for (var key in this._breakpointTypes) { |
- var type = this._breakpointTypes[key]; |
- var label = this._contextMenuLabels[type]; |
- breakpointsMenu.appendCheckboxItem(label, toggleBreakpoint.bind(this, type), nodeBreakpoints[type]); |
- } |
- }, |
- |
- /** |
- * @param {!WebInspector.DOMNode} node |
- * @return {!Object<string, boolean>} |
- */ |
- _nodeBreakpoints: function(node) |
- { |
- var nodeBreakpoints = {}; |
- for (var id in this._breakpointElements) { |
- var element = this._breakpointElements[id]; |
- if (element._node === node && element._checkboxElement.checked) |
- nodeBreakpoints[element._type] = true; |
- } |
- return nodeBreakpoints; |
- }, |
- |
- /** |
- * @param {!WebInspector.DOMNode} node |
- * @return {boolean} |
- */ |
- hasBreakpoints: function(node) |
- { |
- for (var id in this._breakpointElements) { |
- var element = this._breakpointElements[id]; |
- if (element._node === node && element._checkboxElement.checked) |
- return true; |
- } |
- return false; |
- }, |
- |
- /** |
- * @param {!WebInspector.DebuggerPausedDetails} details |
- * @return {!Element} |
- */ |
- createBreakpointHitStatusMessage: function(details) |
- { |
- var auxData = /** @type {!Object} */ (details.auxData); |
- var message = "Paused on a \"%s\" breakpoint."; |
- var substitutions = []; |
- substitutions.push(this._breakpointTypeLabels[auxData["type"]]); |
- |
- var domModel = WebInspector.DOMModel.fromTarget(details.target()); |
- if (!domModel) |
- return WebInspector.formatLocalized(message, substitutions); |
- |
- var node = domModel.nodeForId(auxData["nodeId"]); |
- var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReference(node); |
- substitutions.push(linkifiedNode); |
- |
- var targetNode = auxData["targetNodeId"] ? domModel.nodeForId(auxData["targetNodeId"]) : null; |
- var targetNodeLink = targetNode ? WebInspector.DOMPresentationUtils.linkifyNodeReference(targetNode) : ""; |
- |
- if (auxData.type === this._breakpointTypes.SubtreeModified) { |
- if (auxData["insertion"]) { |
- if (targetNode !== node) { |
- message = "Paused on a \"%s\" breakpoint set on %s, because a new child was added to its descendant %s."; |
- substitutions.push(targetNodeLink); |
- } else |
- message = "Paused on a \"%s\" breakpoint set on %s, because a new child was added to that node."; |
- } else { |
- message = "Paused on a \"%s\" breakpoint set on %s, because its descendant %s was removed."; |
- substitutions.push(targetNodeLink); |
- } |
- } else { |
- message = "Paused on a \"%s\" breakpoint set on %s."; |
- } |
- |
- return WebInspector.formatLocalized(message, substitutions); |
- }, |
- |
- _nodeRemoved: function(event) |
- { |
- var node = event.data.node; |
- this._removeBreakpointsForNode(event.data.node); |
- var children = node.children(); |
- if (!children) |
- return; |
- for (var i = 0; i < children.length; ++i) |
- this._removeBreakpointsForNode(children[i]); |
- this._saveBreakpoints(); |
- }, |
- |
- /** |
- * @param {!WebInspector.DOMNode} node |
- */ |
- _removeBreakpointsForNode: function(node) |
- { |
- for (var id in this._breakpointElements) { |
- var element = this._breakpointElements[id]; |
- if (element._node === node) |
- this._removeBreakpoint(element._node, element._type); |
+ var breakpoints = WebInspector.domBreakpointManager.domBreakpoints(); |
+ for (var breakpoint of breakpoints) { |
+ var id = this._createBreakpointId(breakpoint.node.id, breakpoint.type); |
+ this._breakpointElements.set(id, this._createBreakpointElement(breakpoint.node, breakpoint.type, breakpoint.enabled)); |
} |
}, |
@@ -203,26 +65,6 @@ WebInspector.DOMBreakpointsSidebarPane.prototype = { |
* @param {!DOMDebuggerAgent.DOMBreakpointType} type |
* @param {boolean} enabled |
*/ |
- _setBreakpoint: function(node, type, enabled) |
- { |
- var breakpointId = this._createBreakpointId(node.id, type); |
- var breakpointElement = this._breakpointElements[breakpointId]; |
- if (!breakpointElement) { |
- breakpointElement = this._createBreakpointElement(node, type, enabled); |
- this._breakpointElements[breakpointId] = breakpointElement; |
- } else { |
- breakpointElement._checkboxElement.checked = enabled; |
- } |
- if (enabled) |
- node.target().domdebuggerAgent().setDOMBreakpoint(node.id, type); |
- node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, true); |
- }, |
- |
- /** |
- * @param {!WebInspector.DOMNode} node |
- * @param {!DOMDebuggerAgent.DOMBreakpointType} type |
- * @param {boolean} enabled |
- */ |
_createBreakpointElement: function(node, type, enabled) |
{ |
var element = createElement("li"); |
@@ -244,7 +86,7 @@ WebInspector.DOMBreakpointsSidebarPane.prototype = { |
labelElement.appendChild(linkifiedNode); |
var description = createElement("div"); |
- description.textContent = this._breakpointTypeLabels[type]; |
+ description.textContent = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeLabels[type]; |
labelElement.appendChild(description); |
var currentElement = this.listElement.firstChild; |
@@ -257,31 +99,14 @@ WebInspector.DOMBreakpointsSidebarPane.prototype = { |
return element; |
}, |
- _removeAllBreakpoints: function() |
- { |
- for (var id in this._breakpointElements) { |
- var element = this._breakpointElements[id]; |
- this._removeBreakpoint(element._node, element._type); |
- } |
- this._saveBreakpoints(); |
- }, |
- |
/** |
* @param {!WebInspector.DOMNode} node |
* @param {!DOMDebuggerAgent.DOMBreakpointType} type |
+ * @param {!Event} event |
*/ |
- _removeBreakpoint: function(node, type) |
+ _checkboxClicked: function(node, type, event) |
{ |
- var breakpointId = this._createBreakpointId(node.id, type); |
- var element = this._breakpointElements[breakpointId]; |
- if (!element) |
- return; |
- |
- this.removeListElement(element); |
- delete this._breakpointElements[breakpointId]; |
- if (element._checkboxElement.checked) |
- node.target().domdebuggerAgent().removeDOMBreakpoint(node.id, type); |
- node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, this.hasBreakpoints(node) ? true : null); |
+ WebInspector.domBreakpointManager.setBreakpoint(node, type, event.target["checkboxElement"].checked); |
}, |
/** |
@@ -292,35 +117,14 @@ WebInspector.DOMBreakpointsSidebarPane.prototype = { |
_contextMenu: function(node, type, event) |
{ |
var contextMenu = new WebInspector.ContextMenu(event); |
- |
- /** |
- * @this {WebInspector.DOMBreakpointsSidebarPane} |
- */ |
- function removeBreakpoint() |
- { |
- this._removeBreakpoint(node, type); |
- this._saveBreakpoints(); |
- } |
- contextMenu.appendItem(WebInspector.UIString.capitalize("Remove ^breakpoint"), removeBreakpoint.bind(this)); |
- contextMenu.appendItem(WebInspector.UIString.capitalize("Remove ^all DOM breakpoints"), this._removeAllBreakpoints.bind(this)); |
+ var removeBreakpoint = () => WebInspector.domBreakpointManager.removeBreakpoint(node, type); |
+ contextMenu.appendItem(WebInspector.UIString.capitalize("Remove ^breakpoint"), removeBreakpoint); |
+ var removeAllBreakpoints = () => WebInspector.domBreakpointManager.removeAllBreakpoints(); |
+ contextMenu.appendItem(WebInspector.UIString.capitalize("Remove ^all DOM breakpoints"), removeAllBreakpoints); |
contextMenu.show(); |
}, |
/** |
- * @param {!WebInspector.DOMNode} node |
- * @param {!DOMDebuggerAgent.DOMBreakpointType} type |
- * @param {!Event} event |
- */ |
- _checkboxClicked: function(node, type, event) |
- { |
- if (event.target.checked) |
- node.target().domdebuggerAgent().setDOMBreakpoint(node.id, type); |
- else |
- node.target().domdebuggerAgent().removeDOMBreakpoint(node.id, type); |
- this._saveBreakpoints(); |
- }, |
- |
- /** |
* @override |
* @param {?Object} object |
*/ |
@@ -341,7 +145,7 @@ WebInspector.DOMBreakpointsSidebarPane.prototype = { |
} |
var auxData = details.auxData; |
var breakpointId = this._createBreakpointId(auxData.nodeId, auxData.type); |
- var element = this._breakpointElements[breakpointId]; |
+ var element = this._breakpointElements.get(breakpointId); |
if (!element) |
return; |
WebInspector.viewManager.showView("sources.domBreakpoints"); |
@@ -352,91 +156,30 @@ WebInspector.DOMBreakpointsSidebarPane.prototype = { |
/** |
* @param {number} nodeId |
* @param {!DOMDebuggerAgent.DOMBreakpointType} type |
+ * @return {string} |
*/ |
_createBreakpointId: function(nodeId, type) |
{ |
return nodeId + ":" + type; |
}, |
- _saveBreakpoints: function() |
- { |
- var breakpoints = []; |
- var storedBreakpoints = this._domBreakpointsSetting.get(); |
- for (var i = 0; i < storedBreakpoints.length; ++i) { |
- var breakpoint = storedBreakpoints[i]; |
- if (breakpoint.url !== this._inspectedURL) |
- breakpoints.push(breakpoint); |
- } |
- for (var id in this._breakpointElements) { |
- var element = this._breakpointElements[id]; |
- breakpoints.push({ url: this._inspectedURL, path: element._node.path(), type: element._type, enabled: element._checkboxElement.checked }); |
- } |
- this._domBreakpointsSetting.set(breakpoints); |
- }, |
- |
- /** |
- * @param {!WebInspector.DOMModel} domModel |
- */ |
- restoreBreakpoints: function(domModel) |
- { |
- var pathToBreakpoints = {}; |
- |
- /** |
- * @param {string} path |
- * @param {?DOMAgent.NodeId} nodeId |
- * @this {WebInspector.DOMBreakpointsSidebarPane} |
- */ |
- function didPushNodeByPathToFrontend(path, nodeId) |
- { |
- var node = nodeId ? domModel.nodeForId(nodeId) : null; |
- if (!node) |
- return; |
- |
- var breakpoints = pathToBreakpoints[path]; |
- for (var i = 0; i < breakpoints.length; ++i) |
- this._setBreakpoint(node, breakpoints[i].type, breakpoints[i].enabled); |
- } |
- |
- var breakpoints = this._domBreakpointsSetting.get(); |
- for (var i = 0; i < breakpoints.length; ++i) { |
- var breakpoint = breakpoints[i]; |
- if (breakpoint.url !== this._inspectedURL) |
- continue; |
- var path = breakpoint.path; |
- if (!pathToBreakpoints[path]) { |
- pathToBreakpoints[path] = []; |
- domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFrontend.bind(this, path)); |
- } |
- pathToBreakpoints[path].push(breakpoint); |
- } |
- }, |
- |
__proto__: WebInspector.BreakpointsSidebarPaneBase.prototype |
} |
-/** |
- * @constructor |
- * @extends {WebInspector.VBox} |
- */ |
-WebInspector.DOMBreakpointsSidebarPane.Proxy = function() |
-{ |
- WebInspector.VBox.call(this); |
- this.registerRequiredCSS("components/breakpointsList.css"); |
+WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes = { |
+ SubtreeModified: "subtree-modified", |
+ AttributeModified: "attribute-modified", |
+ NodeRemoved: "node-removed" |
} |
-WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype = { |
- wasShown: function() |
- { |
- WebInspector.SimpleView.prototype.wasShown.call(this); |
- var pane = WebInspector.domBreakpointsSidebarPane; |
- if (pane.element.parentNode !== this.element) |
- pane.show(this.element); |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
+WebInspector.DOMBreakpointsSidebarPane.ContextMenuLabels = { |
+ [WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes.SubtreeModified]: WebInspector.UIString.capitalize("Subtree ^modifications"), |
+ [WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes.AttributeModified]: WebInspector.UIString.capitalize("Attributes ^modifications"), |
+ [WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes.NodeRemoved]: WebInspector.UIString.capitalize("Node ^removal") |
} |
-/** |
- * @type {!WebInspector.DOMBreakpointsSidebarPane} |
- */ |
-WebInspector.domBreakpointsSidebarPane; |
+WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeLabels = { |
+ [WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes.AttributeModified]: WebInspector.UIString("Attribute Modified"), |
+ [WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes.SubtreeModified]: WebInspector.UIString("Subtree Modified"), |
+ [WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes.NodeRemoved]: WebInspector.UIString("Node Removed") |
+} |