diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-10-07 11:10:01 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-07 11:10:01 -0500 |
commit | b1c5b9182003cf56b0953a6a1aa01f47b49d3f14 (patch) | |
tree | a278cb4409e4c82e2f73e9e95dd36cc262a9c513 /components/script/dom | |
parent | 86f31d0dc7d94f5c836380e22f2cdf0411dcb2a1 (diff) | |
parent | 980c644a8387fd257b06dcebf152fbd4c3386aef (diff) | |
download | servo-b1c5b9182003cf56b0953a6a1aa01f47b49d3f14.tar.gz servo-b1c5b9182003cf56b0953a6a1aa01f47b49d3f14.zip |
Auto merge of #13637 - servo:URLSearchParams, r=emilio
Make URLSearchParams iterable.
Fixes #13022.
Fixes #13077.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13637)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-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; }; - |