mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:17:36 +00:00
LibWeb: Use struct to pass Navigable::navigate() params
Using structs makes the navigate() calls looks cleaner. No change in behavior is intended.
This commit is contained in:
parent
3e86f88d6a
commit
44f7d7406c
12 changed files with 56 additions and 34 deletions
|
@ -3492,7 +3492,7 @@ void Document::shared_declarative_refresh_steps(StringView input, JS::GCPtr<HTML
|
||||||
return;
|
return;
|
||||||
|
|
||||||
VERIFY(navigable());
|
VERIFY(navigable());
|
||||||
MUST(navigable()->navigate(url_record, *this));
|
MUST(navigable()->navigate({ .url = url_record, .source_document = *this }));
|
||||||
}).release_value_but_fixme_should_propagate_errors();
|
}).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
// For the purposes of the previous paragraph, a refresh is said to have come due as soon as the later of the
|
// For the purposes of the previous paragraph, a refresh is said to have come due as soon as the later of the
|
||||||
|
|
|
@ -799,7 +799,13 @@ void HTMLFormElement::plan_to_navigate_to(AK::URL url, Variant<Empty, String, PO
|
||||||
|
|
||||||
// 2. Navigate targetNavigable to url using the form element's node document, with historyHandling set to historyHandling,
|
// 2. Navigate targetNavigable to url using the form element's node document, with historyHandling set to historyHandling,
|
||||||
// referrerPolicy set to referrerPolicy, documentResource set to postResource, and cspNavigationType set to "form-submission".
|
// referrerPolicy set to referrerPolicy, documentResource set to postResource, and cspNavigationType set to "form-submission".
|
||||||
MUST(target_navigable->navigate(url, this->document(), post_resource, nullptr, false, to_navigation_history_behavior(history_handling), {}, {}, referrer_policy));
|
MUST(target_navigable->navigate({ .url = url,
|
||||||
|
.source_document = this->document(),
|
||||||
|
.document_resource = post_resource,
|
||||||
|
.response = nullptr,
|
||||||
|
.exceptions_enabled = false,
|
||||||
|
.history_handling = to_navigation_history_behavior(history_handling),
|
||||||
|
.referrer_policy = referrer_policy }));
|
||||||
});
|
});
|
||||||
|
|
||||||
// 5. Set the form's planned navigation to the just-queued task.
|
// 5. Set the form's planned navigation to the just-queued task.
|
||||||
|
|
|
@ -519,7 +519,7 @@ void HTMLHyperlinkElementUtils::follow_the_hyperlink(Optional<DeprecatedString>
|
||||||
// FIXME: 12. If subject's link types includes the noreferrer keyword, then set referrerPolicy to "no-referrer".
|
// FIXME: 12. If subject's link types includes the noreferrer keyword, then set referrerPolicy to "no-referrer".
|
||||||
|
|
||||||
// 13. Navigate targetNavigable to url using subject's node document, with referrerPolicy set to referrerPolicy.
|
// 13. Navigate targetNavigable to url using subject's node document, with referrerPolicy set to referrerPolicy.
|
||||||
MUST(target_navigable->navigate(url, hyperlink_element_utils_document()));
|
MUST(target_navigable->navigate({ .url = url, .source_document = hyperlink_element_utils_document() }));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -258,7 +258,9 @@ void HTMLObjectElement::run_object_representation_handler_steps(Optional<Depreca
|
||||||
|
|
||||||
// If the URL of the given resource does not match about:blank, then navigate the element's nested browsing context to that resource, with historyHandling set to "replace" and the source browsing context set to the object element's node document's browsing context. (The data attribute of the object element doesn't get updated if the browsing context gets further navigated to other locations.)
|
// If the URL of the given resource does not match about:blank, then navigate the element's nested browsing context to that resource, with historyHandling set to "replace" and the source browsing context set to the object element's node document's browsing context. (The data attribute of the object element doesn't get updated if the browsing context gets further navigated to other locations.)
|
||||||
if (auto const& url = resource()->url(); url != "about:blank"sv)
|
if (auto const& url = resource()->url(); url != "about:blank"sv)
|
||||||
MUST(m_content_navigable->navigate(url, document(), Empty {}, nullptr, false, Bindings::NavigationHistoryBehavior::Replace));
|
MUST(m_content_navigable->navigate({ .url = url,
|
||||||
|
.source_document = document(),
|
||||||
|
.history_handling = Bindings::NavigationHistoryBehavior::Replace }));
|
||||||
|
|
||||||
// The object element represents its nested browsing context.
|
// The object element represents its nested browsing context.
|
||||||
run_object_representation_completed_steps(Representation::NestedBrowsingContext);
|
run_object_representation_completed_steps(Representation::NestedBrowsingContext);
|
||||||
|
|
|
@ -86,7 +86,10 @@ WebIDL::ExceptionOr<void> Location::navigate(AK::URL url, HistoryHandlingBehavio
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Navigate navigable to url using sourceDocument, with exceptionsEnabled set to true and historyHandling set to historyHandling.
|
// 4. Navigate navigable to url using sourceDocument, with exceptionsEnabled set to true and historyHandling set to historyHandling.
|
||||||
TRY(navigable->navigate(url, source_document, {}, nullptr, true, to_navigation_history_behavior(history_handling)));
|
TRY(navigable->navigate({ .url = url,
|
||||||
|
.source_document = source_document,
|
||||||
|
.exceptions_enabled = true,
|
||||||
|
.history_handling = to_navigation_history_behavior(history_handling) }));
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1075,18 +1075,18 @@ WebIDL::ExceptionOr<void> Navigable::populate_session_history_entry_document(
|
||||||
// and an optional user navigation involvement userInvolvement (default "none"):
|
// and an optional user navigation involvement userInvolvement (default "none"):
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate
|
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate
|
||||||
WebIDL::ExceptionOr<void> Navigable::navigate(
|
WebIDL::ExceptionOr<void> Navigable::navigate(NavigateParams params)
|
||||||
AK::URL const& url,
|
|
||||||
JS::NonnullGCPtr<DOM::Document> source_document,
|
|
||||||
Variant<Empty, String, POSTResource> document_resource,
|
|
||||||
JS::GCPtr<Fetch::Infrastructure::Response> response,
|
|
||||||
bool exceptions_enabled,
|
|
||||||
Bindings::NavigationHistoryBehavior history_handling,
|
|
||||||
Optional<SerializationRecord> navigation_api_state,
|
|
||||||
Optional<Vector<XHR::FormDataEntry>&> form_data_entry_list,
|
|
||||||
ReferrerPolicy::ReferrerPolicy referrer_policy,
|
|
||||||
UserNavigationInvolvement user_involvement)
|
|
||||||
{
|
{
|
||||||
|
auto const& url = params.url;
|
||||||
|
auto source_document = params.source_document;
|
||||||
|
auto const& document_resource = params.document_resource;
|
||||||
|
auto response = params.response;
|
||||||
|
auto exceptions_enabled = params.exceptions_enabled;
|
||||||
|
auto history_handling = params.history_handling;
|
||||||
|
auto const& navigation_api_state = params.navigation_api_state;
|
||||||
|
auto const& form_data_entry_list = params.form_data_entry_list;
|
||||||
|
auto referrer_policy = params.referrer_policy;
|
||||||
|
auto user_involvement = params.user_involvement;
|
||||||
auto& active_document = *this->active_document();
|
auto& active_document = *this->active_document();
|
||||||
auto& realm = active_document.realm();
|
auto& realm = active_document.realm();
|
||||||
auto& vm = this->vm();
|
auto& vm = this->vm();
|
||||||
|
|
|
@ -122,17 +122,20 @@ public:
|
||||||
bool allow_POST = false,
|
bool allow_POST = false,
|
||||||
Function<void()> completion_steps = [] {});
|
Function<void()> completion_steps = [] {});
|
||||||
|
|
||||||
WebIDL::ExceptionOr<void> navigate(
|
struct NavigateParams {
|
||||||
AK::URL const&,
|
AK::URL const& url;
|
||||||
JS::NonnullGCPtr<DOM::Document> source_document,
|
JS::NonnullGCPtr<DOM::Document> source_document;
|
||||||
Variant<Empty, String, POSTResource> document_resource = Empty {},
|
Variant<Empty, String, POSTResource> document_resource = Empty {};
|
||||||
JS::GCPtr<Fetch::Infrastructure::Response> = nullptr,
|
JS::GCPtr<Fetch::Infrastructure::Response> response = nullptr;
|
||||||
bool exceptions_enabled = false,
|
bool exceptions_enabled = false;
|
||||||
Bindings::NavigationHistoryBehavior = Bindings::NavigationHistoryBehavior::Auto,
|
Bindings::NavigationHistoryBehavior history_handling = Bindings::NavigationHistoryBehavior::Auto;
|
||||||
Optional<SerializationRecord> navigation_api_state = {},
|
Optional<SerializationRecord> navigation_api_state = {};
|
||||||
Optional<Vector<XHR::FormDataEntry>&> form_data_entry_list = {},
|
Optional<Vector<XHR::FormDataEntry>&> form_data_entry_list = {};
|
||||||
ReferrerPolicy::ReferrerPolicy = ReferrerPolicy::ReferrerPolicy::EmptyString,
|
ReferrerPolicy::ReferrerPolicy referrer_policy = ReferrerPolicy::ReferrerPolicy::EmptyString;
|
||||||
UserNavigationInvolvement = UserNavigationInvolvement::None);
|
UserNavigationInvolvement user_involvement = UserNavigationInvolvement::None;
|
||||||
|
};
|
||||||
|
|
||||||
|
WebIDL::ExceptionOr<void> navigate(NavigateParams);
|
||||||
|
|
||||||
WebIDL::ExceptionOr<void> navigate_to_a_fragment(AK::URL const&, HistoryHandlingBehavior, String navigation_id);
|
WebIDL::ExceptionOr<void> navigate_to_a_fragment(AK::URL const&, HistoryHandlingBehavior, String navigation_id);
|
||||||
|
|
||||||
|
|
|
@ -242,7 +242,11 @@ void NavigableContainer::navigate_an_iframe_or_frame(AK::URL url, ReferrerPolicy
|
||||||
Variant<Empty, String, POSTResource> document_resource = Empty {};
|
Variant<Empty, String, POSTResource> document_resource = Empty {};
|
||||||
if (srcdoc_string.has_value())
|
if (srcdoc_string.has_value())
|
||||||
document_resource = srcdoc_string.value();
|
document_resource = srcdoc_string.value();
|
||||||
MUST(m_content_navigable->navigate(url, document(), document_resource, nullptr, false, history_handling, {}, {}, referrer_policy));
|
MUST(m_content_navigable->navigate({ .url = url,
|
||||||
|
.source_document = document(),
|
||||||
|
.document_resource = document_resource,
|
||||||
|
.history_handling = history_handling,
|
||||||
|
.referrer_policy = referrer_policy }));
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/document-sequences.html#destroy-a-child-navigable
|
// https://html.spec.whatwg.org/multipage/document-sequences.html#destroy-a-child-navigable
|
||||||
|
|
|
@ -116,7 +116,9 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<TraversableNavigable>> TraversableNavigable
|
||||||
auto traversable = TRY(create_a_new_top_level_traversable(page, nullptr, {}));
|
auto traversable = TRY(create_a_new_top_level_traversable(page, nullptr, {}));
|
||||||
|
|
||||||
// 2. Navigate traversable to initialNavigationURL using traversable's active document, with documentResource set to initialNavigationPostResource.
|
// 2. Navigate traversable to initialNavigationURL using traversable's active document, with documentResource set to initialNavigationPostResource.
|
||||||
TRY(traversable->navigate(initial_navigation_url, *traversable->active_document(), initial_navigation_post_resource));
|
TRY(traversable->navigate({ .url = initial_navigation_url,
|
||||||
|
.source_document = *traversable->active_document(),
|
||||||
|
.document_resource = initial_navigation_post_resource }));
|
||||||
|
|
||||||
// 3. Return traversable.
|
// 3. Return traversable.
|
||||||
return traversable;
|
return traversable;
|
||||||
|
|
|
@ -376,7 +376,7 @@ WebIDL::ExceptionOr<JS::GCPtr<WindowProxy>> Window::open_impl(StringView url, St
|
||||||
// FIXME: 5. If urlRecord matches about:blank, then perform the URL and history update steps given target browsing context's active document and urlRecord.
|
// FIXME: 5. If urlRecord matches about:blank, then perform the URL and history update steps given target browsing context's active document and urlRecord.
|
||||||
|
|
||||||
// 6. Otherwise, navigate targetNavigable to urlRecord using sourceDocument, with referrerPolicy set to referrerPolicy and exceptionsEnabled set to true.
|
// 6. Otherwise, navigate targetNavigable to urlRecord using sourceDocument, with referrerPolicy set to referrerPolicy and exceptionsEnabled set to true.
|
||||||
TRY(target_navigable->navigate(url_record, source_document));
|
TRY(target_navigable->navigate({ .url = url_record, .source_document = source_document }));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 13. Otherwise:
|
// 13. Otherwise:
|
||||||
|
@ -392,7 +392,7 @@ WebIDL::ExceptionOr<JS::GCPtr<WindowProxy>> Window::open_impl(StringView url, St
|
||||||
return WebIDL::SyntaxError::create(realm(), "URL is not valid"_fly_string);
|
return WebIDL::SyntaxError::create(realm(), "URL is not valid"_fly_string);
|
||||||
|
|
||||||
// 3. Navigate targetNavigable to urlRecord using sourceDocument, with referrerPolicy set to referrerPolicy and exceptionsEnabled set to true.
|
// 3. Navigate targetNavigable to urlRecord using sourceDocument, with referrerPolicy set to referrerPolicy and exceptionsEnabled set to true.
|
||||||
TRY(target_navigable->navigate(url_record, source_document));
|
TRY(target_navigable->navigate({ .url = url_record, .source_document = source_document }));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. If noopener is false, then set target browsing context's opener browsing context to source browsing context.
|
// 2. If noopener is false, then set target browsing context's opener browsing context to source browsing context.
|
||||||
|
|
|
@ -285,7 +285,7 @@ bool EventHandler::handle_mouseup(CSSPixelPoint position, CSSPixelPoint screen_p
|
||||||
auto url = document->parse_url(href);
|
auto url = document->parse_url(href);
|
||||||
dbgln("Web::EventHandler: Clicking on a link to {}", url);
|
dbgln("Web::EventHandler: Clicking on a link to {}", url);
|
||||||
if (button == GUI::MouseButton::Primary) {
|
if (button == GUI::MouseButton::Primary) {
|
||||||
MUST(document->navigable()->navigate(url, document));
|
MUST(document->navigable()->navigate({ .url = url, .source_document = document }));
|
||||||
} else if (button == GUI::MouseButton::Middle) {
|
} else if (button == GUI::MouseButton::Middle) {
|
||||||
if (auto* page = m_browsing_context->page())
|
if (auto* page = m_browsing_context->page())
|
||||||
page->client().page_did_middle_click_link(url, link->target(), modifiers);
|
page->client().page_did_middle_click_link(url, link->target(), modifiers);
|
||||||
|
|
|
@ -45,12 +45,14 @@ void Page::set_focused_browsing_context(Badge<EventHandler>, HTML::BrowsingConte
|
||||||
|
|
||||||
void Page::load(const AK::URL& url)
|
void Page::load(const AK::URL& url)
|
||||||
{
|
{
|
||||||
(void)top_level_traversable()->navigate(url, *top_level_traversable()->active_document());
|
(void)top_level_traversable()->navigate({ .url = url, .source_document = *top_level_traversable()->active_document() });
|
||||||
}
|
}
|
||||||
|
|
||||||
void Page::load_html(StringView html)
|
void Page::load_html(StringView html)
|
||||||
{
|
{
|
||||||
(void)top_level_traversable()->navigate("about:srcdoc"sv, *top_level_traversable()->active_document(), String::from_utf8(html).release_value_but_fixme_should_propagate_errors());
|
(void)top_level_traversable()->navigate({ .url = "about:srcdoc"sv,
|
||||||
|
.source_document = *top_level_traversable()->active_document(),
|
||||||
|
.document_resource = String::from_utf8(html).release_value_but_fixme_should_propagate_errors() });
|
||||||
}
|
}
|
||||||
|
|
||||||
Gfx::Palette Page::palette() const
|
Gfx::Palette Page::palette() const
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue