mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-04-18 18:00:31 +00:00
By making use of the WEB_PLATFORM_OBJECT macro we can remove the boilerplate of needing to add this override for every serializable platform object so that we can check whether they are exposed or not.
40 lines
1,021 B
C++
40 lines
1,021 B
C++
/*
|
|
* Copyright (c) 2024, the Ladybird developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Forward.h>
|
|
#include <LibWeb/DOM/EventTarget.h>
|
|
|
|
namespace Web::HTML {
|
|
|
|
// https://html.spec.whatwg.org/multipage/interaction.html#close-watcher-manager
|
|
class CloseWatcherManager final : public Bindings::PlatformObject {
|
|
WEB_NON_IDL_PLATFORM_OBJECT(CloseWatcherManager, Bindings::PlatformObject);
|
|
GC_DECLARE_ALLOCATOR(CloseWatcherManager);
|
|
|
|
public:
|
|
[[nodiscard]] static GC::Ref<CloseWatcherManager> create(JS::Realm&);
|
|
|
|
void add(GC::Ref<CloseWatcher>);
|
|
void remove(CloseWatcher const&);
|
|
|
|
bool process_close_watchers();
|
|
|
|
void notify_about_user_activation();
|
|
bool can_prevent_close();
|
|
|
|
private:
|
|
explicit CloseWatcherManager(JS::Realm&);
|
|
|
|
virtual void visit_edges(Cell::Visitor&) override;
|
|
|
|
Vector<Vector<GC::Ref<CloseWatcher>>> m_groups;
|
|
uint32_t m_allowed_number_of_groups { 1 };
|
|
bool m_next_user_interaction_allows_a_new_group { true };
|
|
};
|
|
|
|
}
|