/* * Copyright (c) 2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::CSS { // https://drafts.csswg.org/css-values-5/#request-url-modifiers class RequestURLModifier { public: enum class Type : u8 { CrossOrigin, Integrity, ReferrerPolicy, }; static RequestURLModifier create_cross_origin(CrossOriginModifierValue); static RequestURLModifier create_integrity(FlyString); static RequestURLModifier create_referrer_policy(ReferrerPolicyModifierValue); ~RequestURLModifier() = default; void modify_request(GC::Ref) const; Type type() const { return m_type; } String to_string() const; bool operator==(RequestURLModifier const&) const; private: using Value = Variant; RequestURLModifier(Type, Value); Type m_type; Value m_value; }; // https://drafts.csswg.org/css-values-4/#urls class URL { public: URL(String url, Vector = {}); String const& url() const { return m_url; } Vector const& request_url_modifiers() const { return m_request_url_modifiers; } String to_string() const; bool operator==(URL const&) const; private: String m_url; Vector m_request_url_modifiers; }; } template<> struct AK::Formatter : AK::Formatter { ErrorOr format(FormatBuilder& builder, Web::CSS::URL const& value) { return Formatter::format(builder, value.to_string()); } };