aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/urlhelper.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/urlhelper.rs')
-rw-r--r--components/script/dom/urlhelper.rs71
1 files changed, 57 insertions, 14 deletions
diff --git a/components/script/dom/urlhelper.rs b/components/script/dom/urlhelper.rs
index d1930734f5c..4b2f2010fbf 100644
--- a/components/script/dom/urlhelper.rs
+++ b/components/script/dom/urlhelper.rs
@@ -7,24 +7,11 @@ use dom::bindings::str::USVString;
use url::{Url, SchemeData};
use std::borrow::ToOwned;
+use std::fmt::Write;
pub struct UrlHelper;
impl UrlHelper {
- // https://url.spec.whatwg.org/#dom-urlutils-href
- pub fn Href(url: &Url) -> USVString {
- USVString(url.serialize())
- }
-
- // https://url.spec.whatwg.org/#dom-urlutils-search
- pub fn Search(url: &Url) -> USVString {
- USVString(match url.query {
- None => "".to_owned(),
- Some(ref query) if query.is_empty() => "".to_owned(),
- Some(ref query) => format!("?{}", query)
- })
- }
-
// https://url.spec.whatwg.org/#dom-urlutils-hash
pub fn Hash(url: &Url) -> USVString {
USVString(match url.fragment {
@@ -34,6 +21,35 @@ impl UrlHelper {
})
}
+ // https://url.spec.whatwg.org/#dom-urlutils-host
+ pub fn Host(url: &Url) -> USVString {
+ USVString(match url.scheme_data {
+ SchemeData::NonRelative(..) => "".to_owned(),
+ SchemeData::Relative(ref scheme_data) => {
+ let mut host = scheme_data.host.serialize();
+ if let Some(port) = scheme_data.port {
+ write!(host, ":{}", port).unwrap();
+ }
+ host
+ },
+ })
+ }
+
+ // https://url.spec.whatwg.org/#dom-urlutils-hostname
+ pub fn Hostname(url: &Url) -> USVString {
+ USVString(url.serialize_host().unwrap_or_else(|| "".to_owned()))
+ }
+
+ // https://url.spec.whatwg.org/#dom-urlutils-href
+ pub fn Href(url: &Url) -> USVString {
+ USVString(url.serialize())
+ }
+
+ // https://url.spec.whatwg.org/#dom-urlutils-password
+ pub fn Password(url: &Url) -> USVString {
+ USVString(url.password().unwrap_or("").to_owned())
+ }
+
// https://url.spec.whatwg.org/#dom-urlutils-pathname
pub fn Pathname(url: &Url) -> USVString {
// FIXME: Url null check is skipped for now
@@ -43,6 +59,19 @@ impl UrlHelper {
})
}
+ // https://url.spec.whatwg.org/#dom-urlutils-port
+ pub fn Port(url: &Url) -> USVString {
+ USVString(match url.port() {
+ None => "".to_owned(),
+ Some(port) => port.to_string(),
+ })
+ }
+
+ // https://url.spec.whatwg.org/#dom-urlutils-protocol
+ pub fn Protocol(url: &Url) -> USVString {
+ USVString(format!("{}:", url.scheme.clone()))
+ }
+
// https://html.spec.whatwg.org/multipage/#same-origin
pub fn SameOrigin(urlA: &Url, urlB: &Url) -> bool {
if urlA.host() != urlB.host() {
@@ -56,4 +85,18 @@ impl UrlHelper {
}
return true
}
+
+ // https://url.spec.whatwg.org/#dom-urlutils-search
+ pub fn Search(url: &Url) -> USVString {
+ USVString(match url.query {
+ None => "".to_owned(),
+ Some(ref query) if query.is_empty() => "".to_owned(),
+ Some(ref query) => format!("?{}", query)
+ })
+ }
+
+ // https://url.spec.whatwg.org/#dom-urlutils-username
+ pub fn Username(url: &Url) -> USVString {
+ USVString(url.username().unwrap_or("").to_owned())
+ }
}