mirror of
https://github.com/servo/servo.git
synced 2025-07-02 21:13:39 +01:00
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 -->
This commit is contained in:
commit
b1c5b91820
4 changed files with 67 additions and 4 deletions
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue