Skip to content

Commit

Permalink
Share code between Navigator and WorkerNavigator
Browse files Browse the repository at this point in the history
Also shares code between Location and WorkerLocation. This has been done
by introducing NavigatorInfo and UrlHelper.

Fixes #3159
  • Loading branch information
gilles-leblanc committed Sep 20, 2014
1 parent de67710 commit 652d217
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 32 deletions.
15 changes: 4 additions & 11 deletions components/script/dom/location.rs
Expand Up @@ -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;

Expand Down Expand Up @@ -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())
}
}

Expand Down
11 changes: 6 additions & 5 deletions components/script/dom/navigator.rs
Expand Up @@ -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;

Expand All @@ -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()
}
}

Expand Down
29 changes: 29 additions & 0 deletions 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()
}
}
30 changes: 30 additions & 0 deletions 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())
}
}
}
15 changes: 4 additions & 11 deletions components/script/dom/workerlocation.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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())
}
}

Expand Down
11 changes: 6 additions & 5 deletions components/script/dom/workernavigator.rs
Expand Up @@ -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;

Expand All @@ -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()
}
}

Expand Down
2 changes: 2 additions & 0 deletions components/script/lib.rs
Expand Up @@ -173,6 +173,7 @@ pub mod dom {
pub mod mouseevent;
pub mod namednodemap;
pub mod navigator;
pub mod navigatorinfo;
pub mod node;
pub mod nodeiterator;
pub mod nodelist;
Expand All @@ -185,6 +186,7 @@ pub mod dom {
pub mod text;
pub mod treewalker;
pub mod uievent;
pub mod urlhelper;
pub mod urlsearchparams;
pub mod validitystate;
pub mod virtualmethods;
Expand Down

0 comments on commit 652d217

Please sign in to comment.