Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions builtins/web/url.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ const JSFunctionSpec URLSearchParams::methods[] = {
};

const JSPropertySpec URLSearchParams::properties[] = {
JS_PSG("size", URLSearchParams::size_get, JSPROP_ENUMERATE),
JS_PS_END,
};

Expand Down Expand Up @@ -347,6 +348,14 @@ bool URLSearchParams::set(JSContext *cx, unsigned argc, JS::Value *vp) {
return true;
}

bool URLSearchParams::size_get(JSContext *cx, unsigned argc, JS::Value *vp) {
METHOD_HEADER(0)
auto *params =
static_cast<jsurl::JSUrlSearchParams *>(JS::GetReservedSlot(self, Slots::Params).toPrivate());
args.rval().setNumber(jsurl::params_size(params));
return true;
}

bool URLSearchParams::sort(JSContext *cx, unsigned argc, JS::Value *vp) {
METHOD_HEADER(0)
auto *params =
Expand Down Expand Up @@ -831,5 +840,3 @@ bool install(api::Engine *engine) {
}

} // namespace builtins::web::url


1 change: 1 addition & 0 deletions builtins/web/url.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class URLSearchParams : public BuiltinNoConstructor<URLSearchParams> {
static bool has(JSContext *cx, unsigned argc, JS::Value *vp);
static bool getAll(JSContext *cx, unsigned argc, JS::Value *vp);
static bool sort(JSContext *cx, unsigned argc, JS::Value *vp);
static bool size_get(JSContext *cx, unsigned argc, JS::Value *vp);
static bool forEach(JSContext *cx, unsigned argc, JS::Value *vp);
static bool delete_(JSContext *cx, unsigned argc, JS::Value *vp);
static bool get(JSContext *cx, unsigned argc, JS::Value *vp);
Expand Down
2 changes: 2 additions & 0 deletions crates/rust-url/rust-url.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ CVec<SpecSlice> params_get_all(const JSUrlSearchParams *params, const SpecString

void params_set(JSUrlSearchParams *params, SpecString name, SpecString value);

size_t params_size(JSUrlSearchParams *params);

void params_sort(JSUrlSearchParams *params);

SpecSlice params_to_string(const JSUrlSearchParams *params);
Expand Down
5 changes: 5 additions & 0 deletions crates/rust-url/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,11 @@ pub extern "C" fn params_set(params: &mut JSUrlSearchParams, name: SpecString, v
params.update_url_or_str();
}

#[no_mangle]
pub extern "C" fn params_size(params: &JSUrlSearchParams) -> usize {
params.list.len()
}

#[no_mangle]
pub extern "C" fn params_sort(params: &mut JSUrlSearchParams) {
params
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"URLSearchParams's size and deletion": {
"status": "FAIL"
"status": "PASS"
},
"URLSearchParams's size and addition": {
"status": "FAIL"
"status": "PASS"
},
"URLSearchParams's size when obtained from a URL": {
"status": "FAIL"
"status": "PASS"
},
"URLSearchParams's size when obtained from a URL and using .search": {
"status": "FAIL"
"status": "PASS"
}
}
}