/* * Copyright (c) 2021, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include namespace Web::DOM { WebIDL::ExceptionOr> AbortController::construct_impl(JS::Realm& realm) { auto signal = TRY(AbortSignal::construct_impl(realm)); return MUST_OR_THROW_OOM(realm.heap().allocate(realm, realm, move(signal))); } // https://dom.spec.whatwg.org/#dom-abortcontroller-abortcontroller AbortController::AbortController(JS::Realm& realm, JS::NonnullGCPtr signal) : PlatformObject(realm) , m_signal(move(signal)) { } AbortController::~AbortController() = default; JS::ThrowCompletionOr AbortController::initialize(JS::Realm& realm) { MUST_OR_THROW_OOM(Base::initialize(realm)); set_prototype(&Bindings::ensure_web_prototype(realm, "AbortController")); return {}; } void AbortController::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_signal.ptr()); } // https://dom.spec.whatwg.org/#dom-abortcontroller-abort void AbortController::abort(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); } }