| Index: Source/devtools/front_end/components/EventListenersView.js
|
| diff --git a/Source/devtools/front_end/components/EventListenersView.js b/Source/devtools/front_end/components/EventListenersView.js
|
| index 0a7abf6be8a35aeba01d567696c7eea0be0409d9..91cef6126bfe53c3c85a8bdd8a86f62222198684 100644
|
| --- a/Source/devtools/front_end/components/EventListenersView.js
|
| +++ b/Source/devtools/front_end/components/EventListenersView.js
|
| @@ -3,6 +3,11 @@
|
| // found in the LICENSE file.
|
|
|
| /**
|
| +* @typedef {Array<{object: !WebInspector.RemoteObject, eventListeners: ?Array<!WebInspector.EventListener>, frameworkEventListeners: ?{eventListeners: ?Array<!WebInspector.EventListener>, internalHandlers: ?WebInspector.RemoteArray}, isInternal: ?Array<boolean>}>}
|
| +*/
|
| +WebInspector.EventListenersResult;
|
| +
|
| +/**
|
| * @constructor
|
| * @param {!Element} element
|
| */
|
| @@ -29,21 +34,96 @@ WebInspector.EventListenersView.prototype = {
|
| */
|
| addObjects: function(objects)
|
| {
|
| + this.reset();
|
| var promises = [];
|
| - for (var i = 0; i < objects.length; ++i)
|
| - promises.push(objects[i].eventListeners());
|
| - return Promise.all(promises).then(listenersCallback.bind(this));
|
| + for (var object of objects)
|
| + promises.push(this._addObject(object));
|
| + return Promise.all(promises).then(this.addEmptyHolderIfNeeded.bind(this)).then(this._eventListenersArrivedForTest.bind(this));
|
| + },
|
| +
|
| + /**
|
| + * @param {!WebInspector.RemoteObject} object
|
| + * @return {!Promise<undefined>}
|
| + */
|
| + _addObject: function(object)
|
| + {
|
| + /** @type {?Array<!WebInspector.EventListener>} */
|
| + var eventListeners = null;
|
| + /** @type {?WebInspector.FrameworkEventListenersObject}*/
|
| + var frameworkEventListenersObject = null;
|
| +
|
| + var promises = [];
|
| + promises.push(object.eventListeners().then(storeEventListeners));
|
| + promises.push(WebInspector.EventListener.frameworkEventListeners(object).then(storeFrameworkEventListenersObject));
|
| + return Promise.all(promises).then(markInternalEventListeners).then(addEventListeners.bind(this));
|
| +
|
| + /**
|
| + * @param {?Array<!WebInspector.EventListener>} result
|
| + */
|
| + function storeEventListeners(result)
|
| + {
|
| + eventListeners = result;
|
| + }
|
| +
|
| + /**
|
| + * @param {?WebInspector.FrameworkEventListenersObject} result
|
| + */
|
| + function storeFrameworkEventListenersObject(result)
|
| + {
|
| + frameworkEventListenersObject = result;
|
| + }
|
| +
|
| + /**
|
| + * @return {!Promise<undefined>}
|
| + */
|
| + function markInternalEventListeners()
|
| + {
|
| + if (!eventListeners || !frameworkEventListenersObject.internalHandlers)
|
| + return Promise.resolve(undefined);
|
| + return frameworkEventListenersObject.internalHandlers.object().callFunctionJSONPromise(isInternalEventListener, eventListeners.map(handlerArgument)).then(setIsInternal);
|
| +
|
| + /**
|
| + * @param {!WebInspector.EventListener} listener
|
| + * @return {!RuntimeAgent.CallArgument}
|
| + */
|
| + function handlerArgument(listener)
|
| + {
|
| + return WebInspector.RemoteObject.toCallArgument(listener.handler());
|
| + }
|
| +
|
| + /**
|
| + * @suppressReceiverCheck
|
| + * @return {!Array<boolean>}
|
| + * @this {Array<*>}
|
| + */
|
| + function isInternalEventListener()
|
| + {
|
| + var isInternal = [];
|
| + var internalHandlersSet = new Set(this);
|
| + for (var handler of arguments)
|
| + isInternal.push(internalHandlersSet.has(handler));
|
| + return isInternal;
|
| + }
|
| +
|
| + /**
|
| + * @param {!Array<boolean>} isInternal
|
| + */
|
| + function setIsInternal(isInternal)
|
| + {
|
| + for (var i = 0; i < eventListeners.length; ++i) {
|
| + if (isInternal[i])
|
| + eventListeners[i].setListenerType("frameworkInternal");
|
| + }
|
| + }
|
| + }
|
| +
|
| /**
|
| - * @param {!Array<?Array<!WebInspector.EventListener>>} listeners
|
| * @this {WebInspector.EventListenersView}
|
| */
|
| - function listenersCallback(listeners)
|
| + function addEventListeners()
|
| {
|
| - this.reset();
|
| - for (var i = 0; i < listeners.length; ++i)
|
| - this._addObjectEventListeners(objects[i], listeners[i]);
|
| - this.addEmptyHolderIfNeeded();
|
| - this._eventListenersArrivedForTest();
|
| + this._addObjectEventListeners(object, eventListeners);
|
| + this._addObjectEventListeners(object, frameworkEventListenersObject.eventListeners);
|
| }
|
| },
|
|
|
| @@ -62,6 +142,25 @@ WebInspector.EventListenersView.prototype = {
|
| },
|
|
|
| /**
|
| + * @param {boolean} showFramework
|
| + */
|
| + showFrameworkListeners: function(showFramework)
|
| + {
|
| + var eventTypes = this._treeOutline.rootElement().children();
|
| + for (var eventType of eventTypes) {
|
| + for (var listenerElement of eventType.children()) {
|
| + var listenerType = listenerElement.eventListener().listenerType();
|
| + var hidden = false;
|
| + if (listenerType === "frameworkUser" && !showFramework)
|
| + hidden = true;
|
| + if (listenerType === "frameworkInternal" && showFramework)
|
| + hidden = true;
|
| + listenerElement.hidden = hidden;
|
| + }
|
| + }
|
| + },
|
| +
|
| + /**
|
| * @param {string} type
|
| * @return {!WebInspector.EventListenersTreeElement}
|
| */
|
| @@ -174,5 +273,13 @@ WebInspector.ObjectEventListenerBar.prototype = {
|
| title.appendChild(WebInspector.ObjectPropertiesSection.createValueElement(object, false));
|
| },
|
|
|
| + /**
|
| + * @return {!WebInspector.EventListener}
|
| + */
|
| + eventListener: function()
|
| + {
|
| + return this._eventListener;
|
| + },
|
| +
|
| __proto__: TreeElement.prototype
|
| -}
|
| +}
|
|
|