mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-04-19 02:10:26 +00:00
WebContent process keeps session history entries for pages we have navigated away from. Before this change, those entries could prevent GC objects (e.g. PolicyContainer and its CSP PolicyList) from being collected, since the GC-allocated SHE/DocumentState held live GC::Ref pointers into the heap. By making both classes RefCounted and storing SerializedPolicyContainer instead of a live PolicyContainer, history entries no longer keep alive any GC objects. This eliminates the leak and is also a step toward moving the session history entry tree to the UI process.
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
/*
|
|
* Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibWeb/DOM/EventTarget.h>
|
|
|
|
namespace Web::HTML {
|
|
|
|
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigationhistoryentry
|
|
class NavigationHistoryEntry : public DOM::EventTarget {
|
|
WEB_PLATFORM_OBJECT(NavigationHistoryEntry, DOM::EventTarget);
|
|
GC_DECLARE_ALLOCATOR(NavigationHistoryEntry);
|
|
|
|
public:
|
|
[[nodiscard]] static GC::Ref<NavigationHistoryEntry> create(JS::Realm&, NonnullRefPtr<SessionHistoryEntry>);
|
|
|
|
Optional<String> url() const;
|
|
String key() const;
|
|
String id() const;
|
|
i64 index() const;
|
|
bool same_document() const;
|
|
WebIDL::ExceptionOr<JS::Value> get_state();
|
|
|
|
void set_ondispose(WebIDL::CallbackType*);
|
|
WebIDL::CallbackType* ondispose();
|
|
|
|
// Non-spec'd getter, not exposed to JS
|
|
SessionHistoryEntry const& session_history_entry() const { return *m_session_history_entry; }
|
|
SessionHistoryEntry& session_history_entry() { return *m_session_history_entry; }
|
|
|
|
virtual ~NavigationHistoryEntry() override;
|
|
|
|
private:
|
|
NavigationHistoryEntry(JS::Realm&, NonnullRefPtr<SessionHistoryEntry>);
|
|
|
|
virtual void initialize(JS::Realm&) override;
|
|
|
|
NonnullRefPtr<SessionHistoryEntry> m_session_history_entry;
|
|
};
|
|
|
|
}
|