diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp index 3d9d5c86812..f548918155c 100644 --- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp +++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp @@ -59,15 +59,17 @@ bool url_matches_about_srcdoc(URL::URL const& url) } // https://html.spec.whatwg.org/multipage/document-sequences.html#determining-the-origin -HTML::Origin determine_the_origin(URL::URL const& url, SandboxingFlagSet sandbox_flags, Optional source_origin) +HTML::Origin determine_the_origin(Optional const& url, SandboxingFlagSet sandbox_flags, Optional source_origin) { // 1. If sandboxFlags has its sandboxed origin browsing context flag set, then return a new opaque origin. if (has_flag(sandbox_flags, SandboxingFlagSet::SandboxedOrigin)) { return HTML::Origin {}; } - // FIXME: 2. If url is null, then return a new opaque origin. - // FIXME: There appears to be no way to get a null URL here, so it might be a spec bug. + // 2. If url is null, then return a new opaque origin. + if (!url.has_value()) { + return HTML::Origin {}; + } // 3. If url is about:srcdoc, then: if (url == "about:srcdoc"sv) { @@ -79,11 +81,11 @@ HTML::Origin determine_the_origin(URL::URL const& url, SandboxingFlagSet sandbox } // 4. If url matches about:blank and sourceOrigin is non-null, then return sourceOrigin. - if (url_matches_about_blank(url) && source_origin.has_value()) + if (url_matches_about_blank(*url) && source_origin.has_value()) return source_origin.release_value(); // 5. Return url's origin. - return DOMURL::url_origin(url); + return DOMURL::url_origin(*url); } // https://html.spec.whatwg.org/multipage/document-sequences.html#creating-a-new-auxiliary-browsing-context diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.h b/Userland/Libraries/LibWeb/HTML/BrowsingContext.h index 4339f29c9dc..59adf49c385 100644 --- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.h +++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.h @@ -168,7 +168,7 @@ private: JS::GCPtr m_previous_sibling; }; -HTML::Origin determine_the_origin(URL::URL const& url, SandboxingFlagSet sandbox_flags, Optional source_origin); +HTML::Origin determine_the_origin(Optional const&, SandboxingFlagSet, Optional source_origin); SandboxingFlagSet determine_the_creation_sandboxing_flags(BrowsingContext const&, JS::GCPtr embedder); diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.cpp b/Userland/Libraries/LibWeb/HTML/Navigable.cpp index 8f68199e3d8..c3d3671cd35 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/Navigable.cpp @@ -609,7 +609,7 @@ static WebIDL::ExceptionOr> create_navigation response->set_body(TRY(Fetch::Infrastructure::byte_sequence_as_body(realm, document_resource.get().bytes()))); // 3. Let responseOrigin be the result of determining the origin given response's URL, targetSnapshotParams's sandboxing flags, and entry's document state's origin. - auto response_origin = determine_the_origin(*response->url(), target_snapshot_params.sandboxing_flags, entry->document_state()->origin()); + auto response_origin = determine_the_origin(response->url(), target_snapshot_params.sandboxing_flags, entry->document_state()->origin()); // 4. Let coop be a new opener policy. OpenerPolicy coop = {}; @@ -880,7 +880,7 @@ static WebIDL::ExceptionOr create_navigation // FIXME 10. Set finalSandboxFlags to the union of targetSnapshotParams's sandboxing flags and responsePolicyContainer's CSP list's CSP-derived sandboxing flags. // 11. Set responseOrigin to the result of determining the origin given response's URL, finalSandboxFlags, and entry's document state's initiator origin. - response_origin = determine_the_origin(*response_holder->response()->url(), final_sandbox_flags, entry->document_state()->initiator_origin()); + response_origin = determine_the_origin(response_holder->response()->url(), final_sandbox_flags, entry->document_state()->initiator_origin()); // 12. If navigable is a top-level traversable, then: if (navigable->is_top_level_traversable()) {