فهرست منبع

WebContent+WebDriver: Get window handle from WebContent process

This change makes window handles on WebDriver process side be
consistent with handles returned by /window/new.
Aliaksandr Kalenik 2 سال پیش
والد
کامیت
126fa7df14

+ 1 - 0
Userland/Services/WebContent/WebDriverClient.ipc

@@ -15,6 +15,7 @@ endpoint WebDriverClient {
     forward() => (Web::WebDriver::Response response)
     refresh() => (Web::WebDriver::Response response)
     get_title() => (Web::WebDriver::Response response)
+    get_window_handle() => (String handle)
     close_window() => (Web::WebDriver::Response response)
     new_window(JsonValue payload) => (Web::WebDriver::Response response)
     get_window_rect() => (Web::WebDriver::Response response)

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

@@ -522,6 +522,12 @@ Messages::WebDriverClient::GetTitleResponse WebDriverConnection::get_title()
     return title;
 }
 
+// 11.1 Get Window Handle, https://w3c.github.io/webdriver/#get-window-handle
+Messages::WebDriverClient::GetWindowHandleResponse WebDriverConnection::get_window_handle()
+{
+    return m_page_client.page().top_level_browsing_context().window_handle();
+}
+
 // 11.2 Close Window, https://w3c.github.io/webdriver/#dfn-close-window
 Messages::WebDriverClient::CloseWindowResponse WebDriverConnection::close_window()
 {

+ 1 - 0
Userland/Services/WebContent/WebDriverConnection.h

@@ -52,6 +52,7 @@ private:
     virtual Messages::WebDriverClient::ForwardResponse forward() override;
     virtual Messages::WebDriverClient::RefreshResponse refresh() override;
     virtual Messages::WebDriverClient::GetTitleResponse get_title() override;
+    virtual Messages::WebDriverClient::GetWindowHandleResponse get_window_handle() override;
     virtual Messages::WebDriverClient::CloseWindowResponse close_window() override;
     virtual Messages::WebDriverClient::NewWindowResponse new_window(JsonValue const& payload) override;
     virtual Messages::WebDriverClient::GetWindowRectResponse get_window_rect() override;

+ 3 - 4
Userland/Services/WebDriver/Session.cpp

@@ -50,12 +50,11 @@ ErrorOr<NonnullRefPtr<Core::LocalServer>> Session::create_server(NonnullRefPtr<S
         dbgln("WebDriver is connected to WebContent socket");
         auto web_content_connection = maybe_connection.release_value();
 
-        auto handle_name = String::formatted("window-{}"sv, m_next_handle_id).release_value_but_fixme_should_propagate_errors();
-        m_next_handle_id++;
-        m_windows.set(handle_name, Session::Window { handle_name, move(web_content_connection) });
+        auto window_handle = web_content_connection->get_window_handle();
+        m_windows.set(window_handle, Session::Window { window_handle, move(web_content_connection) });
 
         if (m_current_window_handle.is_empty())
-            m_current_window_handle = handle_name;
+            m_current_window_handle = window_handle;
 
         MUST(promise->resolve({}));
     };

+ 0 - 1
Userland/Services/WebDriver/Session.h

@@ -64,7 +64,6 @@ private:
     bool m_started { false };
     unsigned m_id { 0 };
 
-    unsigned m_next_handle_id = 0;
     HashMap<String, Window> m_windows;
     String m_current_window_handle;