aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-08-13 18:11:22 +0200
committerMs2ger <ms2ger@gmail.com>2014-08-15 09:43:37 +0200
commiteadb1c154a9ec3de1aedf11a35cdc797605f7f0c (patch)
tree5e5e2f44f7f9f1da594b2f4568a362ccbe41ca5d /src/components/script
parentf300e146b0ccd6207705826dbefb1bdc6e1e0987 (diff)
downloadservo-eadb1c154a9ec3de1aedf11a35cdc797605f7f0c.tar.gz
servo-eadb1c154a9ec3de1aedf11a35cdc797605f7f0c.zip
Implement DedicatedWorkerGlobalScope.navigator.
Diffstat (limited to 'src/components/script')
-rw-r--r--src/components/script/dom/webidls/WorkerGlobalScope.webidl6
-rw-r--r--src/components/script/dom/webidls/WorkerNavigator.webidl11
-rw-r--r--src/components/script/dom/workerglobalscope.rs11
-rw-r--r--src/components/script/dom/workernavigator.rs58
-rw-r--r--src/components/script/script.rs1
5 files changed, 83 insertions, 4 deletions
diff --git a/src/components/script/dom/webidls/WorkerGlobalScope.webidl b/src/components/script/dom/webidls/WorkerGlobalScope.webidl
index a8e3b92d193..59319410f4d 100644
--- a/src/components/script/dom/webidls/WorkerGlobalScope.webidl
+++ b/src/components/script/dom/webidls/WorkerGlobalScope.webidl
@@ -13,15 +13,13 @@ interface WorkerGlobalScope : EventTarget {
// attribute EventHandler onlanguagechange;
// attribute EventHandler onoffline;
// attribute EventHandler ononline;
-
- // also has obsolete members
};
// http://www.whatwg.org/html/#WorkerGlobalScope-partial
//[Exposed=Worker]
-partial interface WorkerGlobalScope {
+partial interface WorkerGlobalScope { // not obsolete
//void importScripts(DOMString... urls);
- //readonly attribute WorkerNavigator navigator;
+ readonly attribute WorkerNavigator navigator;
};
//WorkerGlobalScope implements WindowTimers;
//WorkerGlobalScope implements WindowBase64;
diff --git a/src/components/script/dom/webidls/WorkerNavigator.webidl b/src/components/script/dom/webidls/WorkerNavigator.webidl
new file mode 100644
index 00000000000..aa8e19342e4
--- /dev/null
+++ b/src/components/script/dom/webidls/WorkerNavigator.webidl
@@ -0,0 +1,11 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+// http://www.whatwg.org/html/#workernavigator
+//[Exposed=Worker]
+interface WorkerNavigator {};
+WorkerNavigator implements NavigatorID;
+//WorkerNavigator implements NavigatorLanguage;
+//WorkerNavigator implements NavigatorOnLine;
diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs
index 3123c05338d..a4271d52033 100644
--- a/src/components/script/dom/workerglobalscope.rs
+++ b/src/components/script/dom/workerglobalscope.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::{JS, JSRef, Temporary, OptionalSettable};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::console::Console;
use dom::eventtarget::{EventTarget, WorkerGlobalScopeTypeId};
+use dom::workernavigator::WorkerNavigator;
use script_task::ScriptChan;
use servo_net::resource_task::ResourceTask;
@@ -32,6 +33,7 @@ pub struct WorkerGlobalScope {
js_context: Untraceable<Rc<Cx>>,
resource_task: Untraceable<ResourceTask>,
script_chan: ScriptChan,
+ navigator: Cell<Option<JS<WorkerNavigator>>>,
console: Cell<Option<JS<Console>>>,
}
@@ -47,6 +49,7 @@ impl WorkerGlobalScope {
js_context: Untraceable::new(cx),
resource_task: Untraceable::new(resource_task),
script_chan: script_chan,
+ navigator: Cell::new(None),
console: Cell::new(None),
}
}
@@ -73,6 +76,14 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> {
Temporary::from_rooted(self)
}
+ fn Navigator(&self) -> Temporary<WorkerNavigator> {
+ if self.navigator.get().is_none() {
+ let navigator = WorkerNavigator::new(self);
+ self.navigator.assign(Some(navigator));
+ }
+ Temporary::new(self.navigator.get().get_ref().clone())
+ }
+
fn Console(&self) -> Temporary<Console> {
if self.console.get().is_none() {
let console = Console::new(&global::Worker(*self));
diff --git a/src/components/script/dom/workernavigator.rs b/src/components/script/dom/workernavigator.rs
new file mode 100644
index 00000000000..e732696617d
--- /dev/null
+++ b/src/components/script/dom/workernavigator.rs
@@ -0,0 +1,58 @@
+/* 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 dom::bindings::codegen::Bindings::WorkerNavigatorBinding;
+use dom::bindings::codegen::Bindings::WorkerNavigatorBinding::WorkerNavigatorMethods;
+use dom::bindings::global::Worker;
+use dom::bindings::js::{JSRef, Temporary};
+use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
+use dom::workerglobalscope::WorkerGlobalScope;
+use servo_util::str::DOMString;
+
+#[deriving(Encodable)]
+pub struct WorkerNavigator {
+ reflector_: Reflector,
+}
+
+impl WorkerNavigator {
+ pub fn new_inherited() -> WorkerNavigator {
+ WorkerNavigator {
+ reflector_: Reflector::new(),
+ }
+ }
+
+ pub fn new(global: &JSRef<WorkerGlobalScope>) -> Temporary<WorkerNavigator> {
+ reflect_dom_object(box WorkerNavigator::new_inherited(),
+ &Worker(*global),
+ WorkerNavigatorBinding::Wrap)
+ }
+}
+
+impl<'a> WorkerNavigatorMethods for JSRef<'a, WorkerNavigator> {
+ fn Product(&self) -> DOMString {
+ "Gecko".to_string()
+ }
+
+ fn TaintEnabled(&self) -> bool {
+ false
+ }
+
+ fn AppName(&self) -> DOMString {
+ "Netscape".to_string() // Like Gecko/Webkit
+ }
+
+ fn AppCodeName(&self) -> DOMString {
+ "Mozilla".to_string()
+ }
+
+ fn Platform(&self) -> DOMString {
+ "".to_string()
+ }
+}
+
+impl Reflectable for WorkerNavigator {
+ fn reflector<'a>(&'a self) -> &'a Reflector {
+ &self.reflector_
+ }
+}
diff --git a/src/components/script/script.rs b/src/components/script/script.rs
index 0756d48ff3b..8dd5e23c1c1 100644
--- a/src/components/script/script.rs
+++ b/src/components/script/script.rs
@@ -191,6 +191,7 @@ pub mod dom {
pub mod window;
pub mod worker;
pub mod workerglobalscope;
+ pub mod workernavigator;
pub mod xmlhttprequest;
pub mod xmlhttprequesteventtarget;
pub mod xmlhttprequestupload;