1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:57:45 +00:00

LibWeb: Reorganize window.parent so it looks a bit more like the spec

This commit is contained in:
Andreas Kling 2022-02-26 15:55:45 +01:00
parent 835ffbb365
commit fc5e414596
3 changed files with 30 additions and 12 deletions

View file

@ -396,22 +396,13 @@ JS_DEFINE_NATIVE_FUNCTION(WindowObject::top_getter)
return top_window.wrapper();
}
// https://html.spec.whatwg.org/multipage/browsers.html#dom-parent
JS_DEFINE_NATIVE_FUNCTION(WindowObject::parent_getter)
{
auto* impl = TRY(impl_from(vm, global_object));
auto* this_browsing_context = impl->associated_document().browsing_context();
if (!this_browsing_context)
auto* parent = impl->parent();
if (!parent)
return JS::js_null();
if (this_browsing_context->parent()) {
VERIFY(this_browsing_context->parent()->active_document());
auto& parent_window = this_browsing_context->parent()->active_document()->window();
return parent_window.wrapper();
}
VERIFY(this_browsing_context == &this_browsing_context->top_level_browsing_context());
return impl->wrapper();
return parent->wrapper();
}
JS_DEFINE_NATIVE_FUNCTION(WindowObject::document_getter)

View file

@ -451,4 +451,29 @@ RefPtr<HTML::Storage> Window::local_storage()
});
}
// https://html.spec.whatwg.org/multipage/browsers.html#dom-parent
Window* Window::parent()
{
// 1. Let current be this Window object's browsing context.
auto* current = associated_document().browsing_context();
// 2. If current is null, then return null.
if (!current)
return nullptr;
// 3. If current is a child browsing context of another browsing context parent,
// then return parent's WindowProxy object.
if (current->parent()) {
VERIFY(current->parent()->active_document());
return &current->parent()->active_document()->window();
}
// 4. Assert: current is a top-level browsing context.
VERIFY(current->is_top_level());
// FIXME: 5. Return current's WindowProxy object.
VERIFY(current->active_document());
return &current->active_document()->window();
}
}

View file

@ -100,6 +100,8 @@ public:
RefPtr<HTML::Storage> local_storage();
Window* parent();
private:
explicit Window(Document&);