LibWeb: Handle some more parser inputs in the "in head" insertion mode

This commit is contained in:
Andreas Kling 2020-05-25 20:16:48 +02:00
parent 50265858ab
commit f62a8d3b19
Notes: sideshowbarker 2024-07-19 06:08:58 +09:00
2 changed files with 31 additions and 3 deletions

View file

@ -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") {

View file

@ -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;