Merge branch 'master' of git://github.com/rustwasm/wasm-bindgen

This commit is contained in:
Frazer McLean 2018-08-18 01:58:11 +02:00
commit 751f226170
218 changed files with 1311 additions and 2854 deletions

View File

@ -32,6 +32,23 @@ Released YYYY-MM-DD.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
## 0.2.17
Released 2018-08-16.
### Added
* Greatly expanded documentation in the wasm-bindgen guide.
* Added bindings to `js-sys` for `Intl.DateTimeFormat`
* Added a number of `extends` attributes for types in `js-sys`
### Fixed
* Fixed compile on latest nightly with latest `proc-macro2`
* Fixed compilation in some scenarios on Windows with paths in `module` paths
--------------------------------------------------------------------------------
## 0.2.16 ## 0.2.16
Released 2018-08-13. Released 2018-08-13.

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen" name = "wasm-bindgen"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
readme = "README.md" readme = "README.md"
@ -27,12 +27,12 @@ serde-serialize = ["serde", "serde_json", "std"]
xxx_debug_only_print_generated_code = ["wasm-bindgen-macro/xxx_debug_only_print_generated_code"] xxx_debug_only_print_generated_code = ["wasm-bindgen-macro/xxx_debug_only_print_generated_code"]
[dependencies] [dependencies]
wasm-bindgen-macro = { path = "crates/macro", version = "=0.2.16" } wasm-bindgen-macro = { path = "crates/macro", version = "=0.2.17" }
serde = { version = "1.0", optional = true } serde = { version = "1.0", optional = true }
serde_json = { version = "1.0", optional = true } serde_json = { version = "1.0", optional = true }
[target.'cfg(target_arch = "wasm32")'.dev-dependencies] [target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = { path = 'crates/test', version = '=0.2.16' } wasm-bindgen-test = { path = 'crates/test', version = '=0.2.17' }
serde_derive = "1.0" serde_derive = "1.0"
wasm-bindgen-test-crate-a = { path = 'tests/crates/a' } wasm-bindgen-test-crate-a = { path = 'tests/crates/a' }
wasm-bindgen-test-crate-b = { path = 'tests/crates/b' } wasm-bindgen-test-crate-b = { path = 'tests/crates/b' }
@ -50,6 +50,7 @@ members = [
"crates/webidl-tests", "crates/webidl-tests",
"examples/add", "examples/add",
"examples/asm.js", "examples/asm.js",
"examples/canvas",
"examples/char", "examples/char",
"examples/closures", "examples/closures",
"examples/comments", "examples/comments",
@ -64,6 +65,7 @@ members = [
"examples/performance", "examples/performance",
"examples/smorgasboard", "examples/smorgasboard",
"examples/wasm-in-wasm", "examples/wasm-in-wasm",
"examples/webaudio",
"tests/no-std", "tests/no-std",
] ]

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen-backend" name = "wasm-bindgen-backend"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend" repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend"
@ -21,4 +21,4 @@ proc-macro2 = "0.4.8"
quote = '0.6' quote = '0.6'
serde_json = "1.0" serde_json = "1.0"
syn = { version = '0.14', features = ['full', 'visit'] } syn = { version = '0.14', features = ['full', 'visit'] }
wasm-bindgen-shared = { path = "../shared", version = "=0.2.16" } wasm-bindgen-shared = { path = "../shared", version = "=0.2.17" }

View File

@ -21,6 +21,10 @@ pub struct Program {
pub consts: Vec<Const>, pub consts: Vec<Const>,
/// rust submodules /// rust submodules
pub modules: Vec<Module>, pub modules: Vec<Module>,
/// "dictionaries", generated for WebIDL, which are basically just "typed
/// objects" in the sense that they represent a JS object with a particular
/// shape in JIT parlance.
pub dictionaries: Vec<Dictionary>,
} }
/// A rust to js interface. Allows interaction with rust objects/functions /// A rust to js interface. Allows interaction with rust objects/functions
@ -253,6 +257,21 @@ pub struct Module {
pub imports: Vec<Import>, pub imports: Vec<Import>,
} }
#[cfg_attr(feature = "extra-traits", derive(Debug, PartialEq, Eq))]
#[derive(Clone)]
pub struct Dictionary {
pub name: Ident,
pub fields: Vec<DictionaryField>,
}
#[cfg_attr(feature = "extra-traits", derive(Debug, PartialEq, Eq))]
#[derive(Clone)]
pub struct DictionaryField {
pub name: Ident,
pub required: bool,
pub ty: syn::Type,
}
impl Program { impl Program {
pub(crate) fn shared(&self) -> Result<shared::Program, Diagnostic> { pub(crate) fn shared(&self) -> Result<shared::Program, Diagnostic> {
Ok(shared::Program { Ok(shared::Program {

View File

@ -74,6 +74,9 @@ impl TryToTokens for ast::Program {
errors.push(e); errors.push(e);
} }
} }
for d in self.dictionaries.iter() {
d.to_tokens(tokens);
}
Diagnostic::from_vec(errors)?; Diagnostic::from_vec(errors)?;
@ -1135,6 +1138,153 @@ impl<'a> TryToTokens for ast::Module {
} }
} }
impl ToTokens for ast::Dictionary {
fn to_tokens(&self, tokens: &mut TokenStream) {
let name = &self.name;
let mut methods = TokenStream::new();
for field in self.fields.iter() {
field.to_tokens(&mut methods);
}
let required_names = &self.fields.iter()
.filter(|f| f.required)
.map(|f| &f.name)
.collect::<Vec<_>>();
let required_types = &self.fields.iter()
.filter(|f| f.required)
.map(|f| &f.ty)
.collect::<Vec<_>>();
let required_names2 = required_names;
let required_names3 = required_names;
let const_name = Ident::new(&format!("_CONST_{}", name), Span::call_site());
(quote! {
#[derive(Clone, Debug)]
#[repr(transparent)]
pub struct #name {
obj: ::js_sys::Object,
}
impl #name {
pub fn new(#(#required_names: #required_types),*) -> #name {
let mut _ret = #name { obj: ::js_sys::Object::new() };
#(_ret.#required_names2(#required_names3);)*
return _ret
}
#methods
}
#[allow(bad_style)]
const #const_name: () = {
use js_sys::Object;
use wasm_bindgen::describe::WasmDescribe;
use wasm_bindgen::convert::*;
use wasm_bindgen::{JsValue, JsCast};
use wasm_bindgen::__rt::core::mem::ManuallyDrop;
// interop w/ JsValue
impl From<#name> for JsValue {
fn from(val: #name) -> JsValue {
val.obj.into()
}
}
impl AsRef<JsValue> for #name {
fn as_ref(&self) -> &JsValue { self.obj.as_ref() }
}
impl AsMut<JsValue> for #name {
fn as_mut(&mut self) -> &mut JsValue { self.obj.as_mut() }
}
// Boundary conversion impls
impl WasmDescribe for #name {
fn describe() {
Object::describe();
}
}
impl IntoWasmAbi for #name {
type Abi = <Object as IntoWasmAbi>::Abi;
fn into_abi(self, extra: &mut Stack) -> Self::Abi {
self.obj.into_abi(extra)
}
}
impl<'a> IntoWasmAbi for &'a #name {
type Abi = <&'a Object as IntoWasmAbi>::Abi;
fn into_abi(self, extra: &mut Stack) -> Self::Abi {
(&self.obj).into_abi(extra)
}
}
impl FromWasmAbi for #name {
type Abi = <Object as FromWasmAbi>::Abi;
unsafe fn from_abi(abi: Self::Abi, extra: &mut Stack) -> Self {
#name { obj: Object::from_abi(abi, extra) }
}
}
impl OptionIntoWasmAbi for #name {
fn none() -> Self::Abi { Object::none() }
}
impl<'a> OptionIntoWasmAbi for &'a #name {
fn none() -> Self::Abi { <&'a Object>::none() }
}
impl OptionFromWasmAbi for #name {
fn is_none(abi: &Self::Abi) -> bool { Object::is_none(abi) }
}
impl RefFromWasmAbi for #name {
type Abi = <Object as RefFromWasmAbi>::Abi;
type Anchor = ManuallyDrop<#name>;
unsafe fn ref_from_abi(js: Self::Abi, extra: &mut Stack) -> Self::Anchor {
let tmp = <Object as RefFromWasmAbi>::ref_from_abi(js, extra);
ManuallyDrop::new(#name {
obj: ManuallyDrop::into_inner(tmp),
})
}
}
impl JsCast for #name {
fn instanceof(val: &JsValue) -> bool {
Object::instanceof(val)
}
fn unchecked_from_js(val: JsValue) -> Self {
#name { obj: Object::unchecked_from_js(val) }
}
fn unchecked_from_js_ref(val: &JsValue) -> &Self {
unsafe { &*(val as *const JsValue as *const #name) }
}
fn unchecked_from_js_mut(val: &mut JsValue) -> &mut Self {
unsafe { &mut *(val as *mut JsValue as *mut #name) }
}
}
};
}).to_tokens(tokens);
}
}
impl ToTokens for ast::DictionaryField {
fn to_tokens(&self, tokens: &mut TokenStream) {
let name = &self.name;
let ty = &self.ty;
(quote! {
pub fn #name(&mut self, val: #ty) -> &mut Self {
use wasm_bindgen::JsValue;
::js_sys::Reflect::set(
self.obj.as_ref(),
&JsValue::from(stringify!(#name)),
&JsValue::from(val),
);
self
}
}).to_tokens(tokens);
}
}
/// Emits the necessary glue tokens for "descriptor", generating an appropriate /// Emits the necessary glue tokens for "descriptor", generating an appropriate
/// symbol name as well as attributes around the descriptor function itself. /// symbol name as well as attributes around the descriptor function itself.
struct Descriptor<'a, T>(&'a Ident, T); struct Descriptor<'a, T>(&'a Ident, T);

View File

@ -84,6 +84,7 @@ impl ImportedTypes for ast::Program {
{ {
self.imports.imported_types(f); self.imports.imported_types(f);
self.consts.imported_types(f); self.consts.imported_types(f);
self.dictionaries.imported_types(f);
} }
} }
@ -298,21 +299,44 @@ impl ImportedTypes for ast::Const {
} }
} }
impl ImportedTypes for ast::Dictionary {
fn imported_types<F>(&self, f: &mut F)
where
F: FnMut(&Ident, ImportedTypeKind),
{
f(&self.name, ImportedTypeKind::Definition);
for field in self.fields.iter() {
field.imported_types(f);
}
}
}
impl ImportedTypes for ast::DictionaryField {
fn imported_types<F>(&self, f: &mut F)
where
F: FnMut(&Ident, ImportedTypeKind),
{
self.ty.imported_types(f);
}
}
/// Remove any methods, statics, &c, that reference types that are *not* /// Remove any methods, statics, &c, that reference types that are *not*
/// defined. /// defined.
pub trait RemoveUndefinedImports { pub trait RemoveUndefinedImports {
fn remove_undefined_imports<F>(&mut self, is_defined: &F) fn remove_undefined_imports<F>(&mut self, is_defined: &F) -> bool
where where
F: Fn(&Ident) -> bool; F: Fn(&Ident) -> bool;
} }
impl RemoveUndefinedImports for ast::Program { impl RemoveUndefinedImports for ast::Program {
fn remove_undefined_imports<F>(&mut self, is_defined: &F) fn remove_undefined_imports<F>(&mut self, is_defined: &F) -> bool
where where
F: Fn(&Ident) -> bool, F: Fn(&Ident) -> bool,
{ {
self.imports.remove_undefined_imports(is_defined); let a = self.imports.remove_undefined_imports(is_defined);
self.consts.remove_undefined_imports(is_defined); let b = self.consts.remove_undefined_imports(is_defined);
let c = self.dictionaries.remove_undefined_imports(is_defined);
a || b || c
} }
} }
@ -320,10 +344,11 @@ impl<T> RemoveUndefinedImports for Vec<T>
where where
T: ImportedTypeReferences, T: ImportedTypeReferences,
{ {
fn remove_undefined_imports<F>(&mut self, is_defined: &F) fn remove_undefined_imports<F>(&mut self, is_defined: &F) -> bool
where where
F: Fn(&Ident) -> bool, F: Fn(&Ident) -> bool,
{ {
let before = self.len();
self.retain(|x| { self.retain(|x| {
let mut all_defined = true; let mut all_defined = true;
x.imported_type_references(&mut |id| { x.imported_type_references(&mut |id| {
@ -336,5 +361,6 @@ where
}); });
all_defined all_defined
}); });
before != self.len()
} }
} }

View File

@ -1,5 +1,5 @@
use proc_macro2::*; use proc_macro2::*;
use quote::ToTokens; use quote::{ToTokens, TokenStreamExt};
#[macro_export] #[macro_export]
macro_rules! err_span { macro_rules! err_span {
@ -79,13 +79,13 @@ impl ToTokens for Diagnostic {
Repr::Single { text, span } => { Repr::Single { text, span } => {
let cs2 = (Span::call_site(), Span::call_site()); let cs2 = (Span::call_site(), Span::call_site());
let (start, end) = span.unwrap_or(cs2); let (start, end) = span.unwrap_or(cs2);
dst.extend(Some(Ident::new("compile_error", start).into())); dst.append(Ident::new("compile_error", start));
dst.extend(Some(Punct::new('!', Spacing::Alone).into())); dst.append(Punct::new('!', Spacing::Alone));
let mut message = TokenStream::new(); let mut message = TokenStream::new();
message.extend(Some(Literal::string(text).into())); message.append(Literal::string(text));
let mut group = Group::new(Delimiter::Brace, message); let mut group = Group::new(Delimiter::Brace, message);
group.set_span(end); group.set_span(end);
dst.extend(Some(group.into())); dst.append(group);
} }
Repr::Multi { diagnostics } => { Repr::Multi { diagnostics } => {
for diagnostic in diagnostics { for diagnostic in diagnostics {

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen-cli-support" name = "wasm-bindgen-cli-support"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/cli-support" repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/cli-support"
@ -17,6 +17,6 @@ parity-wasm = "0.31"
serde = "1.0" serde = "1.0"
serde_json = "1.0" serde_json = "1.0"
tempfile = "3.0" tempfile = "3.0"
wasm-bindgen-shared = { path = "../shared", version = '=0.2.16' } wasm-bindgen-shared = { path = "../shared", version = '=0.2.17' }
wasm-gc-api = "0.1.9" wasm-gc-api = "0.1.9"
wasmi = "0.3" wasmi = "0.3"

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen-cli" name = "wasm-bindgen-cli"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/cli" repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/cli"
@ -23,8 +23,8 @@ rouille = { version = "2.1.0", default-features = false }
serde = "1.0" serde = "1.0"
serde_derive = "1.0" serde_derive = "1.0"
serde_json = "1.0" serde_json = "1.0"
wasm-bindgen-cli-support = { path = "../cli-support", version = "=0.2.16" } wasm-bindgen-cli-support = { path = "../cli-support", version = "=0.2.17" }
wasm-bindgen-shared = { path = "../shared", version = "=0.2.16" } wasm-bindgen-shared = { path = "../shared", version = "=0.2.17" }
openssl = { version = '0.10.11', optional = true } openssl = { version = '0.10.11', optional = true }
[features] [features]

View File

@ -7,12 +7,12 @@ license = "MIT/Apache-2.0"
name = "wasm-bindgen-futures" name = "wasm-bindgen-futures"
repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/futures" repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/futures"
readme = "./README.md" readme = "./README.md"
version = "0.2.16" version = "0.2.17"
[dependencies] [dependencies]
futures = "0.1.20" futures = "0.1.20"
js-sys = { path = "../js-sys", version = '0.2.1' } js-sys = { path = "../js-sys", version = '0.2.1' }
wasm-bindgen = { path = "../..", version = '0.2.16' } wasm-bindgen = { path = "../..", version = '0.2.17' }
[target.'cfg(target_arch = "wasm32")'.dev-dependencies] [target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = { path = '../test', version = '0.2.16' } wasm-bindgen-test = { path = '../test', version = '0.2.17' }

View File

@ -1,6 +1,6 @@
[package] [package]
name = "js-sys" name = "js-sys"
version = "0.2.1" version = "0.2.2"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
readme = "./README.md" readme = "./README.md"
categories = ["wasm"] categories = ["wasm"]
@ -18,9 +18,9 @@ test = false
doctest = false doctest = false
[dependencies] [dependencies]
wasm-bindgen = { path = "../..", version = "0.2.16" } wasm-bindgen = { path = "../..", version = "0.2.17" }
[target.'cfg(target_arch = "wasm32")'.dev-dependencies] [target.'cfg(target_arch = "wasm32")'.dev-dependencies]
futures = "0.1.20" futures = "0.1.20"
wasm-bindgen-test = { path = '../test', version = '=0.2.16' } wasm-bindgen-test = { path = '../test', version = '=0.2.17' }
wasm-bindgen-futures = { path = '../futures', version = '=0.2.16' } wasm-bindgen-futures = { path = '../futures', version = '=0.2.17' }

View File

@ -683,8 +683,7 @@ extern "C" {
// Float32Array // Float32Array
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
// TODO Uncomment this once TypedArray is added: #[wasm_bindgen(extends = Object)]
// #[wasm_bindgen(extends = Object, extends = TypedArray)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Float32Array; pub type Float32Array;
@ -737,8 +736,7 @@ extern "C" {
// Float64Array // Float64Array
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
// TODO Uncomment this once TypedArray is added: #[wasm_bindgen(extends = Object)]
// #[wasm_bindgen(extends = Object, extends = TypedArray)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Float64Array; pub type Float64Array;
@ -914,6 +912,7 @@ extern {
// Int8Array // Int8Array
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Int8Array; pub type Int8Array;
@ -966,6 +965,7 @@ extern "C" {
// Int16Array // Int16Array
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Int16Array; pub type Int16Array;
@ -1018,6 +1018,7 @@ extern "C" {
// Int32Array // Int32Array
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Int32Array; pub type Int32Array;
@ -2539,6 +2540,7 @@ extern {
// Uint8Array // Uint8Array
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Uint8Array; pub type Uint8Array;
@ -2591,6 +2593,7 @@ extern "C" {
// Uint8ClampedArray // Uint8ClampedArray
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Uint8ClampedArray; pub type Uint8ClampedArray;
@ -2645,6 +2648,7 @@ extern "C" {
// Uint16Array // Uint16Array
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Uint16Array; pub type Uint16Array;
@ -2697,6 +2701,7 @@ extern "C" {
// Uint32Array // Uint32Array
#[wasm_bindgen] #[wasm_bindgen]
extern "C" { extern "C" {
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub type Uint32Array; pub type Uint32Array;

View File

@ -8,6 +8,7 @@ fn range_error() {
let error = RangeError::new("out of range yo"); let error = RangeError::new("out of range yo");
assert!(error.is_instance_of::<RangeError>()); assert!(error.is_instance_of::<RangeError>());
assert!(error.is_instance_of::<Error>()); assert!(error.is_instance_of::<Error>());
assert!(error.is_instance_of::<Object>());
let base: &Error = error.as_ref(); let base: &Error = error.as_ref();
assert_eq!(JsValue::from(base.message()), "out of range yo"); assert_eq!(JsValue::from(base.message()), "out of range yo");

View File

@ -8,6 +8,7 @@ fn reference_error() {
let error = ReferenceError::new("bad reference, fool"); let error = ReferenceError::new("bad reference, fool");
assert!(error.is_instance_of::<ReferenceError>()); assert!(error.is_instance_of::<ReferenceError>());
assert!(error.is_instance_of::<Error>()); assert!(error.is_instance_of::<Error>());
assert!(error.is_instance_of::<Object>());
let base: &Error = error.as_ref(); let base: &Error = error.as_ref();
assert_eq!(JsValue::from(base.message()), "bad reference, fool"); assert_eq!(JsValue::from(base.message()), "bad reference, fool");

View File

@ -8,6 +8,7 @@ fn syntax_error() {
let error = SyntaxError::new("msg"); let error = SyntaxError::new("msg");
assert!(error.is_instance_of::<SyntaxError>()); assert!(error.is_instance_of::<SyntaxError>());
assert!(error.is_instance_of::<Error>()); assert!(error.is_instance_of::<Error>());
assert!(error.is_instance_of::<Object>());
let base: &Error = error.as_ref(); let base: &Error = error.as_ref();
assert_eq!(JsValue::from(base.message()), "msg"); assert_eq!(JsValue::from(base.message()), "msg");

View File

@ -8,6 +8,7 @@ fn type_error() {
let error = TypeError::new("msg"); let error = TypeError::new("msg");
assert!(error.is_instance_of::<TypeError>()); assert!(error.is_instance_of::<TypeError>());
assert!(error.is_instance_of::<Error>()); assert!(error.is_instance_of::<Error>());
assert!(error.is_instance_of::<Object>());
let base: &Error = error.as_ref(); let base: &Error = error.as_ref();
assert_eq!(JsValue::from(base.message()), "msg"); assert_eq!(JsValue::from(base.message()), "msg");

View File

@ -1,5 +1,6 @@
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
use wasm_bindgen_test::*; use wasm_bindgen_test::*;
use wasm_bindgen::JsCast;
use js_sys::*; use js_sys::*;
macro_rules! each { macro_rules! each {
@ -16,6 +17,19 @@ macro_rules! each {
) )
} }
macro_rules! test_inheritence {
($arr:ident) => ({
let arr = $arr::new(&JsValue::undefined());
assert!(arr.is_instance_of::<$arr>());
let _: &Object = arr.as_ref();
assert!(arr.is_instance_of::<Object>());
})
}
#[wasm_bindgen_test]
fn inheritence() {
each!(test_inheritence);
}
macro_rules! test_undefined { macro_rules! test_undefined {
($arr:ident) => ({ ($arr:ident) => ({
let arr = $arr::new(&JsValue::undefined()); let arr = $arr::new(&JsValue::undefined());

View File

@ -8,6 +8,7 @@ fn uri_error() {
let error = UriError::new("msg"); let error = UriError::new("msg");
assert!(error.is_instance_of::<UriError>()); assert!(error.is_instance_of::<UriError>());
assert!(error.is_instance_of::<Error>()); assert!(error.is_instance_of::<Error>());
assert!(error.is_instance_of::<Object>());
let base: &Error = error.as_ref(); let base: &Error = error.as_ref();
assert_eq!(JsValue::from(base.message()), "msg"); assert_eq!(JsValue::from(base.message()), "msg");

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen-macro-support" name = "wasm-bindgen-macro-support"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro-support" repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro-support"
@ -18,5 +18,5 @@ extra-traits = ["syn/extra-traits"]
syn = { version = '0.14', features = ['full'] } syn = { version = '0.14', features = ['full'] }
quote = '0.6' quote = '0.6'
proc-macro2 = "0.4.9" proc-macro2 = "0.4.9"
wasm-bindgen-backend = { path = "../backend", version = "=0.2.16" } wasm-bindgen-backend = { path = "../backend", version = "=0.2.17" }
wasm-bindgen-shared = { path = "../shared", version = "=0.2.16" } wasm-bindgen-shared = { path = "../shared", version = "=0.2.17" }

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen-macro" name = "wasm-bindgen-macro"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro" repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro"
@ -18,5 +18,5 @@ spans = ["wasm-bindgen-macro-support/spans"]
xxx_debug_only_print_generated_code = [] xxx_debug_only_print_generated_code = []
[dependencies] [dependencies]
wasm-bindgen-macro-support = { path = "../macro-support", version = "=0.2.16" } wasm-bindgen-macro-support = { path = "../macro-support", version = "=0.2.17" }
quote = "0.6" quote = "0.6"

View File

@ -12,12 +12,6 @@ extern "C" {
#[wasm_bindgen(y)] #[wasm_bindgen(y)]
fn bar(); fn bar();
#[wasm_bindgen z]
fn bar();
#[wasm_bindgen(z2) x]
fn bar();
#[wasm_bindgen { }] #[wasm_bindgen { }]
fn bar(); fn bar();
} }

View File

@ -13,20 +13,8 @@ error: error parsing #[wasm_bindgen] attribute options: failed to parse anything
error: malformed #[wasm_bindgen] attribute error: malformed #[wasm_bindgen] attribute
--> $DIR/invalid-attr.rs:15:5 --> $DIR/invalid-attr.rs:15:5
| |
15 | #[wasm_bindgen z] 15 | #[wasm_bindgen { }]
| ^^^^^^^^^^^^^^^^^
error: malformed #[wasm_bindgen] attribute
--> $DIR/invalid-attr.rs:18:5
|
18 | #[wasm_bindgen(z2) x]
| ^^^^^^^^^^^^^^^^^^^^^
error: malformed #[wasm_bindgen] attribute
--> $DIR/invalid-attr.rs:21:5
|
21 | #[wasm_bindgen { }]
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 5 previous errors error: aborting due to 3 previous errors

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen-shared" name = "wasm-bindgen-shared"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/shared" repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/shared"

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen-test-macro" name = "wasm-bindgen-test-macro"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
description = "Internal testing macro for wasm-bindgen" description = "Internal testing macro for wasm-bindgen"
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"

View File

@ -1,6 +1,6 @@
[package] [package]
name = "wasm-bindgen-test" name = "wasm-bindgen-test"
version = "0.2.16" version = "0.2.17"
authors = ["The wasm-bindgen Developers"] authors = ["The wasm-bindgen Developers"]
description = "Internal testing crate for wasm-bindgen" description = "Internal testing crate for wasm-bindgen"
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
@ -11,9 +11,9 @@ console_error_panic_hook = '0.1'
futures = "0.1" futures = "0.1"
js-sys = { path = '../js-sys', version = '0.2.1' } js-sys = { path = '../js-sys', version = '0.2.1' }
scoped-tls = "0.1" scoped-tls = "0.1"
wasm-bindgen = { path = '../..', version = '0.2.16' } wasm-bindgen = { path = '../..', version = '0.2.17' }
wasm-bindgen-futures = { path = '../futures', version = '0.2.16' } wasm-bindgen-futures = { path = '../futures', version = '0.2.17' }
wasm-bindgen-test-macro = { path = '../test-macro', version = '=0.2.16' } wasm-bindgen-test-macro = { path = '../test-macro', version = '=0.2.17' }
[lib] [lib]
test = false test = false

View File

@ -11,15 +11,15 @@ test = false
[build-dependencies] [build-dependencies]
env_logger = "0.5.10" env_logger = "0.5.10"
failure = "0.1.2" failure = "0.1.2"
wasm-bindgen-webidl = { path = "../webidl", version = "=0.2.16" } wasm-bindgen-webidl = { path = "../webidl", version = "=0.2.17" }
sourcefile = "0.1" sourcefile = "0.1"
[dependencies] [dependencies]
wasm-bindgen = { path = "../..", version = "0.2.16" } wasm-bindgen = { path = "../..", version = "0.2.17" }
js-sys = { path = '../js-sys', version = '0.2.1' } js-sys = { path = '../js-sys', version = '0.2.1' }
[target.'cfg(target_arch = "wasm32")'.dev-dependencies] [target.'cfg(target_arch = "wasm32")'.dev-dependencies]
futures = "0.1" futures = "0.1"
js-sys = { path = '../js-sys', version = '0.2.1' } js-sys = { path = '../js-sys', version = '0.2.1' }
wasm-bindgen-test = { path = '../test', version = '0.2.16' } wasm-bindgen-test = { path = '../test', version = '0.2.17' }
wasm-bindgen-futures = { path = '../futures', version = '0.2.16' } wasm-bindgen-futures = { path = '../futures', version = '0.2.17' }

View File

@ -4,7 +4,7 @@
* You can obtain one at http://mozilla.org/MPL/2.0/. * You can obtain one at http://mozilla.org/MPL/2.0/.
*/ */
[NoInterfaceObject, Exposed=(Window,Worker,System)] [Exposed=(Window,Worker,System)]
interface AbstractWorker { interface mixin AbstractWorker {
attribute EventHandler onerror; attribute EventHandler onerror;
}; };

View File

@ -43,6 +43,3 @@ interface AnalyserNode : AudioNode {
attribute double smoothingTimeConstant; attribute double smoothingTimeConstant;
}; };
// Mozilla extension
AnalyserNode implements AudioNodePassThrough;

View File

@ -24,10 +24,3 @@ interface Attr : Node {
readonly attribute boolean specified; readonly attribute boolean specified;
}; };
// Mozilla extensions
partial interface Attr {
[GetterThrows]
readonly attribute Element? ownerElement;
};

View File

@ -36,6 +36,3 @@ interface AudioBufferSourceNode : AudioScheduledSourceNode {
void start(optional double when = 0, optional double grainOffset = 0, void start(optional double when = 0, optional double grainOffset = 0,
optional double grainDuration); optional double grainDuration);
}; };
// Mozilla extensions
AudioBufferSourceNode implements AudioNodePassThrough;

View File

@ -62,15 +62,3 @@ interface AudioNode : EventTarget {
attribute ChannelInterpretation channelInterpretation; attribute ChannelInterpretation channelInterpretation;
}; };
// Mozilla extension
partial interface AudioNode {
[ChromeOnly]
readonly attribute unsigned long id;
};
[NoInterfaceObject]
interface AudioNodePassThrough {
[ChromeOnly]
attribute boolean passThrough;
};

View File

@ -18,7 +18,7 @@ interface AudioParam {
readonly attribute float minValue; readonly attribute float minValue;
readonly attribute float maxValue; readonly attribute float maxValue;
// Parameter automation. // Parameter automation.
[Throws] [Throws]
AudioParam setValueAtTime(float value, double startTime); AudioParam setValueAtTime(float value, double startTime);
[Throws] [Throws]
@ -26,27 +26,17 @@ interface AudioParam {
[Throws] [Throws]
AudioParam exponentialRampToValueAtTime(float value, double endTime); AudioParam exponentialRampToValueAtTime(float value, double endTime);
// Exponentially approach the target value with a rate having the given time constant. // Exponentially approach the target value with a rate having the given time constant.
[Throws] [Throws]
AudioParam setTargetAtTime(float target, double startTime, double timeConstant); AudioParam setTargetAtTime(float target, double startTime, double timeConstant);
// Sets an array of arbitrary parameter values starting at time for the given duration. // Sets an array of arbitrary parameter values starting at time for the given duration.
// The number of values will be scaled to fit into the desired duration. // The number of values will be scaled to fit into the desired duration.
[Throws] [Throws]
AudioParam setValueCurveAtTime(Float32Array values, double startTime, double duration); AudioParam setValueCurveAtTime(Float32Array values, double startTime, double duration);
// Cancels all scheduled parameter changes with times greater than or equal to startTime. // Cancels all scheduled parameter changes with times greater than or equal to startTime.
[Throws] [Throws]
AudioParam cancelScheduledValues(double startTime); AudioParam cancelScheduledValues(double startTime);
}; };
// Mozilla extension
partial interface AudioParam {
// The ID of the AudioNode this AudioParam belongs to.
[ChromeOnly]
readonly attribute unsigned long parentNodeId;
// The name of the AudioParam
[ChromeOnly]
readonly attribute DOMString name;
};

View File

@ -44,7 +44,3 @@ interface BiquadFilterNode : AudioNode {
Float32Array phaseResponse); Float32Array phaseResponse);
}; };
// Mozilla extension
BiquadFilterNode implements AudioNodePassThrough;

View File

@ -1,33 +0,0 @@
/* -*- 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/.
*/
[Func="IsChromeOrXBL"]
interface BoxObject {
readonly attribute Element? element;
readonly attribute long x;
readonly attribute long y;
[Throws]
readonly attribute long screenX;
[Throws]
readonly attribute long screenY;
readonly attribute long width;
readonly attribute long height;
nsISupports? getPropertyAsSupports(DOMString propertyName);
void setPropertyAsSupports(DOMString propertyName, nsISupports value);
[Throws]
DOMString? getProperty(DOMString propertyName);
void setProperty(DOMString propertyName, DOMString propertyValue);
void removeProperty(DOMString propertyName);
// for stepping through content in the expanded dom with box-ordinal-group order
readonly attribute Element? parentBox;
readonly attribute Element? firstChild;
readonly attribute Element? lastChild;
readonly attribute Element? nextSibling;
readonly attribute Element? previousSibling;
};

View File

@ -19,15 +19,13 @@ dictionary BrowserElementExecuteScriptOptions {
DOMString? origin; DOMString? origin;
}; };
[NoInterfaceObject] interface mixin BrowserElement {
interface BrowserElement {
}; };
BrowserElement implements BrowserElementCommon; BrowserElement includes BrowserElementCommon;
BrowserElement implements BrowserElementPrivileged; BrowserElement includes BrowserElementPrivileged;
[NoInterfaceObject] interface mixin BrowserElementCommon {
interface BrowserElementCommon {
[Throws, [Throws,
Pref="dom.mozBrowserFramesEnabled", Pref="dom.mozBrowserFramesEnabled",
ChromeOnly] ChromeOnly]
@ -39,8 +37,7 @@ interface BrowserElementCommon {
void removeNextPaintListener(BrowserElementNextPaintEventCallback listener); void removeNextPaintListener(BrowserElementNextPaintEventCallback listener);
}; };
[NoInterfaceObject] interface mixin BrowserElementPrivileged {
interface BrowserElementPrivileged {
[Throws, [Throws,
Pref="dom.mozBrowserFramesEnabled", Pref="dom.mozBrowserFramesEnabled",
ChromeOnly] ChromeOnly]

View File

@ -22,4 +22,4 @@ interface CSSPseudoElement {
}; };
// https://drafts.csswg.org/web-animations/#extensions-to-the-pseudoelement-interface // https://drafts.csswg.org/web-animations/#extensions-to-the-pseudoelement-interface
CSSPseudoElement implements Animatable; CSSPseudoElement includes Animatable;

View File

@ -40,21 +40,6 @@ interface CanvasRenderingContext2D {
// associated with a canvas. // associated with a canvas.
readonly attribute HTMLCanvasElement? canvas; readonly attribute HTMLCanvasElement? canvas;
// Mozilla-specific stuff
// FIXME Bug 768048 mozCurrentTransform/mozCurrentTransformInverse should return a WebIDL array.
[Throws]
attribute object mozCurrentTransform; // [ m11, m12, m21, m22, dx, dy ], i.e. row major
[Throws]
attribute object mozCurrentTransformInverse;
[SetterThrows]
attribute DOMString mozTextStyle;
// image smoothing mode -- if disabled, images won't be smoothed
// if scaled.
[Deprecated="PrefixedImageSmoothingEnabled"]
attribute boolean mozImageSmoothingEnabled;
// Show the caret if appropriate when drawing // Show the caret if appropriate when drawing
[Func="CanvasUtils::HasDrawWindowPrivilege"] [Func="CanvasUtils::HasDrawWindowPrivilege"]
const unsigned long DRAWWINDOW_DRAW_CARET = 0x01; const unsigned long DRAWWINDOW_DRAW_CARET = 0x01;
@ -122,34 +107,31 @@ interface CanvasRenderingContext2D {
void demote(); void demote();
}; };
CanvasRenderingContext2D implements CanvasState; CanvasRenderingContext2D includes CanvasState;
CanvasRenderingContext2D implements CanvasTransform; CanvasRenderingContext2D includes CanvasTransform;
CanvasRenderingContext2D implements CanvasCompositing; CanvasRenderingContext2D includes CanvasCompositing;
CanvasRenderingContext2D implements CanvasImageSmoothing; CanvasRenderingContext2D includes CanvasImageSmoothing;
CanvasRenderingContext2D implements CanvasFillStrokeStyles; CanvasRenderingContext2D includes CanvasFillStrokeStyles;
CanvasRenderingContext2D implements CanvasShadowStyles; CanvasRenderingContext2D includes CanvasShadowStyles;
CanvasRenderingContext2D implements CanvasFilters; CanvasRenderingContext2D includes CanvasFilters;
CanvasRenderingContext2D implements CanvasRect; CanvasRenderingContext2D includes CanvasRect;
CanvasRenderingContext2D implements CanvasDrawPath; CanvasRenderingContext2D includes CanvasDrawPath;
CanvasRenderingContext2D implements CanvasUserInterface; CanvasRenderingContext2D includes CanvasUserInterface;
CanvasRenderingContext2D implements CanvasText; CanvasRenderingContext2D includes CanvasText;
CanvasRenderingContext2D implements CanvasDrawImage; CanvasRenderingContext2D includes CanvasDrawImage;
CanvasRenderingContext2D implements CanvasImageData; CanvasRenderingContext2D includes CanvasImageData;
CanvasRenderingContext2D implements CanvasPathDrawingStyles; CanvasRenderingContext2D includes CanvasPathDrawingStyles;
CanvasRenderingContext2D implements CanvasTextDrawingStyles; CanvasRenderingContext2D includes CanvasTextDrawingStyles;
CanvasRenderingContext2D implements CanvasPathMethods; CanvasRenderingContext2D includes CanvasPathMethods;
CanvasRenderingContext2D implements CanvasHitRegions; CanvasRenderingContext2D includes CanvasHitRegions;
interface mixin CanvasState {
[NoInterfaceObject]
interface CanvasState {
// state // state
void save(); // push state on state stack void save(); // push state on state stack
void restore(); // pop state stack and restore state void restore(); // pop state stack and restore state
}; };
[NoInterfaceObject] interface mixin CanvasTransform {
interface CanvasTransform {
// transformations (default transform is the identity matrix) // transformations (default transform is the identity matrix)
// NOT IMPLEMENTED attribute SVGMatrix currentTransform; // NOT IMPLEMENTED attribute SVGMatrix currentTransform;
[Throws, LenientFloat] [Throws, LenientFloat]
@ -167,20 +149,18 @@ interface CanvasTransform {
}; };
[NoInterfaceObject] [NoInterfaceObject]
interface CanvasCompositing { interface mixin CanvasCompositing {
attribute unrestricted double globalAlpha; // (default 1.0) attribute unrestricted double globalAlpha; // (default 1.0)
[Throws] [Throws]
attribute DOMString globalCompositeOperation; // (default source-over) attribute DOMString globalCompositeOperation; // (default source-over)
}; };
[NoInterfaceObject] interface mixin CanvasImageSmoothing {
interface CanvasImageSmoothing {
// drawing images // drawing images
attribute boolean imageSmoothingEnabled; attribute boolean imageSmoothingEnabled;
}; };
[NoInterfaceObject] interface mixin CanvasFillStrokeStyles {
interface CanvasFillStrokeStyles {
// colors and styles (see also the CanvasPathDrawingStyles interface) // colors and styles (see also the CanvasPathDrawingStyles interface)
attribute (DOMString or CanvasGradient or CanvasPattern) strokeStyle; // (default black) attribute (DOMString or CanvasGradient or CanvasPattern) strokeStyle; // (default black)
attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black) attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black)
@ -192,8 +172,7 @@ interface CanvasFillStrokeStyles {
CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition); CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition);
}; };
[NoInterfaceObject] interface mixin CanvasShadowStyles {
interface CanvasShadowStyles {
[LenientFloat] [LenientFloat]
attribute double shadowOffsetX; // (default 0) attribute double shadowOffsetX; // (default 0)
[LenientFloat] [LenientFloat]
@ -203,14 +182,12 @@ interface CanvasShadowStyles {
attribute DOMString shadowColor; // (default transparent black) attribute DOMString shadowColor; // (default transparent black)
}; };
[NoInterfaceObject] interface mixin CanvasFilters {
interface CanvasFilters {
[Pref="canvas.filters.enabled", SetterThrows] [Pref="canvas.filters.enabled", SetterThrows]
attribute DOMString filter; // (default empty string = no filter) attribute DOMString filter; // (default empty string = no filter)
}; };
[NoInterfaceObject] interface mixin CanvasRect {
interface CanvasRect {
[LenientFloat] [LenientFloat]
void clearRect(double x, double y, double w, double h); void clearRect(double x, double y, double w, double h);
[LenientFloat] [LenientFloat]
@ -219,8 +196,7 @@ interface CanvasRect {
void strokeRect(double x, double y, double w, double h); void strokeRect(double x, double y, double w, double h);
}; };
[NoInterfaceObject] interface mixin CanvasDrawPath {
interface CanvasDrawPath {
// path API (see also CanvasPathMethods) // path API (see also CanvasPathMethods)
void beginPath(); void beginPath();
void fill(optional CanvasWindingRule winding = "nonzero"); void fill(optional CanvasWindingRule winding = "nonzero");
@ -240,8 +216,7 @@ interface CanvasDrawPath {
boolean isPointInStroke(Path2D path, unrestricted double x, unrestricted double y); boolean isPointInStroke(Path2D path, unrestricted double x, unrestricted double y);
}; };
[NoInterfaceObject] interface mixin CanvasUserInterface {
interface CanvasUserInterface {
[Pref="canvas.focusring.enabled", Throws] void drawFocusIfNeeded(Element element); [Pref="canvas.focusring.enabled", Throws] void drawFocusIfNeeded(Element element);
// NOT IMPLEMENTED void drawSystemFocusRing(Path path, HTMLElement element); // NOT IMPLEMENTED void drawSystemFocusRing(Path path, HTMLElement element);
[Pref="canvas.customfocusring.enabled"] boolean drawCustomFocusRing(Element element); [Pref="canvas.customfocusring.enabled"] boolean drawCustomFocusRing(Element element);
@ -250,8 +225,7 @@ interface CanvasUserInterface {
// NOT IMPLEMENTED void scrollPathIntoView(Path path); // NOT IMPLEMENTED void scrollPathIntoView(Path path);
}; };
[NoInterfaceObject] interface mixin CanvasText {
interface CanvasText {
// text (see also the CanvasPathDrawingStyles interface) // text (see also the CanvasPathDrawingStyles interface)
[Throws, LenientFloat] [Throws, LenientFloat]
void fillText(DOMString text, double x, double y, optional double maxWidth); void fillText(DOMString text, double x, double y, optional double maxWidth);
@ -261,8 +235,7 @@ interface CanvasText {
TextMetrics measureText(DOMString text); TextMetrics measureText(DOMString text);
}; };
[NoInterfaceObject] interface mixin CanvasDrawImage {
interface CanvasDrawImage {
[Throws, LenientFloat] [Throws, LenientFloat]
void drawImage(CanvasImageSource image, double dx, double dy); void drawImage(CanvasImageSource image, double dx, double dy);
[Throws, LenientFloat] [Throws, LenientFloat]
@ -271,8 +244,7 @@ interface CanvasDrawImage {
void drawImage(CanvasImageSource image, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh); void drawImage(CanvasImageSource image, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh);
}; };
[NoInterfaceObject] interface mixin CanvasImageData {
interface CanvasImageData {
// pixel manipulation // pixel manipulation
[NewObject, Throws] [NewObject, Throws]
ImageData createImageData(double sw, double sh); ImageData createImageData(double sw, double sh);
@ -286,8 +258,7 @@ interface CanvasImageData {
void putImageData(ImageData imagedata, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight); void putImageData(ImageData imagedata, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight);
}; };
[NoInterfaceObject] interface mixin CanvasPathDrawingStyles {
interface CanvasPathDrawingStyles {
// line caps/joins // line caps/joins
[LenientFloat] [LenientFloat]
attribute double lineWidth; // (default 1) attribute double lineWidth; // (default 1)
@ -303,8 +274,7 @@ interface CanvasPathDrawingStyles {
[LenientFloat] attribute double lineDashOffset; [LenientFloat] attribute double lineDashOffset;
}; };
[NoInterfaceObject] interface mixin CanvasTextDrawingStyles {
interface CanvasTextDrawingStyles {
// text // text
[SetterThrows] [SetterThrows]
attribute DOMString font; // (default 10px sans-serif) attribute DOMString font; // (default 10px sans-serif)
@ -312,8 +282,7 @@ interface CanvasTextDrawingStyles {
attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic") attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic")
}; };
[NoInterfaceObject] interface mixin CanvasPathMethods {
interface CanvasPathMethods {
// shared path API methods // shared path API methods
void closePath(); void closePath();
[LenientFloat] [LenientFloat]
@ -340,8 +309,7 @@ interface CanvasPathMethods {
void ellipse(double x, double y, double radiusX, double radiusY, double rotation, double startAngle, double endAngle, optional boolean anticlockwise = false); void ellipse(double x, double y, double radiusX, double radiusY, double rotation, double startAngle, double endAngle, optional boolean anticlockwise = false);
}; };
[NoInterfaceObject] interface mixin CanvasHitRegions {
interface CanvasHitRegions {
// hit regions // hit regions
[Pref="canvas.hitregions.enabled", Throws] void addHitRegion(optional HitRegionOptions options); [Pref="canvas.hitregions.enabled", Throws] void addHitRegion(optional HitRegionOptions options);
[Pref="canvas.hitregions.enabled"] void removeHitRegion(DOMString id); [Pref="canvas.hitregions.enabled"] void removeHitRegion(DOMString id);
@ -397,4 +365,4 @@ interface Path2D
{ {
void addPath(Path2D path, optional SVGMatrix transformation); void addPath(Path2D path, optional SVGMatrix transformation);
}; };
Path2D implements CanvasPathMethods; Path2D includes CanvasPathMethods;

View File

@ -27,5 +27,5 @@ interface CharacterData : Node {
void replaceData(unsigned long offset, unsigned long count, DOMString data); void replaceData(unsigned long offset, unsigned long count, DOMString data);
}; };
CharacterData implements ChildNode; CharacterData includes ChildNode;
CharacterData implements NonDocumentTypeChildNode; CharacterData includes NonDocumentTypeChildNode;

View File

@ -7,8 +7,7 @@
* http://dom.spec.whatwg.org/#interface-childnode * http://dom.spec.whatwg.org/#interface-childnode
*/ */
[NoInterfaceObject] interface mixin ChildNode {
interface ChildNode {
[CEReactions, Throws, Unscopable] [CEReactions, Throws, Unscopable]
void before((Node or DOMString)... nodes); void before((Node or DOMString)... nodes);
[CEReactions, Throws, Unscopable] [CEReactions, Throws, Unscopable]
@ -19,8 +18,7 @@ interface ChildNode {
void remove(); void remove();
}; };
[NoInterfaceObject] interface mixin NonDocumentTypeChildNode {
interface NonDocumentTypeChildNode {
[Pure] [Pure]
readonly attribute Element? previousElementSibling; readonly attribute Element? previousElementSibling;
[Pure] [Pure]

View File

@ -1,13 +0,0 @@
/* -*- 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/.
*/
[Constructor, Func="IsChromeOrXBL"]
interface ChromeNodeList : NodeList {
[Throws]
void append(Node aNode);
[Throws]
void remove(Node aNode);
};

View File

@ -1,10 +0,0 @@
/* -*- 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/.
*/
[Func="IsChromeOrXBL"]
interface CommandEvent : Event {
readonly attribute DOMString? command;
};

View File

@ -24,7 +24,3 @@ interface ConvolverNode : AudioNode {
attribute boolean normalize; attribute boolean normalize;
}; };
// Mozilla extension
ConvolverNode implements AudioNodePassThrough;

View File

@ -7,8 +7,8 @@
* https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#crypto-interface * https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#crypto-interface
*/ */
[NoInterfaceObject, Exposed=(Window,Worker)] [Exposed=(Window,Worker)]
interface GlobalCrypto { interface mixin GlobalCrypto {
[Throws] readonly attribute Crypto crypto; [Throws] readonly attribute Crypto crypto;
}; };

View File

@ -16,9 +16,8 @@
// invalid widl // invalid widl
//interface StackFrame; //interface StackFrame;
[NoInterfaceObject, [Exposed=(Window,Worker,System)]
Exposed=(Window,Worker,System)] interface mixin ExceptionMembers
interface ExceptionMembers
{ {
// The nsresult associated with this exception. // The nsresult associated with this exception.
readonly attribute unsigned long result; readonly attribute unsigned long result;
@ -34,7 +33,7 @@ interface ExceptionMembers
readonly attribute DOMString filename; readonly attribute DOMString filename;
// Valid line numbers begin at '1'. '0' indicates unknown. // Valid line numbers begin at '1'. '0' indicates unknown.
readonly attribute unsigned long lineNumber; readonly attribute unsigned long lineNumber;
// Valid column numbers begin at 0. // Valid column numbers begin at 0.
// We don't have an unambiguous indicator for unknown. // We don't have an unambiguous indicator for unknown.
readonly attribute unsigned long columnNumber; readonly attribute unsigned long columnNumber;
@ -62,7 +61,7 @@ interface Exception {
stringifier; stringifier;
}; };
Exception implements ExceptionMembers; Exception includes ExceptionMembers;
// XXXkhuey this is an 'exception', not an interface, but we don't have any // XXXkhuey this is an 'exception', not an interface, but we don't have any
// parser or codegen mechanisms for dealing with exceptions. // parser or codegen mechanisms for dealing with exceptions.
@ -105,4 +104,4 @@ interface DOMException {
// XXXkhuey copy all of Gecko's non-standard stuff onto DOMException, but leave // XXXkhuey copy all of Gecko's non-standard stuff onto DOMException, but leave
// the prototype chain sane. // the prototype chain sane.
DOMException implements ExceptionMembers; DOMException includes ExceptionMembers;

View File

@ -19,23 +19,13 @@ enum SupportedType {
"image/svg+xml" "image/svg+xml"
}; };
// the latter is Mozilla-specific
[Constructor] [Constructor]
interface DOMParser { interface DOMParser {
[NewObject, Throws] [NewObject, Throws]
Document parseFromString(DOMString str, SupportedType type); Document parseFromString(DOMString str, SupportedType type);
// Mozilla-specific stuff
[NewObject, Throws, ChromeOnly]
Document parseFromBuffer(sequence<octet> buf, SupportedType type);
[NewObject, Throws, ChromeOnly]
Document parseFromBuffer(Uint8Array buf, SupportedType type);
[NewObject, Throws, ChromeOnly]
Document parseFromStream(InputStream stream, DOMString? charset,
long contentLength, SupportedType type);
// Can be used to allow a DOMParser to parse XUL/XBL no matter what // Can be used to allow a DOMParser to parse XUL/XBL no matter what
// principal it's using for the document. // principal it's using for the document.
[ChromeOnly] [ChromeOnly]
void forceEnableXULXBL(); void forceEnableXULXBL();
}; };

View File

@ -5,8 +5,8 @@
enum DOMRequestReadyState { "pending", "done" }; enum DOMRequestReadyState { "pending", "done" };
[Exposed=(Window,Worker,System), NoInterfaceObject] [Exposed=(Window,Worker,System)]
interface DOMRequestShared { interface mixin DOMRequestShared {
readonly attribute DOMRequestReadyState readyState; readonly attribute DOMRequestReadyState readyState;
readonly attribute any result; readonly attribute any result;
@ -29,4 +29,4 @@ interface DOMRequest : EventTarget {
void fireDetailedError(DOMException aError); void fireDetailedError(DOMException aError);
}; };
DOMRequest implements DOMRequestShared; DOMRequest includes DOMRequestShared;

View File

@ -37,142 +37,3 @@ partial interface DataTransfer {
[Throws, Pref="dom.input.dirpicker", NeedsSubjectPrincipal] [Throws, Pref="dom.input.dirpicker", NeedsSubjectPrincipal]
Promise<sequence<File>> getFiles(optional boolean recursiveFlag = false); Promise<sequence<File>> getFiles(optional boolean recursiveFlag = false);
}; };
// Mozilla specific stuff
partial interface DataTransfer {
/*
* Set the drag source. Usually you would not change this, but it will
* affect which node the drag and dragend events are fired at. The
* default target is the node that was dragged.
*
* @param element drag source to use
* @throws NO_MODIFICATION_ALLOWED_ERR if the item cannot be modified
*/
[Throws, UseCounter]
void addElement(Element element);
/**
* The number of items being dragged.
*/
[UseCounter]
readonly attribute unsigned long mozItemCount;
/**
* Sets the drag cursor state. Primarily used to control the cursor during
* tab drags, but could be expanded to other uses. XXX Currently implemented
* on Win32 only.
*
* Possible values:
* auto - use default system behavior.
* default - set the cursor to an arrow during the drag operation.
*
* Values other than 'default' are indentical to setting mozCursor to
* 'auto'.
*/
[UseCounter]
attribute DOMString mozCursor;
/**
* Holds a list of the format types of the data that is stored for an item
* at the specified index. If the index is not in the range from 0 to
* itemCount - 1, an empty string list is returned.
*/
[Throws, NeedsCallerType, UseCounter]
DOMStringList mozTypesAt(unsigned long index);
/**
* Remove the data associated with the given format for an item at the
* specified index. The index is in the range from zero to itemCount - 1.
*
* If the last format for the item is removed, the entire item is removed,
* reducing the itemCount by one.
*
* If format is empty, then the data associated with all formats is removed.
* If the format is not found, then this method has no effect.
*
* @param format the format to remove
* @throws NS_ERROR_DOM_INDEX_SIZE_ERR if index is greater or equal than itemCount
* @throws NO_MODIFICATION_ALLOWED_ERR if the item cannot be modified
*/
[Throws, NeedsSubjectPrincipal, UseCounter]
void mozClearDataAt(DOMString format, unsigned long index);
/*
* A data transfer may store multiple items, each at a given zero-based
* index. setDataAt may only be called with an index argument less than
* itemCount in which case an existing item is modified, or equal to
* itemCount in which case a new item is added, and the itemCount is
* incremented by one.
*
* Data should be added in order of preference, with the most specific
* format added first and the least specific format added last. If data of
* the given format already exists, it is replaced in the same position as
* the old data.
*
* The data should be either a string, a primitive boolean or number type
* (which will be converted into a string) or an nsISupports.
*
* @param format the format to add
* @param data the data to add
* @throws NS_ERROR_NULL_POINTER if the data is null
* @throws NS_ERROR_DOM_INDEX_SIZE_ERR if index is greater than itemCount
* @throws NO_MODIFICATION_ALLOWED_ERR if the item cannot be modified
*/
[Throws, NeedsSubjectPrincipal, UseCounter]
void mozSetDataAt(DOMString format, any data, unsigned long index);
/**
* Retrieve the data associated with the given format for an item at the
* specified index, or null if it does not exist. The index should be in the
* range from zero to itemCount - 1.
*
* @param format the format of the data to look up
* @returns the data of the given format, or null if it doesn't exist.
* @throws NS_ERROR_DOM_INDEX_SIZE_ERR if index is greater or equal than itemCount
*/
[Throws, NeedsSubjectPrincipal, UseCounter]
any mozGetDataAt(DOMString format, unsigned long index);
/**
* Update the drag image. Arguments are the same as setDragImage. This is only
* valid within the parent chrome process.
*/
[ChromeOnly]
void updateDragImage(Element image, long x, long y);
/**
* Will be true when the user has cancelled the drag (typically by pressing
* Escape) and when the drag has been cancelled unexpectedly. This will be
* false otherwise, including when the drop has been rejected by its target.
* This property is only relevant for the dragend event.
*/
[UseCounter]
readonly attribute boolean mozUserCancelled;
/**
* The node that the mouse was pressed over to begin the drag. For external
* drags, or if the caller cannot access this node, this will be null.
*/
[UseCounter]
readonly attribute Node? mozSourceNode;
/**
* The URI spec of the triggering principal. This may be different than
* sourceNode's principal when sourceNode is xul:browser and the drag is
* triggered in a browsing context inside it.
*/
[ChromeOnly]
readonly attribute DOMString mozTriggeringPrincipalURISpec;
/**
* Copy the given DataTransfer for the given event. Used by testing code for
* creating emulated Drag and Drop events in the UI.
*
* NOTE: Don't expose a DataTransfer produced with this method to the web or
* use this for non-testing purposes. It can easily be used to get the
* DataTransfer into an invalid state, and is an unstable implementation
* detail of EventUtils.synthesizeDrag.
*/
[Throws, ChromeOnly]
DataTransfer mozCloneForEvent(DOMString event);
};

View File

@ -22,7 +22,3 @@ interface DelayNode : AudioNode {
readonly attribute AudioParam delayTime; readonly attribute AudioParam delayTime;
}; };
// Mozilla extension
DelayNode implements AudioNodePassThrough;

View File

@ -44,14 +44,3 @@ dictionary DeviceMotionEventInit : EventInit {
DeviceRotationRateInit rotationRate; DeviceRotationRateInit rotationRate;
double? interval = null; double? interval = null;
}; };
// Mozilla extensions.
partial interface DeviceMotionEvent {
void initDeviceMotionEvent(DOMString type,
optional boolean canBubble = false,
optional boolean cancelable = false,
optional DeviceAccelerationInit acceleration,
optional DeviceAccelerationInit accelerationIncludingGravity,
optional DeviceRotationRateInit rotationRate,
optional double? interval = null);
};

View File

@ -185,13 +185,6 @@ partial interface Document {
[Pref="dom.select_events.enabled"] [Pref="dom.select_events.enabled"]
attribute EventHandler onselectionchange; attribute EventHandler onselectionchange;
/**
* True if this document is synthetic : stand alone image, video, audio file,
* etc.
*/
/*Non standard
[Func="IsChromeOrXBL"] readonly attribute boolean mozSyntheticDocument;
*/
/** /**
* Returns the script element whose script is currently being processed. * Returns the script element whose script is currently being processed.
* *
@ -361,85 +354,6 @@ partial interface Document {
readonly attribute SVGSVGElement? rootElement; readonly attribute SVGSVGElement? rootElement;
}; };
// Mozilla extensions of various sorts
partial interface Document {
// XBL support. Wish we could make these [ChromeOnly], but
// that would likely break bindings running with the page principal.
/*Non standard
[Func="IsChromeOrXBL"]
NodeList? getAnonymousNodes(Element elt);
[Func="IsChromeOrXBL"]
Element? getAnonymousElementByAttribute(Element elt, DOMString attrName,
DOMString attrValue);
[Func="IsChromeOrXBL"]
Element? getBindingParent(Node node);
[Throws, Func="IsChromeOrXBL", NeedsSubjectPrincipal]
void loadBindingDocument(DOMString documentURL);
*/
// Touch bits
// XXXbz I can't find the sane spec for this stuff, so just cribbing
// from our xpidl for now.
[NewObject, Func="nsGenericHTMLElement::TouchEventsEnabled"]
Touch createTouch(optional Window? view = null,
optional EventTarget? target = null,
optional long identifier = 0,
optional long pageX = 0,
optional long pageY = 0,
optional long screenX = 0,
optional long screenY = 0,
optional long clientX = 0,
optional long clientY = 0,
optional long radiusX = 0,
optional long radiusY = 0,
optional float rotationAngle = 0,
optional float force = 0);
// XXXbz a hack to get around the fact that we don't support variadics as
// distinguishing arguments yet. Once this hack is removed. we can also
// remove the corresponding overload on nsIDocument, since Touch... and
// sequence<Touch> look the same in the C++.
[NewObject, Func="nsGenericHTMLElement::TouchEventsEnabled"]
TouchList createTouchList(Touch touch, Touch... touches);
// XXXbz and another hack for the fact that we can't usefully have optional
// distinguishing arguments but need a working zero-arg form of
// createTouchList().
/*TODO
[NewObject, Func="nsGenericHTMLElement::TouchEventsEnabled"]
TouchList createTouchList();
[NewObject, Func="nsGenericHTMLElement::TouchEventsEnabled"]
TouchList createTouchList(sequence<Touch> touches);
*/
[ChromeOnly]
attribute boolean styleSheetChangeEventsEnabled;
[ChromeOnly, Throws]
void obsoleteSheet(URI sheetURI);
[ChromeOnly, Throws]
void obsoleteSheet(DOMString sheetURI);
[ChromeOnly] readonly attribute nsIDocShell? docShell;
[ChromeOnly] readonly attribute DOMString contentLanguage;
[ChromeOnly] readonly attribute nsILoadGroup? documentLoadGroup;
// Blocks the initial document parser until the given promise is settled.
[ChromeOnly, Throws]
Promise<any> blockParsing(Promise<any> promise,
optional BlockParsingOptions options);
// like documentURI, except that for error pages, it returns the URI we were
// trying to load when we hit an error, rather than the error page's own URI.
[ChromeOnly] readonly attribute URI? mozDocumentURIIfNotForErrorPages;
// A promise that is resolved, with this document itself, when we have both
// fired DOMContentLoaded and are ready to start layout. This is used for the
// "document_idle" webextension script injection point.
[ChromeOnly, Throws]
readonly attribute Promise<Document> documentReadyForIdle;
};
dictionary BlockParsingOptions { dictionary BlockParsingOptions {
/** /**
* If true, blocks script-created parsers (created via document.open()) in * If true, blocks script-created parsers (created via document.open()) in
@ -507,16 +421,6 @@ partial interface Document {
void notifyUserGestureActivation(); void notifyUserGestureActivation();
}; };
// Extension to give chrome and XBL JS the ability to determine whether
// the document is sandboxed without permission to run scripts
// and whether inline scripts are blocked by the document's CSP.
/*Non standard
partial interface Document {
[Func="IsChromeOrXBL"] readonly attribute boolean hasScriptsBlockedBySandbox;
[Func="IsChromeOrXBL"] readonly attribute boolean inlineScriptAllowedByCSP;
};
*/
// For more information on Flash classification, see // For more information on Flash classification, see
// toolkit/components/url-classifier/flash-block-lists.rst // toolkit/components/url-classifier/flash-block-lists.rst
enum FlashClassification { enum FlashClassification {
@ -531,12 +435,12 @@ partial interface Document {
readonly attribute FlashClassification documentFlashClassification; readonly attribute FlashClassification documentFlashClassification;
}; };
Document implements XPathEvaluator; Document includes XPathEvaluator;
Document implements GlobalEventHandlers; Document includes GlobalEventHandlers;
Document implements DocumentAndElementEventHandlers; Document includes DocumentAndElementEventHandlers;
Document implements TouchEventHandlers; Document includes TouchEventHandlers;
Document implements ParentNode; Document includes ParentNode;
Document implements OnErrorEventHandlerForNodes; Document includes OnErrorEventHandlerForNodes;
Document implements GeometryUtils; Document includes GeometryUtils;
Document implements FontFaceSource; Document includes FontFaceSource;
Document implements DocumentOrShadowRoot; Document includes DocumentOrShadowRoot;

View File

@ -24,4 +24,4 @@ partial interface DocumentFragment {
NodeList querySelectorAll(DOMString selectors); NodeList querySelectorAll(DOMString selectors);
}; };
DocumentFragment implements ParentNode; DocumentFragment includes ParentNode;

View File

@ -8,8 +8,7 @@
* http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-the-documentorshadowroot-mixin * http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-the-documentorshadowroot-mixin
*/ */
[NoInterfaceObject] interface mixin DocumentOrShadowRoot {
interface DocumentOrShadowRoot {
// Not implemented yet: bug 1430308. // Not implemented yet: bug 1430308.
// Selection? getSelection(); // Selection? getSelection();
Element? elementFromPoint (float x, float y); Element? elementFromPoint (float x, float y);

View File

@ -16,4 +16,4 @@ interface DocumentType : Node {
readonly attribute DOMString systemId; readonly attribute DOMString systemId;
}; };
DocumentType implements ChildNode; DocumentType includes ChildNode;

View File

@ -30,7 +30,3 @@ interface DynamicsCompressorNode : AudioNode {
readonly attribute AudioParam release; // in Seconds readonly attribute AudioParam release; // in Seconds
}; };
// Mozilla extension
DynamicsCompressorNode implements AudioNodePassThrough;

View File

@ -143,8 +143,6 @@ interface Element : Node {
[ChromeOnly] [ChromeOnly]
void setCaptureAlways(optional boolean retargetToElement = false); void setCaptureAlways(optional boolean retargetToElement = false);
// Mozilla extensions
// Obsolete methods. // Obsolete methods.
Attr? getAttributeNode(DOMString name); Attr? getAttributeNode(DOMString name);
[CEReactions, Throws] [CEReactions, Throws]
@ -225,15 +223,6 @@ partial interface Element {
readonly attribute long clientLeft; readonly attribute long clientLeft;
readonly attribute long clientWidth; readonly attribute long clientWidth;
readonly attribute long clientHeight; readonly attribute long clientHeight;
// Mozilla specific stuff
/* The minimum/maximum offset that the element can be scrolled to
(i.e., the value that scrollLeft/scrollTop would be clamped to if they were
set to arbitrarily large values. */
[ChromeOnly] readonly attribute long scrollTopMin;
readonly attribute long scrollTopMax;
[ChromeOnly] readonly attribute long scrollLeftMin;
readonly attribute long scrollLeftMax;
}; };
// http://domparsing.spec.whatwg.org/#extensions-to-the-element-interface // http://domparsing.spec.whatwg.org/#extensions-to-the-element-interface
@ -276,11 +265,11 @@ partial interface Element {
attribute DOMString slot; attribute DOMString slot;
}; };
Element implements ChildNode; Element includes ChildNode;
Element implements NonDocumentTypeChildNode; Element includes NonDocumentTypeChildNode;
Element implements ParentNode; Element includes ParentNode;
Element implements Animatable; Element includes Animatable;
Element implements GeometryUtils; Element includes GeometryUtils;
// https://fullscreen.spec.whatwg.org/#api // https://fullscreen.spec.whatwg.org/#api
partial interface Element { partial interface Element {

View File

@ -58,31 +58,6 @@ interface Event {
attribute boolean cancelBubble; attribute boolean cancelBubble;
}; };
// Mozilla specific legacy stuff.
partial interface Event {
const long ALT_MASK = 0x00000001;
const long CONTROL_MASK = 0x00000002;
const long SHIFT_MASK = 0x00000004;
const long META_MASK = 0x00000008;
/** The original target of the event, before any retargetings. */
readonly attribute EventTarget? originalTarget;
/**
* The explicit original target of the event. If the event was retargeted
* for some reason other than an anonymous boundary crossing, this will be set
* to the target before the retargeting occurs. For example, mouse events
* are retargeted to their parent node when they happen over text nodes (bug
* 185889), and in that case .target will show the parent and
* .explicitOriginalTarget will show the text node.
* .explicitOriginalTarget differs from .originalTarget in that it will never
* contain anonymous content.
*/
readonly attribute EventTarget? explicitOriginalTarget;
[ChromeOnly] readonly attribute EventTarget? composedTarget;
[ChromeOnly] readonly attribute boolean multipleActionsPrevented;
[ChromeOnly] readonly attribute boolean isSynthesized;
};
dictionary EventInit { dictionary EventInit {
boolean bubbles = false; boolean bubbles = false;
boolean cancelable = false; boolean cancelable = false;

View File

@ -22,8 +22,7 @@ typedef OnBeforeUnloadEventHandlerNonNull? OnBeforeUnloadEventHandler;
callback OnErrorEventHandlerNonNull = any ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long column, optional any error); callback OnErrorEventHandlerNonNull = any ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long column, optional any error);
typedef OnErrorEventHandlerNonNull? OnErrorEventHandler; typedef OnErrorEventHandlerNonNull? OnErrorEventHandler;
[NoInterfaceObject] interface mixin GlobalEventHandlers {
interface GlobalEventHandlers {
attribute EventHandler onabort; attribute EventHandler onabort;
attribute EventHandler onblur; attribute EventHandler onblur;
// We think the spec is wrong here. See OnErrorEventHandlerForNodes/Window // We think the spec is wrong here. See OnErrorEventHandlerForNodes/Window
@ -116,11 +115,6 @@ interface GlobalEventHandlers {
[Pref="dom.w3c_pointer_events.enabled"] [Pref="dom.w3c_pointer_events.enabled"]
attribute EventHandler onlostpointercapture; attribute EventHandler onlostpointercapture;
// Mozilla-specific handlers. Unprefixed handlers live in
// Document rather than here.
attribute EventHandler onmozfullscreenchange;
attribute EventHandler onmozfullscreenerror;
// CSS-Animation and CSS-Transition handlers. // CSS-Animation and CSS-Transition handlers.
attribute EventHandler onanimationcancel; attribute EventHandler onanimationcancel;
attribute EventHandler onanimationend; attribute EventHandler onanimationend;
@ -139,8 +133,7 @@ interface GlobalEventHandlers {
attribute EventHandler onwebkittransitionend; attribute EventHandler onwebkittransitionend;
}; };
[NoInterfaceObject] interface mixin WindowEventHandlers {
interface WindowEventHandlers {
attribute EventHandler onafterprint; attribute EventHandler onafterprint;
attribute EventHandler onbeforeprint; attribute EventHandler onbeforeprint;
attribute OnBeforeUnloadEventHandler onbeforeunload; attribute OnBeforeUnloadEventHandler onbeforeunload;
@ -157,8 +150,7 @@ interface WindowEventHandlers {
attribute EventHandler onunload; attribute EventHandler onunload;
}; };
[NoInterfaceObject] interface mixin DocumentAndElementEventHandlers {
interface DocumentAndElementEventHandlers {
attribute EventHandler oncopy; attribute EventHandler oncopy;
attribute EventHandler oncut; attribute EventHandler oncut;
attribute EventHandler onpaste; attribute EventHandler onpaste;
@ -169,12 +161,10 @@ interface DocumentAndElementEventHandlers {
// whether an ErrorEvent was fired. We don't do that, and until we do we'll // whether an ErrorEvent was fired. We don't do that, and until we do we'll
// need to distinguish between onerror on Window or on nodes. // need to distinguish between onerror on Window or on nodes.
[NoInterfaceObject] interface mixin OnErrorEventHandlerForNodes {
interface OnErrorEventHandlerForNodes {
attribute EventHandler onerror; attribute EventHandler onerror;
}; };
[NoInterfaceObject] interface mixin OnErrorEventHandlerForWindow {
interface OnErrorEventHandlerForWindow {
attribute OnErrorEventHandler onerror; attribute OnErrorEventHandler onerror;
}; };

View File

@ -13,11 +13,6 @@
dictionary EventListenerOptions { dictionary EventListenerOptions {
boolean capture = false; boolean capture = false;
/* Setting to true make the listener be added to the system group. */
/*Non standard
[Func="ThreadSafeIsChromeOrXBL"]
boolean mozSystemGroup = false;
*/
}; };
dictionary AddEventListenerOptions : EventListenerOptions { dictionary AddEventListenerOptions : EventListenerOptions {
@ -44,27 +39,3 @@ interface EventTarget {
[Throws, NeedsCallerType] [Throws, NeedsCallerType]
boolean dispatchEvent(Event event); boolean dispatchEvent(Event event);
}; };
// Mozilla extensions for use by JS-implemented event targets to
// implement on* properties.
partial interface EventTarget {
// The use of [TreatNonCallableAsNull] here is a bit of a hack: it just makes
// the codegen check whether the type involved is either
// [TreatNonCallableAsNull] or [TreatNonObjectAsNull] and if it is handle it
// accordingly. In particular, it will NOT actually treat a non-null
// non-callable object as null here.
[ChromeOnly, Throws]
void setEventHandler(DOMString type,
[TreatNonCallableAsNull] EventHandler handler);
[ChromeOnly]
EventHandler getEventHandler(DOMString type);
};
// Mozilla extension to make firing events on event targets from
// chrome easier. This returns the window which can be used to create
// events to fire at this EventTarget, or null if there isn't one.
partial interface EventTarget {
[ChromeOnly, Exposed=(Window,System), BinaryName="ownerGlobalForBindings"]
readonly attribute WindowProxy? ownerGlobal;
};

View File

@ -10,8 +10,8 @@
typedef object JSON; typedef object JSON;
typedef (Blob or BufferSource or FormData or URLSearchParams or USVString) BodyInit; typedef (Blob or BufferSource or FormData or URLSearchParams or USVString) BodyInit;
[NoInterfaceObject, Exposed=(Window,Worker)] [Exposed=(Window,Worker)]
interface Body { interface mixin Body {
readonly attribute boolean bodyUsed; readonly attribute boolean bodyUsed;
[Throws] [Throws]
Promise<ArrayBuffer> arrayBuffer(); Promise<ArrayBuffer> arrayBuffer();

View File

@ -29,28 +29,3 @@ dictionary ChromeFilePropertyBag : FilePropertyBag {
DOMString name = ""; DOMString name = "";
boolean existenceCheck = true; boolean existenceCheck = true;
}; };
// Mozilla extensions
partial interface File {
[BinaryName="relativePath", Func="mozilla::dom::DOMPrefs::WebkitBlinkDirectoryPickerEnabled"]
readonly attribute USVString webkitRelativePath;
[GetterThrows, ChromeOnly, NeedsCallerType]
readonly attribute DOMString mozFullPath;
};
// Mozilla extensions
// These 2 methods can be used only in these conditions:
// - the main-thread
// - parent process OR file process OR, only for testing, with pref
// `dom.file.createInChild' set to true.
[Exposed=(Window)]
partial interface File {
[ChromeOnly, Throws, NeedsCallerType]
static Promise<File> createFromNsIFile(nsIFile file,
optional ChromeFilePropertyBag options);
[ChromeOnly, Throws, NeedsCallerType]
static Promise<File> createFromFileName(USVString fileName,
optional ChromeFilePropertyBag options);
};

View File

@ -10,9 +10,7 @@
* liability, trademark and document use rules apply. * liability, trademark and document use rules apply.
*/ */
[NoInterfaceObject] interface mixin FontFaceSource {
interface FontFaceSource {
[Pref="layout.css.font-loading-api.enabled"] [Pref="layout.css.font-loading-api.enabled"]
readonly attribute FontFaceSet fonts; readonly attribute FontFaceSet fonts;
}; };

View File

@ -209,12 +209,11 @@ interface FrameLoader {
* The nsIWebBrowserPersistDocumentReceiver is a callback that * The nsIWebBrowserPersistDocumentReceiver is a callback that
* will be fired once the document is ready for persisting. * will be fired once the document is ready for persisting.
*/ */
[NoInterfaceObject] interface mixin WebBrowserPersistable
interface WebBrowserPersistable
{ {
[Throws] [Throws]
void startPersistence(unsigned long long aOuterWindowID, void startPersistence(unsigned long long aOuterWindowID,
nsIWebBrowserPersistDocumentReceiver aRecv); nsIWebBrowserPersistDocumentReceiver aRecv);
}; };
FrameLoader implements WebBrowserPersistable; FrameLoader includes WebBrowserPersistable;

View File

@ -21,7 +21,3 @@ interface GainNode : AudioNode {
readonly attribute AudioParam gain; readonly attribute AudioParam gain;
}; };
// Mozilla extension
GainNode implements AudioNodePassThrough;

View File

@ -21,8 +21,7 @@ dictionary ConvertCoordinateOptions {
CSSBoxType toBox = "border"; CSSBoxType toBox = "border";
}; };
[NoInterfaceObject] interface mixin GeometryUtils {
interface GeometryUtils {
[Throws, Func="nsINode::HasBoxQuadsSupport", NeedsCallerType] [Throws, Func="nsINode::HasBoxQuadsSupport", NeedsCallerType]
sequence<DOMQuad> getBoxQuads(optional BoxQuadOptions options); sequence<DOMQuad> getBoxQuads(optional BoxQuadOptions options);
[Throws, Pref="layout.css.convertFromNode.enabled", NeedsCallerType] [Throws, Pref="layout.css.convertFromNode.enabled", NeedsCallerType]
@ -33,6 +32,6 @@ interface GeometryUtils {
DOMPoint convertPointFromNode(DOMPointInit point, GeometryNode from, optional ConvertCoordinateOptions options); DOMPoint convertPointFromNode(DOMPointInit point, GeometryNode from, optional ConvertCoordinateOptions options);
}; };
// PseudoElement implements GeometryUtils; // PseudoElement includes GeometryUtils;
typedef (Text or Element /* or PseudoElement */ or Document) GeometryNode; typedef (Text or Element /* or PseudoElement */ or Document) GeometryNode;

View File

@ -35,7 +35,7 @@ interface HTMLAnchorElement : HTMLElement {
attribute DOMString text; attribute DOMString text;
}; };
HTMLAnchorElement implements HTMLHyperlinkElementUtils; HTMLAnchorElement includes HTMLHyperlinkElementUtils;
// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis // http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
partial interface HTMLAnchorElement { partial interface HTMLAnchorElement {

View File

@ -35,7 +35,7 @@ interface HTMLAreaElement : HTMLElement {
readonly attribute DOMTokenList relList; readonly attribute DOMTokenList relList;
}; };
HTMLAreaElement implements HTMLHyperlinkElementUtils; HTMLAreaElement includes HTMLHyperlinkElementUtils;
// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis // http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
partial interface HTMLAreaElement { partial interface HTMLAreaElement {

View File

@ -30,4 +30,4 @@ partial interface HTMLBodyElement {
attribute DOMString background; attribute DOMString background;
}; };
HTMLBodyElement implements WindowEventHandlers; HTMLBodyElement includes WindowEventHandlers;

View File

@ -33,23 +33,6 @@ interface HTMLCanvasElement : HTMLElement {
optional any encoderOptions); optional any encoderOptions);
}; };
// Mozilla specific bits
partial interface HTMLCanvasElement {
[Pure, SetterThrows]
attribute boolean mozOpaque;
[Throws, NeedsSubjectPrincipal]
File mozGetAsFile(DOMString name, optional DOMString? type = null);
// A Mozilla-only extension to get a canvas context backed by double-buffered
// shared memory. Only privileged callers can call this.
[ChromeOnly, Throws]
nsISupports? MozGetIPCContext(DOMString contextId);
attribute PrintCallback? mozPrintCallback;
[Throws, Pref="canvas.capturestream.enabled", NeedsSubjectPrincipal]
CanvasCaptureMediaStream captureStream(optional double frameRate);
};
// For OffscreenCanvas // For OffscreenCanvas
// Reference: https://wiki.whatwg.org/wiki/OffscreenCanvas // Reference: https://wiki.whatwg.org/wiki/OffscreenCanvas
partial interface HTMLCanvasElement { partial interface HTMLCanvasElement {

View File

@ -80,8 +80,7 @@ partial interface HTMLElement {
readonly attribute long offsetHeight; readonly attribute long offsetHeight;
}; };
[NoInterfaceObject] interface mixin TouchEventHandlers {
interface TouchEventHandlers {
[Func="nsGenericHTMLElement::TouchEventsEnabled"] [Func="nsGenericHTMLElement::TouchEventsEnabled"]
attribute EventHandler ontouchstart; attribute EventHandler ontouchstart;
[Func="nsGenericHTMLElement::TouchEventsEnabled"] [Func="nsGenericHTMLElement::TouchEventsEnabled"]
@ -92,9 +91,9 @@ interface TouchEventHandlers {
attribute EventHandler ontouchcancel; attribute EventHandler ontouchcancel;
}; };
HTMLElement implements GlobalEventHandlers; HTMLElement includes GlobalEventHandlers;
HTMLElement implements DocumentAndElementEventHandlers; HTMLElement includes DocumentAndElementEventHandlers;
HTMLElement implements TouchEventHandlers; HTMLElement includes TouchEventHandlers;
HTMLElement implements OnErrorEventHandlerForNodes; HTMLElement includes OnErrorEventHandlerForNodes;
interface HTMLUnknownElement : HTMLElement {}; interface HTMLUnknownElement : HTMLElement {};

View File

@ -39,6 +39,6 @@ partial interface HTMLEmbedElement {
Document? getSVGDocument(); Document? getSVGDocument();
}; };
HTMLEmbedElement implements MozImageLoadingContent; HTMLEmbedElement includes MozImageLoadingContent;
HTMLEmbedElement implements MozFrameLoaderOwner; HTMLEmbedElement includes MozFrameLoaderOwner;
HTMLEmbedElement implements MozObjectLoadingContent; HTMLEmbedElement includes MozObjectLoadingContent;

View File

@ -35,4 +35,4 @@ interface HTMLFrameElement : HTMLElement {
attribute DOMString marginWidth; attribute DOMString marginWidth;
}; };
HTMLFrameElement implements MozFrameLoaderOwner; HTMLFrameElement includes MozFrameLoaderOwner;

View File

@ -19,4 +19,4 @@ interface HTMLFrameSetElement : HTMLElement {
attribute DOMString rows; attribute DOMString rows;
}; };
HTMLFrameSetElement implements WindowEventHandlers; HTMLFrameSetElement includes WindowEventHandlers;

View File

@ -65,5 +65,5 @@ partial interface HTMLIFrameElement {
attribute boolean mozbrowser; attribute boolean mozbrowser;
}; };
HTMLIFrameElement implements MozFrameLoaderOwner; HTMLIFrameElement includes MozFrameLoaderOwner;
HTMLIFrameElement implements BrowserElement; HTMLIFrameElement includes BrowserElement;

View File

@ -67,65 +67,3 @@ partial interface HTMLImageElement {
attribute DOMString sizes; attribute DOMString sizes;
readonly attribute DOMString currentSrc; readonly attribute DOMString currentSrc;
}; };
// Mozilla extensions.
partial interface HTMLImageElement {
[CEReactions, SetterThrows]
attribute DOMString lowsrc;
// These attributes are offsets from the closest view (to mimic
// NS4's "offset-from-layer" behavior).
readonly attribute long x;
readonly attribute long y;
};
[NoInterfaceObject]
interface MozImageLoadingContent {
// Mirrored chrome-only nsIImageLoadingContent methods. Please make sure
// to update this list if nsIImageLoadingContent changes.
[ChromeOnly]
const long UNKNOWN_REQUEST = -1;
[ChromeOnly]
const long CURRENT_REQUEST = 0;
[ChromeOnly]
const long PENDING_REQUEST = 1;
[ChromeOnly]
attribute boolean loadingEnabled;
[ChromeOnly]
readonly attribute short imageBlockingStatus;
/**
* Same as addNativeObserver but intended for scripted observers or observers
* from another or without a document.
*/
[ChromeOnly]
void addObserver(imgINotificationObserver aObserver);
/**
* Same as removeNativeObserver but intended for scripted observers or
* observers from another or without a document.
*/
[ChromeOnly]
void removeObserver(imgINotificationObserver aObserver);
[ChromeOnly,Throws]
imgIRequest? getRequest(long aRequestType);
[ChromeOnly,Throws]
long getRequestType(imgIRequest aRequest);
[ChromeOnly,Throws]
readonly attribute URI? currentURI;
// Gets the final URI of the current request, if available.
// Otherwise, returns null.
[ChromeOnly]
readonly attribute URI? currentRequestFinalURI;
/**
* forceReload forces reloading of the image pointed to by currentURI
*
* @param aNotify request should notify
* @throws NS_ERROR_NOT_AVAILABLE if there is no current URI to reload
*/
[ChromeOnly,Throws]
void forceReload(optional boolean aNotify = true);
[ChromeOnly]
void forceImageState(boolean aForce, unsigned long long aState);
};
HTMLImageElement implements MozImageLoadingContent;

View File

@ -147,67 +147,7 @@ partial interface HTMLInputElement {
attribute DOMString useMap; attribute DOMString useMap;
}; };
// Mozilla extensions HTMLInputElement includes MozEditableElement;
partial interface HTMLInputElement {
[GetterThrows, ChromeOnly]
readonly attribute XULControllers controllers;
// Binaryname because we have a FragmentOrElement function named "TextLength()".
[NeedsCallerType, BinaryName="inputTextLength"]
readonly attribute long textLength;
[Throws, ChromeOnly]
sequence<DOMString> mozGetFileNameArray();
[ChromeOnly, Throws]
void mozSetFileNameArray(sequence<DOMString> fileNames);
[ChromeOnly]
void mozSetFileArray(sequence<File> files);
// This method is meant to use for testing only.
[ChromeOnly, Throws]
void mozSetDirectory(DOMString directoryPath);
// This method is meant to use for testing only.
[ChromeOnly]
void mozSetDndFilesAndDirectories(sequence<(File or Directory)> list);
// Number controls (<input type=number>) have an anonymous text control
// (<input type=text>) in the anonymous shadow tree that they contain. On
// such an anonymous text control this property provides access to the
// number control that owns the text control. This is useful, for example,
// in code that looks at the currently focused element to make decisions
// about which IME to bring up. Such code needs to be able to check for any
// owning number control since it probably wants to bring up a number pad
// instead of the standard keyboard, even when the anonymous text control has
// focus.
[ChromeOnly]
readonly attribute HTMLInputElement? ownerNumberControl;
boolean mozIsTextField(boolean aExcludePassword);
[ChromeOnly]
// This function will return null if @autocomplete is not defined for the
// current @type
AutocompleteInfo? getAutocompleteInfo();
};
[NoInterfaceObject]
interface MozEditableElement {
[Pure, ChromeOnly]
readonly attribute nsIEditor? editor;
/*Non standard
// This is similar to set .value on nsIDOMInput/TextAreaElements, but handling
// of the value change is closer to the normal user input, so 'change' event
// for example will be dispatched when focusing out the element.
[Func="IsChromeOrXBL", NeedsSubjectPrincipal]
void setUserInput(DOMString input);
*/
};
HTMLInputElement implements MozEditableElement;
/*Non standard /*Non standard
partial interface HTMLInputElement { partial interface HTMLInputElement {
@ -228,7 +168,7 @@ partial interface HTMLInputElement {
}; };
*/ */
HTMLInputElement implements MozImageLoadingContent; HTMLInputElement includes MozImageLoadingContent;
// Webkit/Blink // Webkit/Blink
partial interface HTMLInputElement { partial interface HTMLInputElement {
@ -264,31 +204,6 @@ partial interface HTMLInputElement {
[Pref="dom.forms.datetime", ChromeOnly, [Pref="dom.forms.datetime", ChromeOnly,
BinaryName="getMaximumAsDouble"] BinaryName="getMaximumAsDouble"]
double getMaximum(); double getMaximum();
/*Non standard
[Pref="dom.forms.datetime", Func="IsChromeOrXBL"]
void openDateTimePicker(optional DateTimeValue initialValue);
[Pref="dom.forms.datetime", Func="IsChromeOrXBL"]
void updateDateTimePicker(optional DateTimeValue value);
[Pref="dom.forms.datetime", Func="IsChromeOrXBL"]
void closeDateTimePicker();
[Pref="dom.forms.datetime", Func="IsChromeOrXBL"]
void setFocusState(boolean aIsFocused);
[Pref="dom.forms.datetime", Func="IsChromeOrXBL"]
void updateValidityState();
[Pref="dom.forms.datetime", Func="IsChromeOrXBL",
BinaryName="getStepAsDouble"]
double getStep();
[Pref="dom.forms.datetime", Func="IsChromeOrXBL",
BinaryName="getStepBaseAsDouble"]
double getStepBase();
*/
}; };
partial interface HTMLInputElement { partial interface HTMLInputElement {

View File

@ -34,7 +34,7 @@ interface HTMLLinkElement : HTMLElement {
attribute DOMString referrerPolicy; attribute DOMString referrerPolicy;
[PutForwards=value] readonly attribute DOMTokenList sizes; [PutForwards=value] readonly attribute DOMTokenList sizes;
}; };
HTMLLinkElement implements LinkStyle; HTMLLinkElement includes LinkStyle;
// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis // http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
partial interface HTMLLinkElement { partial interface HTMLLinkElement {

View File

@ -98,55 +98,6 @@ interface HTMLMediaElement : HTMLElement {
optional DOMString language = ""); optional DOMString language = "");
}; };
// Mozilla extensions:
partial interface HTMLMediaElement {
[Func="HasDebuggerOrTabsPrivilege"]
readonly attribute MediaSource? mozMediaSourceObject;
[Func="HasDebuggerOrTabsPrivilege"]
readonly attribute DOMString mozDebugReaderData;
[Func="HasDebuggerOrTabsPrivilege", NewObject]
Promise<DOMString> mozRequestDebugInfo();
[Func="HasDebuggerOrTabsPrivilege", NewObject]
static void mozEnableDebugLog();
[Func="HasDebuggerOrTabsPrivilege", NewObject]
Promise<DOMString> mozRequestDebugLog();
[Pref="media.test.dumpDebugInfo"]
Promise<void> mozDumpDebugInfo();
attribute MediaStream? srcObject;
attribute boolean mozPreservesPitch;
/*Non standard
// NB: for internal use with the video controls:
[Func="IsChromeOrXBL"] attribute boolean mozAllowCasting;
[Func="IsChromeOrXBL"] attribute boolean mozIsCasting;
*/
// Mozilla extension: stream capture
[Throws]
MediaStream mozCaptureStream();
[Throws]
MediaStream mozCaptureStreamUntilEnded();
readonly attribute boolean mozAudioCaptured;
// Mozilla extension: return embedded metadata from the stream as a
// JSObject with key:value pairs for each tag. This can be used by
// player interfaces to display the song title, artist, etc.
[Throws]
object? mozGetMetadata();
// Mozilla extension: provides access to the fragment end time if
// the media element has a fragment URI for the currentSrc, otherwise
// it is equal to the media duration.
readonly attribute double mozFragmentEnd;
[ChromeOnly]
void reportCanPlayTelemetry();
};
// Encrypted Media Extensions // Encrypted Media Extensions
partial interface HTMLMediaElement { partial interface HTMLMediaElement {
readonly attribute MediaKeys? mediaKeys; readonly attribute MediaKeys? mediaKeys;
@ -160,16 +111,6 @@ partial interface HTMLMediaElement {
attribute EventHandler onwaitingforkey; attribute EventHandler onwaitingforkey;
}; };
// This is just for testing
partial interface HTMLMediaElement {
[Pref="media.useAudioChannelService.testing"]
readonly attribute double computedVolume;
[Pref="media.useAudioChannelService.testing"]
readonly attribute boolean computedMuted;
[Pref="media.useAudioChannelService.testing"]
readonly attribute unsigned long computedSuspended;
};
/* /*
* HTMLMediaElement::seekToNextFrame() is a Mozilla experimental feature. * HTMLMediaElement::seekToNextFrame() is a Mozilla experimental feature.
* *

View File

@ -30,33 +30,3 @@ partial interface HTMLMenuElement {
[CEReactions, SetterThrows] [CEReactions, SetterThrows]
attribute boolean compact; attribute boolean compact;
}; };
// Mozilla specific stuff
partial interface HTMLMenuElement {
/**
* Creates and dispatches a trusted event named "show".
* The event is not cancelable and does not bubble.
* See http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus
*/
[ChromeOnly]
void sendShowEvent();
/**
* Creates a native menu builder. The builder type is dependent on menu type.
* Currently, it returns the @mozilla.org/content/html-menu-builder;1
* component. Toolbar menus are not yet supported (the method returns null).
*/
[ChromeOnly]
MenuBuilder? createBuilder();
/*
* Builds a menu by iterating over menu children.
* See http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#building-menus-and-toolbars
* The caller can use a native builder by calling createBuilder() or provide
* a custom builder that implements the nsIMenuBuilder interface.
* A custom builder can be used for example to build native context menus
* that are not defined using <menupopup>.
*/
[ChromeOnly]
void build(MenuBuilder aBuilder);
};

View File

@ -78,145 +78,6 @@ partial interface HTMLObjectElement {
Document? getSVGDocument(); Document? getSVGDocument();
}; };
[NoInterfaceObject]
interface MozObjectLoadingContent {
// Mirrored chrome-only scriptable nsIObjectLoadingContent methods. Please
// make sure to update this list if nsIObjectLoadingContent changes. Also,
// make sure everything on here is [ChromeOnly].
[ChromeOnly]
const unsigned long TYPE_LOADING = 0;
[ChromeOnly]
const unsigned long TYPE_IMAGE = 1;
[ChromeOnly]
const unsigned long TYPE_PLUGIN = 2;
[ChromeOnly]
const unsigned long TYPE_FAKE_PLUGIN = 3;
[ChromeOnly]
const unsigned long TYPE_DOCUMENT = 4;
[ChromeOnly]
const unsigned long TYPE_NULL = 5;
// The content type is not supported (e.g. plugin not installed)
[ChromeOnly]
const unsigned long PLUGIN_UNSUPPORTED = 0;
// Showing alternate content
[ChromeOnly]
const unsigned long PLUGIN_ALTERNATE = 1;
// The plugin exists, but is disabled
[ChromeOnly]
const unsigned long PLUGIN_DISABLED = 2;
// The plugin is blocklisted and disabled
[ChromeOnly]
const unsigned long PLUGIN_BLOCKLISTED = 3;
// The plugin is considered outdated, but not disabled
[ChromeOnly]
const unsigned long PLUGIN_OUTDATED = 4;
// The plugin has crashed
[ChromeOnly]
const unsigned long PLUGIN_CRASHED = 5;
// Suppressed by security policy
[ChromeOnly]
const unsigned long PLUGIN_SUPPRESSED = 6;
// Blocked by content policy
[ChromeOnly]
const unsigned long PLUGIN_USER_DISABLED = 7;
/// ** All values >= PLUGIN_CLICK_TO_PLAY are plugin placeholder types that
/// would be replaced by a real plugin if activated (playPlugin())
/// ** Furthermore, values >= PLUGIN_CLICK_TO_PLAY and
/// <= PLUGIN_VULNERABLE_NO_UPDATE are click-to-play types.
// The plugin is disabled until the user clicks on it
[ChromeOnly]
const unsigned long PLUGIN_CLICK_TO_PLAY = 8;
// The plugin is vulnerable (update available)
[ChromeOnly]
const unsigned long PLUGIN_VULNERABLE_UPDATABLE = 9;
// The plugin is vulnerable (no update available)
[ChromeOnly]
const unsigned long PLUGIN_VULNERABLE_NO_UPDATE = 10;
/**
* The actual mime type (the one we got back from the network
* request) for the element.
*/
[ChromeOnly]
readonly attribute DOMString actualType;
/**
* Gets the type of the content that's currently loaded. See
* the constants above for the list of possible values.
*/
[ChromeOnly]
readonly attribute unsigned long displayedType;
/**
* Gets the content type that corresponds to the give MIME type. See the
* constants above for the list of possible values. If nothing else fits,
* TYPE_NULL will be returned.
*/
[ChromeOnly]
unsigned long getContentTypeForMIMEType(DOMString aMimeType);
[ChromeOnly]
sequence<MozPluginParameter> getPluginAttributes();
[ChromeOnly]
sequence<MozPluginParameter> getPluginParameters();
/**
* This method will play a plugin that has been stopped by the click-to-play
* feature.
*/
[ChromeOnly, Throws, NeedsCallerType]
void playPlugin();
/**
* Forces a re-evaluation and reload of the tag, optionally invalidating its
* click-to-play state. This can be used when the MIME type that provides a
* type has changed, for instance, to force the tag to re-evalulate the
* handler to use.
*/
[ChromeOnly, Throws]
void reload(boolean aClearActivation);
/**
* This attribute will return true if the current content type has been
* activated, either explicitly or by passing checks that would have it be
* click-to-play.
*/
[ChromeOnly]
readonly attribute boolean activated;
/**
* The URL of the data/src loaded in the object. This may be null (i.e.
* an <embed> with no src).
*/
[ChromeOnly]
readonly attribute URI? srcURI;
[ChromeOnly]
readonly attribute unsigned long defaultFallbackType;
[ChromeOnly]
readonly attribute unsigned long pluginFallbackType;
/**
* If this object currently owns a running plugin, regardless of whether or
* not one is pending spawn/despawn.
*/
[ChromeOnly]
readonly attribute boolean hasRunningPlugin;
/**
* Disable the use of fake plugins and reload the tag if necessary
*/
[ChromeOnly, Throws]
void skipFakePlugins();
[ChromeOnly, Throws, NeedsCallerType]
readonly attribute unsigned long runID;
};
/** /**
* Name:Value pair type used for passing parameters to NPAPI or javascript * Name:Value pair type used for passing parameters to NPAPI or javascript
* plugins. * plugins.
@ -226,6 +87,6 @@ dictionary MozPluginParameter {
DOMString value = ""; DOMString value = "";
}; };
HTMLObjectElement implements MozImageLoadingContent; HTMLObjectElement includes MozImageLoadingContent;
HTMLObjectElement implements MozFrameLoaderOwner; HTMLObjectElement includes MozFrameLoaderOwner;
HTMLObjectElement implements MozObjectLoadingContent; HTMLObjectElement includes MozObjectLoadingContent;

View File

@ -17,5 +17,4 @@ interface HTMLStyleElement : HTMLElement {
[CEReactions, SetterThrows, Pure] [CEReactions, SetterThrows, Pure]
attribute DOMString type; attribute DOMString type;
}; };
HTMLStyleElement implements LinkStyle; HTMLStyleElement includes LinkStyle;

View File

@ -21,12 +21,6 @@ interface HTMLTableCellElement : HTMLElement {
[CEReactions, SetterThrows] [CEReactions, SetterThrows]
attribute DOMString headers; attribute DOMString headers;
readonly attribute long cellIndex; readonly attribute long cellIndex;
// Mozilla-specific extensions
[CEReactions, SetterThrows]
attribute DOMString abbr;
[CEReactions, SetterThrows]
attribute DOMString scope;
}; };
partial interface HTMLTableCellElement { partial interface HTMLTableCellElement {

View File

@ -81,16 +81,4 @@ interface HTMLTextAreaElement : HTMLElement {
void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction); void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction);
}; };
partial interface HTMLTextAreaElement { HTMLTextAreaElement includes MozEditableElement;
// Chrome-only Mozilla extensions
[Throws, ChromeOnly]
readonly attribute XULControllers controllers;
};
HTMLTextAreaElement implements MozEditableElement;
partial interface HTMLTextAreaElement {
[ChromeOnly]
attribute DOMString previewValue;
};

View File

@ -23,40 +23,6 @@ interface HTMLVideoElement : HTMLMediaElement {
attribute DOMString poster; attribute DOMString poster;
}; };
partial interface HTMLVideoElement {
// A count of the number of video frames that have demuxed from the media
// resource. If we were playing perfectly, we'd be able to paint this many
// frames.
readonly attribute unsigned long mozParsedFrames;
// A count of the number of frames that have been decoded. We may drop
// frames if the decode is taking too much time.
readonly attribute unsigned long mozDecodedFrames;
// A count of the number of frames that have been presented to the rendering
// pipeline. We may drop frames if they arrive late at the renderer.
readonly attribute unsigned long mozPresentedFrames;
// Number of presented frames which were painted on screen.
readonly attribute unsigned long mozPaintedFrames;
// Time which the last painted video frame was late by, in seconds.
readonly attribute double mozFrameDelay;
// True if the video has an audio track available.
readonly attribute boolean mozHasAudio;
/*Non standard
// Attributes for builtin video controls to lock screen orientation.
// True if video controls should lock orientation when fullscreen.
[Pref="media.videocontrols.lock-video-orientation", Func="IsChromeOrXBL"]
readonly attribute boolean mozOrientationLockEnabled;
// True if screen orientation is locked by video controls.
[Pref="media.videocontrols.lock-video-orientation", Func="IsChromeOrXBL"]
attribute boolean mozIsOrientationLocked;
*/
};
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#idl-def-HTMLVideoElement // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#idl-def-HTMLVideoElement
partial interface HTMLVideoElement { partial interface HTMLVideoElement {
[Func="mozilla::dom::MediaSource::Enabled", NewObject] [Func="mozilla::dom::MediaSource::Enabled", NewObject]

View File

@ -19,6 +19,3 @@ Constructor(BaseAudioContext context, IIRFilterOptions options)]
interface IIRFilterNode : AudioNode { interface IIRFilterNode : AudioNode {
void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse); void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
}; };
// Mozilla extension
IIRFilterNode implements AudioNodePassThrough;

View File

@ -66,6 +66,3 @@ dictionary KeyboardEventInit : EventModifierInit
unsigned long keyCode = 0; unsigned long keyCode = 0;
unsigned long which = 0; unsigned long which = 0;
}; };
// Mozilla extensions
KeyboardEvent implements KeyEvent;

View File

@ -1,31 +0,0 @@
/* -*- 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/.
*/
// invalid widl
//interface nsISupports;
//interface IID;
[NoInterfaceObject,
// Need Exposed here, because this is a mixin onto things like Event
// that are exposed in workers.
Exposed=(Window,Worker,System)]
interface LegacyQueryInterface {
// Legacy QueryInterface, only exposed to chrome code on the main thread.
[Exposed=(Window,System), ChromeOnly]
nsISupports QueryInterface(IID iid);
};
BoxObject implements LegacyQueryInterface;
DOMParser implements LegacyQueryInterface;
Document implements LegacyQueryInterface;
DocumentFragment implements LegacyQueryInterface;
Element implements LegacyQueryInterface;
Event implements LegacyQueryInterface;
Selection implements LegacyQueryInterface;
TreeColumns implements LegacyQueryInterface;
TreeContentView implements LegacyQueryInterface;
Window implements LegacyQueryInterface;
XMLHttpRequest implements LegacyQueryInterface;

View File

@ -7,8 +7,6 @@
* http://dev.w3.org/csswg/cssom/#the-linkstyle-interface * http://dev.w3.org/csswg/cssom/#the-linkstyle-interface
*/ */
[NoInterfaceObject] interface mixin LinkStyle {
interface LinkStyle {
readonly attribute StyleSheet? sheet; readonly attribute StyleSheet? sheet;
}; };

View File

@ -19,7 +19,3 @@ dictionary MediaElementAudioSourceOptions {
interface MediaElementAudioSourceNode : AudioNode { interface MediaElementAudioSourceNode : AudioNode {
}; };
// Mozilla extensions
MediaElementAudioSourceNode implements AudioNodePassThrough;

View File

@ -19,7 +19,3 @@ dictionary MediaStreamAudioSourceOptions {
interface MediaStreamAudioSourceNode : AudioNode { interface MediaStreamAudioSourceNode : AudioNode {
}; };
// Mozilla extensions
MediaStreamAudioSourceNode implements AudioNodePassThrough;

View File

@ -17,21 +17,4 @@ dictionary MediaTrackSettings {
boolean noiseSuppression; boolean noiseSuppression;
boolean autoGainControl; boolean autoGainControl;
long channelCount; long channelCount;
// Mozilla-specific extensions:
// http://fluffy.github.io/w3c-screen-share/#screen-based-video-constraints
// OBE by http://w3c.github.io/mediacapture-screen-share
DOMString mediaSource;
// Experimental https://bugzilla.mozilla.org/show_bug.cgi?id=1131568#c3
// https://bugzilla.mozilla.org/show_bug.cgi?id=1193075
long long browserWindow;
boolean scrollWithPage;
long viewportOffsetX;
long viewportOffsetY;
long viewportWidth;
long viewportHeight;
}; };

View File

@ -23,21 +23,4 @@ dictionary MediaTrackSupportedConstraints {
boolean channelCount = true; boolean channelCount = true;
boolean deviceId = true; boolean deviceId = true;
boolean groupId; // to be supported boolean groupId; // to be supported
// Mozilla-specific extensions:
// http://fluffy.github.io/w3c-screen-share/#screen-based-video-constraints
// OBE by http://w3c.github.io/mediacapture-screen-share
boolean mediaSource = true;
// Experimental https://bugzilla.mozilla.org/show_bug.cgi?id=1131568#c3
// https://bugzilla.mozilla.org/show_bug.cgi?id=1193075
boolean browserWindow = true;
boolean scrollWithPage = true;
boolean viewportOffsetX = true;
boolean viewportOffsetY = true;
boolean viewportWidth = true;
boolean viewportHeight = true;
}; };

View File

@ -1,19 +0,0 @@
/* -*- 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/.
*/
[Func="IsChromeOrXBL"]
interface MenuBoxObject : BoxObject {
void openMenu(boolean openFlag);
attribute Element? activeChild;
boolean handleKeyPress(KeyboardEvent keyEvent);
readonly attribute boolean openedWithKey;
};

View File

@ -19,4 +19,4 @@ interface MessagePort : EventTarget {
attribute EventHandler onmessage; attribute EventHandler onmessage;
attribute EventHandler onmessageerror; attribute EventHandler onmessageerror;
}; };
// MessagePort implements Transferable; // MessagePort includes Transferable;

View File

@ -73,43 +73,3 @@ dictionary MouseEventInit : EventModifierInit {
long movementX = 0; long movementX = 0;
long movementY = 0; long movementY = 0;
}; };
// Mozilla extensions
partial interface MouseEvent
{
// Finger or touch pressure event value
// ranges between 0.0 and 1.0
readonly attribute float mozPressure;
const unsigned short MOZ_SOURCE_UNKNOWN = 0;
const unsigned short MOZ_SOURCE_MOUSE = 1;
const unsigned short MOZ_SOURCE_PEN = 2;
const unsigned short MOZ_SOURCE_ERASER = 3;
const unsigned short MOZ_SOURCE_CURSOR = 4;
const unsigned short MOZ_SOURCE_TOUCH = 5;
const unsigned short MOZ_SOURCE_KEYBOARD = 6;
readonly attribute unsigned short mozInputSource;
void initNSMouseEvent(DOMString typeArg,
optional boolean canBubbleArg = false,
optional boolean cancelableArg = false,
optional Window? viewArg = null,
optional long detailArg = 0,
optional long screenXArg = 0,
optional long screenYArg = 0,
optional long clientXArg = 0,
optional long clientYArg = 0,
optional boolean ctrlKeyArg = false,
optional boolean altKeyArg = false,
optional boolean shiftKeyArg = false,
optional boolean metaKeyArg = false,
optional short buttonArg = 0,
optional EventTarget? relatedTargetArg = null,
optional float pressure = 0,
optional unsigned short inputSourceArg = 0);
[ChromeOnly]
readonly attribute boolean hitCluster; // True when touch occurs in a cluster of links
};

View File

@ -28,17 +28,17 @@
interface Navigator { interface Navigator {
// objects implementing this interface also implement the interfaces given below // objects implementing this interface also implement the interfaces given below
}; };
Navigator implements NavigatorID; Navigator includes NavigatorID;
Navigator implements NavigatorLanguage; Navigator includes NavigatorLanguage;
Navigator implements NavigatorOnLine; Navigator includes NavigatorOnLine;
Navigator implements NavigatorContentUtils; Navigator includes NavigatorContentUtils;
Navigator implements NavigatorStorageUtils; Navigator includes NavigatorStorageUtils;
Navigator implements NavigatorConcurrentHardware; Navigator includes NavigatorConcurrentHardware;
Navigator implements NavigatorStorage; Navigator includes NavigatorStorage;
Navigator implements NavigatorAutomationInformation; Navigator includes NavigatorAutomationInformation;
[NoInterfaceObject, Exposed=(Window,Worker)] [Exposed=(Window,Worker)]
interface NavigatorID { interface mixin NavigatorID {
// WebKit/Blink/Trident/Presto support this (hardcoded "Mozilla"). // WebKit/Blink/Trident/Presto support this (hardcoded "Mozilla").
[Constant, Cached, Throws] [Constant, Cached, Throws]
readonly attribute DOMString appCodeName; // constant "Mozilla" readonly attribute DOMString appCodeName; // constant "Mozilla"
@ -58,8 +58,8 @@ interface NavigatorID {
boolean taintEnabled(); // constant false boolean taintEnabled(); // constant false
}; };
[NoInterfaceObject, Exposed=(Window,Worker)] [Exposed=(Window,Worker)]
interface NavigatorLanguage { interface mixin NavigatorLanguage {
// These two attributes are cached because this interface is also implemented // These two attributes are cached because this interface is also implemented
// by Workernavigator and this way we don't have to go back to the // by Workernavigator and this way we don't have to go back to the
@ -72,13 +72,12 @@ interface NavigatorLanguage {
readonly attribute sequence<DOMString> languages; readonly attribute sequence<DOMString> languages;
}; };
[NoInterfaceObject, Exposed=(Window,Worker)] [Exposed=(Window,Worker)]
interface NavigatorOnLine { interface mixin NavigatorOnLine {
readonly attribute boolean onLine; readonly attribute boolean onLine;
}; };
[NoInterfaceObject] interface mixin NavigatorContentUtils {
interface NavigatorContentUtils {
// content handler registration // content handler registration
[Throws, Func="nsGlobalWindowInner::RegisterProtocolHandlerAllowedForContext"] [Throws, Func="nsGlobalWindowInner::RegisterProtocolHandlerAllowedForContext"]
void registerProtocolHandler(DOMString scheme, DOMString url, DOMString title); void registerProtocolHandler(DOMString scheme, DOMString url, DOMString title);
@ -91,14 +90,13 @@ interface NavigatorContentUtils {
//void unregisterContentHandler(DOMString mimeType, DOMString url); //void unregisterContentHandler(DOMString mimeType, DOMString url);
}; };
[SecureContext, NoInterfaceObject, Exposed=(Window,Worker)] [SecureContext, Exposed=(Window,Worker)]
interface NavigatorStorage { interface mixin NavigatorStorage {
[Func="mozilla::dom::DOMPrefs::StorageManagerEnabled"] [Func="mozilla::dom::DOMPrefs::StorageManagerEnabled"]
readonly attribute StorageManager storage; readonly attribute StorageManager storage;
}; };
[NoInterfaceObject] interface mixin NavigatorStorageUtils {
interface NavigatorStorageUtils {
// NOT IMPLEMENTED // NOT IMPLEMENTED
//void yieldForStorageUpdates(); //void yieldForStorageUpdates();
}; };
@ -123,12 +121,11 @@ partial interface Navigator {
}; };
// http://www.w3.org/TR/geolocation-API/#geolocation_interface // http://www.w3.org/TR/geolocation-API/#geolocation_interface
[NoInterfaceObject] interface mixin NavigatorGeolocation {
interface NavigatorGeolocation {
[Throws, Pref="geo.enabled"] [Throws, Pref="geo.enabled"]
readonly attribute Geolocation geolocation; readonly attribute Geolocation geolocation;
}; };
Navigator implements NavigatorGeolocation; Navigator includes NavigatorGeolocation;
// http://www.w3.org/TR/battery-status/#navigatorbattery-interface // http://www.w3.org/TR/battery-status/#navigatorbattery-interface
partial interface Navigator { partial interface Navigator {
@ -158,58 +155,6 @@ partial interface Navigator {
readonly attribute MediaCapabilities mediaCapabilities; readonly attribute MediaCapabilities mediaCapabilities;
}; };
// Mozilla-specific extensions
// Chrome-only interface for Vibration API permission handling.
partial interface Navigator {
/* Set permission state to device vibration.
* @param permitted permission state (true for allowing vibration)
* @param persistent make the permission session-persistent
*/
[ChromeOnly]
void setVibrationPermission(boolean permitted,
optional boolean persistent = true);
};
callback interface MozIdleObserver {
// Time is in seconds and is read only when idle observers are added
// and removed.
readonly attribute unsigned long time;
void onidle();
void onactive();
};
partial interface Navigator {
[Throws, Constant, Cached, NeedsCallerType]
readonly attribute DOMString oscpu;
// WebKit/Blink support this; Trident/Presto do not.
readonly attribute DOMString vendor;
// WebKit/Blink supports this (hardcoded ""); Trident/Presto do not.
readonly attribute DOMString vendorSub;
// WebKit/Blink supports this (hardcoded "20030107"); Trident/Presto don't
readonly attribute DOMString productSub;
// WebKit/Blink/Trident/Presto support this.
readonly attribute boolean cookieEnabled;
[Throws, Constant, Cached, NeedsCallerType]
readonly attribute DOMString buildID;
// WebKit/Blink/Trident/Presto support this.
[Affects=Nothing, DependsOn=Nothing]
boolean javaEnabled();
/**
* Navigator requests to add an idle observer to the existing window.
*/
[Throws, ChromeOnly]
void addIdleObserver(MozIdleObserver aIdleObserver);
/**
* Navigator requests to remove an idle observer from the existing window.
*/
[Throws, ChromeOnly]
void removeIdleObserver(MozIdleObserver aIdleObserver);
};
// NetworkInformation // NetworkInformation
partial interface Navigator { partial interface Navigator {
[Throws, Pref="dom.netinfo.enabled"] [Throws, Pref="dom.netinfo.enabled"]
@ -314,8 +259,8 @@ partial interface Navigator {
sequence<MediaKeySystemConfiguration> supportedConfigurations); sequence<MediaKeySystemConfiguration> supportedConfigurations);
}; };
[NoInterfaceObject, Exposed=(Window,Worker)] [Exposed=(Window,Worker)]
interface NavigatorConcurrentHardware { interface mixin NavigatorConcurrentHardware {
readonly attribute unsigned long long hardwareConcurrency; readonly attribute unsigned long long hardwareConcurrency;
}; };

View File

@ -101,122 +101,6 @@ interface Node : EventTarget {
DOMString? lookupNamespaceURI(DOMString? prefix); DOMString? lookupNamespaceURI(DOMString? prefix);
[Pure] [Pure]
boolean isDefaultNamespace(DOMString? namespace); boolean isDefaultNamespace(DOMString? namespace);
// Mozilla-specific stuff
[ChromeOnly]
readonly attribute Principal nodePrincipal;
[ChromeOnly]
readonly attribute URI? baseURIObject;
[ChromeOnly]
DOMString generateXPath();
/**
* This method provides a fast-path for the Fluent localization system to
* bypass the slowdowns in performance during initial document translation.
* The slowdowns are specific to XBL+Stylo.
* To learn more, see bug 1441037.
*
* The API is designed to fit into the DOMLocalization flow with minimal
* overhead, which dictates much of its signature.
* It takes the following steps:
*
* 1) The API can be called at any point on any DOM element and it
* synchronously scans the element subtree for all children with
* `data-l10n-id` attribute set.
*
* 2) Next, the API collects all of the l10n attributes
* (l10n-id, l10n-args and l10n-attrs), and passes them to the
* callback function together with three `Element` properties:
* `name` - name of the element as lowercase
* `namespaceURI` - namespace URI
* `type` - the type prop of the element (used for input sanitization)
*
* 3) The callback function is responsible for (asynchronously) collecting
* the translations for all l10n id+args pairs, sanitizing them and then
* return them back to this API.
*
* 4) The API takes the list of elements collected in step (1) and their
* translations and applies all of the translation values onto
* the elements.
*
* 5) The API returns a list with empty slots for all translated elements
* and references to elements that could not be translated.
*
* 6) The JS handles the translations of remaining elements.
*
*
* Through the whole cycle, the API uses the same list of elements and
* corresponding translations. It means that after step (1), the element
* at index 1 will match the l10nData at index 1, translations at index 1
* and in the final return list, the element will be also stored at index 1
* or the slot will be empty if the translations was applied on the C++ side.
*
* Note: There are several reasons why the JS callback may pass undefined for
* a given element including missing translation, or the need to
* translate the element using DOM Overlays.
*
*
* Example of use from JS:
*
* async function translateFragment(frag) {
* let untranslatedElements = await frag.localize(
* async cb(l10nItems) => { // 1
* let trans = await getTranslations(l10nItems); // 2
* return trans;
* }
* );
*
* annotateMissingTranslations(untranslatedElements); // 3
* }
*
* [1] l10nItems == [
* {
* l10nId: "key1",
* l10nArgs: null,
* l10nAttrs: null,
* name: "button"
* namespaceURI: "..."
* type: null
* },
* {
* l10nId: "key2",
* l10nArgs: {unreadCount: 5},
* l10nAttrs: null,
* name: "label"
* namespaceURI: "..."
* type: null
* },
* {
* l10nId: "key3",
* l10nArgs: null,
* l10nAttrs: "title",
* name: "window"
* namespaceURI: "..."
* type: null
* },
* ]
* [2] trans == [
* {value: "Key 1", attributes: {accesskey: "K"} },
* undefined,
* {value: null, attributes: {title: "Unread emails: 5"} },
* ]
* [3] untranslatedElements == [
* ,
* <label>
* ,
* ]
*
* For exact dictionary structures, see `L10nUtils.webidl`.
*/
[ChromeOnly, Throws]
Promise<void> localize(L10nCallback l10nCallback);
/*Unsupported ifdef
#ifdef ACCESSIBILITY
[Func="mozilla::dom::AccessibleNode::IsAOMEnabled", SameObject]
readonly attribute AccessibleNode? accessibleNode;
#endif
*/
}; };
/*TODO /*TODO

View File

@ -60,64 +60,3 @@ interface OfflineResourceList : EventTarget {
[UseCounter] [UseCounter]
attribute EventHandler onobsolete; attribute EventHandler onobsolete;
}; };
// Mozilla extensions.
partial interface OfflineResourceList {
/**
* Get the list of dynamically-managed entries.
*/
[Throws]
readonly attribute DOMStringList mozItems;
/**
* Check that an entry exists in the list of dynamically-managed entries.
*
* @param uri
* The resource to check.
*/
[Throws]
boolean mozHasItem(DOMString uri);
/**
* Get the number of dynamically-managed entries.
* @status DEPRECATED
* Clients should use the "items" attribute.
*/
[Throws]
readonly attribute unsigned long mozLength;
/**
* Get the URI of a dynamically-managed entry.
* @status DEPRECATED
* Clients should use the "items" attribute.
*/
[Throws]
getter DOMString mozItem(unsigned long index);
/**
* We need a "length" to actually be valid Web IDL, given that we have an
* indexed getter.
*/
readonly attribute unsigned long length;
/**
* Add an item to the list of dynamically-managed entries. The resource
* will be fetched into the application cache.
*
* @param uri
* The resource to add.
*/
[Throws]
void mozAdd(DOMString uri);
/**
* Remove an item from the list of dynamically-managed entries. If this
* was the last reference to a URI in the application cache, the cache
* entry will be removed.
*
* @param uri
* The resource to remove.
*/
[Throws]
void mozRemove(DOMString uri);
};

View File

@ -27,4 +27,4 @@ interface OffscreenCanvas : EventTarget {
optional any encoderOptions); optional any encoderOptions);
}; };
// OffscreenCanvas implements Transferable; // OffscreenCanvas includes Transferable;

View File

@ -37,6 +37,3 @@ interface OscillatorNode : AudioScheduledSourceNode {
void setPeriodicWave(PeriodicWave periodicWave); void setPeriodicWave(PeriodicWave periodicWave);
}; };
// Mozilla extensions
OscillatorNode implements AudioNodePassThrough;

View File

@ -73,7 +73,3 @@ interface PannerNode : AudioNode {
attribute double coneOuterGain; attribute double coneOuterGain;
}; };
// Mozilla extension
PannerNode implements AudioNodePassThrough;

Some files were not shown because too many files have changed in this diff Show More