AK: Add URL::serialize_origin based on HTML's origin definition

This commit is contained in:
Idan Horowitz 2021-09-13 22:18:14 +03:00 committed by Andreas Kling
parent af5b62d8cd
commit 6fa4fc8353
2 changed files with 31 additions and 0 deletions

View file

@ -306,6 +306,34 @@ String URL::serialize_for_display() const
return builder.to_string();
}
// https://html.spec.whatwg.org/multipage/origin.html#ascii-serialisation-of-an-origin
// https://url.spec.whatwg.org/#concept-url-origin
String URL::serialize_origin() const
{
VERIFY(m_valid);
if (m_scheme == "blob"sv) {
// TODO: 1. If URLs blob URL entry is non-null, then return URLs blob URL entrys environments origin.
// 2. Let url be the result of parsing URLs path[0].
VERIFY(!m_paths.is_empty());
URL url = m_paths[0];
// 3. Return a new opaque origin, if url is failure, and urls origin otherwise.
if (!url.is_valid())
return "null";
return url.serialize_origin();
} else if (!m_scheme.is_one_of("ftp"sv, "http"sv, "https"sv, "ws"sv, "wss"sv)) { // file: "Unfortunate as it is, this is left as an exercise to the reader. When in doubt, return a new opaque origin."
return "null";
}
StringBuilder builder;
builder.append(m_scheme);
builder.append("://"sv);
builder.append(m_host);
if (m_port != 0)
builder.append(":{}", m_port);
return builder.build();
}
bool URL::equals(URL const& other, ExcludeFragment exclude_fragments) const
{
if (this == &other)

View file

@ -81,6 +81,9 @@ public:
String serialize_for_display() const;
String to_string() const { return serialize(); }
// HTML origin
String serialize_origin() const;
bool equals(URL const& other, ExcludeFragment = ExcludeFragment::No) const;
URL complete_url(String const&) const;