aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2016-04-22 14:25:01 +0200
committerSimon Sapin <simon.sapin@exyr.org>2016-04-23 20:27:59 +0200
commit85de5ec743b68a662d4921cb582cd7af133a1d93 (patch)
treeefea96879b8d55502ce74ef4a636d26de75fc8b5
parent7932ab6ac2646e097a2ef2f76d6e4439fe53bdd3 (diff)
downloadservo-85de5ec743b68a662d4921cb582cd7af133a1d93.tar.gz
servo-85de5ec743b68a662d4921cb582cd7af133a1d93.zip
Correctly initialize URL.searchParams
-rw-r--r--components/script/dom/url.rs4
-rw-r--r--components/script/dom/urlsearchparams.rs40
-rw-r--r--tests/wpt/metadata/url/url-constructor.html.ini9
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
-