summaryrefslogtreecommitdiffstats
path: root/dom/base/nsINode.cpp
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-06-10 01:19:37 +0000
committerwolfbeast <mcwerewolf@wolfbeast.com>2020-06-13 11:50:06 +0200
commit0e0feed5daa8751b04bda7b4caac3854995cb0c8 (patch)
treee5292ae865b705e729ca30290820638975cd8df7 /dom/base/nsINode.cpp
parent7f238b1cf9775b43b119eb9a5e2ea0fe79fa5add (diff)
downloadUXP-0e0feed5daa8751b04bda7b4caac3854995cb0c8.tar
UXP-0e0feed5daa8751b04bda7b4caac3854995cb0c8.tar.gz
UXP-0e0feed5daa8751b04bda7b4caac3854995cb0c8.tar.lz
UXP-0e0feed5daa8751b04bda7b4caac3854995cb0c8.tar.xz
UXP-0e0feed5daa8751b04bda7b4caac3854995cb0c8.zip
Issue #1585 - Replace node.rootNode with node.getRootNode()
This removes the (default disabled) node.rootNode readonly attribute and replaces it with a node.getRootNode() function per WhatWG spec discussion. Based on work by John Dai <jdai@mozilla.com>
Diffstat (limited to 'dom/base/nsINode.cpp')
-rw-r--r--dom/base/nsINode.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/dom/base/nsINode.cpp b/dom/base/nsINode.cpp
index 212110b72..355bf0ebf 100644
--- a/dom/base/nsINode.cpp
+++ b/dom/base/nsINode.cpp
@@ -107,6 +107,7 @@
#include "GeometryUtils.h"
#include "nsIAnimationObserver.h"
#include "nsChildContentList.h"
+#include "mozilla/dom/NodeBinding.h"
#ifdef ACCESSIBILITY
#include "mozilla/dom/AccessibleNode.h"
@@ -250,6 +251,30 @@ nsINode::GetTextEditorRootContent(nsIEditor** aEditor)
return nullptr;
}
+nsINode* nsINode::GetRootNode(const GetRootNodeOptions& aOptions)
+{
+ if (aOptions.mComposed) {
+ if (IsInComposedDoc() && GetComposedDoc()) {
+ return OwnerDoc();
+ }
+
+ nsINode* node = this;
+ ShadowRoot* shadowRootParent = nullptr;
+ while(node) {
+ node = node->SubtreeRoot();
+ shadowRootParent = ShadowRoot::FromNode(node);
+ if (!shadowRootParent) {
+ break;
+ }
+ node = shadowRootParent->GetHost();
+ }
+
+ return node;
+ }
+
+ return SubtreeRoot();
+}
+
nsINode*
nsINode::SubtreeRoot() const
{