From ac76df3d47bb2de85aef2440ea1bb203bf7bd018 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 20 Sep 2022 11:14:23 +0200 Subject: LibWeb: Implement Window.frameElement --- Userland/Libraries/LibWeb/HTML/Window.cpp | 28 ++++++++++++++++++++++++++++ Userland/Libraries/LibWeb/HTML/Window.h | 2 ++ 2 files changed, 30 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/Window.cpp b/Userland/Libraries/LibWeb/HTML/Window.cpp index 5235112692..b6cd397fbf 100644 --- a/Userland/Libraries/LibWeb/HTML/Window.cpp +++ b/Userland/Libraries/LibWeb/HTML/Window.cpp @@ -764,6 +764,7 @@ void Window::initialize(JS::Realm& realm) define_native_accessor(realm, "top", top_getter, nullptr, JS::Attribute::Enumerable); define_native_accessor(realm, "parent", parent_getter, {}, JS::Attribute::Enumerable); define_native_accessor(realm, "document", document_getter, {}, JS::Attribute::Enumerable); + define_native_accessor(realm, "frameElement", frame_element_getter, {}, JS::Attribute::Enumerable); define_native_accessor(realm, "name", name_getter, name_setter, JS::Attribute::Enumerable); define_native_accessor(realm, "history", history_getter, {}, JS::Attribute::Enumerable); define_native_accessor(realm, "performance", performance_getter, performance_setter, JS::Attribute::Enumerable | JS::Attribute::Configurable); @@ -1134,6 +1135,33 @@ JS_DEFINE_NATIVE_FUNCTION(Window::document_getter) return &impl->associated_document(); } +// https://html.spec.whatwg.org/multipage/browsers.html#dom-frameelement +JS_DEFINE_NATIVE_FUNCTION(Window::frame_element_getter) +{ + auto* impl = TRY(impl_from(vm)); + + // 1. Let current be this Window object's browsing context. + auto* current = impl->browsing_context(); + + // 2. If current is null, then return null. + if (!current) + return JS::js_null(); + + // 3. Let container be current's container. + auto* container = current->container(); + + // 4. If container is null, then return null. + if (!container) + return JS::js_null(); + + // 5. If container's node document's origin is not same origin-domain with the current settings object's origin, then return null. + if (!container->document().origin().is_same_origin(current_settings_object().origin())) + return JS::js_null(); + + // 6. Return container. + return container; +} + JS_DEFINE_NATIVE_FUNCTION(Window::performance_getter) { auto* impl = TRY(impl_from(vm)); diff --git a/Userland/Libraries/LibWeb/HTML/Window.h b/Userland/Libraries/LibWeb/HTML/Window.h index 31f0f89206..144898fe38 100644 --- a/Userland/Libraries/LibWeb/HTML/Window.h +++ b/Userland/Libraries/LibWeb/HTML/Window.h @@ -211,6 +211,8 @@ private: JS_DECLARE_NATIVE_FUNCTION(document_getter); + JS_DECLARE_NATIVE_FUNCTION(frame_element_getter); + JS_DECLARE_NATIVE_FUNCTION(location_getter); JS_DECLARE_NATIVE_FUNCTION(location_setter); -- cgit v1.2.3