/* * Copyright (c) 2025, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::ContentSecurityPolicy { class PolicyList final : public GC::Cell { GC_CELL(PolicyList, GC::Cell); GC_DECLARE_ALLOCATOR(PolicyList); public: [[nodiscard]] static GC::Ref create(GC::Heap&, GC::RootVector> const&); [[nodiscard]] static GC::Ref create(GC::Heap&, Vector const&); [[nodiscard]] static GC::Ptr from_object(JS::Object&); virtual ~PolicyList() = default; [[nodiscard]] Vector> const& policies() const { return m_policies; } [[nodiscard]] bool contains_header_delivered_policy() const; [[nodiscard]] HTML::SandboxingFlagSet csp_derived_sandboxing_flags() const; [[nodiscard]] GC::Ref clone(GC::Heap&) const; void enforce_policy(GC::Ref); [[nodiscard]] Vector serialize() const; protected: virtual void visit_edges(Cell::Visitor&) override; private: PolicyList() = default; Vector> m_policies; }; }