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

Unified Diff: Source/devtools/front_end/elements/DOMEventListenersSidebarPane.js

Issue 1042853004: [DevTools] Event Listeners Sidebar shows window listeners (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Extracted eventListenersTreeOutline.css Created 5 years, 8 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/elements/DOMEventListenersSidebarPane.js
diff --git a/Source/devtools/front_end/elements/DOMEventListenersSidebarPane.js b/Source/devtools/front_end/elements/DOMEventListenersSidebarPane.js
new file mode 100644
index 0000000000000000000000000000000000000000..4850dce193801abd3c4ea7064a6a5900bb387322
--- /dev/null
+++ b/Source/devtools/front_end/elements/DOMEventListenersSidebarPane.js
@@ -0,0 +1,135 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @constructor
+ * @extends {WebInspector.ElementsSidebarPane}
+ */
+WebInspector.DOMEventListenersSidebarPane = function()
+{
+ WebInspector.ElementsSidebarPane.call(this, "Event Listeners");
+ this.registerRequiredCSS("components/objectValue.css");
+ this.registerRequiredCSS("components/eventListenersTreeOutline.css");
+
+ this.bodyElement.classList.add("events-pane");
+
+ var refreshButton = this.titleElement.createChild("button", "pane-title-button refresh");
+ refreshButton.addEventListener("click", this.update.bind(this), false);
+ refreshButton.title = WebInspector.UIString("Refresh");
+
+ this.settingsSelectElement = this.titleElement.createChild("select", "select-filter");
+
+ var option = this.settingsSelectElement.createChild("option");
+ option.value = "all";
+ option.label = WebInspector.UIString("All Nodes");
+
+ option = this.settingsSelectElement.createChild("option");
+ option.value = "selected";
+ option.label = WebInspector.UIString("Selected Node Only");
+
+ this._eventListenersFilterSetting = WebInspector.settings.createSetting("eventListenersFilter", "all");
+ var filter = this._eventListenersFilterSetting.get();
+ if (filter === "all")
+ this.settingsSelectElement[0].selected = true;
+ else if (filter === "selected")
+ this.settingsSelectElement[1].selected = true;
+ this.settingsSelectElement.addEventListener("click", consumeEvent, false);
+ this.settingsSelectElement.addEventListener("change", this._changeSetting.bind(this), false);
+
+ this._eventListenersTreeOutline = new WebInspector.EventListenersTreeOutline(this.bodyElement);
+}
+
+WebInspector.DOMEventListenersSidebarPane.prototype = {
+ /**
+ * @override
+ * @param {!WebInspector.Throttler.FinishCallback} finishCallback
+ * @protected
+ */
+ doUpdate: function(finishCallback)
+ {
+ function mycallback()
+ {
+ finishCallback();
+ }
+
+ this._eventListenersTreeOutline.reset();
+
+ var node = this.node();
+ if (!node) {
+ finishCallback();
+ return;
+ }
+ var providers = [this._createNodeProvider(node)];
+ var selectedNodeOnly = "selected" === this._eventListenersFilterSetting.get();
+ if (!selectedNodeOnly)
+ providers.push(this._createWindowProvider(node));
+ Promise.all(providers).then(this._eventListenersTreeOutline.runProviders.bind(this._eventListenersTreeOutline, mycallback));
+ },
+
+ /**
+ * @param {!WebInspector.DOMNode} selectedNode
+ * @return {!Promise<!WebInspector.DOMEventListenersProvider>}
+ */
+ _createNodeProvider: function(selectedNode)
+ {
+ var selectedNodeOnly = "selected" === this._eventListenersFilterSetting.get();
+ return Promise.resolve(new WebInspector.DOMEventListenersProvider(null, selectedNode, selectedNodeOnly ? selectedNode : null));
+ },
+
+ /**
+ * @param {!WebInspector.DOMNode} selectedNode
+ * @return {!Promise<!WebInspector.ObjectEventListenersProvider>}
+ */
+ _createWindowProvider: function(selectedNode)
+ {
+ return this._getWindowObjectInNodeContext(selectedNode).then(providerForObject);
+
+ /**
+ * @param {!WebInspector.RemoteObject} object
+ * @return {!WebInspector.ObjectEventListenersProvider}
+ */
+ function providerForObject(object)
+ {
+ return new WebInspector.ObjectEventListenersProvider(null, object)
+ }
+ },
+
+ /**
+ * @param {!WebInspector.DOMNode} node
+ * @return {!Promise<!WebInspector.RemoteObject>} object
+ */
+ _getWindowObjectInNodeContext: function(node)
+ {
+ return new Promise(getWindowObject);
+
+ /**
+ * @param {function(?)} fulfill
+ * @param {function(*)} reject
+ */
+ function getWindowObject(fulfill, reject)
+ {
+ var executionContexts = node.target().runtimeModel.executionContexts();
+ var context = null;
+ if (node.frameId()) {
+ for (var i = 0; i < executionContexts.length; ++i) {
+ var executionContext = executionContexts[i];
+ if (executionContext.frameId === node.frameId() && executionContext.isMainWorldContext)
+ context = executionContext;
+ }
+ } else {
+ context = executionContexts[0];
+ }
+ context.evaluate("window", WebInspector.ObjectEventListenersProvider.objectGroupName, false, true, false, false, fulfill);
+ }
+ },
+
+ _changeSetting: function()
+ {
+ var selectedOption = this.settingsSelectElement[this.settingsSelectElement.selectedIndex];
+ this._eventListenersFilterSetting.set(selectedOption.value);
+ this.update();
+ },
+
+ __proto__: WebInspector.ElementsSidebarPane.prototype
+}
« no previous file with comments | « Source/devtools/front_end/components/module.json ('k') | Source/devtools/front_end/elements/ElementsPanel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698