| 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 d4c7042de7fd176bc4ae6b874201f19977690e8e..1e0d9b97993cbe2a8bf091494b2c4cfbc747e2c9 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js
|
| @@ -27,401 +27,384 @@
|
| * (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.BreakpointsSidebarPaneBase}
|
| * @implements {WebInspector.ContextFlavorListener}
|
| + * @unrestricted
|
| */
|
| -WebInspector.DOMBreakpointsSidebarPane = function()
|
| -{
|
| - WebInspector.BreakpointsSidebarPaneBase.call(this);
|
| - this._domBreakpointsSetting = WebInspector.settings.createLocalSetting("domBreakpoints", []);
|
| - this.listElement.classList.add("dom-breakpoints-list");
|
| +WebInspector.DOMBreakpointsSidebarPane = class extends WebInspector.BreakpointsSidebarPaneBase {
|
| + constructor() {
|
| + super();
|
| + this._domBreakpointsSetting = WebInspector.settings.createLocalSetting('domBreakpoints', []);
|
| + this.listElement.classList.add('dom-breakpoints-list');
|
|
|
| /** @type {!Map<string, !Element>} */
|
| this._breakpointElements = new Map();
|
|
|
| - WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspector.DOMModel.Events.NodeRemoved, this._nodeRemoved, this);
|
| + WebInspector.targetManager.addModelListener(
|
| + WebInspector.DOMModel, WebInspector.DOMModel.Events.NodeRemoved, this._nodeRemoved, this);
|
| this._update();
|
| -};
|
| -
|
| -WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes = {
|
| - SubtreeModified: "subtree-modified",
|
| - AttributeModified: "attribute-modified",
|
| - NodeRemoved: "node-removed"
|
| -};
|
| -
|
| -WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeLabels = {
|
| - "subtree-modified": WebInspector.UIString("Subtree Modified"),
|
| - "attribute-modified": WebInspector.UIString("Attribute Modified"),
|
| - "node-removed": WebInspector.UIString("Node Removed")
|
| -};
|
| -
|
| -WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeNouns = {
|
| - "subtree-modified": WebInspector.UIString("subtree modifications"),
|
| - "attribute-modified": WebInspector.UIString("attribute modifications"),
|
| - "node-removed": WebInspector.UIString("node removal")
|
| -};
|
| -
|
| -WebInspector.DOMBreakpointsSidebarPane.Marker = "breakpoint-marker";
|
| -
|
| -WebInspector.DOMBreakpointsSidebarPane.prototype = {
|
| - /**
|
| - * @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.has(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 WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes) {
|
| - var type = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes[key];
|
| - var label = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeNouns[type];
|
| - breakpointsMenu.appendCheckboxItem(label, toggleBreakpoint.bind(this, type), nodeBreakpoints.has(type));
|
| - }
|
| - },
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.DebuggerPausedDetails} details
|
| + * @return {!Element}
|
| + */
|
| + static createBreakpointHitMessage(details) {
|
| + var messageWrapper = createElement('span');
|
| + var mainElement = messageWrapper.createChild('div', 'status-main');
|
| + var auxData = /** @type {!Object} */ (details.auxData);
|
| + mainElement.textContent =
|
| + String.sprintf('Paused on %s', WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeNouns[auxData['type']]);
|
|
|
| - /**
|
| - * @param {!WebInspector.DOMNode} node
|
| - * @return {!Set<!DOMDebuggerAgent.DOMBreakpointType>}
|
| - */
|
| - _nodeBreakpoints: function(node)
|
| - {
|
| - /** @type {!Set<!DOMDebuggerAgent.DOMBreakpointType>} */
|
| - var nodeBreakpoints = new Set();
|
| - for (var element of this._breakpointElements.values()) {
|
| - if (element._node === node && element._checkboxElement.checked)
|
| - nodeBreakpoints.add(element._type);
|
| - }
|
| - return nodeBreakpoints;
|
| - },
|
| + var domModel = WebInspector.DOMModel.fromTarget(details.target());
|
| + if (domModel) {
|
| + var subElement = messageWrapper.createChild('div', 'status-sub monospace');
|
| + var node = domModel.nodeForId(auxData['nodeId']);
|
| + var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReference(node);
|
| + subElement.appendChild(linkifiedNode);
|
| +
|
| + var targetNode = auxData['targetNodeId'] ? domModel.nodeForId(auxData['targetNodeId']) : null;
|
| + var targetNodeLink = targetNode ? WebInspector.DOMPresentationUtils.linkifyNodeReference(targetNode) : '';
|
| + var message;
|
| + if (auxData.type === WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes.SubtreeModified) {
|
| + if (auxData['insertion'])
|
| + message = targetNode === node ? 'Child %s added' : 'Descendant %s added';
|
| + else
|
| + message = 'Descendant %s removed';
|
| + subElement.appendChild(createElement('br'));
|
| + subElement.appendChild(WebInspector.formatLocalized(message, [targetNodeLink]));
|
| + }
|
| + }
|
| + return messageWrapper;
|
| + }
|
|
|
| - /**
|
| - * @param {!WebInspector.DOMNode} node
|
| - * @return {boolean}
|
| - */
|
| - hasBreakpoints: function(node)
|
| - {
|
| - for (var element of this._breakpointElements.values()) {
|
| - if (element._node === node && element._checkboxElement.checked)
|
| - return true;
|
| - }
|
| - return false;
|
| - },
|
| -
|
| - _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
|
| + * @param {!WebInspector.ContextMenu} contextMenu
|
| + * @param {boolean} createSubMenu
|
| + */
|
| + populateNodeContextMenu(node, contextMenu, createSubMenu) {
|
| + if (node.pseudoType())
|
| + return;
|
|
|
| - /**
|
| - * @param {!WebInspector.DOMNode} node
|
| - */
|
| - _removeBreakpointsForNode: function(node)
|
| - {
|
| - for (var element of this._breakpointElements.values()) {
|
| - if (element._node === node)
|
| - this._removeBreakpoint(element._node, element._type);
|
| - }
|
| - },
|
| + var nodeBreakpoints = this._nodeBreakpoints(node);
|
|
|
| /**
|
| - * @param {!WebInspector.DOMNode} node
|
| * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| - * @param {boolean} enabled
|
| + * @this {WebInspector.DOMBreakpointsSidebarPane}
|
| */
|
| - _setBreakpoint: function(node, type, enabled)
|
| - {
|
| - var breakpointId = this._createBreakpointId(node.id, type);
|
| - var breakpointElement = this._breakpointElements.get(breakpointId);
|
| - if (!breakpointElement) {
|
| - breakpointElement = this._createBreakpointElement(node, type, enabled);
|
| - this._breakpointElements.set(breakpointId, breakpointElement);
|
| - } else {
|
| - breakpointElement._checkboxElement.checked = enabled;
|
| - }
|
| - if (enabled)
|
| - node.target().domdebuggerAgent().setDOMBreakpoint(node.id, type);
|
| - node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, true);
|
| - },
|
| + function toggleBreakpoint(type) {
|
| + if (!nodeBreakpoints.has(type))
|
| + this._setBreakpoint(node, type, true);
|
| + else
|
| + this._removeBreakpoint(node, type);
|
| + this._saveBreakpoints();
|
| + }
|
|
|
| - /**
|
| - * @param {!WebInspector.DOMNode} node
|
| - * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| - * @param {boolean} enabled
|
| - */
|
| - _createBreakpointElement: function(node, type, enabled)
|
| - {
|
| - var element = createElement("li");
|
| - element._node = node;
|
| - element._type = type;
|
| - element.addEventListener("contextmenu", this._contextMenu.bind(this, node, type), true);
|
| -
|
| - var checkboxLabel = createCheckboxLabel("", enabled);
|
| - var checkboxElement = checkboxLabel.checkboxElement;
|
| - checkboxElement.addEventListener("click", this._checkboxClicked.bind(this, node, type), false);
|
| - element._checkboxElement = checkboxElement;
|
| - element.appendChild(checkboxLabel);
|
| -
|
| - var labelElement = createElementWithClass("div", "dom-breakpoint");
|
| - element.appendChild(labelElement);
|
| -
|
| - var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReference(node);
|
| - linkifiedNode.classList.add("monospace");
|
| - linkifiedNode.style.display = "block";
|
| - labelElement.appendChild(linkifiedNode);
|
| -
|
| - var description = createElement("div");
|
| - description.textContent = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeLabels[type];
|
| - labelElement.appendChild(description);
|
| -
|
| - var currentElement = this.listElement.firstChild;
|
| - while (currentElement) {
|
| - if (currentElement._type && currentElement._type < element._type)
|
| - break;
|
| - currentElement = currentElement.nextSibling;
|
| - }
|
| - this.addListElement(element, currentElement);
|
| - return element;
|
| - },
|
| -
|
| - _removeAllBreakpoints: function()
|
| - {
|
| - for (var element of this._breakpointElements.values())
|
| - this._removeBreakpoint(element._node, element._type);
|
| - this._saveBreakpoints();
|
| - },
|
| + var breakpointsMenu =
|
| + createSubMenu ? contextMenu.appendSubMenuItem(WebInspector.UIString('Break on...')) : contextMenu;
|
| + for (var key in WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes) {
|
| + var type = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes[key];
|
| + var label = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeNouns[type];
|
| + breakpointsMenu.appendCheckboxItem(label, toggleBreakpoint.bind(this, type), nodeBreakpoints.has(type));
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.DOMNode} node
|
| + * @return {!Set<!DOMDebuggerAgent.DOMBreakpointType>}
|
| + */
|
| + _nodeBreakpoints(node) {
|
| + /** @type {!Set<!DOMDebuggerAgent.DOMBreakpointType>} */
|
| + var nodeBreakpoints = new Set();
|
| + for (var element of this._breakpointElements.values()) {
|
| + if (element._node === node && element._checkboxElement.checked)
|
| + nodeBreakpoints.add(element._type);
|
| + }
|
| + return nodeBreakpoints;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.DOMNode} node
|
| + * @return {boolean}
|
| + */
|
| + hasBreakpoints(node) {
|
| + for (var element of this._breakpointElements.values()) {
|
| + if (element._node === node && element._checkboxElement.checked)
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + _nodeRemoved(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(node) {
|
| + for (var element of this._breakpointElements.values()) {
|
| + if (element._node === node)
|
| + this._removeBreakpoint(element._node, element._type);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.DOMNode} node
|
| + * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| + * @param {boolean} enabled
|
| + */
|
| + _setBreakpoint(node, type, enabled) {
|
| + var breakpointId = this._createBreakpointId(node.id, type);
|
| + var breakpointElement = this._breakpointElements.get(breakpointId);
|
| + if (!breakpointElement) {
|
| + breakpointElement = this._createBreakpointElement(node, type, enabled);
|
| + this._breakpointElements.set(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(node, type, enabled) {
|
| + var element = createElement('li');
|
| + element._node = node;
|
| + element._type = type;
|
| + element.addEventListener('contextmenu', this._contextMenu.bind(this, node, type), true);
|
| +
|
| + var checkboxLabel = createCheckboxLabel('', enabled);
|
| + var checkboxElement = checkboxLabel.checkboxElement;
|
| + checkboxElement.addEventListener('click', this._checkboxClicked.bind(this, node, type), false);
|
| + element._checkboxElement = checkboxElement;
|
| + element.appendChild(checkboxLabel);
|
| +
|
| + var labelElement = createElementWithClass('div', 'dom-breakpoint');
|
| + element.appendChild(labelElement);
|
| +
|
| + var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReference(node);
|
| + linkifiedNode.classList.add('monospace');
|
| + linkifiedNode.style.display = 'block';
|
| + labelElement.appendChild(linkifiedNode);
|
| +
|
| + var description = createElement('div');
|
| + description.textContent = WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeLabels[type];
|
| + labelElement.appendChild(description);
|
| +
|
| + var currentElement = this.listElement.firstChild;
|
| + while (currentElement) {
|
| + if (currentElement._type && currentElement._type < element._type)
|
| + break;
|
| + currentElement = currentElement.nextSibling;
|
| + }
|
| + this.addListElement(element, currentElement);
|
| + return element;
|
| + }
|
| +
|
| + _removeAllBreakpoints() {
|
| + for (var element of this._breakpointElements.values())
|
| + this._removeBreakpoint(element._node, element._type);
|
| + this._saveBreakpoints();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.DOMNode} node
|
| + * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| + */
|
| + _removeBreakpoint(node, type) {
|
| + var breakpointId = this._createBreakpointId(node.id, type);
|
| + var element = this._breakpointElements.get(breakpointId);
|
| + if (!element)
|
| + return;
|
| +
|
| + this.removeListElement(element);
|
| + this._breakpointElements.delete(breakpointId);
|
| + if (element._checkboxElement.checked)
|
| + node.target().domdebuggerAgent().removeDOMBreakpoint(node.id, type);
|
| + node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, this.hasBreakpoints(node) ? true : null);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.DOMNode} node
|
| + * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| + * @param {!Event} event
|
| + */
|
| + _contextMenu(node, type, event) {
|
| + var contextMenu = new WebInspector.ContextMenu(event);
|
|
|
| /**
|
| - * @param {!WebInspector.DOMNode} node
|
| - * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| + * @this {WebInspector.DOMBreakpointsSidebarPane}
|
| */
|
| - _removeBreakpoint: function(node, type)
|
| - {
|
| - var breakpointId = this._createBreakpointId(node.id, type);
|
| - var element = this._breakpointElements.get(breakpointId);
|
| - if (!element)
|
| - return;
|
| -
|
| - this.removeListElement(element);
|
| - this._breakpointElements.delete(breakpointId);
|
| - if (element._checkboxElement.checked)
|
| - node.target().domdebuggerAgent().removeDOMBreakpoint(node.id, type);
|
| - node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, this.hasBreakpoints(node) ? true : null);
|
| - },
|
| + 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));
|
| + contextMenu.show();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.DOMNode} node
|
| + * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| + * @param {!Event} event
|
| + */
|
| + _checkboxClicked(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
|
| + */
|
| + flavorChanged(object) {
|
| + this._update();
|
| + }
|
| +
|
| + _update() {
|
| + var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDetails);
|
| + if (!details || details.reason !== WebInspector.DebuggerModel.BreakReason.DOM) {
|
| + if (this._highlightedElement) {
|
| + this._highlightedElement.classList.remove('breakpoint-hit');
|
| + delete this._highlightedElement;
|
| + }
|
| + return;
|
| + }
|
| + var auxData = details.auxData;
|
| + var breakpointId = this._createBreakpointId(auxData.nodeId, auxData.type);
|
| + var element = this._breakpointElements.get(breakpointId);
|
| + if (!element)
|
| + return;
|
| + WebInspector.viewManager.showView('sources.domBreakpoints');
|
| + element.classList.add('breakpoint-hit');
|
| + this._highlightedElement = element;
|
| + }
|
| +
|
| + /**
|
| + * @param {number} nodeId
|
| + * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| + */
|
| + _createBreakpointId(nodeId, type) {
|
| + return nodeId + ':' + type;
|
| + }
|
| +
|
| + _saveBreakpoints() {
|
| + 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 element of this._breakpointElements.values())
|
| + breakpoints.push({
|
| + url: this._inspectedURL,
|
| + path: element._node.path(),
|
| + type: element._type,
|
| + enabled: element._checkboxElement.checked
|
| + });
|
| + this._domBreakpointsSetting.set(breakpoints);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.DOMDocument} domDocument
|
| + */
|
| + restoreBreakpoints(domDocument) {
|
| + this._breakpointElements.clear();
|
| + this.reset();
|
| + this._inspectedURL = domDocument.documentURL;
|
| + var domModel = domDocument.domModel();
|
| + /** @type {!Map<string, !Array<!Object>>} */
|
| + var pathToBreakpoints = new Map();
|
|
|
| /**
|
| - * @param {!WebInspector.DOMNode} node
|
| - * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| - * @param {!Event} event
|
| + * @param {string} path
|
| + * @param {?DOMAgent.NodeId} nodeId
|
| + * @this {WebInspector.DOMBreakpointsSidebarPane}
|
| */
|
| - _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));
|
| - contextMenu.show();
|
| - },
|
| + function didPushNodeByPathToFrontend(path, nodeId) {
|
| + var node = nodeId ? domModel.nodeForId(nodeId) : null;
|
| + if (!node)
|
| + return;
|
| +
|
| + var breakpoints = pathToBreakpoints.get(path);
|
| + for (var i = 0; i < breakpoints.length; ++i)
|
| + this._setBreakpoint(node, breakpoints[i].type, breakpoints[i].enabled);
|
| + }
|
|
|
| - /**
|
| - * @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();
|
| - },
|
| + 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.has(path)) {
|
| + pathToBreakpoints.set(path, []);
|
| + domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFrontend.bind(this, path));
|
| + }
|
| + pathToBreakpoints.get(path).push(breakpoint);
|
| + }
|
| + }
|
| +};
|
|
|
| - /**
|
| - * @override
|
| - * @param {?Object} object
|
| - */
|
| - flavorChanged: function(object)
|
| - {
|
| - this._update();
|
| - },
|
| -
|
| - _update: function()
|
| - {
|
| - var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDetails);
|
| - if (!details || details.reason !== WebInspector.DebuggerModel.BreakReason.DOM) {
|
| - if (this._highlightedElement) {
|
| - this._highlightedElement.classList.remove("breakpoint-hit");
|
| - delete this._highlightedElement;
|
| - }
|
| - return;
|
| - }
|
| - var auxData = details.auxData;
|
| - var breakpointId = this._createBreakpointId(auxData.nodeId, auxData.type);
|
| - var element = this._breakpointElements.get(breakpointId);
|
| - if (!element)
|
| - return;
|
| - WebInspector.viewManager.showView("sources.domBreakpoints");
|
| - element.classList.add("breakpoint-hit");
|
| - this._highlightedElement = element;
|
| - },
|
| +WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes = {
|
| + SubtreeModified: 'subtree-modified',
|
| + AttributeModified: 'attribute-modified',
|
| + NodeRemoved: 'node-removed'
|
| +};
|
|
|
| - /**
|
| - * @param {number} nodeId
|
| - * @param {!DOMDebuggerAgent.DOMBreakpointType} type
|
| - */
|
| - _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 element of this._breakpointElements.values())
|
| - breakpoints.push({ url: this._inspectedURL, path: element._node.path(), type: element._type, enabled: element._checkboxElement.checked });
|
| - this._domBreakpointsSetting.set(breakpoints);
|
| - },
|
| +WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeLabels = {
|
| + 'subtree-modified': WebInspector.UIString('Subtree Modified'),
|
| + 'attribute-modified': WebInspector.UIString('Attribute Modified'),
|
| + 'node-removed': WebInspector.UIString('Node Removed')
|
| +};
|
|
|
| - /**
|
| - * @param {!WebInspector.DOMDocument} domDocument
|
| - */
|
| - restoreBreakpoints: function(domDocument)
|
| - {
|
| - this._breakpointElements.clear();
|
| - this.reset();
|
| - this._inspectedURL = domDocument.documentURL;
|
| - var domModel = domDocument.domModel();
|
| - /** @type {!Map<string, !Array<!Object>>} */
|
| - var pathToBreakpoints = new Map();
|
| -
|
| - /**
|
| - * @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.get(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.has(path)) {
|
| - pathToBreakpoints.set(path, []);
|
| - domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFrontend.bind(this, path));
|
| - }
|
| - pathToBreakpoints.get(path).push(breakpoint);
|
| - }
|
| - },
|
| -
|
| - __proto__: WebInspector.BreakpointsSidebarPaneBase.prototype
|
| +WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeNouns = {
|
| + 'subtree-modified': WebInspector.UIString('subtree modifications'),
|
| + 'attribute-modified': WebInspector.UIString('attribute modifications'),
|
| + 'node-removed': WebInspector.UIString('node removal')
|
| };
|
|
|
| -/**
|
| - * @param {!WebInspector.DebuggerPausedDetails} details
|
| - * @return {!Element}
|
| - */
|
| -WebInspector.DOMBreakpointsSidebarPane.createBreakpointHitMessage = function(details)
|
| -{
|
| - var messageWrapper = createElement("span");
|
| - var mainElement = messageWrapper.createChild("div", "status-main");
|
| - var auxData = /** @type {!Object} */ (details.auxData);
|
| - mainElement.textContent = String.sprintf("Paused on %s", WebInspector.DOMBreakpointsSidebarPane.BreakpointTypeNouns[auxData["type"]]);
|
| +WebInspector.DOMBreakpointsSidebarPane.Marker = 'breakpoint-marker';
|
|
|
| - var domModel = WebInspector.DOMModel.fromTarget(details.target());
|
| - if (domModel) {
|
| - var subElement = messageWrapper.createChild("div", "status-sub monospace");
|
| - var node = domModel.nodeForId(auxData["nodeId"]);
|
| - var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReference(node);
|
| - subElement.appendChild(linkifiedNode);
|
| -
|
| - var targetNode = auxData["targetNodeId"] ? domModel.nodeForId(auxData["targetNodeId"]) : null;
|
| - var targetNodeLink = targetNode ? WebInspector.DOMPresentationUtils.linkifyNodeReference(targetNode) : "";
|
| - var message;
|
| - if (auxData.type === WebInspector.DOMBreakpointsSidebarPane.BreakpointTypes.SubtreeModified) {
|
| - if (auxData["insertion"])
|
| - message = targetNode === node ? "Child %s added" : "Descendant %s added";
|
| - else
|
| - message = "Descendant %s removed";
|
| - subElement.appendChild(createElement("br"));
|
| - subElement.appendChild(WebInspector.formatLocalized(message, [targetNodeLink]));
|
| - }
|
| - }
|
| - return messageWrapper;
|
| -};
|
|
|
| /**
|
| - * @constructor
|
| - * @extends {WebInspector.VBox}
|
| + * @unrestricted
|
| */
|
| -WebInspector.DOMBreakpointsSidebarPane.Proxy = function()
|
| -{
|
| - WebInspector.VBox.call(this);
|
| - this.registerRequiredCSS("components/breakpointsList.css");
|
| -};
|
| -
|
| -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.Proxy = class extends WebInspector.VBox {
|
| + constructor() {
|
| + super();
|
| + this.registerRequiredCSS('components/breakpointsList.css');
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + wasShown() {
|
| + super.wasShown();
|
| + var pane = WebInspector.domBreakpointsSidebarPane;
|
| + if (pane.element.parentNode !== this.element)
|
| + pane.show(this.element);
|
| + }
|
| };
|
|
|
| /**
|
|
|