LibWeb: Implement Node.getRootNode

This commit is contained in:
Luke Wilde 2021-10-16 03:04:55 +01:00 committed by Andreas Kling
parent 1f4a6e7c22
commit 1ea3f34823
Notes: sideshowbarker 2024-07-18 02:18:38 +09:00
3 changed files with 21 additions and 0 deletions

View File

@ -890,4 +890,14 @@ bool Node::in_a_document_tree() const
return root().is_document();
}
// https://dom.spec.whatwg.org/#dom-node-getrootnode
NonnullRefPtr<Node> Node::get_root_node(GetRootNodeOptions const& options)
{
// The getRootNode(options) method steps are to return thiss shadow-including root if options["composed"] is true; otherwise thiss root.
if (options.composed)
return shadow_including_root();
return root();
}
}

View File

@ -35,6 +35,10 @@ enum class NodeType : u16 {
NOTATION_NODE = 12
};
struct GetRootNodeOptions {
bool composed { false };
};
class Node
: public TreeNode<Node>
, public EventTarget
@ -195,6 +199,8 @@ public:
bool is_same_node(Node const*) const;
bool is_equal_node(Node const*) const;
NonnullRefPtr<Node> get_root_node(GetRootNodeOptions const& options = {});
protected:
Node(Document&, NodeType);

View File

@ -13,6 +13,7 @@ interface Node : EventTarget {
readonly attribute Element? parentElement;
readonly attribute boolean isConnected;
readonly attribute Document? ownerDocument;
Node getRootNode(optional GetRootNodeOptions options = {});
// FIXME: [LegacyNullToEmptyString] is not allowed on nullable types as per the Web IDL spec.
// However, we only apply it to setters, so this works as a stop gap.
@ -50,3 +51,7 @@ interface Node : EventTarget {
const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 16;
const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32;
};
dictionary GetRootNodeOptions {
boolean composed = false;
};