/* * Copyright (c) 2025, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::ContentSecurityPolicy::Directives { enum class [[nodiscard]] ShouldExecute { No, Yes, }; enum class [[nodiscard]] MatchResult { DoesNotMatch, Matches, }; [[nodiscard]] Optional get_the_effective_directive_for_request(GC::Ref request); [[nodiscard]] Vector get_fetch_directive_fallback_list(Optional directive_name); ShouldExecute should_fetch_directive_execute(Optional effective_directive_name, FlyString const& directive_name, GC::Ref policy); [[nodiscard]] FlyString get_the_effective_directive_for_inline_checks(Directive::InlineType type); MatchResult does_url_match_expression_in_origin_with_redirect_count(URL::URL const& url, String const& expression, URL::Origin const& origin, u8 redirect_count); MatchResult does_url_match_source_list_in_origin_with_redirect_count(URL::URL const& url, Vector const& source_list, URL::Origin const& origin, u8 redirect_count); MatchResult does_request_match_source_list(GC::Ref request, Vector const& source_list, GC::Ref policy); MatchResult does_response_match_source_list(GC::Ref response, GC::Ref request, Vector const& source_list, GC::Ref policy); MatchResult does_nonce_match_source_list(String const& nonce, Vector const& source_list); Directive::Result script_directives_pre_request_check(GC::Ref request, GC::Ref directive, GC::Ref policy); Directive::Result script_directives_post_request_check(GC::Ref request, GC::Ref response, GC::Ref directive, GC::Ref policy); MatchResult does_element_match_source_list_for_type_and_source(GC::Ptr element, Vector const& source_list, Directive::InlineType type, String const& source); }