Serenity Operating System
1/*
2 * Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <LibWeb/Bindings/Intrinsics.h>
8#include <LibWeb/DOM/AbortController.h>
9#include <LibWeb/DOM/AbortSignal.h>
10
11namespace Web::DOM {
12
13WebIDL::ExceptionOr<JS::NonnullGCPtr<AbortController>> AbortController::construct_impl(JS::Realm& realm)
14{
15 auto signal = TRY(AbortSignal::construct_impl(realm));
16 return MUST_OR_THROW_OOM(realm.heap().allocate<AbortController>(realm, realm, move(signal)));
17}
18
19// https://dom.spec.whatwg.org/#dom-abortcontroller-abortcontroller
20AbortController::AbortController(JS::Realm& realm, JS::NonnullGCPtr<AbortSignal> signal)
21 : PlatformObject(realm)
22 , m_signal(move(signal))
23{
24}
25
26AbortController::~AbortController() = default;
27
28JS::ThrowCompletionOr<void> AbortController::initialize(JS::Realm& realm)
29{
30 MUST_OR_THROW_OOM(Base::initialize(realm));
31 set_prototype(&Bindings::ensure_web_prototype<Bindings::AbortControllerPrototype>(realm, "AbortController"));
32
33 return {};
34}
35
36void AbortController::visit_edges(Cell::Visitor& visitor)
37{
38 Base::visit_edges(visitor);
39 visitor.visit(m_signal.ptr());
40}
41
42// https://dom.spec.whatwg.org/#dom-abortcontroller-abort
43void AbortController::abort(JS::Value reason)
44{
45 // The abort(reason) method steps are to signal abort on this’s signal with reason if it is given.
46 m_signal->signal_abort(reason);
47}
48
49}