diff options
author | Gilles Leblanc <gilles.leblanc@gmail.com> | 2014-09-20 08:51:35 -0400 |
---|---|---|
committer | Gilles Leblanc <gilles.leblanc@gmail.com> | 2014-09-20 08:51:35 -0400 |
commit | 652d21796150631f3cbb6c00089415b1f83acc3c (patch) | |
tree | ce1d17e575db42e5d63cb09151afcf8ce5bbd85a /components/script/dom | |
parent | de67710934ac89de0cf21911dc57dcda7cb0fae1 (diff) | |
download | servo-652d21796150631f3cbb6c00089415b1f83acc3c.tar.gz servo-652d21796150631f3cbb6c00089415b1f83acc3c.zip |
Share code between Navigator and WorkerNavigator
Also shares code between Location and WorkerLocation. This has been done
by introducing NavigatorInfo and UrlHelper.
Fixes #3159
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/location.rs | 15 | ||||
-rw-r--r-- | components/script/dom/navigator.rs | 11 | ||||
-rw-r--r-- | components/script/dom/navigatorinfo.rs | 29 | ||||
-rw-r--r-- | components/script/dom/urlhelper.rs | 30 | ||||
-rw-r--r-- | components/script/dom/workerlocation.rs | 15 | ||||
-rw-r--r-- | components/script/dom/workernavigator.rs | 11 |
6 files changed, 79 insertions, 32 deletions
diff --git a/components/script/dom/location.rs b/components/script/dom/location.rs index 4a435a26b4d..8217c91e4f6 100644 --- a/components/script/dom/location.rs +++ b/components/script/dom/location.rs @@ -7,6 +7,7 @@ use dom::bindings::codegen::Bindings::LocationBinding::LocationMethods; use dom::bindings::global::Window; use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; +use dom::urlhelper::UrlHelper; use dom::window::Window; use page::Page; @@ -38,23 +39,15 @@ impl Location { impl<'a> LocationMethods for JSRef<'a, Location> { fn Href(&self) -> DOMString { - self.page.get_url().serialize() + UrlHelper::Href(&self.page.get_url()) } fn Search(&self) -> DOMString { - match self.page.get_url().query { - None => "".to_string(), - Some(ref query) if query.as_slice() == "" => "".to_string(), - Some(ref query) => "?".to_string().append(query.as_slice()) - } + UrlHelper::Search(&self.page.get_url()) } fn Hash(&self) -> DOMString { - match self.page.get_url().fragment { - None => "".to_string(), - Some(ref hash) if hash.as_slice() == "" => "".to_string(), - Some(ref hash) => "#".to_string().append(hash.as_slice()) - } + UrlHelper::Hash(&self.page.get_url()) } } diff --git a/components/script/dom/navigator.rs b/components/script/dom/navigator.rs index b4a0d98de0c..06b6c90f57b 100644 --- a/components/script/dom/navigator.rs +++ b/components/script/dom/navigator.rs @@ -7,6 +7,7 @@ use dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods; use dom::bindings::global::Window; use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; +use dom::navigatorinfo::NavigatorInfo; use dom::window::Window; use servo_util::str::DOMString; @@ -32,23 +33,23 @@ impl Navigator { impl<'a> NavigatorMethods for JSRef<'a, Navigator> { fn Product(&self) -> DOMString { - "Gecko".to_string() + NavigatorInfo::Product() } fn TaintEnabled(&self) -> bool { - false + NavigatorInfo::TaintEnabled() } fn AppName(&self) -> DOMString { - "Netscape".to_string() // Like Gecko/Webkit + NavigatorInfo::AppName() } fn AppCodeName(&self) -> DOMString { - "Mozilla".to_string() + NavigatorInfo::AppCodeName() } fn Platform(&self) -> DOMString { - "".to_string() + NavigatorInfo::Platform() } } diff --git a/components/script/dom/navigatorinfo.rs b/components/script/dom/navigatorinfo.rs new file mode 100644 index 00000000000..8832aca8697 --- /dev/null +++ b/components/script/dom/navigatorinfo.rs @@ -0,0 +1,29 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use servo_util::str::DOMString; + +pub struct NavigatorInfo; + +impl NavigatorInfo { + pub fn Product() -> DOMString { + "Gecko".to_string() + } + + pub fn TaintEnabled() -> bool { + false + } + + pub fn AppName() -> DOMString { + "Netscape".to_string() // Like Gecko/Webkit + } + + pub fn AppCodeName() -> DOMString { + "Mozilla".to_string() + } + + pub fn Platform() -> DOMString { + "".to_string() + } +} diff --git a/components/script/dom/urlhelper.rs b/components/script/dom/urlhelper.rs new file mode 100644 index 00000000000..7394a89cce7 --- /dev/null +++ b/components/script/dom/urlhelper.rs @@ -0,0 +1,30 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use servo_util::str::DOMString; +use url::Url; + +pub struct UrlHelper; + +impl UrlHelper { + pub fn Href(url: &Url) -> DOMString { + url.serialize() + } + + pub fn Search(url: &Url) -> DOMString { + match url.query { + None => "".to_string(), + Some(ref query) if query.as_slice() == "" => "".to_string(), + Some(ref query) => "?".to_string().append(query.as_slice()) + } + } + + pub fn Hash(url: &Url) -> DOMString { + match url.fragment { + None => "".to_string(), + Some(ref hash) if hash.as_slice() == "" => "".to_string(), + Some(ref hash) => "#".to_string().append(hash.as_slice()) + } + } +} diff --git a/components/script/dom/workerlocation.rs b/components/script/dom/workerlocation.rs index 05112c54a88..f8732a0f7ac 100644 --- a/components/script/dom/workerlocation.rs +++ b/components/script/dom/workerlocation.rs @@ -8,6 +8,7 @@ use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::global::Worker; use dom::bindings::trace::Untraceable; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; +use dom::urlhelper::UrlHelper; use dom::workerglobalscope::WorkerGlobalScope; use servo_util::str::DOMString; @@ -38,23 +39,15 @@ impl WorkerLocation { impl<'a> WorkerLocationMethods for JSRef<'a, WorkerLocation> { fn Href(&self) -> DOMString { - self.url.deref().serialize() + UrlHelper::Href(self.url.deref()) } fn Search(&self) -> DOMString { - match self.url.query { - None => "".to_string(), - Some(ref query) if query.as_slice() == "" => "".to_string(), - Some(ref query) => "?".to_string().append(query.as_slice()) - } + UrlHelper::Search(self.url.deref()) } fn Hash(&self) -> DOMString { - match self.url.fragment { - None => "".to_string(), - Some(ref hash) if hash.as_slice() == "" => "".to_string(), - Some(ref hash) => "#".to_string().append(hash.as_slice()) - } + UrlHelper::Hash(self.url.deref()) } } diff --git a/components/script/dom/workernavigator.rs b/components/script/dom/workernavigator.rs index d17cccb13f3..37de1b91e65 100644 --- a/components/script/dom/workernavigator.rs +++ b/components/script/dom/workernavigator.rs @@ -7,6 +7,7 @@ use dom::bindings::codegen::Bindings::WorkerNavigatorBinding::WorkerNavigatorMet use dom::bindings::global::Worker; use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; +use dom::navigatorinfo::NavigatorInfo; use dom::workerglobalscope::WorkerGlobalScope; use servo_util::str::DOMString; @@ -32,23 +33,23 @@ impl WorkerNavigator { impl<'a> WorkerNavigatorMethods for JSRef<'a, WorkerNavigator> { fn Product(&self) -> DOMString { - "Gecko".to_string() + NavigatorInfo::Product() } fn TaintEnabled(&self) -> bool { - false + NavigatorInfo::TaintEnabled() } fn AppName(&self) -> DOMString { - "Netscape".to_string() // Like Gecko/Webkit + NavigatorInfo::AppName() } fn AppCodeName(&self) -> DOMString { - "Mozilla".to_string() + NavigatorInfo::AppCodeName() } fn Platform(&self) -> DOMString { - "".to_string() + NavigatorInfo::Platform() } } |