AbortSignal.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/Bindings/AbortSignalWrapper.h>
  7. #include <LibWeb/DOM/AbortSignal.h>
  8. #include <LibWeb/DOM/Document.h>
  9. #include <LibWeb/DOM/EventDispatcher.h>
  10. namespace Web::DOM {
  11. AbortSignal::AbortSignal(Document& document)
  12. : EventTarget(static_cast<Bindings::ScriptExecutionContext&>(document))
  13. {
  14. }
  15. AbortSignal::~AbortSignal()
  16. {
  17. }
  18. bool AbortSignal::dispatch_event(NonnullRefPtr<Event> event)
  19. {
  20. return EventDispatcher::dispatch(*this, event);
  21. }
  22. JS::Object* AbortSignal::create_wrapper(JS::GlobalObject& global_object)
  23. {
  24. return wrap(global_object, *this);
  25. }
  26. // https://dom.spec.whatwg.org/#abortsignal-add
  27. void AbortSignal::add_abort_algorithm(Function<void()> abort_algorithm)
  28. {
  29. if (m_aborted)
  30. return;
  31. m_abort_algorithms.append(move(abort_algorithm));
  32. }
  33. // https://dom.spec.whatwg.org/#abortsignal-signal-abort
  34. void AbortSignal::signal_abort()
  35. {
  36. if (m_aborted)
  37. return;
  38. m_aborted = true;
  39. for (auto& algorithm : m_abort_algorithms)
  40. algorithm();
  41. m_abort_algorithms.clear();
  42. dispatch_event(Event::create(HTML::EventNames::abort));
  43. }
  44. }