diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/BUILD.gn b/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/BUILD.gn index 84c30ce754..901bdc3a7a 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/BUILD.gn +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/BUILD.gn @@ -133,10 +133,12 @@ source_set("HTML") { "NavigatorBeacon.cpp", "NavigatorID.cpp", "Numbers.cpp", + "Origin.cpp", "PageTransitionEvent.cpp", "Path2D.cpp", "Plugin.cpp", "PluginArray.cpp", + "PolicyContainers.cpp", "PotentialCORSRequest.cpp", "PromiseRejectionEvent.cpp", "SelectItem.cpp", diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/Scripting/BUILD.gn b/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/Scripting/BUILD.gn index e84dc97cde..88331a8b68 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/Scripting/BUILD.gn +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/Scripting/BUILD.gn @@ -9,6 +9,7 @@ source_set("Scripting") { "ModuleMap.cpp", "ModuleScript.cpp", "Script.cpp", + "SerializedEnvironmentSettingsObject.cpp", "TemporaryExecutionContext.cpp", "WindowEnvironmentSettingsObject.cpp", "WorkerEnvironmentSettingsObject.cpp", diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index b9d51888b1..8f88920c0a 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -366,7 +366,9 @@ set(SOURCES HTML/NavigatorBeacon.cpp HTML/NavigatorID.cpp HTML/Numbers.cpp + HTML/Origin.cpp HTML/PageTransitionEvent.cpp + HTML/PolicyContainers.cpp HTML/Parser/Entities.cpp HTML/Parser/HTMLEncodingDetection.cpp HTML/Parser/HTMLParser.cpp @@ -389,6 +391,7 @@ set(SOURCES HTML/Scripting/TemporaryExecutionContext.cpp HTML/Scripting/WindowEnvironmentSettingsObject.cpp HTML/Scripting/WorkerEnvironmentSettingsObject.cpp + HTML/Scripting/SerializedEnvironmentSettingsObject.cpp HTML/SelectedFile.cpp HTML/SelectItem.cpp HTML/SessionHistoryEntry.cpp diff --git a/Userland/Libraries/LibWeb/HTML/Origin.cpp b/Userland/Libraries/LibWeb/HTML/Origin.cpp new file mode 100644 index 0000000000..bae4412c0f --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/Origin.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024, Andrew Kaster + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace IPC { +template<> +ErrorOr encode(Encoder& encoder, Web::HTML::Origin const& origin) +{ + TRY(encoder.encode(origin.scheme())); + TRY(encoder.encode(origin.host())); + TRY(encoder.encode(origin.port())); + + return {}; +} + +template<> +ErrorOr decode(Decoder& decoder) +{ + auto scheme = TRY(decoder.decode()); + auto host = TRY(decoder.decode()); + u16 port = TRY(decoder.decode()); + + return Web::HTML::Origin { move(scheme), move(host), port }; +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/Origin.h b/Userland/Libraries/LibWeb/HTML/Origin.h index e4498e682d..ad6c4089e8 100644 --- a/Userland/Libraries/LibWeb/HTML/Origin.h +++ b/Userland/Libraries/LibWeb/HTML/Origin.h @@ -10,6 +10,7 @@ #include #include #include +#include namespace Web::HTML { @@ -132,3 +133,11 @@ struct Traits : public DefaultTraits { } }; } // namespace AK + +namespace IPC { +template<> +ErrorOr encode(Encoder&, Web::HTML::Origin const&); + +template<> +ErrorOr decode(Decoder&); +} diff --git a/Userland/Libraries/LibWeb/HTML/PolicyContainers.cpp b/Userland/Libraries/LibWeb/HTML/PolicyContainers.cpp new file mode 100644 index 0000000000..55f820ab52 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/PolicyContainers.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024, Andrew Kaster + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace IPC { + +template<> +ErrorOr encode(IPC::Encoder& encoder, Web::HTML::PolicyContainer const& policy_container) +{ + TRY(encode(encoder, policy_container.referrer_policy)); + + return {}; +} + +template<> +ErrorOr decode(IPC::Decoder& decoder) +{ + auto referrer_policy = TRY(decoder.decode()); + + return Web::HTML::PolicyContainer { .referrer_policy = referrer_policy }; +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/PolicyContainers.h b/Userland/Libraries/LibWeb/HTML/PolicyContainers.h index 252838c433..385ba79a1d 100644 --- a/Userland/Libraries/LibWeb/HTML/PolicyContainers.h +++ b/Userland/Libraries/LibWeb/HTML/PolicyContainers.h @@ -6,6 +6,7 @@ #pragma once +#include #include namespace Web::HTML { @@ -25,3 +26,11 @@ struct PolicyContainer { }; } + +namespace IPC { +template<> +ErrorOr encode(IPC::Encoder&, Web::HTML::PolicyContainer const&); + +template<> +ErrorOr decode(IPC::Decoder&); +} diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/Environments.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/Environments.cpp index 3c56f9018d..8581535a92 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/Environments.cpp +++ b/Userland/Libraries/LibWeb/HTML/Scripting/Environments.cpp @@ -489,4 +489,22 @@ bool is_non_secure_context(Environment const& environment) return !is_secure_context(environment); } +SerializedEnvironmentSettingsObject EnvironmentSettingsObject::serialize() +{ + SerializedEnvironmentSettingsObject object; + + object.id = this->id; + object.creation_url = this->creation_url; + object.top_level_creation_url = this->top_level_creation_url; + object.top_level_origin = this->top_level_origin; + + object.api_url_character_encoding = api_url_character_encoding(); + object.api_base_url = api_base_url(); + object.origin = origin(); + object.policy_container = policy_container(); + object.cross_origin_isolated_capability = cross_origin_isolated_capability(); + + return object; +} + } diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/Environments.h b/Userland/Libraries/LibWeb/HTML/Scripting/Environments.h index a06f51b8e9..f9f4cfa299 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/Environments.h +++ b/Userland/Libraries/LibWeb/HTML/Scripting/Environments.h @@ -12,6 +12,7 @@ #include #include #include +#include namespace Web::HTML { @@ -40,11 +41,6 @@ struct Environment { bool execution_ready { false }; }; -enum class CanUseCrossOriginIsolatedAPIs { - No, - Yes, -}; - enum class RunScriptDecision { Run, DoNotRun, @@ -115,6 +111,8 @@ struct EnvironmentSettingsObject void disallow_further_import_maps(); + SerializedEnvironmentSettingsObject serialize(); + protected: explicit EnvironmentSettingsObject(NonnullOwnPtr); diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.cpp new file mode 100644 index 0000000000..e0edb49ab6 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2024, Andrew Kaster + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace IPC { + +template<> +ErrorOr encode(Encoder& encoder, Web::HTML::SerializedEnvironmentSettingsObject const& object) +{ + TRY(encoder.encode(object.id)); + TRY(encoder.encode(object.creation_url)); + TRY(encoder.encode(object.top_level_creation_url)); + TRY(encoder.encode(object.top_level_origin)); + TRY(encoder.encode(object.api_url_character_encoding)); + TRY(encoder.encode(object.api_base_url)); + TRY(encoder.encode(object.origin)); + TRY(encoder.encode(object.policy_container)); + TRY(encoder.encode(object.cross_origin_isolated_capability)); + + return {}; +} + +template<> +ErrorOr decode(Decoder& decoder) +{ + Web::HTML::SerializedEnvironmentSettingsObject object {}; + + object.id = TRY(decoder.decode()); + object.creation_url = TRY(decoder.decode()); + object.top_level_creation_url = TRY(decoder.decode()); + object.top_level_origin = TRY(decoder.decode()); + object.api_url_character_encoding = TRY(decoder.decode()); + object.api_base_url = TRY(decoder.decode()); + object.origin = TRY(decoder.decode()); + object.policy_container = TRY(decoder.decode()); + object.cross_origin_isolated_capability = TRY(decoder.decode()); + + return object; +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.h b/Userland/Libraries/LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.h new file mode 100644 index 0000000000..b55bdf24fe --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024, Andrew Kaster + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace Web::HTML { + +enum class CanUseCrossOriginIsolatedAPIs { + No, + Yes, +}; + +struct SerializedEnvironmentSettingsObject { + String id; + URL creation_url; + URL top_level_creation_url; + Origin top_level_origin; + + String api_url_character_encoding; + URL api_base_url; + Origin origin; + PolicyContainer policy_container; + CanUseCrossOriginIsolatedAPIs cross_origin_isolated_capability; +}; + +} + +namespace IPC { + +template<> +ErrorOr encode(Encoder&, Web::HTML::SerializedEnvironmentSettingsObject const&); + +template<> +ErrorOr decode(Decoder&); + +}