From bc10729af6de580731bb78ba5e31f9b4ac622878 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Thu, 28 Nov 2024 04:42:30 +1300 Subject: [PATCH] LibWeb: Add relevant principal helper abstract operations These were recently added into the shadow realm merge request as convenience helpers. --- .../LibWeb/HTML/Scripting/Environments.cpp | 21 +++++++++++++++++++ .../LibWeb/HTML/Scripting/Environments.h | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/Libraries/LibWeb/HTML/Scripting/Environments.cpp b/Libraries/LibWeb/HTML/Scripting/Environments.cpp index 4b2c0d321b5..19118339826 100644 --- a/Libraries/LibWeb/HTML/Scripting/Environments.cpp +++ b/Libraries/LibWeb/HTML/Scripting/Environments.cpp @@ -408,6 +408,13 @@ JS::Realm& relevant_realm(JS::Object const& object) return object.shape().realm(); } +// https://whatpr.org/html/9893/webappapis.html#relevant-principal-realm +JS::Realm& relevant_principal_realm(JS::Object const& object) +{ + // The relevant principal realm for a platform object o is o's relevant realm's principal realm. + return principal_realm(relevant_realm(object)); +} + // https://html.spec.whatwg.org/multipage/webappapis.html#relevant-settings-object EnvironmentSettingsObject& relevant_settings_object(JS::Object const& object) { @@ -421,6 +428,13 @@ EnvironmentSettingsObject& relevant_settings_object(DOM::Node const& node) return const_cast(node.document()).relevant_settings_object(); } +// https://whatpr.org/html/9893/webappapis.html#relevant-principal-settings-object +EnvironmentSettingsObject& relevant_principal_settings_object(JS::Object const& object) +{ + // The relevant principal settings object for a platform object o is o's relevant principal realm's environment settings object. + return Bindings::principal_host_defined_environment_settings_object(relevant_principal_realm(object)); +} + // https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-global JS::Object& relevant_global_object(JS::Object const& object) { @@ -428,6 +442,13 @@ JS::Object& relevant_global_object(JS::Object const& object) return relevant_realm(object).global_object(); } +// https://whatpr.org/html/9893/webappapis.html#relevant-principal-global +JS::Object& relevant_principal_global_object(JS::Object const& object) +{ + // The relevant principal global object for a platform object o is o's relevant principal realm's global object. + return relevant_principal_realm(object).global_object(); +} + // https://html.spec.whatwg.org/multipage/webappapis.html#concept-entry-realm // https://whatpr.org/html/9893/webappapis.html#concept-entry-realm JS::Realm& entry_realm() diff --git a/Libraries/LibWeb/HTML/Scripting/Environments.h b/Libraries/LibWeb/HTML/Scripting/Environments.h index 8ff26d66063..66e90db5c4f 100644 --- a/Libraries/LibWeb/HTML/Scripting/Environments.h +++ b/Libraries/LibWeb/HTML/Scripting/Environments.h @@ -151,10 +151,17 @@ EnvironmentSettingsObject& current_principal_settings_object(); JS::Realm& principal_realm(GC::Ref); JS::Object& current_principal_global_object(); + JS::Realm& relevant_realm(JS::Object const&); +JS::Realm& relevant_principal_realm(JS::Object const&); + EnvironmentSettingsObject& relevant_settings_object(JS::Object const&); EnvironmentSettingsObject& relevant_settings_object(DOM::Node const&); +EnvironmentSettingsObject& relevant_principal_settings_object(JS::Object const&); + JS::Object& relevant_global_object(JS::Object const&); +JS::Object& relevant_principal_global_object(JS::Object const&); + JS::Realm& entry_realm(); EnvironmentSettingsObject& entry_settings_object(); JS::Object& entry_global_object();