@@ -954,11 +954,63 @@ bool SetBackpressure(JSContext *cx, HandleObject stream, bool backpressure);
954
954
bool Error (JSContext *cx, HandleObject stream, HandleValue error);
955
955
} // namespace TransformStream
956
956
957
+ #define ITERTYPE_ENTRIES 0
958
+ #define ITERTYPE_KEYS 1
959
+ #define ITERTYPE_VALUES 2
957
960
namespace URLSearchParams {
958
- bool is_instance (JSObject *obj);
959
- JSObject *create (JSContext *cx, jsurl::JSUrl *url);
961
+
962
+ namespace Slots {
963
+ enum { Url, Params, Count };
964
+ };
965
+
960
966
JSUrlSearchParams *get_params (JSObject *self);
967
+
968
+ namespace detail {
969
+ bool append (JSContext *cx, HandleObject self, HandleValue key, HandleValue val, const char *_);
970
+ } // namespace detail
971
+
961
972
SpecSlice serialize (JSContext *cx, HandleObject self);
973
+
974
+ bool check_receiver (JSContext *cx, HandleValue receiver, const char *method_name);
975
+
976
+ const unsigned ctor_length = 1 ;
977
+
978
+ bool append (JSContext *cx, unsigned argc, Value *vp);
979
+
980
+ bool delete_ (JSContext *cx, unsigned argc, Value *vp);
981
+
982
+ bool has (JSContext *cx, unsigned argc, Value *vp);
983
+
984
+ bool get (JSContext *cx, unsigned argc, Value *vp);
985
+
986
+ bool getAll (JSContext *cx, unsigned argc, Value *vp);
987
+
988
+ bool set (JSContext *cx, unsigned argc, Value *vp);
989
+
990
+ bool sort (JSContext *cx, unsigned argc, Value *vp);
991
+
992
+ bool toString (JSContext *cx, unsigned argc, Value *vp);
993
+
994
+ bool forEach (JSContext *cx, unsigned argc, Value *vp);
995
+
996
+ template <auto type> bool get_iter (JSContext *cx, unsigned argc, Value *vp);
997
+
998
+ const JSFunctionSpec methods[] = {
999
+ JS_FN (" append" , append, 2 , JSPROP_ENUMERATE), JS_FN (" delete" , delete_, 1 , JSPROP_ENUMERATE),
1000
+ JS_FN (" has" , has, 1 , JSPROP_ENUMERATE), JS_FN (" get" , get, 1 , JSPROP_ENUMERATE),
1001
+ JS_FN (" getAll" , getAll, 1 , JSPROP_ENUMERATE), JS_FN (" set" , set, 2 , JSPROP_ENUMERATE),
1002
+ JS_FN (" sort" , sort, 0 , JSPROP_ENUMERATE), JS_FN (" toString" , toString, 0 , JSPROP_ENUMERATE),
1003
+ JS_FN (" forEach" , forEach, 0 , JSPROP_ENUMERATE),
1004
+ JS_FN (" entries" , get_iter<ITERTYPE_ENTRIES>, 0 , 0 ),
1005
+ JS_FN (" keys" , get_iter<ITERTYPE_KEYS>, 0 , 0 ), JS_FN (" values" , get_iter<ITERTYPE_VALUES>, 0 , 0 ),
1006
+ // [Symbol.iterator] added in init_class.
1007
+ JS_FS_END};
1008
+
1009
+ const JSPropertySpec properties[] = {JS_PS_END};
1010
+ bool constructor (JSContext *cx, unsigned argc, Value *vp);
1011
+ CLASS_BOILERPLATE_CUSTOM_INIT (URLSearchParams)
1012
+
1013
+ JSObject *create (JSContext *cx, HandleObject self, jsurl::JSUrl *url);
962
1014
} // namespace URLSearchParams
963
1015
964
1016
namespace RequestOrResponse {
@@ -6690,7 +6742,11 @@ bool searchParams_get(JSContext *cx, unsigned argc, Value *vp) {
6690
6742
RootedObject params (cx);
6691
6743
if (params_val.isNullOrUndefined ()) {
6692
6744
JSUrl *url = (JSUrl *)JS::GetReservedSlot (self, Slots::Url).toPrivate ();
6693
- params = URLSearchParams::create (cx, url);
6745
+ RootedObject url_search_params_intance (
6746
+ cx, JS_NewObjectWithGivenProto (cx, &URLSearchParams::class_, URLSearchParams::proto_obj));
6747
+ if (!self)
6748
+ return false ;
6749
+ params = URLSearchParams::create (cx, url_search_params_intance, url);
6694
6750
if (!params)
6695
6751
return false ;
6696
6752
JS::SetReservedSlot (self, Slots::Params, JS::ObjectValue (*params));
@@ -6793,10 +6849,6 @@ JSObject *create(JSContext *cx, HandleValue url_val, HandleValue base_val) {
6793
6849
}
6794
6850
} // namespace URL
6795
6851
6796
- #define ITERTYPE_ENTRIES 0
6797
- #define ITERTYPE_KEYS 1
6798
- #define ITERTYPE_VALUES 2
6799
-
6800
6852
namespace URLSearchParamsIterator {
6801
6853
namespace Slots {
6802
6854
enum { Params, Type, Index, Count };
@@ -6923,9 +6975,6 @@ JSObject *create(JSContext *cx, HandleObject params, uint8_t type) {
6923
6975
} // namespace URLSearchParamsIterator
6924
6976
6925
6977
namespace URLSearchParams {
6926
- namespace Slots {
6927
- enum { Url, Params, Count };
6928
- };
6929
6978
6930
6979
JSUrlSearchParams *get_params (JSObject *self) {
6931
6980
return (JSUrlSearchParams *)JS::GetReservedSlot (self, Slots::Params).toPrivate ();
@@ -6953,20 +7002,6 @@ SpecSlice serialize(JSContext *cx, HandleObject self) {
6953
7002
}
6954
7003
6955
7004
bool check_receiver (JSContext *cx, HandleValue receiver, const char *method_name);
6956
- JSObject *create (JSContext *cx, HandleValue params_val);
6957
-
6958
- const unsigned ctor_length = 1 ;
6959
-
6960
- bool constructor (JSContext *cx, unsigned argc, Value *vp) {
6961
- CTOR_HEADER (" URLSearchParams" , 0 );
6962
-
6963
- RootedObject self (cx, create (cx, args.get (0 )));
6964
- if (!self)
6965
- return false ;
6966
-
6967
- args.rval ().setObject (*self);
6968
- return true ;
6969
- }
6970
7005
6971
7006
bool append (JSContext *cx, unsigned argc, Value *vp) {
6972
7007
METHOD_HEADER (2 )
@@ -7148,20 +7183,18 @@ template <auto type> bool get_iter(JSContext *cx, unsigned argc, Value *vp) {
7148
7183
return true ;
7149
7184
}
7150
7185
7151
- const JSFunctionSpec methods[] = {
7152
- JS_FN (" append" , append, 2 , JSPROP_ENUMERATE), JS_FN (" delete" , delete_, 1 , JSPROP_ENUMERATE),
7153
- JS_FN (" has" , has, 1 , JSPROP_ENUMERATE), JS_FN (" get" , get, 1 , JSPROP_ENUMERATE),
7154
- JS_FN (" getAll" , getAll, 1 , JSPROP_ENUMERATE), JS_FN (" set" , set, 2 , JSPROP_ENUMERATE),
7155
- JS_FN (" sort" , sort, 0 , JSPROP_ENUMERATE), JS_FN (" toString" , toString, 0 , JSPROP_ENUMERATE),
7156
- JS_FN (" forEach" , forEach, 0 , JSPROP_ENUMERATE),
7157
- JS_FN (" entries" , get_iter<ITERTYPE_ENTRIES>, 0 , 0 ),
7158
- JS_FN (" keys" , get_iter<ITERTYPE_KEYS>, 0 , 0 ), JS_FN (" values" , get_iter<ITERTYPE_VALUES>, 0 , 0 ),
7159
- // [Symbol.iterator] added in init_class.
7160
- JS_FS_END};
7186
+ JSObject *create (JSContext *cx, HandleObject self, HandleValue params_val);
7187
+ bool constructor (JSContext *cx, unsigned argc, Value *vp) {
7188
+ CTOR_HEADER (" URLSearchParams" , 0 );
7161
7189
7162
- const JSPropertySpec properties[] = {JS_PS_END};
7190
+ RootedObject urlSearchParamsInstance (cx, JS_NewObjectForConstructor (cx, &class_, args));
7191
+ RootedObject self (cx, create (cx, urlSearchParamsInstance, args.get (0 )));
7192
+ if (!self)
7193
+ return false ;
7163
7194
7164
- CLASS_BOILERPLATE_CUSTOM_INIT (URLSearchParams)
7195
+ args.rval ().setObject (*self);
7196
+ return true ;
7197
+ }
7165
7198
7166
7199
bool init_class (JSContext *cx, HandleObject global) {
7167
7200
if (!init_class_impl (cx, global))
@@ -7176,11 +7209,8 @@ bool init_class(JSContext *cx, HandleObject global) {
7176
7209
return JS_DefinePropertyById (cx, proto_obj, iteratorId, entries, 0 );
7177
7210
}
7178
7211
7179
- JSObject *create (JSContext *cx, HandleValue params_val = JS::UndefinedHandleValue) {
7180
- RootedObject self (cx, JS_NewObjectWithGivenProto (cx, &class_, proto_obj));
7181
- if (!self)
7182
- return nullptr ;
7183
-
7212
+ JSObject *create (JSContext *cx, HandleObject self,
7213
+ HandleValue params_val = JS::UndefinedHandleValue) {
7184
7214
auto params = jsurl::new_params ();
7185
7215
JS::SetReservedSlot (self, Slots::Params, JS::PrivateValue (params));
7186
7216
@@ -7202,10 +7232,7 @@ JSObject *create(JSContext *cx, HandleValue params_val = JS::UndefinedHandleValu
7202
7232
return self;
7203
7233
}
7204
7234
7205
- JSObject *create (JSContext *cx, JSUrl *url) {
7206
- RootedObject self (cx, JS_NewObjectWithGivenProto (cx, &class_, proto_obj));
7207
- if (!self)
7208
- return nullptr ;
7235
+ JSObject *create (JSContext *cx, HandleObject self, JSUrl *url) {
7209
7236
7210
7237
JSUrlSearchParams *params = jsurl::url_search_params (url);
7211
7238
if (!params)
@@ -7452,7 +7479,9 @@ JSObject *ReadStructuredClone(JSContext *cx, JSStructuredCloneReader *r,
7452
7479
uint32_t len, void *closure) {
7453
7480
MOZ_ASSERT (tag == SCTAG_DOM_URLSEARCHPARAMS);
7454
7481
7455
- RootedObject params_obj (cx, URLSearchParams::create (cx));
7482
+ RootedObject urlSearchParamsInstance (
7483
+ cx, JS_NewObjectWithGivenProto (cx, &URLSearchParams::class_, URLSearchParams::proto_obj));
7484
+ RootedObject params_obj (cx, URLSearchParams::create (cx, urlSearchParamsInstance));
7456
7485
if (!params_obj) {
7457
7486
return nullptr ;
7458
7487
}
0 commit comments