Skip to content

Commit

Permalink
LibWeb: Add Window.parent and fix Window.top attributes
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Lubrsi authored and awesomekling committed Apr 12, 2021
1 parent e0f9ed0 commit 9ec4def
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
19 changes: 18 additions & 1 deletion Userland/Libraries/LibWeb/Bindings/WindowObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions Userland/Libraries/LibWeb/Bindings/WindowObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ class WindowObject final
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);
Expand Down

0 comments on commit 9ec4def

Please sign in to comment.