|
@@ -403,7 +403,8 @@ WebIDL::ExceptionOr<void> URL::set_search(String const& search)
|
|
|
// 2. Empty this’s query object’s list.
|
|
|
m_query->m_list.clear();
|
|
|
|
|
|
- // FIXME: 3. Potentially strip trailing spaces from an opaque path with this.
|
|
|
+ // 3. Potentially strip trailing spaces from an opaque path with this.
|
|
|
+ strip_trailing_spaces_from_an_opaque_path(*this);
|
|
|
|
|
|
// 4. Return.
|
|
|
return {};
|
|
@@ -457,7 +458,8 @@ void URL::set_hash(String const& hash)
|
|
|
// 1. Set this’s URL’s fragment to null.
|
|
|
m_url.set_fragment({});
|
|
|
|
|
|
- // FIXME: 2. Potentially strip trailing spaces from an opaque path with this.
|
|
|
+ // 2. Potentially strip trailing spaces from an opaque path with this.
|
|
|
+ strip_trailing_spaces_from_an_opaque_path(*this);
|
|
|
|
|
|
// 3. Return.
|
|
|
return;
|
|
@@ -535,6 +537,29 @@ bool host_is_domain(AK::URL::Host const& host)
|
|
|
return host.has<String>() && host.get<String>() != String {};
|
|
|
}
|
|
|
|
|
|
+// https://url.spec.whatwg.org/#potentially-strip-trailing-spaces-from-an-opaque-path
|
|
|
+void strip_trailing_spaces_from_an_opaque_path(URL& url)
|
|
|
+{
|
|
|
+ // 1. If url’s URL does not have an opaque path, then return.
|
|
|
+ // FIXME: Reimplement this step once we modernize the URL implementation to meet the spec.
|
|
|
+ if (!url.cannot_be_a_base_url())
|
|
|
+ return;
|
|
|
+
|
|
|
+ // 2. If url’s URL’s fragment is non-null, then return.
|
|
|
+ if (url.fragment().has_value())
|
|
|
+ return;
|
|
|
+
|
|
|
+ // 3. If url’s URL’s query is non-null, then return.
|
|
|
+ if (url.query().has_value())
|
|
|
+ return;
|
|
|
+
|
|
|
+ // 4. Remove all trailing U+0020 SPACE code points from url’s URL’s path.
|
|
|
+ // NOTE: At index 0 since the first step tells us that the URL only has one path segment.
|
|
|
+ auto opaque_path = url.path_segment_at_index(0);
|
|
|
+ auto trimmed_path = opaque_path.trim(" "sv, TrimMode::Right);
|
|
|
+ url.set_paths({ trimmed_path });
|
|
|
+}
|
|
|
+
|
|
|
// https://url.spec.whatwg.org/#concept-url-parser
|
|
|
AK::URL parse(StringView input, Optional<AK::URL> const& base_url)
|
|
|
{
|