diff --git a/Libraries/LibHTML/CSS/Selector.h b/Libraries/LibHTML/CSS/Selector.h
index 1648a911f4..967b9e963d 100644
--- a/Libraries/LibHTML/CSS/Selector.h
+++ b/Libraries/LibHTML/CSS/Selector.h
@@ -18,6 +18,7 @@ public:
enum class Relation {
None,
ImmediateChild,
+ Descendant,
};
Relation relation { Relation::None };
diff --git a/Libraries/LibHTML/Dump.cpp b/Libraries/LibHTML/Dump.cpp
index 0252c061b7..ae1d14e4f0 100644
--- a/Libraries/LibHTML/Dump.cpp
+++ b/Libraries/LibHTML/Dump.cpp
@@ -155,6 +155,9 @@ void dump_rule(const StyleRule& rule)
case Selector::Component::Relation::ImmediateChild:
relation_description = "{ImmediateChild}";
break;
+ case Selector::Component::Relation::Descendant:
+ relation_description = "{Descendant}";
+ break;
}
dbgprintf(" %s:%s %s\n", type_description, component.value.characters(), relation_description);
}
diff --git a/Libraries/LibHTML/Parser/CSSParser.cpp b/Libraries/LibHTML/Parser/CSSParser.cpp
index 61489b5d53..77df32ae2d 100644
--- a/Libraries/LibHTML/Parser/CSSParser.cpp
+++ b/Libraries/LibHTML/Parser/CSSParser.cpp
@@ -88,7 +88,7 @@ public:
{
consume_whitespace();
Selector::Component::Type type;
- Selector::Component::Relation relation = Selector::Component::Relation::None;
+ Selector::Component::Relation relation = Selector::Component::Relation::Descendant;
if (peek() == '{')
return {};
@@ -149,6 +149,10 @@ public:
break;
}
+ if (components.is_empty())
+ return;
+ components.first().relation = Selector::Component::Relation::None;
+
current_rule.selectors.append(Selector(move(components)));
};