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__"