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 checks on Location setters #23670
Changes from all commits
9845249
3c8df69
97e967c
3f2abcc
6c31813
05f7547
File filter...
Jump to…
| @@ -140,7 +140,10 @@ impl LocationMethods for Location { | ||
| // https://html.spec.whatwg.org/multipage/#dom-location-host | ||
| fn SetHost(&self, value: USVString) -> ErrorResult { | ||
| self.check_same_origin_domain()?; | ||
| self.set_url_component(value, UrlHelper::SetHost); | ||
| // If copyURL's cannot-be-a-base-URL flag is set, terminate these steps. | ||
|
||
| if !self.get_url().cannot_be_a_base() { | ||
| self.set_url_component(value, UrlHelper::SetHost); | ||
| } | ||
| Ok(()) | ||
| } | ||
|
|
||
| @@ -159,7 +162,10 @@ impl LocationMethods for Location { | ||
| // https://html.spec.whatwg.org/multipage/#dom-location-hostname | ||
| fn SetHostname(&self, value: USVString) -> ErrorResult { | ||
| self.check_same_origin_domain()?; | ||
| self.set_url_component(value, UrlHelper::SetHostname); | ||
| // If copyURL's cannot-be-a-base-URL flag is set, terminate these steps. | ||
| if !self.get_url().cannot_be_a_base() { | ||
| self.set_url_component(value, UrlHelper::SetHostname); | ||
| } | ||
| Ok(()) | ||
| } | ||
|
|
||
| @@ -191,7 +197,10 @@ impl LocationMethods for Location { | ||
| // https://html.spec.whatwg.org/multipage/#dom-location-pathname | ||
| fn SetPathname(&self, value: USVString) -> ErrorResult { | ||
| self.check_same_origin_domain()?; | ||
| self.set_url_component(value, UrlHelper::SetPathname); | ||
| // If copyURL's cannot-be-a-base-URL flag is set, terminate these steps. | ||
| if !self.get_url().cannot_be_a_base() { | ||
| self.set_url_component(value, UrlHelper::SetPathname); | ||
| } | ||
| Ok(()) | ||
| } | ||
|
|
||
| @@ -204,7 +213,12 @@ impl LocationMethods for Location { | ||
| // https://html.spec.whatwg.org/multipage/#dom-location-port | ||
| fn SetPort(&self, value: USVString) -> ErrorResult { | ||
| self.check_same_origin_domain()?; | ||
| self.set_url_component(value, UrlHelper::SetPort); | ||
| let url = self.get_url(); | ||
| // If copyURL cannot have a username/password/port, then return. | ||
gterzian
Member
|
||
| // https://url.spec.whatwg.org/#cannot-have-a-username-password-port | ||
| if url.has_host() && !url.cannot_be_a_base() && url.scheme() != "file" { | ||
| self.set_url_component(value, UrlHelper::SetPort); | ||
| } | ||
| Ok(()) | ||
| } | ||
|
|
||
| @@ -217,7 +231,11 @@ impl LocationMethods for Location { | ||
| // https://html.spec.whatwg.org/multipage/#dom-location-protocol | ||
| fn SetProtocol(&self, value: USVString) -> ErrorResult { | ||
| self.check_same_origin_domain()?; | ||
| self.set_url_component(value, UrlHelper::SetProtocol); | ||
| // If copyURL's scheme is not an HTTP(S) scheme, then terminate these steps. | ||
| let scheme = value.split(':').next().unwrap(); | ||
| if scheme.eq_ignore_ascii_case("http") || scheme.eq_ignore_ascii_case("https") { | ||
gterzian
Member
|
||
| self.set_url_component(value, UrlHelper::SetProtocol); | ||
| } | ||
| Ok(()) | ||
| } | ||
|
|
||
This file was deleted.
Can you add a comment "Step 4" to this, to make it easy to follow the code wrt the spec? (This applies to the other setters too.) Apart from that, looks great!