1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-08 05:27:14 +09:00
ladybird/Libraries/LibWeb/HTML/History.h
Sam Atkins 141f6cb392 LibWeb/HTML: Use relevant global object's document in History
Corresponds to dba6e7b6c2
and 4c0401186c

The spec algorithms now use "the relevant global object's associated
document", so remove the concept of the History object itself having an
associated document. The spec has also combined the implementations for
forward/back/go so I've matched that too.
2025-04-18 10:49:56 +02:00

57 lines
1.9 KiB
C++

/*
* Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
* Copyright (c) 2022, Andreas Kling <andreas@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/Bindings/HistoryPrototype.h>
#include <LibWeb/Bindings/PlatformObject.h>
#include <LibWeb/HTML/HistoryHandlingBehavior.h>
#include <LibWeb/WebIDL/ExceptionOr.h>
#include <LibWeb/WebIDL/Types.h>
namespace Web::HTML {
class History final : public Bindings::PlatformObject {
WEB_PLATFORM_OBJECT(History, Bindings::PlatformObject);
GC_DECLARE_ALLOCATOR(History);
public:
[[nodiscard]] static GC::Ref<History> create(JS::Realm&);
virtual ~History() override;
WebIDL::ExceptionOr<void> push_state(JS::Value data, String const& unused, Optional<String> const& url = {});
WebIDL::ExceptionOr<void> replace_state(JS::Value data, String const& unused, Optional<String> const& url = {});
WebIDL::ExceptionOr<void> go(WebIDL::Long delta);
WebIDL::ExceptionOr<void> back();
WebIDL::ExceptionOr<void> forward();
WebIDL::ExceptionOr<u64> length() const;
WebIDL::ExceptionOr<Bindings::ScrollRestoration> scroll_restoration() const;
WebIDL::ExceptionOr<void> set_scroll_restoration(Bindings::ScrollRestoration);
WebIDL::ExceptionOr<JS::Value> state() const;
u64 m_index { 0 };
u64 m_length { 0 };
JS::Value unsafe_state() const;
void set_state(JS::Value s) { m_state = s; }
private:
History(JS::Realm&);
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
WebIDL::ExceptionOr<void> delta_traverse(WebIDL::Long delta);
WebIDL::ExceptionOr<void> shared_history_push_replace_state(JS::Value data, Optional<String> const& url, HistoryHandlingBehavior);
JS::Value m_state { JS::js_null() };
};
bool can_have_its_url_rewritten(DOM::Document const& document, URL::URL const& target_url);
}