aboutsummaryrefslogtreecommitdiffstats
path: root/src
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
parentf300e146b0ccd6207705826dbefb1bdc6e1e0987 (diff)
downloadservo-eadb1c154a9ec3de1aedf11a35cdc797605f7f0c.tar.gz
servo-eadb1c154a9ec3de1aedf11a35cdc797605f7f0c.zip
Implement DedicatedWorkerGlobalScope.navigator.
Diffstat (limited to 'src')
-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
-rw-r--r--src/test/content/test_interfaces.html1
-rw-r--r--src/test/wpt/metadata/workers/WorkerNavigator_appName.htm.ini6
-rw-r--r--src/test/wpt/metadata/workers/WorkerNavigator_appVersion.htm.ini6
-rw-r--r--src/test/wpt/metadata/workers/WorkerNavigator_onLine.htm.ini6
-rw-r--r--src/test/wpt/metadata/workers/WorkerNavigator_platform.htm.ini6
-rw-r--r--src/test/wpt/metadata/workers/WorkerNavigator_userAgent.htm.ini6
-rw-r--r--src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/002.html.ini6
-rw-r--r--src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/003.html.ini6
-rw-r--r--src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/004.html.ini6
-rw-r--r--src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/005.html.ini6
-rw-r--r--src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/006.html.ini6
-rw-r--r--src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/007.html.ini3
-rw-r--r--src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/language.html.ini6
-rw-r--r--src/test/wpt/metadata/workers/postMessage_DataCloneErr.htm.ini3
19 files changed, 87 insertions, 73 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;
diff --git a/src/test/content/test_interfaces.html b/src/test/content/test_interfaces.html
index 735bb9d133f..aece7a09c25 100644
--- a/src/test/content/test_interfaces.html
+++ b/src/test/content/test_interfaces.html
@@ -163,6 +163,7 @@ var interfaceNamesInGlobalScope = [
"Window",
"Worker",
"WorkerGlobalScope", // #2823
+ "WorkerNavigator", // #2823
"XMLHttpRequest",
"XMLHttpRequestUpload",
];
diff --git a/src/test/wpt/metadata/workers/WorkerNavigator_appName.htm.ini b/src/test/wpt/metadata/workers/WorkerNavigator_appName.htm.ini
deleted file mode 100644
index 46583ce0c70..00000000000
--- a/src/test/wpt/metadata/workers/WorkerNavigator_appName.htm.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[WorkerNavigator_appName.htm]
- type: testharness
- expected: TIMEOUT
- [Test Description: WorkerNavigator appName: Returns the name of the browser.]
- expected: NOTRUN
-
diff --git a/src/test/wpt/metadata/workers/WorkerNavigator_appVersion.htm.ini b/src/test/wpt/metadata/workers/WorkerNavigator_appVersion.htm.ini
deleted file mode 100644
index 4ad4225be9a..00000000000
--- a/src/test/wpt/metadata/workers/WorkerNavigator_appVersion.htm.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[WorkerNavigator_appVersion.htm]
- type: testharness
- expected: TIMEOUT
- [Test Description: WorkerNavigator appVersion: Returns the version of the browser.]
- expected: NOTRUN
-
diff --git a/src/test/wpt/metadata/workers/WorkerNavigator_onLine.htm.ini b/src/test/wpt/metadata/workers/WorkerNavigator_onLine.htm.ini
deleted file mode 100644
index b590abc05fe..00000000000
--- a/src/test/wpt/metadata/workers/WorkerNavigator_onLine.htm.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[WorkerNavigator_onLine.htm]
- type: testharness
- expected: TIMEOUT
- [Test Description: WorkerNavigator implements NavigatorOnLine.]
- expected: NOTRUN
-
diff --git a/src/test/wpt/metadata/workers/WorkerNavigator_platform.htm.ini b/src/test/wpt/metadata/workers/WorkerNavigator_platform.htm.ini
deleted file mode 100644
index 0ee3e699b21..00000000000
--- a/src/test/wpt/metadata/workers/WorkerNavigator_platform.htm.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[WorkerNavigator_platform.htm]
- type: testharness
- expected: TIMEOUT
- [Test Description: WorkerNavigator.platform returns the name of the platform: ]
- expected: NOTRUN
-
diff --git a/src/test/wpt/metadata/workers/WorkerNavigator_userAgent.htm.ini b/src/test/wpt/metadata/workers/WorkerNavigator_userAgent.htm.ini
deleted file mode 100644
index 65567ef00e5..00000000000
--- a/src/test/wpt/metadata/workers/WorkerNavigator_userAgent.htm.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[WorkerNavigator_userAgent.htm]
- type: testharness
- expected: TIMEOUT
- [Test Description: WorkerNavigator.userAgent returns the complete User-Agent header: undefined]
- expected: NOTRUN
-
diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/002.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/002.html.ini
deleted file mode 100644
index c824aafd828..00000000000
--- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/002.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[002.html]
- type: testharness
- expected: TIMEOUT
- [navigator.appName]
- expected: TIMEOUT
-
diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/003.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/003.html.ini
deleted file mode 100644
index fb74e3df8b5..00000000000
--- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/003.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[003.html]
- type: testharness
- expected: TIMEOUT
- [navigator.appVersion]
- expected: TIMEOUT
-
diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/004.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/004.html.ini
deleted file mode 100644
index 5ba6f832de5..00000000000
--- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/004.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[004.html]
- type: testharness
- expected: TIMEOUT
- [navigator.platform]
- expected: TIMEOUT
-
diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/005.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/005.html.ini
deleted file mode 100644
index 305cb589f0f..00000000000
--- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/005.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[005.html]
- type: testharness
- expected: TIMEOUT
- [navigator.userAgent]
- expected: TIMEOUT
-
diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/006.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/006.html.ini
deleted file mode 100644
index f9cfeac680a..00000000000
--- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/006.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[006.html]
- type: testharness
- expected: TIMEOUT
- [navigator.onLine]
- expected: TIMEOUT
-
diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/007.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/007.html.ini
index 0e2181f29bb..da00d503cb8 100644
--- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/007.html.ini
+++ b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/007.html.ini
@@ -1,6 +1,5 @@
[007.html]
type: testharness
- expected: TIMEOUT
[readonlyness of members of Navigator]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/language.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/language.html.ini
deleted file mode 100644
index 8cef0756896..00000000000
--- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/navigator/language.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[language.html]
- type: testharness
- expected: TIMEOUT
- [navigator.language]
- expected: TIMEOUT
-
diff --git a/src/test/wpt/metadata/workers/postMessage_DataCloneErr.htm.ini b/src/test/wpt/metadata/workers/postMessage_DataCloneErr.htm.ini
index 2229d7b59be..146975d6206 100644
--- a/src/test/wpt/metadata/workers/postMessage_DataCloneErr.htm.ini
+++ b/src/test/wpt/metadata/workers/postMessage_DataCloneErr.htm.ini
@@ -1,5 +1,6 @@
[postMessage_DataCloneErr.htm]
type: testharness
+ expected: TIMEOUT
[Test Description: Throw a DATA_CLONE_ERR exception when a host object (e.g. a DOM node) is used with postMessage.]
- expected: FAIL
+ expected: NOTRUN