diff options
author | Andreas Kling <kling@serenityos.org> | 2020-05-25 20:16:48 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-05-25 20:16:48 +0200 |
commit | f62a8d3b19dd70fb05bb4707adf66270fab93d9b (patch) | |
tree | c93fafb1a0df9b392acebd044f1960821b96cfab /Libraries | |
parent | 50265858abfc562297c62645e1ca96f16c46aad1 (diff) | |
download | serenity-f62a8d3b19dd70fb05bb4707adf66270fab93d9b.zip |
LibWeb: Handle some more parser inputs in the "in head" insertion mode
Diffstat (limited to 'Libraries')
-rw-r--r-- | Libraries/LibWeb/Parser/HTMLDocumentParser.cpp | 21 | ||||
-rw-r--r-- | Libraries/LibWeb/Parser/HTMLToken.h | 13 |
2 files changed, 31 insertions, 3 deletions
diff --git a/Libraries/LibWeb/Parser/HTMLDocumentParser.cpp b/Libraries/LibWeb/Parser/HTMLDocumentParser.cpp index 91c2910db3..ebb5d6e1ec 100644 --- a/Libraries/LibWeb/Parser/HTMLDocumentParser.cpp +++ b/Libraries/LibWeb/Parser/HTMLDocumentParser.cpp @@ -206,6 +206,23 @@ void HTMLDocumentParser::handle_in_head(HTMLToken& token) return; } + if (token.is_doctype()) { + PARSE_ERROR(); + return; + } + + if (token.is_start_tag() && token.tag_name() == "html") { + process_using_the_rules_for(InsertionMode::InBody, token); + return; + } + + if (token.is_start_tag() && token.tag_name().is_one_of("base", "basefont", "bgsound", "link")) { + insert_html_element(token); + m_stack_of_open_elements.pop(); + token.acknowledge_self_closing_flag_if_set(); + return; + } + if (token.is_start_tag() && token.tag_name() == "title") { insert_html_element(token); m_tokenizer.switch_to({}, HTMLTokenizer::State::RCDATA); @@ -245,9 +262,7 @@ void HTMLDocumentParser::handle_in_head(HTMLToken& token) if (token.is_start_tag() && token.tag_name() == "meta") { auto element = insert_html_element(token); m_stack_of_open_elements.pop(); - if (token.is_self_closing()) { - ASSERT_NOT_REACHED(); - } + token.acknowledge_self_closing_flag_if_set(); return; } if (token.is_end_tag() && token.tag_name() == "head") { diff --git a/Libraries/LibWeb/Parser/HTMLToken.h b/Libraries/LibWeb/Parser/HTMLToken.h index aeeb92e0d2..b309638378 100644 --- a/Libraries/LibWeb/Parser/HTMLToken.h +++ b/Libraries/LibWeb/Parser/HTMLToken.h @@ -92,6 +92,18 @@ public: return m_tag.self_closing; } + bool has_acknowledged_self_closing_flag() const + { + ASSERT(is_self_closing()); + return m_tag.self_closing_acknowledged; + } + + void acknowledge_self_closing_flag_if_set() + { + if (is_self_closing()) + m_tag.self_closing_acknowledged = true; + } + Type type() const { return m_type; } String to_string() const; @@ -117,6 +129,7 @@ private: struct { StringBuilder tag_name; bool self_closing { false }; + bool self_closing_acknowledged { false }; Vector<AttributeBuilder> attributes; } m_tag; |