Skip to content

Commit

Permalink
Implemented stub for NavigatorPlugins
Browse files Browse the repository at this point in the history
  • Loading branch information
cbrewster committed Apr 11, 2016
1 parent c56eb65 commit e83d29a
Show file tree
Hide file tree
Showing 13 changed files with 316 additions and 124 deletions.
36 changes: 36 additions & 0 deletions components/script/dom/mimetype.rs
@@ -0,0 +1,36 @@
/* 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::MimeTypeBinding::MimeTypeMethods;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector};
use dom::plugin::Plugin;
use util::str::DOMString;

#[dom_struct]
pub struct MimeType {
reflector_: Reflector,
}

impl MimeTypeMethods for MimeType {
// https://html.spec.whatwg.org/multipage/#dom-mimetype-type
fn Type(&self) -> DOMString {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-mimetype-description
fn Description(&self) -> DOMString {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-mimetype-suffixes
fn Suffixes(&self) -> DOMString {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-mimetype-enabledplugin
fn EnabledPlugin(&self) -> Root<Plugin> {
unreachable!()
}
}
62 changes: 62 additions & 0 deletions components/script/dom/mimetypearray.rs
@@ -0,0 +1,62 @@
/* 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::MimeTypeArrayBinding;
use dom::bindings::codegen::Bindings::MimeTypeArrayBinding::MimeTypeArrayMethods;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::mimetype::MimeType;
use util::str::DOMString;

#[dom_struct]
pub struct MimeTypeArray {
reflector_: Reflector,
}

impl MimeTypeArray {
pub fn new_inherited() -> MimeTypeArray {
MimeTypeArray {
reflector_: Reflector::new()
}
}

pub fn new(global: GlobalRef) -> Root<MimeTypeArray> {
reflect_dom_object(box MimeTypeArray::new_inherited(),
global,
MimeTypeArrayBinding::Wrap)
}
}

impl MimeTypeArrayMethods for MimeTypeArray {
// https://html.spec.whatwg.org/multipage/#dom-mimetypearray-length
fn Length(&self) -> u32 {
0
}

// https://html.spec.whatwg.org/multipage/#dom-mimetypearray-item
fn Item(&self, _index: u32) -> Option<Root<MimeType>> {
None
}

// https://html.spec.whatwg.org/multipage/#dom-mimetypearray-nameditem
fn NamedItem(&self, _name: DOMString) -> Option<Root<MimeType>> {
None
}

// https://html.spec.whatwg.org/multipage/#dom-mimetypearray-item
fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option<Root<MimeType>> {
None
}

// check-tidy: no specs after this line
fn NamedGetter(&self, _name: DOMString, _found: &mut bool) -> Option<Root<MimeType>> {
None
}

// https://heycam.github.io/webidl/#dfn-supported-property-names
fn SupportedPropertyNames(&self) -> Vec<DOMString> {
vec![]
}
}
4 changes: 4 additions & 0 deletions components/script/dom/mod.rs
Expand Up @@ -342,6 +342,8 @@ pub mod imagedata;
pub mod keyboardevent;
pub mod location;
pub mod messageevent;
pub mod mimetype;
pub mod mimetypearray;
pub mod mouseevent;
pub mod namednodemap;
pub mod navigator;
Expand All @@ -351,6 +353,8 @@ pub mod nodeiterator;
pub mod nodelist;
pub mod performance;
pub mod performancetiming;
pub mod plugin;
pub mod pluginarray;
pub mod processinginstruction;
pub mod progressevent;
pub mod radionodelist;
Expand Down
21 changes: 21 additions & 0 deletions components/script/dom/navigator.rs
Expand Up @@ -8,21 +8,27 @@ use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, MutNullableHeap, Root};
use dom::bindings::reflector::{Reflector, Reflectable, reflect_dom_object};
use dom::bluetooth::Bluetooth;
use dom::mimetypearray::MimeTypeArray;
use dom::navigatorinfo;
use dom::pluginarray::PluginArray;
use dom::window::Window;
use util::str::DOMString;

#[dom_struct]
pub struct Navigator {
reflector_: Reflector,
bluetooth: MutNullableHeap<JS<Bluetooth>>,
plugins: MutNullableHeap<JS<PluginArray>>,
mime_types: MutNullableHeap<JS<MimeTypeArray>>,
}

impl Navigator {
fn new_inherited() -> Navigator {
Navigator {
reflector_: Reflector::new(),
bluetooth: Default::default(),
plugins: Default::default(),
mime_types: Default::default(),
}
}

Expand Down Expand Up @@ -78,4 +84,19 @@ impl NavigatorMethods for Navigator {
fn Language(&self) -> DOMString {
navigatorinfo::Language()
}

// https://html.spec.whatwg.org/multipage/#dom-navigator-plugins
fn Plugins(&self) -> Root<PluginArray> {
self.plugins.or_init(|| PluginArray::new(self.global().r()))
}

// https://html.spec.whatwg.org/multipage/#dom-navigator-mimetypes
fn MimeTypes(&self) -> Root<MimeTypeArray> {
self.mime_types.or_init(|| MimeTypeArray::new(self.global().r()))
}

// https://html.spec.whatwg.org/multipage/#dom-navigator-javaenabled
fn JavaEnabled(&self) -> bool {
false
}
}
61 changes: 61 additions & 0 deletions components/script/dom/plugin.rs
@@ -0,0 +1,61 @@
/* 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::PluginBinding::PluginMethods;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector};
use dom::mimetype::MimeType;
use util::str::DOMString;

#[dom_struct]
pub struct Plugin {
reflector_: Reflector,
}

impl PluginMethods for Plugin {
// https://html.spec.whatwg.org/multipage/#dom-plugin-name
fn Name(&self) -> DOMString {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-plugin-description
fn Description(&self) -> DOMString {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-plugin-filename
fn Filename(&self) -> DOMString {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-plugin-length
fn Length(&self) -> u32 {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-plugin-item
fn Item(&self, _index: u32) -> Option<Root<MimeType>> {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-plugin-nameditem
fn NamedItem(&self, _name: DOMString) -> Option<Root<MimeType>> {
unreachable!()
}

// https://html.spec.whatwg.org/multipage/#dom-plugin-item
fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option<Root<MimeType>> {
unreachable!()
}

// check-tidy: no specs after this line
fn NamedGetter(&self, _name: DOMString, _found: &mut bool) -> Option<Root<MimeType>> {
unreachable!()
}

// https://heycam.github.io/webidl/#dfn-supported-property-names
fn SupportedPropertyNames(&self) -> Vec<DOMString> {
unreachable!()
}
}
67 changes: 67 additions & 0 deletions components/script/dom/pluginarray.rs
@@ -0,0 +1,67 @@
/* 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::PluginArrayBinding;
use dom::bindings::codegen::Bindings::PluginArrayBinding::PluginArrayMethods;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::plugin::Plugin;
use util::str::DOMString;

#[dom_struct]
pub struct PluginArray {
reflector_: Reflector,
}

impl PluginArray {
pub fn new_inherited() -> PluginArray {
PluginArray {
reflector_: Reflector::new()
}
}

pub fn new(global: GlobalRef) -> Root<PluginArray> {
reflect_dom_object(box PluginArray::new_inherited(),
global,
PluginArrayBinding::Wrap)
}
}

impl PluginArrayMethods for PluginArray {
// https://html.spec.whatwg.org/multipage/#dom-pluginarray-refresh
fn Refresh(&self, _reload: bool) {

}

// https://html.spec.whatwg.org/multipage/#dom-pluginarray-length
fn Length(&self) -> u32 {
0
}

// https://html.spec.whatwg.org/multipage/#dom-pluginarray-item
fn Item(&self, _index: u32) -> Option<Root<Plugin>> {
None
}

// https://html.spec.whatwg.org/multipage/#dom-pluginarray-nameditem
fn NamedItem(&self, _name: DOMString) -> Option<Root<Plugin>> {
None
}

// https://html.spec.whatwg.org/multipage/#dom-pluginarray-item
fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option<Root<Plugin>> {
None
}

// check-tidy: no specs after this line
fn NamedGetter(&self, _name: DOMString, _found: &mut bool) -> Option<Root<Plugin>> {
None
}

// https://heycam.github.io/webidl/#dfn-supported-property-names
fn SupportedPropertyNames(&self) -> Vec<DOMString> {
vec![]
}
}
12 changes: 12 additions & 0 deletions components/script/dom/webidls/MimeType.webidl
@@ -0,0 +1,12 @@
/* -*- 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/. */

// https://html.spec.whatwg.org/multipage/#mimetype
interface MimeType {
readonly attribute DOMString type;
readonly attribute DOMString description;
readonly attribute DOMString suffixes; // comma-separated
readonly attribute Plugin enabledPlugin;
};
12 changes: 12 additions & 0 deletions components/script/dom/webidls/MimeTypeArray.webidl
@@ -0,0 +1,12 @@
/* -*- 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/. */

// https://html.spec.whatwg.org/multipage/#mimetypearray
[LegacyUnenumerableNamedProperties]
interface MimeTypeArray {
readonly attribute unsigned long length;
getter MimeType? item(unsigned long index);
getter MimeType? namedItem(DOMString name);
};
10 changes: 9 additions & 1 deletion components/script/dom/webidls/Navigator.webidl
Expand Up @@ -13,7 +13,7 @@ Navigator implements NavigatorLanguage;
//Navigator implements NavigatorOnLine;
//Navigator implements NavigatorContentUtils;
//Navigator implements NavigatorStorageUtils;
//Navigator implements NavigatorPlugins;
Navigator implements NavigatorPlugins;

// https://html.spec.whatwg.org/multipage/#navigatorid
[NoInterfaceObject/*, Exposed=Window,Worker*/]
Expand All @@ -39,3 +39,11 @@ interface NavigatorLanguage {
// https://github.com/servo/servo/issues/10073
//readonly attribute DOMString[] languages;
};

// https://html.spec.whatwg.org/multipage/#navigatorplugins
[NoInterfaceObject]
interface NavigatorPlugins {
[SameObject] readonly attribute PluginArray plugins;
[SameObject] readonly attribute MimeTypeArray mimeTypes;
boolean javaEnabled();
};
15 changes: 15 additions & 0 deletions components/script/dom/webidls/Plugin.webidl
@@ -0,0 +1,15 @@
/* -*- 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/. */

// https://html.spec.whatwg.org/multipage/#dom-plugin
[LegacyUnenumerableNamedProperties]
interface Plugin {
readonly attribute DOMString name;
readonly attribute DOMString description;
readonly attribute DOMString filename;
readonly attribute unsigned long length;
getter MimeType? item(unsigned long index);
getter MimeType? namedItem(DOMString name);
};
13 changes: 13 additions & 0 deletions components/script/dom/webidls/PluginArray.webidl
@@ -0,0 +1,13 @@
/* -*- 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/. */

// https://html.spec.whatwg.org/multipage/#pluginarray
[LegacyUnenumerableNamedProperties]
interface PluginArray {
void refresh(optional boolean reload = false);
readonly attribute unsigned long length;
getter Plugin? item(unsigned long index);
getter Plugin? namedItem(DOMString name);
};

0 comments on commit e83d29a

Please sign in to comment.