mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 13:48:12 +00:00
LibWeb: Make HTMLDocumentParser take an existing document
We shouldn't really be creating the document objects inside the parser, since that makes it hard to hook up e.g JavaScript bindings early on.
This commit is contained in:
parent
4dbecf0b65
commit
22c582a887
4 changed files with 14 additions and 19 deletions
|
@ -112,21 +112,15 @@ static Vector<FlyString> s_quirks_public_ids = {
|
|||
|
||||
RefPtr<DOM::Document> 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<DOM::Node> 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<DOM::Node> HTMLDocumentParser::parse_html_fragment(DOM::Elem
|
|||
}
|
||||
return children;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -63,8 +63,7 @@ RefPtr<DOM::Document> 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<DOM::Document> m_document;
|
||||
NonnullRefPtr<DOM::Document> m_document;
|
||||
RefPtr<HTMLHeadElement> m_head_element;
|
||||
RefPtr<HTMLFormElement> m_form_element;
|
||||
RefPtr<DOM::Element> m_context_element;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue