Selaa lähdekoodia

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.
Timothy Flynn 9 kuukautta sitten
vanhempi
commit
048b51eb54

+ 3 - 0
Userland/Services/WebContent/PageClient.cpp

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

+ 8 - 0
Userland/Services/WebContent/WebDriverConnection.cpp

@@ -199,6 +199,14 @@ WebDriverConnection::WebDriverConnection(NonnullOwnPtr<Core::LocalSocket> socket
     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
 void WebDriverConnection::close_session()
 {

+ 8 - 6
Userland/Services/WebContent/WebDriverConnection.h

@@ -34,6 +34,8 @@ public:
     static ErrorOr<NonnullRefPtr<WebDriverConnection>> connect(Web::PageClient& page_client, ByteString const& webdriver_ipc_path);
     virtual ~WebDriverConnection() = default;
 
+    void visit_edges(JS::Cell::Visitor&);
+
 private:
     WebDriverConnection(NonnullOwnPtr<Core::LocalSocket> socket, Web::PageClient& page_client);
 
@@ -106,10 +108,10 @@ private:
 
     void set_current_browsing_context(Web::HTML::BrowsingContext&);
     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&);
-    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_top_level_browsing_context_is_open();
@@ -147,15 +149,15 @@ private:
     Web::WebDriver::TimeoutsConfiguration m_timeouts_configuration;
 
     // 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
-    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
-    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;
 };
 
 }