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.