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

Unified Diff: Source/devtools/front_end/components/EventListenersView.js

Issue 1268353005: [DevTools] Support JQuery event listeners (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
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
-}
+}
« no previous file with comments | « Source/devtools/front_end/components/EventListenersUtils.js ('k') | Source/devtools/front_end/components/module.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698