mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 04:09:13 +00:00
LibWeb: Move consume history-action user activation to Window
This commit is contained in:
parent
9c6ebe21d2
commit
45860e3878
Notes:
sideshowbarker
2024-07-17 00:25:35 +09:00
Author: https://github.com/ADKaster
Commit: 45860e3878
Pull-request: https://github.com/SerenityOS/serenity/pull/24478
Reviewed-by: https://github.com/jamierocks
4 changed files with 29 additions and 26 deletions
|
@ -909,29 +909,6 @@ void Navigation::notify_about_the_committed_to_entry(JS::NonnullGCPtr<Navigation
|
||||||
WebIDL::resolve_promise(realm, api_method_tracker->committed_promise, nhe);
|
WebIDL::resolve_promise(realm, api_method_tracker->committed_promise, nhe);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/interaction.html#consume-history-action-user-activation
|
|
||||||
void Navigation::consume_history_action_user_activation(Window& w)
|
|
||||||
{
|
|
||||||
// 1. If W's navigable is null, then return.
|
|
||||||
if (!w.navigable())
|
|
||||||
return;
|
|
||||||
|
|
||||||
// 2. Let top be W's navigable's top-level traversable.
|
|
||||||
auto top = w.navigable()->top_level_traversable();
|
|
||||||
|
|
||||||
// 3. Let navigables be the inclusive descendant navigables of top's active document.
|
|
||||||
auto navigables = top->active_document()->inclusive_descendant_navigables();
|
|
||||||
|
|
||||||
// 4. Let windows be the list of Window objects constructed by taking the active window of each item in navigables.
|
|
||||||
Vector<JS::GCPtr<Window>> windows;
|
|
||||||
for (auto& navigable : navigables)
|
|
||||||
windows.append(navigable->active_window());
|
|
||||||
|
|
||||||
// 5. For each window in windows, set window's last history-action activation timestamp to window's last activation timestamp.
|
|
||||||
for (auto& window : windows)
|
|
||||||
window->set_last_history_action_activation_timestamp(window->last_activation_timestamp());
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#inner-navigate-event-firing-algorithm
|
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#inner-navigate-event-firing-algorithm
|
||||||
bool Navigation::inner_navigate_event_firing_algorithm(
|
bool Navigation::inner_navigate_event_firing_algorithm(
|
||||||
Bindings::NavigationType navigation_type,
|
Bindings::NavigationType navigation_type,
|
||||||
|
@ -1093,9 +1070,9 @@ bool Navigation::inner_navigate_event_firing_algorithm(
|
||||||
|
|
||||||
// 29. If dispatchResult is false:
|
// 29. If dispatchResult is false:
|
||||||
if (!dispatch_result) {
|
if (!dispatch_result) {
|
||||||
// 1. If navigationType is "traverse", then consume history-action user activation.
|
// 1. If navigationType is "traverse", then consume history-action user activation given navigation's relevant global object.
|
||||||
if (navigation_type == Bindings::NavigationType::Traverse)
|
if (navigation_type == Bindings::NavigationType::Traverse)
|
||||||
consume_history_action_user_activation(relevant_global_object);
|
relevant_global_object.consume_history_action_user_activation();
|
||||||
|
|
||||||
// 2. If event's abort controller's signal is not aborted, then abort the ongoing navigation given navigation.
|
// 2. If event's abort controller's signal is not aborted, then abort the ongoing navigation given navigation.
|
||||||
if (!event->abort_controller()->signal()->aborted())
|
if (!event->abort_controller()->signal()->aborted())
|
||||||
|
|
|
@ -150,7 +150,6 @@ private:
|
||||||
void reject_the_finished_promise(JS::NonnullGCPtr<NavigationAPIMethodTracker>, JS::Value exception);
|
void reject_the_finished_promise(JS::NonnullGCPtr<NavigationAPIMethodTracker>, JS::Value exception);
|
||||||
void clean_up(JS::NonnullGCPtr<NavigationAPIMethodTracker>);
|
void clean_up(JS::NonnullGCPtr<NavigationAPIMethodTracker>);
|
||||||
void notify_about_the_committed_to_entry(JS::NonnullGCPtr<NavigationAPIMethodTracker>, JS::NonnullGCPtr<NavigationHistoryEntry>);
|
void notify_about_the_committed_to_entry(JS::NonnullGCPtr<NavigationAPIMethodTracker>, JS::NonnullGCPtr<NavigationHistoryEntry>);
|
||||||
void consume_history_action_user_activation(Window& window);
|
|
||||||
|
|
||||||
bool inner_navigate_event_firing_algorithm(
|
bool inner_navigate_event_firing_algorithm(
|
||||||
Bindings::NavigationType,
|
Bindings::NavigationType,
|
||||||
|
|
|
@ -638,6 +638,31 @@ bool Window::has_history_action_activation() const
|
||||||
return m_last_history_action_activation_timestamp != m_last_activation_timestamp;
|
return m_last_history_action_activation_timestamp != m_last_activation_timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/interaction.html#consume-history-action-user-activation
|
||||||
|
void Window::consume_history_action_user_activation()
|
||||||
|
{
|
||||||
|
auto navigable = this->navigable();
|
||||||
|
|
||||||
|
// 1. If W's navigable is null, then return.
|
||||||
|
if (navigable == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// 2. Let top be W's navigable's top-level traversable.
|
||||||
|
auto top = navigable->top_level_traversable();
|
||||||
|
|
||||||
|
// 3. Let navigables be the inclusive descendant navigables of top's active document.
|
||||||
|
auto navigables = top->active_document()->inclusive_descendant_navigables();
|
||||||
|
|
||||||
|
// 4. Let windows be the list of Window objects constructed by taking the active window of each item in navigables.
|
||||||
|
JS::MarkedVector<JS::GCPtr<Window>> windows(heap());
|
||||||
|
for (auto& n : navigables)
|
||||||
|
windows.append(n->active_window());
|
||||||
|
|
||||||
|
// 5. For each window in windows, set window's last history-action activation timestamp to window's last activation timestamp.
|
||||||
|
for (auto& window : windows)
|
||||||
|
window->set_last_history_action_activation_timestamp(window->last_activation_timestamp());
|
||||||
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/requestidlecallback/#start-an-idle-period-algorithm
|
// https://w3c.github.io/requestidlecallback/#start-an-idle-period-algorithm
|
||||||
void Window::start_an_idle_period()
|
void Window::start_an_idle_period()
|
||||||
{
|
{
|
||||||
|
|
|
@ -220,6 +220,8 @@ public:
|
||||||
HighResolutionTime::DOMHighResTimeStamp last_history_action_activation_timestamp() const { return m_last_history_action_activation_timestamp; }
|
HighResolutionTime::DOMHighResTimeStamp last_history_action_activation_timestamp() const { return m_last_history_action_activation_timestamp; }
|
||||||
void set_last_history_action_activation_timestamp(HighResolutionTime::DOMHighResTimeStamp timestamp) { m_last_history_action_activation_timestamp = timestamp; }
|
void set_last_history_action_activation_timestamp(HighResolutionTime::DOMHighResTimeStamp timestamp) { m_last_history_action_activation_timestamp = timestamp; }
|
||||||
|
|
||||||
|
void consume_history_action_user_activation();
|
||||||
|
|
||||||
static void set_inspector_object_exposed(bool);
|
static void set_inspector_object_exposed(bool);
|
||||||
static void set_internals_object_exposed(bool);
|
static void set_internals_object_exposed(bool);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue