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

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..e97e6b63039b8894dfb2b9c782562e5da3d9fd31 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
*/
@@ -30,20 +35,104 @@ WebInspector.EventListenersView.prototype = {
addObjects: function(objects)
{
var promises = [];
- for (var i = 0; i < objects.length; ++i)
- promises.push(objects[i].eventListeners());
- return Promise.all(promises).then(listenersCallback.bind(this));
- /**
- * @param {!Array<?Array<!WebInspector.EventListener>>} listeners
+ var results = [];
+ for (var i = 0; i < objects.length; ++i) {
+ var result = {object: objects[i]};
pfeldman 2015/09/03 18:56:35 Why are you creating these one-time objects? Is th
+ results.push(result);
+ // Fill result object with eventListeners and frameworkEventListeners.
+ promises.push(objects[i].eventListeners().then(storeResultTo.bind(null, result, "eventListeners")));
pfeldman 2015/09/03 18:56:35 Please delete this utility function and do not use
+ promises.push(WebInspector.EventListener.frameworkEventListeners(objects[i])
+ .then(storeResultTo.bind(null, result, "frameworkEventListeners")));
+ }
+ return Promise.all(promises).then(listenersCallback.bind(this, results));
+ /**
+ * @param {!WebInspector.EventListenersResult} results
* @this {WebInspector.EventListenersView}
*/
- function listenersCallback(listeners)
+ function listenersCallback(results)
pfeldman 2015/09/03 18:56:35 Please do not append "Callback" to the end of ever
{
this.reset();
- for (var i = 0; i < listeners.length; ++i)
- this._addObjectEventListeners(objects[i], listeners[i]);
+
+ // set isInternal flag for framework internal event listeners
+ var promises = [];
+ for (var result of results) {
+ var frameworkInternalHandlers = result.frameworkEventListeners.internalHandlers;
+ if (frameworkInternalHandlers) {
+ var listenersHandler = result.eventListeners.map(handlerArgument);
+ promises.push(frameworkInternalHandlers.object().callFunctionJSONPromise(internalFlags, listenersHandler)
pfeldman 2015/09/03 18:56:35 Why is there asynchrony even after you have event
+ .then(setIsInternal.bind(null, result.eventListeners)));
+ }
+ }
+
+ /**
+ * @param {!WebInspector.EventListener} listener
+ * @return {!RuntimeAgent.CallArgument}
+ */
+ function handlerArgument(listener)
+ {
+ return WebInspector.RemoteObject.toCallArgument(listener.handler());
pfeldman 2015/09/03 18:56:35 Why do we have to do this again?
+ }
+
+ /**
+ * @suppressReceiverCheck
+ * @return {!Array<boolean>}
+ * @this {Array<*>}
+ */
+ function internalFlags()
+ {
+ var isInternal = [];
+ var internalHandlersSet = new Set(this);
+ for (var handler of arguments)
+ isInternal.push(internalHandlersSet.has(handler));
+ return isInternal;
+ }
+
+ /**
+ * @param {!Array<!WebInspector.EventListener>} eventListeners
+ * @param {!Array<boolean>} isInternal
+ */
+ function setIsInternal(eventListeners, isInternal)
+ {
+ for (var i = 0; i < eventListeners.length; ++i) {
+ if (isInternal[i])
+ eventListeners[i].setListenerType("frameworkInternal");
+ }
+ }
+
+ return Promise.all(promises).then(addResults.bind(this, results));
+ }
+
+ /**
+ * @param {!WebInspector.EventListenersResult} results
+ * @this {WebInspector.EventListenersView}
+ */
+ function addResults(results)
+ {
+ for (var result of results) {
+ this._addObjectEventListeners(result.object, result.eventListeners);
+ this._addObjectEventListeners(result.object, result.frameworkEventListeners.eventListeners);
+ }
this.addEmptyHolderIfNeeded();
this._eventListenersArrivedForTest();
+ }
+ },
+
+ /**
+ * @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;
+ }
}
},
@@ -174,5 +263,13 @@ WebInspector.ObjectEventListenerBar.prototype = {
title.appendChild(WebInspector.ObjectPropertiesSection.createValueElement(object, false));
},
+ /**
+ * @return {!WebInspector.EventListener}
+ */
+ eventListener: function()
+ {
+ return this._eventListener;
+ },
+
__proto__: TreeElement.prototype
-}
+}

Powered by Google App Engine
This is Rietveld 408576698