diff --git a/Libraries/LibHTML/DOM/Document.h b/Libraries/LibHTML/DOM/Document.h
index 2b3c10e9bd..66a64e92aa 100644
--- a/Libraries/LibHTML/DOM/Document.h
+++ b/Libraries/LibHTML/DOM/Document.h
@@ -23,6 +23,8 @@ public:
void add_sheet(const StyleSheet& sheet) { m_sheets.append(sheet); }
const NonnullRefPtrVector& stylesheets() const { return m_sheets; }
+ virtual String tag_name() const override { return "#document"; }
+
private:
OwnPtr m_style_resolver;
NonnullRefPtrVector m_sheets;
diff --git a/Libraries/LibHTML/DOM/Element.h b/Libraries/LibHTML/DOM/Element.h
index beb5618bd8..1b2d2b0ce7 100644
--- a/Libraries/LibHTML/DOM/Element.h
+++ b/Libraries/LibHTML/DOM/Element.h
@@ -26,7 +26,7 @@ public:
explicit Element(const String& tag_name);
virtual ~Element() override;
- const String& tag_name() const { return m_tag_name; }
+ virtual String tag_name() const override { return m_tag_name; }
String attribute(const String& name) const;
void set_attribute(const String& name, const String& value);
diff --git a/Libraries/LibHTML/DOM/Node.h b/Libraries/LibHTML/DOM/Node.h
index c26ed8a5aa..506da734a5 100644
--- a/Libraries/LibHTML/DOM/Node.h
+++ b/Libraries/LibHTML/DOM/Node.h
@@ -2,6 +2,7 @@
#include
#include
+#include
#include
#include
@@ -30,6 +31,8 @@ public:
RefPtr create_layout_node(const StyleResolver&, const StyleProperties* parent_properties) const;
RefPtr create_layout_tree(const StyleResolver&, const StyleProperties* parent_properties) const;
+ virtual String tag_name() const = 0;
+
protected:
explicit Node(NodeType);
diff --git a/Libraries/LibHTML/DOM/Text.h b/Libraries/LibHTML/DOM/Text.h
index 33b689a4b5..d09ab12740 100644
--- a/Libraries/LibHTML/DOM/Text.h
+++ b/Libraries/LibHTML/DOM/Text.h
@@ -10,6 +10,8 @@ public:
const String& data() const { return m_data; }
+ virtual String tag_name() const override { return "#text"; }
+
private:
String m_data;
};