LibWeb: Implement "activate history entry" for navigables

This commit is contained in:
Aliaksandr Kalenik 2023-04-06 23:33:21 +03:00 committed by Andreas Kling
parent 0285a363e2
commit 09cb266cb8
Notes: sideshowbarker 2024-07-16 20:08:14 +09:00
2 changed files with 29 additions and 0 deletions

View File

@ -115,6 +115,33 @@ JS::GCPtr<SessionHistoryEntry> Navigable::get_the_target_history_entry(int targe
return result;
}
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#activate-history-entry
void Navigable::activate_history_entry(JS::GCPtr<SessionHistoryEntry> entry)
{
// FIXME: 1. Save persisted state to the navigable's active session history entry.
// 2. Let newDocument be entry's document.
JS::GCPtr<DOM::Document> new_document = entry->document_state->document().ptr();
// 3. Assert: newDocument's is initial about:blank is false, i.e., we never traverse
// back to the initial about:blank Document because it always gets replaced when we
// navigate away from it.
VERIFY(!new_document->is_initial_about_blank());
// 4. Set navigable's active session history entry to entry.
m_active_session_history_entry = entry;
// 5. Make active newDocument.
new_document->make_active();
// Not in the spec:
if (is<TraversableNavigable>(*this) && parent() == nullptr) {
if (auto* page = active_browsing_context()->page()) {
page->client().page_did_start_loading(entry->url, false);
}
}
}
// https://html.spec.whatwg.org/multipage/document-sequences.html#nav-document
JS::GCPtr<DOM::Document> Navigable::active_document()
{

View File

@ -46,6 +46,8 @@ public:
Vector<JS::NonnullGCPtr<SessionHistoryEntry>>& get_session_history_entries() const;
void activate_history_entry(JS::GCPtr<SessionHistoryEntry>);
JS::GCPtr<DOM::Document> active_document();
JS::GCPtr<BrowsingContext> active_browsing_context();
JS::GCPtr<WindowProxy> active_window_proxy();