From 6856634ebcabc54ee4cc98b5990527f5227cd1ca Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Wed, 23 Aug 2023 10:26:47 -0600 Subject: [PATCH] LibWeb: Add fields to SessionHistoryEntry required by Navigation API --- .../LibWeb/HTML/SessionHistoryEntry.cpp | 9 +++++++++ .../LibWeb/HTML/SessionHistoryEntry.h | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/SessionHistoryEntry.cpp b/Userland/Libraries/LibWeb/HTML/SessionHistoryEntry.cpp index 846927ce1b..f5b4fc9440 100644 --- a/Userland/Libraries/LibWeb/HTML/SessionHistoryEntry.cpp +++ b/Userland/Libraries/LibWeb/HTML/SessionHistoryEntry.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -17,4 +18,12 @@ void SessionHistoryEntry::visit_edges(Cell::Visitor& visitor) visitor.visit(original_source_browsing_context); } +SessionHistoryEntry::SessionHistoryEntry() + : classic_history_api_state(MUST(structured_serialize_for_storage(vm(), JS::js_null()))) + , navigation_api_state(MUST(structured_serialize_for_storage(vm(), JS::js_undefined()))) + , navigation_api_key(MUST(Crypto::generate_random_uuid())) + , navigation_api_id(MUST(Crypto::generate_random_uuid())) +{ +} + } diff --git a/Userland/Libraries/LibWeb/HTML/SessionHistoryEntry.h b/Userland/Libraries/LibWeb/HTML/SessionHistoryEntry.h index 8ef65a8628..d12157a23f 100644 --- a/Userland/Libraries/LibWeb/HTML/SessionHistoryEntry.h +++ b/Userland/Libraries/LibWeb/HTML/SessionHistoryEntry.h @@ -12,6 +12,7 @@ #include #include #include +#include namespace Web::HTML { @@ -30,6 +31,8 @@ enum class ScrollRestorationMode { struct SessionHistoryEntry final : public JS::Cell { JS_CELL(SessionHistoryEntry, JS::Cell); + SessionHistoryEntry(); + void visit_edges(Cell::Visitor&) override; enum class Pending { @@ -50,6 +53,22 @@ struct SessionHistoryEntry final : public JS::Cell { // https://html.spec.whatwg.org/multipage/browsing-the-web.html#she-document-state JS::GCPtr document_state; + // https://html.spec.whatwg.org/multipage/browsing-the-web.html#she-classic-history-api-state + // classic history API state, which is serialized state, initially StructuredSerializeForStorage(null). + SerializationRecord classic_history_api_state; + + // https://html.spec.whatwg.org/multipage/browsing-the-web.html#she-navigation-api-state + // navigation API state, which is a serialized state, initially StructuredSerializeForStorage(undefined). + SerializationRecord navigation_api_state; + + // https://html.spec.whatwg.org/multipage/browsing-the-web.html#she-navigation-api-key + // navigation API key, which is a string, initially set to the result of generating a random UUID. + String navigation_api_key; + + // https://html.spec.whatwg.org/multipage/browsing-the-web.html#she-navigation-api-id + // navigation API ID, which is a string, initially set to the result of generating a random UUID. + String navigation_api_id; + // https://html.spec.whatwg.org/multipage/browsing-the-web.html#she-scroll-restoration-mode // scroll restoration mode, a scroll restoration mode, initially "auto" ScrollRestorationMode scroll_restoration_mode { ScrollRestorationMode::Auto };