New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement URL.searchParams #10351
Implement URL.searchParams #10351
Changes from all commits
File filter...
Jump to…
Implement URL.searchParams
- Loading branch information
| @@ -6,11 +6,13 @@ use dom::bindings::cell::DOMRefCell; | ||
| use dom::bindings::codegen::Bindings::URLBinding::{self, URLMethods}; | ||
| use dom::bindings::error::{Error, ErrorResult, Fallible}; | ||
| use dom::bindings::global::GlobalRef; | ||
| use dom::bindings::js::Root; | ||
| use dom::bindings::reflector::{Reflector, reflect_dom_object}; | ||
| use dom::bindings::js::{JS, MutNullableHeap, Root}; | ||
| use dom::bindings::reflector::{Reflectable, Reflector, reflect_dom_object}; | ||
| use dom::bindings::str::USVString; | ||
| use dom::urlhelper::UrlHelper; | ||
| use dom::urlsearchparams::URLSearchParams; | ||
| use std::borrow::ToOwned; | ||
| use std::default::Default; | ||
| use url::{Host, ParseResult, Url, UrlParser}; | ||
| use util::str::DOMString; | ||
|
|
||
| @@ -24,6 +26,9 @@ pub struct URL { | ||
|
|
||
| // https://url.spec.whatwg.org/#concept-urlutils-get-the-base | ||
| base: Option<Url>, | ||
|
|
||
| // https://url.spec.whatwg.org/#dom-url-searchparams | ||
| search_params: MutNullableHeap<JS<URLSearchParams>>, | ||
| } | ||
|
|
||
| impl URL { | ||
| @@ -32,13 +37,18 @@ impl URL { | ||
| reflector_: Reflector::new(), | ||
| url: DOMRefCell::new(url), | ||
| base: base, | ||
| search_params: Default::default(), | ||
| } | ||
| } | ||
|
|
||
| pub fn new(global: GlobalRef, url: Url, base: Option<Url>) -> Root<URL> { | ||
| reflect_dom_object(box URL::new_inherited(url, base), | ||
| global, URLBinding::Wrap) | ||
| } | ||
|
|
||
| pub fn set_query(&self, query: String) { | ||
| self.url.borrow_mut().query = Some(query); | ||
| } | ||
| } | ||
|
|
||
| impl URL { | ||
| @@ -69,8 +79,13 @@ impl URL { | ||
| return Err(Error::Type(format!("could not parse URL: {}", error))); | ||
| } | ||
| }; | ||
| // Steps 5-8. | ||
| Ok(URL::new(global, parsed_url, parsed_base)) | ||
| // Step 5: Skip (see step 8 below). | ||
| // Steps 6-7. | ||
| let result = URL::new(global, parsed_url, parsed_base); | ||
| // Step 8: Instead of construcing a new `URLSearchParams` object here, construct it | ||
| // on-demand inside `URL::SearchParams`. | ||
| // Step 9. | ||
| Ok(result) | ||
| } | ||
|
|
||
| // https://url.spec.whatwg.org/#dom-url-domaintoasciidomain | ||
| @@ -189,6 +204,14 @@ impl URLMethods for URL { | ||
| // https://url.spec.whatwg.org/#dom-url-search | ||
| fn SetSearch(&self, value: USVString) { | ||
| UrlHelper::SetSearch(&mut self.url.borrow_mut(), value); | ||
stjepang
Author
Contributor
|
||
| if let Some(search_params) = self.search_params.get() { | ||
| search_params.set_list(self.url.borrow().query_pairs().unwrap_or_else(|| vec![])); | ||
| } | ||
| } | ||
|
|
||
| // https://url.spec.whatwg.org/#dom-url-searchparams | ||
| fn SearchParams(&self) -> Root<URLSearchParams> { | ||
| self.search_params.or_init(|| URLSearchParams::new(self.global().r(), Some(self))) | ||
| } | ||
|
|
||
| // https://url.spec.whatwg.org/#dom-url-href | ||
All the setters should update the stored query object if we're going to store it as a field.