Skip to content

Commit

Permalink
LibWeb: Add support for the record variant of URLSearchParams
Browse files Browse the repository at this point in the history
  • Loading branch information
Lubrsi authored and awesomekling committed Feb 14, 2022
1 parent b7c435d commit b305ee8
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 5 deletions.
16 changes: 14 additions & 2 deletions Userland/Libraries/LibWeb/URL/URLSearchParams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ Vector<QueryParam> url_decode(StringView input)
return output;
}

DOM::ExceptionOr<NonnullRefPtr<URLSearchParams>> URLSearchParams::create_with_global_object(Bindings::WindowObject&, Variant<Vector<Vector<String>>, String> const& init)
// https://url.spec.whatwg.org/#dom-urlsearchparams-urlsearchparams
// https://url.spec.whatwg.org/#urlsearchparams-initialize
DOM::ExceptionOr<NonnullRefPtr<URLSearchParams>> URLSearchParams::create_with_global_object(Bindings::WindowObject&, Variant<Vector<Vector<String>>, OrderedHashMap<String, String>, String> const& init)
{
// 1. If init is a string and starts with U+003F (?), then remove the first code point from init.
// NOTE: We do this when we know that it's a string on step 3 of initialization.
Expand Down Expand Up @@ -94,8 +96,18 @@ DOM::ExceptionOr<NonnullRefPtr<URLSearchParams>> URLSearchParams::create_with_gl
return URLSearchParams::create(move(list));
}

// TODO
// 2. Otherwise, if init is a record, then for each name → value of init, append a new name-value pair whose name is name and value is value, to query’s list.
if (init.has<OrderedHashMap<String, String>>()) {
auto const& init_record = init.get<OrderedHashMap<String, String>>();

Vector<QueryParam> list;
list.ensure_capacity(init_record.size());

for (auto const& pair : init_record)
list.append(QueryParam { .name = pair.key, .value = pair.value });

return URLSearchParams::create(move(list));
}

// 3. Otherwise:
// a. Assert: init is a string.
Expand Down
2 changes: 1 addition & 1 deletion Userland/Libraries/LibWeb/URL/URLSearchParams.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class URLSearchParams : public Bindings::Wrappable
return adopt_ref(*new URLSearchParams(move(list)));
}

static DOM::ExceptionOr<NonnullRefPtr<URLSearchParams>> create_with_global_object(Bindings::WindowObject&, Variant<Vector<Vector<String>>, String> const& init);
static DOM::ExceptionOr<NonnullRefPtr<URLSearchParams>> create_with_global_object(Bindings::WindowObject&, Variant<Vector<Vector<String>>, OrderedHashMap<String, String>, String> const& init);

void append(String const& name, String const& value);
void delete_(String const& name);
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/URL/URLSearchParams.idl
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
interface URLSearchParams {

// FIXME: the real type of init is (sequence<sequence<USVString>> or record<USVString, USVString> or USVString)
constructor(optional (sequence<sequence<USVString>> or USVString) init = "");
constructor(optional (sequence<sequence<USVString>> or record<USVString, USVString> or USVString) init = "");

undefined append(USVString name, USVString value);
undefined delete(USVString name);
Expand Down

0 comments on commit b305ee8

Please sign in to comment.