diff --git a/Tests/LibWeb/Text/expected/DOM/Node-isDefaultNamespace.txt b/Tests/LibWeb/Text/expected/DOM/Node-isDefaultNamespace.txt
new file mode 100644
index 00000000000..6f1aa7dbfd7
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/DOM/Node-isDefaultNamespace.txt
@@ -0,0 +1,12 @@
+documentFragment.isDefaultNamespace(null): true
+documentFragment.isDefaultNamespace(""): true
+documentFragment.isDefaultNamespace("foo"): false
+documentFragment.isDefaultNamespace("xmlms"): false
+docType.isDefaultNamespace(null): true
+docType.isDefaultNamespace(""): true
+docType.isDefaultNamespace("foo"): false
+docType.isDefaultNamespace("xmlms"): false
+element.isDefaultNamespace(null): true
+element.isDefaultNamespace(""): true
+element.isDefaultNamespace("foo"): false
+element.isDefaultNamespace("xmlms"): false
diff --git a/Tests/LibWeb/Text/input/DOM/Node-isDefaultNamespace.html b/Tests/LibWeb/Text/input/DOM/Node-isDefaultNamespace.html
new file mode 100644
index 00000000000..fe8a9797dea
--- /dev/null
+++ b/Tests/LibWeb/Text/input/DOM/Node-isDefaultNamespace.html
@@ -0,0 +1,31 @@
+
+
+
diff --git a/Userland/Libraries/LibWeb/DOM/Node.cpp b/Userland/Libraries/LibWeb/DOM/Node.cpp
index fbfb089decd..097c94547ad 100644
--- a/Userland/Libraries/LibWeb/DOM/Node.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Node.cpp
@@ -1733,6 +1733,20 @@ Optional Node::lookup_namespace_uri(Optional prefix) const
return locate_a_namespace(prefix);
}
+// https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace
+bool Node::is_default_namespace(Optional namespace_) const
+{
+ // 1. If namespace is the empty string, then set it to null.
+ if (namespace_.has_value() && namespace_->is_empty())
+ namespace_ = {};
+
+ // 2. Let defaultNamespace be the result of running locate a namespace for this using null.
+ auto default_namespace = locate_a_namespace({});
+
+ // 3. Return true if defaultNamespace is the same as namespace; otherwise false.
+ return default_namespace == namespace_;
+}
+
// https://dom.spec.whatwg.org/#in-a-document-tree
bool Node::in_a_document_tree() const
{
diff --git a/Userland/Libraries/LibWeb/DOM/Node.h b/Userland/Libraries/LibWeb/DOM/Node.h
index 1efa4f5cc77..02f7d698c25 100644
--- a/Userland/Libraries/LibWeb/DOM/Node.h
+++ b/Userland/Libraries/LibWeb/DOM/Node.h
@@ -697,6 +697,7 @@ public:
Optional locate_a_namespace(Optional const& prefix) const;
Optional lookup_namespace_uri(Optional prefix) const;
+ bool is_default_namespace(Optional namespace_) const;
protected:
Node(JS::Realm&, Document&, NodeType);
diff --git a/Userland/Libraries/LibWeb/DOM/Node.idl b/Userland/Libraries/LibWeb/DOM/Node.idl
index 0b6e88f95e6..f09c7933963 100644
--- a/Userland/Libraries/LibWeb/DOM/Node.idl
+++ b/Userland/Libraries/LibWeb/DOM/Node.idl
@@ -56,7 +56,7 @@ interface Node : EventTarget {
[FIXME] DOMString? lookupPrefix(DOMString? namespace);
DOMString? lookupNamespaceURI(DOMString? prefix);
- [FIXME] boolean isDefaultNamespace(DOMString? namespace);
+ boolean isDefaultNamespace(DOMString? namespace);
[ImplementedAs=pre_insert, CEReactions] Node insertBefore(Node node, Node? child);
[CEReactions] Node appendChild(Node node);