diff options
author | yoyo930021 <yoyo930021@gmail.com> | 2016-08-27 14:27:48 +0800 |
---|---|---|
committer | Ms2ger <Ms2ger@gmail.com> | 2016-10-07 17:35:54 +0200 |
commit | 980c644a8387fd257b06dcebf152fbd4c3386aef (patch) | |
tree | 075d0705d4a593c484a980e0116be86b26ab093d /components/script | |
parent | a6e4b5bb86ad707a0863acff87344ca4239cfd2c (diff) | |
download | servo-980c644a8387fd257b06dcebf152fbd4c3386aef.tar.gz servo-980c644a8387fd257b06dcebf152fbd4c3386aef.zip |
Make URLSearchParams iterable.
Fixes #13022.
Fixes #13077.
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/urlsearchparams.rs | 25 | ||||
-rw-r--r-- | components/script/dom/webidls/URLSearchParams.webidl | 3 |
2 files changed, 24 insertions, 4 deletions
diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs index 2718f278dc3..b6ecd069b8c 100644 --- a/components/script/dom/urlsearchparams.rs +++ b/components/script/dom/urlsearchparams.rs @@ -3,10 +3,11 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::cell::DOMRefCell; -use dom::bindings::codegen::Bindings::URLSearchParamsBinding; use dom::bindings::codegen::Bindings::URLSearchParamsBinding::URLSearchParamsMethods; +use dom::bindings::codegen::Bindings::URLSearchParamsBinding::URLSearchParamsWrap; use dom::bindings::codegen::UnionTypes::USVStringOrURLSearchParams; use dom::bindings::error::Fallible; +use dom::bindings::iterable::Iterable; use dom::bindings::js::Root; use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::bindings::str::{DOMString, USVString}; @@ -37,7 +38,7 @@ impl URLSearchParams { pub fn new(global: &GlobalScope, url: Option<&URL>) -> Root<URLSearchParams> { reflect_dom_object(box URLSearchParams::new_inherited(url), global, - URLSearchParamsBinding::Wrap) + URLSearchParamsWrap) } // https://url.spec.whatwg.org/#dom-urlsearchparams-urlsearchparams @@ -163,3 +164,23 @@ impl URLSearchParams { } } } + + +impl Iterable for URLSearchParams { + type Key = USVString; + type Value = USVString; + + fn get_iterable_length(&self) -> u32 { + self.list.borrow().len() as u32 + } + + fn get_value_at_index(&self, n: u32) -> USVString { + let value = self.list.borrow()[n as usize].1.clone(); + USVString(value) + } + + fn get_key_at_index(&self, n: u32) -> USVString { + let key = self.list.borrow()[n as usize].0.clone(); + USVString(key) + } +} diff --git a/components/script/dom/webidls/URLSearchParams.webidl b/components/script/dom/webidls/URLSearchParams.webidl index dbd41fb9c5e..1012f1bded5 100644 --- a/components/script/dom/webidls/URLSearchParams.webidl +++ b/components/script/dom/webidls/URLSearchParams.webidl @@ -16,7 +16,6 @@ interface URLSearchParams { void set(USVString name, USVString value); // Be careful with implementing iterable interface. // Search params might be mutated by URL::SetSearch while iterating (discussed in PR #10351). - // iterable<USVString, USVString>; + iterable<USVString, USVString>; stringifier; }; - |