diff options
Diffstat (limited to 'components/script/dom/workernavigator.rs')
-rw-r--r-- | components/script/dom/workernavigator.rs | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/components/script/dom/workernavigator.rs b/components/script/dom/workernavigator.rs index dafa3325b38..7f7b656068f 100644 --- a/components/script/dom/workernavigator.rs +++ b/components/script/dom/workernavigator.rs @@ -1,22 +1,26 @@ /* 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::js::{MutNullableJS, Root}; -use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; -use dom::bindings::str::DOMString; -use dom::navigatorinfo; -use dom::permissions::Permissions; -use dom::workerglobalscope::WorkerGlobalScope; + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::codegen::Bindings::WorkerNavigatorBinding::WorkerNavigatorMethods; +use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector}; +use crate::dom::bindings::root::{DomRoot, MutNullableDom}; +use crate::dom::bindings::str::DOMString; +use crate::dom::bindings::utils::to_frozen_array; +use crate::dom::gpu::GPU; +use crate::dom::navigatorinfo; +use crate::dom::permissions::Permissions; +use crate::dom::workerglobalscope::WorkerGlobalScope; +use crate::script_runtime::JSContext; use dom_struct::dom_struct; +use js::jsval::JSVal; // https://html.spec.whatwg.org/multipage/#workernavigator #[dom_struct] pub struct WorkerNavigator { reflector_: Reflector, - permissions: MutNullableJS<Permissions>, + permissions: MutNullableDom<Permissions>, + gpu: MutNullableDom<GPU>, } impl WorkerNavigator { @@ -24,13 +28,12 @@ impl WorkerNavigator { WorkerNavigator { reflector_: Reflector::new(), permissions: Default::default(), + gpu: Default::default(), } } - pub fn new(global: &WorkerGlobalScope) -> Root<WorkerNavigator> { - reflect_dom_object(box WorkerNavigator::new_inherited(), - global, - WorkerNavigatorBinding::Wrap) + pub fn new(global: &WorkerGlobalScope) -> DomRoot<WorkerNavigator> { + reflect_dom_object(Box::new(WorkerNavigator::new_inherited()), global) } } @@ -40,6 +43,21 @@ impl WorkerNavigatorMethods for WorkerNavigator { navigatorinfo::Product() } + // https://html.spec.whatwg.org/multipage/#dom-navigator-productsub + fn ProductSub(&self) -> DOMString { + navigatorinfo::ProductSub() + } + + // https://html.spec.whatwg.org/multipage/#dom-navigator-vendor + fn Vendor(&self) -> DOMString { + navigatorinfo::Vendor() + } + + // https://html.spec.whatwg.org/multipage/#dom-navigator-vendorsub + fn VendorSub(&self) -> DOMString { + navigatorinfo::VendorSub() + } + // https://html.spec.whatwg.org/multipage/#dom-navigator-taintenabled fn TaintEnabled(&self) -> bool { navigatorinfo::TaintEnabled() @@ -62,7 +80,7 @@ impl WorkerNavigatorMethods for WorkerNavigator { // https://html.spec.whatwg.org/multipage/#dom-navigator-useragent fn UserAgent(&self) -> DOMString { - navigatorinfo::UserAgent() + navigatorinfo::UserAgent(self.global().get_user_agent()) } // https://html.spec.whatwg.org/multipage/#dom-navigator-appversion @@ -75,8 +93,20 @@ impl WorkerNavigatorMethods for WorkerNavigator { navigatorinfo::Language() } + // https://html.spec.whatwg.org/multipage/#dom-navigator-languages + #[allow(unsafe_code)] + fn Languages(&self, cx: JSContext) -> JSVal { + to_frozen_array(&[self.Language()], cx) + } + // https://w3c.github.io/permissions/#navigator-and-workernavigator-extension - fn Permissions(&self) -> Root<Permissions> { - self.permissions.or_init(|| Permissions::new(&self.global())) + fn Permissions(&self) -> DomRoot<Permissions> { + self.permissions + .or_init(|| Permissions::new(&self.global())) + } + + // https://gpuweb.github.io/gpuweb/#dom-navigator-gpu + fn Gpu(&self) -> DomRoot<GPU> { + self.gpu.or_init(|| GPU::new(&self.global())) } } |