| 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
|
| +}
|
|
|