1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 15:37:46 +00:00

LibWeb+WebDriver: Move the timeouts configuration object to LibWeb

This commit is contained in:
Timothy Flynn 2022-11-11 14:22:03 -05:00 committed by Linus Groh
parent 7972916be7
commit cb4b9108d1
7 changed files with 15 additions and 15 deletions

View file

@ -7,7 +7,6 @@ serenity_component(
set(SOURCES
Client.cpp
Session.cpp
TimeoutsConfiguration.cpp
WebContentConnection.cpp
main.cpp
)

View file

@ -16,9 +16,9 @@
#include <LibCore/MemoryStream.h>
#include <LibHTTP/HttpRequest.h>
#include <LibHTTP/HttpResponse.h>
#include <LibWeb/WebDriver/TimeoutsConfiguration.h>
#include <WebDriver/Client.h>
#include <WebDriver/Session.h>
#include <WebDriver/TimeoutsConfiguration.h>
namespace WebDriver {

View file

@ -135,7 +135,7 @@ Web::WebDriver::Response Session::stop()
JsonObject Session::get_timeouts()
{
// 1. Let timeouts be the timeouts object for sessions timeouts configuration
auto timeouts = timeouts_object(m_timeouts_configuration);
auto timeouts = Web::WebDriver::timeouts_object(m_timeouts_configuration);
// 2. Return success with data timeouts.
return timeouts;
@ -145,7 +145,7 @@ JsonObject Session::get_timeouts()
Web::WebDriver::Response Session::set_timeouts(JsonValue const& payload)
{
// 1. Let timeouts be the result of trying to JSON deserialize as a timeouts configuration the requests parameters.
auto timeouts = TRY(json_deserialize_as_a_timeouts_configuration(payload));
auto timeouts = TRY(Web::WebDriver::json_deserialize_as_a_timeouts_configuration(payload));
// 2. Make the session timeouts the new timeouts.
m_timeouts_configuration = move(timeouts);

View file

@ -14,7 +14,7 @@
#include <LibCore/Promise.h>
#include <LibWeb/WebDriver/Error.h>
#include <LibWeb/WebDriver/Response.h>
#include <WebDriver/TimeoutsConfiguration.h>
#include <LibWeb/WebDriver/TimeoutsConfiguration.h>
#include <WebDriver/WebContentConnection.h>
#include <unistd.h>
@ -68,7 +68,7 @@ private:
Optional<pid_t> m_browser_pid;
// https://w3c.github.io/webdriver/#dfn-session-script-timeout
TimeoutsConfiguration m_timeouts_configuration;
Web::WebDriver::TimeoutsConfiguration m_timeouts_configuration;
};
}

View file

@ -1,91 +0,0 @@
/*
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/JsonObject.h>
#include <WebDriver/TimeoutsConfiguration.h>
namespace WebDriver {
// https://w3c.github.io/webdriver/#dfn-timeouts-object
JsonObject timeouts_object(TimeoutsConfiguration const& timeouts)
{
// The timeouts object for a timeouts configuration timeouts is an object initialized with the following properties:
auto timeouts_object = JsonObject {};
// "script"
// timeouts' script timeout value, if set, or its default value.
if (timeouts.script_timeout.has_value())
timeouts_object.set("script", *timeouts.script_timeout);
else
timeouts_object.set("script", JsonValue {});
// "pageLoad"
// timeouts' page load timeouts value, if set, or its default value.
timeouts_object.set("pageLoad", timeouts.page_load_timeout);
// "implicit"
// timeouts' implicit wait timeouts value, if set, or its default value.
timeouts_object.set("implicit", timeouts.implicit_wait_timeout);
return timeouts_object;
}
// https://w3c.github.io/webdriver/#ref-for-dfn-json-deserialize-3
ErrorOr<TimeoutsConfiguration, Web::WebDriver::Error> json_deserialize_as_a_timeouts_configuration(JsonValue const& value)
{
constexpr i64 max_safe_integer = 9007199254740991;
// 1. Let timeouts be a new timeouts configuration.
auto timeouts = TimeoutsConfiguration {};
// 2. If value is not a JSON Object, return error with error code invalid argument.
if (!value.is_object())
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::InvalidArgument, "Payload is not a JSON object");
// 3. If value has a property with the key "script":
if (value.as_object().has("script"sv)) {
// 1. Let script duration be the value of property "script".
auto const& script_duration = value.as_object().get("script"sv);
// 2. If script duration is a number and less than 0 or greater than maximum safe integer, or it is not null, return error with error code invalid argument.
if ((script_duration.is_number() && (script_duration.to_i64() < 0 || script_duration.to_i64() > max_safe_integer)) || !script_duration.is_null())
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::InvalidArgument, "Invalid script duration");
// 3. Set timeoutss script timeout to script duration.
timeouts.script_timeout = script_duration.is_null() ? Optional<u64> {} : script_duration.to_u64();
}
// 4. If value has a property with the key "pageLoad":
if (value.as_object().has("pageLoad"sv)) {
// 1. Let page load duration be the value of property "pageLoad".
auto const& page_load_duration = value.as_object().get("pageLoad"sv);
// 2. If page load duration is less than 0 or greater than maximum safe integer, return error with error code invalid argument.
if (!page_load_duration.is_number() || page_load_duration.to_i64() < 0 || page_load_duration.to_i64() > max_safe_integer)
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::InvalidArgument, "Invalid page load duration");
// 3. Set timeoutss page load timeout to page load duration.
timeouts.page_load_timeout = page_load_duration.to_u64();
}
// 5. If value has a property with the key "implicit":
if (value.as_object().has("implicit"sv)) {
// 1. Let implicit duration be the value of property "implicit".
auto const& implicit_duration = value.as_object().get("implicit"sv);
// 2. If implicit duration is less than 0 or greater than maximum safe integer, return error with error code invalid argument.
if (!implicit_duration.is_number() || implicit_duration.to_i64() < 0 || implicit_duration.to_i64() > max_safe_integer)
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::InvalidArgument, "Invalid implicit duration");
// 3. Set timeoutss implicit wait timeout to implicit duration.
timeouts.implicit_wait_timeout = implicit_duration.to_u64();
}
// 6. Return success with data timeouts.
return timeouts;
}
}

View file

@ -1,25 +0,0 @@
/*
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Forward.h>
#include <AK/Optional.h>
#include <LibWeb/WebDriver/Error.h>
namespace WebDriver {
// https://w3c.github.io/webdriver/#dfn-timeouts-configuration
struct TimeoutsConfiguration {
Optional<u64> script_timeout { 30'000 };
u64 page_load_timeout { 300'000 };
u64 implicit_wait_timeout { 0 };
};
JsonObject timeouts_object(TimeoutsConfiguration const&);
ErrorOr<TimeoutsConfiguration, Web::WebDriver::Error> json_deserialize_as_a_timeouts_configuration(JsonValue const&);
}