mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Construct URLSearchParams from array or object
This commit is contained in:
parent
47a308b277
commit
4ba0ab7bd0
4 changed files with 26 additions and 58 deletions
|
@ -5,8 +5,8 @@
|
|||
use crate::dom::bindings::cell::DomRefCell;
|
||||
use crate::dom::bindings::codegen::Bindings::URLSearchParamsBinding::URLSearchParamsMethods;
|
||||
use crate::dom::bindings::codegen::Bindings::URLSearchParamsBinding::URLSearchParamsWrap;
|
||||
use crate::dom::bindings::codegen::UnionTypes::USVStringOrURLSearchParams;
|
||||
use crate::dom::bindings::error::Fallible;
|
||||
use crate::dom::bindings::codegen::UnionTypes::USVStringSequenceSequenceOrUSVStringUSVStringRecordOrUSVString;
|
||||
use crate::dom::bindings::error::{Error, Fallible};
|
||||
use crate::dom::bindings::iterable::Iterable;
|
||||
use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
|
||||
use crate::dom::bindings::root::DomRoot;
|
||||
|
@ -47,13 +47,30 @@ impl URLSearchParams {
|
|||
// https://url.spec.whatwg.org/#dom-urlsearchparams-urlsearchparams
|
||||
pub fn Constructor(
|
||||
global: &GlobalScope,
|
||||
init: Option<USVStringOrURLSearchParams>,
|
||||
init: Option<USVStringSequenceSequenceOrUSVStringUSVStringRecordOrUSVString>,
|
||||
) -> Fallible<DomRoot<URLSearchParams>> {
|
||||
// Step 1.
|
||||
let query = URLSearchParams::new(global, None);
|
||||
match init {
|
||||
Some(USVStringOrURLSearchParams::USVString(init)) => {
|
||||
Some(USVStringSequenceSequenceOrUSVStringUSVStringRecordOrUSVString::USVStringSequenceSequence(init)) => {
|
||||
// Step 2.
|
||||
|
||||
// Step 2-1.
|
||||
if init.iter().any(|pair| pair.len() != 2) {
|
||||
return Err(Error::Type("Sequence initializer must only contain pair elements.".to_string()));
|
||||
}
|
||||
|
||||
// Step 2-2.
|
||||
*query.list.borrow_mut() =
|
||||
init.iter().map(|pair| (pair[0].to_string(), pair[1].to_string())).collect::<Vec<_>>();
|
||||
},
|
||||
Some(USVStringSequenceSequenceOrUSVStringUSVStringRecordOrUSVString::USVStringUSVStringRecord(init)) => {
|
||||
// Step 3.
|
||||
*query.list.borrow_mut() =
|
||||
(*init).iter().map(|(name, value)| (name.to_string(), value.to_string())).collect::<Vec<_>>();
|
||||
},
|
||||
Some(USVStringSequenceSequenceOrUSVStringUSVStringRecordOrUSVString::USVString(init)) => {
|
||||
// Step 4.
|
||||
let init_bytes = match init.0.chars().next() {
|
||||
Some(first_char) if first_char == '?' => {
|
||||
let (_, other_bytes) = init.0.as_bytes().split_at(1);
|
||||
|
@ -66,13 +83,10 @@ impl URLSearchParams {
|
|||
*query.list.borrow_mut() =
|
||||
form_urlencoded::parse(init_bytes).into_owned().collect();
|
||||
},
|
||||
Some(USVStringOrURLSearchParams::URLSearchParams(init)) => {
|
||||
// Step 3.
|
||||
*query.list.borrow_mut() = init.list.borrow().clone();
|
||||
},
|
||||
None => {},
|
||||
}
|
||||
// Step 4.
|
||||
|
||||
// Step 5.
|
||||
Ok(query)
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,9 @@
|
|||
* https://url.spec.whatwg.org/#interface-urlsearchparams
|
||||
*/
|
||||
|
||||
[Constructor(optional (USVString or URLSearchParams) init/* = ""*/), Exposed=(Window,Worker)]
|
||||
[Constructor(
|
||||
optional (sequence<sequence<USVString>> or record<USVString, USVString> or USVString) init/* = ""*/
|
||||
), Exposed=(Window,Worker)]
|
||||
interface URLSearchParams {
|
||||
void append(USVString name, USVString value);
|
||||
void delete(USVString name);
|
||||
|
|
|
@ -1,51 +1,8 @@
|
|||
[urlsearchparams-constructor.any.worker.html]
|
||||
[Construct with object with two keys]
|
||||
expected: FAIL
|
||||
|
||||
[Construct with object with NULL, non-ASCII, and surrogate keys]
|
||||
expected: FAIL
|
||||
|
||||
[URLSearchParams constructor, {} as argument]
|
||||
expected: FAIL
|
||||
|
||||
[Custom [Symbol.iterator\]]
|
||||
expected: FAIL
|
||||
|
||||
[URLSearchParams constructor, DOMException as argument]
|
||||
expected: FAIL
|
||||
|
||||
[Constructor with sequence of sequences of strings]
|
||||
expected: FAIL
|
||||
|
||||
[Construct with object with +]
|
||||
expected: FAIL
|
||||
|
||||
[Construct with array with two keys]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[urlsearchparams-constructor.any.html]
|
||||
[Construct with object with two keys]
|
||||
expected: FAIL
|
||||
|
||||
[Construct with object with NULL, non-ASCII, and surrogate keys]
|
||||
expected: FAIL
|
||||
|
||||
[URLSearchParams constructor, {} as argument]
|
||||
expected: FAIL
|
||||
|
||||
[Custom [Symbol.iterator\]]
|
||||
expected: FAIL
|
||||
|
||||
[URLSearchParams constructor, DOMException as argument]
|
||||
expected: FAIL
|
||||
|
||||
[Constructor with sequence of sequences of strings]
|
||||
expected: FAIL
|
||||
|
||||
[Construct with object with +]
|
||||
expected: FAIL
|
||||
|
||||
[Construct with array with two keys]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[send-entity-body-basic.htm]
|
||||
type: testharness
|
||||
[XMLHttpRequest: send() - data argument (1=2&3=4)]
|
||||
expected: FAIL
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue