LibWeb: Add Window.parent and fix Window.top attributes

This returns the parent frame of the current frame. If it's the
main frame, it returns itself.

Also fixes the attributes of Window.top, as they were accidentally
being passed in as the setter.

Required by Web Platform Tests.
This commit is contained in:
Luke 2021-04-11 22:34:57 +01:00 committed by Andreas Kling
parent e0f9ed01c7
commit 9ec4defdd2
2 changed files with 20 additions and 1 deletions

View file

@ -67,7 +67,8 @@ void WindowObject::initialize_global_object()
define_property("window", this, JS::Attribute::Enumerable);
define_property("frames", this, JS::Attribute::Enumerable);
define_property("self", this, JS::Attribute::Enumerable);
define_native_property("top", top_getter, JS::Attribute::Enumerable);
define_native_property("top", top_getter, nullptr, JS::Attribute::Enumerable);
define_native_property("parent", parent_getter, nullptr, JS::Attribute::Enumerable);
define_native_property("document", document_getter, nullptr, JS::Attribute::Enumerable);
define_native_property("performance", performance_getter, nullptr, JS::Attribute::Enumerable);
define_native_property("screen", screen_getter, nullptr, JS::Attribute::Enumerable);
@ -366,6 +367,22 @@ JS_DEFINE_NATIVE_GETTER(WindowObject::top_getter)
return top_window.wrapper();
}
JS_DEFINE_NATIVE_GETTER(WindowObject::parent_getter)
{
auto* impl = impl_from(vm, global_object);
if (!impl)
return {};
auto* this_frame = impl->document().frame();
VERIFY(this_frame);
if (this_frame->parent()) {
VERIFY(this_frame->parent()->document());
auto& parent_window = this_frame->parent()->document()->window();
return parent_window.wrapper();
}
VERIFY(this_frame == &this_frame->main_frame());
return impl->wrapper();
}
JS_DEFINE_NATIVE_GETTER(WindowObject::document_getter)
{
auto* impl = impl_from(vm, global_object);

View file

@ -90,6 +90,8 @@ private:
JS_DECLARE_NATIVE_GETTER(inner_width_getter);
JS_DECLARE_NATIVE_GETTER(inner_height_getter);
JS_DECLARE_NATIVE_GETTER(parent_getter);
JS_DECLARE_NATIVE_FUNCTION(alert);
JS_DECLARE_NATIVE_FUNCTION(confirm);
JS_DECLARE_NATIVE_FUNCTION(prompt);