mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-20 01:37:39 +03:00
LibWeb: Bring Document::fallback_base_url closer to the spec
This commit is contained in:
parent
5d9d0aa267
commit
6e75440d5a
Notes:
sideshowbarker
2024-07-18 04:38:32 +09:00
Author: https://github.com/ADKaster Commit: https://github.com/SerenityOS/serenity/commit/6e75440d5a Pull-request: https://github.com/SerenityOS/serenity/pull/23063
@ -910,11 +910,18 @@ JS::GCPtr<HTML::HTMLBaseElement const> Document::first_base_element_with_href_in
|
||||
// https://html.spec.whatwg.org/multipage/urls-and-fetching.html#fallback-base-url
|
||||
AK::URL Document::fallback_base_url() const
|
||||
{
|
||||
// FIXME: 1. If document is an iframe srcdoc document, then return the document base URL of document's browsing context's container document.
|
||||
// 1. If document is an iframe srcdoc document, then:
|
||||
if (HTML::url_matches_about_srcdoc(m_url)) {
|
||||
// 1. Assert: document's about base URL is non-null.
|
||||
VERIFY(m_about_base_url.has_value());
|
||||
|
||||
// 2. If document's URL is about:blank, and document's browsing context's creator base URL is non-null, then return that creator base URL.
|
||||
if (m_url == "about:blank"sv && browsing_context() && browsing_context()->creator_url().has_value())
|
||||
return browsing_context()->creator_url().value();
|
||||
// 2. Return document's about base URL.
|
||||
return m_about_base_url.value();
|
||||
}
|
||||
|
||||
// 2. If document's URL matches about:blank and document's about base URL is non-null, then return document's about base URL.
|
||||
if (HTML::url_matches_about_blank(m_url) && m_about_base_url.has_value())
|
||||
return m_about_base_url.value();
|
||||
|
||||
// 3. Return document's URL.
|
||||
return m_url;
|
||||
|
@ -51,6 +51,18 @@ bool url_matches_about_blank(AK::URL const& url)
|
||||
&& url.host().has<Empty>();
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/urls-and-fetching.html#matches-about:srcdoc
|
||||
bool url_matches_about_srcdoc(AK::URL const& url)
|
||||
{
|
||||
// A URL matches about:srcdoc if its scheme is "about", its path contains a single string "srcdoc", its query is null, its username and password are the empty string, and its host is null.
|
||||
return url.scheme() == "about"sv
|
||||
&& url.serialize_path() == "srcdoc"sv
|
||||
&& !url.query().has_value()
|
||||
&& url.raw_username().is_empty()
|
||||
&& url.raw_password().is_empty()
|
||||
&& url.host().has<Empty>();
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/document-sequences.html#determining-the-origin
|
||||
HTML::Origin determine_the_origin(AK::URL const& url, SandboxingFlagSet sandbox_flags, Optional<HTML::Origin> source_origin)
|
||||
{
|
||||
|
@ -236,7 +236,8 @@ HTML::Origin determine_the_origin(AK::URL const& url, SandboxingFlagSet sandbox_
|
||||
|
||||
SandboxingFlagSet determine_the_creation_sandboxing_flags(BrowsingContext const&, JS::GCPtr<DOM::Element> embedder);
|
||||
|
||||
// FIXME: Find a better home for this
|
||||
// FIXME: Find a better home for these
|
||||
bool url_matches_about_blank(AK::URL const& url);
|
||||
bool url_matches_about_srcdoc(AK::URL const& url);
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user