summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibWeb')
-rw-r--r--Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp2
-rw-r--r--Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp34
-rw-r--r--Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.h22
-rw-r--r--Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp30
-rw-r--r--Userland/Libraries/LibWeb/CSS/Parser/Parser.h18
-rw-r--r--Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp2
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleResolver.cpp6
-rw-r--r--Userland/Libraries/LibWeb/DOM/Element.cpp2
-rw-r--r--Userland/Libraries/LibWeb/DOM/ParentNode.cpp4
-rw-r--r--Userland/Libraries/LibWeb/Loader/CSSLoader.cpp4
10 files changed, 83 insertions, 41 deletions
diff --git a/Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp b/Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp
index c265cce00a..d99d124cb5 100644
--- a/Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp
+++ b/Userland/Libraries/LibWeb/Bindings/CSSStyleDeclarationWrapperCustom.cpp
@@ -35,7 +35,7 @@ bool CSSStyleDeclarationWrapper::internal_set(const JS::PropertyName& name, JS::
if (vm().exception())
return false;
- auto new_value = parse_css_value(CSS::ParsingContext {}, css_text, property_id);
+ auto new_value = parse_css_value(CSS::DeprecatedParsingContext {}, css_text, property_id);
// FIXME: What are we supposed to do if we can't parse it?
if (!new_value)
return false;
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp
index 18b6bfc8f5..a8e2143045 100644
--- a/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp
+++ b/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp
@@ -33,33 +33,33 @@ namespace Web {
namespace CSS {
-ParsingContext::ParsingContext()
+DeprecatedParsingContext::DeprecatedParsingContext()
{
}
-ParsingContext::ParsingContext(const DOM::Document& document)
+DeprecatedParsingContext::DeprecatedParsingContext(const DOM::Document& document)
: m_document(&document)
{
}
-ParsingContext::ParsingContext(const DOM::ParentNode& parent_node)
+DeprecatedParsingContext::DeprecatedParsingContext(const DOM::ParentNode& parent_node)
: m_document(&parent_node.document())
{
}
-bool ParsingContext::in_quirks_mode() const
+bool DeprecatedParsingContext::in_quirks_mode() const
{
return m_document ? m_document->in_quirks_mode() : false;
}
-URL ParsingContext::complete_url(const String& addr) const
+URL DeprecatedParsingContext::complete_url(const String& addr) const
{
return m_document ? m_document->url().complete_url(addr) : URL::create_with_url_or_path(addr);
}
}
-static Optional<Color> parse_css_color(const CSS::ParsingContext&, const StringView& view)
+static Optional<Color> parse_css_color(const CSS::DeprecatedParsingContext&, const StringView& view)
{
if (view.equals_ignoring_case("transparent"))
return Color::from_rgba(0x00000000);
@@ -144,7 +144,7 @@ static Optional<float> try_parse_float(const StringView& string)
return is_negative ? -value : value;
}
-static CSS::Length parse_length(const CSS::ParsingContext& context, const StringView& view, bool& is_bad_length)
+static CSS::Length parse_length(const CSS::DeprecatedParsingContext& context, const StringView& view, bool& is_bad_length)
{
CSS::Length::Type type = CSS::Length::Type::Undefined;
Optional<float> value;
@@ -229,7 +229,7 @@ static StringView parse_custom_property_name(const StringView& value)
return value.substring_view(4, substring_length);
}
-RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, const StringView& string, CSS::PropertyID property_id)
+RefPtr<CSS::StyleValue> parse_css_value(const CSS::DeprecatedParsingContext& context, const StringView& string, CSS::PropertyID property_id)
{
bool is_bad_length = false;
@@ -269,7 +269,7 @@ RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, cons
return CSS::StringStyleValue::create(string);
}
-RefPtr<CSS::LengthStyleValue> parse_line_width(const CSS::ParsingContext& context, const StringView& part)
+RefPtr<CSS::LengthStyleValue> parse_line_width(const CSS::DeprecatedParsingContext& context, const StringView& part)
{
auto value = parse_css_value(context, part);
if (value && value->is_length())
@@ -277,7 +277,7 @@ RefPtr<CSS::LengthStyleValue> parse_line_width(const CSS::ParsingContext& contex
return nullptr;
}
-RefPtr<CSS::ColorStyleValue> parse_color(const CSS::ParsingContext& context, const StringView& part)
+RefPtr<CSS::ColorStyleValue> parse_color(const CSS::DeprecatedParsingContext& context, const StringView& part)
{
auto value = parse_css_value(context, part);
if (value && value->is_color())
@@ -285,7 +285,7 @@ RefPtr<CSS::ColorStyleValue> parse_color(const CSS::ParsingContext& context, con
return nullptr;
}
-RefPtr<CSS::IdentifierStyleValue> parse_line_style(const CSS::ParsingContext& context, const StringView& part)
+RefPtr<CSS::IdentifierStyleValue> parse_line_style(const CSS::DeprecatedParsingContext& context, const StringView& part)
{
auto parsed_value = parse_css_value(context, part);
if (!parsed_value || parsed_value->type() != CSS::StyleValue::Type::Identifier)
@@ -316,7 +316,7 @@ RefPtr<CSS::IdentifierStyleValue> parse_line_style(const CSS::ParsingContext& co
class CSSParser {
public:
- CSSParser(const CSS::ParsingContext& context, const StringView& input)
+ CSSParser(const CSS::DeprecatedParsingContext& context, const StringView& input)
: m_context(context)
, css(input)
{
@@ -1027,7 +1027,7 @@ public:
}
private:
- CSS::ParsingContext m_context;
+ CSS::DeprecatedParsingContext m_context;
NonnullRefPtrVector<CSS::CSSRule> rules;
@@ -1045,13 +1045,13 @@ private:
StringView css;
};
-Optional<CSS::Selector> parse_selector(const CSS::ParsingContext& context, const StringView& selector_text)
+Optional<CSS::Selector> parse_selector(const CSS::DeprecatedParsingContext& context, const StringView& selector_text)
{
CSSParser parser(context, selector_text);
return parser.parse_individual_selector();
}
-RefPtr<CSS::CSSStyleSheet> parse_css(const CSS::ParsingContext& context, const StringView& css)
+RefPtr<CSS::CSSStyleSheet> parse_css(const CSS::DeprecatedParsingContext& context, const StringView& css)
{
if (css.is_empty())
return CSS::CSSStyleSheet::create({});
@@ -1059,7 +1059,7 @@ RefPtr<CSS::CSSStyleSheet> parse_css(const CSS::ParsingContext& context, const S
return parser.parse_sheet();
}
-RefPtr<CSS::CSSStyleDeclaration> parse_css_declaration(const CSS::ParsingContext& context, const StringView& css)
+RefPtr<CSS::CSSStyleDeclaration> parse_css_declaration(const CSS::DeprecatedParsingContext& context, const StringView& css)
{
if (css.is_empty())
return CSS::CSSStyleDeclaration::create({}, {});
@@ -1072,6 +1072,6 @@ RefPtr<CSS::StyleValue> parse_html_length(const DOM::Document& document, const S
auto integer = string.to_int();
if (integer.has_value())
return CSS::LengthStyleValue::create(CSS::Length::make_px(integer.value()));
- return parse_css_value(CSS::ParsingContext(document), string);
+ return parse_css_value(CSS::DeprecatedParsingContext(document), string);
}
}
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.h b/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.h
index c40d4c6387..64f755f0b4 100644
--- a/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.h
+++ b/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.h
@@ -11,11 +11,11 @@
#include <LibWeb/CSS/CSSStyleSheet.h>
namespace Web::CSS {
-class ParsingContext {
+class DeprecatedParsingContext {
public:
- ParsingContext();
- explicit ParsingContext(const DOM::Document&);
- explicit ParsingContext(const DOM::ParentNode&);
+ DeprecatedParsingContext();
+ explicit DeprecatedParsingContext(const DOM::Document&);
+ explicit DeprecatedParsingContext(const DOM::ParentNode&);
bool in_quirks_mode() const;
@@ -28,14 +28,14 @@ private:
namespace Web {
-RefPtr<CSS::CSSStyleSheet> parse_css(const CSS::ParsingContext&, const StringView&);
-RefPtr<CSS::CSSStyleDeclaration> parse_css_declaration(const CSS::ParsingContext&, const StringView&);
-RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext&, const StringView&, CSS::PropertyID property_id = CSS::PropertyID::Invalid);
-Optional<CSS::Selector> parse_selector(const CSS::ParsingContext&, const StringView&);
+RefPtr<CSS::CSSStyleSheet> parse_css(const CSS::DeprecatedParsingContext&, const StringView&);
+RefPtr<CSS::CSSStyleDeclaration> parse_css_declaration(const CSS::DeprecatedParsingContext&, const StringView&);
+RefPtr<CSS::StyleValue> parse_css_value(const CSS::DeprecatedParsingContext&, const StringView&, CSS::PropertyID property_id = CSS::PropertyID::Invalid);
+Optional<CSS::Selector> parse_selector(const CSS::DeprecatedParsingContext&, const StringView&);
-RefPtr<CSS::LengthStyleValue> parse_line_width(const CSS::ParsingContext&, const StringView&);
-RefPtr<CSS::ColorStyleValue> parse_color(const CSS::ParsingContext&, const StringView&);
-RefPtr<CSS::IdentifierStyleValue> parse_line_style(const CSS::ParsingContext&, const StringView&);
+RefPtr<CSS::LengthStyleValue> parse_line_width(const CSS::DeprecatedParsingContext&, const StringView&);
+RefPtr<CSS::ColorStyleValue> parse_color(const CSS::DeprecatedParsingContext&, const StringView&);
+RefPtr<CSS::IdentifierStyleValue> parse_line_style(const CSS::DeprecatedParsingContext&, const StringView&);
RefPtr<CSS::StyleValue> parse_html_length(const DOM::Document&, const StringView&);
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp
index 2833f12f0d..e12ad96892 100644
--- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp
+++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp
@@ -18,6 +18,7 @@
#include <LibWeb/CSS/Parser/StyleComponentValueRule.h>
#include <LibWeb/CSS/Parser/StyleFunctionRule.h>
#include <LibWeb/CSS/Selector.h>
+#include <LibWeb/DOM/Document.h>
#include <LibWeb/Dump.h>
#define CSS_PARSER_TRACE 1
@@ -29,8 +30,33 @@ static void log_parse_error(const SourceLocation& location = SourceLocation::cur
namespace Web::CSS {
-Parser::Parser(const StringView& input, const String& encoding)
- : m_tokenizer(input, encoding)
+ParsingContext::ParsingContext()
+{
+}
+
+ParsingContext::ParsingContext(DOM::Document const& document)
+ : m_document(&document)
+{
+}
+
+ParsingContext::ParsingContext(DOM::ParentNode const& parent_node)
+ : m_document(&parent_node.document())
+{
+}
+
+bool ParsingContext::in_quirks_mode() const
+{
+ return m_document ? m_document->in_quirks_mode() : false;
+}
+
+URL ParsingContext::complete_url(String const& addr) const
+{
+ return m_document ? m_document->url().complete_url(addr) : URL::create_with_url_or_path(addr);
+}
+
+Parser::Parser(ParsingContext const& context, StringView const& input, String const& encoding)
+ : m_context(context)
+ , m_tokenizer(input, encoding)
{
m_tokens = m_tokenizer.parse();
}
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h
index 0ab9421f37..6d3844f9b2 100644
--- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h
+++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h
@@ -26,9 +26,23 @@ class CSSRule;
class CSSStyleRule;
struct StyleProperty;
+class ParsingContext {
+public:
+ ParsingContext();
+ explicit ParsingContext(DOM::Document const&);
+ explicit ParsingContext(DOM::ParentNode const&);
+
+ bool in_quirks_mode() const;
+
+ URL complete_url(String const&) const;
+
+private:
+ const DOM::Document* m_document { nullptr };
+};
+
class Parser {
public:
- Parser(const StringView& input, const String& encoding = "utf-8");
+ Parser(ParsingContext const&, StringView const& input, String const& encoding = "utf-8");
~Parser();
// The normal parser entry point, for parsing stylesheets.
@@ -87,6 +101,8 @@ private:
RefPtr<CSSRule> convert_rule(NonnullRefPtr<QualifiedStyleRule>);
+ ParsingContext m_context;
+
Tokenizer m_tokenizer;
Vector<Token> m_tokens;
int m_iterator_offset { -1 };
diff --git a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp
index ccbaf1712d..141e426adf 100644
--- a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp
+++ b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp
@@ -109,7 +109,7 @@ static bool matches(const CSS::Selector::SimpleSelector& component, const DOM::E
case CSS::Selector::SimpleSelector::PseudoClass::Not: {
if (component.not_selector.is_empty())
return false;
- auto not_selector = Web::parse_selector(CSS::ParsingContext(element), component.not_selector);
+ auto not_selector = Web::parse_selector(CSS::DeprecatedParsingContext(element), component.not_selector);
if (!not_selector.has_value())
return false;
auto not_matches = matches(not_selector.value(), element);
diff --git a/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp b/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp
index 673f2e84df..235a884ac8 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp
@@ -34,7 +34,7 @@ static StyleSheet& default_stylesheet()
if (!sheet) {
extern const char default_stylesheet_source[];
String css = default_stylesheet_source;
- sheet = parse_css(CSS::ParsingContext(), css).leak_ref();
+ sheet = parse_css(CSS::DeprecatedParsingContext(), css).leak_ref();
}
return *sheet;
}
@@ -45,7 +45,7 @@ static StyleSheet& quirks_mode_stylesheet()
if (!sheet) {
extern const char quirks_mode_stylesheet_source[];
String css = quirks_mode_stylesheet_source;
- sheet = parse_css(CSS::ParsingContext(), css).leak_ref();
+ sheet = parse_css(CSS::DeprecatedParsingContext(), css).leak_ref();
}
return *sheet;
}
@@ -229,7 +229,7 @@ static inline bool is_background_repeat_property(const StyleValue& value)
static void set_property_expanding_shorthands(StyleProperties& style, CSS::PropertyID property_id, const StyleValue& value, DOM::Document& document, bool is_internally_generated_pseudo_property = false)
{
- CSS::ParsingContext context(document);
+ CSS::DeprecatedParsingContext context(document);
if (is_pseudo_property(property_id) && !is_internally_generated_pseudo_property) {
dbgln("Ignoring non-internally-generated pseudo property: {}", string_from_property_id(property_id));
diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp
index b7ef8fba34..bc0506088d 100644
--- a/Userland/Libraries/LibWeb/DOM/Element.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Element.cpp
@@ -159,7 +159,7 @@ void Element::parse_attribute(const FlyString& name, const String& value)
m_classes.unchecked_append(new_class);
}
} else if (name == HTML::AttributeNames::style) {
- m_inline_style = parse_css_declaration(CSS::ParsingContext(document()), value);
+ m_inline_style = parse_css_declaration(CSS::DeprecatedParsingContext(document()), value);
set_needs_style_update(true);
}
}
diff --git a/Userland/Libraries/LibWeb/DOM/ParentNode.cpp b/Userland/Libraries/LibWeb/DOM/ParentNode.cpp
index 924a36fdaf..904a1f4945 100644
--- a/Userland/Libraries/LibWeb/DOM/ParentNode.cpp
+++ b/Userland/Libraries/LibWeb/DOM/ParentNode.cpp
@@ -13,7 +13,7 @@ namespace Web::DOM {
RefPtr<Element> ParentNode::query_selector(const StringView& selector_text)
{
- auto selector = parse_selector(CSS::ParsingContext(*this), selector_text);
+ auto selector = parse_selector(CSS::DeprecatedParsingContext(*this), selector_text);
if (!selector.has_value())
return {};
@@ -33,7 +33,7 @@ RefPtr<Element> ParentNode::query_selector(const StringView& selector_text)
NonnullRefPtrVector<Element> ParentNode::query_selector_all(const StringView& selector_text)
{
- auto selector = parse_selector(CSS::ParsingContext(*this), selector_text);
+ auto selector = parse_selector(CSS::DeprecatedParsingContext(*this), selector_text);
if (!selector.has_value())
return {};
diff --git a/Userland/Libraries/LibWeb/Loader/CSSLoader.cpp b/Userland/Libraries/LibWeb/Loader/CSSLoader.cpp
index 27cb13f661..bfb9597e32 100644
--- a/Userland/Libraries/LibWeb/Loader/CSSLoader.cpp
+++ b/Userland/Libraries/LibWeb/Loader/CSSLoader.cpp
@@ -23,7 +23,7 @@ CSSLoader::CSSLoader(DOM::Element& owner_element)
void CSSLoader::load_from_text(const String& text)
{
- m_style_sheet = parse_css(CSS::ParsingContext(m_owner_element.document()), text);
+ m_style_sheet = parse_css(CSS::DeprecatedParsingContext(m_owner_element.document()), text);
if (!m_style_sheet) {
m_style_sheet = CSS::CSSStyleSheet::create({});
m_style_sheet->set_owner_node(&m_owner_element);
@@ -51,7 +51,7 @@ void CSSLoader::resource_did_load()
dbgln_if(CSS_LOADER_DEBUG, "CSSLoader: Resource did load, has encoded data. URL: {}", resource()->url());
}
- auto sheet = parse_css(CSS::ParsingContext(m_owner_element.document()), resource()->encoded_data());
+ auto sheet = parse_css(CSS::DeprecatedParsingContext(m_owner_element.document()), resource()->encoded_data());
if (!sheet) {
dbgln_if(CSS_LOADER_DEBUG, "CSSLoader: Failed to parse stylesheet: {}", resource()->url());
return;