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

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

Issue 2837203002: [DevTools] Move dom breakpoints to DOMDebuggerModel (Closed)
Patch Set: addressed review comments Created 3 years, 7 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
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 SDK.DOMDebuggerModel = class extends SDK.SDKModel { 5 SDK.DOMDebuggerModel = class extends SDK.SDKModel {
6 /** 6 /**
7 * @param {!SDK.Target} target 7 * @param {!SDK.Target} target
8 */ 8 */
9 constructor(target) { 9 constructor(target) {
10 super(target); 10 super(target);
11 this._agent = target.domdebuggerAgent(); 11 this._agent = target.domdebuggerAgent();
12 this._runtimeModel = /** @type {!SDK.RuntimeModel} */ (target.model(SDK.Runt imeModel)); 12 this._runtimeModel = /** @type {!SDK.RuntimeModel} */ (target.model(SDK.Runt imeModel));
13 this._domModel = /** @type {!SDK.DOMModel} */ (target.model(SDK.DOMModel)); 13 this._domModel = /** @type {!SDK.DOMModel} */ (target.model(SDK.DOMModel));
14 this._domModel.addEventListener(SDK.DOMModel.Events.DocumentUpdated, this._d ocumentUpdated, this);
15 this._domModel.addEventListener(SDK.DOMModel.Events.NodeRemoved, this._nodeR emoved, this);
16
17 /** @type {!Array<!SDK.DOMDebuggerModel.DOMBreakpoint>} */
18 this._domBreakpoints = [];
19 this._domBreakpointsSetting = Common.settings.createLocalSetting('domBreakpo ints', []);
20 if (this._domModel.existingDocument())
21 this._documentUpdated();
14 } 22 }
15 23
16 /** 24 /**
17 * @return {!SDK.RuntimeModel} 25 * @return {!SDK.RuntimeModel}
18 */ 26 */
19 runtimeModel() { 27 runtimeModel() {
20 return this._runtimeModel; 28 return this._runtimeModel;
21 } 29 }
22 30
23 /** 31 /**
(...skipping 13 matching lines...) Expand all
37 var location = this._runtimeModel.debuggerModel().createRawLocationByScrip tId( 45 var location = this._runtimeModel.debuggerModel().createRawLocationByScrip tId(
38 payload.scriptId, payload.lineNumber, payload.columnNumber); 46 payload.scriptId, payload.lineNumber, payload.columnNumber);
39 eventListeners.push(new SDK.EventListener( 47 eventListeners.push(new SDK.EventListener(
40 this, remoteObject, payload.type, payload.useCapture, payload.passive, payload.once, 48 this, remoteObject, payload.type, payload.useCapture, payload.passive, payload.once,
41 payload.handler ? this._runtimeModel.createRemoteObject(payload.handle r) : null, 49 payload.handler ? this._runtimeModel.createRemoteObject(payload.handle r) : null,
42 payload.originalHandler ? this._runtimeModel.createRemoteObject(payloa d.originalHandler) : null, 50 payload.originalHandler ? this._runtimeModel.createRemoteObject(payloa d.originalHandler) : null,
43 /** @type {!SDK.DebuggerModel.Location} */ (location), null)); 51 /** @type {!SDK.DebuggerModel.Location} */ (location), null));
44 } 52 }
45 return eventListeners; 53 return eventListeners;
46 } 54 }
55
56 retrieveDOMBreakpoints() {
57 this._domModel.requestDocument();
58 }
59
60 /**
61 * @return {!Array<!SDK.DOMDebuggerModel.DOMBreakpoint>}
62 */
63 domBreakpoints() {
64 return this._domBreakpoints.slice();
65 }
66
67 /**
68 * @param {!SDK.DOMNode} node
69 * @param {!SDK.DOMDebuggerModel.DOMBreakpoint.Type} type
70 * @return {boolean}
71 */
72 hasDOMBreakpoint(node, type) {
73 return this._domBreakpoints.some(breakpoint => (breakpoint.node === node && breakpoint.type === type));
74 }
75
76 /**
77 * @param {!SDK.DOMNode} node
78 * @param {!SDK.DOMDebuggerModel.DOMBreakpoint.Type} type
79 * @return {!SDK.DOMDebuggerModel.DOMBreakpoint}
80 */
81 setDOMBreakpoint(node, type) {
82 for (var breakpoint of this._domBreakpoints) {
83 if (breakpoint.node === node && breakpoint.type === type) {
84 this.toggleDOMBreakpoint(breakpoint, true);
85 return breakpoint;
86 }
87 }
88 var breakpoint = new SDK.DOMDebuggerModel.DOMBreakpoint(this, node, type, tr ue);
89 this._domBreakpoints.push(breakpoint);
90 this._saveDOMBreakpoints();
91 this._enableDOMBreakpoint(breakpoint);
92 this.dispatchEventToListeners(SDK.DOMDebuggerModel.Events.DOMBreakpointAdded , breakpoint);
93 return breakpoint;
94 }
95
96 /**
97 * @param {!SDK.DOMNode} node
98 * @param {!SDK.DOMDebuggerModel.DOMBreakpoint.Type} type
99 */
100 removeDOMBreakpoint(node, type) {
101 this._removeDOMBreakpoints(breakpoint => breakpoint.node === node && breakpo int.type === type);
102 }
103
104 removeAllDOMBreakpoints() {
105 this._removeDOMBreakpoints(breakpoint => true);
106 }
107
108 /**
109 * @param {!SDK.DOMDebuggerModel.DOMBreakpoint} breakpoint
110 * @param {boolean} enabled
111 */
112 toggleDOMBreakpoint(breakpoint, enabled) {
113 if (enabled === breakpoint.enabled)
114 return;
115 breakpoint.enabled = enabled;
116 if (enabled)
117 this._enableDOMBreakpoint(breakpoint);
118 else
119 this._disableDOMBreakpoint(breakpoint);
120 this.dispatchEventToListeners(SDK.DOMDebuggerModel.Events.DOMBreakpointToggl ed, breakpoint);
121 }
122
123 /**
124 * @param {!SDK.DOMDebuggerModel.DOMBreakpoint} breakpoint
125 */
126 _enableDOMBreakpoint(breakpoint) {
127 this._agent.setDOMBreakpoint(breakpoint.node.id, breakpoint.type);
128 breakpoint.node.setMarker(SDK.DOMDebuggerModel.DOMBreakpoint.Marker, true);
129 }
130
131 /**
132 * @param {!SDK.DOMDebuggerModel.DOMBreakpoint} breakpoint
133 */
134 _disableDOMBreakpoint(breakpoint) {
135 this._agent.removeDOMBreakpoint(breakpoint.node.id, breakpoint.type);
136 breakpoint.node.setMarker(
137 SDK.DOMDebuggerModel.DOMBreakpoint.Marker, this._nodeHasBreakpoints(brea kpoint.node) ? true : null);
138 }
139
140 /**
141 * @param {!SDK.DOMNode} node
142 * @return {boolean}
143 */
144 _nodeHasBreakpoints(node) {
145 for (var breakpoint of this._domBreakpoints) {
146 if (breakpoint.node === node && breakpoint.enabled)
147 return true;
148 }
149 return false;
150 }
151
152 /**
153 * @param {!Object} auxData
154 * @return {?{type: !SDK.DOMDebuggerModel.DOMBreakpoint.Type, node: !SDK.DOMNo de, targetNode: ?SDK.DOMNode, insertion: boolean}}
155 */
156 resolveDOMBreakpointData(auxData) {
157 var type = auxData['type'];
158 var node = this._domModel.nodeForId(auxData['nodeId']);
159 if (!type || !node)
160 return null;
161 var targetNode = null;
162 var insertion = false;
163 if (type === SDK.DOMDebuggerModel.DOMBreakpoint.Type.SubtreeModified) {
164 insertion = auxData['insertion'] || false;
165 targetNode = this._domModel.nodeForId(auxData['targetNodeId']);
166 }
167 return {type: type, node: node, targetNode: targetNode, insertion: insertion };
168 }
169
170 /**
171 * @return {string}
172 */
173 _currentURL() {
174 var domDocument = this._domModel.existingDocument();
175 return domDocument ? domDocument.documentURL : '';
176 }
177
178 _documentUpdated() {
179 var removed = this._domBreakpoints;
180 this._domBreakpoints = [];
181 this.dispatchEventToListeners(SDK.DOMDebuggerModel.Events.DOMBreakpointsRemo ved, removed);
182
183 var currentURL = this._currentURL();
184 for (var breakpoint of this._domBreakpointsSetting.get()) {
185 if (breakpoint.url !== currentURL)
186 continue;
187 this._domModel.pushNodeByPathToFrontend(breakpoint.path, nodeId => {
188 var node = nodeId ? this._domModel.nodeForId(nodeId) : null;
189 if (!node)
190 return;
191 var domBreakpoint = new SDK.DOMDebuggerModel.DOMBreakpoint(this, node, b reakpoint.type, breakpoint.enabled);
192 this._domBreakpoints.push(domBreakpoint);
193 if (breakpoint.enabled)
194 this._enableDOMBreakpoint(domBreakpoint);
195 this.dispatchEventToListeners(SDK.DOMDebuggerModel.Events.DOMBreakpointA dded, domBreakpoint);
196 });
197 }
198 }
199
200 /**
201 * @param {function(!SDK.DOMDebuggerModel.DOMBreakpoint):boolean} filter
202 */
203 _removeDOMBreakpoints(filter) {
204 var removed = [];
205 var left = [];
206 for (var breakpoint of this._domBreakpoints) {
207 if (filter(breakpoint)) {
208 removed.push(breakpoint);
209 if (breakpoint.enabled) {
210 breakpoint.enabled = false;
211 this._disableDOMBreakpoint(breakpoint);
212 }
213 } else {
214 left.push(breakpoint);
215 }
216 }
217
218 if (!removed.length)
219 return;
220 this._domBreakpoints = left;
221 this._saveDOMBreakpoints();
222 this.dispatchEventToListeners(SDK.DOMDebuggerModel.Events.DOMBreakpointsRemo ved, removed);
223 }
224
225 /**
226 * @param {!Common.Event} event
227 */
228 _nodeRemoved(event) {
229 var node = /** @type {!SDK.DOMNode} */ (event.data.node);
230 var children = node.children() || [];
231 this._removeDOMBreakpoints(breakpoint => breakpoint.node === node || childre n.indexOf(breakpoint.node) !== -1);
232 }
233
234 _saveDOMBreakpoints() {
235 var currentURL = this._currentURL();
236 var breakpoints = this._domBreakpointsSetting.get().filter(breakpoint => bre akpoint.url !== currentURL);
237 for (var breakpoint of this._domBreakpoints) {
238 breakpoints.push(
239 {url: currentURL, path: breakpoint.node.path(), type: breakpoint.type, enabled: breakpoint.enabled});
240 }
241 this._domBreakpointsSetting.set(breakpoints);
242 }
47 }; 243 };
48 244
49 SDK.SDKModel.register(SDK.DOMDebuggerModel, SDK.Target.Capability.DOM, false); 245 SDK.SDKModel.register(SDK.DOMDebuggerModel, SDK.Target.Capability.DOM, false);
50 246
247 /** @enum {symbol} */
248 SDK.DOMDebuggerModel.Events = {
249 DOMBreakpointAdded: Symbol('DOMBreakpointAdded'),
250 DOMBreakpointToggled: Symbol('DOMBreakpointToggled'),
251 DOMBreakpointsRemoved: Symbol('DOMBreakpointsRemoved'),
252 };
253
254 SDK.DOMDebuggerModel.DOMBreakpoint = class {
255 /**
256 * @param {!SDK.DOMDebuggerModel} domDebuggerModel
257 * @param {!SDK.DOMNode} node
258 * @param {!SDK.DOMDebuggerModel.DOMBreakpoint.Type} type
259 * @param {boolean} enabled
260 */
261 constructor(domDebuggerModel, node, type, enabled) {
262 this.domDebuggerModel = domDebuggerModel;
263 this.node = node;
264 this.type = type;
265 this.enabled = enabled;
266 }
267 };
268
269 /** @typedef {Protocol.DOMDebugger.DOMBreakpointType} */
270 SDK.DOMDebuggerModel.DOMBreakpoint.Type = Protocol.DOMDebugger.DOMBreakpointType ;
271
272 SDK.DOMDebuggerModel.DOMBreakpoint.Marker = 'breakpoint-marker';
273
51 SDK.EventListener = class { 274 SDK.EventListener = class {
52 /** 275 /**
53 * @param {!SDK.DOMDebuggerModel} domDebuggerModel 276 * @param {!SDK.DOMDebuggerModel} domDebuggerModel
54 * @param {!SDK.RemoteObject} eventTarget 277 * @param {!SDK.RemoteObject} eventTarget
55 * @param {string} type 278 * @param {string} type
56 * @param {boolean} useCapture 279 * @param {boolean} useCapture
57 * @param {boolean} passive 280 * @param {boolean} passive
58 * @param {boolean} once 281 * @param {boolean} once
59 * @param {?SDK.RemoteObject} handler 282 * @param {?SDK.RemoteObject} handler
60 * @param {?SDK.RemoteObject} originalHandler 283 * @param {?SDK.RemoteObject} originalHandler
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 /** 829 /**
607 * @override 830 * @override
608 * @param {!SDK.DOMDebuggerModel} domDebuggerModel 831 * @param {!SDK.DOMDebuggerModel} domDebuggerModel
609 */ 832 */
610 modelRemoved(domDebuggerModel) { 833 modelRemoved(domDebuggerModel) {
611 } 834 }
612 }; 835 };
613 836
614 /** @type {!SDK.DOMDebuggerManager} */ 837 /** @type {!SDK.DOMDebuggerManager} */
615 SDK.domDebuggerManager; 838 SDK.domDebuggerManager;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698