CloseWatcherManager.h 1013 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * Copyright (c) 2024, the Ladybird developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Forward.h>
  8. #include <LibWeb/DOM/EventTarget.h>
  9. namespace Web::HTML {
  10. // https://html.spec.whatwg.org/multipage/interaction.html#close-watcher-manager
  11. class CloseWatcherManager final : public Bindings::PlatformObject {
  12. WEB_PLATFORM_OBJECT(CloseWatcherManager, Bindings::PlatformObject);
  13. GC_DECLARE_ALLOCATOR(CloseWatcherManager);
  14. public:
  15. [[nodiscard]] static GC::Ref<CloseWatcherManager> create(JS::Realm&);
  16. void add(GC::Ref<CloseWatcher>);
  17. void remove(CloseWatcher const&);
  18. bool process_close_watchers();
  19. void notify_about_user_activation();
  20. bool can_prevent_close();
  21. private:
  22. explicit CloseWatcherManager(JS::Realm&);
  23. virtual void visit_edges(Cell::Visitor&) override;
  24. Vector<Vector<GC::Ref<CloseWatcher>>> m_groups;
  25. uint32_t m_allowed_number_of_groups { 1 };
  26. bool m_next_user_interaction_allows_a_new_group { true };
  27. };
  28. }