WebContent: Add a JS visitor to WebDriver's IPC connection

We've added a few JS::Handle members to this class over time. Let's
avoid creating a new GC root for each of these, and explicitly add a
visitation method.
This commit is contained in:
Timothy Flynn 2024-10-17 18:50:36 -04:00 committed by Jelle Raaijmakers
parent 022e2b8a94
commit 048b51eb54
Notes: github-actions[bot] 2024-10-18 07:45:58 +00:00
3 changed files with 19 additions and 6 deletions

View file

@ -77,6 +77,9 @@ void PageClient::visit_edges(JS::Cell::Visitor& visitor)
{ {
Base::visit_edges(visitor); Base::visit_edges(visitor);
visitor.visit(m_page); visitor.visit(m_page);
if (m_webdriver)
m_webdriver->visit_edges(visitor);
} }
ConnectionFromClient& PageClient::client() const ConnectionFromClient& PageClient::client() const

View file

@ -199,6 +199,14 @@ WebDriverConnection::WebDriverConnection(NonnullOwnPtr<Core::LocalSocket> socket
set_current_top_level_browsing_context(page_client.page().top_level_browsing_context()); set_current_top_level_browsing_context(page_client.page().top_level_browsing_context());
} }
void WebDriverConnection::visit_edges(JS::Cell::Visitor& visitor)
{
visitor.visit(m_current_browsing_context);
visitor.visit(m_current_parent_browsing_context);
visitor.visit(m_current_top_level_browsing_context);
visitor.visit(m_action_executor);
}
// https://w3c.github.io/webdriver/#dfn-close-the-session // https://w3c.github.io/webdriver/#dfn-close-the-session
void WebDriverConnection::close_session() void WebDriverConnection::close_session()
{ {

View file

@ -34,6 +34,8 @@ public:
static ErrorOr<NonnullRefPtr<WebDriverConnection>> connect(Web::PageClient& page_client, ByteString const& webdriver_ipc_path); static ErrorOr<NonnullRefPtr<WebDriverConnection>> connect(Web::PageClient& page_client, ByteString const& webdriver_ipc_path);
virtual ~WebDriverConnection() = default; virtual ~WebDriverConnection() = default;
void visit_edges(JS::Cell::Visitor&);
private: private:
WebDriverConnection(NonnullOwnPtr<Core::LocalSocket> socket, Web::PageClient& page_client); WebDriverConnection(NonnullOwnPtr<Core::LocalSocket> socket, Web::PageClient& page_client);
@ -106,10 +108,10 @@ private:
void set_current_browsing_context(Web::HTML::BrowsingContext&); void set_current_browsing_context(Web::HTML::BrowsingContext&);
Web::HTML::BrowsingContext& current_browsing_context() { return *m_current_browsing_context; } Web::HTML::BrowsingContext& current_browsing_context() { return *m_current_browsing_context; }
JS::GCPtr<Web::HTML::BrowsingContext> current_parent_browsing_context() { return m_current_parent_browsing_context.ptr(); } JS::GCPtr<Web::HTML::BrowsingContext> current_parent_browsing_context() { return m_current_parent_browsing_context; }
void set_current_top_level_browsing_context(Web::HTML::BrowsingContext&); void set_current_top_level_browsing_context(Web::HTML::BrowsingContext&);
JS::GCPtr<Web::HTML::BrowsingContext> current_top_level_browsing_context() { return m_current_top_level_browsing_context.ptr(); } JS::GCPtr<Web::HTML::BrowsingContext> current_top_level_browsing_context() { return m_current_top_level_browsing_context; }
ErrorOr<void, Web::WebDriver::Error> ensure_current_browsing_context_is_open(); ErrorOr<void, Web::WebDriver::Error> ensure_current_browsing_context_is_open();
ErrorOr<void, Web::WebDriver::Error> ensure_current_top_level_browsing_context_is_open(); ErrorOr<void, Web::WebDriver::Error> ensure_current_top_level_browsing_context_is_open();
@ -147,15 +149,15 @@ private:
Web::WebDriver::TimeoutsConfiguration m_timeouts_configuration; Web::WebDriver::TimeoutsConfiguration m_timeouts_configuration;
// https://w3c.github.io/webdriver/#dfn-current-browsing-context // https://w3c.github.io/webdriver/#dfn-current-browsing-context
JS::Handle<Web::HTML::BrowsingContext> m_current_browsing_context; JS::GCPtr<Web::HTML::BrowsingContext> m_current_browsing_context;
// https://w3c.github.io/webdriver/#dfn-current-parent-browsing-context // https://w3c.github.io/webdriver/#dfn-current-parent-browsing-context
JS::Handle<Web::HTML::BrowsingContext> m_current_parent_browsing_context; JS::GCPtr<Web::HTML::BrowsingContext> m_current_parent_browsing_context;
// https://w3c.github.io/webdriver/#dfn-current-top-level-browsing-context // https://w3c.github.io/webdriver/#dfn-current-top-level-browsing-context
JS::Handle<Web::HTML::BrowsingContext> m_current_top_level_browsing_context; JS::GCPtr<Web::HTML::BrowsingContext> m_current_top_level_browsing_context;
JS::Handle<JS::Cell> m_action_executor; JS::GCPtr<JS::Cell> m_action_executor;
}; };
} }