mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-28 19:59:17 +00:00
LibGC+Everywhere: Factor out a LibGC from LibJS
Resulting in a massive rename across almost everywhere! Alongside the namespace change, we now have the following names: * JS::NonnullGCPtr -> GC::Ref * JS::GCPtr -> GC::Ptr * JS::HeapFunction -> GC::Function * JS::CellImpl -> GC::Cell * JS::Handle -> GC::Root
This commit is contained in:
parent
ce23efc5f6
commit
f87041bf3a
Notes:
github-actions[bot]
2024-11-15 13:50:17 +00:00
Author: https://github.com/shannonbooth
Commit: f87041bf3a
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2345
1722 changed files with 9939 additions and 9906 deletions
|
@ -1271,8 +1271,8 @@ static ErrorOr<void, WebDriver::Error> dispatch_pointer_move_action(ActionObject
|
|||
|
||||
// https://w3c.github.io/webdriver/#dfn-dispatch-actions-inner
|
||||
class ActionExecutor final : public JS::Cell {
|
||||
JS_CELL(ActionExecutor, JS::Cell);
|
||||
JS_DECLARE_ALLOCATOR(ActionExecutor);
|
||||
GC_CELL(ActionExecutor, JS::Cell);
|
||||
GC_DECLARE_ALLOCATOR(ActionExecutor);
|
||||
|
||||
public:
|
||||
ActionExecutor(InputState& input_state, Vector<Vector<ActionObject>> actions_by_tick, HTML::BrowsingContext& browsing_context, ActionsOptions actions_options, OnActionsComplete on_complete)
|
||||
|
@ -1316,7 +1316,7 @@ public:
|
|||
m_timer = Core::Timer::create_single_shot(static_cast<int>(tick_duration.to_milliseconds()), [this]() {
|
||||
m_timer = nullptr;
|
||||
|
||||
HTML::queue_a_task(HTML::Task::Source::Unspecified, nullptr, nullptr, JS::create_heap_function(heap(), [this]() {
|
||||
HTML::queue_a_task(HTML::Task::Source::Unspecified, nullptr, nullptr, GC::create_function(heap(), [this]() {
|
||||
process_next_tick();
|
||||
}));
|
||||
});
|
||||
|
@ -1331,7 +1331,7 @@ private:
|
|||
visitor.visit(m_on_complete);
|
||||
}
|
||||
|
||||
JS::NonnullGCPtr<HTML::BrowsingContext> m_browsing_context;
|
||||
GC::Ref<HTML::BrowsingContext> m_browsing_context;
|
||||
|
||||
InputState& m_input_state;
|
||||
ActionsOptions m_actions_options;
|
||||
|
@ -1344,10 +1344,10 @@ private:
|
|||
RefPtr<Core::Timer> m_timer;
|
||||
};
|
||||
|
||||
JS_DEFINE_ALLOCATOR(ActionExecutor);
|
||||
GC_DEFINE_ALLOCATOR(ActionExecutor);
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-dispatch-actions
|
||||
JS::NonnullGCPtr<JS::Cell> dispatch_actions(InputState& input_state, Vector<Vector<ActionObject>> actions_by_tick, HTML::BrowsingContext& browsing_context, ActionsOptions actions_options, OnActionsComplete on_complete)
|
||||
GC::Ref<JS::Cell> dispatch_actions(InputState& input_state, Vector<Vector<ActionObject>> actions_by_tick, HTML::BrowsingContext& browsing_context, ActionsOptions actions_options, OnActionsComplete on_complete)
|
||||
{
|
||||
// 1. Let token be a new unique identifier.
|
||||
auto token = MUST(Crypto::generate_random_uuid());
|
||||
|
@ -1466,7 +1466,7 @@ ErrorOr<void, WebDriver::Error> dispatch_tick_actions(InputState& input_state, R
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-dispatch-a-list-of-actions
|
||||
JS::NonnullGCPtr<JS::Cell> dispatch_list_of_actions(InputState& input_state, Vector<ActionObject> actions, HTML::BrowsingContext& browsing_context, ActionsOptions actions_options, OnActionsComplete on_complete)
|
||||
GC::Ref<JS::Cell> dispatch_list_of_actions(InputState& input_state, Vector<ActionObject> actions, HTML::BrowsingContext& browsing_context, ActionsOptions actions_options, OnActionsComplete on_complete)
|
||||
{
|
||||
// 1. Let tick actions be the list «actions»
|
||||
// 2. Let actions by tick be the list «tick actions».
|
||||
|
@ -1478,7 +1478,7 @@ JS::NonnullGCPtr<JS::Cell> dispatch_list_of_actions(InputState& input_state, Vec
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-dispatch-the-events-for-a-typeable-string
|
||||
static JS::NonnullGCPtr<JS::Cell> dispatch_the_events_for_a_typeable_string(Web::WebDriver::InputState& input_state, String const& input_id, Web::WebDriver::InputSource& source, StringView text, Web::HTML::BrowsingContext& browsing_context, Web::WebDriver::OnActionsComplete on_complete)
|
||||
static GC::Ref<JS::Cell> dispatch_the_events_for_a_typeable_string(Web::WebDriver::InputState& input_state, String const& input_id, Web::WebDriver::InputSource& source, StringView text, Web::HTML::BrowsingContext& browsing_context, Web::WebDriver::OnActionsComplete on_complete)
|
||||
{
|
||||
auto& input_source = source.get<Web::WebDriver::KeyInputSource>();
|
||||
|
||||
|
@ -1551,7 +1551,7 @@ static JS::NonnullGCPtr<JS::Cell> dispatch_the_events_for_a_typeable_string(Web:
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-dispatch-actions-for-a-string
|
||||
JS::NonnullGCPtr<JS::Cell> dispatch_actions_for_a_string(Web::WebDriver::InputState& input_state, String const& input_id, Web::WebDriver::InputSource& source, StringView text, Web::HTML::BrowsingContext& browsing_context, Web::WebDriver::OnActionsComplete on_complete)
|
||||
GC::Ref<JS::Cell> dispatch_actions_for_a_string(Web::WebDriver::InputState& input_state, String const& input_id, Web::WebDriver::InputSource& source, StringView text, Web::HTML::BrowsingContext& browsing_context, Web::WebDriver::OnActionsComplete on_complete)
|
||||
{
|
||||
// FIXME: 1. Let clusters be an array created by breaking text into extended grapheme clusters.
|
||||
// FIXME: 2. Let undo actions be an empty map.
|
||||
|
@ -1596,7 +1596,7 @@ JS::NonnullGCPtr<JS::Cell> dispatch_actions_for_a_string(Web::WebDriver::InputSt
|
|||
|
||||
// 5. Dispatch the events for a typeable string with input state, input id and source, current typeable text, and
|
||||
// browsing context.
|
||||
return dispatch_the_events_for_a_typeable_string(input_state, input_id, source, text, browsing_context, JS::create_heap_function(browsing_context.heap(), [on_complete](Web::WebDriver::Response result) {
|
||||
return dispatch_the_events_for_a_typeable_string(input_state, input_id, source, text, browsing_context, GC::create_function(browsing_context.heap(), [on_complete](Web::WebDriver::Response result) {
|
||||
// FIXME: 6. Try to clear the modifier key state with input state, input id, source, undo actions, and browsing context.
|
||||
|
||||
on_complete->function()(move(result));
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
#include <AK/Time.h>
|
||||
#include <AK/Variant.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <LibJS/Heap/GCPtr.h>
|
||||
#include <LibJS/Heap/HeapFunction.h>
|
||||
#include <LibGC/Function.h>
|
||||
#include <LibGC/Ptr.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
#include <LibWeb/PixelUnits.h>
|
||||
#include <LibWeb/UIEvents/MouseButton.h>
|
||||
|
@ -118,19 +118,19 @@ struct ActionObject {
|
|||
// https://w3c.github.io/webdriver/#dfn-actions-options
|
||||
struct ActionsOptions {
|
||||
using IsElementOrigin = bool (*)(JsonValue const&);
|
||||
using GetElementOrigin = ErrorOr<JS::NonnullGCPtr<DOM::Element>, WebDriver::Error> (*)(HTML::BrowsingContext const&, StringView);
|
||||
using GetElementOrigin = ErrorOr<GC::Ref<DOM::Element>, WebDriver::Error> (*)(HTML::BrowsingContext const&, StringView);
|
||||
|
||||
IsElementOrigin is_element_origin { nullptr };
|
||||
GetElementOrigin get_element_origin { nullptr };
|
||||
};
|
||||
|
||||
using OnActionsComplete = JS::NonnullGCPtr<JS::HeapFunction<void(Web::WebDriver::Response)>>;
|
||||
using OnActionsComplete = GC::Ref<GC::Function<void(Web::WebDriver::Response)>>;
|
||||
|
||||
ErrorOr<Vector<Vector<ActionObject>>, WebDriver::Error> extract_an_action_sequence(InputState&, JsonValue const&, ActionsOptions const&);
|
||||
|
||||
JS::NonnullGCPtr<JS::Cell> dispatch_actions(InputState&, Vector<Vector<ActionObject>>, HTML::BrowsingContext&, ActionsOptions, OnActionsComplete);
|
||||
GC::Ref<JS::Cell> dispatch_actions(InputState&, Vector<Vector<ActionObject>>, HTML::BrowsingContext&, ActionsOptions, OnActionsComplete);
|
||||
ErrorOr<void, WebDriver::Error> dispatch_tick_actions(InputState&, ReadonlySpan<ActionObject>, AK::Duration, HTML::BrowsingContext&, ActionsOptions const&);
|
||||
JS::NonnullGCPtr<JS::Cell> dispatch_list_of_actions(InputState&, Vector<ActionObject>, HTML::BrowsingContext&, ActionsOptions, OnActionsComplete);
|
||||
JS::NonnullGCPtr<JS::Cell> dispatch_actions_for_a_string(Web::WebDriver::InputState&, String const& input_id, Web::WebDriver::InputSource&, StringView text, Web::HTML::BrowsingContext&, Web::WebDriver::OnActionsComplete);
|
||||
GC::Ref<JS::Cell> dispatch_list_of_actions(InputState&, Vector<ActionObject>, HTML::BrowsingContext&, ActionsOptions, OnActionsComplete);
|
||||
GC::Ref<JS::Cell> dispatch_actions_for_a_string(Web::WebDriver::InputState&, String const& input_id, Web::WebDriver::InputSource&, StringView text, Web::HTML::BrowsingContext&, Web::WebDriver::OnActionsComplete);
|
||||
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ JsonObject window_proxy_reference_object(HTML::WindowProxy const& window)
|
|||
return object;
|
||||
}
|
||||
|
||||
static JS::GCPtr<HTML::Navigable> find_navigable_with_handle(StringView handle, bool should_be_top_level)
|
||||
static GC::Ptr<HTML::Navigable> find_navigable_with_handle(StringView handle, bool should_be_top_level)
|
||||
{
|
||||
for (auto* navigable : Web::HTML::all_navigables()) {
|
||||
if (navigable->is_top_level_traversable() != should_be_top_level)
|
||||
|
@ -69,7 +69,7 @@ bool represents_a_web_frame(JS::Value value)
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-deserialize-a-web-frame
|
||||
ErrorOr<JS::NonnullGCPtr<HTML::WindowProxy>, WebDriver::Error> deserialize_web_frame(JS::Object const& object)
|
||||
ErrorOr<GC::Ref<HTML::WindowProxy>, WebDriver::Error> deserialize_web_frame(JS::Object const& object)
|
||||
{
|
||||
// 1. If object has no own property web frame identifier, return error with error code invalid argument.
|
||||
auto property = object.get(WEB_FRAME_IDENTIFIER);
|
||||
|
@ -104,7 +104,7 @@ bool represents_a_web_window(JS::Value value)
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-deserialize-a-web-frame
|
||||
ErrorOr<JS::NonnullGCPtr<HTML::WindowProxy>, WebDriver::Error> deserialize_web_window(JS::Object const& object)
|
||||
ErrorOr<GC::Ref<HTML::WindowProxy>, WebDriver::Error> deserialize_web_window(JS::Object const& object)
|
||||
{
|
||||
// 1. If object has no own property web window identifier, return error with error code invalid argument.
|
||||
auto property = object.get(WEB_WINDOW_IDENTIFIER);
|
||||
|
|
|
@ -17,9 +17,9 @@ namespace Web::WebDriver {
|
|||
JsonObject window_proxy_reference_object(HTML::WindowProxy const&);
|
||||
|
||||
bool represents_a_web_frame(JS::Value);
|
||||
ErrorOr<JS::NonnullGCPtr<HTML::WindowProxy>, WebDriver::Error> deserialize_web_frame(JS::Object const&);
|
||||
ErrorOr<GC::Ref<HTML::WindowProxy>, WebDriver::Error> deserialize_web_frame(JS::Object const&);
|
||||
|
||||
bool represents_a_web_window(JS::Value);
|
||||
ErrorOr<JS::NonnullGCPtr<HTML::WindowProxy>, WebDriver::Error> deserialize_web_window(JS::Object const&);
|
||||
ErrorOr<GC::Ref<HTML::WindowProxy>, WebDriver::Error> deserialize_web_window(JS::Object const&);
|
||||
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
namespace Web::WebDriver {
|
||||
|
||||
// https://w3c.github.io/webdriver/#css-selectors
|
||||
static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_css_selector(DOM::ParentNode& start_node, StringView selector)
|
||||
static ErrorOr<GC::Ref<DOM::NodeList>, Error> locate_element_by_css_selector(DOM::ParentNode& start_node, StringView selector)
|
||||
{
|
||||
// 1. Let elements be the result of calling querySelectorAll() with start node as this and selector as the argument.
|
||||
// If this causes an exception to be thrown, return error with error code invalid selector.
|
||||
|
@ -28,7 +28,7 @@ static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_css_sel
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#link-text
|
||||
static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_link_text(DOM::ParentNode& start_node, StringView selector)
|
||||
static ErrorOr<GC::Ref<DOM::NodeList>, Error> locate_element_by_link_text(DOM::ParentNode& start_node, StringView selector)
|
||||
{
|
||||
auto& realm = start_node.realm();
|
||||
|
||||
|
@ -39,7 +39,7 @@ static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_link_te
|
|||
return Error::from_code(ErrorCode::UnknownError, "querySelectorAll() failed"sv);
|
||||
|
||||
// 2. Let result be an empty NodeList.
|
||||
Vector<JS::Handle<DOM::Node>> result;
|
||||
Vector<GC::Root<DOM::Node>> result;
|
||||
|
||||
// 3. For each element in elements:
|
||||
for (size_t i = 0; i < elements.value()->length(); ++i) {
|
||||
|
@ -61,7 +61,7 @@ static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_link_te
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#partial-link-text
|
||||
static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_partial_link_text(DOM::ParentNode& start_node, StringView selector)
|
||||
static ErrorOr<GC::Ref<DOM::NodeList>, Error> locate_element_by_partial_link_text(DOM::ParentNode& start_node, StringView selector)
|
||||
{
|
||||
auto& realm = start_node.realm();
|
||||
|
||||
|
@ -72,7 +72,7 @@ static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_partial
|
|||
return Error::from_code(ErrorCode::UnknownError, "querySelectorAll() failed"sv);
|
||||
|
||||
// 2. Let result be an empty NodeList.
|
||||
Vector<JS::Handle<DOM::Node>> result;
|
||||
Vector<GC::Root<DOM::Node>> result;
|
||||
|
||||
// 3. For each element in elements:
|
||||
for (size_t i = 0; i < elements.value()->length(); ++i) {
|
||||
|
@ -91,7 +91,7 @@ static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_partial
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#tag-name
|
||||
static JS::NonnullGCPtr<DOM::NodeList> locate_element_by_tag_name(DOM::ParentNode& start_node, StringView selector)
|
||||
static GC::Ref<DOM::NodeList> locate_element_by_tag_name(DOM::ParentNode& start_node, StringView selector)
|
||||
{
|
||||
auto& realm = start_node.realm();
|
||||
|
||||
|
@ -100,7 +100,7 @@ static JS::NonnullGCPtr<DOM::NodeList> locate_element_by_tag_name(DOM::ParentNod
|
|||
auto elements = start_node.get_elements_by_tag_name(MUST(FlyString::from_utf8(selector)));
|
||||
|
||||
// FIXME: Having to convert this to a NodeList is a bit awkward.
|
||||
Vector<JS::Handle<DOM::Node>> result;
|
||||
Vector<GC::Root<DOM::Node>> result;
|
||||
|
||||
for (size_t i = 0; i < elements->length(); ++i) {
|
||||
auto* element = elements->item(i);
|
||||
|
@ -111,7 +111,7 @@ static JS::NonnullGCPtr<DOM::NodeList> locate_element_by_tag_name(DOM::ParentNod
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#xpath
|
||||
static ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> locate_element_by_x_path(DOM::ParentNode&, StringView)
|
||||
static ErrorOr<GC::Ref<DOM::NodeList>, Error> locate_element_by_x_path(DOM::ParentNode&, StringView)
|
||||
{
|
||||
return Error::from_code(ErrorCode::UnsupportedOperation, "Not implemented: locate element by XPath"sv);
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ Optional<LocationStrategy> location_strategy_from_string(StringView type)
|
|||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> invoke_location_strategy(LocationStrategy type, DOM::ParentNode& start_node, StringView selector)
|
||||
ErrorOr<GC::Ref<DOM::NodeList>, Error> invoke_location_strategy(LocationStrategy type, DOM::ParentNode& start_node, StringView selector)
|
||||
{
|
||||
switch (type) {
|
||||
case LocationStrategy::CssSelector:
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <LibJS/Heap/GCPtr.h>
|
||||
#include <LibGC/Ptr.h>
|
||||
#include <LibWeb/DOM/NodeList.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
#include <LibWeb/WebDriver/Error.h>
|
||||
|
@ -24,6 +24,6 @@ enum class LocationStrategy {
|
|||
};
|
||||
|
||||
Optional<LocationStrategy> location_strategy_from_string(StringView type);
|
||||
ErrorOr<JS::NonnullGCPtr<DOM::NodeList>, Error> invoke_location_strategy(LocationStrategy type, DOM::ParentNode& start_node, StringView selector);
|
||||
ErrorOr<GC::Ref<DOM::NodeList>, Error> invoke_location_strategy(LocationStrategy type, DOM::ParentNode& start_node, StringView selector);
|
||||
|
||||
}
|
||||
|
|
|
@ -31,13 +31,13 @@ static ByteString const web_element_identifier = "element-6066-11e4-a52e-4f73546
|
|||
static ByteString const shadow_root_identifier = "shadow-6066-11e4-a52e-4f735466cecf"sv;
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-browsing-context-group-node-map
|
||||
static HashMap<JS::RawGCPtr<HTML::BrowsingContextGroup const>, HashTable<ByteString>> browsing_context_group_node_map;
|
||||
static HashMap<GC::RawPtr<HTML::BrowsingContextGroup const>, HashTable<ByteString>> browsing_context_group_node_map;
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-navigable-seen-nodes-map
|
||||
static HashMap<JS::RawGCPtr<HTML::Navigable>, HashTable<ByteString>> navigable_seen_nodes_map;
|
||||
static HashMap<GC::RawPtr<HTML::Navigable>, HashTable<ByteString>> navigable_seen_nodes_map;
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-get-a-node
|
||||
JS::GCPtr<Web::DOM::Node> get_node(HTML::BrowsingContext const& browsing_context, StringView reference)
|
||||
GC::Ptr<Web::DOM::Node> get_node(HTML::BrowsingContext const& browsing_context, StringView reference)
|
||||
{
|
||||
// 1. Let browsing context group node map be session's browsing context group node map.
|
||||
// 2. Let browsing context group be browsing context's browsing context group.
|
||||
|
@ -50,7 +50,7 @@ JS::GCPtr<Web::DOM::Node> get_node(HTML::BrowsingContext const& browsing_context
|
|||
return nullptr;
|
||||
|
||||
// 5. Let node be the entry in node id map whose value is reference, if such an entry exists, or null otherwise.
|
||||
JS::GCPtr<Web::DOM::Node> node;
|
||||
GC::Ptr<Web::DOM::Node> node;
|
||||
|
||||
if (node_id_map->contains(reference)) {
|
||||
auto node_id = reference.to_number<i64>().value();
|
||||
|
@ -158,7 +158,7 @@ bool represents_a_web_element(JS::Value value)
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-deserialize-a-web-element
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, WebDriver::Error> deserialize_web_element(Web::HTML::BrowsingContext const& browsing_context, JsonObject const& object)
|
||||
ErrorOr<GC::Ref<Web::DOM::Element>, WebDriver::Error> deserialize_web_element(Web::HTML::BrowsingContext const& browsing_context, JsonObject const& object)
|
||||
{
|
||||
// 1. If object has no own property web element identifier, return error with error code invalid argument.
|
||||
if (!object.has_string(web_element_identifier))
|
||||
|
@ -175,7 +175,7 @@ ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, WebDriver::Error> deserialize_web_e
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-deserialize-a-web-element
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, WebDriver::Error> deserialize_web_element(Web::HTML::BrowsingContext const& browsing_context, JS::Object const& object)
|
||||
ErrorOr<GC::Ref<Web::DOM::Element>, WebDriver::Error> deserialize_web_element(Web::HTML::BrowsingContext const& browsing_context, JS::Object const& object)
|
||||
{
|
||||
// 1. If object has no own property web element identifier, return error with error code invalid argument.
|
||||
auto property = object.get(web_element_identifier);
|
||||
|
@ -198,7 +198,7 @@ ByteString extract_web_element_reference(JsonObject const& object)
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-get-a-webelement-origin
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_web_element_origin(Web::HTML::BrowsingContext const& browsing_context, StringView origin)
|
||||
ErrorOr<GC::Ref<Web::DOM::Element>, Web::WebDriver::Error> get_web_element_origin(Web::HTML::BrowsingContext const& browsing_context, StringView origin)
|
||||
{
|
||||
// 1. Assert: browsing context is the current browsing context.
|
||||
|
||||
|
@ -210,7 +210,7 @@ ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_web_elem
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-get-a-known-element
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_known_element(Web::HTML::BrowsingContext const& browsing_context, StringView reference)
|
||||
ErrorOr<GC::Ref<Web::DOM::Element>, Web::WebDriver::Error> get_known_element(Web::HTML::BrowsingContext const& browsing_context, StringView reference)
|
||||
{
|
||||
// 1. If not node reference is known with session, session's current browsing context, and reference return error
|
||||
// with error code no such element.
|
||||
|
@ -366,18 +366,18 @@ bool is_element_non_typeable_form_control(Web::DOM::Element const& element)
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-in-view
|
||||
bool is_element_in_view(ReadonlySpan<JS::NonnullGCPtr<Web::DOM::Element>> paint_tree, Web::DOM::Element& element)
|
||||
bool is_element_in_view(ReadonlySpan<GC::Ref<Web::DOM::Element>> paint_tree, Web::DOM::Element& element)
|
||||
{
|
||||
// An element is in view if it is a member of its own pointer-interactable paint tree, given the pretense that its
|
||||
// pointer events are not disabled.
|
||||
if (!element.paintable() || !element.paintable()->is_visible() || !element.paintable()->visible_for_hit_testing())
|
||||
return false;
|
||||
|
||||
return paint_tree.contains_slow(JS::NonnullGCPtr { element });
|
||||
return paint_tree.contains_slow(GC::Ref { element });
|
||||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-in-view
|
||||
bool is_element_obscured(ReadonlySpan<JS::NonnullGCPtr<Web::DOM::Element>> paint_tree, Web::DOM::Element& element)
|
||||
bool is_element_obscured(ReadonlySpan<GC::Ref<Web::DOM::Element>> paint_tree, Web::DOM::Element& element)
|
||||
{
|
||||
// An element is obscured if the pointer-interactable paint tree at its center point is empty, or the first element
|
||||
// in this tree is not an inclusive descendant of itself.
|
||||
|
@ -385,18 +385,18 @@ bool is_element_obscured(ReadonlySpan<JS::NonnullGCPtr<Web::DOM::Element>> paint
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-pointer-interactable-paint-tree
|
||||
JS::MarkedVector<JS::NonnullGCPtr<Web::DOM::Element>> pointer_interactable_tree(Web::HTML::BrowsingContext& browsing_context, Web::DOM::Element& element)
|
||||
GC::MarkedVector<GC::Ref<Web::DOM::Element>> pointer_interactable_tree(Web::HTML::BrowsingContext& browsing_context, Web::DOM::Element& element)
|
||||
{
|
||||
// 1. If element is not in the same tree as session's current browsing context's active document, return an empty sequence.
|
||||
if (!browsing_context.active_document()->contains(element))
|
||||
return JS::MarkedVector<JS::NonnullGCPtr<Web::DOM::Element>>(browsing_context.heap());
|
||||
return GC::MarkedVector<GC::Ref<Web::DOM::Element>>(browsing_context.heap());
|
||||
|
||||
// 2. Let rectangles be the DOMRect sequence returned by calling getClientRects().
|
||||
auto rectangles = element.get_client_rects();
|
||||
|
||||
// 3. If rectangles has the length of 0, return an empty sequence.
|
||||
if (rectangles->length() == 0)
|
||||
return JS::MarkedVector<JS::NonnullGCPtr<Web::DOM::Element>>(browsing_context.heap());
|
||||
return GC::MarkedVector<GC::Ref<Web::DOM::Element>>(browsing_context.heap());
|
||||
|
||||
// 4. Let center point be the in-view center point of the first indexed element in rectangles.
|
||||
auto viewport = browsing_context.page().top_level_traversable()->viewport_rect();
|
||||
|
@ -452,7 +452,7 @@ bool represents_a_shadow_root(JS::Value value)
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-deserialize-a-shadow-root
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_shadow_root(Web::HTML::BrowsingContext const& browsing_context, JsonObject const& object)
|
||||
ErrorOr<GC::Ref<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_shadow_root(Web::HTML::BrowsingContext const& browsing_context, JsonObject const& object)
|
||||
{
|
||||
// 1. If object has no own property shadow root identifier, return error with error code invalid argument.
|
||||
if (!object.has_string(shadow_root_identifier))
|
||||
|
@ -469,7 +469,7 @@ ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_sh
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-deserialize-a-shadow-root
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_shadow_root(Web::HTML::BrowsingContext const& browsing_context, JS::Object const& object)
|
||||
ErrorOr<GC::Ref<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_shadow_root(Web::HTML::BrowsingContext const& browsing_context, JS::Object const& object)
|
||||
{
|
||||
// 1. If object has no own property shadow root identifier, return error with error code invalid argument.
|
||||
auto property = object.get(shadow_root_identifier);
|
||||
|
@ -487,7 +487,7 @@ ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_sh
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-get-a-known-shadow-root
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, Web::WebDriver::Error> get_known_shadow_root(HTML::BrowsingContext const& browsing_context, StringView reference)
|
||||
ErrorOr<GC::Ref<Web::DOM::ShadowRoot>, Web::WebDriver::Error> get_known_shadow_root(HTML::BrowsingContext const& browsing_context, StringView reference)
|
||||
{
|
||||
// 1. If not node reference is known with session, session's current browsing context, and reference return error with error code no such shadow root.
|
||||
if (!node_reference_is_known(browsing_context, reference))
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
#include <AK/ByteString.h>
|
||||
#include <AK/Error.h>
|
||||
#include <AK/JsonObject.h>
|
||||
#include <LibGC/Ptr.h>
|
||||
#include <LibJS/Forward.h>
|
||||
#include <LibJS/Heap/GCPtr.h>
|
||||
#include <LibJS/Runtime/Value.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
#include <LibWeb/PixelUnits.h>
|
||||
|
@ -18,7 +18,7 @@
|
|||
|
||||
namespace Web::WebDriver {
|
||||
|
||||
JS::GCPtr<Web::DOM::Node> get_node(HTML::BrowsingContext const&, StringView reference);
|
||||
GC::Ptr<Web::DOM::Node> get_node(HTML::BrowsingContext const&, StringView reference);
|
||||
ByteString get_or_create_a_node_reference(HTML::BrowsingContext const&, Web::DOM::Node const&);
|
||||
bool node_reference_is_known(HTML::BrowsingContext const&, StringView reference);
|
||||
|
||||
|
@ -26,11 +26,11 @@ ByteString get_or_create_a_web_element_reference(HTML::BrowsingContext const&, W
|
|||
JsonObject web_element_reference_object(HTML::BrowsingContext const&, Web::DOM::Node const& element);
|
||||
bool represents_a_web_element(JsonValue const&);
|
||||
bool represents_a_web_element(JS::Value);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, WebDriver::Error> deserialize_web_element(Web::HTML::BrowsingContext const&, JsonObject const&);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, WebDriver::Error> deserialize_web_element(Web::HTML::BrowsingContext const&, JS::Object const&);
|
||||
ErrorOr<GC::Ref<Web::DOM::Element>, WebDriver::Error> deserialize_web_element(Web::HTML::BrowsingContext const&, JsonObject const&);
|
||||
ErrorOr<GC::Ref<Web::DOM::Element>, WebDriver::Error> deserialize_web_element(Web::HTML::BrowsingContext const&, JS::Object const&);
|
||||
ByteString extract_web_element_reference(JsonObject const&);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_web_element_origin(Web::HTML::BrowsingContext const&, StringView origin);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_known_element(Web::HTML::BrowsingContext const&, StringView reference);
|
||||
ErrorOr<GC::Ref<Web::DOM::Element>, Web::WebDriver::Error> get_web_element_origin(Web::HTML::BrowsingContext const&, StringView origin);
|
||||
ErrorOr<GC::Ref<Web::DOM::Element>, Web::WebDriver::Error> get_known_element(Web::HTML::BrowsingContext const&, StringView reference);
|
||||
|
||||
bool is_element_stale(Web::DOM::Node const& element);
|
||||
bool is_element_interactable(Web::HTML::BrowsingContext const&, Web::DOM::Element const&);
|
||||
|
@ -42,17 +42,17 @@ bool is_element_mutable(Web::DOM::Element const&);
|
|||
bool is_element_mutable_form_control(Web::DOM::Element const&);
|
||||
bool is_element_non_typeable_form_control(Web::DOM::Element const&);
|
||||
|
||||
bool is_element_in_view(ReadonlySpan<JS::NonnullGCPtr<Web::DOM::Element>> paint_tree, Web::DOM::Element&);
|
||||
bool is_element_obscured(ReadonlySpan<JS::NonnullGCPtr<Web::DOM::Element>> paint_tree, Web::DOM::Element&);
|
||||
JS::MarkedVector<JS::NonnullGCPtr<Web::DOM::Element>> pointer_interactable_tree(Web::HTML::BrowsingContext&, Web::DOM::Element&);
|
||||
bool is_element_in_view(ReadonlySpan<GC::Ref<Web::DOM::Element>> paint_tree, Web::DOM::Element&);
|
||||
bool is_element_obscured(ReadonlySpan<GC::Ref<Web::DOM::Element>> paint_tree, Web::DOM::Element&);
|
||||
GC::MarkedVector<GC::Ref<Web::DOM::Element>> pointer_interactable_tree(Web::HTML::BrowsingContext&, Web::DOM::Element&);
|
||||
|
||||
ByteString get_or_create_a_shadow_root_reference(HTML::BrowsingContext const&, Web::DOM::ShadowRoot const&);
|
||||
JsonObject shadow_root_reference_object(HTML::BrowsingContext const&, Web::DOM::ShadowRoot const&);
|
||||
bool represents_a_shadow_root(JsonValue const&);
|
||||
bool represents_a_shadow_root(JS::Value);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_shadow_root(Web::HTML::BrowsingContext const&, JsonObject const&);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_shadow_root(Web::HTML::BrowsingContext const&, JS::Object const&);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, Web::WebDriver::Error> get_known_shadow_root(HTML::BrowsingContext const&, StringView reference);
|
||||
ErrorOr<GC::Ref<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_shadow_root(Web::HTML::BrowsingContext const&, JsonObject const&);
|
||||
ErrorOr<GC::Ref<Web::DOM::ShadowRoot>, WebDriver::Error> deserialize_shadow_root(Web::HTML::BrowsingContext const&, JS::Object const&);
|
||||
ErrorOr<GC::Ref<Web::DOM::ShadowRoot>, Web::WebDriver::Error> get_known_shadow_root(HTML::BrowsingContext const&, StringView reference);
|
||||
bool is_shadow_root_detached(Web::DOM::ShadowRoot const&);
|
||||
|
||||
String element_rendered_text(DOM::Node&);
|
||||
|
|
|
@ -84,7 +84,7 @@ static JS::ThrowCompletionOr<JS::Value> execute_a_function_body(HTML::BrowsingCo
|
|||
return completion;
|
||||
}
|
||||
|
||||
void execute_script(HTML::BrowsingContext const& browsing_context, ByteString body, JS::MarkedVector<JS::Value> arguments, Optional<u64> const& timeout_ms, JS::NonnullGCPtr<OnScriptComplete> on_complete)
|
||||
void execute_script(HTML::BrowsingContext const& browsing_context, ByteString body, GC::MarkedVector<JS::Value> arguments, Optional<u64> const& timeout_ms, GC::Ref<OnScriptComplete> on_complete)
|
||||
{
|
||||
auto const* document = browsing_context.active_document();
|
||||
auto& realm = document->realm();
|
||||
|
@ -96,7 +96,7 @@ void execute_script(HTML::BrowsingContext const& browsing_context, ByteString bo
|
|||
// 6. If timeout is not null:
|
||||
if (timeout_ms.has_value()) {
|
||||
// 1. Start the timer with timer and timeout.
|
||||
timer->start(timeout_ms.value(), JS::create_heap_function(vm.heap(), [on_complete]() {
|
||||
timer->start(timeout_ms.value(), GC::create_function(vm.heap(), [on_complete]() {
|
||||
on_complete->function()({ .state = JS::Promise::State::Pending });
|
||||
}));
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ void execute_script(HTML::BrowsingContext const& browsing_context, ByteString bo
|
|||
auto promise = WebIDL::create_promise(realm);
|
||||
|
||||
// 8. Run the following substeps in parallel:
|
||||
Platform::EventLoopPlugin::the().deferred_invoke(JS::create_heap_function(realm.heap(), [&realm, &browsing_context, promise, body = move(body), arguments = move(arguments)]() mutable {
|
||||
Platform::EventLoopPlugin::the().deferred_invoke(GC::create_function(realm.heap(), [&realm, &browsing_context, promise, body = move(body), arguments = move(arguments)]() mutable {
|
||||
HTML::TemporaryExecutionContext execution_context { realm };
|
||||
|
||||
// 1. Let scriptPromise be the result of promise-calling execute a function body, with arguments body and arguments.
|
||||
|
@ -127,12 +127,12 @@ void execute_script(HTML::BrowsingContext const& browsing_context, ByteString bo
|
|||
}));
|
||||
|
||||
// 9. Wait until promise is resolved, or timer's timeout fired flag is set, whichever occurs first.
|
||||
auto reaction_steps = JS::create_heap_function(vm.heap(), [promise, timer, on_complete](JS::Value) -> WebIDL::ExceptionOr<JS::Value> {
|
||||
auto reaction_steps = GC::create_function(vm.heap(), [promise, timer, on_complete](JS::Value) -> WebIDL::ExceptionOr<JS::Value> {
|
||||
if (timer->is_timed_out())
|
||||
return JS::js_undefined();
|
||||
timer->stop();
|
||||
|
||||
auto promise_promise = JS::NonnullGCPtr { verify_cast<JS::Promise>(*promise->promise()) };
|
||||
auto promise_promise = GC::Ref { verify_cast<JS::Promise>(*promise->promise()) };
|
||||
on_complete->function()({ promise_promise->state(), promise_promise->result() });
|
||||
|
||||
return JS::js_undefined();
|
||||
|
@ -141,7 +141,7 @@ void execute_script(HTML::BrowsingContext const& browsing_context, ByteString bo
|
|||
WebIDL::react_to_promise(promise, reaction_steps, reaction_steps);
|
||||
}
|
||||
|
||||
void execute_async_script(HTML::BrowsingContext const& browsing_context, ByteString body, JS::MarkedVector<JS::Value> arguments, Optional<u64> const& timeout_ms, JS::NonnullGCPtr<OnScriptComplete> on_complete)
|
||||
void execute_async_script(HTML::BrowsingContext const& browsing_context, ByteString body, GC::MarkedVector<JS::Value> arguments, Optional<u64> const& timeout_ms, GC::Ref<OnScriptComplete> on_complete)
|
||||
{
|
||||
auto const* document = browsing_context.active_document();
|
||||
auto& realm = document->realm();
|
||||
|
@ -153,7 +153,7 @@ void execute_async_script(HTML::BrowsingContext const& browsing_context, ByteStr
|
|||
// 6. If timeout is not null:
|
||||
if (timeout_ms.has_value()) {
|
||||
// 1. Start the timer with timer and timeout.
|
||||
timer->start(timeout_ms.value(), JS::create_heap_function(vm.heap(), [on_complete]() {
|
||||
timer->start(timeout_ms.value(), GC::create_function(vm.heap(), [on_complete]() {
|
||||
on_complete->function()({ .state = JS::Promise::State::Pending });
|
||||
}));
|
||||
}
|
||||
|
@ -163,10 +163,10 @@ void execute_async_script(HTML::BrowsingContext const& browsing_context, ByteStr
|
|||
|
||||
// 7. Let promise be a new Promise.
|
||||
auto promise_capability = WebIDL::create_promise(realm);
|
||||
JS::NonnullGCPtr promise { verify_cast<JS::Promise>(*promise_capability->promise()) };
|
||||
GC::Ref promise { verify_cast<JS::Promise>(*promise_capability->promise()) };
|
||||
|
||||
// 8. Run the following substeps in parallel:
|
||||
Platform::EventLoopPlugin::the().deferred_invoke(JS::create_heap_function(realm.heap(), [&vm, &realm, &browsing_context, timer, promise_capability, promise, body = move(body), arguments = move(arguments)]() mutable {
|
||||
Platform::EventLoopPlugin::the().deferred_invoke(GC::create_function(realm.heap(), [&vm, &realm, &browsing_context, timer, promise_capability, promise, body = move(body), arguments = move(arguments)]() mutable {
|
||||
HTML::TemporaryExecutionContext execution_context { realm };
|
||||
|
||||
// 1. Let resolvingFunctions be CreateResolvingFunctions(promise).
|
||||
|
@ -211,7 +211,7 @@ void execute_async_script(HTML::BrowsingContext const& browsing_context, ByteStr
|
|||
return;
|
||||
auto& script_promise = static_cast<JS::Promise&>(*script_promise_or_error.value());
|
||||
|
||||
vm.custom_data()->spin_event_loop_until(JS::create_heap_function(vm.heap(), [timer, &script_promise]() {
|
||||
vm.custom_data()->spin_event_loop_until(GC::create_function(vm.heap(), [timer, &script_promise]() {
|
||||
return timer->is_timed_out() || script_promise.state() != JS::Promise::State::Pending;
|
||||
}));
|
||||
|
||||
|
@ -225,7 +225,7 @@ void execute_async_script(HTML::BrowsingContext const& browsing_context, ByteStr
|
|||
}));
|
||||
|
||||
// 9. Wait until promise is resolved, or timer's timeout fired flag is set, whichever occurs first.
|
||||
auto reaction_steps = JS::create_heap_function(vm.heap(), [promise, timer, on_complete](JS::Value) -> WebIDL::ExceptionOr<JS::Value> {
|
||||
auto reaction_steps = GC::create_function(vm.heap(), [promise, timer, on_complete](JS::Value) -> WebIDL::ExceptionOr<JS::Value> {
|
||||
if (timer->is_timed_out())
|
||||
return JS::js_undefined();
|
||||
timer->stop();
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Forward.h>
|
||||
#include <LibGC/Function.h>
|
||||
#include <LibJS/Forward.h>
|
||||
#include <LibJS/Heap/HeapFunction.h>
|
||||
#include <LibJS/Runtime/Promise.h>
|
||||
#include <LibJS/Runtime/Value.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
|
@ -21,9 +21,9 @@ struct ExecutionResult {
|
|||
JS::Value value {};
|
||||
};
|
||||
|
||||
using OnScriptComplete = JS::HeapFunction<void(ExecutionResult)>;
|
||||
using OnScriptComplete = GC::Function<void(ExecutionResult)>;
|
||||
|
||||
void execute_script(HTML::BrowsingContext const&, ByteString body, JS::MarkedVector<JS::Value> arguments, Optional<u64> const& timeout_ms, JS::NonnullGCPtr<OnScriptComplete> on_complete);
|
||||
void execute_async_script(HTML::BrowsingContext const&, ByteString body, JS::MarkedVector<JS::Value> arguments, Optional<u64> const& timeout_ms, JS::NonnullGCPtr<OnScriptComplete> on_complete);
|
||||
void execute_script(HTML::BrowsingContext const&, ByteString body, GC::MarkedVector<JS::Value> arguments, Optional<u64> const& timeout_ms, GC::Ref<OnScriptComplete> on_complete);
|
||||
void execute_async_script(HTML::BrowsingContext const&, ByteString body, GC::MarkedVector<JS::Value> arguments, Optional<u64> const& timeout_ms, GC::Ref<OnScriptComplete> on_complete);
|
||||
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
namespace Web::WebDriver {
|
||||
|
||||
JS_DEFINE_ALLOCATOR(HeapTimer);
|
||||
GC_DEFINE_ALLOCATOR(HeapTimer);
|
||||
|
||||
HeapTimer::HeapTimer()
|
||||
: m_timer(Core::Timer::create())
|
||||
|
@ -24,7 +24,7 @@ void HeapTimer::visit_edges(JS::Cell::Visitor& visitor)
|
|||
visitor.visit(m_on_timeout);
|
||||
}
|
||||
|
||||
void HeapTimer::start(u64 timeout_ms, JS::NonnullGCPtr<JS::HeapFunction<void()>> on_timeout)
|
||||
void HeapTimer::start(u64 timeout_ms, GC::Ref<GC::Function<void()>> on_timeout)
|
||||
{
|
||||
m_on_timeout = on_timeout;
|
||||
|
||||
|
|
|
@ -7,21 +7,21 @@
|
|||
#pragma once
|
||||
|
||||
#include <LibCore/Forward.h>
|
||||
#include <LibGC/Function.h>
|
||||
#include <LibGC/Ptr.h>
|
||||
#include <LibJS/Heap/Cell.h>
|
||||
#include <LibJS/Heap/GCPtr.h>
|
||||
#include <LibJS/Heap/HeapFunction.h>
|
||||
|
||||
namespace Web::WebDriver {
|
||||
|
||||
class HeapTimer : public JS::Cell {
|
||||
JS_CELL(HeapTimer, JS::Cell);
|
||||
JS_DECLARE_ALLOCATOR(HeapTimer);
|
||||
GC_CELL(HeapTimer, JS::Cell);
|
||||
GC_DECLARE_ALLOCATOR(HeapTimer);
|
||||
|
||||
public:
|
||||
explicit HeapTimer();
|
||||
virtual ~HeapTimer() override;
|
||||
|
||||
void start(u64 timeout_ms, JS::NonnullGCPtr<JS::HeapFunction<void()>> on_timeout);
|
||||
void start(u64 timeout_ms, GC::Ref<GC::Function<void()>> on_timeout);
|
||||
void stop_and_fire_timeout_handler();
|
||||
void stop();
|
||||
|
||||
|
@ -31,7 +31,7 @@ private:
|
|||
virtual void visit_edges(JS::Cell::Visitor& visitor) override;
|
||||
|
||||
NonnullRefPtr<Core::Timer> m_timer;
|
||||
JS::GCPtr<JS::HeapFunction<void()>> m_on_timeout;
|
||||
GC::Ptr<GC::Function<void()>> m_on_timeout;
|
||||
bool m_timed_out { false };
|
||||
};
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
namespace Web::WebDriver {
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-browsing-context-input-state-map
|
||||
static HashMap<JS::RawGCPtr<HTML::BrowsingContext>, InputState> s_browsing_context_input_state_map;
|
||||
static HashMap<GC::RawPtr<HTML::BrowsingContext>, InputState> s_browsing_context_input_state_map;
|
||||
|
||||
InputState::InputState() = default;
|
||||
InputState::~InputState() = default;
|
||||
|
|
|
@ -40,7 +40,7 @@ namespace Web::WebDriver {
|
|||
_temporary_result.release_value(); \
|
||||
})
|
||||
|
||||
using SeenMap = HashTable<JS::RawGCPtr<JS::Object const>>;
|
||||
using SeenMap = HashTable<GC::RawPtr<JS::Object const>>;
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-collection
|
||||
static bool is_collection(JS::Object const& value)
|
||||
|
@ -253,7 +253,7 @@ static Response internal_json_clone(HTML::BrowsingContext const& browsing_contex
|
|||
// -> has an own property named "toJSON" that is a Function
|
||||
if (auto to_json = object.get_without_side_effects(vm.names.toJSON); to_json.is_function()) {
|
||||
// Return success with the value returned by Function.[[Call]](toJSON) with value as the this value.
|
||||
auto to_json_result = TRY_OR_JS_ERROR(to_json.as_function().internal_call(value, JS::MarkedVector<JS::Value> { vm.heap() }));
|
||||
auto to_json_result = TRY_OR_JS_ERROR(to_json.as_function().internal_call(value, GC::MarkedVector<JS::Value> { vm.heap() }));
|
||||
if (!to_json_result.is_string())
|
||||
return WebDriver::Error::from_code(ErrorCode::JavascriptError, "toJSON did not return a String"sv);
|
||||
|
||||
|
@ -322,7 +322,7 @@ static ErrorOr<JS::Value, WebDriver::Error> internal_json_deserialize(HTML::Brow
|
|||
if (value.is_object()) {
|
||||
// Return clone an object algorithm with session, value and seen, and the JSON deserialize algorithm as the
|
||||
// clone algorithm.
|
||||
return clone_an_object<JS::NonnullGCPtr<JS::Object>>(browsing_context, value.as_object(), seen, internal_json_deserialize);
|
||||
return clone_an_object<GC::Ref<JS::Object>>(browsing_context, value.as_object(), seen, internal_json_deserialize);
|
||||
}
|
||||
|
||||
return WebDriver::Error::from_code(ErrorCode::JavascriptError, "Unrecognized value type"sv);
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
namespace Web::WebDriver {
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-draw-a-bounding-box-from-the-framebuffer
|
||||
ErrorOr<JS::NonnullGCPtr<HTML::HTMLCanvasElement>, WebDriver::Error> draw_bounding_box_from_the_framebuffer(HTML::BrowsingContext& browsing_context, DOM::Element& element, Gfx::IntRect rect)
|
||||
ErrorOr<GC::Ref<HTML::HTMLCanvasElement>, WebDriver::Error> draw_bounding_box_from_the_framebuffer(HTML::BrowsingContext& browsing_context, DOM::Element& element, Gfx::IntRect rect)
|
||||
{
|
||||
// 1. If either the initial viewport's width or height is 0 CSS pixels, return error with error code unable to capture screen.
|
||||
auto viewport_rect = browsing_context.top_level_traversable()->viewport_rect();
|
||||
|
|
|
@ -6,14 +6,14 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <LibGC/Ptr.h>
|
||||
#include <LibGfx/Rect.h>
|
||||
#include <LibJS/Heap/GCPtr.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
#include <LibWeb/WebDriver/Response.h>
|
||||
|
||||
namespace Web::WebDriver {
|
||||
|
||||
ErrorOr<JS::NonnullGCPtr<HTML::HTMLCanvasElement>, WebDriver::Error> draw_bounding_box_from_the_framebuffer(HTML::BrowsingContext&, DOM::Element&, Gfx::IntRect);
|
||||
ErrorOr<GC::Ref<HTML::HTMLCanvasElement>, WebDriver::Error> draw_bounding_box_from_the_framebuffer(HTML::BrowsingContext&, DOM::Element&, Gfx::IntRect);
|
||||
Response encode_canvas_element(HTML::HTMLCanvasElement&);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue