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 // Fill result object with eventListeners and frameworkEventListener
s. |
| 43 promises.push(objects[i].eventListeners().then(storeResultTo.bind(nu
ll, result, "eventListeners"))); |
| 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) |
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) |
| 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
()); |
| 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 |