15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.NativeBreakpointsSidebarPane} 34a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @implements {WebInspector.TargetManager.Observer} 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMBreakpointsSidebarPane = function() 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.NativeBreakpointsSidebarPane.call(this, WebInspector.UIString("DOM Breakpoints")); 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._breakpointElements = {}; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._breakpointTypes = { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SubtreeModified: "subtree-modified", 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AttributeModified: "attribute-modified", 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NodeRemoved: "node-removed" 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._breakpointTypeLabels = {}; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._breakpointTypeLabels[this._breakpointTypes.SubtreeModified] = WebInspector.UIString("Subtree Modified"); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._breakpointTypeLabels[this._breakpointTypes.AttributeModified] = WebInspector.UIString("Attribute Modified"); 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._breakpointTypeLabels[this._breakpointTypes.NodeRemoved] = WebInspector.UIString("Node Removed"); 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contextMenuLabels = {}; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contextMenuLabels[this._breakpointTypes.SubtreeModified] = WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Subtree modifications" : "Subtree Modifications"); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contextMenuLabels[this._breakpointTypes.AttributeModified] = WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Attributes modifications" : "Attributes Modifications"); 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._contextMenuLabels[this._breakpointTypes.NodeRemoved] = WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Node removal" : "Node Removal"); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch WebInspector.targetManager.observeTargets(this); 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMBreakpointsSidebarPane.prototype = { 61a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 62a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {!WebInspector.Target} target 63a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 64a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch targetAdded: function(target) 65a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 66a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.InspectedURLChanged, this._inspectedURLChanged, this); 67a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch target.domModel.addEventListener(WebInspector.DOMModel.Events.NodeRemoved, this._nodeRemoved, this); 68a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 69a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 70a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 71a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {!WebInspector.Target} target 72a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 73a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch targetRemoved: function(target) 74a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 75a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.InspectedURLChanged, this._inspectedURLChanged, this); 76a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch target.domModel.removeEventListener(WebInspector.DOMModel.Events.NodeRemoved, this._nodeRemoved, this); 77a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 78a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _inspectedURLChanged: function(event) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._breakpointElements = {}; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._reset(); 83a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var url = /** @type {string} */ (event.data); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._inspectedURL = url.removeURLFragment(); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 87a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** 88a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DOMNode} node 89a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ContextMenu} contextMenu 90a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */ 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateNodeContextMenu: function(node, contextMenu) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) if (node.pseudoType()) 9406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) return; 9506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nodeBreakpoints = {}; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var id in this._breakpointElements) { 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = this._breakpointElements[id]; 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (element._node === node) 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nodeBreakpoints[element._type] = true; 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} type 10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.DOMBreakpointsSidebarPane} 10609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function toggleBreakpoint(type) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!nodeBreakpoints[type]) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._setBreakpoint(node, type, true); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._removeBreakpoint(node, type); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._saveBreakpoints(); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakPointSubMenu = contextMenu.appendSubMenuItem(WebInspector.UIString("Break on...")); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var key in this._breakpointTypes) { 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var type = this._breakpointTypes[key]; 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var label = this._contextMenuLabels[type]; 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) breakPointSubMenu.appendCheckboxItem(label, toggleBreakpoint.bind(this, type), nodeBreakpoints[type]); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 124aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch /** 125aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.DebuggerPausedDetails} details 126f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {function(!Element)} callback 127aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch */ 128aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch createBreakpointHitStatusMessage: function(details, callback) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 130a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var auxData = /** @type {!Object} */ (details.auxData); 131a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var domModel = details.target().domModel; 132a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (auxData.type === this._breakpointTypes.SubtreeModified) { 133a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var targetNodeObject = details.target().runtimeModel.createRemoteObject(auxData["targetNode"]); 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) targetNodeObject.pushNodeToFrontend(didPushNodeToFrontend.bind(this)); 135a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } else { 136a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._doCreateBreakpointHitStatusMessage(auxData, domModel.nodeForId(auxData.nodeId), null, callback); 137a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 138a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 139a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** 140a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {?WebInspector.DOMNode} targetNode 14109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.DOMBreakpointsSidebarPane} 142a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */ 143a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch function didPushNodeToFrontend(targetNode) 144a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) { 145a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (targetNode) 146a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) targetNodeObject.release(); 147a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._doCreateBreakpointHitStatusMessage(auxData, domModel.nodeForId(auxData.nodeId), targetNode, callback); 148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 151a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 152a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {!Object} auxData 15310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch * @param {?WebInspector.DOMNode} node 154a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {?WebInspector.DOMNode} targetNode 155f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {function(!Element)} callback 156a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 157a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _doCreateBreakpointHitStatusMessage: function(auxData, node, targetNode, callback) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var message; 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var typeLabel = this._breakpointTypeLabels[auxData.type]; 161a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReference(node); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var substitutions = [typeLabel, linkifiedNode]; 163a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var targetNodeLink = ""; 164a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (targetNode) 165a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch targetNodeLink = WebInspector.DOMPresentationUtils.linkifyNodeReference(targetNode); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (auxData.type === this._breakpointTypes.SubtreeModified) { 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (auxData.insertion) { 169a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (targetNode !== node) { 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) message = "Paused on a \"%s\" breakpoint set on %s, because a new child was added to its descendant %s."; 171a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch substitutions.push(targetNodeLink); 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) message = "Paused on a \"%s\" breakpoint set on %s, because a new child was added to that node."; 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) message = "Paused on a \"%s\" breakpoint set on %s, because its descendant %s was removed."; 176a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch substitutions.push(targetNodeLink); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) message = "Paused on a \"%s\" breakpoint set on %s."; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = document.createElement("span"); 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var formatters = { 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) s: function(substitution) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return substitution; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function append(a, b) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (typeof b === "string") 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) b = document.createTextNode(b); 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element.appendChild(b); 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.formatLocalized(message, substitutions, formatters, "", append); 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback(element); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _nodeRemoved: function(event) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var node = event.data.node; 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._removeBreakpointsForNode(event.data.node); 2035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var children = node.children(); 2045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (!children) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) for (var i = 0; i < children.length; ++i) 2075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._removeBreakpointsForNode(children[i]); 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._saveBreakpoints(); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _removeBreakpointsForNode: function(node) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var id in this._breakpointElements) { 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = this._breakpointElements[id]; 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (element._node === node) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._removeBreakpoint(element._node, element._type); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _setBreakpoint: function(node, type, enabled) 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakpointId = this._createBreakpointId(node.id, type); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (breakpointId in this._breakpointElements) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = document.createElement("li"); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element._node = node; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element._type = type; 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element.addEventListener("contextmenu", this._contextMenu.bind(this, node, type), true); 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var checkboxElement = document.createElement("input"); 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) checkboxElement.className = "checkbox-elem"; 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) checkboxElement.type = "checkbox"; 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) checkboxElement.checked = enabled; 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) checkboxElement.addEventListener("click", this._checkboxClicked.bind(this, node, type), false); 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element._checkboxElement = checkboxElement; 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element.appendChild(checkboxElement); 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var labelElement = document.createElement("span"); 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element.appendChild(labelElement); 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 242a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var linkifiedNode = WebInspector.DOMPresentationUtils.linkifyNodeReference(node); 243a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) linkifiedNode.classList.add("monospace"); 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) labelElement.appendChild(linkifiedNode); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var description = document.createElement("div"); 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) description.className = "source-text"; 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) description.textContent = this._breakpointTypeLabels[type]; 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) labelElement.appendChild(description); 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var currentElement = this.listElement.firstChild; 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (currentElement) { 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (currentElement._type && currentElement._type < element._type) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) currentElement = currentElement.nextSibling; 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._addListElement(element, currentElement); 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._breakpointElements[breakpointId] = element; 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (enabled) 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMDebuggerAgent.setDOMBreakpoint(node.id, type); 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _removeAllBreakpoints: function() 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var id in this._breakpointElements) { 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = this._breakpointElements[id]; 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._removeBreakpoint(element._node, element._type); 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._saveBreakpoints(); 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _removeBreakpoint: function(node, type) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakpointId = this._createBreakpointId(node.id, type); 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = this._breakpointElements[breakpointId]; 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!element) 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._removeListElement(element); 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._breakpointElements[breakpointId]; 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (element._checkboxElement.checked) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMDebuggerAgent.removeDOMBreakpoint(node.id, type); 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _contextMenu: function(node, type, event) 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var contextMenu = new WebInspector.ContextMenu(event); 28809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 28909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 29009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.DOMBreakpointsSidebarPane} 29109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function removeBreakpoint() 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._removeBreakpoint(node, type); 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._saveBreakpoints(); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Remove breakpoint" : "Remove Breakpoint"), removeBreakpoint.bind(this)); 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Remove all DOM breakpoints" : "Remove All DOM Breakpoints"), this._removeAllBreakpoints.bind(this)); 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contextMenu.show(); 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _checkboxClicked: function(node, type, event) 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.target.checked) 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMDebuggerAgent.setDOMBreakpoint(node.id, type); 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMDebuggerAgent.removeDOMBreakpoint(node.id, type); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._saveBreakpoints(); 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) highlightBreakpoint: function(auxData) 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakpointId = this._createBreakpointId(auxData.nodeId, auxData.type); 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = this._breakpointElements[breakpointId]; 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!element) 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.expand(); 318a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) element.classList.add("breakpoint-hit"); 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._highlightedElement = element; 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clearBreakpointHighlight: function() 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._highlightedElement) { 325a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._highlightedElement.classList.remove("breakpoint-hit"); 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._highlightedElement; 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _createBreakpointId: function(nodeId, type) 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return nodeId + ":" + type; 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _saveBreakpoints: function() 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakpoints = []; 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var storedBreakpoints = WebInspector.settings.domBreakpoints.get(); 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < storedBreakpoints.length; ++i) { 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakpoint = storedBreakpoints[i]; 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (breakpoint.url !== this._inspectedURL) 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) breakpoints.push(breakpoint); 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var id in this._breakpointElements) { 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = this._breakpointElements[id]; 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) breakpoints.push({ url: this._inspectedURL, path: element._node.path(), type: element._type, enabled: element._checkboxElement.checked }); 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.settings.domBreakpoints.set(breakpoints); 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 351a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 352a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {!WebInspector.Target} target 353a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 354a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch restoreBreakpoints: function(target) 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var pathToBreakpoints = {}; 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3583c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch /** 3593c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * @param {string} path 3603c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * @param {?DOMAgent.NodeId} nodeId 36109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.DOMBreakpointsSidebarPane} 3623c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch */ 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function didPushNodeByPathToFrontend(path, nodeId) 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 365a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var node = nodeId ? target.domModel.nodeForId(nodeId) : null; 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!node) 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakpoints = pathToBreakpoints[path]; 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < breakpoints.length; ++i) 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._setBreakpoint(node, breakpoints[i].type, breakpoints[i].enabled); 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakpoints = WebInspector.settings.domBreakpoints.get(); 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < breakpoints.length; ++i) { 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var breakpoint = breakpoints[i]; 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (breakpoint.url !== this._inspectedURL) 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var path = breakpoint.path; 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!pathToBreakpoints[path]) { 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pathToBreakpoints[path] = []; 382a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch target.domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFrontend.bind(this, path)); 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pathToBreakpoints[path].push(breakpoint); 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 389a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Panel} panel 39009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!WebInspector.DOMBreakpointsSidebarPane.Proxy} 391926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) createProxy: function(panel) 393926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 394926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var proxy = new WebInspector.DOMBreakpointsSidebarPane.Proxy(this, panel); 395926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this._proxies) 396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._proxies = []; 397926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._proxies.push(proxy); 398926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return proxy; 399926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 400926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 401926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) onContentReady: function() 402926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 403926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i != this._proxies.length; i++) 404926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._proxies[i].onContentReady(); 405926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 406926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.NativeBreakpointsSidebarPane.prototype 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 409926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 410926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 411926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 412926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.SidebarPane} 413a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DOMBreakpointsSidebarPane} pane 414a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Panel} panel 415926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 416926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DOMBreakpointsSidebarPane.Proxy = function(pane, panel) 417926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 418926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.View._assert(!pane.titleElement.firstChild, "Cannot create proxy for a sidebar pane with a toolbar"); 419926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 420926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.SidebarPane.call(this, pane.title()); 42153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this.registerRequiredCSS("breakpointsList.css"); 422926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 423926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._wrappedPane = pane; 424926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._panel = panel; 425926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 426591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this.bodyElement.remove(); 427926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.bodyElement = this._wrappedPane.bodyElement; 428926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 429926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 430926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype = { 431926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) expand: function() 432926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 433926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._wrappedPane.expand(); 434926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 435926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 436926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) onContentReady: function() 437926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 438f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (this._panel.isShowing()) 439f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._reattachBody(); 440926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 441926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.SidebarPane.prototype.onContentReady.call(this); 442926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 443926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 444926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) wasShown: function() 445926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 446926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.SidebarPane.prototype.wasShown.call(this); 447926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._reattachBody(); 448926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 449926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 450926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _reattachBody: function() 451926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 452926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this.bodyElement.parentNode !== this.element) 453926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.element.appendChild(this.bodyElement); 454926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 455926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 456926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.SidebarPane.prototype 457926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 458926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 459926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 46009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @type {!WebInspector.DOMBreakpointsSidebarPane} 461926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 46209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.domBreakpointsSidebarPane; 463