mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-28 11:49:44 +00:00
LibWeb: Implement CloseWatcher API
This implements most of the CloseWatcher API from the html spec. AbortSignal support is unimplemented. Integration with dialogs and popovers is also unimplemented.
This commit is contained in:
parent
527632f416
commit
b216046234
Notes:
sideshowbarker
2024-07-17 07:31:31 +09:00
Author: https://github.com/lukewarlow
Commit: b216046234
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/240
Reviewed-by: https://github.com/awesomekling
15 changed files with 432 additions and 3 deletions
49
Userland/Libraries/LibWeb/HTML/CloseWatcher.h
Normal file
49
Userland/Libraries/LibWeb/HTML/CloseWatcher.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* 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#closewatcheroptions
|
||||
struct CloseWatcherOptions {
|
||||
JS::GCPtr<DOM::AbortSignal> signal;
|
||||
};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/interaction.html#the-closewatcher-interface
|
||||
class CloseWatcher final : public DOM::EventTarget {
|
||||
WEB_PLATFORM_OBJECT(CloseWatcher, DOM::EventTarget);
|
||||
JS_DECLARE_ALLOCATOR(CloseWatcher);
|
||||
|
||||
public:
|
||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<CloseWatcher>> construct_impl(JS::Realm&, CloseWatcherOptions const& = {});
|
||||
|
||||
bool request_close();
|
||||
void close();
|
||||
void destroy();
|
||||
|
||||
virtual ~CloseWatcher() override = default;
|
||||
|
||||
void set_oncancel(WebIDL::CallbackType*);
|
||||
WebIDL::CallbackType* oncancel();
|
||||
|
||||
void set_onclose(WebIDL::CallbackType*);
|
||||
WebIDL::CallbackType* onclose();
|
||||
|
||||
private:
|
||||
CloseWatcher(JS::Realm&);
|
||||
[[nodiscard]] static JS::NonnullGCPtr<CloseWatcher> establish(HTML::Window&);
|
||||
|
||||
virtual void initialize(JS::Realm&) override;
|
||||
|
||||
bool m_is_running_cancel_action { false };
|
||||
bool m_is_active { true };
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue