mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 21:22:46 +00:00 
			
		
		
		
	WebContent+WebDriver: Implement POST /session/{id}/window endpoint
				
					
				
			This commit is contained in:
		
							parent
							
								
									b04cf15b3e
								
							
						
					
					
						commit
						88ecc4a1e5
					
				
					 7 changed files with 44 additions and 0 deletions
				
			
		|  | @ -63,6 +63,7 @@ static constexpr auto s_webdriver_endpoints = Array { | ||||||
|     ROUTE(GET, "/session/:session_id/title"sv, get_title), |     ROUTE(GET, "/session/:session_id/title"sv, get_title), | ||||||
|     ROUTE(GET, "/session/:session_id/window"sv, get_window_handle), |     ROUTE(GET, "/session/:session_id/window"sv, get_window_handle), | ||||||
|     ROUTE(DELETE, "/session/:session_id/window"sv, close_window), |     ROUTE(DELETE, "/session/:session_id/window"sv, close_window), | ||||||
|  |     ROUTE(POST, "/session/:session_id/window"sv, switch_to_window), | ||||||
|     ROUTE(GET, "/session/:session_id/window/handles"sv, get_window_handles), |     ROUTE(GET, "/session/:session_id/window/handles"sv, get_window_handles), | ||||||
|     ROUTE(GET, "/session/:session_id/window/rect"sv, get_window_rect), |     ROUTE(GET, "/session/:session_id/window/rect"sv, get_window_rect), | ||||||
|     ROUTE(POST, "/session/:session_id/window/rect"sv, set_window_rect), |     ROUTE(POST, "/session/:session_id/window/rect"sv, set_window_rect), | ||||||
|  |  | ||||||
|  | @ -49,6 +49,7 @@ public: | ||||||
|     // 11. Contexts, https://w3c.github.io/webdriver/#contexts
 |     // 11. Contexts, https://w3c.github.io/webdriver/#contexts
 | ||||||
|     virtual Response get_window_handle(Parameters parameters, JsonValue payload) = 0; |     virtual Response get_window_handle(Parameters parameters, JsonValue payload) = 0; | ||||||
|     virtual Response close_window(Parameters parameters, JsonValue payload) = 0; |     virtual Response close_window(Parameters parameters, JsonValue payload) = 0; | ||||||
|  |     virtual Response switch_to_window(Parameters parameters, JsonValue payload) = 0; | ||||||
|     virtual Response get_window_handles(Parameters parameters, JsonValue payload) = 0; |     virtual Response get_window_handles(Parameters parameters, JsonValue payload) = 0; | ||||||
|     virtual Response get_window_rect(Parameters parameters, JsonValue payload) = 0; |     virtual Response get_window_rect(Parameters parameters, JsonValue payload) = 0; | ||||||
|     virtual Response set_window_rect(Parameters parameters, JsonValue payload) = 0; |     virtual Response set_window_rect(Parameters parameters, JsonValue payload) = 0; | ||||||
|  |  | ||||||
|  | @ -17,6 +17,7 @@ endpoint WebDriverClient { | ||||||
|     get_title() => (Web::WebDriver::Response response) |     get_title() => (Web::WebDriver::Response response) | ||||||
|     get_window_handle() => (Web::WebDriver::Response response) |     get_window_handle() => (Web::WebDriver::Response response) | ||||||
|     close_window() => (Web::WebDriver::Response response) |     close_window() => (Web::WebDriver::Response response) | ||||||
|  |     switch_to_window(JsonValue payload) => (Web::WebDriver::Response response) | ||||||
|     get_window_handles() => (Web::WebDriver::Response response) |     get_window_handles() => (Web::WebDriver::Response response) | ||||||
|     get_window_rect() => (Web::WebDriver::Response response) |     get_window_rect() => (Web::WebDriver::Response response) | ||||||
|     set_window_rect(JsonValue payload) => (Web::WebDriver::Response response) |     set_window_rect(JsonValue payload) => (Web::WebDriver::Response response) | ||||||
|  |  | ||||||
|  | @ -481,6 +481,36 @@ Messages::WebDriverClient::CloseWindowResponse WebDriverConnection::close_window | ||||||
|     return get_window_handles().take_response(); |     return get_window_handles().take_response(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // 11.3 Switch to Window, https://w3c.github.io/webdriver/#dfn-switch-to-window
 | ||||||
|  | Messages::WebDriverClient::SwitchToWindowResponse WebDriverConnection::switch_to_window(JsonValue const& payload) | ||||||
|  | { | ||||||
|  |     // 1. Let handle be the result of getting the property "handle" from the parameters argument.
 | ||||||
|  |     // 2. If handle is undefined, return error with error code invalid argument.
 | ||||||
|  |     auto handle = TRY(get_property(payload, "handle"sv)); | ||||||
|  | 
 | ||||||
|  |     // 3. If there is an active user prompt, that prevents the focusing of another top-level browsing
 | ||||||
|  |     //    context, return error with error code unexpected alert open.
 | ||||||
|  |     if (m_page_client.page().has_pending_dialog()) | ||||||
|  |         return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::UnexpectedAlertOpen, "A user dialog is open"sv); | ||||||
|  | 
 | ||||||
|  |     // 4. If handle is equal to the associated window handle for some top-level browsing context in the
 | ||||||
|  |     //    current session, let context be the that browsing context, and set the current top-level
 | ||||||
|  |     //    browsing context with context.
 | ||||||
|  |     //    Otherwise, return error with error code no such window.
 | ||||||
|  |     auto const& maybe_window = m_windows.get(handle); | ||||||
|  | 
 | ||||||
|  |     if (!maybe_window.has_value()) | ||||||
|  |         return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchWindow, "Window not found"); | ||||||
|  | 
 | ||||||
|  |     m_current_window_handle = handle; | ||||||
|  | 
 | ||||||
|  |     // FIXME: 5. Update any implementation-specific state that would result from the user selecting the current
 | ||||||
|  |     //          browsing context for interaction, without altering OS-level focus.
 | ||||||
|  | 
 | ||||||
|  |     // 6. Return success with data null.
 | ||||||
|  |     return JsonValue {}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles
 | // 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles
 | ||||||
| Messages::WebDriverClient::GetWindowHandlesResponse WebDriverConnection::get_window_handles() | Messages::WebDriverClient::GetWindowHandlesResponse WebDriverConnection::get_window_handles() | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -52,6 +52,7 @@ private: | ||||||
|     virtual Messages::WebDriverClient::GetTitleResponse get_title() override; |     virtual Messages::WebDriverClient::GetTitleResponse get_title() override; | ||||||
|     virtual Messages::WebDriverClient::GetWindowHandleResponse get_window_handle() override; |     virtual Messages::WebDriverClient::GetWindowHandleResponse get_window_handle() override; | ||||||
|     virtual Messages::WebDriverClient::CloseWindowResponse close_window() override; |     virtual Messages::WebDriverClient::CloseWindowResponse close_window() override; | ||||||
|  |     virtual Messages::WebDriverClient::SwitchToWindowResponse switch_to_window(JsonValue const& payload) override; | ||||||
|     virtual Messages::WebDriverClient::GetWindowHandlesResponse get_window_handles() override; |     virtual Messages::WebDriverClient::GetWindowHandlesResponse get_window_handles() override; | ||||||
|     virtual Messages::WebDriverClient::GetWindowRectResponse get_window_rect() override; |     virtual Messages::WebDriverClient::GetWindowRectResponse get_window_rect() override; | ||||||
|     virtual Messages::WebDriverClient::SetWindowRectResponse set_window_rect(JsonValue const& payload) override; |     virtual Messages::WebDriverClient::SetWindowRectResponse set_window_rect(JsonValue const& payload) override; | ||||||
|  |  | ||||||
|  | @ -322,6 +322,15 @@ Web::WebDriver::Response Client::close_window(Web::WebDriver::Parameters paramet | ||||||
|     return open_windows; |     return open_windows; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // 11.3 Switch to Window, https://w3c.github.io/webdriver/#dfn-switch-to-window
 | ||||||
|  | // POST /session/{session id}/window
 | ||||||
|  | Web::WebDriver::Response Client::switch_to_window(Web::WebDriver::Parameters parameters, AK::JsonValue payload) | ||||||
|  | { | ||||||
|  |     dbgln_if(WEBDRIVER_DEBUG, "Handling POST /session/<session_id>/window"); | ||||||
|  |     auto* session = TRY(find_session_with_id(parameters[0])); | ||||||
|  |     return session->web_content_connection().switch_to_window(payload); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles
 | // 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles
 | ||||||
| // GET /session/{session id}/window/handles
 | // GET /session/{session id}/window/handles
 | ||||||
| Web::WebDriver::Response Client::get_window_handles(Web::WebDriver::Parameters parameters, JsonValue) | Web::WebDriver::Response Client::get_window_handles(Web::WebDriver::Parameters parameters, JsonValue) | ||||||
|  |  | ||||||
|  | @ -46,6 +46,7 @@ private: | ||||||
|     virtual Web::WebDriver::Response get_title(Web::WebDriver::Parameters parameters, JsonValue payload) override; |     virtual Web::WebDriver::Response get_title(Web::WebDriver::Parameters parameters, JsonValue payload) override; | ||||||
|     virtual Web::WebDriver::Response get_window_handle(Web::WebDriver::Parameters parameters, JsonValue payload) override; |     virtual Web::WebDriver::Response get_window_handle(Web::WebDriver::Parameters parameters, JsonValue payload) override; | ||||||
|     virtual Web::WebDriver::Response close_window(Web::WebDriver::Parameters parameters, JsonValue payload) override; |     virtual Web::WebDriver::Response close_window(Web::WebDriver::Parameters parameters, JsonValue payload) override; | ||||||
|  |     virtual Web::WebDriver::Response switch_to_window(Web::WebDriver::Parameters parameters, JsonValue payload) override; | ||||||
|     virtual Web::WebDriver::Response get_window_handles(Web::WebDriver::Parameters parameters, JsonValue payload) override; |     virtual Web::WebDriver::Response get_window_handles(Web::WebDriver::Parameters parameters, JsonValue payload) override; | ||||||
|     virtual Web::WebDriver::Response get_window_rect(Web::WebDriver::Parameters parameters, JsonValue payload) override; |     virtual Web::WebDriver::Response get_window_rect(Web::WebDriver::Parameters parameters, JsonValue payload) override; | ||||||
|     virtual Web::WebDriver::Response set_window_rect(Web::WebDriver::Parameters parameters, JsonValue payload) override; |     virtual Web::WebDriver::Response set_window_rect(Web::WebDriver::Parameters parameters, JsonValue payload) override; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Song
						Victor Song