mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 11:17:44 +00:00
LibWeb: Implement the start of the Navigation API
This API is how JavaScript can manipulate the new Navigable concepts directly. We are still missing most of the interesting algorithms on Navigation that do the actual navigation steps, and call into the currently WIP navigable AOs.
This commit is contained in:
parent
51c2835044
commit
0c2f758067
9 changed files with 378 additions and 0 deletions
90
Userland/Libraries/LibWeb/HTML/Navigation.h
Normal file
90
Userland/Libraries/LibWeb/HTML/Navigation.h
Normal file
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibJS/Runtime/Promise.h>
|
||||
#include <LibWeb/Bindings/NavigationPrototype.h>
|
||||
#include <LibWeb/DOM/EventTarget.h>
|
||||
|
||||
namespace Web::HTML {
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigationupdatecurrententryoptions
|
||||
struct NavigationUpdateCurrentEntryOptions {
|
||||
JS::Value state;
|
||||
};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigationoptions
|
||||
struct NavigationOptions {
|
||||
JS::Value info;
|
||||
};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigationnavigateoptions
|
||||
struct NavigationNavigateOptions : public NavigationOptions {
|
||||
JS::Value state;
|
||||
Bindings::NavigationHistoryBehavior history = Bindings::NavigationHistoryBehavior::Auto;
|
||||
};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigationreloadoptions
|
||||
struct NavigationReloadOptions : public NavigationOptions {
|
||||
JS::Value state;
|
||||
};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigationresult
|
||||
struct NavigationResult {
|
||||
JS::NonnullGCPtr<JS::Promise> committed;
|
||||
JS::NonnullGCPtr<JS::Promise> finished;
|
||||
};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigation-interface
|
||||
class Navigation : public DOM::EventTarget {
|
||||
WEB_PLATFORM_OBJECT(Navigation, DOM::EventTarget);
|
||||
|
||||
public:
|
||||
[[nodiscard]] static JS::NonnullGCPtr<Navigation> create(JS::Realm&);
|
||||
|
||||
// IDL properties and methods
|
||||
Vector<JS::NonnullGCPtr<NavigationHistoryEntry>> entries() const;
|
||||
JS::GCPtr<NavigationHistoryEntry> current_entry() const;
|
||||
WebIDL::ExceptionOr<void> update_current_entry(NavigationUpdateCurrentEntryOptions);
|
||||
bool can_go_back() const;
|
||||
bool can_go_forward() const;
|
||||
|
||||
// Event Handlers
|
||||
void set_onnavigate(WebIDL::CallbackType*);
|
||||
WebIDL::CallbackType* onnavigate();
|
||||
|
||||
void set_onnavigatesuccess(WebIDL::CallbackType*);
|
||||
WebIDL::CallbackType* onnavigatesuccess();
|
||||
|
||||
void set_onnavigateerror(WebIDL::CallbackType*);
|
||||
WebIDL::CallbackType* onnavigateerror();
|
||||
|
||||
void set_oncurrententrychange(WebIDL::CallbackType*);
|
||||
WebIDL::CallbackType* oncurrententrychange();
|
||||
|
||||
// Abstract Operations
|
||||
bool has_entries_and_events_disabled() const;
|
||||
i64 get_the_navigation_api_entry_index(SessionHistoryEntry const&) const;
|
||||
|
||||
virtual ~Navigation() override;
|
||||
|
||||
private:
|
||||
explicit Navigation(JS::Realm&);
|
||||
|
||||
virtual void initialize(JS::Realm&) override;
|
||||
virtual void visit_edges(Visitor&) override;
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigation-entry-list
|
||||
// Each Navigation has an associated entry list, a list of NavigationHistoryEntry objects, initially empty.
|
||||
Vector<JS::NonnullGCPtr<NavigationHistoryEntry>> m_entry_list;
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigation-current-entry-index
|
||||
// Each Navigation has an associated current entry index, an integer, initially −1.
|
||||
i64 m_current_entry_index { -1 };
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue