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

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

Issue 2191183003: DevTools: extract model from DOMBreakpointsSidebarPane (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nit 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.SDKModel}
8 * @param {!WebInspector.Target} target
9 */
10 WebInspector.DOMDebuggerModel = function(target)
lushnikov 2016/08/08 19:53:07 the class has many similar API methods. Let's redu
chenwilliam 2016/08/10 19:48:36 Done.
11 {
12 WebInspector.SDKModel.call(this, WebInspector.DOMDebuggerModel, target);
13 this._agent = target.domdebuggerAgent();
14 this._domBreakpointsSetting = WebInspector.settings.createLocalSetting("domB reakpoints", []);
15 this._breakpoints = {};
lushnikov 2016/08/08 19:53:07 /** @type {!Map<.., ...>} */ this._breakpoints = n
chenwilliam 2016/08/10 19:48:35 Done.
16 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspec tor.DOMModel.Events.NodeRemoved, this._nodeRemoved, this);
17 WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Event s.InspectedURLChanged, this._inspectedURLChanged, this);
18 }
19
20 WebInspector.DOMDebuggerModel.Marker = "breakpoint-marker";
21
22 WebInspector.DOMDebuggerModel.Events = {
23 BreakpointsChanged: "BreakpointsChanged"
24 };
25
26 WebInspector.DOMDebuggerModel.prototype = {
27 /**
28 * @return {!Object}
lushnikov 2016/08/08 19:53:07 please annotate with proper type
chenwilliam 2016/08/10 19:48:36 Done.
29 */
30 domBreakpoints: function()
31 {
32 return this._breakpoints;
33 },
34
35 /**
36 * @param {!WebInspector.DOMNode} node
37 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
38 * @param {boolean} enabled
39 */
40 setBreakpoint: function(node, type, enabled)
41 {
42 this._setBreakpointWithoutSave(node, type, enabled);
43 this._saveBreakpoints();
44 },
45
46 /**
47 * @param {!WebInspector.DOMNode} node
48 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
49 * @param {boolean} enabled
50 */
51 _setBreakpointWithoutSave: function(node, type, enabled)
lushnikov 2016/08/08 19:53:07 _innerSetBreakpoint
chenwilliam 2016/08/10 19:48:36 Done.
52 {
53 var breakpointId = this.createBreakpointId(node.id, type);
54 this._breakpoints[breakpointId] = {
55 node: node,
lushnikov 2016/08/08 19:53:07 let's create a type for this
chenwilliam 2016/08/10 19:48:36 Done.
56 type: type,
57 url: this._inspectedURL,
58 path: node.path(),
59 enabled: enabled
60 };
61 if (enabled)
62 this._setDOMBreakpoint(node, type);
63 else
64 this._removeDOMBreakpoint(node, type);
65 },
66
67 /**
68 * @param {!WebInspector.DOMNode} node
69 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
70 */
71 removeBreakpoint: function(node, type)
72 {
73 this._removeBreakpointWithoutSave(node, type);
74 this._saveBreakpoints();
75 },
76
77 /**
78 * @param {!WebInspector.DOMNode} node
79 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
80 */
81 _removeBreakpointWithoutSave: function(node, type)
82 {
83 var breakpointId = this.createBreakpointId(node.id, type);
84 if (this._breakpoints[breakpointId].enabled)
85 this._removeDOMBreakpoint(node, type);
86 delete this._breakpoints[breakpointId];
87 },
88
89 /**
90 * @param {!WebInspector.DOMNode} node
91 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
92 * @param {!Event} event
93 */
94 checkboxClicked: function(node, type, event)
lushnikov 2016/08/08 19:53:07 the model should not talk in UI terms; this method
chenwilliam 2016/08/10 19:48:36 Done.
95 {
96 this.setBreakpoint(node, type, event.target["checkboxElement"].checked);
97 },
98
99 /**
100 * @param {!WebInspector.DOMNode} node
101 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
102 */
103 toggleBreakpoint: function(node, type)
104 {
105 var nodeBreakpoints = this.nodeBreakpoints(node);
106 if (!nodeBreakpoints[type])
107 this.setBreakpoint(node, type, true);
108 else
109 this.removeBreakpoint(node, type);
110 },
111
112 /**
113 * @param {!WebInspector.DOMNode} node
114 */
115 removeBreakpointsForNode: function(node)
116 {
117 for (var id in this._breakpoints) {
118 var breakpoint = this._breakpoints[id];
119 if (breakpoint.node === node)
120 this._removeBreakpointWithoutSave(breakpoint.node, breakpoint.ty pe);
121 }
122 this._saveBreakpoints();
123 },
124
125 removeAllBreakpoints: function()
126 {
127 for (var id in this._breakpoints) {
128 var breakpoint = this._breakpoints[id];
129 this._removeBreakpointWithoutSave(breakpoint.node, breakpoint.type);
130 }
131 this._saveBreakpoints();
132 },
133
134 /**
135 * @param {!WebInspector.DOMNode} node
136 * @return {!Object<string, boolean>}
137 */
138 nodeBreakpoints: function(node)
139 {
140 var nodeBreakpoints = {};
141 for (var id in this._breakpoints) {
142 var breakpoint = this._breakpoints[id];
143 if (breakpoint.node === node && breakpoint.enabled)
144 nodeBreakpoints[breakpoint.type] = true;
145 }
146 return nodeBreakpoints;
147 },
148
149 /**
150 * @param {!WebInspector.DOMModel} domModel
151 */
152 restoreBreakpoints: function(domModel)
153 {
154 var pathToBreakpoints = {};
155
156 /**
157 * @param {string} path
158 * @param {?DOMAgent.NodeId} nodeId
159 * @this {WebInspector.DOMDebuggerModel}
160 */
161 function didPushNodeByPathToFrontend(path, nodeId)
162 {
163 var node = nodeId ? domModel.nodeForId(nodeId) : null;
164 if (!node)
165 return;
166
167 for (var breakpoint of pathToBreakpoints[path])
168 this._setBreakpointWithoutSave(node, breakpoint.type, breakpoint .enabled);
169 this.dispatchEventToListeners(WebInspector.DOMDebuggerModel.Events.B reakpointsChanged);
170 }
171
172 var breakpoints = this._domBreakpointsSetting.get();
173 for (var breakpoint of breakpoints) {
174 if (breakpoint.url !== this._inspectedURL)
175 continue;
176 var path = breakpoint.path;
177 if (!pathToBreakpoints[path]) {
178 pathToBreakpoints[path] = [];
179 domModel.pushNodeByPathToFrontend(path, didPushNodeByPathToFront end.bind(this, path));
180 }
181 pathToBreakpoints[path].push(breakpoint);
182 }
183 },
184
185 _saveBreakpoints: function()
186 {
187 var breakpoints = [];
188 var storedBreakpoints = this._domBreakpointsSetting.get();
189 for (var breakpoint of storedBreakpoints) {
190 if (breakpoint.url !== this._inspectedURL)
191 breakpoints.push(breakpoint);
192 }
193 for (var id in this._breakpoints) {
194 var breakpoint = this._breakpoints[id];
195 breakpoints.push({
196 url: this._inspectedURL,
197 path: breakpoint.node.path(),
198 type: breakpoint.type,
199 enabled: breakpoint.enabled
200 });
201 }
202 this._domBreakpointsSetting.set(breakpoints);
203 this.dispatchEventToListeners(WebInspector.DOMDebuggerModel.Events.Break pointsChanged);
204 },
205
206 /**
207 * @param {!WebInspector.DOMNode} node
208 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
209 */
210 _setDOMBreakpoint: function(node, type)
lushnikov 2016/08/08 19:53:07 let's inline
chenwilliam 2016/08/10 19:48:36 Done.
211 {
212 this._agent.setDOMBreakpoint(node.id, type);
213 node.setMarker(WebInspector.DOMDebuggerModel.Marker, true);
214 },
215
216 /**
217 * @param {!WebInspector.DOMNode} node
218 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
219 */
220 _removeDOMBreakpoint: function(node, type)
lushnikov 2016/08/08 19:53:07 let's inline
chenwilliam 2016/08/10 19:48:35 Done.
221 {
222 this._agent.removeDOMBreakpoint(node.id, type);
223 node.setMarker(WebInspector.DOMDebuggerModel.Marker, this._hasOtherBreak points(node, type) ? true : null);
224 },
225
226 /**
227 * @param {!WebInspector.DOMNode} node
228 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
229 * @return {boolean}
230 */
231 _hasOtherBreakpoints: function(node, type)
232 {
233 for (var id in this._breakpoints) {
234 var breakpoint = this._breakpoints[id];
235 if (breakpoint.node === node && breakpoint.type !== type && breakpoi nt.enabled)
236 return true;
237 }
238 return false;
239 },
240
241 /**
242 * @param {!WebInspector.Event} event
243 */
244 _nodeRemoved: function(event)
lushnikov 2016/08/08 19:53:07 this method is not used?
chenwilliam 2016/08/10 19:48:35 It's used as a model listener. WebInspector.targe
245 {
246 var node = event.data.node;
247 this.removeBreakpointsForNode(node);
248 var children = node.children();
249 if (!children)
250 return;
251 for (var child of children)
252 this.removeBreakpointsForNode(child);
253 this._saveBreakpoints();
254 },
255
256 /**
257 * @param {!WebInspector.Event} event
258 */
259 _inspectedURLChanged: function(event)
260 {
261 var target = /** @type {!WebInspector.Target} */ (event.data);
262 if (target !== WebInspector.targetManager.mainTarget())
263 return;
264 this._inspectedURL = target.inspectedURL().removeURLFragment();
265 this._breakpoints = {};
266 this.dispatchEventToListeners(WebInspector.DOMDebuggerModel.Events.Break pointsChanged);
267 },
268
269 /**
270 * @param {number} nodeId
271 * @param {!DOMDebuggerAgent.DOMBreakpointType} type
272 * @return {string}
273 */
274 createBreakpointId: function(nodeId, type)
lushnikov 2016/08/08 19:53:07 this is used only by the DOMBreakpointsSidebarPane
chenwilliam 2016/08/10 19:48:35 OK, I have moved this method to DOMBreakpointsSide
275 {
276 return `${nodeId}:${type}`;
277 },
278
279 __proto__: WebInspector.SDKModel.prototype
280 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698