diff --git a/Tests/LibWeb/Text/expected/HTML/Window-set-properties.txt b/Tests/LibWeb/Text/expected/HTML/Window-set-properties.txt
new file mode 100644
index 0000000000..ec001f5d98
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/HTML/Window-set-properties.txt
@@ -0,0 +1,6 @@
+window.__NEXT_DATA__ = [object HTMLScriptElement]
+window.__NEXT_DATA__ = undefined
+window[0] = undefined
+e = TypeError: Cannot set property '0' of [object WindowProxy]
+window[0] = undefined
+window[0] = 42
diff --git a/Tests/LibWeb/Text/input/HTML/Window-set-properties.html b/Tests/LibWeb/Text/input/HTML/Window-set-properties.html
new file mode 100644
index 0000000000..9637531eb7
--- /dev/null
+++ b/Tests/LibWeb/Text/input/HTML/Window-set-properties.html
@@ -0,0 +1,22 @@
+
+
+
diff --git a/Userland/Libraries/LibWeb/Bindings/PlatformObject.cpp b/Userland/Libraries/LibWeb/Bindings/PlatformObject.cpp
index 6dfd8a4919..30804ae952 100644
--- a/Userland/Libraries/LibWeb/Bindings/PlatformObject.cpp
+++ b/Userland/Libraries/LibWeb/Bindings/PlatformObject.cpp
@@ -217,7 +217,7 @@ WebIDL::ExceptionOr PlatformObject::invoke_named_property_setter(String co
// https://webidl.spec.whatwg.org/#legacy-platform-object-getownproperty
JS::ThrowCompletionOr> PlatformObject::internal_get_own_property(JS::PropertyKey const& property_name) const
{
- if (m_legacy_platform_object_flags.has_value()) {
+ if (m_legacy_platform_object_flags.has_value() && !m_legacy_platform_object_flags->has_global_interface_extended_attribute) {
// 1. Return ? PlatformObjectGetOwnProperty(O, P, false).
return TRY(legacy_platform_object_get_own_property(property_name, IgnoreNamedProps::No));
} else {
@@ -228,7 +228,7 @@ JS::ThrowCompletionOr> PlatformObject::internal
// https://webidl.spec.whatwg.org/#legacy-platform-object-set
JS::ThrowCompletionOr PlatformObject::internal_set(JS::PropertyKey const& property_name, JS::Value value, JS::Value receiver, JS::CacheablePropertyMetadata* metadata)
{
- if (!m_legacy_platform_object_flags.has_value())
+ if (!m_legacy_platform_object_flags.has_value() || m_legacy_platform_object_flags->has_global_interface_extended_attribute)
return Base::internal_set(property_name, value, receiver, metadata);
auto& vm = this->vm();
@@ -266,7 +266,7 @@ JS::ThrowCompletionOr PlatformObject::internal_set(JS::PropertyKey const&
// https://webidl.spec.whatwg.org/#legacy-platform-object-defineownproperty
JS::ThrowCompletionOr PlatformObject::internal_define_own_property(JS::PropertyKey const& property_name, JS::PropertyDescriptor const& property_descriptor)
{
- if (!m_legacy_platform_object_flags.has_value())
+ if (!m_legacy_platform_object_flags.has_value() || m_legacy_platform_object_flags->has_global_interface_extended_attribute)
return Base::internal_define_own_property(property_name, property_descriptor);
auto& vm = this->vm();
@@ -335,7 +335,7 @@ JS::ThrowCompletionOr PlatformObject::internal_define_own_property(JS::Pro
// https://webidl.spec.whatwg.org/#legacy-platform-object-delete
JS::ThrowCompletionOr PlatformObject::internal_delete(JS::PropertyKey const& property_name)
{
- if (!m_legacy_platform_object_flags.has_value())
+ if (!m_legacy_platform_object_flags.has_value() || m_legacy_platform_object_flags->has_global_interface_extended_attribute)
return Base::internal_delete(property_name);
auto& vm = this->vm();
@@ -403,7 +403,7 @@ JS::ThrowCompletionOr PlatformObject::internal_delete(JS::PropertyKey cons
// https://webidl.spec.whatwg.org/#legacy-platform-object-preventextensions
JS::ThrowCompletionOr PlatformObject::internal_prevent_extensions()
{
- if (!m_legacy_platform_object_flags.has_value())
+ if (!m_legacy_platform_object_flags.has_value() || m_legacy_platform_object_flags->has_global_interface_extended_attribute)
return Base::internal_prevent_extensions();
// 1. Return false.