LibWeb+WebContent: Simplify hand-rolled script execution result struct

Instead of maintaining a list of script execution result types, which we
then map to WebDriver error types, just return the WebDriver error that
is specified by the spec. Then perform the JSON clone algorithm from the
caller in WebDriverConnection, again as specified by the spec. To do so,
this moves the JSON clone algorithm to its own file. This will also be
the future home of the JSON deserialize algorithm, which will need some
of the internal AOs implemented there.
This commit is contained in:
Timothy Flynn 2024-11-02 14:29:37 -04:00 committed by Andreas Kling
commit 6fb8500a7a
Notes: github-actions[bot] 2024-11-03 17:08:45 +00:00
7 changed files with 317 additions and 363 deletions

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2022-2023, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2024, Tim Flynn <trflynn89@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -7,35 +8,20 @@
#pragma once
#include <AK/Forward.h>
#include <AK/JsonValue.h>
#include <LibJS/Forward.h>
#include <LibJS/Heap/HeapFunction.h>
#include <LibJS/Runtime/Promise.h>
#include <LibJS/Runtime/Value.h>
#include <LibWeb/Forward.h>
namespace Web::WebDriver {
enum class ExecuteScriptResultType {
PromiseResolved,
PromiseRejected,
Timeout,
JavaScriptError,
BrowsingContextDiscarded,
StaleElement,
DetachedShadowRoot,
struct ExecutionResult {
JS::Promise::State state { JS::Promise::State::Pending };
JS::Value value {};
};
struct ExecuteScriptResult {
ExecuteScriptResultType type;
JS::Value value;
};
struct ExecuteScriptResultSerialized {
ExecuteScriptResultType type;
JsonValue value;
};
using OnScriptComplete = JS::HeapFunction<void(ExecuteScriptResultSerialized)>;
using OnScriptComplete = JS::HeapFunction<void(ExecutionResult)>;
JS::ThrowCompletionOr<JS::Value> execute_a_function_body(HTML::BrowsingContext const&, ByteString const& body, ReadonlySpan<JS::Value> parameters);
JS::ThrowCompletionOr<JS::Value> execute_a_function_body(HTML::Window const&, ByteString const& body, ReadonlySpan<JS::Value> parameters, JS::GCPtr<JS::Object> environment_override_object = {});