diff options
author | Simon Sapin <simon.sapin@exyr.org> | 2016-04-22 14:25:01 +0200 |
---|---|---|
committer | Simon Sapin <simon.sapin@exyr.org> | 2016-04-23 20:27:59 +0200 |
commit | 85de5ec743b68a662d4921cb582cd7af133a1d93 (patch) | |
tree | efea96879b8d55502ce74ef4a636d26de75fc8b5 | |
parent | 7932ab6ac2646e097a2ef2f76d6e4439fe53bdd3 (diff) | |
download | servo-85de5ec743b68a662d4921cb582cd7af133a1d93.tar.gz servo-85de5ec743b68a662d4921cb582cd7af133a1d93.zip |
Correctly initialize URL.searchParams
-rw-r--r-- | components/script/dom/url.rs | 4 | ||||
-rw-r--r-- | components/script/dom/urlsearchparams.rs | 40 | ||||
-rw-r--r-- | tests/wpt/metadata/url/url-constructor.html.ini | 9 |
3 files changed, 25 insertions, 28 deletions
diff --git a/components/script/dom/url.rs b/components/script/dom/url.rs index b8d1ae9335a..664221c4bb8 100644 --- a/components/script/dom/url.rs +++ b/components/script/dom/url.rs @@ -42,6 +42,10 @@ impl URL { global, URLBinding::Wrap) } + pub fn query_pairs(&self) -> Vec<(String, String)> { + self.url.borrow().query_pairs().into_owned().collect() + } + pub fn set_query_pairs(&self, pairs: &[(String, String)]) { let mut url = self.url.borrow_mut(); url.query_pairs_mut().clear().extend_pairs(pairs); diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs index d3a8c29ac3e..800cd10db88 100644 --- a/components/script/dom/urlsearchparams.rs +++ b/components/script/dom/urlsearchparams.rs @@ -31,7 +31,7 @@ impl URLSearchParams { fn new_inherited(url: Option<&URL>) -> URLSearchParams { URLSearchParams { reflector_: Reflector::new(), - list: DOMRefCell::new(vec![]), + list: DOMRefCell::new(url.map_or(Vec::new(), |url| url.query_pairs())), url: MutableWeakRef::new(url), } } @@ -111,26 +111,28 @@ impl URLSearchParamsMethods for URLSearchParams { // https://url.spec.whatwg.org/#dom-urlsearchparams-set fn Set(&self, name: USVString, value: USVString) { - // Step 1. - let mut list = self.list.borrow_mut(); - let mut index = None; - let mut i = 0; - list.retain(|&(ref k, _)| { - if index.is_none() { - if k == &name.0 { - index = Some(i); + { + // Step 1. + let mut list = self.list.borrow_mut(); + let mut index = None; + let mut i = 0; + list.retain(|&(ref k, _)| { + if index.is_none() { + if k == &name.0 { + index = Some(i); + } else { + i += 1; + } + true } else { - i += 1; + k != &name.0 } - true - } else { - k != &name.0 - } - }); - match index { - Some(index) => list[index].1 = value.0, - None => list.push((name.0, value.0)), // Step 2. - }; + }); + match index { + Some(index) => list[index].1 = value.0, + None => list.push((name.0, value.0)), // Step 2. + }; + } // Un-borrow self.list // Step 3. self.update_steps(); } diff --git a/tests/wpt/metadata/url/url-constructor.html.ini b/tests/wpt/metadata/url/url-constructor.html.ini index 80ca791b9be..fbbdefe9627 100644 --- a/tests/wpt/metadata/url/url-constructor.html.ini +++ b/tests/wpt/metadata/url/url-constructor.html.ini @@ -75,15 +75,6 @@ [Parsing: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank>] expected: FAIL - [URL.searchParams updating, clearing] - expected: FAIL - [URL.searchParams and URL.search setters, update propagation] expected: FAIL - [Parsing: <?a=b&c=d> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <??a=b&c=d> against <http://example.org/foo/bar>] - expected: FAIL - |