diff options
Diffstat (limited to 'Userland/Services/WebContent')
-rw-r--r-- | Userland/Services/WebContent/WebDriverClient.ipc | 1 | ||||
-rw-r--r-- | Userland/Services/WebContent/WebDriverConnection.cpp | 43 | ||||
-rw-r--r-- | Userland/Services/WebContent/WebDriverConnection.h | 1 |
3 files changed, 45 insertions, 0 deletions
diff --git a/Userland/Services/WebContent/WebDriverClient.ipc b/Userland/Services/WebContent/WebDriverClient.ipc index b8f803f2f3..a7d70c8ff5 100644 --- a/Userland/Services/WebContent/WebDriverClient.ipc +++ b/Userland/Services/WebContent/WebDriverClient.ipc @@ -24,6 +24,7 @@ endpoint WebDriverClient { get_source() => (Web::WebDriver::Response response) execute_script(JsonValue payload) => (Web::WebDriver::Response response) execute_async_script(JsonValue payload) => (Web::WebDriver::Response response) + get_all_cookies() => (Web::WebDriver::Response response) take_screenshot() => (Web::WebDriver::Response response) take_element_screenshot(String element_id) => (Web::WebDriver::Response response) } diff --git a/Userland/Services/WebContent/WebDriverConnection.cpp b/Userland/Services/WebContent/WebDriverConnection.cpp index 9b4e67098b..94b12c8a46 100644 --- a/Userland/Services/WebContent/WebDriverConnection.cpp +++ b/Userland/Services/WebContent/WebDriverConnection.cpp @@ -16,6 +16,7 @@ #include <LibWeb/CSS/PropertyID.h> #include <LibWeb/CSS/StyleProperties.h> #include <LibWeb/CSS/StyleValue.h> +#include <LibWeb/Cookie/Cookie.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/DOM/Element.h> #include <LibWeb/Geometry/DOMRect.h> @@ -41,6 +42,22 @@ static JsonValue make_success_response(JsonValue value) return result; } +// https://w3c.github.io/webdriver/#dfn-serialized-cookie +static JsonValue serialize_cookie(Web::Cookie::Cookie const& cookie) +{ + JsonObject serialized_cookie; + serialized_cookie.set("name"sv, cookie.name); + serialized_cookie.set("value"sv, cookie.value); + serialized_cookie.set("path"sv, cookie.path); + serialized_cookie.set("domain"sv, cookie.domain); + serialized_cookie.set("secure"sv, cookie.secure); + serialized_cookie.set("httpOnly"sv, cookie.http_only); + serialized_cookie.set("expiry"sv, cookie.expiry_time.timestamp()); + serialized_cookie.set("sameSite"sv, Web::Cookie::same_site_to_string(cookie.same_site)); + + return serialized_cookie; +} + static JsonValue serialize_rect(Gfx::IntRect const& rect) { JsonObject serialized_rect = {}; @@ -829,6 +846,32 @@ Messages::WebDriverClient::ExecuteAsyncScriptResponse WebDriverConnection::execu VERIFY_NOT_REACHED(); } +// 14.1 Get All Cookies, https://w3c.github.io/webdriver/#dfn-get-all-cookies +Messages::WebDriverClient::GetAllCookiesResponse WebDriverConnection::get_all_cookies() +{ + // 1. If the current browsing context is no longer open, return error with error code no such window. + TRY(ensure_open_top_level_browsing_context()); + + // FIXME: 2. Handle any user prompts, and return its value if it is an error. + + // 3. Let cookies be a new JSON List. + JsonArray cookies; + + // 4. For each cookie in all associated cookies of the current browsing context’s active document: + auto* document = m_page_host.page().top_level_browsing_context().active_document(); + + for (auto const& cookie : m_web_content_client.did_request_all_cookies(document->url())) { + // 1. Let serialized cookie be the result of serializing cookie. + auto serialized_cookie = serialize_cookie(cookie); + + // 2. Append serialized cookie to cookies + cookies.append(move(serialized_cookie)); + } + + // 5. Return success with data cookies. + return make_success_response(move(cookies)); +} + // 17.1 Take Screenshot, https://w3c.github.io/webdriver/#take-screenshot Messages::WebDriverClient::TakeScreenshotResponse WebDriverConnection::take_screenshot() { diff --git a/Userland/Services/WebContent/WebDriverConnection.h b/Userland/Services/WebContent/WebDriverConnection.h index 56e00a907e..91f6735056 100644 --- a/Userland/Services/WebContent/WebDriverConnection.h +++ b/Userland/Services/WebContent/WebDriverConnection.h @@ -56,6 +56,7 @@ private: virtual Messages::WebDriverClient::GetSourceResponse get_source() override; virtual Messages::WebDriverClient::ExecuteScriptResponse execute_script(JsonValue const& payload) override; virtual Messages::WebDriverClient::ExecuteAsyncScriptResponse execute_async_script(JsonValue const& payload) override; + virtual Messages::WebDriverClient::GetAllCookiesResponse get_all_cookies() override; virtual Messages::WebDriverClient::TakeScreenshotResponse take_screenshot() override; virtual Messages::WebDriverClient::TakeElementScreenshotResponse take_element_screenshot(String const& element_id) override; |