diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-08-13 18:11:22 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-08-15 09:43:37 +0200 |
commit | eadb1c154a9ec3de1aedf11a35cdc797605f7f0c (patch) | |
tree | 5e5e2f44f7f9f1da594b2f4568a362ccbe41ca5d /src | |
parent | f300e146b0ccd6207705826dbefb1bdc6e1e0987 (diff) | |
download | servo-eadb1c154a9ec3de1aedf11a35cdc797605f7f0c.tar.gz servo-eadb1c154a9ec3de1aedf11a35cdc797605f7f0c.zip |
Implement DedicatedWorkerGlobalScope.navigator.
Diffstat (limited to 'src')
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 |