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]}; |
36 /** | 41 results.push(result); |
37 * @param {!Array<?Array<!WebInspector.EventListener>>} listeners | 42 promises.push(objects[i].eventListeners().then(storeResultTo.bind(nu ll, result, "eventListeners"))); |
pfeldman
2015/09/02 02:58:52
This is still hard to parse/understand. Can we be
kozy
2015/09/02 17:34:13
I've added comment.
| |
43 promises.push(WebInspector.frameworkEventListeners(objects[i], WebIn spector._frameworkEventListenersGetter) | |
pfeldman
2015/09/02 02:58:52
WebInspector._frameworkEventListenersGetter should
kozy
2015/09/02 17:34:13
Done.
| |
44 .then(storeResultTo.bind(null, result, "fr ameworkEventListeners"))); | |
45 } | |
46 return Promise.all(promises).then(listenersCallback.bind(this, results)) ; | |
47 /** | |
48 * @param {!WebInspector.EventListenersResult} results | |
38 * @this {WebInspector.EventListenersView} | 49 * @this {WebInspector.EventListenersView} |
39 */ | 50 */ |
40 function listenersCallback(listeners) | 51 function listenersCallback(results) |
41 { | 52 { |
42 this.reset(); | 53 this.reset(); |
43 for (var i = 0; i < listeners.length; ++i) | 54 |
44 this._addObjectEventListeners(objects[i], listeners[i]); | 55 // set isInternal flag for framework internal event listeners |
56 var promises = []; | |
57 for (var result of results) { | |
58 var frameworkInternalHandlers = result.frameworkEventListeners.i nternalHandlers; | |
59 if (frameworkInternalHandlers) { | |
60 var listenersHandler = result.eventListeners.map(handlerArgu ment); | |
61 promises.push(frameworkInternalHandlers.object().callFunctio nJSONPromise(internalFlags, listenersHandler) | |
62 .then(setIsI nternal.bind(null, result.eventListeners))); | |
63 } | |
64 } | |
65 | |
66 /** | |
67 * @param {!WebInspector.EventListener} listener | |
68 * @return {!RuntimeAgent.CallArgument} | |
69 */ | |
70 function handlerArgument(listener) | |
71 { | |
72 return WebInspector.RemoteObject.toCallArgument(listener.handler ()); | |
73 } | |
74 | |
75 /** | |
76 * @suppressReceiverCheck | |
77 * @return {!Array<boolean>} | |
78 * @this {Array<*>} | |
79 */ | |
80 function internalFlags() | |
81 { | |
82 var isInternal = []; | |
83 var internalHandlersSet = new Set(this); | |
84 for (var handler of arguments) | |
85 isInternal.push(internalHandlersSet.has(handler)); | |
86 return isInternal; | |
87 } | |
88 | |
89 /** | |
90 * @param {!Array<!WebInspector.EventListener>} eventListeners | |
91 * @param {!Array<boolean>} isInternal | |
92 */ | |
93 function setIsInternal(eventListeners, isInternal) | |
94 { | |
95 for (var i = 0; i < eventListeners.length; ++i) { | |
96 if (isInternal[i]) | |
97 eventListeners[i].setListenerType("frameworkInternal"); | |
98 } | |
99 } | |
100 | |
101 return Promise.all(promises).then(addResults.bind(this, results)); | |
102 } | |
103 | |
104 /** | |
105 * @param {!WebInspector.EventListenersResult} results | |
106 * @this {WebInspector.EventListenersView} | |
107 */ | |
108 function addResults(results) | |
109 { | |
110 for (var result of results) { | |
111 this._addObjectEventListeners(result.object, result.eventListene rs); | |
112 this._addObjectEventListeners(result.object, result.frameworkEve ntListeners.eventListeners); | |
113 } | |
45 this.addEmptyHolderIfNeeded(); | 114 this.addEmptyHolderIfNeeded(); |
46 this._eventListenersArrivedForTest(); | 115 this._eventListenersArrivedForTest(); |
116 } | |
117 }, | |
118 | |
119 /** | |
120 * @param {boolean} showFramework | |
121 */ | |
122 showFrameworkListeners: function(showFramework) | |
123 { | |
124 var eventTypes = this._treeOutline.rootElement().children(); | |
125 for (var eventType of eventTypes) { | |
126 for (var listenerElement of eventType.children()) { | |
127 var listenerType = listenerElement.eventListener().listenerType( ); | |
128 var hidden = false; | |
129 if (listenerType === "frameworkUser" && !showFramework) | |
130 hidden = true; | |
131 if (listenerType === "frameworkInternal" && showFramework) | |
132 hidden = true; | |
133 listenerElement.hidden = hidden; | |
134 } | |
47 } | 135 } |
48 }, | 136 }, |
49 | 137 |
50 /** | 138 /** |
51 * @param {!WebInspector.RemoteObject} object | 139 * @param {!WebInspector.RemoteObject} object |
52 * @param {?Array<!WebInspector.EventListener>} eventListeners | 140 * @param {?Array<!WebInspector.EventListener>} eventListeners |
53 */ | 141 */ |
54 _addObjectEventListeners: function(object, eventListeners) | 142 _addObjectEventListeners: function(object, eventListeners) |
55 { | 143 { |
56 if (!eventListeners) | 144 if (!eventListeners) |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
167 * @param {!WebInspector.Linkifier} linkifier | 255 * @param {!WebInspector.Linkifier} linkifier |
168 */ | 256 */ |
169 _setTitle: function(object, linkifier) | 257 _setTitle: function(object, linkifier) |
170 { | 258 { |
171 var title = this.listItemElement.createChild("span"); | 259 var title = this.listItemElement.createChild("span"); |
172 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle"); | 260 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle"); |
173 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL())); | 261 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL())); |
174 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false)); | 262 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false)); |
175 }, | 263 }, |
176 | 264 |
265 /** | |
266 * @return {!WebInspector.EventListener} | |
267 */ | |
268 eventListener: function() | |
269 { | |
270 return this._eventListener; | |
271 }, | |
272 | |
177 __proto__: TreeElement.prototype | 273 __proto__: TreeElement.prototype |
178 } | 274 } |
OLD | NEW |