From 91007eb4760a0873f1881c6a3e1a4d2630bcc067 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Thu, 28 Nov 2024 05:10:30 +1300 Subject: [PATCH] LibWeb: Ensure principal realm returned for nested Shadow Realms Recently reported against the shadow realm proposal after running into issues with WPT tests. In a nested shadow realm, the associated realm is a shadow realm, not the principal realm. One such issue this fixes is a crash when a nested shadow realm performs an operation which requires the principal settings object. --- Libraries/LibWeb/Bindings/MainThreadVM.cpp | 4 +- ...ealm-in-ShadowRealm-evaluate-DOM-Event.txt | 1 + ...alm-in-ShadowRealm-evaluate-DOM-Event.html | 41 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 Tests/LibWeb/Text/expected/HTML/ShadowRealm-in-ShadowRealm-evaluate-DOM-Event.txt create mode 100644 Tests/LibWeb/Text/input/HTML/ShadowRealm-in-ShadowRealm-evaluate-DOM-Event.html diff --git a/Libraries/LibWeb/Bindings/MainThreadVM.cpp b/Libraries/LibWeb/Bindings/MainThreadVM.cpp index de25e42642f..252ee996556 100644 --- a/Libraries/LibWeb/Bindings/MainThreadVM.cpp +++ b/Libraries/LibWeb/Bindings/MainThreadVM.cpp @@ -580,8 +580,8 @@ ErrorOr initialize_main_thread_vm(HTML::EventLoop::Type type) // 4. Set settings's execution context to context. .execution_context = move(context), - // 5. Set settings's principal realm to O's associated realm - .principal_realm = object.shape().realm(), + // 5. Set settings's principal realm to O's associated realm's principal realm + .principal_realm = HTML::principal_realm(object.shape().realm()), // 6. Set settings's module map to a new module map, initially empty. .module_map = realm.create(), diff --git a/Tests/LibWeb/Text/expected/HTML/ShadowRealm-in-ShadowRealm-evaluate-DOM-Event.txt b/Tests/LibWeb/Text/expected/HTML/ShadowRealm-in-ShadowRealm-evaluate-DOM-Event.txt new file mode 100644 index 00000000000..c71d3326e43 --- /dev/null +++ b/Tests/LibWeb/Text/expected/HTML/ShadowRealm-in-ShadowRealm-evaluate-DOM-Event.txt @@ -0,0 +1 @@ +Some event... diff --git a/Tests/LibWeb/Text/input/HTML/ShadowRealm-in-ShadowRealm-evaluate-DOM-Event.html b/Tests/LibWeb/Text/input/HTML/ShadowRealm-in-ShadowRealm-evaluate-DOM-Event.html new file mode 100644 index 00000000000..3c6ac657408 --- /dev/null +++ b/Tests/LibWeb/Text/input/HTML/ShadowRealm-in-ShadowRealm-evaluate-DOM-Event.html @@ -0,0 +1,41 @@ + +