/* * Copyright (c) 2025, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::ContentSecurityPolicy { class PolicyList final : public JS::Cell { GC_CELL(PolicyList, JS::Cell); GC_DECLARE_ALLOCATOR(PolicyList); public: [[nodiscard]] static GC::Ref create(JS::Realm&, GC::RootVector> const&); [[nodiscard]] static GC::Ref create(JS::Realm&, 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(JS::Realm&) const; [[nodiscard]] Vector serialize() const; protected: virtual void visit_edges(Cell::Visitor&) override; private: PolicyList() = default; Vector> m_policies; }; }