diff --git a/Libraries/LibWeb/HTML/Parser/HTMLDocumentParser.cpp b/Libraries/LibWeb/HTML/Parser/HTMLDocumentParser.cpp
index 837d5cdd4e..6e9c2e2f4d 100644
--- a/Libraries/LibWeb/HTML/Parser/HTMLDocumentParser.cpp
+++ b/Libraries/LibWeb/HTML/Parser/HTMLDocumentParser.cpp
@@ -112,21 +112,15 @@ static Vector s_quirks_public_ids = {
RefPtr parse_html_document(const StringView& data, const URL& url, const String& encoding)
{
- HTMLDocumentParser parser(data, TextCodec::get_standardized_encoding(encoding));
+ auto document = DOM::Document::create(url);
+ HTMLDocumentParser parser(document, data, TextCodec::get_standardized_encoding(encoding));
parser.run(url);
- return parser.document();
+ return document;
}
-HTMLDocumentParser::HTMLDocumentParser(const StringView& input, const String& encoding)
+HTMLDocumentParser::HTMLDocumentParser(DOM::Document& document, const StringView& input, const String& encoding)
: m_tokenizer(input, encoding)
-{
- m_document = DOM::Document::create();
- m_document->set_encoding(encoding);
-}
-
-HTMLDocumentParser::HTMLDocumentParser(const StringView& input, const String& encoding, DOM::Document& existing_document)
- : m_tokenizer(input, encoding)
- , m_document(existing_document)
+ , m_document(document)
{
m_document->set_encoding(encoding);
}
@@ -2975,7 +2969,8 @@ DOM::Document& HTMLDocumentParser::document()
NonnullRefPtrVector HTMLDocumentParser::parse_html_fragment(DOM::Element& context_element, const StringView& markup)
{
- HTMLDocumentParser parser(markup, "utf-8");
+ auto temp_document = DOM::Document::create();
+ HTMLDocumentParser parser(*temp_document, markup, "utf-8");
parser.m_context_element = context_element;
parser.m_parsing_fragment = true;
parser.document().set_quirks_mode(context_element.document().mode());
@@ -3022,5 +3017,4 @@ NonnullRefPtrVector HTMLDocumentParser::parse_html_fragment(DOM::Elem
}
return children;
}
-
}
diff --git a/Libraries/LibWeb/HTML/Parser/HTMLDocumentParser.h b/Libraries/LibWeb/HTML/Parser/HTMLDocumentParser.h
index f7db80abf5..4abbb74b72 100644
--- a/Libraries/LibWeb/HTML/Parser/HTMLDocumentParser.h
+++ b/Libraries/LibWeb/HTML/Parser/HTMLDocumentParser.h
@@ -63,8 +63,7 @@ RefPtr parse_html_document(const StringView&, const URL&, const S
class HTMLDocumentParser {
public:
- HTMLDocumentParser(const StringView& input, const String& encoding);
- HTMLDocumentParser(const StringView& input, const String& encoding, DOM::Document& existing_document);
+ HTMLDocumentParser(DOM::Document&, const StringView& input, const String& encoding);
~HTMLDocumentParser();
void run(const URL&);
@@ -180,7 +179,7 @@ private:
bool m_stop_parsing { false };
size_t m_script_nesting_level { 0 };
- RefPtr m_document;
+ NonnullRefPtr m_document;
RefPtr m_head_element;
RefPtr m_form_element;
RefPtr m_context_element;
diff --git a/Libraries/LibWeb/Loader/FrameLoader.cpp b/Libraries/LibWeb/Loader/FrameLoader.cpp
index 9df29cf52e..632f25d736 100644
--- a/Libraries/LibWeb/Loader/FrameLoader.cpp
+++ b/Libraries/LibWeb/Loader/FrameLoader.cpp
@@ -214,7 +214,8 @@ bool FrameLoader::load(const URL& url, Type type)
void FrameLoader::load_html(const StringView& html, const URL& url)
{
- HTML::HTMLDocumentParser parser(html, "utf-8");
+ auto document = DOM::Document::create(url);
+ HTML::HTMLDocumentParser parser(document, html, "utf-8");
parser.run(url);
frame().set_document(&parser.document());
}
diff --git a/Userland/test-web.cpp b/Userland/test-web.cpp
index cf06d58d6a..4a1a66e0ae 100644
--- a/Userland/test-web.cpp
+++ b/Userland/test-web.cpp
@@ -240,7 +240,7 @@ void TestRunner::run()
Web::ResourceLoader::the().load_sync(
page_to_load,
[&](auto data, auto&) {
- Web::HTML::HTMLDocumentParser parser(data, "utf-8", *m_page_view->document());
+ Web::HTML::HTMLDocumentParser parser(*m_page_view->document(), data, "utf-8");
parser.run(page_to_load);
},
[page_to_load](auto error) {
@@ -350,7 +350,8 @@ JSFileResult TestRunner::run_file_test(const String& test_path)
page_to_load,
[&](auto data, auto&) {
// Create a new parser and immediately get its document to replace the old interpreter.
- Web::HTML::HTMLDocumentParser parser(data, "utf-8");
+ auto document = Web::DOM::Document::create();
+ Web::HTML::HTMLDocumentParser parser(document, data, "utf-8");
auto& new_interpreter = parser.document().interpreter();
// Setup the test environment and call "__BeforeInitialPageLoad__"