diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
commit | 8dd16259287f58f9273002717ec4d27e97127719 (patch) | |
tree | 3863e62a53829a84037444beab3abd4ed9dfc7d0 /devtools/server/actors/inspector/node.js | |
parent | Releasing progress-linux version 126.0.1-1~progress7.99u1. (diff) | |
download | firefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz firefox-8dd16259287f58f9273002717ec4d27e97127719.zip |
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/server/actors/inspector/node.js')
-rw-r--r-- | devtools/server/actors/inspector/node.js | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/devtools/server/actors/inspector/node.js b/devtools/server/actors/inspector/node.js index 294e3e9564..fc4aa8f367 100644 --- a/devtools/server/actors/inspector/node.js +++ b/devtools/server/actors/inspector/node.js @@ -185,13 +185,14 @@ class NodeActor extends Actor { const hostActor = shadowRoot ? this.walker.getNode(this.rawNode.host) : null; + const nodeType = this.rawNode.nodeType; const form = { actor: this.actorID, host: hostActor ? hostActor.actorID : undefined, baseURI: this.rawNode.baseURI, parent: parentNode ? parentNode.actorID : undefined, - nodeType: this.rawNode.nodeType, + nodeType, namespaceURI: this.rawNode.namespaceURI, nodeName: this.rawNode.nodeName, nodeValue: this.rawNode.nodeValue, @@ -227,10 +228,24 @@ class NodeActor extends Actor { isInHTMLDocument: this.rawNode.ownerDocument && this.rawNode.ownerDocument.contentType === "text/html", - hasEventListeners: this._hasEventListeners, traits: {}, }; + // The event collector can be expensive, so only check for events on nodes that + // can display the `event` badge. + if ( + nodeType !== Node.COMMENT_NODE && + nodeType !== Node.TEXT_NODE && + nodeType !== Node.CDATA_SECTION_NODE && + nodeType !== Node.DOCUMENT_NODE && + nodeType !== Node.DOCUMENT_TYPE_NODE && + !form.isMarkerPseudoElement && + !form.isBeforePseudoElement && + !form.isAfterPseudoElement + ) { + form.hasEventListeners = this.hasEventListeners(); + } + if (this.isDocumentElement()) { form.isDocumentElement = true; } @@ -422,12 +437,15 @@ class NodeActor extends Actor { * Are there event listeners that are listening on this node? This method * uses all parsers registered via event-parsers.js.registerEventParser() to * check if there are any event listeners. + * + * @returns {Boolean} */ - get _hasEventListeners() { - // We need to pass a debugger instance from this compartment because - // otherwise we can't make use of it inside the event-collector module. - const dbg = this.getParent().targetActor.makeDebugger(); - return this._eventCollector.hasEventListeners(this.rawNode, dbg); + hasEventListeners(refreshCache = false) { + if (this._hasEventListenersCached === undefined || refreshCache) { + const result = this._eventCollector.hasEventListeners(this.rawNode); + this._hasEventListenersCached = result; + } + return this._hasEventListenersCached; } writeAttrs() { |