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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sdk/DOMBreakpointManager.js

Issue 2191183003: DevTools: extract model from DOMBreakpointsSidebarPane (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address CL feedback from PS6 Created 4 years, 4 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
OLDNEW
(Empty)
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * @constructor
7 * @extends {WebInspector.Object}
8 * @implements {WebInspector.TargetManager.Observer}
9 */
10 WebInspector.DOMBreakpointManager = function()
11 {
12 /** @type {!Map<!WebInspector.Target, !Protocol.DOMDebuggerAgent>} */
13 this._agents = new Map();
14 this._domBreakpointsSetting = WebInspector.settings.createLocalSetting("domB reakpoints", []);
15 /** @type {!Map<string, !WebInspector.DOMBreakpointManager.Breakpoint>} */
16 this._breakpoints = new Map();
17 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspec tor.DOMModel.Events.DocumentUpdated, this._restoreBreakpoints, this);
18 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspec tor.DOMModel.Events.NodeRemoved, this._nodeRemoved, this);
19 WebInspector.targetManager.observeTargets(this);
20 }
21
22 WebInspector.DOMBreakpointManager.Marker = "breakpoint-marker";
23
24 WebInspector.DOMBreakpointManager.Events = {
25 BreakpointsChanged: "BreakpointsChanged"
26 };
27
28 WebInspector.DOMBreakpointManager.prototype = {
29 /**
30 * @override
31 * @param {!WebInspector.Target} target
32 */
33 targetAdded: function(target)
34 {
35 if (target.hasDOMCapability())
36 this._agents.set(target, target.domdebuggerAgent());
37 },
38
39 /**
40 * @override
41 * @param {!WebInspector.Target} target
42 */
43 targetRemoved: function(target)
44 {
45 if (target.hasDOMCapability())
46 this._agents.delete(target);
47 },
48
49 /**
50 * @return {!Array<!WebInspector.DOMBreakpointManager.Breakpoint>}
51 */
52 domBreakpoints: function()
53 {
54 var breakpoints = [];
55 for (var breakpoint of this._breakpoints.values())
56 breakpoints.push(breakpoint);
57 return breakpoints;
58 },
59
60 /**
61 * @param {!WebInspector.DOMNode} node
62 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
63 * @param {boolean} enabled
64 */
65 setBreakpoint: function(node, type, enabled)
66 {
67 this._innerSetBreakpoint(node, type, enabled);
68 this._saveBreakpoints();
69 },
70
71 /**
72 * @param {!WebInspector.DOMNode} node
73 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
74 * @param {boolean} enabled
75 */
76 _innerSetBreakpoint: function(node, type, enabled)
77 {
78 var url = node.ownerDocument.documentURL.removeURLFragment();
79 var breakpoint = new WebInspector.DOMBreakpointManager.Breakpoint(node, type, url, enabled);
80 this._breakpoints.set(this._createBreakpointId(node, type), breakpoint);
81 var agent = this._agents.get(node.target());
82 if (enabled) {
83 agent.setDOMBreakpoint(node.id, type);
84 node.setMarker(WebInspector.DOMBreakpointManager.Marker, true);
85 } else {
86 agent.removeDOMBreakpoint(node.id, type);
87 node.setMarker(WebInspector.DOMBreakpointManager.Marker, this._hasOt herBreakpoints(node, type) ? true : null);
88 }
89 },
90
91 /**
92 * @param {!WebInspector.DOMNode} node
93 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
94 */
95 removeBreakpoint: function(node, type)
96 {
97 this._innerRemoveBreakpoint(node, type);
98 this._saveBreakpoints();
99 },
100
101 /**
102 * @param {!WebInspector.DOMNode} node
103 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
104 */
105 _innerRemoveBreakpoint: function(node, type)
106 {
107 var breakpointId = this._createBreakpointId(node, type);
108 var breakpoint = this._breakpoints.get(breakpointId);
109 if (breakpoint.enabled) {
110 var agent = this._agents.get(node.target());
111 agent.removeDOMBreakpoint(node.id, type);
112 node.setMarker(WebInspector.DOMBreakpointManager.Marker, this._hasOt herBreakpoints(node, type) ? true : null);
113 }
114 this._breakpoints.remove(breakpointId);
115 },
116
117 /**
118 * @param {!WebInspector.DOMNode} node
119 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
120 */
121 toggleBreakpoint: function(node, type)
122 {
123 var nodeBreakpoints = this.nodeBreakpoints(node);
124 if (!nodeBreakpoints.get(type))
125 this.setBreakpoint(node, type, true);
126 else
127 this.removeBreakpoint(node, type);
128 },
129
130 removeAllBreakpoints: function()
131 {
132 for (var breakpoint of this._breakpoints.values())
133 this._innerRemoveBreakpoint(breakpoint.node, breakpoint.type);
134 this._saveBreakpoints();
135 },
136
137 /**
138 * @param {!WebInspector.DOMNode} node
139 * @return {!Map<string, boolean>}
140 */
141 nodeBreakpoints: function(node)
142 {
143 var nodeBreakpoints = new Map();
144 for (var breakpoint of this._breakpoints.values()) {
145 if (breakpoint.node === node && breakpoint.enabled)
146 nodeBreakpoints.set(breakpoint.type, true);
147 }
148 return nodeBreakpoints;
149 },
150
151 /**
152 * @param {!WebInspector.Event} event
153 */
154 _restoreBreakpoints: function(event)
155 {
156 var inspectedRootDocument = /** @type {!WebInspector.DOMDocument} */ (ev ent.data);
157 if (!inspectedRootDocument)
158 return;
159 var domModel = /** @type {!WebInspector.DOMModel} */ (event.target);
160 var pathToBreakpoints = {};
161 this._breakpoints.clear();
162 this.dispatchEventToListeners(WebInspector.DOMBreakpointManager.Events.B reakpointsChanged);
163
164 /**
165 * @param {string} path
166 * @param {?DOMAgent.NodeId} nodeId
167 * @this {WebInspector.DOMBreakpointManager}
168 */
169 function didPushNodeByPathToFrontend(path, nodeId)
170 {
171 var node = nodeId ? domModel.nodeForId(nodeId) : null;
172 if (!node)
173 return;
174
175 for (var breakpoint of pathToBreakpoints[path])
176 this._innerSetBreakpoint(node, breakpoint.type, breakpoint.enabl ed);
177 this.dispatchEventToListeners(WebInspector.DOMBreakpointManager.Even ts.BreakpointsChanged);
178 }
179
180 var breakpoints = this._domBreakpointsSetting.get();
181 for (var breakpoint of breakpoints) {
182 if (breakpoint.url !== WebInspector.targetManager.inspectedURL())
183 continue;
184 var path = breakpoint.path;
185 if (!pathToBreakpoints[path]) {
186 pathToBreakpoints[path] = [];
187 domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFront end.bind(this, path));
188 }
189 pathToBreakpoints[path].push(breakpoint);
190 }
191 },
192
193 _saveBreakpoints: function()
194 {
195 var breakpoints = [];
196 var storedBreakpoints = this._domBreakpointsSetting.get();
197 for (var breakpoint of storedBreakpoints) {
198 if (breakpoint.url !== WebInspector.targetManager.inspectedURL())
199 breakpoints.push(breakpoint);
200 }
201 for (var breakpoint of this._breakpoints.values()) {
202 breakpoints.push({
203 url: breakpoint.url,
204 path: breakpoint.node.path(),
205 type: breakpoint.type,
206 enabled: breakpoint.enabled
207 });
208 }
209 this._domBreakpointsSetting.set(breakpoints);
210 this.dispatchEventToListeners(WebInspector.DOMBreakpointManager.Events.B reakpointsChanged);
211 },
212
213 /**
214 * @param {!WebInspector.DOMNode} node
215 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
216 * @return {boolean}
217 */
218 _hasOtherBreakpoints: function(node, type)
219 {
220 for (var breakpoint of this._breakpoints.values()) {
221 if (breakpoint.node === node && breakpoint.type !== type && breakpoi nt.enabled)
222 return true;
223 }
224 return false;
225 },
226
227 /**
228 * @param {!WebInspector.Event} event
229 */
230 _nodeRemoved: function(event)
231 {
232 var node = event.data.node;
233 this._removeBreakpointsForNode(node);
234 var children = node.children();
235 if (!children)
236 return;
237 for (var child of children)
238 this._removeBreakpointsForNode(child);
239 },
240
241 /**
242 * @param {!WebInspector.DOMNode} node
243 */
244 _removeBreakpointsForNode: function(node)
245 {
246 for (var breakpoint of this._breakpoints.values()) {
247 if (breakpoint.node === node)
248 this._innerRemoveBreakpoint(breakpoint.node, breakpoint.type);
249 }
250 this._saveBreakpoints();
251 },
252
253 /**
254 * @param {!WebInspector.DOMNode} node
255 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
256 * @return {string}
257 */
258 _createBreakpointId: function(node, type)
259 {
260 return node.id + ":" + type;
261 },
262
263 __proto__: WebInspector.Object.prototype
264 };
265
266 /**
267 * @constructor
268 * @param {!WebInspector.DOMNode} node
269 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
270 * @param {string} url
271 * @param {boolean} enabled
272 */
273 WebInspector.DOMBreakpointManager.Breakpoint = function(node, type, url, enabled )
274 {
275 this.node = node;
276 this.path = node.path();
277 this.type = type;
278 this.url = url;
279 this.enabled = enabled;
280 }
281
282 /**
283 * @type {!WebInspector.DOMBreakpointManager}
284 */
285 WebInspector.domBreakpointManager;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698