mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:27:35 +00:00
LibWeb: Reorganize window.parent so it looks a bit more like the spec
This commit is contained in:
parent
835ffbb365
commit
fc5e414596
3 changed files with 30 additions and 12 deletions
|
@ -396,22 +396,13 @@ JS_DEFINE_NATIVE_FUNCTION(WindowObject::top_getter)
|
||||||
return top_window.wrapper();
|
return top_window.wrapper();
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/browsers.html#dom-parent
|
|
||||||
JS_DEFINE_NATIVE_FUNCTION(WindowObject::parent_getter)
|
JS_DEFINE_NATIVE_FUNCTION(WindowObject::parent_getter)
|
||||||
{
|
{
|
||||||
auto* impl = TRY(impl_from(vm, global_object));
|
auto* impl = TRY(impl_from(vm, global_object));
|
||||||
|
auto* parent = impl->parent();
|
||||||
auto* this_browsing_context = impl->associated_document().browsing_context();
|
if (!parent)
|
||||||
if (!this_browsing_context)
|
|
||||||
return JS::js_null();
|
return JS::js_null();
|
||||||
|
return parent->wrapper();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_NATIVE_FUNCTION(WindowObject::document_getter)
|
JS_DEFINE_NATIVE_FUNCTION(WindowObject::document_getter)
|
||||||
|
|
|
@ -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 ¤t->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 ¤t->active_document()->window();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,6 +100,8 @@ public:
|
||||||
|
|
||||||
RefPtr<HTML::Storage> local_storage();
|
RefPtr<HTML::Storage> local_storage();
|
||||||
|
|
||||||
|
Window* parent();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Window(Document&);
|
explicit Window(Document&);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue