Implement DedicatedWorkerGlobalScope.navigator.

This commit is contained in:
Ms2ger 2014-08-13 18:11:22 +02:00
parent f300e146b0
commit eadb1c154a
19 changed files with 87 additions and 73 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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));

View file

@ -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_
}
}

View file

@ -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;

View file

@ -163,6 +163,7 @@ var interfaceNamesInGlobalScope = [
"Window",
"Worker",
"WorkerGlobalScope", // #2823
"WorkerNavigator", // #2823
"XMLHttpRequest",
"XMLHttpRequestUpload",
];

View file

@ -1,6 +0,0 @@
[WorkerNavigator_appName.htm]
type: testharness
expected: TIMEOUT
[Test Description: WorkerNavigator appName: Returns the name of the browser.]
expected: NOTRUN

View file

@ -1,6 +0,0 @@
[WorkerNavigator_appVersion.htm]
type: testharness
expected: TIMEOUT
[Test Description: WorkerNavigator appVersion: Returns the version of the browser.]
expected: NOTRUN

View file

@ -1,6 +0,0 @@
[WorkerNavigator_onLine.htm]
type: testharness
expected: TIMEOUT
[Test Description: WorkerNavigator implements NavigatorOnLine.]
expected: NOTRUN

View file

@ -1,6 +0,0 @@
[WorkerNavigator_platform.htm]
type: testharness
expected: TIMEOUT
[Test Description: WorkerNavigator.platform returns the name of the platform: ]
expected: NOTRUN

View file

@ -1,6 +0,0 @@
[WorkerNavigator_userAgent.htm]
type: testharness
expected: TIMEOUT
[Test Description: WorkerNavigator.userAgent returns the complete User-Agent header: undefined]
expected: NOTRUN

View file

@ -1,6 +0,0 @@
[002.html]
type: testharness
expected: TIMEOUT
[navigator.appName]
expected: TIMEOUT

View file

@ -1,6 +0,0 @@
[003.html]
type: testharness
expected: TIMEOUT
[navigator.appVersion]
expected: TIMEOUT

View file

@ -1,6 +0,0 @@
[004.html]
type: testharness
expected: TIMEOUT
[navigator.platform]
expected: TIMEOUT

View file

@ -1,6 +0,0 @@
[005.html]
type: testharness
expected: TIMEOUT
[navigator.userAgent]
expected: TIMEOUT

View file

@ -1,6 +0,0 @@
[006.html]
type: testharness
expected: TIMEOUT
[navigator.onLine]
expected: TIMEOUT

View file

@ -1,6 +1,5 @@
[007.html]
type: testharness
expected: TIMEOUT
[readonlyness of members of Navigator]
expected: TIMEOUT
expected: FAIL

View file

@ -1,6 +0,0 @@
[language.html]
type: testharness
expected: TIMEOUT
[navigator.language]
expected: TIMEOUT

View file

@ -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