mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-06-28 12:10:28 +00:00
Represent WebIDL C++ types with a single CppType model that tracks nullability, optional presence, and contained storage. GC-like values now use GC::Ref/GC::Ptr directly, while containers choose "plain", "Root", or "Conservative" container types depending on what they contain. For example, sequence<Element> becomes a RootVector of GC::Ref values, while sequence<SomeDictionary> becomes a ConservativeVector only when the dictionary contains GC-like values. This moves the generated bindings away from wrapping GC values in GC::Root by default. This has broad fallout as the types passed to interfaces for GC objects changes almost fully across the board.
50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
/*
|
||
* Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
|
||
*
|
||
* SPDX-License-Identifier: BSD-2-Clause
|
||
*/
|
||
|
||
#include <LibWeb/Bindings/AbortController.h>
|
||
#include <LibWeb/Bindings/Intrinsics.h>
|
||
#include <LibWeb/DOM/AbortController.h>
|
||
#include <LibWeb/DOM/AbortSignal.h>
|
||
|
||
namespace Web::DOM {
|
||
|
||
GC_DEFINE_ALLOCATOR(AbortController);
|
||
|
||
WebIDL::ExceptionOr<GC::Ref<AbortController>> AbortController::construct_impl(JS::Realm& realm)
|
||
{
|
||
auto signal = TRY(AbortSignal::construct_impl(realm));
|
||
return realm.create<AbortController>(realm, move(signal));
|
||
}
|
||
|
||
// https://dom.spec.whatwg.org/#dom-abortcontroller-abortcontroller
|
||
AbortController::AbortController(JS::Realm& realm, GC::Ref<AbortSignal> signal)
|
||
: PlatformObject(realm)
|
||
, m_signal(move(signal))
|
||
{
|
||
}
|
||
|
||
AbortController::~AbortController() = default;
|
||
|
||
void AbortController::initialize(JS::Realm& realm)
|
||
{
|
||
WEB_SET_PROTOTYPE_FOR_INTERFACE(AbortController);
|
||
Base::initialize(realm);
|
||
}
|
||
|
||
void AbortController::visit_edges(Cell::Visitor& visitor)
|
||
{
|
||
Base::visit_edges(visitor);
|
||
visitor.visit(m_signal);
|
||
}
|
||
|
||
// https://dom.spec.whatwg.org/#dom-abortcontroller-abort
|
||
void AbortController::abort(Optional<JS::Value> reason)
|
||
{
|
||
// The abort(reason) method steps are to signal abort on this’s signal with reason if it is given.
|
||
m_signal->signal_abort(reason.value_or(JS::js_undefined()));
|
||
}
|
||
|
||
}
|