1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:17:44 +00:00

LibWeb: Implement Document::make_active()

Implementation of "make active" algorithm from the spec for Document.

Co-authored-by: Andreas Kling <kling@serenityos.org>
This commit is contained in:
Aliaksandr Kalenik 2023-04-23 19:39:12 +03:00 committed by Andreas Kling
parent 32e2207b55
commit 3225c39191
4 changed files with 25 additions and 3 deletions

View file

@ -58,11 +58,13 @@
#include <LibWeb/HTML/HTMLTitleElement.h> #include <LibWeb/HTML/HTMLTitleElement.h>
#include <LibWeb/HTML/Location.h> #include <LibWeb/HTML/Location.h>
#include <LibWeb/HTML/MessageEvent.h> #include <LibWeb/HTML/MessageEvent.h>
#include <LibWeb/HTML/Navigable.h>
#include <LibWeb/HTML/NavigationParams.h> #include <LibWeb/HTML/NavigationParams.h>
#include <LibWeb/HTML/Origin.h> #include <LibWeb/HTML/Origin.h>
#include <LibWeb/HTML/Parser/HTMLParser.h> #include <LibWeb/HTML/Parser/HTMLParser.h>
#include <LibWeb/HTML/Scripting/ExceptionReporter.h> #include <LibWeb/HTML/Scripting/ExceptionReporter.h>
#include <LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.h> #include <LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.h>
#include <LibWeb/HTML/TraversableNavigable.h>
#include <LibWeb/HTML/Window.h> #include <LibWeb/HTML/Window.h>
#include <LibWeb/HTML/WindowProxy.h> #include <LibWeb/HTML/WindowProxy.h>
#include <LibWeb/HighResolutionTime/TimeOrigin.h> #include <LibWeb/HighResolutionTime/TimeOrigin.h>
@ -2514,4 +2516,22 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Attr>> Document::create_attribute_ns(Deprec
return Attr::create(*this, extracted_qualified_name); return Attr::create(*this, extracted_qualified_name);
} }
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#make-active
void Document::make_active()
{
// 1. Let window be document's relevant global object.
auto& window = verify_cast<HTML::Window>(HTML::relevant_global_object(*this));
// 2. Set document's browsing context's WindowProxy's [[Window]] internal slot value to window.
m_browsing_context->window_proxy()->set_window(window);
// 3. Set document's visibility state to document's node navigable's traversable navigable's system visibility state.
if (navigable()) {
m_visibility_state = navigable()->traversable_navigable()->system_visibility_state();
}
// 4. Set window's relevant settings object's execution ready flag.
HTML::relevant_settings_object(window).execution_ready = true;
}
} }

View file

@ -468,6 +468,8 @@ public:
DeprecatedString dump_accessibility_tree_as_json(); DeprecatedString dump_accessibility_tree_as_json();
void make_active();
protected: protected:
virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override; virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override; virtual void visit_edges(Cell::Visitor&) override;

View file

@ -256,9 +256,9 @@ void WindowProxy::visit_edges(JS::Cell::Visitor& visitor)
visitor.visit(m_window.ptr()); visitor.visit(m_window.ptr());
} }
void WindowProxy::set_window(Badge<BrowsingContext>, JS::NonnullGCPtr<Window> window) void WindowProxy::set_window(JS::NonnullGCPtr<Window> window)
{ {
m_window = window; m_window = move(window);
} }
JS::NonnullGCPtr<BrowsingContext> WindowProxy::associated_browsing_context() const JS::NonnullGCPtr<BrowsingContext> WindowProxy::associated_browsing_context() const

View file

@ -32,7 +32,7 @@ public:
virtual JS::ThrowCompletionOr<JS::MarkedVector<JS::Value>> internal_own_property_keys() const override; virtual JS::ThrowCompletionOr<JS::MarkedVector<JS::Value>> internal_own_property_keys() const override;
JS::GCPtr<Window> window() const { return m_window; } JS::GCPtr<Window> window() const { return m_window; }
void set_window(Badge<BrowsingContext>, JS::NonnullGCPtr<Window>); void set_window(JS::NonnullGCPtr<Window>);
JS::NonnullGCPtr<BrowsingContext> associated_browsing_context() const; JS::NonnullGCPtr<BrowsingContext> associated_browsing_context() const;