OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 /** | 5 /** |
6 * @typedef {Array<{object: !WebInspector.RemoteObject, eventListeners: ?Array<!W ebInspector.EventListener>, frameworkEventListeners: ?{eventListeners: ?Array<!W ebInspector.EventListener>, internalHandlers: ?WebInspector.RemoteArray}, isInte rnal: ?Array<boolean>}>} | |
7 */ | |
8 WebInspector.EventListenersResult; | |
9 | |
10 /** | |
6 * @constructor | 11 * @constructor |
7 * @param {!Element} element | 12 * @param {!Element} element |
8 */ | 13 */ |
9 WebInspector.EventListenersView = function(element) | 14 WebInspector.EventListenersView = function(element) |
10 { | 15 { |
11 this._element = element; | 16 this._element = element; |
12 this._treeOutline = new TreeOutlineInShadow("event-listener-tree"); | 17 this._treeOutline = new TreeOutlineInShadow("event-listener-tree"); |
13 this._treeOutline.registerRequiredCSS("components/objectValue.css"); | 18 this._treeOutline.registerRequiredCSS("components/objectValue.css"); |
14 this._treeOutline.registerRequiredCSS("components/eventListenersView.css"); | 19 this._treeOutline.registerRequiredCSS("components/eventListenersView.css"); |
15 this._treeOutline.setComparator(WebInspector.EventListenersTreeElement.compa rator); | 20 this._treeOutline.setComparator(WebInspector.EventListenersTreeElement.compa rator); |
16 this._treeOutline.element.classList.add("monospace"); | 21 this._treeOutline.element.classList.add("monospace"); |
17 this._element.appendChild(this._treeOutline.element) | 22 this._element.appendChild(this._treeOutline.element) |
18 this._emptyHolder = createElementWithClass("div", "info"); | 23 this._emptyHolder = createElementWithClass("div", "info"); |
19 this._emptyHolder.textContent = WebInspector.UIString("No Event Listeners"); | 24 this._emptyHolder.textContent = WebInspector.UIString("No Event Listeners"); |
20 this._linkifier = new WebInspector.Linkifier(); | 25 this._linkifier = new WebInspector.Linkifier(); |
21 /** @type {!Map<string, !WebInspector.EventListenersTreeElement>} */ | 26 /** @type {!Map<string, !WebInspector.EventListenersTreeElement>} */ |
22 this._treeItemMap = new Map(); | 27 this._treeItemMap = new Map(); |
23 } | 28 } |
24 | 29 |
25 WebInspector.EventListenersView.prototype = { | 30 WebInspector.EventListenersView.prototype = { |
26 /** | 31 /** |
27 * @param {!Array<!WebInspector.RemoteObject>} objects | 32 * @param {!Array<!WebInspector.RemoteObject>} objects |
28 * @return {!Promise<undefined>} | 33 * @return {!Promise<undefined>} |
29 */ | 34 */ |
30 addObjects: function(objects) | 35 addObjects: function(objects) |
31 { | 36 { |
32 var promises = []; | 37 var promises = []; |
33 for (var i = 0; i < objects.length; ++i) | 38 var results = []; |
34 promises.push(objects[i].eventListeners()); | 39 for (var i = 0; i < objects.length; ++i) { |
35 return Promise.all(promises).then(listenersCallback.bind(this)); | 40 var result = {object: objects[i]}; |
pfeldman
2015/09/03 18:56:35
Why are you creating these one-time objects? Is th
| |
36 /** | 41 results.push(result); |
37 * @param {!Array<?Array<!WebInspector.EventListener>>} listeners | 42 // Fill result object with eventListeners and frameworkEventListener s. |
43 promises.push(objects[i].eventListeners().then(storeResultTo.bind(nu ll, result, "eventListeners"))); | |
pfeldman
2015/09/03 18:56:35
Please delete this utility function and do not use
| |
44 promises.push(WebInspector.EventListener.frameworkEventListeners(obj ects[i]) | |
45 .then(storeResultTo.bind(null, result, "fr ameworkEventListeners"))); | |
46 } | |
47 return Promise.all(promises).then(listenersCallback.bind(this, results)) ; | |
48 /** | |
49 * @param {!WebInspector.EventListenersResult} results | |
38 * @this {WebInspector.EventListenersView} | 50 * @this {WebInspector.EventListenersView} |
39 */ | 51 */ |
40 function listenersCallback(listeners) | 52 function listenersCallback(results) |
pfeldman
2015/09/03 18:56:35
Please do not append "Callback" to the end of ever
| |
41 { | 53 { |
42 this.reset(); | 54 this.reset(); |
43 for (var i = 0; i < listeners.length; ++i) | 55 |
44 this._addObjectEventListeners(objects[i], listeners[i]); | 56 // set isInternal flag for framework internal event listeners |
57 var promises = []; | |
58 for (var result of results) { | |
59 var frameworkInternalHandlers = result.frameworkEventListeners.i nternalHandlers; | |
60 if (frameworkInternalHandlers) { | |
61 var listenersHandler = result.eventListeners.map(handlerArgu ment); | |
62 promises.push(frameworkInternalHandlers.object().callFunctio nJSONPromise(internalFlags, listenersHandler) | |
pfeldman
2015/09/03 18:56:35
Why is there asynchrony even after you have event
| |
63 .then(setIsI nternal.bind(null, result.eventListeners))); | |
64 } | |
65 } | |
66 | |
67 /** | |
68 * @param {!WebInspector.EventListener} listener | |
69 * @return {!RuntimeAgent.CallArgument} | |
70 */ | |
71 function handlerArgument(listener) | |
72 { | |
73 return WebInspector.RemoteObject.toCallArgument(listener.handler ()); | |
pfeldman
2015/09/03 18:56:35
Why do we have to do this again?
| |
74 } | |
75 | |
76 /** | |
77 * @suppressReceiverCheck | |
78 * @return {!Array<boolean>} | |
79 * @this {Array<*>} | |
80 */ | |
81 function internalFlags() | |
82 { | |
83 var isInternal = []; | |
84 var internalHandlersSet = new Set(this); | |
85 for (var handler of arguments) | |
86 isInternal.push(internalHandlersSet.has(handler)); | |
87 return isInternal; | |
88 } | |
89 | |
90 /** | |
91 * @param {!Array<!WebInspector.EventListener>} eventListeners | |
92 * @param {!Array<boolean>} isInternal | |
93 */ | |
94 function setIsInternal(eventListeners, isInternal) | |
95 { | |
96 for (var i = 0; i < eventListeners.length; ++i) { | |
97 if (isInternal[i]) | |
98 eventListeners[i].setListenerType("frameworkInternal"); | |
99 } | |
100 } | |
101 | |
102 return Promise.all(promises).then(addResults.bind(this, results)); | |
103 } | |
104 | |
105 /** | |
106 * @param {!WebInspector.EventListenersResult} results | |
107 * @this {WebInspector.EventListenersView} | |
108 */ | |
109 function addResults(results) | |
110 { | |
111 for (var result of results) { | |
112 this._addObjectEventListeners(result.object, result.eventListene rs); | |
113 this._addObjectEventListeners(result.object, result.frameworkEve ntListeners.eventListeners); | |
114 } | |
45 this.addEmptyHolderIfNeeded(); | 115 this.addEmptyHolderIfNeeded(); |
46 this._eventListenersArrivedForTest(); | 116 this._eventListenersArrivedForTest(); |
117 } | |
118 }, | |
119 | |
120 /** | |
121 * @param {boolean} showFramework | |
122 */ | |
123 showFrameworkListeners: function(showFramework) | |
124 { | |
125 var eventTypes = this._treeOutline.rootElement().children(); | |
126 for (var eventType of eventTypes) { | |
127 for (var listenerElement of eventType.children()) { | |
128 var listenerType = listenerElement.eventListener().listenerType( ); | |
129 var hidden = false; | |
130 if (listenerType === "frameworkUser" && !showFramework) | |
131 hidden = true; | |
132 if (listenerType === "frameworkInternal" && showFramework) | |
133 hidden = true; | |
134 listenerElement.hidden = hidden; | |
135 } | |
47 } | 136 } |
48 }, | 137 }, |
49 | 138 |
50 /** | 139 /** |
51 * @param {!WebInspector.RemoteObject} object | 140 * @param {!WebInspector.RemoteObject} object |
52 * @param {?Array<!WebInspector.EventListener>} eventListeners | 141 * @param {?Array<!WebInspector.EventListener>} eventListeners |
53 */ | 142 */ |
54 _addObjectEventListeners: function(object, eventListeners) | 143 _addObjectEventListeners: function(object, eventListeners) |
55 { | 144 { |
56 if (!eventListeners) | 145 if (!eventListeners) |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
167 * @param {!WebInspector.Linkifier} linkifier | 256 * @param {!WebInspector.Linkifier} linkifier |
168 */ | 257 */ |
169 _setTitle: function(object, linkifier) | 258 _setTitle: function(object, linkifier) |
170 { | 259 { |
171 var title = this.listItemElement.createChild("span"); | 260 var title = this.listItemElement.createChild("span"); |
172 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle"); | 261 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle"); |
173 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL())); | 262 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL())); |
174 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false)); | 263 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false)); |
175 }, | 264 }, |
176 | 265 |
266 /** | |
267 * @return {!WebInspector.EventListener} | |
268 */ | |
269 eventListener: function() | |
270 { | |
271 return this._eventListener; | |
272 }, | |
273 | |
177 __proto__: TreeElement.prototype | 274 __proto__: TreeElement.prototype |
178 } | 275 } |
OLD | NEW |