summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-05-25 20:16:48 +0200
committerAndreas Kling <kling@serenityos.org>2020-05-25 20:16:48 +0200
commitf62a8d3b19dd70fb05bb4707adf66270fab93d9b (patch)
treec93fafb1a0df9b392acebd044f1960821b96cfab /Libraries
parent50265858abfc562297c62645e1ca96f16c46aad1 (diff)
downloadserenity-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.cpp21
-rw-r--r--Libraries/LibWeb/Parser/HTMLToken.h13
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;