diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index 9b28ba6cf0c..35a604294d8 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -60,6 +60,7 @@ set(SOURCES ContentSecurityPolicy/Directives/MediaSourceDirective.cpp ContentSecurityPolicy/Directives/Names.cpp ContentSecurityPolicy/Directives/ObjectSourceDirective.cpp + ContentSecurityPolicy/Directives/ReportUriDirective.cpp ContentSecurityPolicy/Directives/ScriptSourceAttributeDirective.cpp ContentSecurityPolicy/Directives/ScriptSourceDirective.cpp ContentSecurityPolicy/Directives/ScriptSourceElementDirective.cpp diff --git a/Libraries/LibWeb/ContentSecurityPolicy/Directives/DirectiveFactory.cpp b/Libraries/LibWeb/ContentSecurityPolicy/Directives/DirectiveFactory.cpp index 8c37ab06378..9427319188e 100644 --- a/Libraries/LibWeb/ContentSecurityPolicy/Directives/DirectiveFactory.cpp +++ b/Libraries/LibWeb/ContentSecurityPolicy/Directives/DirectiveFactory.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -68,6 +69,9 @@ GC::Ref create_directive(GC::Heap& heap, String name, Vector if (name == Names::ObjectSrc) return heap.allocate(move(name), move(value)); + if (name == Names::ReportUri) + return heap.allocate(move(name), move(value)); + if (name == Names::ScriptSrcAttr) return heap.allocate(move(name), move(value)); diff --git a/Libraries/LibWeb/ContentSecurityPolicy/Directives/ReportUriDirective.cpp b/Libraries/LibWeb/ContentSecurityPolicy/Directives/ReportUriDirective.cpp new file mode 100644 index 00000000000..642a20c7b03 --- /dev/null +++ b/Libraries/LibWeb/ContentSecurityPolicy/Directives/ReportUriDirective.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2024, Luke Wilde + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +namespace Web::ContentSecurityPolicy::Directives { + +GC_DEFINE_ALLOCATOR(ReportUriDirective); + +ReportUriDirective::ReportUriDirective(String name, Vector value) + : Directive(move(name), move(value)) +{ +} + +} diff --git a/Libraries/LibWeb/ContentSecurityPolicy/Directives/ReportUriDirective.h b/Libraries/LibWeb/ContentSecurityPolicy/Directives/ReportUriDirective.h new file mode 100644 index 00000000000..d1b5b2d9f91 --- /dev/null +++ b/Libraries/LibWeb/ContentSecurityPolicy/Directives/ReportUriDirective.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2024, Luke Wilde + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::ContentSecurityPolicy::Directives { + +// https://w3c.github.io/webappsec-csp/#directive-report-uri +class ReportUriDirective final : public Directive { + GC_CELL(ReportUriDirective, Directive) + GC_DECLARE_ALLOCATOR(ReportUriDirective); + +public: + virtual ~ReportUriDirective() = default; + +private: + ReportUriDirective(String name, Vector value); +}; + +} diff --git a/Libraries/LibWeb/Forward.h b/Libraries/LibWeb/Forward.h index f7424336381..0713d679559 100644 --- a/Libraries/LibWeb/Forward.h +++ b/Libraries/LibWeb/Forward.h @@ -149,6 +149,7 @@ class ImageSourceDirective; class ManifestSourceDirective; class MediaSourceDirective; class ObjectSourceDirective; +class ReportUriDirective; class ScriptSourceAttributeDirective; class ScriptSourceDirective; class ScriptSourceElementDirective;