diff options
author | Idan Horowitz <idan.horowitz@gmail.com> | 2021-09-13 22:18:14 +0300 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-09-14 00:14:45 +0200 |
commit | 6fa4fc8353d79bebfdbfba0fc4eae22cb5935705 (patch) | |
tree | 83d411e90babd99c759f449bc820b53b3406a165 /AK | |
parent | af5b62d8cd14a06449bb6691744e9a703a4b17b2 (diff) | |
download | serenity-6fa4fc8353d79bebfdbfba0fc4eae22cb5935705.zip |
AK: Add URL::serialize_origin based on HTML's origin definition
Diffstat (limited to 'AK')
-rw-r--r-- | AK/URL.cpp | 28 | ||||
-rw-r--r-- | AK/URL.h | 3 |
2 files changed, 31 insertions, 0 deletions
diff --git a/AK/URL.cpp b/AK/URL.cpp index b3f46ad3a2..66fbecb520 100644 --- a/AK/URL.cpp +++ b/AK/URL.cpp @@ -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 URL’s blob URL entry is non-null, then return URL’s blob URL entry’s environment’s origin. + // 2. Let url be the result of parsing URL’s path[0]. + VERIFY(!m_paths.is_empty()); + URL url = m_paths[0]; + // 3. Return a new opaque origin, if url is failure, and url’s 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) @@ -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; |