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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/components/DOMBreakpointsSidebarPane.js

Issue 2286413003: DevTools: refactor DOMBreakpointsSidebarPane to use Map and Set (Closed)
Patch Set: Nit Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/dom-breakpoints.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 21 matching lines...) Expand all
32 * @constructor 32 * @constructor
33 * @extends {WebInspector.BreakpointsSidebarPaneBase} 33 * @extends {WebInspector.BreakpointsSidebarPaneBase}
34 * @implements {WebInspector.ContextFlavorListener} 34 * @implements {WebInspector.ContextFlavorListener}
35 */ 35 */
36 WebInspector.DOMBreakpointsSidebarPane = function() 36 WebInspector.DOMBreakpointsSidebarPane = function()
37 { 37 {
38 WebInspector.BreakpointsSidebarPaneBase.call(this); 38 WebInspector.BreakpointsSidebarPaneBase.call(this);
39 this._domBreakpointsSetting = WebInspector.settings.createLocalSetting("domB reakpoints", []); 39 this._domBreakpointsSetting = WebInspector.settings.createLocalSetting("domB reakpoints", []);
40 this.listElement.classList.add("dom-breakpoints-list"); 40 this.listElement.classList.add("dom-breakpoints-list");
41 41
42 this._breakpointElements = {}; 42 /** @type {!Map<string, !Element>} */
43 this._breakpointElements = new Map();
43 44
44 this._breakpointTypes = { 45 this._breakpointTypes = {
45 SubtreeModified: "subtree-modified", 46 SubtreeModified: "subtree-modified",
46 AttributeModified: "attribute-modified", 47 AttributeModified: "attribute-modified",
47 NodeRemoved: "node-removed" 48 NodeRemoved: "node-removed"
48 }; 49 };
49 this._breakpointTypeLabels = {}; 50 this._breakpointTypeLabels = {};
50 this._breakpointTypeLabels[this._breakpointTypes.SubtreeModified] = WebInspe ctor.UIString("Subtree Modified"); 51 this._breakpointTypeLabels[this._breakpointTypes.SubtreeModified] = WebInspe ctor.UIString("Subtree Modified");
51 this._breakpointTypeLabels[this._breakpointTypes.AttributeModified] = WebIns pector.UIString("Attribute Modified"); 52 this._breakpointTypeLabels[this._breakpointTypes.AttributeModified] = WebIns pector.UIString("Attribute Modified");
52 this._breakpointTypeLabels[this._breakpointTypes.NodeRemoved] = WebInspector .UIString("Node Removed"); 53 this._breakpointTypeLabels[this._breakpointTypes.NodeRemoved] = WebInspector .UIString("Node Removed");
(...skipping 21 matching lines...) Expand all
74 return; 75 return;
75 76
76 var nodeBreakpoints = this._nodeBreakpoints(node); 77 var nodeBreakpoints = this._nodeBreakpoints(node);
77 78
78 /** 79 /**
79 * @param {!DOMDebuggerAgent.DOMBreakpointType} type 80 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
80 * @this {WebInspector.DOMBreakpointsSidebarPane} 81 * @this {WebInspector.DOMBreakpointsSidebarPane}
81 */ 82 */
82 function toggleBreakpoint(type) 83 function toggleBreakpoint(type)
83 { 84 {
84 if (!nodeBreakpoints[type]) 85 if (!nodeBreakpoints.has(type))
85 this._setBreakpoint(node, type, true); 86 this._setBreakpoint(node, type, true);
86 else 87 else
87 this._removeBreakpoint(node, type); 88 this._removeBreakpoint(node, type);
88 this._saveBreakpoints(); 89 this._saveBreakpoints();
89 } 90 }
90 91
91 var breakpointsMenu = createSubMenu ? contextMenu.appendSubMenuItem(WebI nspector.UIString("Break on...")) : contextMenu; 92 var breakpointsMenu = createSubMenu ? contextMenu.appendSubMenuItem(WebI nspector.UIString("Break on...")) : contextMenu;
92 for (var key in this._breakpointTypes) { 93 for (var key in this._breakpointTypes) {
93 var type = this._breakpointTypes[key]; 94 var type = this._breakpointTypes[key];
94 var label = this._contextMenuLabels[type]; 95 var label = this._contextMenuLabels[type];
95 breakpointsMenu.appendCheckboxItem(label, toggleBreakpoint.bind(this , type), nodeBreakpoints[type]); 96 breakpointsMenu.appendCheckboxItem(label, toggleBreakpoint.bind(this , type), nodeBreakpoints.has(type));
96 } 97 }
97 }, 98 },
98 99
99 /** 100 /**
100 * @param {!WebInspector.DOMNode} node 101 * @param {!WebInspector.DOMNode} node
101 * @return {!Object<string, boolean>} 102 * @return {!Set<!DOMDebuggerAgent.DOMBreakpointType>}
102 */ 103 */
103 _nodeBreakpoints: function(node) 104 _nodeBreakpoints: function(node)
104 { 105 {
105 var nodeBreakpoints = {}; 106 /** @type {!Set<!DOMDebuggerAgent.DOMBreakpointType>} */
106 for (var id in this._breakpointElements) { 107 var nodeBreakpoints = new Set();
107 var element = this._breakpointElements[id]; 108 for (var element of this._breakpointElements.values()) {
108 if (element._node === node && element._checkboxElement.checked) 109 if (element._node === node && element._checkboxElement.checked)
109 nodeBreakpoints[element._type] = true; 110 nodeBreakpoints.add(element._type);
110 } 111 }
111 return nodeBreakpoints; 112 return nodeBreakpoints;
112 }, 113 },
113 114
114 /** 115 /**
115 * @param {!WebInspector.DOMNode} node 116 * @param {!WebInspector.DOMNode} node
116 * @return {boolean} 117 * @return {boolean}
117 */ 118 */
118 hasBreakpoints: function(node) 119 hasBreakpoints: function(node)
119 { 120 {
120 for (var id in this._breakpointElements) { 121 for (var element of this._breakpointElements.values()) {
121 var element = this._breakpointElements[id];
122 if (element._node === node && element._checkboxElement.checked) 122 if (element._node === node && element._checkboxElement.checked)
123 return true; 123 return true;
124 } 124 }
125 return false; 125 return false;
126 }, 126 },
127 127
128 /** 128 /**
129 * @param {!WebInspector.DebuggerPausedDetails} details 129 * @param {!WebInspector.DebuggerPausedDetails} details
130 * @return {!Element} 130 * @return {!Element}
131 */ 131 */
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 for (var i = 0; i < children.length; ++i) 175 for (var i = 0; i < children.length; ++i)
176 this._removeBreakpointsForNode(children[i]); 176 this._removeBreakpointsForNode(children[i]);
177 this._saveBreakpoints(); 177 this._saveBreakpoints();
178 }, 178 },
179 179
180 /** 180 /**
181 * @param {!WebInspector.DOMNode} node 181 * @param {!WebInspector.DOMNode} node
182 */ 182 */
183 _removeBreakpointsForNode: function(node) 183 _removeBreakpointsForNode: function(node)
184 { 184 {
185 for (var id in this._breakpointElements) { 185 for (var element of this._breakpointElements.values()) {
186 var element = this._breakpointElements[id];
187 if (element._node === node) 186 if (element._node === node)
188 this._removeBreakpoint(element._node, element._type); 187 this._removeBreakpoint(element._node, element._type);
189 } 188 }
190 }, 189 },
191 190
192 /** 191 /**
193 * @param {!WebInspector.DOMNode} node 192 * @param {!WebInspector.DOMNode} node
194 * @param {!DOMDebuggerAgent.DOMBreakpointType} type 193 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
195 * @param {boolean} enabled 194 * @param {boolean} enabled
196 */ 195 */
197 _setBreakpoint: function(node, type, enabled) 196 _setBreakpoint: function(node, type, enabled)
198 { 197 {
199 var breakpointId = this._createBreakpointId(node.id, type); 198 var breakpointId = this._createBreakpointId(node.id, type);
200 var breakpointElement = this._breakpointElements[breakpointId]; 199 var breakpointElement = this._breakpointElements.get(breakpointId);
201 if (!breakpointElement) { 200 if (!breakpointElement) {
202 breakpointElement = this._createBreakpointElement(node, type, enable d); 201 breakpointElement = this._createBreakpointElement(node, type, enable d);
203 this._breakpointElements[breakpointId] = breakpointElement; 202 this._breakpointElements.set(breakpointId, breakpointElement);
204 } else { 203 } else {
205 breakpointElement._checkboxElement.checked = enabled; 204 breakpointElement._checkboxElement.checked = enabled;
206 } 205 }
207 if (enabled) 206 if (enabled)
208 node.target().domdebuggerAgent().setDOMBreakpoint(node.id, type); 207 node.target().domdebuggerAgent().setDOMBreakpoint(node.id, type);
209 node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, true); 208 node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, true);
210 }, 209 },
211 210
212 /** 211 /**
213 * @param {!WebInspector.DOMNode} node 212 * @param {!WebInspector.DOMNode} node
(...skipping 30 matching lines...) Expand all
244 if (currentElement._type && currentElement._type < element._type) 243 if (currentElement._type && currentElement._type < element._type)
245 break; 244 break;
246 currentElement = currentElement.nextSibling; 245 currentElement = currentElement.nextSibling;
247 } 246 }
248 this.addListElement(element, currentElement); 247 this.addListElement(element, currentElement);
249 return element; 248 return element;
250 }, 249 },
251 250
252 _removeAllBreakpoints: function() 251 _removeAllBreakpoints: function()
253 { 252 {
254 for (var id in this._breakpointElements) { 253 for (var element of this._breakpointElements.values())
255 var element = this._breakpointElements[id];
256 this._removeBreakpoint(element._node, element._type); 254 this._removeBreakpoint(element._node, element._type);
257 }
258 this._saveBreakpoints(); 255 this._saveBreakpoints();
259 }, 256 },
260 257
261 /** 258 /**
262 * @param {!WebInspector.DOMNode} node 259 * @param {!WebInspector.DOMNode} node
263 * @param {!DOMDebuggerAgent.DOMBreakpointType} type 260 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
264 */ 261 */
265 _removeBreakpoint: function(node, type) 262 _removeBreakpoint: function(node, type)
266 { 263 {
267 var breakpointId = this._createBreakpointId(node.id, type); 264 var breakpointId = this._createBreakpointId(node.id, type);
268 var element = this._breakpointElements[breakpointId]; 265 var element = this._breakpointElements.get(breakpointId);
269 if (!element) 266 if (!element)
270 return; 267 return;
271 268
272 this.removeListElement(element); 269 this.removeListElement(element);
273 delete this._breakpointElements[breakpointId]; 270 this._breakpointElements.delete(breakpointId);
274 if (element._checkboxElement.checked) 271 if (element._checkboxElement.checked)
275 node.target().domdebuggerAgent().removeDOMBreakpoint(node.id, type); 272 node.target().domdebuggerAgent().removeDOMBreakpoint(node.id, type);
276 node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, this.hasBr eakpoints(node) ? true : null); 273 node.setMarker(WebInspector.DOMBreakpointsSidebarPane.Marker, this.hasBr eakpoints(node) ? true : null);
277 }, 274 },
278 275
279 /** 276 /**
280 * @param {!WebInspector.DOMNode} node 277 * @param {!WebInspector.DOMNode} node
281 * @param {!DOMDebuggerAgent.DOMBreakpointType} type 278 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
282 * @param {!Event} event 279 * @param {!Event} event
283 */ 280 */
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 { 322 {
326 var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDet ails); 323 var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDet ails);
327 if (!details || details.reason !== WebInspector.DebuggerModel.BreakReaso n.DOM) { 324 if (!details || details.reason !== WebInspector.DebuggerModel.BreakReaso n.DOM) {
328 if (this._highlightedElement) { 325 if (this._highlightedElement) {
329 this._highlightedElement.classList.remove("breakpoint-hit"); 326 this._highlightedElement.classList.remove("breakpoint-hit");
330 delete this._highlightedElement; 327 delete this._highlightedElement;
331 } 328 }
332 return; 329 return;
333 } 330 }
334 var auxData = details.auxData; 331 var auxData = details.auxData;
335 var breakpointId = this._createBreakpointId(auxData.nodeId, auxData.type ); 332 var breakpointId = this._createBreakpointId(auxData.nodeId, auxData.type );
lushnikov 2016/08/29 22:19:30 let's get rid of this _createBreakpointId in a fol
336 var element = this._breakpointElements[breakpointId]; 333 var element = this._breakpointElements.get(breakpointId);
337 if (!element) 334 if (!element)
338 return; 335 return;
339 WebInspector.viewManager.showView("sources.domBreakpoints"); 336 WebInspector.viewManager.showView("sources.domBreakpoints");
340 element.classList.add("breakpoint-hit"); 337 element.classList.add("breakpoint-hit");
341 this._highlightedElement = element; 338 this._highlightedElement = element;
342 }, 339 },
343 340
344 /** 341 /**
345 * @param {number} nodeId 342 * @param {number} nodeId
346 * @param {!DOMDebuggerAgent.DOMBreakpointType} type 343 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
347 */ 344 */
348 _createBreakpointId: function(nodeId, type) 345 _createBreakpointId: function(nodeId, type)
349 { 346 {
350 return nodeId + ":" + type; 347 return nodeId + ":" + type;
351 }, 348 },
352 349
353 _saveBreakpoints: function() 350 _saveBreakpoints: function()
354 { 351 {
355 var breakpoints = []; 352 var breakpoints = [];
356 var storedBreakpoints = this._domBreakpointsSetting.get(); 353 var storedBreakpoints = this._domBreakpointsSetting.get();
357 for (var i = 0; i < storedBreakpoints.length; ++i) { 354 for (var i = 0; i < storedBreakpoints.length; ++i) {
358 var breakpoint = storedBreakpoints[i]; 355 var breakpoint = storedBreakpoints[i];
359 if (breakpoint.url !== this._inspectedURL) 356 if (breakpoint.url !== this._inspectedURL)
360 breakpoints.push(breakpoint); 357 breakpoints.push(breakpoint);
361 } 358 }
362 for (var id in this._breakpointElements) { 359 for (var element of this._breakpointElements.values())
363 var element = this._breakpointElements[id];
364 breakpoints.push({ url: this._inspectedURL, path: element._node.path (), type: element._type, enabled: element._checkboxElement.checked }); 360 breakpoints.push({ url: this._inspectedURL, path: element._node.path (), type: element._type, enabled: element._checkboxElement.checked });
365 }
366 this._domBreakpointsSetting.set(breakpoints); 361 this._domBreakpointsSetting.set(breakpoints);
367 }, 362 },
368 363
369 /** 364 /**
370 * @param {!WebInspector.DOMDocument} domDocument 365 * @param {!WebInspector.DOMDocument} domDocument
371 */ 366 */
372 restoreBreakpoints: function(domDocument) 367 restoreBreakpoints: function(domDocument)
373 { 368 {
374 this._breakpointElements = {}; 369 this._breakpointElements.clear();
375 this.reset(); 370 this.reset();
376 this._inspectedURL = domDocument.documentURL; 371 this._inspectedURL = domDocument.documentURL;
377 var domModel = domDocument.domModel(); 372 var domModel = domDocument.domModel();
378 var pathToBreakpoints = {}; 373 /** @type {!Map<string, !Array<!Object>>} */
chenwilliam 2016/08/29 20:10:43 I'm planning on improving this type annotation by
374 var pathToBreakpoints = new Map();
379 375
380 /** 376 /**
381 * @param {string} path 377 * @param {string} path
382 * @param {?DOMAgent.NodeId} nodeId 378 * @param {?DOMAgent.NodeId} nodeId
383 * @this {WebInspector.DOMBreakpointsSidebarPane} 379 * @this {WebInspector.DOMBreakpointsSidebarPane}
384 */ 380 */
385 function didPushNodeByPathToFrontend(path, nodeId) 381 function didPushNodeByPathToFrontend(path, nodeId)
386 { 382 {
387 var node = nodeId ? domModel.nodeForId(nodeId) : null; 383 var node = nodeId ? domModel.nodeForId(nodeId) : null;
388 if (!node) 384 if (!node)
389 return; 385 return;
390 386
391 var breakpoints = pathToBreakpoints[path]; 387 var breakpoints = pathToBreakpoints.get(path);
392 for (var i = 0; i < breakpoints.length; ++i) 388 for (var i = 0; i < breakpoints.length; ++i)
393 this._setBreakpoint(node, breakpoints[i].type, breakpoints[i].en abled); 389 this._setBreakpoint(node, breakpoints[i].type, breakpoints[i].en abled);
394 } 390 }
395 391
396 var breakpoints = this._domBreakpointsSetting.get(); 392 var breakpoints = this._domBreakpointsSetting.get();
397 for (var i = 0; i < breakpoints.length; ++i) { 393 for (var i = 0; i < breakpoints.length; ++i) {
398 var breakpoint = breakpoints[i]; 394 var breakpoint = breakpoints[i];
399 if (breakpoint.url !== this._inspectedURL) 395 if (breakpoint.url !== this._inspectedURL)
400 continue; 396 continue;
401 var path = breakpoint.path; 397 var path = breakpoint.path;
402 if (!pathToBreakpoints[path]) { 398 if (!pathToBreakpoints.has(path)) {
403 pathToBreakpoints[path] = []; 399 pathToBreakpoints.set(path, []);
404 domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFront end.bind(this, path)); 400 domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFront end.bind(this, path));
405 } 401 }
406 pathToBreakpoints[path].push(breakpoint); 402 pathToBreakpoints.get(path).push(breakpoint);
407 } 403 }
408 }, 404 },
409 405
410 __proto__: WebInspector.BreakpointsSidebarPaneBase.prototype 406 __proto__: WebInspector.BreakpointsSidebarPaneBase.prototype
411 } 407 }
412 408
413 /** 409 /**
414 * @constructor 410 * @constructor
415 * @extends {WebInspector.VBox} 411 * @extends {WebInspector.VBox}
416 */ 412 */
(...skipping 12 matching lines...) Expand all
429 pane.show(this.element); 425 pane.show(this.element);
430 }, 426 },
431 427
432 __proto__: WebInspector.VBox.prototype 428 __proto__: WebInspector.VBox.prototype
433 } 429 }
434 430
435 /** 431 /**
436 * @type {!WebInspector.DOMBreakpointsSidebarPane} 432 * @type {!WebInspector.DOMBreakpointsSidebarPane}
437 */ 433 */
438 WebInspector.domBreakpointsSidebarPane; 434 WebInspector.domBreakpointsSidebarPane;
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/inspector/sources/debugger-breakpoints/dom-breakpoints.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698