LibWeb: Pass top-level navigation initiator origin to Fetch's Request

This commit is contained in:
Kenneth Myhra 2025-08-11 21:12:59 +02:00 committed by Tim Flynn
commit e9246c15d9
Notes: github-actions[bot] 2025-08-12 11:09:51 +00:00
2 changed files with 11 additions and 1 deletions

View file

@ -228,6 +228,9 @@ public:
[[nodiscard]] OriginType const& origin() const { return m_origin; }
void set_origin(OriginType origin) { m_origin = move(origin); }
[[nodiscard]] Optional<URL::Origin> const& top_level_navigation_initiator_origin() const { return m_top_level_navigation_initiator_origin; }
void set_top_level_navigation_initiator_origin(Optional<URL::Origin> top_level_navigation_initiator_origin) { m_top_level_navigation_initiator_origin = move(top_level_navigation_initiator_origin); }
[[nodiscard]] PolicyContainerType const& policy_container() const { return m_policy_container; }
void set_policy_container(PolicyContainerType policy_container) { m_policy_container = move(policy_container); }
@ -417,6 +420,10 @@ private:
// A request has an associated origin, which is "client" or an origin. Unless stated otherwise it is "client".
OriginType m_origin { Origin::Client };
// https://fetch.spec.whatwg.org/#request-top-level-navigation-initiator-origin
// A request has an associated top-level navigation initiator origin, which is an origin or null. Unless stated otherwise it is null.
Optional<URL::Origin> m_top_level_navigation_initiator_origin;
// https://fetch.spec.whatwg.org/#concept-request-policy-container
// A request has an associated policy container, which is "client" or a policy container. Unless stated otherwise
// it is "client".

View file

@ -866,7 +866,10 @@ static WebIDL::ExceptionOr<Navigable::NavigationParamsVariant> create_navigation
request->set_referrer(entry->document_state()->request_referrer());
request->set_policy_container(source_snapshot_params.source_policy_container);
// FIXME: 4. If navigable is a top-level traversable, then set request's top-level navigation initiator origin to entry's document state's initiator origin.
// 4. If navigable is a top-level traversable, then set request's top-level navigation initiator origin to entry's
// document state's initiator origin.
if (navigable->top_level_traversable()->parent() == nullptr)
request->set_top_level_navigation_initiator_origin(entry->document_state()->origin());
// 5. If request's client is null:
if (request->client() == nullptr) {