mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-30 12:49:19 +00:00
LibWeb/CSS: Qualify uses of LibURL
To prepare for introducing a CSS::URL type, we need to qualify any use of LibURL as `::URL::foo` instead of `URL::foo` so the compiler doesn't get confused. Many of these uses will be replaced, but I don't want to mix this in with what will likely already be a large change.
This commit is contained in:
parent
da1ff1ba40
commit
c82f4b46a2
Notes:
github-actions[bot]
2025-04-09 17:48:07 +00:00
Author: https://github.com/AtkinsSJ
Commit: c82f4b46a2
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4285
Reviewed-by: https://github.com/tcl3 ✅
24 changed files with 77 additions and 76 deletions
|
@ -23,13 +23,13 @@ namespace Web::CSS {
|
||||||
|
|
||||||
GC_DEFINE_ALLOCATOR(CSSImportRule);
|
GC_DEFINE_ALLOCATOR(CSSImportRule);
|
||||||
|
|
||||||
GC::Ref<CSSImportRule> CSSImportRule::create(URL::URL url, DOM::Document& document, RefPtr<Supports> supports, Vector<NonnullRefPtr<MediaQuery>> media_query_list)
|
GC::Ref<CSSImportRule> CSSImportRule::create(::URL::URL url, DOM::Document& document, RefPtr<Supports> supports, Vector<NonnullRefPtr<MediaQuery>> media_query_list)
|
||||||
{
|
{
|
||||||
auto& realm = document.realm();
|
auto& realm = document.realm();
|
||||||
return realm.create<CSSImportRule>(move(url), document, supports, move(media_query_list));
|
return realm.create<CSSImportRule>(move(url), document, supports, move(media_query_list));
|
||||||
}
|
}
|
||||||
|
|
||||||
CSSImportRule::CSSImportRule(URL::URL url, DOM::Document& document, RefPtr<Supports> supports, Vector<NonnullRefPtr<MediaQuery>> media_query_list)
|
CSSImportRule::CSSImportRule(::URL::URL url, DOM::Document& document, RefPtr<Supports> supports, Vector<NonnullRefPtr<MediaQuery>> media_query_list)
|
||||||
: CSSRule(document.realm(), Type::Import)
|
: CSSRule(document.realm(), Type::Import)
|
||||||
, m_url(move(url))
|
, m_url(move(url))
|
||||||
, m_document(document)
|
, m_document(document)
|
||||||
|
|
|
@ -21,11 +21,11 @@ class CSSImportRule final
|
||||||
GC_DECLARE_ALLOCATOR(CSSImportRule);
|
GC_DECLARE_ALLOCATOR(CSSImportRule);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] static GC::Ref<CSSImportRule> create(URL::URL, DOM::Document&, RefPtr<Supports>, Vector<NonnullRefPtr<MediaQuery>>);
|
[[nodiscard]] static GC::Ref<CSSImportRule> create(::URL::URL, DOM::Document&, RefPtr<Supports>, Vector<NonnullRefPtr<MediaQuery>>);
|
||||||
|
|
||||||
virtual ~CSSImportRule() = default;
|
virtual ~CSSImportRule() = default;
|
||||||
|
|
||||||
URL::URL const& url() const { return m_url; }
|
::URL::URL const& url() const { return m_url; }
|
||||||
// FIXME: This should return only the specified part of the url. eg, "stuff/foo.css", not "https://example.com/stuff/foo.css".
|
// FIXME: This should return only the specified part of the url. eg, "stuff/foo.css", not "https://example.com/stuff/foo.css".
|
||||||
String href() const { return m_url.to_string(); }
|
String href() const { return m_url.to_string(); }
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ public:
|
||||||
Optional<String> supports_text() const;
|
Optional<String> supports_text() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CSSImportRule(URL::URL, DOM::Document&, RefPtr<Supports>, Vector<NonnullRefPtr<MediaQuery>>);
|
CSSImportRule(::URL::URL, DOM::Document&, RefPtr<Supports>, Vector<NonnullRefPtr<MediaQuery>>);
|
||||||
|
|
||||||
virtual void initialize(JS::Realm&) override;
|
virtual void initialize(JS::Realm&) override;
|
||||||
virtual void visit_edges(Cell::Visitor&) override;
|
virtual void visit_edges(Cell::Visitor&) override;
|
||||||
|
@ -49,7 +49,7 @@ private:
|
||||||
void fetch();
|
void fetch();
|
||||||
void set_style_sheet(GC::Ref<CSSStyleSheet>);
|
void set_style_sheet(GC::Ref<CSSStyleSheet>);
|
||||||
|
|
||||||
URL::URL m_url;
|
::URL::URL m_url;
|
||||||
GC::Ptr<DOM::Document> m_document;
|
GC::Ptr<DOM::Document> m_document;
|
||||||
RefPtr<Supports> m_supports;
|
RefPtr<Supports> m_supports;
|
||||||
Vector<NonnullRefPtr<MediaQuery>> m_media_query_list;
|
Vector<NonnullRefPtr<MediaQuery>> m_media_query_list;
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace Web::CSS {
|
||||||
|
|
||||||
GC_DEFINE_ALLOCATOR(CSSStyleSheet);
|
GC_DEFINE_ALLOCATOR(CSSStyleSheet);
|
||||||
|
|
||||||
GC::Ref<CSSStyleSheet> CSSStyleSheet::create(JS::Realm& realm, CSSRuleList& rules, MediaList& media, Optional<URL::URL> location)
|
GC::Ref<CSSStyleSheet> CSSStyleSheet::create(JS::Realm& realm, CSSRuleList& rules, MediaList& media, Optional<::URL::URL> location)
|
||||||
{
|
{
|
||||||
return realm.create<CSSStyleSheet>(realm, rules, media, move(location));
|
return realm.create<CSSStyleSheet>(realm, rules, media, move(location));
|
||||||
}
|
}
|
||||||
|
@ -41,12 +41,12 @@ WebIDL::ExceptionOr<GC::Ref<CSSStyleSheet>> CSSStyleSheet::construct_impl(JS::Re
|
||||||
|
|
||||||
// 3. Set sheet’s stylesheet base URL to the baseURL attribute value from options.
|
// 3. Set sheet’s stylesheet base URL to the baseURL attribute value from options.
|
||||||
if (options.has_value() && options->base_url.has_value()) {
|
if (options.has_value() && options->base_url.has_value()) {
|
||||||
Optional<URL::URL> sheet_location_url;
|
Optional<::URL::URL> sheet_location_url;
|
||||||
if (sheet->location().has_value())
|
if (sheet->location().has_value())
|
||||||
sheet_location_url = sheet->location().release_value();
|
sheet_location_url = sheet->location().release_value();
|
||||||
|
|
||||||
// AD-HOC: This isn't explicitly mentioned in the specification, but multiple modern browsers do this.
|
// AD-HOC: This isn't explicitly mentioned in the specification, but multiple modern browsers do this.
|
||||||
Optional<URL::URL> url = sheet->location().has_value() ? sheet_location_url->complete_url(options->base_url.value()) : URL::Parser::basic_parse(options->base_url.value());
|
Optional<::URL::URL> url = sheet->location().has_value() ? sheet_location_url->complete_url(options->base_url.value()) : ::URL::Parser::basic_parse(options->base_url.value());
|
||||||
if (!url.has_value())
|
if (!url.has_value())
|
||||||
return WebIDL::NotAllowedError::create(realm, "Constructed style sheets must have a valid base URL"_string);
|
return WebIDL::NotAllowedError::create(realm, "Constructed style sheets must have a valid base URL"_string);
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ WebIDL::ExceptionOr<GC::Ref<CSSStyleSheet>> CSSStyleSheet::construct_impl(JS::Re
|
||||||
return sheet;
|
return sheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSSStyleSheet::CSSStyleSheet(JS::Realm& realm, CSSRuleList& rules, MediaList& media, Optional<URL::URL> location)
|
CSSStyleSheet::CSSStyleSheet(JS::Realm& realm, CSSRuleList& rules, MediaList& media, Optional<::URL::URL> location)
|
||||||
: StyleSheet(realm, media)
|
: StyleSheet(realm, media)
|
||||||
, m_rules(&rules)
|
, m_rules(&rules)
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,12 +27,13 @@ struct CSSStyleSheetInit {
|
||||||
bool disabled { false };
|
bool disabled { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// https://drafts.csswg.org/cssom-1/#cssstylesheet
|
||||||
class CSSStyleSheet final : public StyleSheet {
|
class CSSStyleSheet final : public StyleSheet {
|
||||||
WEB_PLATFORM_OBJECT(CSSStyleSheet, StyleSheet);
|
WEB_PLATFORM_OBJECT(CSSStyleSheet, StyleSheet);
|
||||||
GC_DECLARE_ALLOCATOR(CSSStyleSheet);
|
GC_DECLARE_ALLOCATOR(CSSStyleSheet);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] static GC::Ref<CSSStyleSheet> create(JS::Realm&, CSSRuleList&, MediaList&, Optional<URL::URL> location);
|
[[nodiscard]] static GC::Ref<CSSStyleSheet> create(JS::Realm&, CSSRuleList&, MediaList&, Optional<::URL::URL> location);
|
||||||
static WebIDL::ExceptionOr<GC::Ref<CSSStyleSheet>> construct_impl(JS::Realm&, Optional<CSSStyleSheetInit> const& options = {});
|
static WebIDL::ExceptionOr<GC::Ref<CSSStyleSheet>> construct_impl(JS::Realm&, Optional<CSSStyleSheetInit> const& options = {});
|
||||||
|
|
||||||
virtual ~CSSStyleSheet() override = default;
|
virtual ~CSSStyleSheet() override = default;
|
||||||
|
@ -74,8 +75,8 @@ public:
|
||||||
|
|
||||||
Vector<GC::Ref<CSSImportRule>> const& import_rules() const { return m_import_rules; }
|
Vector<GC::Ref<CSSImportRule>> const& import_rules() const { return m_import_rules; }
|
||||||
|
|
||||||
Optional<URL::URL> base_url() const { return m_base_url; }
|
Optional<::URL::URL> base_url() const { return m_base_url; }
|
||||||
void set_base_url(Optional<URL::URL> base_url) { m_base_url = move(base_url); }
|
void set_base_url(Optional<::URL::URL> base_url) { m_base_url = move(base_url); }
|
||||||
|
|
||||||
bool constructed() const { return m_constructed; }
|
bool constructed() const { return m_constructed; }
|
||||||
|
|
||||||
|
@ -94,7 +95,7 @@ public:
|
||||||
bool has_associated_font_loader(FontLoader& font_loader) const;
|
bool has_associated_font_loader(FontLoader& font_loader) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CSSStyleSheet(JS::Realm&, CSSRuleList&, MediaList&, Optional<URL::URL> location);
|
CSSStyleSheet(JS::Realm&, CSSRuleList&, MediaList&, Optional<::URL::URL> location);
|
||||||
|
|
||||||
virtual void initialize(JS::Realm&) override;
|
virtual void initialize(JS::Realm&) override;
|
||||||
virtual void visit_edges(Cell::Visitor&) override;
|
virtual void visit_edges(Cell::Visitor&) override;
|
||||||
|
@ -113,7 +114,7 @@ private:
|
||||||
|
|
||||||
GC::Ptr<CSSRule> m_owner_css_rule;
|
GC::Ptr<CSSRule> m_owner_css_rule;
|
||||||
|
|
||||||
Optional<URL::URL> m_base_url;
|
Optional<::URL::URL> m_base_url;
|
||||||
GC::Ptr<DOM::Document const> m_constructor_document;
|
GC::Ptr<DOM::Document const> m_constructor_document;
|
||||||
HashTable<GC::Ptr<DOM::Node>> m_owning_documents_or_shadow_roots;
|
HashTable<GC::Ptr<DOM::Node>> m_owning_documents_or_shadow_roots;
|
||||||
bool m_constructed { false };
|
bool m_constructed { false };
|
||||||
|
|
|
@ -225,40 +225,40 @@ public:
|
||||||
: m_value(color)
|
: m_value(color)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
SVGPaint(URL::URL const& url)
|
SVGPaint(::URL::URL const& url)
|
||||||
: m_value(url)
|
: m_value(url)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_color() const { return m_value.has<Color>(); }
|
bool is_color() const { return m_value.has<Color>(); }
|
||||||
bool is_url() const { return m_value.has<URL::URL>(); }
|
bool is_url() const { return m_value.has<::URL::URL>(); }
|
||||||
Color as_color() const { return m_value.get<Color>(); }
|
Color as_color() const { return m_value.get<Color>(); }
|
||||||
URL::URL const& as_url() const { return m_value.get<URL::URL>(); }
|
::URL::URL const& as_url() const { return m_value.get<::URL::URL>(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Variant<URL::URL, Color> m_value;
|
Variant<::URL::URL, Color> m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
// https://drafts.fxtf.org/css-masking-1/#typedef-mask-reference
|
// https://drafts.fxtf.org/css-masking-1/#typedef-mask-reference
|
||||||
class MaskReference {
|
class MaskReference {
|
||||||
public:
|
public:
|
||||||
// TODO: Support other mask types.
|
// TODO: Support other mask types.
|
||||||
MaskReference(URL::URL const& url)
|
MaskReference(::URL::URL const& url)
|
||||||
: m_url(url)
|
: m_url(url)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
URL::URL const& url() const { return m_url; }
|
::URL::URL const& url() const { return m_url; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
URL::URL m_url;
|
::URL::URL m_url;
|
||||||
};
|
};
|
||||||
|
|
||||||
// https://drafts.fxtf.org/css-masking/#the-clip-path
|
// https://drafts.fxtf.org/css-masking/#the-clip-path
|
||||||
// TODO: Support clip sources.
|
// TODO: Support clip sources.
|
||||||
class ClipPathReference {
|
class ClipPathReference {
|
||||||
public:
|
public:
|
||||||
ClipPathReference(URL::URL const& url)
|
ClipPathReference(::URL::URL const& url)
|
||||||
: m_clip_source(url)
|
: m_clip_source(url)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -270,16 +270,16 @@ public:
|
||||||
|
|
||||||
bool is_basic_shape() const { return m_clip_source.has<BasicShape>(); }
|
bool is_basic_shape() const { return m_clip_source.has<BasicShape>(); }
|
||||||
|
|
||||||
bool is_url() const { return m_clip_source.has<URL::URL>(); }
|
bool is_url() const { return m_clip_source.has<::URL::URL>(); }
|
||||||
|
|
||||||
URL::URL const& url() const { return m_clip_source.get<URL::URL>(); }
|
::URL::URL const& url() const { return m_clip_source.get<::URL::URL>(); }
|
||||||
|
|
||||||
BasicShapeStyleValue const& basic_shape() const { return *m_clip_source.get<BasicShape>(); }
|
BasicShapeStyleValue const& basic_shape() const { return *m_clip_source.get<BasicShape>(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
using BasicShape = NonnullRefPtr<BasicShapeStyleValue const>;
|
using BasicShape = NonnullRefPtr<BasicShapeStyleValue const>;
|
||||||
|
|
||||||
Variant<URL::URL, BasicShape> m_clip_source;
|
Variant<::URL::URL, BasicShape> m_clip_source;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BackgroundLayerData {
|
struct BackgroundLayerData {
|
||||||
|
|
|
@ -23,7 +23,7 @@ void fetch_a_style_resource(String const& url_value, CSSStyleSheet const& sheet,
|
||||||
auto base = sheet.base_url().value_or(environment_settings.api_base_url());
|
auto base = sheet.base_url().value_or(environment_settings.api_base_url());
|
||||||
|
|
||||||
// 3. Let parsedUrl be the result of the URL parser steps with urlValue’s url and base. If the algorithm returns an error, return.
|
// 3. Let parsedUrl be the result of the URL parser steps with urlValue’s url and base. If the algorithm returns an error, return.
|
||||||
auto parsed_url = URL::Parser::basic_parse(url_value, base);
|
auto parsed_url = ::URL::Parser::basic_parse(url_value, base);
|
||||||
if (!parsed_url.has_value())
|
if (!parsed_url.has_value())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ Vector<ParsedFontFace::Source> ParsedFontFace::sources_from_style_value(CSSStyle
|
||||||
[&](FontSourceStyleValue::Local const& local) {
|
[&](FontSourceStyleValue::Local const& local) {
|
||||||
sources.empend(extract_font_name(local.name), OptionalNone {});
|
sources.empend(extract_font_name(local.name), OptionalNone {});
|
||||||
},
|
},
|
||||||
[&](URL::URL const& url) {
|
[&](::URL::URL const& url) {
|
||||||
// FIXME: tech()
|
// FIXME: tech()
|
||||||
sources.empend(url, font_source.format());
|
sources.empend(url, font_source.format());
|
||||||
});
|
});
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace Web::CSS {
|
||||||
class ParsedFontFace {
|
class ParsedFontFace {
|
||||||
public:
|
public:
|
||||||
struct Source {
|
struct Source {
|
||||||
Variant<FlyString, URL::URL> local_or_url;
|
Variant<FlyString, ::URL::URL> local_or_url;
|
||||||
// FIXME: Do we need to keep this around, or is it only needed to discard unwanted formats during parsing?
|
// FIXME: Do we need to keep this around, or is it only needed to discard unwanted formats during parsing?
|
||||||
Optional<FlyString> format;
|
Optional<FlyString> format;
|
||||||
};
|
};
|
||||||
|
|
|
@ -42,7 +42,7 @@ GC::Ref<JS::Realm> internal_css_realm()
|
||||||
return *realm;
|
return *realm;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingParams const& context, StringView css, Optional<URL::URL> location, Vector<NonnullRefPtr<CSS::MediaQuery>> media_query_list)
|
CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingParams const& context, StringView css, Optional<::URL::URL> location, Vector<NonnullRefPtr<CSS::MediaQuery>> media_query_list)
|
||||||
{
|
{
|
||||||
if (css.is_empty()) {
|
if (css.is_empty()) {
|
||||||
auto rule_list = CSS::CSSRuleList::create_empty(*context.realm);
|
auto rule_list = CSS::CSSRuleList::create_empty(*context.realm);
|
||||||
|
|
|
@ -45,14 +45,14 @@ ParsingParams::ParsingParams(JS::Realm& realm, ParsingMode mode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ParsingParams::ParsingParams(JS::Realm& realm, URL::URL url, ParsingMode mode)
|
ParsingParams::ParsingParams(JS::Realm& realm, ::URL::URL url, ParsingMode mode)
|
||||||
: realm(realm)
|
: realm(realm)
|
||||||
, url(move(url))
|
, url(move(url))
|
||||||
, mode(mode)
|
, mode(mode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ParsingParams::ParsingParams(DOM::Document const& document, URL::URL url, ParsingMode mode)
|
ParsingParams::ParsingParams(DOM::Document const& document, ::URL::URL url, ParsingMode mode)
|
||||||
: realm(const_cast<JS::Realm&>(document.realm()))
|
: realm(const_cast<JS::Realm&>(document.realm()))
|
||||||
, document(&document)
|
, document(&document)
|
||||||
, url(move(url))
|
, url(move(url))
|
||||||
|
@ -86,7 +86,7 @@ Parser::Parser(ParsingParams const& context, Vector<Token> tokens)
|
||||||
|
|
||||||
// https://drafts.csswg.org/css-syntax/#parse-stylesheet
|
// https://drafts.csswg.org/css-syntax/#parse-stylesheet
|
||||||
template<typename T>
|
template<typename T>
|
||||||
Parser::ParsedStyleSheet Parser::parse_a_stylesheet(TokenStream<T>& input, Optional<URL::URL> location)
|
Parser::ParsedStyleSheet Parser::parse_a_stylesheet(TokenStream<T>& input, Optional<::URL::URL> location)
|
||||||
{
|
{
|
||||||
// To parse a stylesheet from an input given an optional url location:
|
// To parse a stylesheet from an input given an optional url location:
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ Vector<Rule> Parser::parse_a_stylesheets_contents(TokenStream<T>& input)
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://drafts.csswg.org/css-syntax/#parse-a-css-stylesheet
|
// https://drafts.csswg.org/css-syntax/#parse-a-css-stylesheet
|
||||||
CSSStyleSheet* Parser::parse_as_css_stylesheet(Optional<URL::URL> location, Vector<NonnullRefPtr<MediaQuery>> media_query_list)
|
CSSStyleSheet* Parser::parse_as_css_stylesheet(Optional<::URL::URL> location, Vector<NonnullRefPtr<MediaQuery>> media_query_list)
|
||||||
{
|
{
|
||||||
// To parse a CSS stylesheet, first parse a stylesheet.
|
// To parse a CSS stylesheet, first parse a stylesheet.
|
||||||
auto const& style_sheet = parse_a_stylesheet(m_token_stream, {});
|
auto const& style_sheet = parse_a_stylesheet(m_token_stream, {});
|
||||||
|
@ -1772,8 +1772,8 @@ Parser::ContextType Parser::context_type_for_at_rule(FlyString const& name)
|
||||||
return ContextType::Unknown;
|
return ContextType::Unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
template Parser::ParsedStyleSheet Parser::parse_a_stylesheet(TokenStream<Token>&, Optional<URL::URL>);
|
template Parser::ParsedStyleSheet Parser::parse_a_stylesheet(TokenStream<Token>&, Optional<::URL::URL>);
|
||||||
template Parser::ParsedStyleSheet Parser::parse_a_stylesheet(TokenStream<ComponentValue>&, Optional<URL::URL>);
|
template Parser::ParsedStyleSheet Parser::parse_a_stylesheet(TokenStream<ComponentValue>&, Optional<::URL::URL>);
|
||||||
|
|
||||||
template Vector<Rule> Parser::parse_a_stylesheets_contents(TokenStream<Token>& input);
|
template Vector<Rule> Parser::parse_a_stylesheets_contents(TokenStream<Token>& input);
|
||||||
template Vector<Rule> Parser::parse_a_stylesheets_contents(TokenStream<ComponentValue>& input);
|
template Vector<Rule> Parser::parse_a_stylesheets_contents(TokenStream<ComponentValue>& input);
|
||||||
|
@ -1853,10 +1853,10 @@ bool Parser::is_parsing_svg_presentation_attribute() const
|
||||||
|
|
||||||
// https://www.w3.org/TR/css-values-4/#relative-urls
|
// https://www.w3.org/TR/css-values-4/#relative-urls
|
||||||
// FIXME: URLs shouldn't be completed during parsing, but when used.
|
// FIXME: URLs shouldn't be completed during parsing, but when used.
|
||||||
Optional<URL::URL> Parser::complete_url(StringView relative_url) const
|
Optional<::URL::URL> Parser::complete_url(StringView relative_url) const
|
||||||
{
|
{
|
||||||
if (!m_url.is_valid())
|
if (!m_url.is_valid())
|
||||||
return URL::Parser::basic_parse(relative_url);
|
return ::URL::Parser::basic_parse(relative_url);
|
||||||
return m_url.complete_url(relative_url);
|
return m_url.complete_url(relative_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,13 +69,13 @@ enum class ParsingMode {
|
||||||
struct ParsingParams {
|
struct ParsingParams {
|
||||||
explicit ParsingParams(ParsingMode = ParsingMode::Normal);
|
explicit ParsingParams(ParsingMode = ParsingMode::Normal);
|
||||||
explicit ParsingParams(JS::Realm&, ParsingMode = ParsingMode::Normal);
|
explicit ParsingParams(JS::Realm&, ParsingMode = ParsingMode::Normal);
|
||||||
explicit ParsingParams(JS::Realm&, URL::URL, ParsingMode = ParsingMode::Normal);
|
explicit ParsingParams(JS::Realm&, ::URL::URL, ParsingMode = ParsingMode::Normal);
|
||||||
explicit ParsingParams(DOM::Document const&, URL::URL, ParsingMode = ParsingMode::Normal);
|
explicit ParsingParams(DOM::Document const&, ::URL::URL, ParsingMode = ParsingMode::Normal);
|
||||||
explicit ParsingParams(DOM::Document const&, ParsingMode = ParsingMode::Normal);
|
explicit ParsingParams(DOM::Document const&, ParsingMode = ParsingMode::Normal);
|
||||||
|
|
||||||
GC::Ptr<JS::Realm> realm;
|
GC::Ptr<JS::Realm> realm;
|
||||||
GC::Ptr<DOM::Document const> document;
|
GC::Ptr<DOM::Document const> document;
|
||||||
URL::URL url;
|
::URL::URL url;
|
||||||
ParsingMode mode { ParsingMode::Normal };
|
ParsingMode mode { ParsingMode::Normal };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ class Parser {
|
||||||
public:
|
public:
|
||||||
static Parser create(ParsingParams const&, StringView input, StringView encoding = "utf-8"sv);
|
static Parser create(ParsingParams const&, StringView input, StringView encoding = "utf-8"sv);
|
||||||
|
|
||||||
CSSStyleSheet* parse_as_css_stylesheet(Optional<URL::URL> location, Vector<NonnullRefPtr<MediaQuery>> media_query_list = {});
|
CSSStyleSheet* parse_as_css_stylesheet(Optional<::URL::URL> location, Vector<NonnullRefPtr<MediaQuery>> media_query_list = {});
|
||||||
|
|
||||||
struct PropertiesAndCustomProperties {
|
struct PropertiesAndCustomProperties {
|
||||||
Vector<StyleProperty> properties;
|
Vector<StyleProperty> properties;
|
||||||
|
@ -142,11 +142,11 @@ private:
|
||||||
|
|
||||||
// "Parse a stylesheet" is intended to be the normal parser entry point, for parsing stylesheets.
|
// "Parse a stylesheet" is intended to be the normal parser entry point, for parsing stylesheets.
|
||||||
struct ParsedStyleSheet {
|
struct ParsedStyleSheet {
|
||||||
Optional<URL::URL> location;
|
Optional<::URL::URL> location;
|
||||||
Vector<Rule> rules;
|
Vector<Rule> rules;
|
||||||
};
|
};
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ParsedStyleSheet parse_a_stylesheet(TokenStream<T>&, Optional<URL::URL> location);
|
ParsedStyleSheet parse_a_stylesheet(TokenStream<T>&, Optional<::URL::URL> location);
|
||||||
|
|
||||||
// "Parse a stylesheet’s contents" is intended for use by the CSSStyleSheet replace() method, and similar, which parse text into the contents of an existing stylesheet.
|
// "Parse a stylesheet’s contents" is intended for use by the CSSStyleSheet replace() method, and similar, which parse text into the contents of an existing stylesheet.
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -276,7 +276,7 @@ private:
|
||||||
Optional<GridRepeat> parse_repeat(Vector<ComponentValue> const&);
|
Optional<GridRepeat> parse_repeat(Vector<ComponentValue> const&);
|
||||||
Optional<ExplicitGridTrack> parse_track_sizing_function(ComponentValue const&);
|
Optional<ExplicitGridTrack> parse_track_sizing_function(ComponentValue const&);
|
||||||
|
|
||||||
Optional<URL::URL> parse_url_function(TokenStream<ComponentValue>&);
|
Optional<::URL::URL> parse_url_function(TokenStream<ComponentValue>&);
|
||||||
RefPtr<CSSStyleValue> parse_url_value(TokenStream<ComponentValue>&);
|
RefPtr<CSSStyleValue> parse_url_value(TokenStream<ComponentValue>&);
|
||||||
|
|
||||||
Optional<ShapeRadius> parse_shape_radius(TokenStream<ComponentValue>&);
|
Optional<ShapeRadius> parse_shape_radius(TokenStream<ComponentValue>&);
|
||||||
|
@ -471,11 +471,11 @@ private:
|
||||||
JS::Realm& realm() const;
|
JS::Realm& realm() const;
|
||||||
bool in_quirks_mode() const;
|
bool in_quirks_mode() const;
|
||||||
bool is_parsing_svg_presentation_attribute() const;
|
bool is_parsing_svg_presentation_attribute() const;
|
||||||
Optional<URL::URL> complete_url(StringView) const;
|
Optional<::URL::URL> complete_url(StringView) const;
|
||||||
|
|
||||||
GC::Ptr<DOM::Document const> m_document;
|
GC::Ptr<DOM::Document const> m_document;
|
||||||
GC::Ptr<JS::Realm> m_realm;
|
GC::Ptr<JS::Realm> m_realm;
|
||||||
URL::URL m_url;
|
::URL::URL m_url;
|
||||||
ParsingMode m_parsing_mode { ParsingMode::Normal };
|
ParsingMode m_parsing_mode { ParsingMode::Normal };
|
||||||
|
|
||||||
Vector<Token> m_tokens;
|
Vector<Token> m_tokens;
|
||||||
|
@ -519,7 +519,7 @@ private:
|
||||||
|
|
||||||
namespace Web {
|
namespace Web {
|
||||||
|
|
||||||
CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingParams const&, StringView, Optional<URL::URL> location = {}, Vector<NonnullRefPtr<CSS::MediaQuery>> = {});
|
CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingParams const&, StringView, Optional<::URL::URL> location = {}, Vector<NonnullRefPtr<CSS::MediaQuery>> = {});
|
||||||
CSS::Parser::Parser::PropertiesAndCustomProperties parse_css_style_attribute(CSS::Parser::ParsingParams const&, StringView);
|
CSS::Parser::Parser::PropertiesAndCustomProperties parse_css_style_attribute(CSS::Parser::ParsingParams const&, StringView);
|
||||||
Vector<CSS::Descriptor> parse_css_list_of_descriptors(CSS::Parser::ParsingParams const&, CSS::AtRuleID, StringView);
|
Vector<CSS::Descriptor> parse_css_list_of_descriptors(CSS::Parser::ParsingParams const&, CSS::AtRuleID, StringView);
|
||||||
RefPtr<CSS::CSSStyleValue> parse_css_value(CSS::Parser::ParsingParams const&, StringView, CSS::PropertyID property_id = CSS::PropertyID::Invalid);
|
RefPtr<CSS::CSSStyleValue> parse_css_value(CSS::Parser::ParsingParams const&, StringView, CSS::PropertyID property_id = CSS::PropertyID::Invalid);
|
||||||
|
|
|
@ -153,7 +153,7 @@ GC::Ptr<CSSImportRule> Parser::convert_to_import_rule(AtRule const& rule)
|
||||||
TokenStream tokens { rule.prelude };
|
TokenStream tokens { rule.prelude };
|
||||||
tokens.discard_whitespace();
|
tokens.discard_whitespace();
|
||||||
|
|
||||||
Optional<URL::URL> url = parse_url_function(tokens);
|
Optional<::URL::URL> url = parse_url_function(tokens);
|
||||||
if (!url.has_value() && tokens.next_token().is(Token::Type::String))
|
if (!url.has_value() && tokens.next_token().is(Token::Type::String))
|
||||||
url = complete_url(tokens.consume_a_token().token().string());
|
url = complete_url(tokens.consume_a_token().token().string());
|
||||||
|
|
||||||
|
|
|
@ -2014,7 +2014,7 @@ RefPtr<AbstractImageStyleValue> Parser::parse_image_value(TokenStream<ComponentV
|
||||||
if (url.has_value()) {
|
if (url.has_value()) {
|
||||||
// If the value is a 'url(..)' parse as image, but if it is just a reference 'url(#xx)', leave it alone,
|
// If the value is a 'url(..)' parse as image, but if it is just a reference 'url(#xx)', leave it alone,
|
||||||
// so we can parse as URL further on. These URLs are used as references inside SVG documents for masks.
|
// so we can parse as URL further on. These URLs are used as references inside SVG documents for masks.
|
||||||
if (!url.value().equals(m_url, URL::ExcludeFragment::Yes)) {
|
if (!url.value().equals(m_url, ::URL::ExcludeFragment::Yes)) {
|
||||||
tokens.discard_a_mark();
|
tokens.discard_a_mark();
|
||||||
return ImageStyleValue::create(url.value());
|
return ImageStyleValue::create(url.value());
|
||||||
}
|
}
|
||||||
|
@ -2562,12 +2562,12 @@ RefPtr<CSSStyleValue> Parser::parse_easing_value(TokenStream<ComponentValue>& to
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<URL::URL> Parser::parse_url_function(TokenStream<ComponentValue>& tokens)
|
Optional<::URL::URL> Parser::parse_url_function(TokenStream<ComponentValue>& tokens)
|
||||||
{
|
{
|
||||||
auto transaction = tokens.begin_transaction();
|
auto transaction = tokens.begin_transaction();
|
||||||
auto& component_value = tokens.consume_a_token();
|
auto& component_value = tokens.consume_a_token();
|
||||||
|
|
||||||
auto convert_string_to_url = [&](StringView url_string) -> Optional<URL::URL> {
|
auto convert_string_to_url = [&](StringView url_string) -> Optional<::URL::URL> {
|
||||||
auto url = complete_url(url_string);
|
auto url = complete_url(url_string);
|
||||||
if (url.has_value()) {
|
if (url.has_value()) {
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
|
|
@ -185,7 +185,7 @@ StyleComputer::StyleComputer(DOM::Document& document)
|
||||||
|
|
||||||
StyleComputer::~StyleComputer() = default;
|
StyleComputer::~StyleComputer() = default;
|
||||||
|
|
||||||
FontLoader::FontLoader(StyleComputer& style_computer, FlyString family_name, Vector<Gfx::UnicodeRange> unicode_ranges, Vector<URL::URL> urls, Function<void(FontLoader const&)> on_load, Function<void()> on_fail)
|
FontLoader::FontLoader(StyleComputer& style_computer, FlyString family_name, Vector<Gfx::UnicodeRange> unicode_ranges, Vector<::URL::URL> urls, Function<void(FontLoader const&)> on_load, Function<void()> on_fail)
|
||||||
: m_style_computer(style_computer)
|
: m_style_computer(style_computer)
|
||||||
, m_family_name(move(family_name))
|
, m_family_name(move(family_name))
|
||||||
, m_unicode_ranges(move(unicode_ranges))
|
, m_unicode_ranges(move(unicode_ranges))
|
||||||
|
@ -3028,11 +3028,11 @@ Optional<FontLoader&> StyleComputer::load_font_face(ParsedFontFace const& font_f
|
||||||
.slope = font_face.slope().value_or(0),
|
.slope = font_face.slope().value_or(0),
|
||||||
};
|
};
|
||||||
|
|
||||||
Vector<URL::URL> urls;
|
Vector<::URL::URL> urls;
|
||||||
for (auto const& source : font_face.sources()) {
|
for (auto const& source : font_face.sources()) {
|
||||||
// FIXME: These should be loaded relative to the stylesheet URL instead of the document URL.
|
// FIXME: These should be loaded relative to the stylesheet URL instead of the document URL.
|
||||||
if (source.local_or_url.has<URL::URL>())
|
if (source.local_or_url.has<::URL::URL>())
|
||||||
urls.append(*m_document->encoding_parse_url(source.local_or_url.get<URL::URL>().to_string()));
|
urls.append(*m_document->encoding_parse_url(source.local_or_url.get<::URL::URL>().to_string()));
|
||||||
// FIXME: Handle local()
|
// FIXME: Handle local()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -315,7 +315,7 @@ private:
|
||||||
|
|
||||||
class FontLoader : public ResourceClient {
|
class FontLoader : public ResourceClient {
|
||||||
public:
|
public:
|
||||||
FontLoader(StyleComputer& style_computer, FlyString family_name, Vector<Gfx::UnicodeRange> unicode_ranges, Vector<URL::URL> urls, ESCAPING Function<void(FontLoader const&)> on_load = {}, ESCAPING Function<void()> on_fail = {});
|
FontLoader(StyleComputer& style_computer, FlyString family_name, Vector<Gfx::UnicodeRange> unicode_ranges, Vector<::URL::URL> urls, ESCAPING Function<void(FontLoader const&)> on_load = {}, ESCAPING Function<void()> on_fail = {});
|
||||||
|
|
||||||
virtual ~FontLoader() override;
|
virtual ~FontLoader() override;
|
||||||
|
|
||||||
|
@ -340,7 +340,7 @@ private:
|
||||||
FlyString m_family_name;
|
FlyString m_family_name;
|
||||||
Vector<Gfx::UnicodeRange> m_unicode_ranges;
|
Vector<Gfx::UnicodeRange> m_unicode_ranges;
|
||||||
RefPtr<Gfx::Typeface> m_vector_font;
|
RefPtr<Gfx::Typeface> m_vector_font;
|
||||||
Vector<URL::URL> m_urls;
|
Vector<::URL::URL> m_urls;
|
||||||
Function<void(FontLoader const&)> m_on_load;
|
Function<void(FontLoader const&)> m_on_load;
|
||||||
Function<void()> m_on_fail;
|
Function<void()> m_on_fail;
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,8 +27,8 @@ public:
|
||||||
|
|
||||||
Optional<String> href() const;
|
Optional<String> href() const;
|
||||||
|
|
||||||
Optional<URL::URL> location() const { return m_location; }
|
Optional<::URL::URL> location() const { return m_location; }
|
||||||
void set_location(Optional<URL::URL> location) { m_location = move(location); }
|
void set_location(Optional<::URL::URL> location) { m_location = move(location); }
|
||||||
|
|
||||||
String title() const { return m_title; }
|
String title() const { return m_title; }
|
||||||
Optional<String> title_for_bindings() const;
|
Optional<String> title_for_bindings() const;
|
||||||
|
@ -68,7 +68,7 @@ private:
|
||||||
GC::Ptr<DOM::Element> m_owner_node;
|
GC::Ptr<DOM::Element> m_owner_node;
|
||||||
GC::Ptr<CSSStyleSheet> m_parent_style_sheet;
|
GC::Ptr<CSSStyleSheet> m_parent_style_sheet;
|
||||||
|
|
||||||
Optional<URL::URL> m_location;
|
Optional<::URL::URL> m_location;
|
||||||
String m_title;
|
String m_title;
|
||||||
String m_type_string;
|
String m_type_string;
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ void StyleSheetList::add_a_css_style_sheet(CSS::CSSStyleSheet& sheet)
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://www.w3.org/TR/cssom/#create-a-css-style-sheet
|
// https://www.w3.org/TR/cssom/#create-a-css-style-sheet
|
||||||
void StyleSheetList::create_a_css_style_sheet(String type, DOM::Element* owner_node, String media, String title, bool alternate, bool origin_clean, Optional<URL::URL> location, CSS::CSSStyleSheet* parent_style_sheet, CSS::CSSRule* owner_rule, CSS::CSSStyleSheet& sheet)
|
void StyleSheetList::create_a_css_style_sheet(String type, DOM::Element* owner_node, String media, String title, bool alternate, bool origin_clean, Optional<::URL::URL> location, CSS::CSSStyleSheet* parent_style_sheet, CSS::CSSRule* owner_rule, CSS::CSSStyleSheet& sheet)
|
||||||
{
|
{
|
||||||
// 1. Create a new CSS style sheet object and set its properties as specified.
|
// 1. Create a new CSS style sheet object and set its properties as specified.
|
||||||
// FIXME: We receive `sheet` from the caller already. This is weird.
|
// FIXME: We receive `sheet` from the caller already. This is weird.
|
||||||
|
|
|
@ -21,7 +21,7 @@ public:
|
||||||
|
|
||||||
void add_a_css_style_sheet(CSS::CSSStyleSheet&);
|
void add_a_css_style_sheet(CSS::CSSStyleSheet&);
|
||||||
void remove_a_css_style_sheet(CSS::CSSStyleSheet&);
|
void remove_a_css_style_sheet(CSS::CSSStyleSheet&);
|
||||||
void create_a_css_style_sheet(String type, DOM::Element* owner_node, String media, String title, bool alternate, bool origin_clean, Optional<String> location, CSS::CSSStyleSheet* parent_style_sheet, CSS::CSSRule* owner_rule, CSS::CSSStyleSheet&);
|
void create_a_css_style_sheet(String type, DOM::Element* owner_node, String media, String title, bool alternate, bool origin_clean, Optional<::URL::URL> location, CSS::CSSStyleSheet* parent_style_sheet, CSS::CSSRule* owner_rule, CSS::CSSStyleSheet&);
|
||||||
|
|
||||||
Vector<GC::Ref<CSSStyleSheet>> const& sheets() const { return m_sheets; }
|
Vector<GC::Ref<CSSStyleSheet>> const& sheets() const { return m_sheets; }
|
||||||
Vector<GC::Ref<CSSStyleSheet>>& sheets() { return m_sheets; }
|
Vector<GC::Ref<CSSStyleSheet>>& sheets() { return m_sheets; }
|
||||||
|
|
|
@ -34,7 +34,7 @@ String FontSourceStyleValue::to_string(SerializationMode) const
|
||||||
builder.append(')');
|
builder.append(')');
|
||||||
return builder.to_string_without_validation();
|
return builder.to_string_without_validation();
|
||||||
},
|
},
|
||||||
[this](URL::URL const& url) {
|
[this](::URL::URL const& url) {
|
||||||
// <url> [ format(<font-format>)]? [ tech( <font-tech>#)]?
|
// <url> [ format(<font-format>)]? [ tech( <font-tech>#)]?
|
||||||
// FIXME: tech()
|
// FIXME: tech()
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
|
@ -59,8 +59,8 @@ bool FontSourceStyleValue::properties_equal(FontSourceStyleValue const& other) c
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
[&other](URL::URL const& url) {
|
[&other](::URL::URL const& url) {
|
||||||
if (auto* other_url = other.m_source.get_pointer<URL::URL>()) {
|
if (auto* other_url = other.m_source.get_pointer<::URL::URL>()) {
|
||||||
return url == *other_url;
|
return url == *other_url;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -16,7 +16,7 @@ public:
|
||||||
struct Local {
|
struct Local {
|
||||||
NonnullRefPtr<CSSStyleValue> name;
|
NonnullRefPtr<CSSStyleValue> name;
|
||||||
};
|
};
|
||||||
using Source = Variant<Local, URL::URL>;
|
using Source = Variant<Local, ::URL::URL>;
|
||||||
|
|
||||||
static ValueComparingNonnullRefPtr<FontSourceStyleValue> create(Source source, Optional<FlyString> format)
|
static ValueComparingNonnullRefPtr<FontSourceStyleValue> create(Source source, Optional<FlyString> format)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
namespace Web::CSS {
|
namespace Web::CSS {
|
||||||
|
|
||||||
ImageStyleValue::ImageStyleValue(URL::URL const& url)
|
ImageStyleValue::ImageStyleValue(::URL::URL const& url)
|
||||||
: AbstractImageStyleValue(Type::Image)
|
: AbstractImageStyleValue(Type::Image)
|
||||||
, m_url(url)
|
, m_url(url)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,7 @@ class ImageStyleValue final
|
||||||
using Base = AbstractImageStyleValue;
|
using Base = AbstractImageStyleValue;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static ValueComparingNonnullRefPtr<ImageStyleValue> create(URL::URL const& url)
|
static ValueComparingNonnullRefPtr<ImageStyleValue> create(::URL::URL const& url)
|
||||||
{
|
{
|
||||||
return adopt_ref(*new (nothrow) ImageStyleValue(url));
|
return adopt_ref(*new (nothrow) ImageStyleValue(url));
|
||||||
}
|
}
|
||||||
|
@ -53,14 +53,14 @@ public:
|
||||||
GC::Ptr<HTML::DecodedImageData> image_data() const;
|
GC::Ptr<HTML::DecodedImageData> image_data() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ImageStyleValue(URL::URL const&);
|
ImageStyleValue(::URL::URL const&);
|
||||||
|
|
||||||
GC::Ptr<HTML::SharedResourceRequest> m_resource_request;
|
GC::Ptr<HTML::SharedResourceRequest> m_resource_request;
|
||||||
|
|
||||||
void animate();
|
void animate();
|
||||||
Gfx::ImmutableBitmap const* bitmap(size_t frame_index, Gfx::IntSize = {}) const;
|
Gfx::ImmutableBitmap const* bitmap(size_t frame_index, Gfx::IntSize = {}) const;
|
||||||
|
|
||||||
URL::URL m_url;
|
::URL::URL m_url;
|
||||||
WeakPtr<DOM::Document> m_document;
|
WeakPtr<DOM::Document> m_document;
|
||||||
|
|
||||||
size_t m_current_frame_index { 0 };
|
size_t m_current_frame_index { 0 };
|
||||||
|
|
|
@ -14,14 +14,14 @@ namespace Web::CSS {
|
||||||
|
|
||||||
class URLStyleValue final : public StyleValueWithDefaultOperators<URLStyleValue> {
|
class URLStyleValue final : public StyleValueWithDefaultOperators<URLStyleValue> {
|
||||||
public:
|
public:
|
||||||
static ValueComparingNonnullRefPtr<URLStyleValue> create(URL::URL const& url)
|
static ValueComparingNonnullRefPtr<URLStyleValue> create(::URL::URL const& url)
|
||||||
{
|
{
|
||||||
return adopt_ref(*new (nothrow) URLStyleValue(url));
|
return adopt_ref(*new (nothrow) URLStyleValue(url));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~URLStyleValue() override = default;
|
virtual ~URLStyleValue() override = default;
|
||||||
|
|
||||||
URL::URL const& url() const { return m_url; }
|
::URL::URL const& url() const { return m_url; }
|
||||||
|
|
||||||
bool properties_equal(URLStyleValue const& other) const { return m_url == other.m_url; }
|
bool properties_equal(URLStyleValue const& other) const { return m_url == other.m_url; }
|
||||||
|
|
||||||
|
@ -31,13 +31,13 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
URLStyleValue(URL::URL const& url)
|
URLStyleValue(::URL::URL const& url)
|
||||||
: StyleValueWithDefaultOperators(Type::URL)
|
: StyleValueWithDefaultOperators(Type::URL)
|
||||||
, m_url(url)
|
, m_url(url)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
URL::URL m_url;
|
::URL::URL m_url;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -490,7 +490,7 @@ void HTMLLinkElement::process_stylesheet_resource(bool success, Fetch::Infrastru
|
||||||
m_loaded_style_sheet = parse_css_stylesheet(CSS::Parser::ParsingParams(document(), *response.url()), decoded_string);
|
m_loaded_style_sheet = parse_css_stylesheet(CSS::Parser::ParsingParams(document(), *response.url()), decoded_string);
|
||||||
|
|
||||||
if (m_loaded_style_sheet) {
|
if (m_loaded_style_sheet) {
|
||||||
Optional<String> location;
|
Optional<::URL::URL> location;
|
||||||
if (!response.url_list().is_empty())
|
if (!response.url_list().is_empty())
|
||||||
location = response.url_list().first();
|
location = response.url_list().first();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue