From 927d44753b249a2716b721d7398f4dc4a208b82f Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Wed, 2 Nov 2016 15:57:12 -0400 Subject: [PATCH 01/26] Remove unnecessary `Box` around `HTMLCollectionElementsIter::node_iter`. --- components/script/dom/htmlcollection.rs | 22 +++++++++++--------- components/script/dom/node.rs | 27 +++++++++++++------------ 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs index 230102bd423..d87230a42dc 100644 --- a/components/script/dom/htmlcollection.rs +++ b/components/script/dom/htmlcollection.rs @@ -205,24 +205,24 @@ impl HTMLCollection { HTMLCollection::create(window, root, box ElementChildFilter) } - pub fn elements_iter_after(&self, after: &Node) -> HTMLCollectionElementsIter { + pub fn elements_iter_after<'a>(&'a self, after: &'a Node) -> impl Iterator> + 'a { // Iterate forwards from a node. HTMLCollectionElementsIter { - node_iter: box after.following_nodes(&self.root), + node_iter: after.following_nodes(&self.root), root: Root::from_ref(&self.root), filter: &self.filter, } } - pub fn elements_iter(&self) -> HTMLCollectionElementsIter { + pub fn elements_iter<'a>(&'a self) -> impl Iterator> + 'a { // Iterate forwards from the root. self.elements_iter_after(&*self.root) } - pub fn elements_iter_before(&self, before: &Node) -> HTMLCollectionElementsIter { + pub fn elements_iter_before<'a>(&'a self, before: &'a Node) -> impl Iterator> + 'a { // Iterate backwards from a node. HTMLCollectionElementsIter { - node_iter: box before.preceding_nodes(&self.root), + node_iter: before.preceding_nodes(&self.root), root: Root::from_ref(&self.root), filter: &self.filter, } @@ -234,13 +234,13 @@ impl HTMLCollection { } // TODO: Make this generic, and avoid code duplication -pub struct HTMLCollectionElementsIter<'a> { - node_iter: Box>>, +struct HTMLCollectionElementsIter<'a, I> { + node_iter: I, root: Root, filter: &'a Box, } -impl<'a> Iterator for HTMLCollectionElementsIter<'a> { +impl<'a, I: Iterator>> Iterator for HTMLCollectionElementsIter<'a, I> { type Item = Root; fn next(&mut self) -> Option { @@ -284,13 +284,15 @@ impl HTMLCollectionMethods for HTMLCollection { // Iterate forwards, starting at the cursor. let offset = index - (cached_index + 1); let node: Root = Root::upcast(element); - self.set_cached_cursor(index, self.elements_iter_after(&node).nth(offset as usize)) + let mut iter = self.elements_iter_after(&node); + self.set_cached_cursor(index, iter.nth(offset as usize)) } else { // The cursor is after the element we're looking for // Iterate backwards, starting at the cursor. let offset = cached_index - (index + 1); let node: Root = Root::upcast(element); - self.set_cached_cursor(index, self.elements_iter_before(&node).nth(offset as usize)) + let mut iter = self.elements_iter_before(&node); + self.set_cached_cursor(index, iter.nth(offset as usize)) } } else { // Cache miss diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 767a3132eb3..8afe20f0aea 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -849,22 +849,23 @@ impl Node { let tr = new_child(); - let after_node = if index == -1 { - None - } else { - match get_items().elements_iter() - .map(Root::upcast::) - .map(Some) - .chain(iter::once(None)) - .nth(index as usize) { - None => return Err(Error::IndexSize), - Some(node) => node, - } - }; { let tr_node = tr.upcast::(); - try!(self.InsertBefore(tr_node, after_node.r())); + if index == -1 { + try!(self.InsertBefore(tr_node, None)); + } else { + let items = get_items(); + let node = match items.elements_iter() + .map(Root::upcast::) + .map(Some) + .chain(iter::once(None)) + .nth(index as usize) { + None => return Err(Error::IndexSize), + Some(node) => node, + }; + try!(self.InsertBefore(tr_node, node.r())); + } } Ok(Root::upcast::(tr)) From 0b0ff2b15217e5cdcaceca92bb301e80d7e472d2 Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Thu, 3 Nov 2016 14:44:27 +1100 Subject: [PATCH 02/26] Add binding function to create empty DeclarationBlock --- components/style/gecko_bindings/bindings.rs | 4 ++++ ports/geckolib/glue.rs | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index 4a5350f0134..e9cb580d217 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -922,6 +922,10 @@ extern "C" { pub fn Servo_ParseStyleAttribute(data: *const nsACString_internal) -> RawServoDeclarationBlockStrong; } +extern "C" { + pub fn Servo_DeclarationBlock_CreateEmpty() + -> RawServoDeclarationBlockStrong; +} extern "C" { pub fn Servo_DeclarationBlock_Equals(a: RawServoDeclarationBlockBorrowed, b: RawServoDeclarationBlockBorrowed) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 4b2fe8d5e77..ba4a023b715 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -420,6 +420,11 @@ pub extern "C" fn Servo_ParseStyleAttribute(data: *const nsACString) -> RawServo Arc::new(RwLock::new(GeckoElement::parse_style_attribute(value))).into_strong() } +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_CreateEmpty() -> RawServoDeclarationBlockStrong { + Arc::new(RwLock::new(PropertyDeclarationBlock { declarations: vec![], important_count: 0 })).into_strong() +} + #[no_mangle] pub extern "C" fn Servo_DeclarationBlock_AddRef(declarations: RawServoDeclarationBlockBorrowed) { unsafe { RwLock::::addref(declarations) }; From 1af2edf190f13881095cf5186218653e9322c826 Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Thu, 3 Nov 2016 14:46:09 +1100 Subject: [PATCH 03/26] Add binding functions for length and item getter of DeclarationBlock --- components/style/binding_tools/regen.py | 4 +++- components/style/gecko_bindings/bindings.rs | 16 +++++++++++++++- ports/geckolib/glue.rs | 20 ++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/components/style/binding_tools/regen.py b/components/style/binding_tools/regen.py index 53ade1bf1e7..d924d31d292 100755 --- a/components/style/binding_tools/regen.py +++ b/components/style/binding_tools/regen.py @@ -236,10 +236,12 @@ COMPILATION_TARGETS = { "target_dir": "../gecko_bindings", "blacklist_types": [ "nsACString_internal", + "nsAString_internal", ], "raw_lines": [ - "pub use nsstring::nsACString;", + "pub use nsstring::{nsACString, nsAString};", "type nsACString_internal = nsACString;", + "type nsAString_internal = nsAString;" ], "flags": [ "--ignore-methods", diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index e9cb580d217..f2a2c19f1a5 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -1,7 +1,8 @@ /* automatically generated by rust-bindgen */ -pub use nsstring::nsACString; +pub use nsstring::{nsACString, nsAString}; type nsACString_internal = nsACString; +type nsAString_internal = nsAString; pub type ServoComputedValuesStrong = ::gecko_bindings::sugar::ownership::Strong; pub type ServoComputedValuesBorrowedOrNull<'a> = Option<&'a ServoComputedValues>; pub type ServoComputedValuesBorrowed<'a> = &'a ServoComputedValues; @@ -936,6 +937,19 @@ extern "C" { RawServoDeclarationBlockBorrowed, buffer: *mut nsString); } +extern "C" { + pub fn Servo_DeclarationBlock_Count(declarations: + RawServoDeclarationBlockBorrowed) + -> u32; +} +extern "C" { + pub fn Servo_DeclarationBlock_GetNthProperty(declarations: + RawServoDeclarationBlockBorrowed, + index: u32, + result: + *mut nsAString_internal) + -> bool; +} extern "C" { pub fn Servo_CSSSupports(name: *const nsACString_internal, value: *const nsACString_internal) -> bool; diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index ba4a023b715..b266a4c7084 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -7,6 +7,7 @@ use cssparser::{Parser, ToCss}; use env_logger; use euclid::Size2D; use parking_lot::RwLock; +use std::fmt::Write; use std::mem::transmute; use std::sync::{Arc, Mutex}; use style::arc_ptr_eq; @@ -474,6 +475,25 @@ pub extern "C" fn Servo_DeclarationBlock_SerializeOneValue( } } +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_Count(declarations: RawServoDeclarationBlockBorrowed) -> u32 { + let declarations = RwLock::::as_arc(&declarations); + declarations.read().declarations.len() as u32 +} + +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_GetNthProperty(declarations: RawServoDeclarationBlockBorrowed, + index: u32, result: *mut nsAString) -> bool { + let declarations = RwLock::::as_arc(&declarations); + if let Some(&(ref decl, _)) = declarations.read().declarations.get(index as usize) { + let result = unsafe { result.as_mut().unwrap() }; + write!(result, "{}", decl.name()).unwrap(); + true + } else { + false + } +} + #[no_mangle] pub extern "C" fn Servo_CSSSupports(property: *const nsACString, value: *const nsACString) -> bool { let property = unsafe { property.as_ref().unwrap().as_str_unchecked() }; From eb3bbc6bb9fafd8c65433d4564dceafbb7d5511f Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Thu, 3 Nov 2016 14:47:05 +1100 Subject: [PATCH 04/26] Add binding functions for cssText getter / setter --- components/style/gecko_bindings/bindings.rs | 5 +++++ ports/geckolib/glue.rs | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index f2a2c19f1a5..adeecc3925d 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -932,6 +932,11 @@ extern "C" { b: RawServoDeclarationBlockBorrowed) -> bool; } +extern "C" { + pub fn Servo_DeclarationBlock_GetCssText(declarations: + RawServoDeclarationBlockBorrowed, + result: *mut nsAString_internal); +} extern "C" { pub fn Servo_DeclarationBlock_SerializeOneValue(declarations: RawServoDeclarationBlockBorrowed, diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index b266a4c7084..4e3062faa0b 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -26,9 +26,9 @@ use style::gecko_bindings::bindings::{RawServoStyleSetBorrowed, RawServoStyleSet use style::gecko_bindings::bindings::{RawServoStyleSheetBorrowed, ServoComputedValuesBorrowed}; use style::gecko_bindings::bindings::{RawServoStyleSheetStrong, ServoComputedValuesStrong}; use style::gecko_bindings::bindings::{ThreadSafePrincipalHolder, ThreadSafeURIHolder}; +use style::gecko_bindings::bindings::{nsACString, nsAString}; use style::gecko_bindings::bindings::Gecko_Utf8SliceToString; use style::gecko_bindings::bindings::ServoComputedValuesBorrowedOrNull; -use style::gecko_bindings::bindings::nsACString; use style::gecko_bindings::structs::{SheetParsingMode, nsIAtom}; use style::gecko_bindings::structs::ServoElementSnapshot; use style::gecko_bindings::structs::nsRestyleHint; @@ -443,6 +443,13 @@ pub extern "C" fn Servo_DeclarationBlock_Equals(a: RawServoDeclarationBlockBorro *RwLock::::as_arc(&a).read() == *RwLock::::as_arc(&b).read() } +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_GetCssText(declarations: RawServoDeclarationBlockBorrowed, + result: *mut nsAString) { + let declarations = RwLock::::as_arc(&declarations); + declarations.read().to_css(unsafe { result.as_mut().unwrap() }).unwrap(); +} + #[no_mangle] pub extern "C" fn Servo_DeclarationBlock_SerializeOneValue( declarations: RawServoDeclarationBlockBorrowed, From e8a3d935ad0ffccb1ca64359364f53e9ee66b44c Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Thu, 3 Nov 2016 15:01:46 +1100 Subject: [PATCH 05/26] Add static atoms for CSS properties from Gecko --- components/style/binding_tools/regen_atoms.py | 26 +- .../style/gecko_string_cache/atom_macro.rs | 2882 +++++++++++++++++ 2 files changed, 2901 insertions(+), 7 deletions(-) diff --git a/components/style/binding_tools/regen_atoms.py b/components/style/binding_tools/regen_atoms.py index 6fe30f73507..5af58417b3d 100755 --- a/components/style/binding_tools/regen_atoms.py +++ b/components/style/binding_tools/regen_atoms.py @@ -32,14 +32,14 @@ def msvc32_symbolify(source, ident): class GkAtomSource: - PATTERN = re.compile('^GK_ATOM\((.+),\s*"(.*)"\)') + PATTERN = re.compile('^GK_ATOM\((?P.+),\s*"(?P.*)"\)', re.M) FILE = "dist/include/nsGkAtomList.h" CLASS = "nsGkAtoms" TYPE = "nsIAtom" class CSSPseudoElementsAtomSource: - PATTERN = re.compile('^CSS_PSEUDO_ELEMENT\((.+),\s*"(.*)",') + PATTERN = re.compile('^CSS_PSEUDO_ELEMENT\((?P.+),\s*"(?P.*)",', re.M) FILE = "dist/include/nsCSSPseudoElementList.h" CLASS = "nsCSSPseudoElements" # NB: nsICSSPseudoElement is effectively the same as a nsIAtom, but we need @@ -48,16 +48,24 @@ class CSSPseudoElementsAtomSource: class CSSAnonBoxesAtomSource: - PATTERN = re.compile('^CSS_ANON_BOX\((.+),\s*"(.*)"\)') + PATTERN = re.compile('^CSS_ANON_BOX\((?P.+),\s*"(?P.*)"\)', re.M) FILE = "dist/include/nsCSSAnonBoxList.h" CLASS = "nsCSSAnonBoxes" TYPE = "nsICSSAnonBoxPseudo" +class CSSPropsAtomSource: + PATTERN = re.compile('^CSS_PROP_[A-Z]+\(\s*(?P[^,]+),\s*(?P[^,]+)', re.M) + FILE = "dist/include/nsCSSPropList.h" + CLASS = "nsCSSProps" + TYPE = "nsICSSProperty" + + SOURCES = [ GkAtomSource, CSSPseudoElementsAtomSource, CSSAnonBoxesAtomSource, + CSSPropsAtomSource, ] @@ -95,10 +103,14 @@ def collect_atoms(objdir): atoms = [] for source in SOURCES: with open(os.path.join(objdir, source.FILE)) as f: - for line in f.readlines(): - result = re.match(source.PATTERN, line) - if result: - atoms.append(Atom(source, result.group(1), result.group(2))) + content = f.read() + found = set() + for match in source.PATTERN.finditer(content): + ident = match.group('ident') + if ident in found: + continue + found.add(ident) + atoms.append(Atom(source, ident, match.group('value'))) return atoms diff --git a/components/style/gecko_string_cache/atom_macro.rs b/components/style/gecko_string_cache/atom_macro.rs index 661fcd7ebe5..5b85151328f 100644 --- a/components/style/gecko_string_cache/atom_macro.rs +++ b/components/style/gecko_string_cache/atom_macro.rs @@ -11,6 +11,8 @@ pub enum nsICSSPseudoElement {} pub enum nsICSSAnonBoxPseudo {} +pub enum nsICSSProperty {} + #[inline(always)] pub unsafe fn atom_from_static(ptr: *mut nsIAtom) -> Atom { Atom::from_static(ptr) @@ -4930,6 +4932,726 @@ cfg_if! { pub static nsCSSAnonBoxes_mozSVGForeignContent: *mut nsICSSAnonBoxPseudo; #[link_name = "_ZN14nsCSSAnonBoxes10mozSVGTextE"] pub static nsCSSAnonBoxes_mozSVGText: *mut nsICSSAnonBoxPseudo; + #[link_name = "_ZN10nsCSSProps13align_contentE"] + pub static nsCSSProps_align_content: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11align_itemsE"] + pub static nsCSSProps_align_items: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10align_selfE"] + pub static nsCSSProps_align_self: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps3allE"] + pub static nsCSSProps_all: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9animationE"] + pub static nsCSSProps_animation: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15animation_delayE"] + pub static nsCSSProps_animation_delay: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19animation_directionE"] + pub static nsCSSProps_animation_direction: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18animation_durationE"] + pub static nsCSSProps_animation_duration: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19animation_fill_modeE"] + pub static nsCSSProps_animation_fill_mode: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps25animation_iteration_countE"] + pub static nsCSSProps_animation_iteration_count: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14animation_nameE"] + pub static nsCSSProps_animation_name: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20animation_play_stateE"] + pub static nsCSSProps_animation_play_state: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps25animation_timing_functionE"] + pub static nsCSSProps_animation_timing_function: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10appearanceE"] + pub static nsCSSProps_appearance: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19backface_visibilityE"] + pub static nsCSSProps_backface_visibility: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10backgroundE"] + pub static nsCSSProps_background: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21background_attachmentE"] + pub static nsCSSProps_background_attachment: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21background_blend_modeE"] + pub static nsCSSProps_background_blend_mode: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15background_clipE"] + pub static nsCSSProps_background_clip: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16background_colorE"] + pub static nsCSSProps_background_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16background_imageE"] + pub static nsCSSProps_background_image: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17background_originE"] + pub static nsCSSProps_background_origin: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19background_positionE"] + pub static nsCSSProps_background_position: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21background_position_xE"] + pub static nsCSSProps_background_position_x: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21background_position_yE"] + pub static nsCSSProps_background_position_y: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17background_repeatE"] + pub static nsCSSProps_background_repeat: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15background_sizeE"] + pub static nsCSSProps_background_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7bindingE"] + pub static nsCSSProps_binding: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10block_sizeE"] + pub static nsCSSProps_block_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6borderE"] + pub static nsCSSProps_border: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16border_block_endE"] + pub static nsCSSProps_border_block_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22border_block_end_colorE"] + pub static nsCSSProps_border_block_end_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22border_block_end_styleE"] + pub static nsCSSProps_border_block_end_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22border_block_end_widthE"] + pub static nsCSSProps_border_block_end_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18border_block_startE"] + pub static nsCSSProps_border_block_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps24border_block_start_colorE"] + pub static nsCSSProps_border_block_start_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps24border_block_start_styleE"] + pub static nsCSSProps_border_block_start_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps24border_block_start_widthE"] + pub static nsCSSProps_border_block_start_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13border_bottomE"] + pub static nsCSSProps_border_bottom: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19border_bottom_colorE"] + pub static nsCSSProps_border_bottom_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20border_bottom_colorsE"] + pub static nsCSSProps_border_bottom_colors: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps25border_bottom_left_radiusE"] + pub static nsCSSProps_border_bottom_left_radius: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps26border_bottom_right_radiusE"] + pub static nsCSSProps_border_bottom_right_radius: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19border_bottom_styleE"] + pub static nsCSSProps_border_bottom_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19border_bottom_widthE"] + pub static nsCSSProps_border_bottom_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15border_collapseE"] + pub static nsCSSProps_border_collapse: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12border_colorE"] + pub static nsCSSProps_border_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12border_imageE"] + pub static nsCSSProps_border_image: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19border_image_outsetE"] + pub static nsCSSProps_border_image_outset: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19border_image_repeatE"] + pub static nsCSSProps_border_image_repeat: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18border_image_sliceE"] + pub static nsCSSProps_border_image_slice: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19border_image_sourceE"] + pub static nsCSSProps_border_image_source: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18border_image_widthE"] + pub static nsCSSProps_border_image_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17border_inline_endE"] + pub static nsCSSProps_border_inline_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23border_inline_end_colorE"] + pub static nsCSSProps_border_inline_end_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23border_inline_end_styleE"] + pub static nsCSSProps_border_inline_end_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23border_inline_end_widthE"] + pub static nsCSSProps_border_inline_end_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19border_inline_startE"] + pub static nsCSSProps_border_inline_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps25border_inline_start_colorE"] + pub static nsCSSProps_border_inline_start_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps25border_inline_start_styleE"] + pub static nsCSSProps_border_inline_start_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps25border_inline_start_widthE"] + pub static nsCSSProps_border_inline_start_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11border_leftE"] + pub static nsCSSProps_border_left: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17border_left_colorE"] + pub static nsCSSProps_border_left_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18border_left_colorsE"] + pub static nsCSSProps_border_left_colors: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17border_left_styleE"] + pub static nsCSSProps_border_left_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17border_left_widthE"] + pub static nsCSSProps_border_left_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13border_radiusE"] + pub static nsCSSProps_border_radius: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12border_rightE"] + pub static nsCSSProps_border_right: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18border_right_colorE"] + pub static nsCSSProps_border_right_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19border_right_colorsE"] + pub static nsCSSProps_border_right_colors: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18border_right_styleE"] + pub static nsCSSProps_border_right_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18border_right_widthE"] + pub static nsCSSProps_border_right_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14border_spacingE"] + pub static nsCSSProps_border_spacing: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12border_styleE"] + pub static nsCSSProps_border_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10border_topE"] + pub static nsCSSProps_border_top: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16border_top_colorE"] + pub static nsCSSProps_border_top_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17border_top_colorsE"] + pub static nsCSSProps_border_top_colors: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22border_top_left_radiusE"] + pub static nsCSSProps_border_top_left_radius: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23border_top_right_radiusE"] + pub static nsCSSProps_border_top_right_radius: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16border_top_styleE"] + pub static nsCSSProps_border_top_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16border_top_widthE"] + pub static nsCSSProps_border_top_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12border_widthE"] + pub static nsCSSProps_border_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6bottomE"] + pub static nsCSSProps_bottom: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9box_alignE"] + pub static nsCSSProps_box_align: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20box_decoration_breakE"] + pub static nsCSSProps_box_decoration_break: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13box_directionE"] + pub static nsCSSProps_box_direction: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps8box_flexE"] + pub static nsCSSProps_box_flex: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17box_ordinal_groupE"] + pub static nsCSSProps_box_ordinal_group: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10box_orientE"] + pub static nsCSSProps_box_orient: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps8box_packE"] + pub static nsCSSProps_box_pack: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10box_shadowE"] + pub static nsCSSProps_box_shadow: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10box_sizingE"] + pub static nsCSSProps_box_sizing: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12caption_sideE"] + pub static nsCSSProps_caption_side: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps5clearE"] + pub static nsCSSProps_clear: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps4clipE"] + pub static nsCSSProps_clip: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9clip_pathE"] + pub static nsCSSProps_clip_path: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9clip_ruleE"] + pub static nsCSSProps_clip_rule: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps5colorE"] + pub static nsCSSProps_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12color_adjustE"] + pub static nsCSSProps_color_adjust: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19color_interpolationE"] + pub static nsCSSProps_color_interpolation: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps27color_interpolation_filtersE"] + pub static nsCSSProps_color_interpolation_filters: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12column_countE"] + pub static nsCSSProps_column_count: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11column_fillE"] + pub static nsCSSProps_column_fill: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10column_gapE"] + pub static nsCSSProps_column_gap: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11column_ruleE"] + pub static nsCSSProps_column_rule: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17column_rule_colorE"] + pub static nsCSSProps_column_rule_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17column_rule_styleE"] + pub static nsCSSProps_column_rule_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17column_rule_widthE"] + pub static nsCSSProps_column_rule_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12column_widthE"] + pub static nsCSSProps_column_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7columnsE"] + pub static nsCSSProps_columns: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7containE"] + pub static nsCSSProps_contain: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7contentE"] + pub static nsCSSProps_content: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps33_moz_control_character_visibilityE"] + pub static nsCSSProps__moz_control_character_visibility: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17counter_incrementE"] + pub static nsCSSProps_counter_increment: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13counter_resetE"] + pub static nsCSSProps_counter_reset: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6cursorE"] + pub static nsCSSProps_cursor: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9directionE"] + pub static nsCSSProps_direction: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7displayE"] + pub static nsCSSProps_display: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17dominant_baselineE"] + pub static nsCSSProps_dominant_baseline: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11empty_cellsE"] + pub static nsCSSProps_empty_cells: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps4fillE"] + pub static nsCSSProps_fill: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12fill_opacityE"] + pub static nsCSSProps_fill_opacity: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9fill_ruleE"] + pub static nsCSSProps_fill_rule: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6filterE"] + pub static nsCSSProps_filter: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps4flexE"] + pub static nsCSSProps_flex: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10flex_basisE"] + pub static nsCSSProps_flex_basis: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14flex_directionE"] + pub static nsCSSProps_flex_direction: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9flex_flowE"] + pub static nsCSSProps_flex_flow: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9flex_growE"] + pub static nsCSSProps_flex_grow: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11flex_shrinkE"] + pub static nsCSSProps_flex_shrink: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9flex_wrapE"] + pub static nsCSSProps_flex_wrap: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6float_E"] + pub static nsCSSProps_float_: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10float_edgeE"] + pub static nsCSSProps_float_edge: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11flood_colorE"] + pub static nsCSSProps_flood_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13flood_opacityE"] + pub static nsCSSProps_flood_opacity: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps4fontE"] + pub static nsCSSProps_font: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11font_familyE"] + pub static nsCSSProps_font_family: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21font_feature_settingsE"] + pub static nsCSSProps_font_feature_settings: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12font_kerningE"] + pub static nsCSSProps_font_kerning: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22font_language_overrideE"] + pub static nsCSSProps_font_language_override: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9font_sizeE"] + pub static nsCSSProps_font_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16font_size_adjustE"] + pub static nsCSSProps_font_size_adjust: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12font_stretchE"] + pub static nsCSSProps_font_stretch: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10font_styleE"] + pub static nsCSSProps_font_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14font_synthesisE"] + pub static nsCSSProps_font_synthesis: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12font_variantE"] + pub static nsCSSProps_font_variant: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23font_variant_alternatesE"] + pub static nsCSSProps_font_variant_alternates: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17font_variant_capsE"] + pub static nsCSSProps_font_variant_caps: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23font_variant_east_asianE"] + pub static nsCSSProps_font_variant_east_asian: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22font_variant_ligaturesE"] + pub static nsCSSProps_font_variant_ligatures: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20font_variant_numericE"] + pub static nsCSSProps_font_variant_numeric: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21font_variant_positionE"] + pub static nsCSSProps_font_variant_position: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11font_weightE"] + pub static nsCSSProps_font_weight: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23force_broken_image_iconE"] + pub static nsCSSProps_force_broken_image_icon: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps4gridE"] + pub static nsCSSProps_grid: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9grid_areaE"] + pub static nsCSSProps_grid_area: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17grid_auto_columnsE"] + pub static nsCSSProps_grid_auto_columns: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14grid_auto_flowE"] + pub static nsCSSProps_grid_auto_flow: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14grid_auto_rowsE"] + pub static nsCSSProps_grid_auto_rows: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11grid_columnE"] + pub static nsCSSProps_grid_column: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15grid_column_endE"] + pub static nsCSSProps_grid_column_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15grid_column_gapE"] + pub static nsCSSProps_grid_column_gap: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17grid_column_startE"] + pub static nsCSSProps_grid_column_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps8grid_gapE"] + pub static nsCSSProps_grid_gap: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps8grid_rowE"] + pub static nsCSSProps_grid_row: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12grid_row_endE"] + pub static nsCSSProps_grid_row_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12grid_row_gapE"] + pub static nsCSSProps_grid_row_gap: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14grid_row_startE"] + pub static nsCSSProps_grid_row_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13grid_templateE"] + pub static nsCSSProps_grid_template: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19grid_template_areasE"] + pub static nsCSSProps_grid_template_areas: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21grid_template_columnsE"] + pub static nsCSSProps_grid_template_columns: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18grid_template_rowsE"] + pub static nsCSSProps_grid_template_rows: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6heightE"] + pub static nsCSSProps_height: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7hyphensE"] + pub static nsCSSProps_hyphens: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14initial_letterE"] + pub static nsCSSProps_initial_letter: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17image_orientationE"] + pub static nsCSSProps_image_orientation: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12image_regionE"] + pub static nsCSSProps_image_region: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15image_renderingE"] + pub static nsCSSProps_image_rendering: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps8ime_modeE"] + pub static nsCSSProps_ime_mode: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11inline_sizeE"] + pub static nsCSSProps_inline_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9isolationE"] + pub static nsCSSProps_isolation: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15justify_contentE"] + pub static nsCSSProps_justify_content: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13justify_itemsE"] + pub static nsCSSProps_justify_items: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12justify_selfE"] + pub static nsCSSProps_justify_self: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7_x_langE"] + pub static nsCSSProps__x_lang: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps4leftE"] + pub static nsCSSProps_left: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14letter_spacingE"] + pub static nsCSSProps_letter_spacing: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14lighting_colorE"] + pub static nsCSSProps_lighting_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11line_heightE"] + pub static nsCSSProps_line_height: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10list_styleE"] + pub static nsCSSProps_list_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16list_style_imageE"] + pub static nsCSSProps_list_style_image: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19list_style_positionE"] + pub static nsCSSProps_list_style_position: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15list_style_typeE"] + pub static nsCSSProps_list_style_type: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6marginE"] + pub static nsCSSProps_margin: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16margin_block_endE"] + pub static nsCSSProps_margin_block_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18margin_block_startE"] + pub static nsCSSProps_margin_block_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13margin_bottomE"] + pub static nsCSSProps_margin_bottom: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17margin_inline_endE"] + pub static nsCSSProps_margin_inline_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19margin_inline_startE"] + pub static nsCSSProps_margin_inline_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11margin_leftE"] + pub static nsCSSProps_margin_left: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12margin_rightE"] + pub static nsCSSProps_margin_right: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10margin_topE"] + pub static nsCSSProps_margin_top: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6markerE"] + pub static nsCSSProps_marker: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10marker_endE"] + pub static nsCSSProps_marker_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10marker_midE"] + pub static nsCSSProps_marker_mid: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13marker_offsetE"] + pub static nsCSSProps_marker_offset: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12marker_startE"] + pub static nsCSSProps_marker_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps4maskE"] + pub static nsCSSProps_mask: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9mask_clipE"] + pub static nsCSSProps_mask_clip: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14mask_compositeE"] + pub static nsCSSProps_mask_composite: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10mask_imageE"] + pub static nsCSSProps_mask_image: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9mask_modeE"] + pub static nsCSSProps_mask_mode: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11mask_originE"] + pub static nsCSSProps_mask_origin: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13mask_positionE"] + pub static nsCSSProps_mask_position: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15mask_position_xE"] + pub static nsCSSProps_mask_position_x: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15mask_position_yE"] + pub static nsCSSProps_mask_position_y: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11mask_repeatE"] + pub static nsCSSProps_mask_repeat: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9mask_sizeE"] + pub static nsCSSProps_mask_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9mask_typeE"] + pub static nsCSSProps_mask_type: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12math_displayE"] + pub static nsCSSProps_math_display: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12math_variantE"] + pub static nsCSSProps_math_variant: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14max_block_sizeE"] + pub static nsCSSProps_max_block_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10max_heightE"] + pub static nsCSSProps_max_height: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15max_inline_sizeE"] + pub static nsCSSProps_max_inline_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9max_widthE"] + pub static nsCSSProps_max_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14min_block_sizeE"] + pub static nsCSSProps_min_block_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps24_moz_min_font_size_ratioE"] + pub static nsCSSProps__moz_min_font_size_ratio: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10min_heightE"] + pub static nsCSSProps_min_height: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15min_inline_sizeE"] + pub static nsCSSProps_min_inline_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9min_widthE"] + pub static nsCSSProps_min_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14mix_blend_modeE"] + pub static nsCSSProps_mix_blend_mode: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10object_fitE"] + pub static nsCSSProps_object_fit: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15object_positionE"] + pub static nsCSSProps_object_position: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16offset_block_endE"] + pub static nsCSSProps_offset_block_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18offset_block_startE"] + pub static nsCSSProps_offset_block_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17offset_inline_endE"] + pub static nsCSSProps_offset_inline_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19offset_inline_startE"] + pub static nsCSSProps_offset_inline_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7opacityE"] + pub static nsCSSProps_opacity: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps5orderE"] + pub static nsCSSProps_order: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6orientE"] + pub static nsCSSProps_orient: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18osx_font_smoothingE"] + pub static nsCSSProps_osx_font_smoothing: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7outlineE"] + pub static nsCSSProps_outline: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13outline_colorE"] + pub static nsCSSProps_outline_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14outline_offsetE"] + pub static nsCSSProps_outline_offset: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19_moz_outline_radiusE"] + pub static nsCSSProps__moz_outline_radius: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps30_moz_outline_radius_bottomLeftE"] + pub static nsCSSProps__moz_outline_radius_bottomLeft: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps31_moz_outline_radius_bottomRightE"] + pub static nsCSSProps__moz_outline_radius_bottomRight: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps27_moz_outline_radius_topLeftE"] + pub static nsCSSProps__moz_outline_radius_topLeft: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps28_moz_outline_radius_topRightE"] + pub static nsCSSProps__moz_outline_radius_topRight: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13outline_styleE"] + pub static nsCSSProps_outline_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13outline_widthE"] + pub static nsCSSProps_outline_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps8overflowE"] + pub static nsCSSProps_overflow: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17overflow_clip_boxE"] + pub static nsCSSProps_overflow_clip_box: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10overflow_xE"] + pub static nsCSSProps_overflow_x: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10overflow_yE"] + pub static nsCSSProps_overflow_y: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7paddingE"] + pub static nsCSSProps_padding: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17padding_block_endE"] + pub static nsCSSProps_padding_block_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19padding_block_startE"] + pub static nsCSSProps_padding_block_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14padding_bottomE"] + pub static nsCSSProps_padding_bottom: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18padding_inline_endE"] + pub static nsCSSProps_padding_inline_end: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20padding_inline_startE"] + pub static nsCSSProps_padding_inline_start: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12padding_leftE"] + pub static nsCSSProps_padding_left: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13padding_rightE"] + pub static nsCSSProps_padding_right: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11padding_topE"] + pub static nsCSSProps_padding_top: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16page_break_afterE"] + pub static nsCSSProps_page_break_after: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17page_break_beforeE"] + pub static nsCSSProps_page_break_before: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17page_break_insideE"] + pub static nsCSSProps_page_break_inside: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11paint_orderE"] + pub static nsCSSProps_paint_order: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11perspectiveE"] + pub static nsCSSProps_perspective: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18perspective_originE"] + pub static nsCSSProps_perspective_origin: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14pointer_eventsE"] + pub static nsCSSProps_pointer_events: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps8positionE"] + pub static nsCSSProps_position: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6quotesE"] + pub static nsCSSProps_quotes: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6resizeE"] + pub static nsCSSProps_resize: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps5rightE"] + pub static nsCSSProps_right: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10ruby_alignE"] + pub static nsCSSProps_ruby_align: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13ruby_positionE"] + pub static nsCSSProps_ruby_position: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12script_levelE"] + pub static nsCSSProps_script_level: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15script_min_sizeE"] + pub static nsCSSProps_script_min_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22script_size_multiplierE"] + pub static nsCSSProps_script_size_multiplier: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15scroll_behaviorE"] + pub static nsCSSProps_scroll_behavior: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22scroll_snap_coordinateE"] + pub static nsCSSProps_scroll_snap_coordinate: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23scroll_snap_destinationE"] + pub static nsCSSProps_scroll_snap_destination: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20scroll_snap_points_xE"] + pub static nsCSSProps_scroll_snap_points_x: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20scroll_snap_points_yE"] + pub static nsCSSProps_scroll_snap_points_y: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16scroll_snap_typeE"] + pub static nsCSSProps_scroll_snap_type: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18scroll_snap_type_xE"] + pub static nsCSSProps_scroll_snap_type_x: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18scroll_snap_type_yE"] + pub static nsCSSProps_scroll_snap_type_y: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13shape_outsideE"] + pub static nsCSSProps_shape_outside: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15shape_renderingE"] + pub static nsCSSProps_shape_rendering: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7_x_spanE"] + pub static nsCSSProps__x_span: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12stack_sizingE"] + pub static nsCSSProps_stack_sizing: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10stop_colorE"] + pub static nsCSSProps_stop_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12stop_opacityE"] + pub static nsCSSProps_stop_opacity: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps6strokeE"] + pub static nsCSSProps_stroke: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16stroke_dasharrayE"] + pub static nsCSSProps_stroke_dasharray: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17stroke_dashoffsetE"] + pub static nsCSSProps_stroke_dashoffset: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14stroke_linecapE"] + pub static nsCSSProps_stroke_linecap: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15stroke_linejoinE"] + pub static nsCSSProps_stroke_linejoin: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps17stroke_miterlimitE"] + pub static nsCSSProps_stroke_miterlimit: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14stroke_opacityE"] + pub static nsCSSProps_stroke_opacity: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12stroke_widthE"] + pub static nsCSSProps_stroke_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14_x_system_fontE"] + pub static nsCSSProps__x_system_font: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13_moz_tab_sizeE"] + pub static nsCSSProps__moz_tab_size: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12table_layoutE"] + pub static nsCSSProps_table_layout: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10text_alignE"] + pub static nsCSSProps_text_align: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15text_align_lastE"] + pub static nsCSSProps_text_align_last: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11text_anchorE"] + pub static nsCSSProps_text_anchor: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20text_combine_uprightE"] + pub static nsCSSProps_text_combine_upright: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15text_decorationE"] + pub static nsCSSProps_text_decoration: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21text_decoration_colorE"] + pub static nsCSSProps_text_decoration_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20text_decoration_lineE"] + pub static nsCSSProps_text_decoration_line: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps21text_decoration_styleE"] + pub static nsCSSProps_text_decoration_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13text_emphasisE"] + pub static nsCSSProps_text_emphasis: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19text_emphasis_colorE"] + pub static nsCSSProps_text_emphasis_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps22text_emphasis_positionE"] + pub static nsCSSProps_text_emphasis_position: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19text_emphasis_styleE"] + pub static nsCSSProps_text_emphasis_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps23_webkit_text_fill_colorE"] + pub static nsCSSProps__webkit_text_fill_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11text_indentE"] + pub static nsCSSProps_text_indent: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16text_orientationE"] + pub static nsCSSProps_text_orientation: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13text_overflowE"] + pub static nsCSSProps_text_overflow: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14text_renderingE"] + pub static nsCSSProps_text_rendering: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11text_shadowE"] + pub static nsCSSProps_text_shadow: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16text_size_adjustE"] + pub static nsCSSProps_text_size_adjust: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19_webkit_text_strokeE"] + pub static nsCSSProps__webkit_text_stroke: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps25_webkit_text_stroke_colorE"] + pub static nsCSSProps__webkit_text_stroke_color: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps25_webkit_text_stroke_widthE"] + pub static nsCSSProps__webkit_text_stroke_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14text_transformE"] + pub static nsCSSProps_text_transform: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12_x_text_zoomE"] + pub static nsCSSProps__x_text_zoom: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps3topE"] + pub static nsCSSProps_top: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14_moz_top_layerE"] + pub static nsCSSProps__moz_top_layer: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12touch_actionE"] + pub static nsCSSProps_touch_action: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps9transformE"] + pub static nsCSSProps_transform: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14_moz_transformE"] + pub static nsCSSProps__moz_transform: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13transform_boxE"] + pub static nsCSSProps_transform_box: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16transform_originE"] + pub static nsCSSProps_transform_origin: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps15transform_styleE"] + pub static nsCSSProps_transform_style: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10transitionE"] + pub static nsCSSProps_transition: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps16transition_delayE"] + pub static nsCSSProps_transition_delay: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19transition_durationE"] + pub static nsCSSProps_transition_duration: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps19transition_propertyE"] + pub static nsCSSProps_transition_property: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps26transition_timing_functionE"] + pub static nsCSSProps_transition_timing_function: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12unicode_bidiE"] + pub static nsCSSProps_unicode_bidi: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10user_focusE"] + pub static nsCSSProps_user_focus: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10user_inputE"] + pub static nsCSSProps_user_input: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11user_modifyE"] + pub static nsCSSProps_user_modify: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11user_selectE"] + pub static nsCSSProps_user_select: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13vector_effectE"] + pub static nsCSSProps_vector_effect: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps14vertical_alignE"] + pub static nsCSSProps_vertical_align: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10visibilityE"] + pub static nsCSSProps_visibility: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11white_spaceE"] + pub static nsCSSProps_white_space: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps5widthE"] + pub static nsCSSProps_width: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps11will_changeE"] + pub static nsCSSProps_will_change: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps20_moz_window_draggingE"] + pub static nsCSSProps__moz_window_dragging: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps18_moz_window_shadowE"] + pub static nsCSSProps__moz_window_shadow: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps10word_breakE"] + pub static nsCSSProps_word_break: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12word_spacingE"] + pub static nsCSSProps_word_spacing: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps13overflow_wrapE"] + pub static nsCSSProps_overflow_wrap: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps12writing_modeE"] + pub static nsCSSProps_writing_mode: *mut nsICSSProperty; + #[link_name = "_ZN10nsCSSProps7z_indexE"] + pub static nsCSSProps_z_index: *mut nsICSSProperty; } } else if #[cfg(target_pointer_width = "64")] { extern { @@ -9843,6 +10565,726 @@ cfg_if! { pub static nsCSSAnonBoxes_mozSVGForeignContent: *mut nsICSSAnonBoxPseudo; #[link_name = "?mozSVGText@nsCSSAnonBoxes@@2PEAVnsICSSAnonBoxPseudo@@EA"] pub static nsCSSAnonBoxes_mozSVGText: *mut nsICSSAnonBoxPseudo; + #[link_name = "?align_content@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_align_content: *mut nsICSSProperty; + #[link_name = "?align_items@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_align_items: *mut nsICSSProperty; + #[link_name = "?align_self@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_align_self: *mut nsICSSProperty; + #[link_name = "?all@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_all: *mut nsICSSProperty; + #[link_name = "?animation@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation: *mut nsICSSProperty; + #[link_name = "?animation_delay@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation_delay: *mut nsICSSProperty; + #[link_name = "?animation_direction@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation_direction: *mut nsICSSProperty; + #[link_name = "?animation_duration@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation_duration: *mut nsICSSProperty; + #[link_name = "?animation_fill_mode@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation_fill_mode: *mut nsICSSProperty; + #[link_name = "?animation_iteration_count@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation_iteration_count: *mut nsICSSProperty; + #[link_name = "?animation_name@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation_name: *mut nsICSSProperty; + #[link_name = "?animation_play_state@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation_play_state: *mut nsICSSProperty; + #[link_name = "?animation_timing_function@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_animation_timing_function: *mut nsICSSProperty; + #[link_name = "?appearance@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_appearance: *mut nsICSSProperty; + #[link_name = "?backface_visibility@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_backface_visibility: *mut nsICSSProperty; + #[link_name = "?background@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background: *mut nsICSSProperty; + #[link_name = "?background_attachment@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_attachment: *mut nsICSSProperty; + #[link_name = "?background_blend_mode@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_blend_mode: *mut nsICSSProperty; + #[link_name = "?background_clip@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_clip: *mut nsICSSProperty; + #[link_name = "?background_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_color: *mut nsICSSProperty; + #[link_name = "?background_image@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_image: *mut nsICSSProperty; + #[link_name = "?background_origin@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_origin: *mut nsICSSProperty; + #[link_name = "?background_position@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_position: *mut nsICSSProperty; + #[link_name = "?background_position_x@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_position_x: *mut nsICSSProperty; + #[link_name = "?background_position_y@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_position_y: *mut nsICSSProperty; + #[link_name = "?background_repeat@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_repeat: *mut nsICSSProperty; + #[link_name = "?background_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_background_size: *mut nsICSSProperty; + #[link_name = "?binding@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_binding: *mut nsICSSProperty; + #[link_name = "?block_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_block_size: *mut nsICSSProperty; + #[link_name = "?border@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border: *mut nsICSSProperty; + #[link_name = "?border_block_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_block_end: *mut nsICSSProperty; + #[link_name = "?border_block_end_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_block_end_color: *mut nsICSSProperty; + #[link_name = "?border_block_end_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_block_end_style: *mut nsICSSProperty; + #[link_name = "?border_block_end_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_block_end_width: *mut nsICSSProperty; + #[link_name = "?border_block_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_block_start: *mut nsICSSProperty; + #[link_name = "?border_block_start_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_block_start_color: *mut nsICSSProperty; + #[link_name = "?border_block_start_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_block_start_style: *mut nsICSSProperty; + #[link_name = "?border_block_start_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_block_start_width: *mut nsICSSProperty; + #[link_name = "?border_bottom@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_bottom: *mut nsICSSProperty; + #[link_name = "?border_bottom_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_bottom_color: *mut nsICSSProperty; + #[link_name = "?border_bottom_colors@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_bottom_colors: *mut nsICSSProperty; + #[link_name = "?border_bottom_left_radius@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_bottom_left_radius: *mut nsICSSProperty; + #[link_name = "?border_bottom_right_radius@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_bottom_right_radius: *mut nsICSSProperty; + #[link_name = "?border_bottom_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_bottom_style: *mut nsICSSProperty; + #[link_name = "?border_bottom_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_bottom_width: *mut nsICSSProperty; + #[link_name = "?border_collapse@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_collapse: *mut nsICSSProperty; + #[link_name = "?border_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_color: *mut nsICSSProperty; + #[link_name = "?border_image@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_image: *mut nsICSSProperty; + #[link_name = "?border_image_outset@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_image_outset: *mut nsICSSProperty; + #[link_name = "?border_image_repeat@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_image_repeat: *mut nsICSSProperty; + #[link_name = "?border_image_slice@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_image_slice: *mut nsICSSProperty; + #[link_name = "?border_image_source@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_image_source: *mut nsICSSProperty; + #[link_name = "?border_image_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_image_width: *mut nsICSSProperty; + #[link_name = "?border_inline_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_inline_end: *mut nsICSSProperty; + #[link_name = "?border_inline_end_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_inline_end_color: *mut nsICSSProperty; + #[link_name = "?border_inline_end_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_inline_end_style: *mut nsICSSProperty; + #[link_name = "?border_inline_end_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_inline_end_width: *mut nsICSSProperty; + #[link_name = "?border_inline_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_inline_start: *mut nsICSSProperty; + #[link_name = "?border_inline_start_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_inline_start_color: *mut nsICSSProperty; + #[link_name = "?border_inline_start_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_inline_start_style: *mut nsICSSProperty; + #[link_name = "?border_inline_start_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_inline_start_width: *mut nsICSSProperty; + #[link_name = "?border_left@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_left: *mut nsICSSProperty; + #[link_name = "?border_left_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_left_color: *mut nsICSSProperty; + #[link_name = "?border_left_colors@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_left_colors: *mut nsICSSProperty; + #[link_name = "?border_left_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_left_style: *mut nsICSSProperty; + #[link_name = "?border_left_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_left_width: *mut nsICSSProperty; + #[link_name = "?border_radius@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_radius: *mut nsICSSProperty; + #[link_name = "?border_right@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_right: *mut nsICSSProperty; + #[link_name = "?border_right_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_right_color: *mut nsICSSProperty; + #[link_name = "?border_right_colors@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_right_colors: *mut nsICSSProperty; + #[link_name = "?border_right_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_right_style: *mut nsICSSProperty; + #[link_name = "?border_right_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_right_width: *mut nsICSSProperty; + #[link_name = "?border_spacing@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_spacing: *mut nsICSSProperty; + #[link_name = "?border_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_style: *mut nsICSSProperty; + #[link_name = "?border_top@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_top: *mut nsICSSProperty; + #[link_name = "?border_top_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_top_color: *mut nsICSSProperty; + #[link_name = "?border_top_colors@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_top_colors: *mut nsICSSProperty; + #[link_name = "?border_top_left_radius@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_top_left_radius: *mut nsICSSProperty; + #[link_name = "?border_top_right_radius@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_top_right_radius: *mut nsICSSProperty; + #[link_name = "?border_top_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_top_style: *mut nsICSSProperty; + #[link_name = "?border_top_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_top_width: *mut nsICSSProperty; + #[link_name = "?border_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_border_width: *mut nsICSSProperty; + #[link_name = "?bottom@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_bottom: *mut nsICSSProperty; + #[link_name = "?box_align@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_align: *mut nsICSSProperty; + #[link_name = "?box_decoration_break@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_decoration_break: *mut nsICSSProperty; + #[link_name = "?box_direction@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_direction: *mut nsICSSProperty; + #[link_name = "?box_flex@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_flex: *mut nsICSSProperty; + #[link_name = "?box_ordinal_group@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_ordinal_group: *mut nsICSSProperty; + #[link_name = "?box_orient@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_orient: *mut nsICSSProperty; + #[link_name = "?box_pack@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_pack: *mut nsICSSProperty; + #[link_name = "?box_shadow@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_shadow: *mut nsICSSProperty; + #[link_name = "?box_sizing@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_box_sizing: *mut nsICSSProperty; + #[link_name = "?caption_side@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_caption_side: *mut nsICSSProperty; + #[link_name = "?clear@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_clear: *mut nsICSSProperty; + #[link_name = "?clip@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_clip: *mut nsICSSProperty; + #[link_name = "?clip_path@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_clip_path: *mut nsICSSProperty; + #[link_name = "?clip_rule@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_clip_rule: *mut nsICSSProperty; + #[link_name = "?color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_color: *mut nsICSSProperty; + #[link_name = "?color_adjust@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_color_adjust: *mut nsICSSProperty; + #[link_name = "?color_interpolation@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_color_interpolation: *mut nsICSSProperty; + #[link_name = "?color_interpolation_filters@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_color_interpolation_filters: *mut nsICSSProperty; + #[link_name = "?column_count@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_column_count: *mut nsICSSProperty; + #[link_name = "?column_fill@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_column_fill: *mut nsICSSProperty; + #[link_name = "?column_gap@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_column_gap: *mut nsICSSProperty; + #[link_name = "?column_rule@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_column_rule: *mut nsICSSProperty; + #[link_name = "?column_rule_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_column_rule_color: *mut nsICSSProperty; + #[link_name = "?column_rule_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_column_rule_style: *mut nsICSSProperty; + #[link_name = "?column_rule_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_column_rule_width: *mut nsICSSProperty; + #[link_name = "?column_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_column_width: *mut nsICSSProperty; + #[link_name = "?columns@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_columns: *mut nsICSSProperty; + #[link_name = "?contain@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_contain: *mut nsICSSProperty; + #[link_name = "?content@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_content: *mut nsICSSProperty; + #[link_name = "?_moz_control_character_visibility@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_control_character_visibility: *mut nsICSSProperty; + #[link_name = "?counter_increment@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_counter_increment: *mut nsICSSProperty; + #[link_name = "?counter_reset@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_counter_reset: *mut nsICSSProperty; + #[link_name = "?cursor@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_cursor: *mut nsICSSProperty; + #[link_name = "?direction@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_direction: *mut nsICSSProperty; + #[link_name = "?display@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_display: *mut nsICSSProperty; + #[link_name = "?dominant_baseline@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_dominant_baseline: *mut nsICSSProperty; + #[link_name = "?empty_cells@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_empty_cells: *mut nsICSSProperty; + #[link_name = "?fill@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_fill: *mut nsICSSProperty; + #[link_name = "?fill_opacity@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_fill_opacity: *mut nsICSSProperty; + #[link_name = "?fill_rule@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_fill_rule: *mut nsICSSProperty; + #[link_name = "?filter@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_filter: *mut nsICSSProperty; + #[link_name = "?flex@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flex: *mut nsICSSProperty; + #[link_name = "?flex_basis@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flex_basis: *mut nsICSSProperty; + #[link_name = "?flex_direction@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flex_direction: *mut nsICSSProperty; + #[link_name = "?flex_flow@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flex_flow: *mut nsICSSProperty; + #[link_name = "?flex_grow@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flex_grow: *mut nsICSSProperty; + #[link_name = "?flex_shrink@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flex_shrink: *mut nsICSSProperty; + #[link_name = "?flex_wrap@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flex_wrap: *mut nsICSSProperty; + #[link_name = "?float_@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_float_: *mut nsICSSProperty; + #[link_name = "?float_edge@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_float_edge: *mut nsICSSProperty; + #[link_name = "?flood_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flood_color: *mut nsICSSProperty; + #[link_name = "?flood_opacity@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_flood_opacity: *mut nsICSSProperty; + #[link_name = "?font@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font: *mut nsICSSProperty; + #[link_name = "?font_family@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_family: *mut nsICSSProperty; + #[link_name = "?font_feature_settings@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_feature_settings: *mut nsICSSProperty; + #[link_name = "?font_kerning@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_kerning: *mut nsICSSProperty; + #[link_name = "?font_language_override@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_language_override: *mut nsICSSProperty; + #[link_name = "?font_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_size: *mut nsICSSProperty; + #[link_name = "?font_size_adjust@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_size_adjust: *mut nsICSSProperty; + #[link_name = "?font_stretch@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_stretch: *mut nsICSSProperty; + #[link_name = "?font_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_style: *mut nsICSSProperty; + #[link_name = "?font_synthesis@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_synthesis: *mut nsICSSProperty; + #[link_name = "?font_variant@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_variant: *mut nsICSSProperty; + #[link_name = "?font_variant_alternates@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_variant_alternates: *mut nsICSSProperty; + #[link_name = "?font_variant_caps@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_variant_caps: *mut nsICSSProperty; + #[link_name = "?font_variant_east_asian@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_variant_east_asian: *mut nsICSSProperty; + #[link_name = "?font_variant_ligatures@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_variant_ligatures: *mut nsICSSProperty; + #[link_name = "?font_variant_numeric@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_variant_numeric: *mut nsICSSProperty; + #[link_name = "?font_variant_position@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_variant_position: *mut nsICSSProperty; + #[link_name = "?font_weight@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_font_weight: *mut nsICSSProperty; + #[link_name = "?force_broken_image_icon@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_force_broken_image_icon: *mut nsICSSProperty; + #[link_name = "?grid@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid: *mut nsICSSProperty; + #[link_name = "?grid_area@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_area: *mut nsICSSProperty; + #[link_name = "?grid_auto_columns@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_auto_columns: *mut nsICSSProperty; + #[link_name = "?grid_auto_flow@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_auto_flow: *mut nsICSSProperty; + #[link_name = "?grid_auto_rows@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_auto_rows: *mut nsICSSProperty; + #[link_name = "?grid_column@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_column: *mut nsICSSProperty; + #[link_name = "?grid_column_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_column_end: *mut nsICSSProperty; + #[link_name = "?grid_column_gap@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_column_gap: *mut nsICSSProperty; + #[link_name = "?grid_column_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_column_start: *mut nsICSSProperty; + #[link_name = "?grid_gap@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_gap: *mut nsICSSProperty; + #[link_name = "?grid_row@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_row: *mut nsICSSProperty; + #[link_name = "?grid_row_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_row_end: *mut nsICSSProperty; + #[link_name = "?grid_row_gap@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_row_gap: *mut nsICSSProperty; + #[link_name = "?grid_row_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_row_start: *mut nsICSSProperty; + #[link_name = "?grid_template@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_template: *mut nsICSSProperty; + #[link_name = "?grid_template_areas@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_template_areas: *mut nsICSSProperty; + #[link_name = "?grid_template_columns@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_template_columns: *mut nsICSSProperty; + #[link_name = "?grid_template_rows@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_grid_template_rows: *mut nsICSSProperty; + #[link_name = "?height@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_height: *mut nsICSSProperty; + #[link_name = "?hyphens@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_hyphens: *mut nsICSSProperty; + #[link_name = "?initial_letter@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_initial_letter: *mut nsICSSProperty; + #[link_name = "?image_orientation@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_image_orientation: *mut nsICSSProperty; + #[link_name = "?image_region@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_image_region: *mut nsICSSProperty; + #[link_name = "?image_rendering@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_image_rendering: *mut nsICSSProperty; + #[link_name = "?ime_mode@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_ime_mode: *mut nsICSSProperty; + #[link_name = "?inline_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_inline_size: *mut nsICSSProperty; + #[link_name = "?isolation@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_isolation: *mut nsICSSProperty; + #[link_name = "?justify_content@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_justify_content: *mut nsICSSProperty; + #[link_name = "?justify_items@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_justify_items: *mut nsICSSProperty; + #[link_name = "?justify_self@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_justify_self: *mut nsICSSProperty; + #[link_name = "?_x_lang@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__x_lang: *mut nsICSSProperty; + #[link_name = "?left@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_left: *mut nsICSSProperty; + #[link_name = "?letter_spacing@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_letter_spacing: *mut nsICSSProperty; + #[link_name = "?lighting_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_lighting_color: *mut nsICSSProperty; + #[link_name = "?line_height@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_line_height: *mut nsICSSProperty; + #[link_name = "?list_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_list_style: *mut nsICSSProperty; + #[link_name = "?list_style_image@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_list_style_image: *mut nsICSSProperty; + #[link_name = "?list_style_position@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_list_style_position: *mut nsICSSProperty; + #[link_name = "?list_style_type@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_list_style_type: *mut nsICSSProperty; + #[link_name = "?margin@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin: *mut nsICSSProperty; + #[link_name = "?margin_block_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin_block_end: *mut nsICSSProperty; + #[link_name = "?margin_block_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin_block_start: *mut nsICSSProperty; + #[link_name = "?margin_bottom@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin_bottom: *mut nsICSSProperty; + #[link_name = "?margin_inline_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin_inline_end: *mut nsICSSProperty; + #[link_name = "?margin_inline_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin_inline_start: *mut nsICSSProperty; + #[link_name = "?margin_left@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin_left: *mut nsICSSProperty; + #[link_name = "?margin_right@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin_right: *mut nsICSSProperty; + #[link_name = "?margin_top@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_margin_top: *mut nsICSSProperty; + #[link_name = "?marker@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_marker: *mut nsICSSProperty; + #[link_name = "?marker_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_marker_end: *mut nsICSSProperty; + #[link_name = "?marker_mid@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_marker_mid: *mut nsICSSProperty; + #[link_name = "?marker_offset@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_marker_offset: *mut nsICSSProperty; + #[link_name = "?marker_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_marker_start: *mut nsICSSProperty; + #[link_name = "?mask@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask: *mut nsICSSProperty; + #[link_name = "?mask_clip@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_clip: *mut nsICSSProperty; + #[link_name = "?mask_composite@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_composite: *mut nsICSSProperty; + #[link_name = "?mask_image@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_image: *mut nsICSSProperty; + #[link_name = "?mask_mode@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_mode: *mut nsICSSProperty; + #[link_name = "?mask_origin@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_origin: *mut nsICSSProperty; + #[link_name = "?mask_position@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_position: *mut nsICSSProperty; + #[link_name = "?mask_position_x@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_position_x: *mut nsICSSProperty; + #[link_name = "?mask_position_y@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_position_y: *mut nsICSSProperty; + #[link_name = "?mask_repeat@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_repeat: *mut nsICSSProperty; + #[link_name = "?mask_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_size: *mut nsICSSProperty; + #[link_name = "?mask_type@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mask_type: *mut nsICSSProperty; + #[link_name = "?math_display@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_math_display: *mut nsICSSProperty; + #[link_name = "?math_variant@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_math_variant: *mut nsICSSProperty; + #[link_name = "?max_block_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_max_block_size: *mut nsICSSProperty; + #[link_name = "?max_height@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_max_height: *mut nsICSSProperty; + #[link_name = "?max_inline_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_max_inline_size: *mut nsICSSProperty; + #[link_name = "?max_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_max_width: *mut nsICSSProperty; + #[link_name = "?min_block_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_min_block_size: *mut nsICSSProperty; + #[link_name = "?_moz_min_font_size_ratio@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_min_font_size_ratio: *mut nsICSSProperty; + #[link_name = "?min_height@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_min_height: *mut nsICSSProperty; + #[link_name = "?min_inline_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_min_inline_size: *mut nsICSSProperty; + #[link_name = "?min_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_min_width: *mut nsICSSProperty; + #[link_name = "?mix_blend_mode@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_mix_blend_mode: *mut nsICSSProperty; + #[link_name = "?object_fit@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_object_fit: *mut nsICSSProperty; + #[link_name = "?object_position@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_object_position: *mut nsICSSProperty; + #[link_name = "?offset_block_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_offset_block_end: *mut nsICSSProperty; + #[link_name = "?offset_block_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_offset_block_start: *mut nsICSSProperty; + #[link_name = "?offset_inline_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_offset_inline_end: *mut nsICSSProperty; + #[link_name = "?offset_inline_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_offset_inline_start: *mut nsICSSProperty; + #[link_name = "?opacity@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_opacity: *mut nsICSSProperty; + #[link_name = "?order@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_order: *mut nsICSSProperty; + #[link_name = "?orient@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_orient: *mut nsICSSProperty; + #[link_name = "?osx_font_smoothing@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_osx_font_smoothing: *mut nsICSSProperty; + #[link_name = "?outline@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_outline: *mut nsICSSProperty; + #[link_name = "?outline_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_outline_color: *mut nsICSSProperty; + #[link_name = "?outline_offset@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_outline_offset: *mut nsICSSProperty; + #[link_name = "?_moz_outline_radius@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_outline_radius: *mut nsICSSProperty; + #[link_name = "?_moz_outline_radius_bottomLeft@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_outline_radius_bottomLeft: *mut nsICSSProperty; + #[link_name = "?_moz_outline_radius_bottomRight@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_outline_radius_bottomRight: *mut nsICSSProperty; + #[link_name = "?_moz_outline_radius_topLeft@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_outline_radius_topLeft: *mut nsICSSProperty; + #[link_name = "?_moz_outline_radius_topRight@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_outline_radius_topRight: *mut nsICSSProperty; + #[link_name = "?outline_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_outline_style: *mut nsICSSProperty; + #[link_name = "?outline_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_outline_width: *mut nsICSSProperty; + #[link_name = "?overflow@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_overflow: *mut nsICSSProperty; + #[link_name = "?overflow_clip_box@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_overflow_clip_box: *mut nsICSSProperty; + #[link_name = "?overflow_x@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_overflow_x: *mut nsICSSProperty; + #[link_name = "?overflow_y@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_overflow_y: *mut nsICSSProperty; + #[link_name = "?padding@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding: *mut nsICSSProperty; + #[link_name = "?padding_block_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding_block_end: *mut nsICSSProperty; + #[link_name = "?padding_block_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding_block_start: *mut nsICSSProperty; + #[link_name = "?padding_bottom@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding_bottom: *mut nsICSSProperty; + #[link_name = "?padding_inline_end@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding_inline_end: *mut nsICSSProperty; + #[link_name = "?padding_inline_start@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding_inline_start: *mut nsICSSProperty; + #[link_name = "?padding_left@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding_left: *mut nsICSSProperty; + #[link_name = "?padding_right@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding_right: *mut nsICSSProperty; + #[link_name = "?padding_top@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_padding_top: *mut nsICSSProperty; + #[link_name = "?page_break_after@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_page_break_after: *mut nsICSSProperty; + #[link_name = "?page_break_before@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_page_break_before: *mut nsICSSProperty; + #[link_name = "?page_break_inside@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_page_break_inside: *mut nsICSSProperty; + #[link_name = "?paint_order@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_paint_order: *mut nsICSSProperty; + #[link_name = "?perspective@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_perspective: *mut nsICSSProperty; + #[link_name = "?perspective_origin@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_perspective_origin: *mut nsICSSProperty; + #[link_name = "?pointer_events@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_pointer_events: *mut nsICSSProperty; + #[link_name = "?position@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_position: *mut nsICSSProperty; + #[link_name = "?quotes@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_quotes: *mut nsICSSProperty; + #[link_name = "?resize@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_resize: *mut nsICSSProperty; + #[link_name = "?right@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_right: *mut nsICSSProperty; + #[link_name = "?ruby_align@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_ruby_align: *mut nsICSSProperty; + #[link_name = "?ruby_position@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_ruby_position: *mut nsICSSProperty; + #[link_name = "?script_level@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_script_level: *mut nsICSSProperty; + #[link_name = "?script_min_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_script_min_size: *mut nsICSSProperty; + #[link_name = "?script_size_multiplier@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_script_size_multiplier: *mut nsICSSProperty; + #[link_name = "?scroll_behavior@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_scroll_behavior: *mut nsICSSProperty; + #[link_name = "?scroll_snap_coordinate@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_scroll_snap_coordinate: *mut nsICSSProperty; + #[link_name = "?scroll_snap_destination@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_scroll_snap_destination: *mut nsICSSProperty; + #[link_name = "?scroll_snap_points_x@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_scroll_snap_points_x: *mut nsICSSProperty; + #[link_name = "?scroll_snap_points_y@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_scroll_snap_points_y: *mut nsICSSProperty; + #[link_name = "?scroll_snap_type@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_scroll_snap_type: *mut nsICSSProperty; + #[link_name = "?scroll_snap_type_x@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_scroll_snap_type_x: *mut nsICSSProperty; + #[link_name = "?scroll_snap_type_y@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_scroll_snap_type_y: *mut nsICSSProperty; + #[link_name = "?shape_outside@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_shape_outside: *mut nsICSSProperty; + #[link_name = "?shape_rendering@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_shape_rendering: *mut nsICSSProperty; + #[link_name = "?_x_span@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__x_span: *mut nsICSSProperty; + #[link_name = "?stack_sizing@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stack_sizing: *mut nsICSSProperty; + #[link_name = "?stop_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stop_color: *mut nsICSSProperty; + #[link_name = "?stop_opacity@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stop_opacity: *mut nsICSSProperty; + #[link_name = "?stroke@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stroke: *mut nsICSSProperty; + #[link_name = "?stroke_dasharray@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stroke_dasharray: *mut nsICSSProperty; + #[link_name = "?stroke_dashoffset@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stroke_dashoffset: *mut nsICSSProperty; + #[link_name = "?stroke_linecap@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stroke_linecap: *mut nsICSSProperty; + #[link_name = "?stroke_linejoin@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stroke_linejoin: *mut nsICSSProperty; + #[link_name = "?stroke_miterlimit@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stroke_miterlimit: *mut nsICSSProperty; + #[link_name = "?stroke_opacity@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stroke_opacity: *mut nsICSSProperty; + #[link_name = "?stroke_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_stroke_width: *mut nsICSSProperty; + #[link_name = "?_x_system_font@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__x_system_font: *mut nsICSSProperty; + #[link_name = "?_moz_tab_size@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_tab_size: *mut nsICSSProperty; + #[link_name = "?table_layout@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_table_layout: *mut nsICSSProperty; + #[link_name = "?text_align@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_align: *mut nsICSSProperty; + #[link_name = "?text_align_last@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_align_last: *mut nsICSSProperty; + #[link_name = "?text_anchor@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_anchor: *mut nsICSSProperty; + #[link_name = "?text_combine_upright@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_combine_upright: *mut nsICSSProperty; + #[link_name = "?text_decoration@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_decoration: *mut nsICSSProperty; + #[link_name = "?text_decoration_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_decoration_color: *mut nsICSSProperty; + #[link_name = "?text_decoration_line@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_decoration_line: *mut nsICSSProperty; + #[link_name = "?text_decoration_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_decoration_style: *mut nsICSSProperty; + #[link_name = "?text_emphasis@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_emphasis: *mut nsICSSProperty; + #[link_name = "?text_emphasis_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_emphasis_color: *mut nsICSSProperty; + #[link_name = "?text_emphasis_position@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_emphasis_position: *mut nsICSSProperty; + #[link_name = "?text_emphasis_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_emphasis_style: *mut nsICSSProperty; + #[link_name = "?_webkit_text_fill_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__webkit_text_fill_color: *mut nsICSSProperty; + #[link_name = "?text_indent@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_indent: *mut nsICSSProperty; + #[link_name = "?text_orientation@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_orientation: *mut nsICSSProperty; + #[link_name = "?text_overflow@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_overflow: *mut nsICSSProperty; + #[link_name = "?text_rendering@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_rendering: *mut nsICSSProperty; + #[link_name = "?text_shadow@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_shadow: *mut nsICSSProperty; + #[link_name = "?text_size_adjust@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_size_adjust: *mut nsICSSProperty; + #[link_name = "?_webkit_text_stroke@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__webkit_text_stroke: *mut nsICSSProperty; + #[link_name = "?_webkit_text_stroke_color@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__webkit_text_stroke_color: *mut nsICSSProperty; + #[link_name = "?_webkit_text_stroke_width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__webkit_text_stroke_width: *mut nsICSSProperty; + #[link_name = "?text_transform@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_text_transform: *mut nsICSSProperty; + #[link_name = "?_x_text_zoom@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__x_text_zoom: *mut nsICSSProperty; + #[link_name = "?top@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_top: *mut nsICSSProperty; + #[link_name = "?_moz_top_layer@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_top_layer: *mut nsICSSProperty; + #[link_name = "?touch_action@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_touch_action: *mut nsICSSProperty; + #[link_name = "?transform@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transform: *mut nsICSSProperty; + #[link_name = "?_moz_transform@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_transform: *mut nsICSSProperty; + #[link_name = "?transform_box@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transform_box: *mut nsICSSProperty; + #[link_name = "?transform_origin@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transform_origin: *mut nsICSSProperty; + #[link_name = "?transform_style@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transform_style: *mut nsICSSProperty; + #[link_name = "?transition@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transition: *mut nsICSSProperty; + #[link_name = "?transition_delay@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transition_delay: *mut nsICSSProperty; + #[link_name = "?transition_duration@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transition_duration: *mut nsICSSProperty; + #[link_name = "?transition_property@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transition_property: *mut nsICSSProperty; + #[link_name = "?transition_timing_function@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_transition_timing_function: *mut nsICSSProperty; + #[link_name = "?unicode_bidi@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_unicode_bidi: *mut nsICSSProperty; + #[link_name = "?user_focus@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_user_focus: *mut nsICSSProperty; + #[link_name = "?user_input@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_user_input: *mut nsICSSProperty; + #[link_name = "?user_modify@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_user_modify: *mut nsICSSProperty; + #[link_name = "?user_select@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_user_select: *mut nsICSSProperty; + #[link_name = "?vector_effect@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_vector_effect: *mut nsICSSProperty; + #[link_name = "?vertical_align@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_vertical_align: *mut nsICSSProperty; + #[link_name = "?visibility@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_visibility: *mut nsICSSProperty; + #[link_name = "?white_space@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_white_space: *mut nsICSSProperty; + #[link_name = "?width@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_width: *mut nsICSSProperty; + #[link_name = "?will_change@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_will_change: *mut nsICSSProperty; + #[link_name = "?_moz_window_dragging@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_window_dragging: *mut nsICSSProperty; + #[link_name = "?_moz_window_shadow@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps__moz_window_shadow: *mut nsICSSProperty; + #[link_name = "?word_break@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_word_break: *mut nsICSSProperty; + #[link_name = "?word_spacing@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_word_spacing: *mut nsICSSProperty; + #[link_name = "?overflow_wrap@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_overflow_wrap: *mut nsICSSProperty; + #[link_name = "?writing_mode@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_writing_mode: *mut nsICSSProperty; + #[link_name = "?z_index@nsCSSProps@@2PEAVnsICSSProperty@@EA"] + pub static nsCSSProps_z_index: *mut nsICSSProperty; } } else { extern { @@ -14756,6 +16198,726 @@ cfg_if! { pub static nsCSSAnonBoxes_mozSVGForeignContent: *mut nsICSSAnonBoxPseudo; #[link_name = "\x01?mozSVGText@nsCSSAnonBoxes@@2PAVnsICSSAnonBoxPseudo@@A"] pub static nsCSSAnonBoxes_mozSVGText: *mut nsICSSAnonBoxPseudo; + #[link_name = "\x01?align_content@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_align_content: *mut nsICSSProperty; + #[link_name = "\x01?align_items@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_align_items: *mut nsICSSProperty; + #[link_name = "\x01?align_self@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_align_self: *mut nsICSSProperty; + #[link_name = "\x01?all@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_all: *mut nsICSSProperty; + #[link_name = "\x01?animation@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation: *mut nsICSSProperty; + #[link_name = "\x01?animation_delay@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation_delay: *mut nsICSSProperty; + #[link_name = "\x01?animation_direction@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation_direction: *mut nsICSSProperty; + #[link_name = "\x01?animation_duration@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation_duration: *mut nsICSSProperty; + #[link_name = "\x01?animation_fill_mode@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation_fill_mode: *mut nsICSSProperty; + #[link_name = "\x01?animation_iteration_count@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation_iteration_count: *mut nsICSSProperty; + #[link_name = "\x01?animation_name@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation_name: *mut nsICSSProperty; + #[link_name = "\x01?animation_play_state@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation_play_state: *mut nsICSSProperty; + #[link_name = "\x01?animation_timing_function@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_animation_timing_function: *mut nsICSSProperty; + #[link_name = "\x01?appearance@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_appearance: *mut nsICSSProperty; + #[link_name = "\x01?backface_visibility@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_backface_visibility: *mut nsICSSProperty; + #[link_name = "\x01?background@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background: *mut nsICSSProperty; + #[link_name = "\x01?background_attachment@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_attachment: *mut nsICSSProperty; + #[link_name = "\x01?background_blend_mode@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_blend_mode: *mut nsICSSProperty; + #[link_name = "\x01?background_clip@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_clip: *mut nsICSSProperty; + #[link_name = "\x01?background_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_color: *mut nsICSSProperty; + #[link_name = "\x01?background_image@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_image: *mut nsICSSProperty; + #[link_name = "\x01?background_origin@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_origin: *mut nsICSSProperty; + #[link_name = "\x01?background_position@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_position: *mut nsICSSProperty; + #[link_name = "\x01?background_position_x@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_position_x: *mut nsICSSProperty; + #[link_name = "\x01?background_position_y@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_position_y: *mut nsICSSProperty; + #[link_name = "\x01?background_repeat@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_repeat: *mut nsICSSProperty; + #[link_name = "\x01?background_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_background_size: *mut nsICSSProperty; + #[link_name = "\x01?binding@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_binding: *mut nsICSSProperty; + #[link_name = "\x01?block_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_block_size: *mut nsICSSProperty; + #[link_name = "\x01?border@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border: *mut nsICSSProperty; + #[link_name = "\x01?border_block_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_block_end: *mut nsICSSProperty; + #[link_name = "\x01?border_block_end_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_block_end_color: *mut nsICSSProperty; + #[link_name = "\x01?border_block_end_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_block_end_style: *mut nsICSSProperty; + #[link_name = "\x01?border_block_end_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_block_end_width: *mut nsICSSProperty; + #[link_name = "\x01?border_block_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_block_start: *mut nsICSSProperty; + #[link_name = "\x01?border_block_start_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_block_start_color: *mut nsICSSProperty; + #[link_name = "\x01?border_block_start_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_block_start_style: *mut nsICSSProperty; + #[link_name = "\x01?border_block_start_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_block_start_width: *mut nsICSSProperty; + #[link_name = "\x01?border_bottom@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_bottom: *mut nsICSSProperty; + #[link_name = "\x01?border_bottom_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_bottom_color: *mut nsICSSProperty; + #[link_name = "\x01?border_bottom_colors@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_bottom_colors: *mut nsICSSProperty; + #[link_name = "\x01?border_bottom_left_radius@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_bottom_left_radius: *mut nsICSSProperty; + #[link_name = "\x01?border_bottom_right_radius@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_bottom_right_radius: *mut nsICSSProperty; + #[link_name = "\x01?border_bottom_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_bottom_style: *mut nsICSSProperty; + #[link_name = "\x01?border_bottom_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_bottom_width: *mut nsICSSProperty; + #[link_name = "\x01?border_collapse@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_collapse: *mut nsICSSProperty; + #[link_name = "\x01?border_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_color: *mut nsICSSProperty; + #[link_name = "\x01?border_image@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_image: *mut nsICSSProperty; + #[link_name = "\x01?border_image_outset@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_image_outset: *mut nsICSSProperty; + #[link_name = "\x01?border_image_repeat@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_image_repeat: *mut nsICSSProperty; + #[link_name = "\x01?border_image_slice@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_image_slice: *mut nsICSSProperty; + #[link_name = "\x01?border_image_source@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_image_source: *mut nsICSSProperty; + #[link_name = "\x01?border_image_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_image_width: *mut nsICSSProperty; + #[link_name = "\x01?border_inline_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_inline_end: *mut nsICSSProperty; + #[link_name = "\x01?border_inline_end_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_inline_end_color: *mut nsICSSProperty; + #[link_name = "\x01?border_inline_end_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_inline_end_style: *mut nsICSSProperty; + #[link_name = "\x01?border_inline_end_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_inline_end_width: *mut nsICSSProperty; + #[link_name = "\x01?border_inline_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_inline_start: *mut nsICSSProperty; + #[link_name = "\x01?border_inline_start_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_inline_start_color: *mut nsICSSProperty; + #[link_name = "\x01?border_inline_start_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_inline_start_style: *mut nsICSSProperty; + #[link_name = "\x01?border_inline_start_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_inline_start_width: *mut nsICSSProperty; + #[link_name = "\x01?border_left@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_left: *mut nsICSSProperty; + #[link_name = "\x01?border_left_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_left_color: *mut nsICSSProperty; + #[link_name = "\x01?border_left_colors@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_left_colors: *mut nsICSSProperty; + #[link_name = "\x01?border_left_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_left_style: *mut nsICSSProperty; + #[link_name = "\x01?border_left_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_left_width: *mut nsICSSProperty; + #[link_name = "\x01?border_radius@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_radius: *mut nsICSSProperty; + #[link_name = "\x01?border_right@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_right: *mut nsICSSProperty; + #[link_name = "\x01?border_right_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_right_color: *mut nsICSSProperty; + #[link_name = "\x01?border_right_colors@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_right_colors: *mut nsICSSProperty; + #[link_name = "\x01?border_right_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_right_style: *mut nsICSSProperty; + #[link_name = "\x01?border_right_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_right_width: *mut nsICSSProperty; + #[link_name = "\x01?border_spacing@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_spacing: *mut nsICSSProperty; + #[link_name = "\x01?border_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_style: *mut nsICSSProperty; + #[link_name = "\x01?border_top@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_top: *mut nsICSSProperty; + #[link_name = "\x01?border_top_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_top_color: *mut nsICSSProperty; + #[link_name = "\x01?border_top_colors@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_top_colors: *mut nsICSSProperty; + #[link_name = "\x01?border_top_left_radius@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_top_left_radius: *mut nsICSSProperty; + #[link_name = "\x01?border_top_right_radius@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_top_right_radius: *mut nsICSSProperty; + #[link_name = "\x01?border_top_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_top_style: *mut nsICSSProperty; + #[link_name = "\x01?border_top_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_top_width: *mut nsICSSProperty; + #[link_name = "\x01?border_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_border_width: *mut nsICSSProperty; + #[link_name = "\x01?bottom@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_bottom: *mut nsICSSProperty; + #[link_name = "\x01?box_align@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_align: *mut nsICSSProperty; + #[link_name = "\x01?box_decoration_break@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_decoration_break: *mut nsICSSProperty; + #[link_name = "\x01?box_direction@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_direction: *mut nsICSSProperty; + #[link_name = "\x01?box_flex@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_flex: *mut nsICSSProperty; + #[link_name = "\x01?box_ordinal_group@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_ordinal_group: *mut nsICSSProperty; + #[link_name = "\x01?box_orient@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_orient: *mut nsICSSProperty; + #[link_name = "\x01?box_pack@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_pack: *mut nsICSSProperty; + #[link_name = "\x01?box_shadow@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_shadow: *mut nsICSSProperty; + #[link_name = "\x01?box_sizing@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_box_sizing: *mut nsICSSProperty; + #[link_name = "\x01?caption_side@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_caption_side: *mut nsICSSProperty; + #[link_name = "\x01?clear@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_clear: *mut nsICSSProperty; + #[link_name = "\x01?clip@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_clip: *mut nsICSSProperty; + #[link_name = "\x01?clip_path@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_clip_path: *mut nsICSSProperty; + #[link_name = "\x01?clip_rule@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_clip_rule: *mut nsICSSProperty; + #[link_name = "\x01?color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_color: *mut nsICSSProperty; + #[link_name = "\x01?color_adjust@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_color_adjust: *mut nsICSSProperty; + #[link_name = "\x01?color_interpolation@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_color_interpolation: *mut nsICSSProperty; + #[link_name = "\x01?color_interpolation_filters@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_color_interpolation_filters: *mut nsICSSProperty; + #[link_name = "\x01?column_count@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_column_count: *mut nsICSSProperty; + #[link_name = "\x01?column_fill@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_column_fill: *mut nsICSSProperty; + #[link_name = "\x01?column_gap@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_column_gap: *mut nsICSSProperty; + #[link_name = "\x01?column_rule@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_column_rule: *mut nsICSSProperty; + #[link_name = "\x01?column_rule_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_column_rule_color: *mut nsICSSProperty; + #[link_name = "\x01?column_rule_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_column_rule_style: *mut nsICSSProperty; + #[link_name = "\x01?column_rule_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_column_rule_width: *mut nsICSSProperty; + #[link_name = "\x01?column_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_column_width: *mut nsICSSProperty; + #[link_name = "\x01?columns@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_columns: *mut nsICSSProperty; + #[link_name = "\x01?contain@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_contain: *mut nsICSSProperty; + #[link_name = "\x01?content@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_content: *mut nsICSSProperty; + #[link_name = "\x01?_moz_control_character_visibility@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_control_character_visibility: *mut nsICSSProperty; + #[link_name = "\x01?counter_increment@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_counter_increment: *mut nsICSSProperty; + #[link_name = "\x01?counter_reset@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_counter_reset: *mut nsICSSProperty; + #[link_name = "\x01?cursor@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_cursor: *mut nsICSSProperty; + #[link_name = "\x01?direction@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_direction: *mut nsICSSProperty; + #[link_name = "\x01?display@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_display: *mut nsICSSProperty; + #[link_name = "\x01?dominant_baseline@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_dominant_baseline: *mut nsICSSProperty; + #[link_name = "\x01?empty_cells@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_empty_cells: *mut nsICSSProperty; + #[link_name = "\x01?fill@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_fill: *mut nsICSSProperty; + #[link_name = "\x01?fill_opacity@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_fill_opacity: *mut nsICSSProperty; + #[link_name = "\x01?fill_rule@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_fill_rule: *mut nsICSSProperty; + #[link_name = "\x01?filter@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_filter: *mut nsICSSProperty; + #[link_name = "\x01?flex@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flex: *mut nsICSSProperty; + #[link_name = "\x01?flex_basis@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flex_basis: *mut nsICSSProperty; + #[link_name = "\x01?flex_direction@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flex_direction: *mut nsICSSProperty; + #[link_name = "\x01?flex_flow@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flex_flow: *mut nsICSSProperty; + #[link_name = "\x01?flex_grow@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flex_grow: *mut nsICSSProperty; + #[link_name = "\x01?flex_shrink@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flex_shrink: *mut nsICSSProperty; + #[link_name = "\x01?flex_wrap@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flex_wrap: *mut nsICSSProperty; + #[link_name = "\x01?float_@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_float_: *mut nsICSSProperty; + #[link_name = "\x01?float_edge@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_float_edge: *mut nsICSSProperty; + #[link_name = "\x01?flood_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flood_color: *mut nsICSSProperty; + #[link_name = "\x01?flood_opacity@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_flood_opacity: *mut nsICSSProperty; + #[link_name = "\x01?font@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font: *mut nsICSSProperty; + #[link_name = "\x01?font_family@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_family: *mut nsICSSProperty; + #[link_name = "\x01?font_feature_settings@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_feature_settings: *mut nsICSSProperty; + #[link_name = "\x01?font_kerning@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_kerning: *mut nsICSSProperty; + #[link_name = "\x01?font_language_override@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_language_override: *mut nsICSSProperty; + #[link_name = "\x01?font_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_size: *mut nsICSSProperty; + #[link_name = "\x01?font_size_adjust@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_size_adjust: *mut nsICSSProperty; + #[link_name = "\x01?font_stretch@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_stretch: *mut nsICSSProperty; + #[link_name = "\x01?font_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_style: *mut nsICSSProperty; + #[link_name = "\x01?font_synthesis@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_synthesis: *mut nsICSSProperty; + #[link_name = "\x01?font_variant@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_variant: *mut nsICSSProperty; + #[link_name = "\x01?font_variant_alternates@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_variant_alternates: *mut nsICSSProperty; + #[link_name = "\x01?font_variant_caps@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_variant_caps: *mut nsICSSProperty; + #[link_name = "\x01?font_variant_east_asian@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_variant_east_asian: *mut nsICSSProperty; + #[link_name = "\x01?font_variant_ligatures@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_variant_ligatures: *mut nsICSSProperty; + #[link_name = "\x01?font_variant_numeric@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_variant_numeric: *mut nsICSSProperty; + #[link_name = "\x01?font_variant_position@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_variant_position: *mut nsICSSProperty; + #[link_name = "\x01?font_weight@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_font_weight: *mut nsICSSProperty; + #[link_name = "\x01?force_broken_image_icon@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_force_broken_image_icon: *mut nsICSSProperty; + #[link_name = "\x01?grid@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid: *mut nsICSSProperty; + #[link_name = "\x01?grid_area@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_area: *mut nsICSSProperty; + #[link_name = "\x01?grid_auto_columns@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_auto_columns: *mut nsICSSProperty; + #[link_name = "\x01?grid_auto_flow@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_auto_flow: *mut nsICSSProperty; + #[link_name = "\x01?grid_auto_rows@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_auto_rows: *mut nsICSSProperty; + #[link_name = "\x01?grid_column@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_column: *mut nsICSSProperty; + #[link_name = "\x01?grid_column_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_column_end: *mut nsICSSProperty; + #[link_name = "\x01?grid_column_gap@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_column_gap: *mut nsICSSProperty; + #[link_name = "\x01?grid_column_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_column_start: *mut nsICSSProperty; + #[link_name = "\x01?grid_gap@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_gap: *mut nsICSSProperty; + #[link_name = "\x01?grid_row@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_row: *mut nsICSSProperty; + #[link_name = "\x01?grid_row_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_row_end: *mut nsICSSProperty; + #[link_name = "\x01?grid_row_gap@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_row_gap: *mut nsICSSProperty; + #[link_name = "\x01?grid_row_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_row_start: *mut nsICSSProperty; + #[link_name = "\x01?grid_template@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_template: *mut nsICSSProperty; + #[link_name = "\x01?grid_template_areas@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_template_areas: *mut nsICSSProperty; + #[link_name = "\x01?grid_template_columns@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_template_columns: *mut nsICSSProperty; + #[link_name = "\x01?grid_template_rows@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_grid_template_rows: *mut nsICSSProperty; + #[link_name = "\x01?height@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_height: *mut nsICSSProperty; + #[link_name = "\x01?hyphens@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_hyphens: *mut nsICSSProperty; + #[link_name = "\x01?initial_letter@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_initial_letter: *mut nsICSSProperty; + #[link_name = "\x01?image_orientation@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_image_orientation: *mut nsICSSProperty; + #[link_name = "\x01?image_region@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_image_region: *mut nsICSSProperty; + #[link_name = "\x01?image_rendering@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_image_rendering: *mut nsICSSProperty; + #[link_name = "\x01?ime_mode@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_ime_mode: *mut nsICSSProperty; + #[link_name = "\x01?inline_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_inline_size: *mut nsICSSProperty; + #[link_name = "\x01?isolation@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_isolation: *mut nsICSSProperty; + #[link_name = "\x01?justify_content@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_justify_content: *mut nsICSSProperty; + #[link_name = "\x01?justify_items@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_justify_items: *mut nsICSSProperty; + #[link_name = "\x01?justify_self@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_justify_self: *mut nsICSSProperty; + #[link_name = "\x01?_x_lang@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__x_lang: *mut nsICSSProperty; + #[link_name = "\x01?left@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_left: *mut nsICSSProperty; + #[link_name = "\x01?letter_spacing@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_letter_spacing: *mut nsICSSProperty; + #[link_name = "\x01?lighting_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_lighting_color: *mut nsICSSProperty; + #[link_name = "\x01?line_height@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_line_height: *mut nsICSSProperty; + #[link_name = "\x01?list_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_list_style: *mut nsICSSProperty; + #[link_name = "\x01?list_style_image@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_list_style_image: *mut nsICSSProperty; + #[link_name = "\x01?list_style_position@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_list_style_position: *mut nsICSSProperty; + #[link_name = "\x01?list_style_type@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_list_style_type: *mut nsICSSProperty; + #[link_name = "\x01?margin@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin: *mut nsICSSProperty; + #[link_name = "\x01?margin_block_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin_block_end: *mut nsICSSProperty; + #[link_name = "\x01?margin_block_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin_block_start: *mut nsICSSProperty; + #[link_name = "\x01?margin_bottom@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin_bottom: *mut nsICSSProperty; + #[link_name = "\x01?margin_inline_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin_inline_end: *mut nsICSSProperty; + #[link_name = "\x01?margin_inline_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin_inline_start: *mut nsICSSProperty; + #[link_name = "\x01?margin_left@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin_left: *mut nsICSSProperty; + #[link_name = "\x01?margin_right@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin_right: *mut nsICSSProperty; + #[link_name = "\x01?margin_top@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_margin_top: *mut nsICSSProperty; + #[link_name = "\x01?marker@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_marker: *mut nsICSSProperty; + #[link_name = "\x01?marker_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_marker_end: *mut nsICSSProperty; + #[link_name = "\x01?marker_mid@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_marker_mid: *mut nsICSSProperty; + #[link_name = "\x01?marker_offset@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_marker_offset: *mut nsICSSProperty; + #[link_name = "\x01?marker_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_marker_start: *mut nsICSSProperty; + #[link_name = "\x01?mask@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask: *mut nsICSSProperty; + #[link_name = "\x01?mask_clip@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_clip: *mut nsICSSProperty; + #[link_name = "\x01?mask_composite@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_composite: *mut nsICSSProperty; + #[link_name = "\x01?mask_image@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_image: *mut nsICSSProperty; + #[link_name = "\x01?mask_mode@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_mode: *mut nsICSSProperty; + #[link_name = "\x01?mask_origin@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_origin: *mut nsICSSProperty; + #[link_name = "\x01?mask_position@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_position: *mut nsICSSProperty; + #[link_name = "\x01?mask_position_x@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_position_x: *mut nsICSSProperty; + #[link_name = "\x01?mask_position_y@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_position_y: *mut nsICSSProperty; + #[link_name = "\x01?mask_repeat@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_repeat: *mut nsICSSProperty; + #[link_name = "\x01?mask_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_size: *mut nsICSSProperty; + #[link_name = "\x01?mask_type@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mask_type: *mut nsICSSProperty; + #[link_name = "\x01?math_display@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_math_display: *mut nsICSSProperty; + #[link_name = "\x01?math_variant@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_math_variant: *mut nsICSSProperty; + #[link_name = "\x01?max_block_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_max_block_size: *mut nsICSSProperty; + #[link_name = "\x01?max_height@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_max_height: *mut nsICSSProperty; + #[link_name = "\x01?max_inline_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_max_inline_size: *mut nsICSSProperty; + #[link_name = "\x01?max_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_max_width: *mut nsICSSProperty; + #[link_name = "\x01?min_block_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_min_block_size: *mut nsICSSProperty; + #[link_name = "\x01?_moz_min_font_size_ratio@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_min_font_size_ratio: *mut nsICSSProperty; + #[link_name = "\x01?min_height@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_min_height: *mut nsICSSProperty; + #[link_name = "\x01?min_inline_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_min_inline_size: *mut nsICSSProperty; + #[link_name = "\x01?min_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_min_width: *mut nsICSSProperty; + #[link_name = "\x01?mix_blend_mode@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_mix_blend_mode: *mut nsICSSProperty; + #[link_name = "\x01?object_fit@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_object_fit: *mut nsICSSProperty; + #[link_name = "\x01?object_position@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_object_position: *mut nsICSSProperty; + #[link_name = "\x01?offset_block_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_offset_block_end: *mut nsICSSProperty; + #[link_name = "\x01?offset_block_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_offset_block_start: *mut nsICSSProperty; + #[link_name = "\x01?offset_inline_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_offset_inline_end: *mut nsICSSProperty; + #[link_name = "\x01?offset_inline_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_offset_inline_start: *mut nsICSSProperty; + #[link_name = "\x01?opacity@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_opacity: *mut nsICSSProperty; + #[link_name = "\x01?order@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_order: *mut nsICSSProperty; + #[link_name = "\x01?orient@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_orient: *mut nsICSSProperty; + #[link_name = "\x01?osx_font_smoothing@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_osx_font_smoothing: *mut nsICSSProperty; + #[link_name = "\x01?outline@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_outline: *mut nsICSSProperty; + #[link_name = "\x01?outline_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_outline_color: *mut nsICSSProperty; + #[link_name = "\x01?outline_offset@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_outline_offset: *mut nsICSSProperty; + #[link_name = "\x01?_moz_outline_radius@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_outline_radius: *mut nsICSSProperty; + #[link_name = "\x01?_moz_outline_radius_bottomLeft@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_outline_radius_bottomLeft: *mut nsICSSProperty; + #[link_name = "\x01?_moz_outline_radius_bottomRight@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_outline_radius_bottomRight: *mut nsICSSProperty; + #[link_name = "\x01?_moz_outline_radius_topLeft@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_outline_radius_topLeft: *mut nsICSSProperty; + #[link_name = "\x01?_moz_outline_radius_topRight@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_outline_radius_topRight: *mut nsICSSProperty; + #[link_name = "\x01?outline_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_outline_style: *mut nsICSSProperty; + #[link_name = "\x01?outline_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_outline_width: *mut nsICSSProperty; + #[link_name = "\x01?overflow@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_overflow: *mut nsICSSProperty; + #[link_name = "\x01?overflow_clip_box@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_overflow_clip_box: *mut nsICSSProperty; + #[link_name = "\x01?overflow_x@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_overflow_x: *mut nsICSSProperty; + #[link_name = "\x01?overflow_y@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_overflow_y: *mut nsICSSProperty; + #[link_name = "\x01?padding@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding: *mut nsICSSProperty; + #[link_name = "\x01?padding_block_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding_block_end: *mut nsICSSProperty; + #[link_name = "\x01?padding_block_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding_block_start: *mut nsICSSProperty; + #[link_name = "\x01?padding_bottom@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding_bottom: *mut nsICSSProperty; + #[link_name = "\x01?padding_inline_end@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding_inline_end: *mut nsICSSProperty; + #[link_name = "\x01?padding_inline_start@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding_inline_start: *mut nsICSSProperty; + #[link_name = "\x01?padding_left@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding_left: *mut nsICSSProperty; + #[link_name = "\x01?padding_right@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding_right: *mut nsICSSProperty; + #[link_name = "\x01?padding_top@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_padding_top: *mut nsICSSProperty; + #[link_name = "\x01?page_break_after@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_page_break_after: *mut nsICSSProperty; + #[link_name = "\x01?page_break_before@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_page_break_before: *mut nsICSSProperty; + #[link_name = "\x01?page_break_inside@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_page_break_inside: *mut nsICSSProperty; + #[link_name = "\x01?paint_order@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_paint_order: *mut nsICSSProperty; + #[link_name = "\x01?perspective@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_perspective: *mut nsICSSProperty; + #[link_name = "\x01?perspective_origin@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_perspective_origin: *mut nsICSSProperty; + #[link_name = "\x01?pointer_events@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_pointer_events: *mut nsICSSProperty; + #[link_name = "\x01?position@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_position: *mut nsICSSProperty; + #[link_name = "\x01?quotes@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_quotes: *mut nsICSSProperty; + #[link_name = "\x01?resize@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_resize: *mut nsICSSProperty; + #[link_name = "\x01?right@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_right: *mut nsICSSProperty; + #[link_name = "\x01?ruby_align@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_ruby_align: *mut nsICSSProperty; + #[link_name = "\x01?ruby_position@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_ruby_position: *mut nsICSSProperty; + #[link_name = "\x01?script_level@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_script_level: *mut nsICSSProperty; + #[link_name = "\x01?script_min_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_script_min_size: *mut nsICSSProperty; + #[link_name = "\x01?script_size_multiplier@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_script_size_multiplier: *mut nsICSSProperty; + #[link_name = "\x01?scroll_behavior@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_scroll_behavior: *mut nsICSSProperty; + #[link_name = "\x01?scroll_snap_coordinate@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_scroll_snap_coordinate: *mut nsICSSProperty; + #[link_name = "\x01?scroll_snap_destination@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_scroll_snap_destination: *mut nsICSSProperty; + #[link_name = "\x01?scroll_snap_points_x@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_scroll_snap_points_x: *mut nsICSSProperty; + #[link_name = "\x01?scroll_snap_points_y@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_scroll_snap_points_y: *mut nsICSSProperty; + #[link_name = "\x01?scroll_snap_type@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_scroll_snap_type: *mut nsICSSProperty; + #[link_name = "\x01?scroll_snap_type_x@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_scroll_snap_type_x: *mut nsICSSProperty; + #[link_name = "\x01?scroll_snap_type_y@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_scroll_snap_type_y: *mut nsICSSProperty; + #[link_name = "\x01?shape_outside@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_shape_outside: *mut nsICSSProperty; + #[link_name = "\x01?shape_rendering@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_shape_rendering: *mut nsICSSProperty; + #[link_name = "\x01?_x_span@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__x_span: *mut nsICSSProperty; + #[link_name = "\x01?stack_sizing@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stack_sizing: *mut nsICSSProperty; + #[link_name = "\x01?stop_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stop_color: *mut nsICSSProperty; + #[link_name = "\x01?stop_opacity@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stop_opacity: *mut nsICSSProperty; + #[link_name = "\x01?stroke@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stroke: *mut nsICSSProperty; + #[link_name = "\x01?stroke_dasharray@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stroke_dasharray: *mut nsICSSProperty; + #[link_name = "\x01?stroke_dashoffset@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stroke_dashoffset: *mut nsICSSProperty; + #[link_name = "\x01?stroke_linecap@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stroke_linecap: *mut nsICSSProperty; + #[link_name = "\x01?stroke_linejoin@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stroke_linejoin: *mut nsICSSProperty; + #[link_name = "\x01?stroke_miterlimit@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stroke_miterlimit: *mut nsICSSProperty; + #[link_name = "\x01?stroke_opacity@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stroke_opacity: *mut nsICSSProperty; + #[link_name = "\x01?stroke_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_stroke_width: *mut nsICSSProperty; + #[link_name = "\x01?_x_system_font@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__x_system_font: *mut nsICSSProperty; + #[link_name = "\x01?_moz_tab_size@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_tab_size: *mut nsICSSProperty; + #[link_name = "\x01?table_layout@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_table_layout: *mut nsICSSProperty; + #[link_name = "\x01?text_align@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_align: *mut nsICSSProperty; + #[link_name = "\x01?text_align_last@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_align_last: *mut nsICSSProperty; + #[link_name = "\x01?text_anchor@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_anchor: *mut nsICSSProperty; + #[link_name = "\x01?text_combine_upright@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_combine_upright: *mut nsICSSProperty; + #[link_name = "\x01?text_decoration@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_decoration: *mut nsICSSProperty; + #[link_name = "\x01?text_decoration_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_decoration_color: *mut nsICSSProperty; + #[link_name = "\x01?text_decoration_line@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_decoration_line: *mut nsICSSProperty; + #[link_name = "\x01?text_decoration_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_decoration_style: *mut nsICSSProperty; + #[link_name = "\x01?text_emphasis@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_emphasis: *mut nsICSSProperty; + #[link_name = "\x01?text_emphasis_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_emphasis_color: *mut nsICSSProperty; + #[link_name = "\x01?text_emphasis_position@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_emphasis_position: *mut nsICSSProperty; + #[link_name = "\x01?text_emphasis_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_emphasis_style: *mut nsICSSProperty; + #[link_name = "\x01?_webkit_text_fill_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__webkit_text_fill_color: *mut nsICSSProperty; + #[link_name = "\x01?text_indent@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_indent: *mut nsICSSProperty; + #[link_name = "\x01?text_orientation@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_orientation: *mut nsICSSProperty; + #[link_name = "\x01?text_overflow@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_overflow: *mut nsICSSProperty; + #[link_name = "\x01?text_rendering@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_rendering: *mut nsICSSProperty; + #[link_name = "\x01?text_shadow@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_shadow: *mut nsICSSProperty; + #[link_name = "\x01?text_size_adjust@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_size_adjust: *mut nsICSSProperty; + #[link_name = "\x01?_webkit_text_stroke@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__webkit_text_stroke: *mut nsICSSProperty; + #[link_name = "\x01?_webkit_text_stroke_color@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__webkit_text_stroke_color: *mut nsICSSProperty; + #[link_name = "\x01?_webkit_text_stroke_width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__webkit_text_stroke_width: *mut nsICSSProperty; + #[link_name = "\x01?text_transform@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_text_transform: *mut nsICSSProperty; + #[link_name = "\x01?_x_text_zoom@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__x_text_zoom: *mut nsICSSProperty; + #[link_name = "\x01?top@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_top: *mut nsICSSProperty; + #[link_name = "\x01?_moz_top_layer@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_top_layer: *mut nsICSSProperty; + #[link_name = "\x01?touch_action@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_touch_action: *mut nsICSSProperty; + #[link_name = "\x01?transform@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transform: *mut nsICSSProperty; + #[link_name = "\x01?_moz_transform@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_transform: *mut nsICSSProperty; + #[link_name = "\x01?transform_box@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transform_box: *mut nsICSSProperty; + #[link_name = "\x01?transform_origin@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transform_origin: *mut nsICSSProperty; + #[link_name = "\x01?transform_style@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transform_style: *mut nsICSSProperty; + #[link_name = "\x01?transition@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transition: *mut nsICSSProperty; + #[link_name = "\x01?transition_delay@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transition_delay: *mut nsICSSProperty; + #[link_name = "\x01?transition_duration@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transition_duration: *mut nsICSSProperty; + #[link_name = "\x01?transition_property@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transition_property: *mut nsICSSProperty; + #[link_name = "\x01?transition_timing_function@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_transition_timing_function: *mut nsICSSProperty; + #[link_name = "\x01?unicode_bidi@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_unicode_bidi: *mut nsICSSProperty; + #[link_name = "\x01?user_focus@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_user_focus: *mut nsICSSProperty; + #[link_name = "\x01?user_input@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_user_input: *mut nsICSSProperty; + #[link_name = "\x01?user_modify@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_user_modify: *mut nsICSSProperty; + #[link_name = "\x01?user_select@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_user_select: *mut nsICSSProperty; + #[link_name = "\x01?vector_effect@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_vector_effect: *mut nsICSSProperty; + #[link_name = "\x01?vertical_align@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_vertical_align: *mut nsICSSProperty; + #[link_name = "\x01?visibility@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_visibility: *mut nsICSSProperty; + #[link_name = "\x01?white_space@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_white_space: *mut nsICSSProperty; + #[link_name = "\x01?width@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_width: *mut nsICSSProperty; + #[link_name = "\x01?will_change@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_will_change: *mut nsICSSProperty; + #[link_name = "\x01?_moz_window_dragging@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_window_dragging: *mut nsICSSProperty; + #[link_name = "\x01?_moz_window_shadow@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps__moz_window_shadow: *mut nsICSSProperty; + #[link_name = "\x01?word_break@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_word_break: *mut nsICSSProperty; + #[link_name = "\x01?word_spacing@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_word_spacing: *mut nsICSSProperty; + #[link_name = "\x01?overflow_wrap@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_overflow_wrap: *mut nsICSSProperty; + #[link_name = "\x01?writing_mode@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_writing_mode: *mut nsICSSProperty; + #[link_name = "\x01?z_index@nsCSSProps@@2PAVnsICSSProperty@@A"] + pub static nsCSSProps_z_index: *mut nsICSSProperty; } } } @@ -19672,4 +21834,724 @@ macro_rules! atom { { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSAnonBoxes_mozSVGForeignContent as *mut _) } }; (":-moz-svg-text") => { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSAnonBoxes_mozSVGText as *mut _) } }; +("align-content") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_align_content as *mut _) } }; +("align-items") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_align_items as *mut _) } }; +("align-self") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_align_self as *mut _) } }; +("all") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_all as *mut _) } }; +("animation") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation as *mut _) } }; +("animation-delay") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation_delay as *mut _) } }; +("animation-direction") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation_direction as *mut _) } }; +("animation-duration") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation_duration as *mut _) } }; +("animation-fill-mode") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation_fill_mode as *mut _) } }; +("animation-iteration-count") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation_iteration_count as *mut _) } }; +("animation-name") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation_name as *mut _) } }; +("animation-play-state") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation_play_state as *mut _) } }; +("animation-timing-function") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_animation_timing_function as *mut _) } }; +("-moz-appearance") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_appearance as *mut _) } }; +("backface-visibility") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_backface_visibility as *mut _) } }; +("background") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background as *mut _) } }; +("background-attachment") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_attachment as *mut _) } }; +("background-blend-mode") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_blend_mode as *mut _) } }; +("background-clip") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_clip as *mut _) } }; +("background-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_color as *mut _) } }; +("background-image") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_image as *mut _) } }; +("background-origin") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_origin as *mut _) } }; +("background-position") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_position as *mut _) } }; +("background-position-x") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_position_x as *mut _) } }; +("background-position-y") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_position_y as *mut _) } }; +("background-repeat") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_repeat as *mut _) } }; +("background-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_background_size as *mut _) } }; +("-moz-binding") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_binding as *mut _) } }; +("block-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_block_size as *mut _) } }; +("border") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border as *mut _) } }; +("border-block-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_block_end as *mut _) } }; +("border-block-end-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_block_end_color as *mut _) } }; +("border-block-end-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_block_end_style as *mut _) } }; +("border-block-end-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_block_end_width as *mut _) } }; +("border-block-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_block_start as *mut _) } }; +("border-block-start-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_block_start_color as *mut _) } }; +("border-block-start-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_block_start_style as *mut _) } }; +("border-block-start-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_block_start_width as *mut _) } }; +("border-bottom") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_bottom as *mut _) } }; +("border-bottom-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_bottom_color as *mut _) } }; +("-moz-border-bottom-colors") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_bottom_colors as *mut _) } }; +("border-bottom-left-radius") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_bottom_left_radius as *mut _) } }; +("border-bottom-right-radius") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_bottom_right_radius as *mut _) } }; +("border-bottom-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_bottom_style as *mut _) } }; +("border-bottom-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_bottom_width as *mut _) } }; +("border-collapse") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_collapse as *mut _) } }; +("border-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_color as *mut _) } }; +("border-image") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_image as *mut _) } }; +("border-image-outset") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_image_outset as *mut _) } }; +("border-image-repeat") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_image_repeat as *mut _) } }; +("border-image-slice") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_image_slice as *mut _) } }; +("border-image-source") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_image_source as *mut _) } }; +("border-image-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_image_width as *mut _) } }; +("border-inline-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_inline_end as *mut _) } }; +("border-inline-end-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_inline_end_color as *mut _) } }; +("border-inline-end-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_inline_end_style as *mut _) } }; +("border-inline-end-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_inline_end_width as *mut _) } }; +("border-inline-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_inline_start as *mut _) } }; +("border-inline-start-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_inline_start_color as *mut _) } }; +("border-inline-start-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_inline_start_style as *mut _) } }; +("border-inline-start-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_inline_start_width as *mut _) } }; +("border-left") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_left as *mut _) } }; +("border-left-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_left_color as *mut _) } }; +("-moz-border-left-colors") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_left_colors as *mut _) } }; +("border-left-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_left_style as *mut _) } }; +("border-left-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_left_width as *mut _) } }; +("border-radius") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_radius as *mut _) } }; +("border-right") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_right as *mut _) } }; +("border-right-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_right_color as *mut _) } }; +("-moz-border-right-colors") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_right_colors as *mut _) } }; +("border-right-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_right_style as *mut _) } }; +("border-right-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_right_width as *mut _) } }; +("border-spacing") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_spacing as *mut _) } }; +("border-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_style as *mut _) } }; +("border-top") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_top as *mut _) } }; +("border-top-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_top_color as *mut _) } }; +("-moz-border-top-colors") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_top_colors as *mut _) } }; +("border-top-left-radius") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_top_left_radius as *mut _) } }; +("border-top-right-radius") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_top_right_radius as *mut _) } }; +("border-top-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_top_style as *mut _) } }; +("border-top-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_top_width as *mut _) } }; +("border-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_border_width as *mut _) } }; +("bottom") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_bottom as *mut _) } }; +("-moz-box-align") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_align as *mut _) } }; +("box-decoration-break") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_decoration_break as *mut _) } }; +("-moz-box-direction") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_direction as *mut _) } }; +("-moz-box-flex") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_flex as *mut _) } }; +("-moz-box-ordinal-group") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_ordinal_group as *mut _) } }; +("-moz-box-orient") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_orient as *mut _) } }; +("-moz-box-pack") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_pack as *mut _) } }; +("box-shadow") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_shadow as *mut _) } }; +("box-sizing") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_box_sizing as *mut _) } }; +("caption-side") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_caption_side as *mut _) } }; +("clear") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_clear as *mut _) } }; +("clip") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_clip as *mut _) } }; +("clip-path") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_clip_path as *mut _) } }; +("clip-rule") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_clip_rule as *mut _) } }; +("color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_color as *mut _) } }; +("color-adjust") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_color_adjust as *mut _) } }; +("color-interpolation") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_color_interpolation as *mut _) } }; +("color-interpolation-filters") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_color_interpolation_filters as *mut _) } }; +("column-count") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_column_count as *mut _) } }; +("column-fill") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_column_fill as *mut _) } }; +("column-gap") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_column_gap as *mut _) } }; +("column-rule") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_column_rule as *mut _) } }; +("column-rule-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_column_rule_color as *mut _) } }; +("column-rule-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_column_rule_style as *mut _) } }; +("column-rule-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_column_rule_width as *mut _) } }; +("column-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_column_width as *mut _) } }; +("columns") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_columns as *mut _) } }; +("contain") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_contain as *mut _) } }; +("content") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_content as *mut _) } }; +("-moz-control-character-visibility") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_control_character_visibility as *mut _) } }; +("counter-increment") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_counter_increment as *mut _) } }; +("counter-reset") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_counter_reset as *mut _) } }; +("cursor") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_cursor as *mut _) } }; +("direction") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_direction as *mut _) } }; +("display") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_display as *mut _) } }; +("dominant-baseline") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_dominant_baseline as *mut _) } }; +("empty-cells") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_empty_cells as *mut _) } }; +("fill") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_fill as *mut _) } }; +("fill-opacity") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_fill_opacity as *mut _) } }; +("fill-rule") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_fill_rule as *mut _) } }; +("filter") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_filter as *mut _) } }; +("flex") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flex as *mut _) } }; +("flex-basis") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flex_basis as *mut _) } }; +("flex-direction") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flex_direction as *mut _) } }; +("flex-flow") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flex_flow as *mut _) } }; +("flex-grow") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flex_grow as *mut _) } }; +("flex-shrink") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flex_shrink as *mut _) } }; +("flex-wrap") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flex_wrap as *mut _) } }; +("float") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_float_ as *mut _) } }; +("-moz-float-edge") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_float_edge as *mut _) } }; +("flood-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flood_color as *mut _) } }; +("flood-opacity") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_flood_opacity as *mut _) } }; +("font") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font as *mut _) } }; +("font-family") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_family as *mut _) } }; +("font-feature-settings") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_feature_settings as *mut _) } }; +("font-kerning") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_kerning as *mut _) } }; +("font-language-override") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_language_override as *mut _) } }; +("font-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_size as *mut _) } }; +("font-size-adjust") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_size_adjust as *mut _) } }; +("font-stretch") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_stretch as *mut _) } }; +("font-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_style as *mut _) } }; +("font-synthesis") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_synthesis as *mut _) } }; +("font-variant") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_variant as *mut _) } }; +("font-variant-alternates") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_variant_alternates as *mut _) } }; +("font-variant-caps") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_variant_caps as *mut _) } }; +("font-variant-east-asian") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_variant_east_asian as *mut _) } }; +("font-variant-ligatures") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_variant_ligatures as *mut _) } }; +("font-variant-numeric") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_variant_numeric as *mut _) } }; +("font-variant-position") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_variant_position as *mut _) } }; +("font-weight") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_font_weight as *mut _) } }; +("-moz-force-broken-image-icon") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_force_broken_image_icon as *mut _) } }; +("grid") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid as *mut _) } }; +("grid-area") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_area as *mut _) } }; +("grid-auto-columns") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_auto_columns as *mut _) } }; +("grid-auto-flow") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_auto_flow as *mut _) } }; +("grid-auto-rows") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_auto_rows as *mut _) } }; +("grid-column") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_column as *mut _) } }; +("grid-column-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_column_end as *mut _) } }; +("grid-column-gap") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_column_gap as *mut _) } }; +("grid-column-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_column_start as *mut _) } }; +("grid-gap") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_gap as *mut _) } }; +("grid-row") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_row as *mut _) } }; +("grid-row-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_row_end as *mut _) } }; +("grid-row-gap") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_row_gap as *mut _) } }; +("grid-row-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_row_start as *mut _) } }; +("grid-template") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_template as *mut _) } }; +("grid-template-areas") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_template_areas as *mut _) } }; +("grid-template-columns") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_template_columns as *mut _) } }; +("grid-template-rows") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_grid_template_rows as *mut _) } }; +("height") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_height as *mut _) } }; +("hyphens") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_hyphens as *mut _) } }; +("initial-letter") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_initial_letter as *mut _) } }; +("image-orientation") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_image_orientation as *mut _) } }; +("-moz-image-region") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_image_region as *mut _) } }; +("image-rendering") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_image_rendering as *mut _) } }; +("ime-mode") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_ime_mode as *mut _) } }; +("inline-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_inline_size as *mut _) } }; +("isolation") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_isolation as *mut _) } }; +("justify-content") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_justify_content as *mut _) } }; +("justify-items") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_justify_items as *mut _) } }; +("justify-self") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_justify_self as *mut _) } }; +("-x-lang") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__x_lang as *mut _) } }; +("left") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_left as *mut _) } }; +("letter-spacing") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_letter_spacing as *mut _) } }; +("lighting-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_lighting_color as *mut _) } }; +("line-height") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_line_height as *mut _) } }; +("list-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_list_style as *mut _) } }; +("list-style-image") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_list_style_image as *mut _) } }; +("list-style-position") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_list_style_position as *mut _) } }; +("list-style-type") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_list_style_type as *mut _) } }; +("margin") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin as *mut _) } }; +("margin-block-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin_block_end as *mut _) } }; +("margin-block-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin_block_start as *mut _) } }; +("margin-bottom") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin_bottom as *mut _) } }; +("margin-inline-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin_inline_end as *mut _) } }; +("margin-inline-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin_inline_start as *mut _) } }; +("margin-left") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin_left as *mut _) } }; +("margin-right") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin_right as *mut _) } }; +("margin-top") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_margin_top as *mut _) } }; +("marker") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_marker as *mut _) } }; +("marker-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_marker_end as *mut _) } }; +("marker-mid") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_marker_mid as *mut _) } }; +("marker-offset") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_marker_offset as *mut _) } }; +("marker-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_marker_start as *mut _) } }; +("mask") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask as *mut _) } }; +("mask-clip") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_clip as *mut _) } }; +("mask-composite") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_composite as *mut _) } }; +("mask-image") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_image as *mut _) } }; +("mask-mode") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_mode as *mut _) } }; +("mask-origin") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_origin as *mut _) } }; +("mask-position") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_position as *mut _) } }; +("mask-position-x") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_position_x as *mut _) } }; +("mask-position-y") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_position_y as *mut _) } }; +("mask-repeat") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_repeat as *mut _) } }; +("mask-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_size as *mut _) } }; +("mask-type") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mask_type as *mut _) } }; +("-moz-math-display") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_math_display as *mut _) } }; +("-moz-math-variant") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_math_variant as *mut _) } }; +("max-block-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_max_block_size as *mut _) } }; +("max-height") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_max_height as *mut _) } }; +("max-inline-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_max_inline_size as *mut _) } }; +("max-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_max_width as *mut _) } }; +("min-block-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_min_block_size as *mut _) } }; +("-moz-min-font-size-ratio") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_min_font_size_ratio as *mut _) } }; +("min-height") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_min_height as *mut _) } }; +("min-inline-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_min_inline_size as *mut _) } }; +("min-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_min_width as *mut _) } }; +("mix-blend-mode") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_mix_blend_mode as *mut _) } }; +("object-fit") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_object_fit as *mut _) } }; +("object-position") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_object_position as *mut _) } }; +("offset-block-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_offset_block_end as *mut _) } }; +("offset-block-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_offset_block_start as *mut _) } }; +("offset-inline-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_offset_inline_end as *mut _) } }; +("offset-inline-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_offset_inline_start as *mut _) } }; +("opacity") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_opacity as *mut _) } }; +("order") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_order as *mut _) } }; +("-moz-orient") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_orient as *mut _) } }; +("-moz-osx-font-smoothing") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_osx_font_smoothing as *mut _) } }; +("outline") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_outline as *mut _) } }; +("outline-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_outline_color as *mut _) } }; +("outline-offset") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_outline_offset as *mut _) } }; +("-moz-outline-radius") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_outline_radius as *mut _) } }; +("-moz-outline-radius-bottomleft") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_outline_radius_bottomLeft as *mut _) } }; +("-moz-outline-radius-bottomright") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_outline_radius_bottomRight as *mut _) } }; +("-moz-outline-radius-topleft") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_outline_radius_topLeft as *mut _) } }; +("-moz-outline-radius-topright") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_outline_radius_topRight as *mut _) } }; +("outline-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_outline_style as *mut _) } }; +("outline-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_outline_width as *mut _) } }; +("overflow") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_overflow as *mut _) } }; +("overflow-clip-box") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_overflow_clip_box as *mut _) } }; +("overflow-x") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_overflow_x as *mut _) } }; +("overflow-y") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_overflow_y as *mut _) } }; +("padding") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding as *mut _) } }; +("padding-block-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding_block_end as *mut _) } }; +("padding-block-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding_block_start as *mut _) } }; +("padding-bottom") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding_bottom as *mut _) } }; +("padding-inline-end") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding_inline_end as *mut _) } }; +("padding-inline-start") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding_inline_start as *mut _) } }; +("padding-left") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding_left as *mut _) } }; +("padding-right") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding_right as *mut _) } }; +("padding-top") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_padding_top as *mut _) } }; +("page-break-after") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_page_break_after as *mut _) } }; +("page-break-before") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_page_break_before as *mut _) } }; +("page-break-inside") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_page_break_inside as *mut _) } }; +("paint-order") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_paint_order as *mut _) } }; +("perspective") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_perspective as *mut _) } }; +("perspective-origin") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_perspective_origin as *mut _) } }; +("pointer-events") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_pointer_events as *mut _) } }; +("position") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_position as *mut _) } }; +("quotes") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_quotes as *mut _) } }; +("resize") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_resize as *mut _) } }; +("right") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_right as *mut _) } }; +("ruby-align") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_ruby_align as *mut _) } }; +("ruby-position") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_ruby_position as *mut _) } }; +("-moz-script-level") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_script_level as *mut _) } }; +("-moz-script-min-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_script_min_size as *mut _) } }; +("-moz-script-size-multiplier") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_script_size_multiplier as *mut _) } }; +("scroll-behavior") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_scroll_behavior as *mut _) } }; +("scroll-snap-coordinate") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_scroll_snap_coordinate as *mut _) } }; +("scroll-snap-destination") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_scroll_snap_destination as *mut _) } }; +("scroll-snap-points-x") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_scroll_snap_points_x as *mut _) } }; +("scroll-snap-points-y") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_scroll_snap_points_y as *mut _) } }; +("scroll-snap-type") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_scroll_snap_type as *mut _) } }; +("scroll-snap-type-x") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_scroll_snap_type_x as *mut _) } }; +("scroll-snap-type-y") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_scroll_snap_type_y as *mut _) } }; +("shape-outside") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_shape_outside as *mut _) } }; +("shape-rendering") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_shape_rendering as *mut _) } }; +("-x-span") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__x_span as *mut _) } }; +("-moz-stack-sizing") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stack_sizing as *mut _) } }; +("stop-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stop_color as *mut _) } }; +("stop-opacity") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stop_opacity as *mut _) } }; +("stroke") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stroke as *mut _) } }; +("stroke-dasharray") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stroke_dasharray as *mut _) } }; +("stroke-dashoffset") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stroke_dashoffset as *mut _) } }; +("stroke-linecap") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stroke_linecap as *mut _) } }; +("stroke-linejoin") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stroke_linejoin as *mut _) } }; +("stroke-miterlimit") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stroke_miterlimit as *mut _) } }; +("stroke-opacity") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stroke_opacity as *mut _) } }; +("stroke-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_stroke_width as *mut _) } }; +("-x-system-font") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__x_system_font as *mut _) } }; +("-moz-tab-size") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_tab_size as *mut _) } }; +("table-layout") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_table_layout as *mut _) } }; +("text-align") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_align as *mut _) } }; +("text-align-last") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_align_last as *mut _) } }; +("text-anchor") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_anchor as *mut _) } }; +("text-combine-upright") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_combine_upright as *mut _) } }; +("text-decoration") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_decoration as *mut _) } }; +("text-decoration-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_decoration_color as *mut _) } }; +("text-decoration-line") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_decoration_line as *mut _) } }; +("text-decoration-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_decoration_style as *mut _) } }; +("text-emphasis") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_emphasis as *mut _) } }; +("text-emphasis-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_emphasis_color as *mut _) } }; +("text-emphasis-position") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_emphasis_position as *mut _) } }; +("text-emphasis-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_emphasis_style as *mut _) } }; +("-webkit-text-fill-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__webkit_text_fill_color as *mut _) } }; +("text-indent") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_indent as *mut _) } }; +("text-orientation") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_orientation as *mut _) } }; +("text-overflow") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_overflow as *mut _) } }; +("text-rendering") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_rendering as *mut _) } }; +("text-shadow") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_shadow as *mut _) } }; +("-moz-text-size-adjust") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_size_adjust as *mut _) } }; +("-webkit-text-stroke") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__webkit_text_stroke as *mut _) } }; +("-webkit-text-stroke-color") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__webkit_text_stroke_color as *mut _) } }; +("-webkit-text-stroke-width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__webkit_text_stroke_width as *mut _) } }; +("text-transform") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_text_transform as *mut _) } }; +("-x-text-zoom") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__x_text_zoom as *mut _) } }; +("top") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_top as *mut _) } }; +("-moz-top-layer") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_top_layer as *mut _) } }; +("touch-action") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_touch_action as *mut _) } }; +("transform") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transform as *mut _) } }; +("-moz-transform") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_transform as *mut _) } }; +("transform-box") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transform_box as *mut _) } }; +("transform-origin") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transform_origin as *mut _) } }; +("transform-style") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transform_style as *mut _) } }; +("transition") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transition as *mut _) } }; +("transition-delay") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transition_delay as *mut _) } }; +("transition-duration") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transition_duration as *mut _) } }; +("transition-property") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transition_property as *mut _) } }; +("transition-timing-function") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_transition_timing_function as *mut _) } }; +("unicode-bidi") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_unicode_bidi as *mut _) } }; +("-moz-user-focus") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_user_focus as *mut _) } }; +("-moz-user-input") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_user_input as *mut _) } }; +("-moz-user-modify") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_user_modify as *mut _) } }; +("-moz-user-select") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_user_select as *mut _) } }; +("vector-effect") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_vector_effect as *mut _) } }; +("vertical-align") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_vertical_align as *mut _) } }; +("visibility") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_visibility as *mut _) } }; +("white-space") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_white_space as *mut _) } }; +("width") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_width as *mut _) } }; +("will-change") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_will_change as *mut _) } }; +("-moz-window-dragging") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_window_dragging as *mut _) } }; +("-moz-window-shadow") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps__moz_window_shadow as *mut _) } }; +("word-break") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_word_break as *mut _) } }; +("word-spacing") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_word_spacing as *mut _) } }; +("overflow-wrap") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_overflow_wrap as *mut _) } }; +("writing-mode") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_writing_mode as *mut _) } }; +("z-index") => + { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsCSSProps_z_index as *mut _) } }; } From f6d5dc7d08b187b5455c1396821751e59150776f Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Thu, 3 Nov 2016 15:02:25 +1100 Subject: [PATCH 06/26] Add binding function for cloning DeclarationBlock --- components/style/gecko_bindings/bindings.rs | 5 +++++ ports/geckolib/glue.rs | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index adeecc3925d..b3fa77ee974 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -927,6 +927,11 @@ extern "C" { pub fn Servo_DeclarationBlock_CreateEmpty() -> RawServoDeclarationBlockStrong; } +extern "C" { + pub fn Servo_DeclarationBlock_Clone(declarations: + RawServoDeclarationBlockBorrowed) + -> RawServoDeclarationBlockStrong; +} extern "C" { pub fn Servo_DeclarationBlock_Equals(a: RawServoDeclarationBlockBorrowed, b: RawServoDeclarationBlockBorrowed) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 4e3062faa0b..becd1ff7dc0 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -426,6 +426,13 @@ pub extern "C" fn Servo_DeclarationBlock_CreateEmpty() -> RawServoDeclarationBlo Arc::new(RwLock::new(PropertyDeclarationBlock { declarations: vec![], important_count: 0 })).into_strong() } +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_Clone(declarations: RawServoDeclarationBlockBorrowed) + -> RawServoDeclarationBlockStrong { + let declarations = RwLock::::as_arc(&declarations); + Arc::new(RwLock::new(declarations.read().clone())).into_strong() +} + #[no_mangle] pub extern "C" fn Servo_DeclarationBlock_AddRef(declarations: RawServoDeclarationBlockBorrowed) { unsafe { RwLock::::addref(declarations) }; From 9ef129295789bfc1741bbd3646739e38bd86e5f1 Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Thu, 3 Nov 2016 15:03:13 +1100 Subject: [PATCH 07/26] Add binding functions for getting/removing property --- components/style/gecko_bindings/bindings.rs | 22 ++++++++++++ ports/geckolib/glue.rs | 38 +++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index b3fa77ee974..e054a37eec9 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -960,6 +960,28 @@ extern "C" { *mut nsAString_internal) -> bool; } +extern "C" { + pub fn Servo_DeclarationBlock_GetPropertyValue(declarations: + RawServoDeclarationBlockBorrowed, + property: *mut nsIAtom, + is_custom: bool, + value: + *mut nsAString_internal); +} +extern "C" { + pub fn Servo_DeclarationBlock_GetPropertyIsImportant(declarations: + RawServoDeclarationBlockBorrowed, + property: + *mut nsIAtom, + is_custom: bool) + -> bool; +} +extern "C" { + pub fn Servo_DeclarationBlock_RemoveProperty(declarations: + RawServoDeclarationBlockBorrowed, + property: *mut nsIAtom, + is_custom: bool); +} extern "C" { pub fn Servo_CSSSupports(name: *const nsACString_internal, value: *const nsACString_internal) -> bool; diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index becd1ff7dc0..ce65420c6a9 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -508,6 +508,44 @@ pub extern "C" fn Servo_DeclarationBlock_GetNthProperty(declarations: RawServoDe } } +// FIXME Methods of PropertyDeclarationBlock should take atoms directly. +// This function is just a temporary workaround before that finishes. +fn get_property_name_from_atom(atom: *mut nsIAtom, is_custom: bool) -> String { + let atom = Atom::from(atom); + if !is_custom { + atom.to_string() + } else { + let mut result = String::with_capacity(atom.len() as usize + 2); + write!(result, "--{}", atom).unwrap(); + result + } +} + +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_GetPropertyValue(declarations: RawServoDeclarationBlockBorrowed, + property: *mut nsIAtom, is_custom: bool, + value: *mut nsAString) { + let declarations = RwLock::::as_arc(&declarations); + let property = get_property_name_from_atom(property, is_custom); + declarations.read().property_value_to_css(&property, unsafe { value.as_mut().unwrap() }).unwrap(); +} + +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_GetPropertyIsImportant(declarations: RawServoDeclarationBlockBorrowed, + property: *mut nsIAtom, is_custom: bool) -> bool { + let declarations = RwLock::::as_arc(&declarations); + let property = get_property_name_from_atom(property, is_custom); + declarations.read().property_priority(&property).important() +} + +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_RemoveProperty(declarations: RawServoDeclarationBlockBorrowed, + property: *mut nsIAtom, is_custom: bool) { + let declarations = RwLock::::as_arc(&declarations); + let property = get_property_name_from_atom(property, is_custom); + declarations.write().remove_property(&property); +} + #[no_mangle] pub extern "C" fn Servo_CSSSupports(property: *const nsACString, value: *const nsACString) -> bool { let property = unsafe { property.as_ref().unwrap().as_str_unchecked() }; From edec344b15fa1245f319d64b5ec0754322d83ff4 Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Thu, 3 Nov 2016 15:03:48 +1100 Subject: [PATCH 08/26] Add binding function for setting property --- components/style/gecko_bindings/bindings.rs | 8 ++++++++ ports/geckolib/glue.rs | 22 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index e054a37eec9..6611454dbdb 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -976,6 +976,14 @@ extern "C" { is_custom: bool) -> bool; } +extern "C" { + pub fn Servo_DeclarationBlock_SetProperty(declarations: + RawServoDeclarationBlockBorrowed, + property: *mut nsIAtom, + is_custom: bool, + value: *mut nsACString_internal, + is_important: bool) -> bool; +} extern "C" { pub fn Servo_DeclarationBlock_RemoveProperty(declarations: RawServoDeclarationBlockBorrowed, diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index ce65420c6a9..1e28edf114b 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -538,6 +538,28 @@ pub extern "C" fn Servo_DeclarationBlock_GetPropertyIsImportant(declarations: Ra declarations.read().property_priority(&property).important() } +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_SetProperty(declarations: RawServoDeclarationBlockBorrowed, + property: *mut nsIAtom, is_custom: bool, + value: *mut nsACString, is_important: bool) -> bool { + let property = get_property_name_from_atom(property, is_custom); + let value = unsafe { value.as_ref().unwrap().as_str_unchecked() }; + // FIXME Needs real URL and ParserContextExtraData. + let base_url = &*DUMMY_BASE_URL; + let extra_data = ParserContextExtraData::default(); + if let Ok(decls) = parse_one_declaration(&property, value, &base_url, + Box::new(StdoutErrorReporter), extra_data) { + let mut declarations = RwLock::::as_arc(&declarations).write(); + let importance = if is_important { Importance::Important } else { Importance::Normal }; + for decl in decls.into_iter() { + declarations.set_parsed_declaration(decl, importance); + } + true + } else { + false + } +} + #[no_mangle] pub extern "C" fn Servo_DeclarationBlock_RemoveProperty(declarations: RawServoDeclarationBlockBorrowed, property: *mut nsIAtom, is_custom: bool) { From 25d9d2b4ea84f4d2f7141df119a9d682a6e06cb8 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 17 May 2016 16:31:47 +0200 Subject: [PATCH 09/26] Add a missing newline. --- components/script/dom/bindings/codegen/CodegenRust.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 37d4eb0f892..246d155d1e0 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -6276,7 +6276,7 @@ class CGCallback(CGClass): }) bodyWithoutThis = string.Template( setupCall + - "rooted!(in(s.get_context()) let thisObjJS = ptr::null_mut());" + "rooted!(in(s.get_context()) let thisObjJS = ptr::null_mut());\n" "return ${methodName}(${callArgs});").substitute({ "callArgs": ", ".join(argnamesWithoutThis), "methodName": 'self.' + method.name, From 4d14f1eb67798ec13e7a8f45c5c59a3cc8433423 Mon Sep 17 00:00:00 2001 From: Olaf Buddenhagen Date: Wed, 2 Nov 2016 17:39:03 +0100 Subject: [PATCH 10/26] layout/context: Wrap `image_cache_thread` in a `Mutex<>` as well `SharedLayoutContext.image_cache_thread` didn't get the `Mutex<>` treatment along with all the other channels in there, because `ipc-channel::Sender` is presently inherently `Sync`. I believe this to be an implementation accident though, that should be rectified in the future -- not something users should actually rely on... Note that sharing senders (be it `mpsc` or `ipc-channel`) in is probably not a good idea anyway: just cloning them -- and letting them handle the sharing internally -- should be both simpler and cheaper. But right now that's how things are handled here; so let's go with the flow... --- components/layout/context.rs | 13 ++++++++----- components/layout_thread/lib.rs | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/components/layout/context.rs b/components/layout/context.rs index 17a484e2930..c2669755af9 100644 --- a/components/layout/context.rs +++ b/components/layout/context.rs @@ -76,7 +76,7 @@ pub struct SharedLayoutContext { pub style_context: SharedStyleContext, /// The shared image cache thread. - pub image_cache_thread: ImageCacheThread, + pub image_cache_thread: Mutex, /// A channel for the image cache to send responses to. pub image_cache_sender: Mutex, @@ -132,7 +132,8 @@ impl SharedLayoutContext { debug_assert!(opts::get().output_file.is_some() || opts::get().exit_after_load); // See if the image is already available - let result = self.image_cache_thread.find_image(url.clone(), use_placeholder); + let result = self.image_cache_thread.lock().unwrap() + .find_image(url.clone(), use_placeholder); match result { Ok(image) => return Some(image), @@ -146,7 +147,7 @@ impl SharedLayoutContext { // If we are emitting an output file, then we need to block on // image load or we risk emitting an output file missing the image. let (sync_tx, sync_rx) = ipc::channel().unwrap(); - self.image_cache_thread.request_image(url, ImageCacheChan(sync_tx), None); + self.image_cache_thread.lock().unwrap().request_image(url, ImageCacheChan(sync_tx), None); loop { match sync_rx.recv() { Err(_) => return None, @@ -170,7 +171,8 @@ impl SharedLayoutContext { .map(|img| ImageOrMetadataAvailable::ImageAvailable(img)); } // See if the image is already available - let result = self.image_cache_thread.find_image_or_metadata(url.clone(), + let result = self.image_cache_thread.lock().unwrap() + .find_image_or_metadata(url.clone(), use_placeholder); match result { Ok(image_or_metadata) => Some(image_or_metadata), @@ -179,7 +181,8 @@ impl SharedLayoutContext { // Not yet requested, async mode - request image or metadata from the cache Err(ImageState::NotRequested) => { let sender = self.image_cache_sender.lock().unwrap().clone(); - self.image_cache_thread.request_image_and_metadata(url, sender, None); + self.image_cache_thread.lock().unwrap() + .request_image_and_metadata(url, sender, None); None } // Image has been requested, is still pending. Return no image for this paint loop. diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index b531e035c68..69862255497 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -513,7 +513,7 @@ impl LayoutThread { local_context_creation_data: Mutex::new(local_style_context_creation_data), timer: self.timer.clone(), }, - image_cache_thread: self.image_cache_thread.clone(), + image_cache_thread: Mutex::new(self.image_cache_thread.clone()), image_cache_sender: Mutex::new(self.image_cache_sender.clone()), font_cache_thread: Mutex::new(self.font_cache_thread.clone()), webrender_image_cache: self.webrender_image_cache.clone(), From 4fbe415e8023538779dc9825e0da8fdc26f46c8f Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 3 Nov 2016 14:31:14 +0100 Subject: [PATCH 11/26] Split the bluetooth code out from the net crates. --- components/bluetooth/Cargo.toml | 21 ++++++++++++++ .../bluetooth_thread.rs => bluetooth/lib.rs} | 24 ++++++++++----- components/bluetooth_traits/Cargo.toml | 15 ++++++++++ .../lib.rs} | 10 ++++++- .../scanfilter.rs} | 0 components/constellation/Cargo.toml | 1 + components/constellation/constellation.rs | 2 +- components/constellation/lib.rs | 1 + components/constellation/pipeline.rs | 2 +- components/net/Cargo.toml | 2 -- components/net/lib.rs | 3 -- components/net_traits/lib.rs | 2 -- components/script/Cargo.toml | 1 + components/script/dom/bluetooth.rs | 6 ++-- .../dom/bluetoothremotegattcharacteristic.rs | 2 +- .../dom/bluetoothremotegattdescriptor.rs | 2 +- .../script/dom/bluetoothremotegattserver.rs | 2 +- .../script/dom/bluetoothremotegattservice.rs | 2 +- components/script/dom/window.rs | 2 +- components/script/lib.rs | 1 + components/script/script_thread.rs | 2 +- components/script_traits/Cargo.toml | 1 + components/script_traits/lib.rs | 3 +- components/servo/Cargo.lock | 29 +++++++++++++++++-- components/servo/Cargo.toml | 2 ++ components/servo/lib.rs | 6 ++-- docs/ORGANIZATION.md | 4 +++ ports/cef/Cargo.lock | 29 +++++++++++++++++-- 28 files changed, 143 insertions(+), 34 deletions(-) create mode 100644 components/bluetooth/Cargo.toml rename components/{net/bluetooth_thread.rs => bluetooth/lib.rs} (98%) create mode 100644 components/bluetooth_traits/Cargo.toml rename components/{net_traits/bluetooth_thread.rs => bluetooth_traits/lib.rs} (94%) rename components/{net_traits/bluetooth_scanfilter.rs => bluetooth_traits/scanfilter.rs} (100%) diff --git a/components/bluetooth/Cargo.toml b/components/bluetooth/Cargo.toml new file mode 100644 index 00000000000..e1ea441e267 --- /dev/null +++ b/components/bluetooth/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "bluetooth" +version = "0.0.1" +authors = ["The Servo Project Developers"] +license = "MPL-2.0" +publish = false + +[lib] +name = "bluetooth" +path = "lib.rs" + +[dependencies] +bitflags = "0.7" +bluetooth_traits = {path = "../bluetooth_traits"} +device = {git = "https://github.com/servo/devices"} +ipc-channel = "0.5" +rand = "0.3" +util = {path = "../util"} + +[target.'cfg(target_os = "linux")'.dependencies] +tinyfiledialogs = {git = "https://github.com/jdm/tinyfiledialogs"} diff --git a/components/net/bluetooth_thread.rs b/components/bluetooth/lib.rs similarity index 98% rename from components/net/bluetooth_thread.rs rename to components/bluetooth/lib.rs index bb71b27469b..12ba83244be 100644 --- a/components/net/bluetooth_thread.rs +++ b/components/bluetooth/lib.rs @@ -2,25 +2,33 @@ * 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/. */ +#[macro_use] +extern crate bitflags; +extern crate bluetooth_traits; +extern crate device; +extern crate ipc_channel; +extern crate rand; +#[cfg(target_os = "linux")] +extern crate tinyfiledialogs; +extern crate util; + +use bluetooth_traits::{BluetoothCharacteristicMsg, BluetoothCharacteristicsMsg}; +use bluetooth_traits::{BluetoothDescriptorMsg, BluetoothDescriptorsMsg}; +use bluetooth_traits::{BluetoothDeviceMsg, BluetoothError, BluetoothMethodMsg}; +use bluetooth_traits::{BluetoothResult, BluetoothServiceMsg, BluetoothServicesMsg}; +use bluetooth_traits::scanfilter::{BluetoothScanfilter, BluetoothScanfilterSequence, RequestDeviceoptions}; use device::bluetooth::BluetoothAdapter; use device::bluetooth::BluetoothDevice; use device::bluetooth::BluetoothGATTCharacteristic; use device::bluetooth::BluetoothGATTDescriptor; use device::bluetooth::BluetoothGATTService; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; -use net_traits::bluetooth_scanfilter::{BluetoothScanfilter, BluetoothScanfilterSequence, RequestDeviceoptions}; -use net_traits::bluetooth_thread::{BluetoothCharacteristicMsg, BluetoothCharacteristicsMsg}; -use net_traits::bluetooth_thread::{BluetoothDescriptorMsg, BluetoothDescriptorsMsg}; -use net_traits::bluetooth_thread::{BluetoothDeviceMsg, BluetoothError, BluetoothMethodMsg}; -use net_traits::bluetooth_thread::{BluetoothResult, BluetoothServiceMsg, BluetoothServicesMsg}; -use rand::{self, Rng}; +use rand::Rng; use std::borrow::ToOwned; use std::collections::{HashMap, HashSet}; use std::string::String; use std::thread; use std::time::Duration; -#[cfg(target_os = "linux")] -use tinyfiledialogs; use util::thread::spawn_named; const ADAPTER_ERROR: &'static str = "No adapter found"; diff --git a/components/bluetooth_traits/Cargo.toml b/components/bluetooth_traits/Cargo.toml new file mode 100644 index 00000000000..c562d679a38 --- /dev/null +++ b/components/bluetooth_traits/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "bluetooth_traits" +version = "0.0.1" +authors = ["The Servo Project Developers"] +license = "MPL-2.0" +publish = false + +[lib] +name = "bluetooth_traits" +path = "lib.rs" + +[dependencies] +ipc-channel = "0.5" +serde = "0.8" +serde_derive = "0.8" diff --git a/components/net_traits/bluetooth_thread.rs b/components/bluetooth_traits/lib.rs similarity index 94% rename from components/net_traits/bluetooth_thread.rs rename to components/bluetooth_traits/lib.rs index 48f64ff7474..dcff8cead91 100644 --- a/components/net_traits/bluetooth_thread.rs +++ b/components/bluetooth_traits/lib.rs @@ -2,8 +2,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use bluetooth_scanfilter::RequestDeviceoptions; +#![feature(proc_macro)] + +extern crate ipc_channel; +#[macro_use] +extern crate serde_derive; + +pub mod scanfilter; + use ipc_channel::ipc::IpcSender; +use scanfilter::RequestDeviceoptions; #[derive(Deserialize, Serialize)] pub enum BluetoothError { diff --git a/components/net_traits/bluetooth_scanfilter.rs b/components/bluetooth_traits/scanfilter.rs similarity index 100% rename from components/net_traits/bluetooth_scanfilter.rs rename to components/bluetooth_traits/scanfilter.rs diff --git a/components/constellation/Cargo.toml b/components/constellation/Cargo.toml index 6b3a864c88a..7ae0408d200 100644 --- a/components/constellation/Cargo.toml +++ b/components/constellation/Cargo.toml @@ -11,6 +11,7 @@ path = "lib.rs" [dependencies] backtrace = "0.2.1" +bluetooth_traits = { path = "../bluetooth_traits" } canvas = {path = "../canvas"} canvas_traits = {path = "../canvas_traits"} compositing = {path = "../compositing"} diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index 96e22709d24..eed55cf3b25 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -10,6 +10,7 @@ //! `LayoutThread`, and `PaintThread`. use backtrace::Backtrace; +use bluetooth_traits::BluetoothMethodMsg; use canvas::canvas_paint_thread::CanvasPaintThread; use canvas::webgl_paint_thread::WebGLPaintThread; use canvas_traits::CanvasMsg; @@ -29,7 +30,6 @@ use msg::constellation_msg::{FrameId, FrameType, PipelineId}; use msg::constellation_msg::{Key, KeyModifiers, KeyState}; use msg::constellation_msg::{PipelineNamespace, PipelineNamespaceId, TraversalDirection}; use net_traits::{self, IpcSend, ResourceThreads}; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use net_traits::image_cache_thread::ImageCacheThread; use net_traits::storage_thread::StorageThreadMsg; use offscreen_gl_context::{GLContextAttributes, GLLimits}; diff --git a/components/constellation/lib.rs b/components/constellation/lib.rs index fe3755ad88f..19b800baa19 100644 --- a/components/constellation/lib.rs +++ b/components/constellation/lib.rs @@ -11,6 +11,7 @@ #![deny(unsafe_code)] extern crate backtrace; +extern crate bluetooth_traits; extern crate canvas; extern crate canvas_traits; extern crate compositing; diff --git a/components/constellation/pipeline.rs b/components/constellation/pipeline.rs index 9dafef6c3e5..66de70a9737 100644 --- a/components/constellation/pipeline.rs +++ b/components/constellation/pipeline.rs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use bluetooth_traits::BluetoothMethodMsg; use compositing::CompositionPipeline; use compositing::CompositorProxy; use compositing::compositor_thread::Msg as CompositorMsg; @@ -17,7 +18,6 @@ use ipc_channel::router::ROUTER; use layout_traits::LayoutThreadFactory; use msg::constellation_msg::{FrameId, FrameType, PipelineId, PipelineNamespaceId}; use net_traits::{IpcSend, ResourceThreads}; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use net_traits::image_cache_thread::ImageCacheThread; use profile_traits::mem as profile_mem; use profile_traits::time; diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml index b4f1689efe5..ff1b99a1ddc 100644 --- a/components/net/Cargo.toml +++ b/components/net/Cargo.toml @@ -14,7 +14,6 @@ bitflags = "0.7" brotli = "1.0.6" content-blocker = "0.2.1" cookie = {version = "0.2.5", features = ["serialize-rustc"]} -device = {git = "https://github.com/servo/devices"} devtools_traits = {path = "../devtools_traits"} flate2 = "0.2.0" hyper = "0.9.9" @@ -32,7 +31,6 @@ openssl = "0.7.6" openssl-verify = "0.1" plugins = {path = "../plugins"} profile_traits = {path = "../profile_traits"} -rand = "0.3" rustc-serialize = "0.3" serde = "0.8" serde_derive = "0.8" diff --git a/components/net/lib.rs b/components/net/lib.rs index f830eb2befa..af2d2e9db8c 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -16,7 +16,6 @@ extern crate bitflags; extern crate brotli; extern crate content_blocker as content_blocker_parser; extern crate cookie as cookie_rs; -extern crate device; extern crate devtools_traits; extern crate flate2; extern crate hyper; @@ -34,7 +33,6 @@ extern crate net_traits; extern crate openssl; extern crate openssl_verify; extern crate profile_traits; -extern crate rand; extern crate rustc_serialize; #[macro_use] extern crate serde_derive; @@ -51,7 +49,6 @@ extern crate websocket; pub mod about_loader; pub mod blob_loader; -pub mod bluetooth_thread; pub mod chrome_loader; pub mod connector; pub mod content_blocker; diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index e45e7e481bf..ce6b3e8b524 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -51,8 +51,6 @@ use url::Url; use websocket::header; pub mod blob_url_store; -pub mod bluetooth_scanfilter; -pub mod bluetooth_thread; pub mod filemanager_thread; pub mod hosts; pub mod image_cache_thread; diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 577b00c088a..5914dd6b0c0 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -25,6 +25,7 @@ angle = {git = "https://github.com/servo/angle", branch = "servo"} app_units = "0.3" audio-video-metadata = "0.1.2" bitflags = "0.7" +bluetooth_traits = {path = "../bluetooth_traits"} canvas_traits = {path = "../canvas_traits"} caseless = "0.1.0" cookie = {version = "0.2.5", features = ["serialize-rustc"]} diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs index 863d75bfec4..b6f8544aeab 100644 --- a/components/script/dom/bluetooth.rs +++ b/components/script/dom/bluetooth.rs @@ -3,6 +3,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use bluetooth_blacklist::{Blacklist, uuid_is_blacklisted}; +use bluetooth_traits::{BluetoothError, BluetoothMethodMsg}; +use bluetooth_traits::scanfilter::{BluetoothScanfilter, BluetoothScanfilterSequence}; +use bluetooth_traits::scanfilter::{RequestDeviceoptions, ServiceUUIDSequence}; use core::clone::Clone; use dom::bindings::codegen::Bindings::BluetoothBinding::{self, BluetoothMethods, BluetoothRequestDeviceFilter}; use dom::bindings::codegen::Bindings::BluetoothBinding::RequestDeviceOptions; @@ -18,9 +21,6 @@ use dom::globalscope::GlobalScope; use dom::promise::Promise; use ipc_channel::ipc::{self, IpcSender}; use js::conversions::ToJSValConvertible; -use net_traits::bluetooth_scanfilter::{BluetoothScanfilter, BluetoothScanfilterSequence}; -use net_traits::bluetooth_scanfilter::{RequestDeviceoptions, ServiceUUIDSequence}; -use net_traits::bluetooth_thread::{BluetoothError, BluetoothMethodMsg}; use std::rc::Rc; const FILTER_EMPTY_ERROR: &'static str = "'filters' member, if present, must be nonempty to find any devices."; diff --git a/components/script/dom/bluetoothremotegattcharacteristic.rs b/components/script/dom/bluetoothremotegattcharacteristic.rs index 95b26ff66c1..0fae7548ede 100644 --- a/components/script/dom/bluetoothremotegattcharacteristic.rs +++ b/components/script/dom/bluetoothremotegattcharacteristic.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use bluetooth_blacklist::{Blacklist, uuid_is_blacklisted}; +use bluetooth_traits::BluetoothMethodMsg; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::BluetoothCharacteristicPropertiesBinding:: BluetoothCharacteristicPropertiesMethods; @@ -25,7 +26,6 @@ use dom::bluetoothuuid::{BluetoothDescriptorUUID, BluetoothUUID}; use dom::globalscope::GlobalScope; use dom::promise::Promise; use ipc_channel::ipc::{self, IpcSender}; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use std::rc::Rc; // Maximum length of an attribute value. diff --git a/components/script/dom/bluetoothremotegattdescriptor.rs b/components/script/dom/bluetoothremotegattdescriptor.rs index f066bb9d22a..5ca51f45439 100644 --- a/components/script/dom/bluetoothremotegattdescriptor.rs +++ b/components/script/dom/bluetoothremotegattdescriptor.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use bluetooth_blacklist::{Blacklist, uuid_is_blacklisted}; +use bluetooth_traits::BluetoothMethodMsg; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::BluetoothDeviceBinding::BluetoothDeviceMethods; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTCharacteristicBinding:: @@ -21,7 +22,6 @@ use dom::bluetoothremotegattcharacteristic::{BluetoothRemoteGATTCharacteristic, use dom::globalscope::GlobalScope; use dom::promise::Promise; use ipc_channel::ipc::{self, IpcSender}; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use std::rc::Rc; // http://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattdescriptor diff --git a/components/script/dom/bluetoothremotegattserver.rs b/components/script/dom/bluetoothremotegattserver.rs index fe19651ebf4..5e589fe07af 100644 --- a/components/script/dom/bluetoothremotegattserver.rs +++ b/components/script/dom/bluetoothremotegattserver.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use bluetooth_blacklist::{Blacklist, uuid_is_blacklisted}; +use bluetooth_traits::BluetoothMethodMsg; use dom::bindings::codegen::Bindings::BluetoothDeviceBinding::BluetoothDeviceMethods; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTServerBinding; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTServerBinding::BluetoothRemoteGATTServerMethods; @@ -18,7 +19,6 @@ use dom::bluetoothuuid::{BluetoothServiceUUID, BluetoothUUID}; use dom::globalscope::GlobalScope; use dom::promise::Promise; use ipc_channel::ipc::{self, IpcSender}; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use std::cell::Cell; use std::rc::Rc; diff --git a/components/script/dom/bluetoothremotegattservice.rs b/components/script/dom/bluetoothremotegattservice.rs index bce51131649..a4fc78c8d93 100644 --- a/components/script/dom/bluetoothremotegattservice.rs +++ b/components/script/dom/bluetoothremotegattservice.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use bluetooth_blacklist::{Blacklist, uuid_is_blacklisted}; +use bluetooth_traits::BluetoothMethodMsg; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTServiceBinding; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTServiceBinding::BluetoothRemoteGATTServiceMethods; use dom::bindings::error::Error::{self, Security}; @@ -18,7 +19,6 @@ use dom::bluetoothuuid::{BluetoothCharacteristicUUID, BluetoothServiceUUID, Blue use dom::globalscope::GlobalScope; use dom::promise::Promise; use ipc_channel::ipc::{self, IpcSender}; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use std::rc::Rc; // https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattservice diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 099e50f4820..2c083bc953c 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use app_units::Au; +use bluetooth_traits::BluetoothMethodMsg; use cssparser::Parser; use devtools_traits::{ScriptToDevtoolsControlMsg, TimelineMarker, TimelineMarkerType}; use dom::bindings::callback::ExceptionHandling; @@ -53,7 +54,6 @@ use js::jsval::UndefinedValue; use js::rust::Runtime; use msg::constellation_msg::{FrameType, PipelineId, ReferrerPolicy}; use net_traits::ResourceThreads; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread}; use net_traits::storage_thread::StorageType; use num_traits::ToPrimitive; diff --git a/components/script/lib.rs b/components/script/lib.rs index dd6299aa051..b9a8ddf5637 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -32,6 +32,7 @@ extern crate audio_video_metadata; #[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; +extern crate bluetooth_traits; extern crate canvas_traits; extern crate caseless; extern crate cookie as cookie_rs; diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index a028cd66ad5..7b60a6b8288 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -17,6 +17,7 @@ //! a page runs its course and the script thread returns to processing events in the main event //! loop. +use bluetooth_traits::BluetoothMethodMsg; use devtools; use devtools_traits::{DevtoolScriptControlMsg, DevtoolsPageInfo}; use devtools_traits::{ScriptToDevtoolsControlMsg, WorkerId}; @@ -73,7 +74,6 @@ use layout_wrapper::ServoLayoutNode; use mem::heap_size_of_self_and_children; use msg::constellation_msg::{FrameType, PipelineId, PipelineNamespace, ReferrerPolicy}; use net_traits::{CoreResourceMsg, IpcSend, Metadata, ResourceThreads}; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread}; use net_traits::request::{CredentialsMode, Destination, RequestInit}; use network_listener::NetworkListener; diff --git a/components/script_traits/Cargo.toml b/components/script_traits/Cargo.toml index 2b901f7c73d..b0e1669dd34 100644 --- a/components/script_traits/Cargo.toml +++ b/components/script_traits/Cargo.toml @@ -11,6 +11,7 @@ path = "lib.rs" [dependencies] app_units = "0.3" +bluetooth_traits = {path = "../bluetooth_traits"} canvas_traits = {path = "../canvas_traits"} cookie = {version = "0.2.5", features = ["serialize-rustc"]} devtools_traits = {path = "../devtools_traits"} diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index 2617f745dbd..b28a7118790 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -11,6 +11,7 @@ #![deny(missing_docs)] #![deny(unsafe_code)] +extern crate bluetooth_traits; extern crate canvas_traits; extern crate cookie as cookie_rs; extern crate devtools_traits; @@ -37,6 +38,7 @@ extern crate url; mod script_msg; pub mod webdriver_msg; +use bluetooth_traits::BluetoothMethodMsg; use devtools_traits::{DevtoolScriptControlMsg, ScriptToDevtoolsControlMsg, WorkerId}; use euclid::Size2D; use euclid::length::Length; @@ -55,7 +57,6 @@ use libc::c_void; use msg::constellation_msg::{FrameId, FrameType, Key, KeyModifiers, KeyState}; use msg::constellation_msg::{PipelineId, PipelineNamespaceId, ReferrerPolicy, TraversalDirection}; use net_traits::ResourceThreads; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use net_traits::image::base::Image; use net_traits::image_cache_thread::ImageCacheThread; use net_traits::response::HttpsState; diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 94a45baed82..cb797b4bf9c 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -4,6 +4,8 @@ version = "0.0.1" dependencies = [ "android_glue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth 0.0.1", + "bluetooth_traits 0.0.1", "browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)", "canvas 0.0.1", "canvas_traits 0.0.1", @@ -186,6 +188,28 @@ name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "bluetooth" +version = "0.0.1" +dependencies = [ + "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth_traits 0.0.1", + "device 0.0.1 (git+https://github.com/servo/devices)", + "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)", + "util 0.0.1", +] + +[[package]] +name = "bluetooth_traits" +version = "0.0.1" +dependencies = [ + "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "blurdroid" version = "0.1.1" @@ -345,6 +369,7 @@ name = "constellation" version = "0.0.1" dependencies = [ "backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth_traits 0.0.1", "canvas 0.0.1", "canvas_traits 0.0.1", "compositing 0.0.1", @@ -1419,7 +1444,6 @@ dependencies = [ "brotli 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "content-blocker 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "device 0.0.1 (git+https://github.com/servo/devices)", "devtools_traits 0.0.1", "flate2 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1437,7 +1461,6 @@ dependencies = [ "openssl-verify 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "profile_traits 0.0.1", - "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1963,6 +1986,7 @@ dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "audio-video-metadata 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth_traits 0.0.1", "canvas_traits 0.0.1", "caseless 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "cmake 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2061,6 +2085,7 @@ name = "script_traits" version = "0.0.1" dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth_traits 0.0.1", "canvas_traits 0.0.1", "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", diff --git a/components/servo/Cargo.toml b/components/servo/Cargo.toml index 1ae8de5dbc2..b58726a2551 100644 --- a/components/servo/Cargo.toml +++ b/components/servo/Cargo.toml @@ -46,6 +46,8 @@ util_tests = {path = "../../tests/unit/util"} [dependencies] backtrace = "0.2" +bluetooth_traits = {path = "../bluetooth_traits"} +bluetooth = {path = "../bluetooth"} browserhtml = {git = "https://github.com/browserhtml/browserhtml", branch = "crate"} canvas = {path = "../canvas"} canvas_traits = {path = "../canvas_traits"} diff --git a/components/servo/lib.rs b/components/servo/lib.rs index b715a9ebc35..a7ed6a04664 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -24,6 +24,8 @@ extern crate gaol; extern crate gleam; extern crate log; +pub extern crate bluetooth; +pub extern crate bluetooth_traits; pub extern crate canvas; pub extern crate canvas_traits; pub extern crate compositing; @@ -61,6 +63,8 @@ fn webdriver(port: u16, constellation: Sender) { #[cfg(not(feature = "webdriver"))] fn webdriver(_port: u16, _constellation: Sender) { } +use bluetooth::BluetoothThreadFactory; +use bluetooth_traits::BluetoothMethodMsg; use compositing::{CompositorProxy, IOCompositor}; use compositing::compositor_thread::InitialCompositorState; use compositing::windowing::WindowEvent; @@ -75,11 +79,9 @@ use gaol::sandbox::{ChildSandbox, ChildSandboxMethods}; use gfx::font_cache_thread::FontCacheThread; use ipc_channel::ipc::{self, IpcSender}; use log::{Log, LogMetadata, LogRecord}; -use net::bluetooth_thread::BluetoothThreadFactory; use net::image_cache_thread::new_image_cache_thread; use net::resource_thread::new_resource_threads; use net_traits::IpcSend; -use net_traits::bluetooth_thread::BluetoothMethodMsg; use profile::mem as profile_mem; use profile::time as profile_time; use profile_traits::mem; diff --git a/docs/ORGANIZATION.md b/docs/ORGANIZATION.md index e69d0903158..ba6d1a0b1eb 100644 --- a/docs/ORGANIZATION.md +++ b/docs/ORGANIZATION.md @@ -1,5 +1,9 @@ # Servo's directory structure: * components + * bluetooth + * Implementation the bluetooth thread. + * bluetooth_traits + * APIs to the bluetooth crate for crates that don't want to depend on the bluetooth crate for build speed reasons. * canvas * Implementation of painting threads for 2d and WebGL canvases. * canvas_traits diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index deb178707da..b58ae9e883b 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -159,6 +159,28 @@ name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "bluetooth" +version = "0.0.1" +dependencies = [ + "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth_traits 0.0.1", + "device 0.0.1 (git+https://github.com/servo/devices)", + "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)", + "util 0.0.1", +] + +[[package]] +name = "bluetooth_traits" +version = "0.0.1" +dependencies = [ + "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "blurdroid" version = "0.1.1" @@ -302,6 +324,7 @@ name = "constellation" version = "0.0.1" dependencies = [ "backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth_traits 0.0.1", "canvas 0.0.1", "canvas_traits 0.0.1", "compositing 0.0.1", @@ -1319,7 +1342,6 @@ dependencies = [ "brotli 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "content-blocker 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "device 0.0.1 (git+https://github.com/servo/devices)", "devtools_traits 0.0.1", "flate2 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1337,7 +1359,6 @@ dependencies = [ "openssl-verify 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "profile_traits 0.0.1", - "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1814,6 +1835,7 @@ dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "audio-video-metadata 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth_traits 0.0.1", "canvas_traits 0.0.1", "caseless 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "cmake 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1902,6 +1924,7 @@ name = "script_traits" version = "0.0.1" dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth_traits 0.0.1", "canvas_traits 0.0.1", "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", @@ -1992,6 +2015,8 @@ version = "0.0.1" dependencies = [ "android_glue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bluetooth 0.0.1", + "bluetooth_traits 0.0.1", "browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)", "canvas 0.0.1", "canvas_traits 0.0.1", From 1803a585e5eb388830efac7e80d582f2fa4eb652 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Fri, 28 Oct 2016 12:17:23 -0500 Subject: [PATCH 12/26] Check that an iframe is in a document with a browsing context before processing src. --- components/script/dom/htmliframeelement.rs | 24 ++++++++++++++++++---- components/script/dom/node.rs | 4 ++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 5215359df8a..2d9464df189 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -408,7 +408,7 @@ unsafe fn build_mozbrowser_event_detail(event: MozBrowserEvent, pub fn Navigate(iframe: &HTMLIFrameElement, direction: TraversalDirection) -> ErrorResult { if iframe.Mozbrowser() { - if iframe.upcast::().is_in_doc() { + if iframe.upcast::().is_in_doc_with_browsing_context() { let window = window_from_node(iframe); let msg = ConstellationMsg::TraverseHistory(iframe.pipeline_id(), direction); window.upcast::().constellation_chan().send(msg).unwrap(); @@ -494,7 +494,7 @@ impl HTMLIFrameElementMethods for HTMLIFrameElement { // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/reload fn Reload(&self, _hard_reload: bool) -> ErrorResult { if self.Mozbrowser() { - if self.upcast::().is_in_doc() { + if self.upcast::().is_in_doc_with_browsing_context() { self.navigate_or_reload_child_browsing_context(None, true); } Ok(()) @@ -592,7 +592,16 @@ impl VirtualMethods for HTMLIFrameElement { }, &atom!("src") => { if let AttributeMutation::Set(_) = mutation { - if self.upcast::().is_in_doc() { + // https://html.spec.whatwg.org/multipage/#the-iframe-element + // "Similarly, whenever an iframe element with a non-null nested browsing context + // but with no srcdoc attribute specified has its src attribute set, changed, or removed, + // the user agent must process the iframe attributes," + // but we can't check that directly, since the child browsing context + // may be in a different script thread. Instread, we check to see if the parent + // is in a document tree and has a browsing context, which is what causes + // the child browsing context to be created. + if self.upcast::().is_in_doc_with_browsing_context() { + debug!("iframe {} src set while in browsing context.", self.frame_id); self.process_the_iframe_attributes(); } } @@ -615,7 +624,14 @@ impl VirtualMethods for HTMLIFrameElement { s.bind_to_tree(tree_in_doc); } - if tree_in_doc { + // https://html.spec.whatwg.org/multipage/#the-iframe-element + // "When an iframe element is inserted into a document that has + // a browsing context, the user agent must create a new + // browsing context, set the element's nested browsing context + // to the newly-created browsing context, and then process the + // iframe attributes for the "first time"." + if self.upcast::().is_in_doc_with_browsing_context() { + debug!("iframe {} bound to browsing context.", self.frame_id); self.process_the_iframe_attributes(); } } diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 767a3132eb3..b46caec35e9 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -771,6 +771,10 @@ impl Node { self.owner_doc().is_html_document() } + pub fn is_in_doc_with_browsing_context(&self) -> bool { + self.is_in_doc() && self.owner_doc().browsing_context().is_some() + } + pub fn children(&self) -> NodeSiblingIterator { NodeSiblingIterator { current: self.GetFirstChild(), From b8c425e12f201b8b557f5eec54b119285ac3c58e Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 3 Nov 2016 14:15:47 -0400 Subject: [PATCH 13/26] Update wptrunner to b79dc999a4c1a3cc46f9db7476cf3cf38809c2b5. --- tests/wpt/harness/requirements_servo.txt | 1 - tests/wpt/harness/wptrunner/browsers/firefox.py | 1 + .../harness/wptrunner/testharnessreport-servo.js | 5 +++-- .../wpt/harness/wptrunner/wptmanifest/parser.py | 16 +++++++++++----- .../wptmanifest/tests/test_conditional.py | 3 --- .../wptrunner/wptmanifest/tests/test_static.py | 3 --- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/tests/wpt/harness/requirements_servo.txt b/tests/wpt/harness/requirements_servo.txt index 903c07f1b73..22bcfa123a5 100644 --- a/tests/wpt/harness/requirements_servo.txt +++ b/tests/wpt/harness/requirements_servo.txt @@ -1,2 +1 @@ mozprocess >= 0.19 - diff --git a/tests/wpt/harness/wptrunner/browsers/firefox.py b/tests/wpt/harness/wptrunner/browsers/firefox.py index a3c6f3f5753..ab75eb5ce50 100644 --- a/tests/wpt/harness/wptrunner/browsers/firefox.py +++ b/tests/wpt/harness/wptrunner/browsers/firefox.py @@ -130,6 +130,7 @@ class FirefoxBrowser(Browser): "marionette.defaultPrefs.port": self.marionette_port, "dom.disable_open_during_load": False, "network.dns.localDomains": ",".join(hostnames), + "network.proxy.type": 0, "places.history.enabled": False}) if self.e10s: self.profile.set_preferences({"browser.tabs.remote.autostart": True}) diff --git a/tests/wpt/harness/wptrunner/testharnessreport-servo.js b/tests/wpt/harness/wptrunner/testharnessreport-servo.js index 6464436c339..f5fda2c6614 100644 --- a/tests/wpt/harness/wptrunner/testharnessreport-servo.js +++ b/tests/wpt/harness/wptrunner/testharnessreport-servo.js @@ -3,11 +3,12 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var props = {output:%(output)d}; - +var start_loc = document.createElement('a'); +start_loc.href = location.href; setup(props); add_completion_callback(function (tests, harness_status) { - var id = location.pathname + location.search + location.hash; + var id = start_loc.pathname + start_loc.search + start_loc.hash; console.log("ALERT: RESULT: " + JSON.stringify([ id, harness_status.status, diff --git a/tests/wpt/harness/wptrunner/wptmanifest/parser.py b/tests/wpt/harness/wptrunner/wptmanifest/parser.py index eeac66d3180..f52deb9c124 100644 --- a/tests/wpt/harness/wptrunner/wptmanifest/parser.py +++ b/tests/wpt/harness/wptrunner/wptmanifest/parser.py @@ -16,6 +16,8 @@ # TODO: keep comments in the tree +from __future__ import unicode_literals + import types from cStringIO import StringIO @@ -48,8 +50,9 @@ atoms = {"True": True, "False": False, "Reset": object()} -def decode(byte_str): - return byte_str.decode("utf8") +def decode(s): + assert isinstance(s, unicode) + return s def precedence(operator_node): @@ -76,7 +79,8 @@ class Tokenizer(object): def tokenize(self, stream): self.reset() - if type(stream) in types.StringTypes: + assert not isinstance(stream, unicode) + if isinstance(stream, str): stream = StringIO(stream) if not hasattr(stream, "name"): self.filename = "" @@ -85,13 +89,15 @@ class Tokenizer(object): self.next_line_state = self.line_start_state for i, line in enumerate(stream): + assert isinstance(line, str) self.state = self.next_line_state assert self.state is not None states = [] self.next_line_state = None self.line_number = i + 1 self.index = 0 - self.line = line.rstrip() + self.line = line.decode('utf-8').rstrip() + assert isinstance(self.line, unicode) while self.state != self.eol_state: states.append(self.state) tokens = self.state() @@ -474,7 +480,7 @@ class Tokenizer(object): value += self.escape_value(c) self.consume() - return unichr(value).encode("utf8") + return unichr(value) def escape_value(self, c): if '0' <= c <= '9': diff --git a/tests/wpt/harness/wptrunner/wptmanifest/tests/test_conditional.py b/tests/wpt/harness/wptrunner/wptmanifest/tests/test_conditional.py index af18f4acc71..628e8a4c663 100644 --- a/tests/wpt/harness/wptrunner/wptmanifest/tests/test_conditional.py +++ b/tests/wpt/harness/wptrunner/wptmanifest/tests/test_conditional.py @@ -11,9 +11,6 @@ from ..node import BinaryExpressionNode, BinaryOperatorNode, VariableNode, Numbe class TestConditional(unittest.TestCase): - def parse(self, input_str): - return self.parser.parse(StringIO(input_str)) - def compile(self, input_text): return conditional.compile(input_text) diff --git a/tests/wpt/harness/wptrunner/wptmanifest/tests/test_static.py b/tests/wpt/harness/wptrunner/wptmanifest/tests/test_static.py index 5bd270d9f51..d28765edac9 100644 --- a/tests/wpt/harness/wptrunner/wptmanifest/tests/test_static.py +++ b/tests/wpt/harness/wptrunner/wptmanifest/tests/test_static.py @@ -13,9 +13,6 @@ from ..backends import static class TestStatic(unittest.TestCase): - def parse(self, input_str): - return self.parser.parse(StringIO(input_str)) - def compile(self, input_text, input_data): return static.compile(input_text, input_data) From fe6d53eb97d8520ba41605e4a091a4e03fdd6931 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 3 Nov 2016 10:12:27 -0400 Subject: [PATCH 14/26] Skip dependencyci checks for the charade module, which is out of our control. --- dependencyci.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 dependencyci.yml diff --git a/dependencyci.yml b/dependencyci.yml new file mode 100644 index 00000000000..85a48c67e31 --- /dev/null +++ b/dependencyci.yml @@ -0,0 +1,5 @@ +platforms: + pypi: + charade: + tests: + unmaintained: skip From c3b279a4c301609cd2f413fb9fd5222e6dd45014 Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Wed, 2 Nov 2016 22:44:51 -0400 Subject: [PATCH 15/26] Remove "fire a simple event" concept, refactor event firing API. "fire a simple event" concept was removed in https://github.com/whatwg/html/pull/1933. --- components/script/dom/document.rs | 2 +- components/script/dom/event.rs | 4 +- components/script/dom/eventtarget.rs | 41 ++++++++++++++----- components/script/dom/htmldetailselement.rs | 2 +- components/script/dom/htmlformelement.rs | 15 ++----- components/script/dom/htmliframeelement.rs | 2 +- components/script/dom/htmlimageelement.rs | 8 ++-- components/script/dom/htmlinputelement.rs | 16 ++------ components/script/dom/htmllinkelement.rs | 4 +- components/script/dom/mediaquerylist.rs | 2 +- components/script/dom/serviceworker.rs | 4 +- .../script/dom/serviceworkercontainer.rs | 2 +- .../script/dom/serviceworkerglobalscope.rs | 2 +- components/script/dom/websocket.rs | 4 +- components/script/dom/worker.rs | 2 +- 15 files changed, 58 insertions(+), 52 deletions(-) diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 2728bc757fb..3878a8f23ee 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -606,7 +606,7 @@ impl Document { self.ready_state.set(state); - self.upcast::().fire_simple_event("readystatechange"); + self.upcast::().fire_event("readystatechange"); } /// Return whether scripting is enabled or not diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs index f50d51dbb65..ca8d5c8c7ac 100644 --- a/components/script/dom/event.rs +++ b/components/script/dom/event.rs @@ -330,7 +330,7 @@ impl Runnable for EventRunnable { fn handler(self: Box) { let target = self.target.root(); - target.fire_event(&*self.name, self.bubbles, self.cancelable); + target.fire_event_with_params(&*self.name, self.bubbles, self.cancelable); } } @@ -345,6 +345,6 @@ impl Runnable for SimpleEventRunnable { fn handler(self: Box) { let target = self.target.root(); - target.fire_simple_event(&*self.name); + target.fire_event(&*self.name); } } diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 51452c0fc53..5c65ec195a8 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -490,21 +490,42 @@ impl EventTarget { !self.handlers.borrow().is_empty() } - // https://html.spec.whatwg.org/multipage/#fire-a-simple-event - pub fn fire_simple_event(&self, name: &str) -> Root { - self.fire_event(name, EventBubbles::DoesNotBubble, - EventCancelable::NotCancelable) + // https://dom.spec.whatwg.org/#concept-event-fire + pub fn fire_event(&self, name: &str) -> Root { + self.fire_event_with_params(name, + EventBubbles::DoesNotBubble, + EventCancelable::NotCancelable) } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_event(&self, name: &str, - bubbles: EventBubbles, - cancelable: EventCancelable) - -> Root { + pub fn fire_bubbling_event(&self, name: &str) -> Root { + self.fire_event_with_params(name, + EventBubbles::Bubbles, + EventCancelable::NotCancelable) + } + + // https://dom.spec.whatwg.org/#concept-event-fire + pub fn fire_cancelable_event(&self, name: &str) -> Root { + self.fire_event_with_params(name, + EventBubbles::DoesNotBubble, + EventCancelable::Cancelable) + } + + // https://dom.spec.whatwg.org/#concept-event-fire + pub fn fire_bubbling_cancelable_event(&self, name: &str) -> Root { + self.fire_event_with_params(name, + EventBubbles::Bubbles, + EventCancelable::Cancelable) + } + + // https://dom.spec.whatwg.org/#concept-event-fire + pub fn fire_event_with_params(&self, + name: &str, + bubbles: EventBubbles, + cancelable: EventCancelable) + -> Root { let event = Event::new(&self.global(), Atom::from(name), bubbles, cancelable); - event.fire(self); - event } } diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs index 93dfef33c7c..b829dc79ee9 100644 --- a/components/script/dom/htmldetailselement.rs +++ b/components/script/dom/htmldetailselement.rs @@ -94,7 +94,7 @@ impl Runnable for DetailsNotificationRunnable { fn handler(self: Box) { let target = self.element.root(); if target.check_toggle_count(self.toggle_number) { - target.upcast::().fire_simple_event("toggle"); + target.upcast::().fire_event("toggle"); } } } diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index fec0ec07946..8db261996b1 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -20,7 +20,6 @@ use dom::bindings::str::DOMString; use dom::blob::Blob; use dom::document::Document; use dom::element::Element; -use dom::event::{EventBubbles, EventCancelable}; use dom::eventtarget::EventTarget; use dom::file::File; use dom::globalscope::GlobalScope; @@ -305,16 +304,14 @@ impl HTMLFormElement { { if self.interactive_validation().is_err() { // TODO: Implement event handlers on all form control elements - self.upcast::().fire_simple_event("invalid"); + self.upcast::().fire_event("invalid"); return; } } // Step 5 if submit_method_flag == SubmittedFrom::NotFromForm { let event = self.upcast::() - .fire_event("submit", - EventBubbles::Bubbles, - EventCancelable::Cancelable); + .fire_bubbling_cancelable_event("submit"); if event.DefaultPrevented() { return; } @@ -484,9 +481,7 @@ impl HTMLFormElement { // Step 5-6 let unhandled_invalid_controls = invalid_controls.into_iter().filter_map(|field| { let event = field.as_event_target() - .fire_event("invalid", - EventBubbles::DoesNotBubble, - EventCancelable::Cancelable); + .fire_cancelable_event("invalid"); if !event.DefaultPrevented() { return Some(field); } None }).collect::>(); @@ -615,9 +610,7 @@ impl HTMLFormElement { } let event = self.upcast::() - .fire_event("reset", - EventBubbles::Bubbles, - EventCancelable::Cancelable); + .fire_bubbling_cancelable_event("reset"); if event.DefaultPrevented() { return; } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 73ef7c580d7..069765bb810 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -239,7 +239,7 @@ impl HTMLIFrameElement { // TODO Step 3 - set child document `mut iframe load` flag // Step 4 - self.upcast::().fire_simple_event("load"); + self.upcast::().fire_event("load"); let mut blocker = self.load_blocker.borrow_mut(); LoadBlocker::terminate(&mut blocker); diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 373e7ed8480..e5177b28730 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -105,12 +105,12 @@ impl Runnable for ImageResponseHandlerRunnable { // Fire image.onload if trigger_image_load { - element.upcast::().fire_simple_event("load"); + element.upcast::().fire_event("load"); } // Fire image.onerror if trigger_image_error { - element.upcast::().fire_simple_event("error"); + element.upcast::().fire_event("error"); } // Trigger reflow @@ -180,8 +180,8 @@ impl HTMLImageElement { // Step 11, substep 5 let img = self.img.root(); img.current_request.borrow_mut().source_url = Some(self.src.into()); - img.upcast::().fire_simple_event("error"); - img.upcast::().fire_simple_event("loadend"); + img.upcast::().fire_event("error"); + img.upcast::().fire_event("loadend"); } } diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index f4a9a726d30..ebbff4bc1ec 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -849,12 +849,8 @@ impl HTMLInputElement { let filelist = FileList::new(&window, files); self.filelist.set(Some(&filelist)); - target.fire_event("input", - EventBubbles::Bubbles, - EventCancelable::NotCancelable); - target.fire_event("change", - EventBubbles::Bubbles, - EventCancelable::NotCancelable); + target.fire_bubbling_event("input"); + target.fire_bubbling_event("change"); } } } @@ -1290,12 +1286,8 @@ impl Activatable for HTMLInputElement { // https://html.spec.whatwg.org/multipage/#radio-button-state-(type=radio):activation-behavior // Check if document owner is fully active let target = self.upcast::(); - target.fire_event("input", - EventBubbles::Bubbles, - EventCancelable::NotCancelable); - target.fire_event("change", - EventBubbles::Bubbles, - EventCancelable::NotCancelable); + target.fire_bubbling_event("input"); + target.fire_bubbling_event("change"); }, InputType::InputFile => self.select_files(None), _ => () diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index f4cd1ae0718..2312918c751 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -325,7 +325,7 @@ impl FetchResponseListener for StylesheetContext { if let Some(ref meta) = self.metadata { if let Some(Serde(ContentType(Mime(TopLevel::Text, SubLevel::Css, _)))) = meta.content_type { } else { - self.elem.root().upcast::().fire_simple_event("error"); + self.elem.root().upcast::().fire_event("error"); } } } @@ -382,7 +382,7 @@ impl FetchResponseListener for StylesheetContext { let event = if successful { "load" } else { "error" }; - elem.upcast::().fire_simple_event(event); + elem.upcast::().fire_event(event); } } diff --git a/components/script/dom/mediaquerylist.rs b/components/script/dom/mediaquerylist.rs index 30e510171b4..aef1c908e8a 100644 --- a/components/script/dom/mediaquerylist.rs +++ b/components/script/dom/mediaquerylist.rs @@ -142,7 +142,7 @@ impl WeakMediaQueryListVec { pub fn evaluate_and_report_changes(&self) { for mql in self.cell.borrow().iter() { if let MediaQueryListMatchState::Changed(_) = mql.root().unwrap().evaluate_changes() { - mql.root().unwrap().upcast::().fire_simple_event("change"); + mql.root().unwrap().upcast::().fire_event("change"); } } } diff --git a/components/script/dom/serviceworker.rs b/components/script/dom/serviceworker.rs index 8f3686f0b0c..2ff3d218cb3 100644 --- a/components/script/dom/serviceworker.rs +++ b/components/script/dom/serviceworker.rs @@ -56,12 +56,12 @@ impl ServiceWorker { pub fn dispatch_simple_error(address: TrustedServiceWorkerAddress) { let service_worker = address.root(); - service_worker.upcast().fire_simple_event("error"); + service_worker.upcast().fire_event("error"); } pub fn set_transition_state(&self, state: ServiceWorkerState) { self.state.set(state); - self.upcast::().fire_simple_event("statechange"); + self.upcast::().fire_event("statechange"); } pub fn get_script_url(&self) -> Url { diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs index a28440e5c42..6ad13fc317b 100644 --- a/components/script/dom/serviceworkercontainer.rs +++ b/components/script/dom/serviceworkercontainer.rs @@ -45,7 +45,7 @@ pub trait Controllable { impl Controllable for ServiceWorkerContainer { fn set_controller(&self, active_worker: &ServiceWorker) { self.controller.set(Some(active_worker)); - self.upcast::().fire_simple_event("controllerchange"); + self.upcast::().fire_event("controllerchange"); } } diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index 021e93399b8..b9c3fb483ad 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -268,7 +268,7 @@ impl ServiceWorkerGlobalScope { // TODO XXXcreativcoder This will eventually use a FetchEvent interface to fire event // when we have the Request and Response dom api's implemented // https://slightlyoff.github.io/ServiceWorker/spec/service_worker_1/index.html#fetch-event-section - self.upcast::().fire_simple_event("fetch"); + self.upcast::().fire_event("fetch"); let _ = mediator.response_chan.send(None); } } diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index 5914ff7ea89..c8999b52102 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -498,7 +498,7 @@ impl Runnable for ConnectionEstablishedTask { } // Step 6. - ws.upcast().fire_simple_event("open"); + ws.upcast().fire_event("open"); } } @@ -548,7 +548,7 @@ impl Runnable for CloseTask { // Step 2. if self.failed { - ws.upcast().fire_simple_event("error"); + ws.upcast().fire_event("error"); } // Step 3. diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 87cf1f3e55e..72f058c16f2 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -138,7 +138,7 @@ impl Worker { pub fn dispatch_simple_error(address: TrustedWorkerAddress) { let worker = address.root(); - worker.upcast().fire_simple_event("error"); + worker.upcast().fire_event("error"); } #[allow(unsafe_code)] From 80575c3d2e033e27bd4c222662e405f5714d1a4d Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Thu, 3 Nov 2016 15:46:00 -0400 Subject: [PATCH 16/26] Bump html5ever-atoms: 0.1.0 -> 0.1.1. https://github.com/servo/html5ever/pull/230 --- components/servo/Cargo.lock | 18 +++++++++--------- ports/cef/Cargo.lock | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index c2d56f2a254..59c55cd1ba3 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -971,7 +971,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -984,7 +984,7 @@ dependencies = [ [[package]] name = "html5ever-atoms" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1169,7 +1169,7 @@ dependencies = [ "gfx_traits 0.0.1", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1985,7 +1985,7 @@ dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)", "hyper_serde 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2041,7 +2041,7 @@ dependencies = [ "gfx_traits 0.0.1", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2337,7 +2337,7 @@ dependencies = [ "fnv 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2373,7 +2373,7 @@ dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2853,7 +2853,7 @@ name = "xml5ever" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2945,7 +2945,7 @@ dependencies = [ "checksum heartbeats-simple-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53c4b67617665d7f4172f381f9843c1bec6a4fccc9a9226529e5b1be40dc1301" "checksum hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d2da7d3a34cf6406d9d700111b8eafafe9a251de41ae71d8052748259343b58" "checksum html5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6a2e00f17a864dfee00d41b46fda2a669e10e96bf71f8c712b3c88f4977188d7" -"checksum html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "860439a63e39a4d3506b9cff6107fa238f89edf7aee41ca5a055acb301a556a3" +"checksum html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "daefa106438c66af58309c84842b5db1df2733fe35849f39adde6fdf63583d40" "checksum httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46534074dbb80b070d60a5cb8ecadd8963a00a438ae1a95268850a7ef73b67ae" "checksum hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)" = "eb27e8a3e8f17ac43ffa41bbda9cf5ad3f9f13ef66fa4873409d4902310275f7" "checksum hyper_serde 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "572d2168173019de312a050a24f2ad33ac2ac7895a2139fbf21ee6b6f470a24e" diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index 2ad2a845d5f..bf263059775 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -878,7 +878,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -891,7 +891,7 @@ dependencies = [ [[package]] name = "html5ever-atoms" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1076,7 +1076,7 @@ dependencies = [ "gfx_traits 0.0.1", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1836,7 +1836,7 @@ dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)", "hyper_serde 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1892,7 +1892,7 @@ dependencies = [ "gfx_traits 0.0.1", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2221,7 +2221,7 @@ dependencies = [ "fnv 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2711,7 +2711,7 @@ name = "xml5ever" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2797,7 +2797,7 @@ dependencies = [ "checksum heartbeats-simple-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53c4b67617665d7f4172f381f9843c1bec6a4fccc9a9226529e5b1be40dc1301" "checksum hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d2da7d3a34cf6406d9d700111b8eafafe9a251de41ae71d8052748259343b58" "checksum html5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6a2e00f17a864dfee00d41b46fda2a669e10e96bf71f8c712b3c88f4977188d7" -"checksum html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "860439a63e39a4d3506b9cff6107fa238f89edf7aee41ca5a055acb301a556a3" +"checksum html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "daefa106438c66af58309c84842b5db1df2733fe35849f39adde6fdf63583d40" "checksum httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46534074dbb80b070d60a5cb8ecadd8963a00a438ae1a95268850a7ef73b67ae" "checksum hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)" = "eb27e8a3e8f17ac43ffa41bbda9cf5ad3f9f13ef66fa4873409d4902310275f7" "checksum hyper_serde 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "572d2168173019de312a050a24f2ad33ac2ac7895a2139fbf21ee6b6f470a24e" From f3993d99b965cd0accb2eed77fb27dd1eb863848 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Fri, 7 Oct 2016 15:52:49 -0500 Subject: [PATCH 17/26] Lookup frames by frame_id, not pipeline_id. --- components/compositing/compositor.rs | 1 + components/constellation/constellation.rs | 160 +++++++++--------- components/constellation/pipeline.rs | 10 +- components/net/http_loader.rs | 2 +- components/script/document_loader.rs | 3 + components/script/dom/document.rs | 14 +- components/script/dom/htmliframeelement.rs | 5 + components/script/script_thread.rs | 90 +++++----- components/script_traits/lib.rs | 40 +++-- components/script_traits/script_msg.rs | 7 +- .../mozbrowserlocationchange_event.html | 4 +- .../location_reload-iframe.html | 2 +- .../location_reload.html | 13 +- 13 files changed, 187 insertions(+), 164 deletions(-) diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 55127bd64fe..dca6d253e56 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -739,6 +739,7 @@ impl IOCompositor { fn set_frame_tree(&mut self, frame_tree: &SendableFrameTree, response_chan: IpcSender<()>) { + debug!("Setting the frame tree for pipeline {}", frame_tree.pipeline.id); if let Err(e) = response_chan.send(()) { warn!("Sending reponse to set frame tree failed ({}).", e); } diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index 96e22709d24..a6de46ee0f6 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -668,13 +668,16 @@ impl Constellation // Create a new frame and update the internal bookkeeping. fn new_frame(&mut self, frame_id: FrameId, pipeline_id: PipelineId) { let frame = Frame::new(frame_id, pipeline_id); - - match self.pipelines.get_mut(&pipeline_id) { - Some(pipeline) => pipeline.is_mature = true, - None => return warn!("Pipeline {} matured after closure.", pipeline_id), - }; - self.frames.insert(frame_id, frame); + + // If a child frame, add it to the parent pipeline. + let parent_info = self.pipelines.get(&pipeline_id) + .and_then(|pipeline| pipeline.parent_info); + if let Some((parent_id, _)) = parent_info { + if let Some(parent) = self.pipelines.get_mut(&parent_id) { + parent.add_child(frame_id); + } + } } /// Handles loading pages, navigation, and granting access to the compositor @@ -777,6 +780,7 @@ impl Constellation } FromCompositorMsg::IsReadyToSaveImage(pipeline_states) => { let is_ready = self.handle_is_ready_to_save_image(pipeline_states); + debug!("Ready to save image {:?}.", is_ready); if opts::get().is_running_problem_test { println!("got ready to save image query, result is {:?}", is_ready); } @@ -1022,8 +1026,31 @@ impl Constellation self.shutting_down = true; // TODO: exit before the root frame is initialized? + debug!("Removing root frame."); let root_frame_id = self.root_frame_id; self.close_frame(root_frame_id, ExitPipelineMode::Normal); + + // Close any pending frames and pipelines + while let Some(pending) = self.pending_frames.pop() { + debug!("Removing pending frame {}.", pending.frame_id); + self.close_frame(pending.frame_id, ExitPipelineMode::Normal); + debug!("Removing pending pipeline {}.", pending.new_pipeline_id); + self.close_pipeline(pending.new_pipeline_id, ExitPipelineMode::Normal); + } + + // In case there are frames which weren't attached to the frame tree, we close them. + let frame_ids: Vec = self.frames.keys().cloned().collect(); + for frame_id in frame_ids { + debug!("Removing detached frame {}.", frame_id); + self.close_frame(frame_id, ExitPipelineMode::Normal); + } + + // In case there are pipelines which weren't attached to the pipeline tree, we close them. + let pipeline_ids: Vec = self.pipelines.keys().cloned().collect(); + for pipeline_id in pipeline_ids { + debug!("Removing detached pipeline {}.", pipeline_id); + self.close_pipeline(pipeline_id, ExitPipelineMode::Normal); + } } fn handle_shutdown(&mut self) { @@ -1208,8 +1235,8 @@ impl Constellation } fn handle_subframe_loaded(&mut self, pipeline_id: PipelineId) { - let parent_info = match self.pipelines.get(&pipeline_id) { - Some(pipeline) => pipeline.parent_info, + let (frame_id, parent_info) = match self.pipelines.get(&pipeline_id) { + Some(pipeline) => (pipeline.frame_id, pipeline.parent_info), None => return warn!("Pipeline {:?} loaded after closure.", pipeline_id), }; let subframe_parent_id = match parent_info { @@ -1217,8 +1244,9 @@ impl Constellation None => return warn!("Pipeline {:?} has no parent.", pipeline_id), }; let msg = ConstellationControlMsg::DispatchFrameLoadEvent { - target: pipeline_id, + target: frame_id, parent: subframe_parent_id, + child: pipeline_id, }; let result = match self.pipelines.get(&subframe_parent_id) { Some(pipeline) => pipeline.script_chan.send(msg), @@ -1392,13 +1420,19 @@ impl Constellation // requested change so it can update its internal state. // // If replace is true, the current entry is replaced instead of a new entry being added. - let parent_info = self.pipelines.get(&source_id).and_then(|source| source.parent_info); + let (frame_id, parent_info) = match self.pipelines.get(&source_id) { + Some(pipeline) => (pipeline.frame_id, pipeline.parent_info), + None => { + warn!("Pipeline {:?} loaded after closure.", source_id); + return None; + } + }; match parent_info { Some((parent_pipeline_id, _)) => { self.handle_load_start_msg(source_id); // Message the constellation to find the script thread for this iframe // and issue an iframe load through there. - let msg = ConstellationControlMsg::Navigate(parent_pipeline_id, source_id, load_data, replace); + let msg = ConstellationControlMsg::Navigate(parent_pipeline_id, frame_id, load_data, replace); let result = match self.pipelines.get(&parent_pipeline_id) { Some(parent_pipeline) => parent_pipeline.script_chan.send(msg), None => { @@ -1586,16 +1620,17 @@ impl Constellation fn handle_mozbrowser_event_msg(&mut self, parent_pipeline_id: PipelineId, - pipeline_id: Option, + pipeline_id: PipelineId, event: MozBrowserEvent) { assert!(PREFS.is_mozbrowser_enabled()); + let frame_id = self.pipelines.get(&pipeline_id).map(|pipeline| pipeline.frame_id); // Find the script channel for the given parent pipeline, // and pass the event to that script thread. // If the pipeline lookup fails, it is because we have torn down the pipeline, // so it is reasonable to silently ignore the event. match self.pipelines.get(&parent_pipeline_id) { - Some(pipeline) => pipeline.trigger_mozbrowser_event(pipeline_id, event), + Some(pipeline) => pipeline.trigger_mozbrowser_event(frame_id, event), None => warn!("Pipeline {:?} handling mozbrowser event after closure.", parent_pipeline_id), } } @@ -1626,8 +1661,8 @@ impl Constellation } fn focus_parent_pipeline(&mut self, pipeline_id: PipelineId) { - let parent_info = match self.pipelines.get(&pipeline_id) { - Some(pipeline) => pipeline.parent_info, + let (frame_id, parent_info) = match self.pipelines.get(&pipeline_id) { + Some(pipeline) => (pipeline.frame_id, pipeline.parent_info), None => return warn!("Pipeline {:?} focus parent after closure.", pipeline_id), }; let (parent_pipeline_id, _) = match parent_info { @@ -1637,7 +1672,7 @@ impl Constellation // Send a message to the parent of the provided pipeline (if it exists) // telling it to mark the iframe element as focused. - let msg = ConstellationControlMsg::FocusIFrame(parent_pipeline_id, pipeline_id); + let msg = ConstellationControlMsg::FocusIFrame(parent_pipeline_id, frame_id); let result = match self.pipelines.get(&parent_pipeline_id) { Some(pipeline) => pipeline.script_chan.send(msg), None => return warn!("Pipeline {:?} focus after closure.", parent_pipeline_id), @@ -1691,10 +1726,13 @@ impl Constellation } fn handle_visibility_change_complete(&mut self, pipeline_id: PipelineId, visibility: bool) { - let parent_pipeline_info = self.pipelines.get(&pipeline_id).and_then(|source| source.parent_info); + let (frame_id, parent_pipeline_info) = match self.pipelines.get(&pipeline_id) { + None => return warn!("Visibity change for closed pipeline {:?}.", pipeline_id), + Some(pipeline) => (pipeline.frame_id, pipeline.parent_info), + }; if let Some((parent_pipeline_id, _)) = parent_pipeline_info { let visibility_msg = ConstellationControlMsg::NotifyVisibilityChange(parent_pipeline_id, - pipeline_id, + frame_id, visibility); let result = match self.pipelines.get(&parent_pipeline_id) { None => return warn!("Parent pipeline {:?} closed", parent_pipeline_id), @@ -1856,7 +1894,7 @@ impl Constellation // This makes things like contentDocument work correctly. if let Some((parent_pipeline_id, _)) = pipeline_info { let msg = ConstellationControlMsg::UpdatePipelineId(parent_pipeline_id, - prev_pipeline_id, + frame_id, next_pipeline_id); let result = match self.pipelines.get(&parent_pipeline_id) { None => return warn!("Pipeline {:?} child traversed after closure.", parent_pipeline_id), @@ -1875,8 +1913,7 @@ impl Constellation fn get_top_level_frame_for_pipeline(&self, pipeline_id: Option) -> FrameId { if PREFS.is_mozbrowser_enabled() { pipeline_id.and_then(|id| self.get_mozbrowser_ancestor_info(id)) - .and_then(|pipeline_info| self.pipelines.get(&pipeline_info.1)) - .map(|pipeline| pipeline.frame_id) + .map(|(_, mozbrowser_iframe_id)| mozbrowser_iframe_id) .unwrap_or(self.root_frame_id) } else { // If mozbrowser is not enabled, the root frame is the only top-level frame @@ -1910,11 +1947,6 @@ impl Constellation } if self.frames.contains_key(&frame_change.frame_id) { - // Mature the new pipeline, and return frames evicted from history. - if let Some(ref mut pipeline) = self.pipelines.get_mut(&frame_change.new_pipeline_id) { - pipeline.is_mature = true; - } - if frame_change.replace { let evicted = self.frames.get_mut(&frame_change.frame_id).map(|frame| { frame.replace_current(frame_change.new_pipeline_id) @@ -1930,16 +1962,6 @@ impl Constellation } else { // The new pipeline is in a new frame with no history self.new_frame(frame_change.frame_id, frame_change.new_pipeline_id); - - // If a child frame, add it to the parent pipeline. Otherwise - // it must surely be the root frame being created! - let parent_info = self.pipelines.get(&frame_change.new_pipeline_id) - .and_then(|pipeline| pipeline.parent_info); - if let Some((parent_id, _)) = parent_info { - if let Some(parent) = self.pipelines.get_mut(&parent_id) { - parent.add_child(frame_change.frame_id); - } - } } if !frame_change.replace { @@ -1958,49 +1980,25 @@ impl Constellation fn handle_activate_document_msg(&mut self, pipeline_id: PipelineId) { debug!("Document ready to activate {:?}", pipeline_id); - if let Some(ref child_pipeline) = self.pipelines.get(&pipeline_id) { - if let Some(ref parent_info) = child_pipeline.parent_info { - if let Some(parent_pipeline) = self.pipelines.get(&parent_info.0) { - let _ = parent_pipeline.script_chan - .send(ConstellationControlMsg::FramedContentChanged( - parent_info.0, - pipeline_id)); + // Notify the parent (if there is one). + if let Some(pipeline) = self.pipelines.get(&pipeline_id) { + if let Some((parent_pipeline_id, _)) = pipeline.parent_info { + if let Some(parent_pipeline) = self.pipelines.get(&parent_pipeline_id) { + let msg = ConstellationControlMsg::FramedContentChanged(parent_pipeline_id, pipeline.frame_id); + let _ = parent_pipeline.script_chan.send(msg); } } } - // If this pipeline is already part of the current frame tree, - // we don't need to do anything. - if self.pipeline_is_in_current_frame(pipeline_id) { - return; - } - // Find the pending frame change whose new pipeline id is pipeline_id. - // If it is found, mark this pending frame as ready to be enabled. let pending_index = self.pending_frames.iter().rposition(|frame_change| { frame_change.new_pipeline_id == pipeline_id }); - if let Some(pending_index) = pending_index { - self.pending_frames[pending_index].document_ready = true; - } - // This is a bit complex. We need to loop through pending frames and find - // ones that can be swapped. A frame can be swapped (enabled) once it is - // ready to layout (has document_ready set), and also is mature - // (i.e. the pipeline it is replacing has been enabled and now has a frame). - // The outer loop is required because any time a pipeline is enabled, that - // may affect whether other pending frames are now able to be enabled. On the - // other hand, if no frames can be enabled after looping through all pending - // frames, we can safely exit the loop, knowing that we will need to wait on - // a dependent pipeline to be ready to paint. - while let Some(valid_frame_change) = self.pending_frames.iter().rposition(|frame_change| { - let frame_is_mature = frame_change.old_pipeline_id - .and_then(|old_pipeline_id| self.pipelines.get(&old_pipeline_id)) - .map(|old_pipeline| old_pipeline.is_mature) - .unwrap_or(true); - frame_change.document_ready && frame_is_mature - }) { - let frame_change = self.pending_frames.swap_remove(valid_frame_change); + // If it is found, remove it from the pending frames, and make it + // the active document of its frame. + if let Some(pending_index) = pending_index { + let frame_change = self.pending_frames.swap_remove(pending_index); self.add_or_replace_pipeline_in_frame_tree(frame_change); } } @@ -2100,6 +2098,7 @@ impl Constellation // screenshot can safely be written. for frame in self.current_frame_tree_iter(self.root_frame_id) { let pipeline_id = frame.current.pipeline_id; + debug!("Checking readiness of frame {}, pipeline {}.", frame.id, pipeline_id); let pipeline = match self.pipelines.get(&pipeline_id) { None => { @@ -2265,7 +2264,9 @@ impl Constellation self.close_frame(*child_frame, exit_mode); } - let pipeline = match self.pipelines.get_mut(&pipeline_id) { + // Note, we don't remove the pipeline now, we wait for the message to come back from + // the pipeline. + let pipeline = match self.pipelines.get(&pipeline_id) { Some(pipeline) => pipeline, None => return warn!("Closing pipeline {:?} twice.", pipeline_id), }; @@ -2337,6 +2338,7 @@ impl Constellation // Note that this function can panic, due to ipc-channel creation failure. // avoiding this panic would require a mechanism for dealing // with low-resource scenarios. + debug!("Sending frame tree for frame {}.", self.root_frame_id); if let Some(frame_tree) = self.frame_to_sendable(self.root_frame_id) { let (chan, port) = ipc::channel().expect("Failed to create IPC channel!"); self.compositor_proxy.send(ToCompositorMsg::SetFrameTree(frame_tree, @@ -2350,12 +2352,12 @@ impl Constellation /// For a given pipeline, determine the mozbrowser iframe that transitively contains /// it. There could be arbitrary levels of nested iframes in between them. - fn get_mozbrowser_ancestor_info(&self, original_pipeline_id: PipelineId) -> Option<(PipelineId, PipelineId)> { + fn get_mozbrowser_ancestor_info(&self, original_pipeline_id: PipelineId) -> Option<(PipelineId, FrameId)> { let mut pipeline_id = original_pipeline_id; loop { match self.pipelines.get(&pipeline_id) { Some(pipeline) => match pipeline.parent_info { - Some((parent_id, FrameType::MozBrowserIFrame)) => return Some((parent_id, pipeline_id)), + Some((parent_id, FrameType::MozBrowserIFrame)) => return Some((parent_id, pipeline.frame_id)), Some((parent_id, _)) => pipeline_id = parent_id, None => return None, }, @@ -2378,14 +2380,12 @@ impl Constellation }; // If this is a mozbrowser iframe, then send the event with new url - if let Some((ancestor_id, mozbrowser_iframe_id)) = self.get_mozbrowser_ancestor_info(pipeline_id) { + if let Some((ancestor_id, mozbrowser_frame_id)) = self.get_mozbrowser_ancestor_info(pipeline_id) { if let Some(ancestor) = self.pipelines.get(&ancestor_id) { - if let Some(pipeline) = self.pipelines.get(&mozbrowser_iframe_id) { - let can_go_forward = !self.joint_session_future(pipeline.frame_id).is_empty(); - let can_go_back = !self.joint_session_past(pipeline.frame_id).is_empty(); - let event = MozBrowserEvent::LocationChange(url, can_go_back, can_go_forward); - ancestor.trigger_mozbrowser_event(Some(mozbrowser_iframe_id), event); - } + let can_go_forward = !self.joint_session_future(mozbrowser_frame_id).is_empty(); + let can_go_back = !self.joint_session_past(mozbrowser_frame_id).is_empty(); + let event = MozBrowserEvent::LocationChange(url, can_go_back, can_go_forward); + ancestor.trigger_mozbrowser_event(Some(mozbrowser_frame_id), event); } } } diff --git a/components/constellation/pipeline.rs b/components/constellation/pipeline.rs index 9dafef6c3e5..2fb52909516 100644 --- a/components/constellation/pipeline.rs +++ b/components/constellation/pipeline.rs @@ -69,9 +69,6 @@ pub struct Pipeline { /// Whether this pipeline should be treated as visible for the purposes of scheduling and /// resource management. pub visible: bool, - /// Whether this pipeline is has matured or not. - /// A pipeline is considered mature when it has an associated frame. - pub is_mature: bool, } /// Initial setup data needed to construct a pipeline. @@ -152,6 +149,7 @@ impl Pipeline { let new_layout_info = NewLayoutInfo { parent_pipeline_id: parent_pipeline_id, new_pipeline_id: state.id, + frame_id: state.frame_id, frame_type: frame_type, load_data: state.load_data.clone(), pipeline_port: pipeline_port, @@ -203,6 +201,7 @@ impl Pipeline { let unprivileged_pipeline_content = UnprivilegedPipelineContent { id: state.id, + frame_id: state.frame_id, parent_info: state.parent_info, constellation_chan: state.constellation_chan, scheduler_chan: state.scheduler_chan, @@ -281,7 +280,6 @@ impl Pipeline { running_animations: false, visible: visible, is_private: is_private, - is_mature: false, } } @@ -348,7 +346,7 @@ impl Pipeline { } pub fn trigger_mozbrowser_event(&self, - child_id: Option, + child_id: Option, event: MozBrowserEvent) { assert!(PREFS.is_mozbrowser_enabled()); @@ -380,6 +378,7 @@ impl Pipeline { #[derive(Deserialize, Serialize)] pub struct UnprivilegedPipelineContent { id: PipelineId, + frame_id: FrameId, parent_info: Option<(PipelineId, FrameType)>, constellation_chan: IpcSender, layout_to_constellation_chan: IpcSender, @@ -414,6 +413,7 @@ impl UnprivilegedPipelineContent { { let layout_pair = STF::create(InitialScriptState { id: self.id, + frame_id: self.frame_id, parent_info: self.parent_info, control_chan: self.script_chan.clone(), control_port: self.script_port, diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 885ce794b6d..5b15166b9dd 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -784,7 +784,7 @@ pub fn obtain_response(request_factory: &HttpRequestFactory, } if log_enabled!(log::LogLevel::Info) { - info!("{}", method); + info!("{} {}", method, connection_url); for header in headers.iter() { info!(" - {}", header); } diff --git a/components/script/document_loader.rs b/components/script/document_loader.rs index 837660109c3..04b9e258573 100644 --- a/components/script/document_loader.rs +++ b/components/script/document_loader.rs @@ -94,6 +94,7 @@ impl DocumentLoader { pub fn new_with_threads(resource_threads: ResourceThreads, initial_load: Option) -> DocumentLoader { + debug!("Initial blocking load {:?}.", initial_load); let initial_loads = initial_load.into_iter().map(LoadType::PageSource).collect(); DocumentLoader { @@ -105,6 +106,7 @@ impl DocumentLoader { /// Add a load to the list of blocking loads. fn add_blocking_load(&mut self, load: LoadType) { + debug!("Adding blocking load {:?} ({}).", load, self.blocking_loads.len()); self.blocking_loads.push(load); } @@ -119,6 +121,7 @@ impl DocumentLoader { /// Mark an in-progress network request complete. pub fn finish_load(&mut self, load: &LoadType) { + debug!("Removing blocking load {:?} ({}).", load, self.blocking_loads.len()); let idx = self.blocking_loads.iter().position(|unfinished| *unfinished == *load); self.blocking_loads.remove(idx.expect(&format!("unknown completed load {:?}", load))); } diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 2728bc757fb..91824f0e354 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -96,8 +96,8 @@ use ipc_channel::ipc::{self, IpcSender}; use js::jsapi::{JSContext, JSObject, JSRuntime}; use js::jsapi::JS_GetRuntime; use msg::constellation_msg::{ALT, CONTROL, SHIFT, SUPER}; +use msg::constellation_msg::{FrameId, ReferrerPolicy}; use msg::constellation_msg::{Key, KeyModifiers, KeyState}; -use msg::constellation_msg::{PipelineId, ReferrerPolicy}; use net_traits::{FetchResponseMsg, IpcSend}; use net_traits::CookieSource::NonHTTP; use net_traits::CoreResourceMsg::{GetCookiesForUrl, SetCookiesForUrl}; @@ -1400,7 +1400,7 @@ impl Document { if let Some((parent_pipeline_id, _)) = self.window.parent_info() { let global_scope = self.window.upcast::(); let event = ConstellationMsg::MozBrowserEvent(parent_pipeline_id, - Some(global_scope.pipeline_id()), + global_scope.pipeline_id(), event); global_scope.constellation_chan().send(event).unwrap(); } @@ -1513,8 +1513,10 @@ impl Document { } } - let loader = self.loader.borrow(); - if !loader.is_blocked() && !loader.events_inhibited() { + if !self.loader.borrow().is_blocked() && !self.loader.borrow().events_inhibited() { + // Schedule a task to fire a "load" event (if no blocking loads have arrived in the mean time) + // NOTE: we can end up executing this code more than once, in case more blocking loads arrive. + debug!("Document loads are complete."); let win = self.window(); let msg = MainThreadScriptMsg::DocumentLoadsComplete( win.upcast::().pipeline_id()); @@ -1630,11 +1632,11 @@ impl Document { } /// Find an iframe element in the document. - pub fn find_iframe(&self, pipeline: PipelineId) -> Option> { + pub fn find_iframe(&self, frame_id: FrameId) -> Option> { self.upcast::() .traverse_preorder() .filter_map(Root::downcast::) - .find(|node| node.pipeline_id() == Some(pipeline)) + .find(|node| node.frame_id() == frame_id) } pub fn get_dom_loading(&self) -> u64 { diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index fef2cd70d85..e9ccf61cc7a 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -207,6 +207,11 @@ impl HTMLIFrameElement { self.pipeline_id.get() } + #[inline] + pub fn frame_id(&self) -> FrameId { + self.frame_id + } + pub fn change_visibility_status(&self, visibility: bool) { if self.visibility.get() != visibility { self.visibility.set(visibility); diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 6a789527f78..d9d0eed641a 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -71,7 +71,7 @@ use js::jsval::UndefinedValue; use js::rust::Runtime; use layout_wrapper::ServoLayoutNode; use mem::heap_size_of_self_and_children; -use msg::constellation_msg::{FrameType, PipelineId, PipelineNamespace, ReferrerPolicy}; +use msg::constellation_msg::{FrameId, FrameType, PipelineId, PipelineNamespace, ReferrerPolicy}; use net_traits::{CoreResourceMsg, IpcSend, Metadata, ResourceThreads}; use net_traits::bluetooth_thread::BluetoothMethodMsg; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread}; @@ -135,6 +135,8 @@ pub unsafe fn trace_thread(tr: *mut JSTracer) { struct InProgressLoad { /// The pipeline which requested this load. pipeline_id: PipelineId, + /// The frame being loaded into. + frame_id: FrameId, /// The parent pipeline and frame type associated with this load, if any. parent_info: Option<(PipelineId, FrameType)>, /// The current window size associated with this pipeline. @@ -154,12 +156,14 @@ struct InProgressLoad { impl InProgressLoad { /// Create a new InProgressLoad object. fn new(id: PipelineId, + frame_id: FrameId, parent_info: Option<(PipelineId, FrameType)>, layout_chan: Sender, window_size: Option, url: Url) -> InProgressLoad { InProgressLoad { pipeline_id: id, + frame_id: frame_id, parent_info: parent_info, layout_chan: layout_chan, window_size: window_size, @@ -452,15 +456,15 @@ impl ScriptThreadFactory for ScriptThread { let (sender, receiver) = channel(); let layout_chan = sender.clone(); - let pipeline_id = state.id; thread::spawn_named(format!("ScriptThread {:?}", state.id), move || { thread_state::initialize(thread_state::SCRIPT); - PipelineId::install(pipeline_id); + PipelineId::install(state.id); PipelineNamespace::install(state.pipeline_namespace_id); let roots = RootCollection::new(); let _stack_roots_tls = StackRootTLS::new(&roots); let id = state.id; + let frame_id = state.frame_id; let parent_info = state.parent_info; let mem_profiler_chan = state.mem_profiler_chan.clone(); let window_size = state.window_size; @@ -474,7 +478,7 @@ impl ScriptThreadFactory for ScriptThread { let mut failsafe = ScriptMemoryFailsafe::new(&script_thread); - let new_load = InProgressLoad::new(id, parent_info, layout_chan, window_size, + let new_load = InProgressLoad::new(id, frame_id, parent_info, layout_chan, window_size, load_data.url.clone()); script_thread.start_page_load(new_load, load_data); @@ -888,8 +892,8 @@ impl ScriptThread { fn handle_msg_from_constellation(&self, msg: ConstellationControlMsg) { match msg { - ConstellationControlMsg::Navigate(parent_pipeline_id, pipeline_id, load_data, replace) => - self.handle_navigate(parent_pipeline_id, Some(pipeline_id), load_data, replace), + ConstellationControlMsg::Navigate(parent_pipeline_id, frame_id, load_data, replace) => + self.handle_navigate(parent_pipeline_id, Some(frame_id), load_data, replace), ConstellationControlMsg::SendEvent(id, event) => self.handle_event(id, event), ConstellationControlMsg::ResizeInactive(id, new_size) => @@ -902,22 +906,22 @@ impl ScriptThread { self.handle_thaw_msg(pipeline_id), ConstellationControlMsg::ChangeFrameVisibilityStatus(pipeline_id, visible) => self.handle_visibility_change_msg(pipeline_id, visible), - ConstellationControlMsg::NotifyVisibilityChange(parent_pipeline_id, pipeline_id, visible) => - self.handle_visibility_change_complete_msg(parent_pipeline_id, pipeline_id, visible), + ConstellationControlMsg::NotifyVisibilityChange(parent_pipeline_id, frame_id, visible) => + self.handle_visibility_change_complete_msg(parent_pipeline_id, frame_id, visible), ConstellationControlMsg::MozBrowserEvent(parent_pipeline_id, - pipeline_id, + frame_id, event) => self.handle_mozbrowser_event_msg(parent_pipeline_id, - pipeline_id, + frame_id, event), ConstellationControlMsg::UpdatePipelineId(parent_pipeline_id, - old_pipeline_id, + frame_id, new_pipeline_id) => self.handle_update_pipeline_id(parent_pipeline_id, - old_pipeline_id, + frame_id, new_pipeline_id), - ConstellationControlMsg::FocusIFrame(parent_pipeline_id, pipeline_id) => - self.handle_focus_iframe_msg(parent_pipeline_id, pipeline_id), + ConstellationControlMsg::FocusIFrame(parent_pipeline_id, frame_id) => + self.handle_focus_iframe_msg(parent_pipeline_id, frame_id), ConstellationControlMsg::WebDriverScriptCommand(pipeline_id, msg) => self.handle_webdriver_msg(pipeline_id, msg), ConstellationControlMsg::TickAllAnimations(pipeline_id) => @@ -927,10 +931,10 @@ impl ScriptThread { ConstellationControlMsg::WebFontLoaded(pipeline_id) => self.handle_web_font_loaded(pipeline_id), ConstellationControlMsg::DispatchFrameLoadEvent { - target: pipeline_id, parent: parent_pipeline_id } => - self.handle_frame_load_event(parent_pipeline_id, pipeline_id), - ConstellationControlMsg::FramedContentChanged(parent_pipeline_id, pipeline_id) => - self.handle_framed_content_changed(parent_pipeline_id, pipeline_id), + target: frame_id, parent: parent_id, child: child_id } => + self.handle_frame_load_event(parent_id, frame_id, child_id), + ConstellationControlMsg::FramedContentChanged(parent_pipeline_id, frame_id) => + self.handle_framed_content_changed(parent_pipeline_id, frame_id), ConstellationControlMsg::ReportCSSError(pipeline_id, filename, line, column, msg) => self.handle_css_error_reporting(pipeline_id, filename, line, column, msg), ConstellationControlMsg::Reload(pipeline_id) => @@ -1139,6 +1143,7 @@ impl ScriptThread { let NewLayoutInfo { parent_pipeline_id, new_pipeline_id, + frame_id, frame_type, load_data, pipeline_port, @@ -1175,7 +1180,7 @@ impl ScriptThread { .unwrap(); // Kick off the fetch for the new resource. - let new_load = InProgressLoad::new(new_pipeline_id, Some((parent_pipeline_id, frame_type)), + let new_load = InProgressLoad::new(new_pipeline_id, frame_id, Some((parent_pipeline_id, frame_type)), layout_chan, parent_window.window_size(), load_data.url.clone()); self.start_page_load(new_load, load_data); @@ -1187,12 +1192,15 @@ impl ScriptThread { None => return warn!("Message sent to closed pipeline {}.", pipeline), }; if doc.loader().is_blocked() { + debug!("Script thread got loads complete while loader is blocked."); return; } doc.mut_loader().inhibit_events(); // https://html.spec.whatwg.org/multipage/#the-end step 7 + // Schedule a task to fire a "load" event (if no blocking loads have arrived in the mean time) + // NOTE: we can end up executing this code more than once, in case more blocking loads arrive. let handler = box DocumentProgressHandler::new(Trusted::new(&doc)); self.dom_manipulation_task_source.queue(handler, doc.window().upcast()).unwrap(); @@ -1259,7 +1267,7 @@ impl ScriptThread { } /// Updates iframe element after a change in visibility - fn handle_visibility_change_complete_msg(&self, parent_pipeline_id: PipelineId, id: PipelineId, visible: bool) { + fn handle_visibility_change_complete_msg(&self, parent_pipeline_id: PipelineId, id: FrameId, visible: bool) { if let Some(root_context) = self.browsing_context.get() { if let Some(ref inner_context) = root_context.find(parent_pipeline_id) { if let Some(iframe) = inner_context.active_document().find_iframe(id) { @@ -1328,12 +1336,12 @@ impl ScriptThread { fn handle_focus_iframe_msg(&self, parent_pipeline_id: PipelineId, - pipeline_id: PipelineId) { + frame_id: FrameId) { let borrowed_context = self.root_browsing_context(); let context = borrowed_context.find(parent_pipeline_id).unwrap(); let doc = context.active_document(); - let frame_element = doc.find_iframe(pipeline_id); + let frame_element = doc.find_iframe(frame_id); if let Some(ref frame_element) = frame_element { doc.begin_focus_transaction(); @@ -1344,11 +1352,11 @@ impl ScriptThread { fn handle_framed_content_changed(&self, parent_pipeline_id: PipelineId, - pipeline_id: PipelineId) { + frame_id: FrameId) { let root_context = self.root_browsing_context(); let context = root_context.find(parent_pipeline_id).unwrap(); let doc = context.active_document(); - let frame_element = doc.find_iframe(pipeline_id); + let frame_element = doc.find_iframe(frame_id); if let Some(ref frame_element) = frame_element { frame_element.upcast::().dirty(NodeDamage::OtherNodeDamage); let window = context.active_window(); @@ -1362,14 +1370,14 @@ impl ScriptThread { /// https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowserloadstart fn handle_mozbrowser_event_msg(&self, parent_pipeline_id: PipelineId, - pipeline_id: Option, + frame_id: Option, event: MozBrowserEvent) { match self.root_browsing_context().find(parent_pipeline_id) { None => warn!("Mozbrowser event after pipeline {:?} closed.", parent_pipeline_id), - Some(context) => match pipeline_id { + Some(context) => match frame_id { None => context.active_window().dispatch_mozbrowser_event(event), - Some(pipeline_id) => match context.active_document().find_iframe(pipeline_id) { - None => warn!("Mozbrowser event after iframe {:?}/{:?} closed.", parent_pipeline_id, pipeline_id), + Some(frame_id) => match context.active_document().find_iframe(frame_id) { + None => warn!("Mozbrowser event after iframe {:?}/{:?} closed.", parent_pipeline_id, frame_id), Some(frame_element) => frame_element.dispatch_mozbrowser_event(event), }, }, @@ -1378,13 +1386,13 @@ impl ScriptThread { fn handle_update_pipeline_id(&self, parent_pipeline_id: PipelineId, - old_pipeline_id: PipelineId, + frame_id: FrameId, new_pipeline_id: PipelineId) { let borrowed_context = self.root_browsing_context(); let frame_element = borrowed_context.find(parent_pipeline_id).and_then(|context| { let doc = context.active_document(); - doc.find_iframe(old_pipeline_id) + doc.find_iframe(frame_id) }); frame_element.unwrap().update_pipeline_id(new_pipeline_id); @@ -1567,13 +1575,15 @@ impl ScriptThread { } /// Notify the containing document of a child frame that has completed loading. - fn handle_frame_load_event(&self, parent_pipeline_id: PipelineId, id: PipelineId) { - let document = match self.root_browsing_context().find(parent_pipeline_id) { + fn handle_frame_load_event(&self, parent_id: PipelineId, frame_id: FrameId, child_id: PipelineId) { + let document = match self.root_browsing_context().find(parent_id) { Some(browsing_context) => browsing_context.active_document(), - None => return warn!("Message sent to closed pipeline {}.", parent_pipeline_id), + None => return warn!("Message sent to closed pipeline {}.", parent_id), }; - if let Some(iframe) = document.find_iframe(id) { - iframe.iframe_load_event_steps(id); + if let Some(iframe) = document.find_iframe(frame_id) { + if iframe.pipeline_id() == Some(child_id) { + iframe.iframe_load_event_steps(child_id); + } } } @@ -1609,7 +1619,7 @@ impl ScriptThread { root_context.and_then(|root_context| { root_context.find(parent_id).and_then(|context| { let doc = context.active_document(); - doc.find_iframe(incomplete.pipeline_id) + doc.find_iframe(incomplete.frame_id) }) }) }); @@ -2033,7 +2043,7 @@ impl ScriptThread { /// The entry point for content to notify that a new load has been requested /// for the given pipeline (specifically the "navigate" algorithm). fn handle_navigate(&self, parent_pipeline_id: PipelineId, - pipeline_id: Option, + frame_id: Option, load_data: LoadData, replace: bool) { // Step 7. @@ -2053,12 +2063,12 @@ impl ScriptThread { } } - match pipeline_id { - Some(pipeline_id) => { + match frame_id { + Some(frame_id) => { let root_context = self.root_browsing_context(); let iframe = root_context.find(parent_pipeline_id).and_then(|context| { let doc = context.active_document(); - doc.find_iframe(pipeline_id) + doc.find_iframe(frame_id) }); if let Some(iframe) = iframe.r() { iframe.navigate_or_reload_child_browsing_context(Some(load_data), replace); diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index 2617f745dbd..94a74f9a92b 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -167,7 +167,9 @@ pub struct NewLayoutInfo { pub parent_pipeline_id: PipelineId, /// Id of the newly-created pipeline. pub new_pipeline_id: PipelineId, - /// Type of the new frame associated with this pipeline. + /// Id of the frame associated with this pipeline. + pub frame_id: FrameId, + /// Type of the frame associated with this pipeline. pub frame_type: FrameType, /// Network request data which will be initiated by the script thread. pub load_data: LoadData, @@ -207,22 +209,20 @@ pub enum ConstellationControlMsg { /// Notifies script thread whether frame is visible ChangeFrameVisibilityStatus(PipelineId, bool), /// Notifies script thread that frame visibility change is complete - /// First PipelineId is for the parent, second PipelineId is for the actual pipeline. - NotifyVisibilityChange(PipelineId, PipelineId, bool), + /// PipelineId is for the parent, FrameId is for the actual frame. + NotifyVisibilityChange(PipelineId, FrameId, bool), /// Notifies script thread that a url should be loaded in this iframe. - /// First PipelineId is for the parent, second PipelineId is for the actual pipeline. - Navigate(PipelineId, PipelineId, LoadData, bool), + /// PipelineId is for the parent, FrameId is for the actual frame. + Navigate(PipelineId, FrameId, LoadData, bool), /// Requests the script thread forward a mozbrowser event to an iframe it owns, - /// or to the window if no child pipeline id is provided. - /// First PipelineId is for the parent, second PipelineId is for the actual pipeline. - MozBrowserEvent(PipelineId, Option, MozBrowserEvent), + /// or to the window if no child frame id is provided. + MozBrowserEvent(PipelineId, Option, MozBrowserEvent), /// Updates the current pipeline ID of a given iframe. - /// First PipelineId is for the parent, second is the old PipelineId for the frame, - /// third is the new PipelineId for the frame. - UpdatePipelineId(PipelineId, PipelineId, PipelineId), + /// First PipelineId is for the parent, second is the new PipelineId for the frame. + UpdatePipelineId(PipelineId, FrameId, PipelineId), /// Set an iframe to be focused. Used when an element in an iframe gains focus. - /// First PipelineId is for the parent, second PipelineId is for the actual pipeline. - FocusIFrame(PipelineId, PipelineId), + /// PipelineId is for the parent, FrameId is for the actual frame. + FocusIFrame(PipelineId, FrameId), /// Passes a webdriver command to the script thread for execution WebDriverScriptCommand(PipelineId, WebDriverScriptCommand), /// Notifies script thread that all animations are done @@ -234,14 +234,16 @@ pub enum ConstellationControlMsg { WebFontLoaded(PipelineId), /// Cause a `load` event to be dispatched at the appropriate frame element. DispatchFrameLoadEvent { - /// The pipeline that has been marked as loaded. - target: PipelineId, + /// The frame that has been marked as loaded. + target: FrameId, /// The pipeline that contains a frame loading the target pipeline. parent: PipelineId, + /// The pipeline that has completed loading. + child: PipelineId, }, - /// Notifies a parent frame that one of its child frames is now active. - /// First PipelineId is for the parent, second PipelineId is for the actual pipeline. - FramedContentChanged(PipelineId, PipelineId), + /// Notifies a parent pipeline that one of its child frames is now active. + /// PipelineId is for the parent, FrameId is the child frame. + FramedContentChanged(PipelineId, FrameId), /// Report an error from a CSS parser for the given pipeline ReportCSSError(PipelineId, String, usize, usize, String), /// Reload the given page. @@ -429,6 +431,8 @@ pub struct InitialScriptState { /// The subpage ID of this pipeline to create in its pipeline parent. /// If `None`, this is the root. pub parent_info: Option<(PipelineId, FrameType)>, + /// The ID of the frame this script is part of. + pub frame_id: FrameId, /// A channel with which messages can be sent to us (the script thread). pub control_chan: IpcSender, /// A port on which messages sent by the constellation to script can be received. diff --git a/components/script_traits/script_msg.rs b/components/script_traits/script_msg.rs index 82b7af96f81..b73be67c023 100644 --- a/components/script_traits/script_msg.rs +++ b/components/script_traits/script_msg.rs @@ -83,10 +83,9 @@ pub enum ScriptMsg { /// A new load has been requested, with an option to replace the current entry once loaded /// instead of adding a new entry. LoadUrl(PipelineId, LoadData, bool), - /// Dispatch a mozbrowser event to a given iframe, - /// or to the window if no subpage id is provided. - /// First PipelineId is for the parent, second PipelineId is for the actual pipeline. - MozBrowserEvent(PipelineId, Option, MozBrowserEvent), + /// Dispatch a mozbrowser event to the parent of this pipeline. + /// The first PipelineId is for the parent, the second is for the originating pipeline. + MozBrowserEvent(PipelineId, PipelineId, MozBrowserEvent), /// HTMLIFrameElement Forward or Back traversal. TraverseHistory(Option, TraversalDirection), /// Gets the length of the joint session history from the constellation. diff --git a/tests/wpt/mozilla/tests/mozilla/mozbrowser/mozbrowserlocationchange_event.html b/tests/wpt/mozilla/tests/mozilla/mozbrowser/mozbrowserlocationchange_event.html index c2ba1d3e4e8..3866cc6dadb 100644 --- a/tests/wpt/mozilla/tests/mozilla/mozbrowser/mozbrowserlocationchange_event.html +++ b/tests/wpt/mozilla/tests/mozilla/mozbrowser/mozbrowserlocationchange_event.html @@ -38,7 +38,7 @@ async_test(function(t) { var action_idx = 0; - iframe.addEventListener("mozbrowserlocationchange", e => { + iframe.addEventListener("mozbrowserlocationchange", t.step_func(e => { received_events.push(e.detail.url); received_events.push(e.detail.canGoBack); received_events.push(e.detail.canGoForward); @@ -49,7 +49,7 @@ async_test(function(t) { assert_array_equals(received_events, expected_events); t.done(); } - }); + })); document.body.appendChild(iframe); diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_reload-iframe.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_reload-iframe.html index 95b63d9f5d4..f08cf5de3e8 100644 --- a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_reload-iframe.html +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_reload-iframe.html @@ -1,4 +1,4 @@ diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_reload.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_reload.html index 78b3cc35eb4..eb2c21b38a3 100644 --- a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_reload.html +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_reload.html @@ -15,18 +15,17 @@ async_test(function(t) { var url = new URL("./location_reload-iframe.html", window.location).href; - var pingCount = 0; + window._pingCount = 0; window._ping = t.step_func(function(innerURL) { // Some browsers keep 'about:blank' in the session history - if (pingCount == 0) { + if (_pingCount == 0) { history_length = history.length; } - assert_equals(url, innerURL, "iframe url (" + pingCount + ")"); - assert_equals(history_length, history.length, "history length (" + pingCount + ")"); - pingCount++; - if (pingCount == 5) { - iframe.src = 'about:blank'; + assert_equals(url, innerURL, "iframe url (" + _pingCount + ")"); + assert_equals(history_length, history.length, "history length (" + _pingCount + ")"); + _pingCount++; + if (_pingCount == 5) { t.done(); } }); From f447040ea98d5a92f95d6dd3116939544441b5d8 Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Wed, 2 Nov 2016 23:49:52 -0400 Subject: [PATCH 18/26] Migrate `EventTarget` event firing functions to use `Atom`s. This allows us to utilize more `atom` macros. --- components/atoms/static_atoms.txt | 4 ++++ components/script/dom/document.rs | 2 +- components/script/dom/event.rs | 6 ++++-- components/script/dom/eventtarget.rs | 12 ++++++------ components/script/dom/htmldetailselement.rs | 2 +- components/script/dom/htmlformelement.rs | 8 ++++---- components/script/dom/htmliframeelement.rs | 2 +- components/script/dom/htmlimageelement.rs | 8 ++++---- components/script/dom/htmlinputelement.rs | 8 ++++---- components/script/dom/htmllinkelement.rs | 4 ++-- components/script/dom/mediaquerylist.rs | 2 +- components/script/dom/serviceworker.rs | 5 +++-- components/script/dom/serviceworkercontainer.rs | 3 ++- components/script/dom/serviceworkerglobalscope.rs | 3 ++- components/script/dom/websocket.rs | 4 ++-- components/script/dom/worker.rs | 2 +- 16 files changed, 42 insertions(+), 33 deletions(-) diff --git a/components/atoms/static_atoms.txt b/components/atoms/static_atoms.txt index d050346177f..83cddbbf7e6 100644 --- a/components/atoms/static_atoms.txt +++ b/components/atoms/static_atoms.txt @@ -70,4 +70,8 @@ keydown abort beforescriptexecute afterscriptexecute +invalid +change +open +toggle diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 3878a8f23ee..11367b739c5 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -606,7 +606,7 @@ impl Document { self.ready_state.set(state); - self.upcast::().fire_event("readystatechange"); + self.upcast::().fire_event(atom!("readystatechange")); } /// Return whether scripting is enabled or not diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs index ca8d5c8c7ac..96e1d3658cc 100644 --- a/components/script/dom/event.rs +++ b/components/script/dom/event.rs @@ -330,7 +330,9 @@ impl Runnable for EventRunnable { fn handler(self: Box) { let target = self.target.root(); - target.fire_event_with_params(&*self.name, self.bubbles, self.cancelable); + let bubbles = self.bubbles.clone(); + let cancelable = self.cancelable.clone(); + target.fire_event_with_params(self.name, bubbles, cancelable); } } @@ -345,6 +347,6 @@ impl Runnable for SimpleEventRunnable { fn handler(self: Box) { let target = self.target.root(); - target.fire_event(&*self.name); + target.fire_event(self.name); } } diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 5c65ec195a8..48ba920ad60 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -491,28 +491,28 @@ impl EventTarget { } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_event(&self, name: &str) -> Root { + pub fn fire_event(&self, name: Atom) -> Root { self.fire_event_with_params(name, EventBubbles::DoesNotBubble, EventCancelable::NotCancelable) } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_bubbling_event(&self, name: &str) -> Root { + pub fn fire_bubbling_event(&self, name: Atom) -> Root { self.fire_event_with_params(name, EventBubbles::Bubbles, EventCancelable::NotCancelable) } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_cancelable_event(&self, name: &str) -> Root { + pub fn fire_cancelable_event(&self, name: Atom) -> Root { self.fire_event_with_params(name, EventBubbles::DoesNotBubble, EventCancelable::Cancelable) } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_bubbling_cancelable_event(&self, name: &str) -> Root { + pub fn fire_bubbling_cancelable_event(&self, name: Atom) -> Root { self.fire_event_with_params(name, EventBubbles::Bubbles, EventCancelable::Cancelable) @@ -520,11 +520,11 @@ impl EventTarget { // https://dom.spec.whatwg.org/#concept-event-fire pub fn fire_event_with_params(&self, - name: &str, + name: Atom, bubbles: EventBubbles, cancelable: EventCancelable) -> Root { - let event = Event::new(&self.global(), Atom::from(name), bubbles, cancelable); + let event = Event::new(&self.global(), name, bubbles, cancelable); event.fire(self); event } diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs index b829dc79ee9..8df0f1a62fb 100644 --- a/components/script/dom/htmldetailselement.rs +++ b/components/script/dom/htmldetailselement.rs @@ -94,7 +94,7 @@ impl Runnable for DetailsNotificationRunnable { fn handler(self: Box) { let target = self.element.root(); if target.check_toggle_count(self.toggle_number) { - target.upcast::().fire_event("toggle"); + target.upcast::().fire_event(atom!("toggle")); } } } diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 8db261996b1..4ecc6a44fa0 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -304,14 +304,14 @@ impl HTMLFormElement { { if self.interactive_validation().is_err() { // TODO: Implement event handlers on all form control elements - self.upcast::().fire_event("invalid"); + self.upcast::().fire_event(atom!("invalid")); return; } } // Step 5 if submit_method_flag == SubmittedFrom::NotFromForm { let event = self.upcast::() - .fire_bubbling_cancelable_event("submit"); + .fire_bubbling_cancelable_event(atom!("submit")); if event.DefaultPrevented() { return; } @@ -481,7 +481,7 @@ impl HTMLFormElement { // Step 5-6 let unhandled_invalid_controls = invalid_controls.into_iter().filter_map(|field| { let event = field.as_event_target() - .fire_cancelable_event("invalid"); + .fire_cancelable_event(atom!("invalid")); if !event.DefaultPrevented() { return Some(field); } None }).collect::>(); @@ -610,7 +610,7 @@ impl HTMLFormElement { } let event = self.upcast::() - .fire_bubbling_cancelable_event("reset"); + .fire_bubbling_cancelable_event(atom!("reset")); if event.DefaultPrevented() { return; } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 069765bb810..2c1ff2adb0d 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -239,7 +239,7 @@ impl HTMLIFrameElement { // TODO Step 3 - set child document `mut iframe load` flag // Step 4 - self.upcast::().fire_event("load"); + self.upcast::().fire_event(atom!("load")); let mut blocker = self.load_blocker.borrow_mut(); LoadBlocker::terminate(&mut blocker); diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index e5177b28730..e8a269c782c 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -105,12 +105,12 @@ impl Runnable for ImageResponseHandlerRunnable { // Fire image.onload if trigger_image_load { - element.upcast::().fire_event("load"); + element.upcast::().fire_event(atom!("load")); } // Fire image.onerror if trigger_image_error { - element.upcast::().fire_event("error"); + element.upcast::().fire_event(atom!("error")); } // Trigger reflow @@ -180,8 +180,8 @@ impl HTMLImageElement { // Step 11, substep 5 let img = self.img.root(); img.current_request.borrow_mut().source_url = Some(self.src.into()); - img.upcast::().fire_event("error"); - img.upcast::().fire_event("loadend"); + img.upcast::().fire_event(atom!("error")); + img.upcast::().fire_event(atom!("loadend")); } } diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index ebbff4bc1ec..b599d4369dc 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -849,8 +849,8 @@ impl HTMLInputElement { let filelist = FileList::new(&window, files); self.filelist.set(Some(&filelist)); - target.fire_bubbling_event("input"); - target.fire_bubbling_event("change"); + target.fire_bubbling_event(atom!("input")); + target.fire_bubbling_event(atom!("change")); } } } @@ -1286,8 +1286,8 @@ impl Activatable for HTMLInputElement { // https://html.spec.whatwg.org/multipage/#radio-button-state-(type=radio):activation-behavior // Check if document owner is fully active let target = self.upcast::(); - target.fire_bubbling_event("input"); - target.fire_bubbling_event("change"); + target.fire_bubbling_event(atom!("input")); + target.fire_bubbling_event(atom!("change")); }, InputType::InputFile => self.select_files(None), _ => () diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 2312918c751..a7b274095c0 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -325,7 +325,7 @@ impl FetchResponseListener for StylesheetContext { if let Some(ref meta) = self.metadata { if let Some(Serde(ContentType(Mime(TopLevel::Text, SubLevel::Css, _)))) = meta.content_type { } else { - self.elem.root().upcast::().fire_event("error"); + self.elem.root().upcast::().fire_event(atom!("error")); } } } @@ -380,7 +380,7 @@ impl FetchResponseListener for StylesheetContext { document.finish_load(LoadType::Stylesheet(self.url.clone())); - let event = if successful { "load" } else { "error" }; + let event = if successful { atom!("load") } else { atom!("error") }; elem.upcast::().fire_event(event); } diff --git a/components/script/dom/mediaquerylist.rs b/components/script/dom/mediaquerylist.rs index aef1c908e8a..c140f5f2c48 100644 --- a/components/script/dom/mediaquerylist.rs +++ b/components/script/dom/mediaquerylist.rs @@ -142,7 +142,7 @@ impl WeakMediaQueryListVec { pub fn evaluate_and_report_changes(&self) { for mql in self.cell.borrow().iter() { if let MediaQueryListMatchState::Changed(_) = mql.root().unwrap().evaluate_changes() { - mql.root().unwrap().upcast::().fire_event("change"); + mql.root().unwrap().upcast::().fire_event(atom!("change")); } } } diff --git a/components/script/dom/serviceworker.rs b/components/script/dom/serviceworker.rs index 2ff3d218cb3..373ed38c761 100644 --- a/components/script/dom/serviceworker.rs +++ b/components/script/dom/serviceworker.rs @@ -18,6 +18,7 @@ use dom::globalscope::GlobalScope; use js::jsapi::{HandleValue, JSContext}; use script_thread::Runnable; use script_traits::{ScriptMsg, DOMMessage}; +use servo_atoms::Atom; use std::cell::Cell; use url::Url; @@ -56,12 +57,12 @@ impl ServiceWorker { pub fn dispatch_simple_error(address: TrustedServiceWorkerAddress) { let service_worker = address.root(); - service_worker.upcast().fire_event("error"); + service_worker.upcast().fire_event(atom!("error")); } pub fn set_transition_state(&self, state: ServiceWorkerState) { self.state.set(state); - self.upcast::().fire_event("statechange"); + self.upcast::().fire_event(Atom::from("statechange")); } pub fn get_script_url(&self) -> Url { diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs index 6ad13fc317b..c83d859b4ce 100644 --- a/components/script/dom/serviceworkercontainer.rs +++ b/components/script/dom/serviceworkercontainer.rs @@ -15,6 +15,7 @@ use dom::promise::Promise; use dom::serviceworker::ServiceWorker; use dom::serviceworkerregistration::ServiceWorkerRegistration; use script_thread::ScriptThread; +use servo_atoms::Atom; use std::ascii::AsciiExt; use std::default::Default; use std::rc::Rc; @@ -45,7 +46,7 @@ pub trait Controllable { impl Controllable for ServiceWorkerContainer { fn set_controller(&self, active_worker: &ServiceWorker) { self.controller.set(Some(active_worker)); - self.upcast::().fire_event("controllerchange"); + self.upcast::().fire_event(Atom::from("controllerchange")); } } diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index b9c3fb483ad..adf416d4fc3 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -28,6 +28,7 @@ use net_traits::request::{CredentialsMode, Destination, RequestInit, Type as Req use rand::random; use script_runtime::{CommonScriptMsg, StackRootTLS, get_reports, new_rt_and_cx, ScriptChan}; use script_traits::{TimerEvent, WorkerGlobalScopeInit, ScopeThings, ServiceWorkerMsg, WorkerScriptLoadOrigin}; +use servo_atoms::Atom; use std::sync::mpsc::{Receiver, RecvError, Select, Sender, channel}; use std::thread; use std::time::Duration; @@ -268,7 +269,7 @@ impl ServiceWorkerGlobalScope { // TODO XXXcreativcoder This will eventually use a FetchEvent interface to fire event // when we have the Request and Response dom api's implemented // https://slightlyoff.github.io/ServiceWorker/spec/service_worker_1/index.html#fetch-event-section - self.upcast::().fire_event("fetch"); + self.upcast::().fire_event(Atom::from("fetch")); let _ = mediator.response_chan.send(None); } } diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index c8999b52102..dd49f62d247 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -498,7 +498,7 @@ impl Runnable for ConnectionEstablishedTask { } // Step 6. - ws.upcast().fire_event("open"); + ws.upcast().fire_event(atom!("open")); } } @@ -548,7 +548,7 @@ impl Runnable for CloseTask { // Step 2. if self.failed { - ws.upcast().fire_event("error"); + ws.upcast().fire_event(atom!("error")); } // Step 3. diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 72f058c16f2..42c0d1e553d 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -138,7 +138,7 @@ impl Worker { pub fn dispatch_simple_error(address: TrustedWorkerAddress) { let worker = address.root(); - worker.upcast().fire_event("error"); + worker.upcast().fire_event(atom!("error")); } #[allow(unsafe_code)] From 04cd35914af19b88dfe1c93fa3385b4a08a577e1 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Fri, 4 Nov 2016 12:48:47 +1000 Subject: [PATCH 19/26] Update WR (resource cache changes, various optimizations). --- components/layout/webrender_helpers.rs | 2 -- components/servo/Cargo.lock | 4 ++-- ports/cef/Cargo.lock | 4 ++-- resources/shaders/clip_shared.glsl | 3 ++- resources/shaders/prim_shared.glsl | 18 ++++++++++-------- resources/shaders/ps_angle_gradient.vs.glsl | 6 ++---- resources/shaders/ps_border.vs.glsl | 7 +++---- resources/shaders/ps_box_shadow.vs.glsl | 4 ++-- resources/shaders/ps_gradient.vs.glsl | 5 ++--- resources/shaders/ps_gradient_clip.vs.glsl | 5 ++--- resources/shaders/ps_image.vs.glsl | 11 +++-------- resources/shaders/ps_text_run.vs.glsl | 2 +- resources/shaders/shared.glsl | 2 +- 13 files changed, 32 insertions(+), 41 deletions(-) diff --git a/components/layout/webrender_helpers.rs b/components/layout/webrender_helpers.rs index d58a346867c..8d32029daa8 100644 --- a/components/layout/webrender_helpers.rs +++ b/components/layout/webrender_helpers.rs @@ -523,8 +523,6 @@ impl WebRenderFrameBuilder { stacking_context: &mut webrender_traits::StackingContext) -> DisplayListId { let id = api.next_display_list_id(); - stacking_context.has_stacking_contexts = stacking_context.has_stacking_contexts || - display_list.descriptor().has_stacking_contexts; stacking_context.display_lists.push(id); self.display_lists.push((id, display_list)); id diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index c2d56f2a254..53cf496fd06 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -2737,7 +2737,7 @@ dependencies = [ [[package]] name = "webrender" version = "0.8.0" -source = "git+https://github.com/servo/webrender#2be67987a0ff7bdd4820b65283e6fc1604cc301c" +source = "git+https://github.com/servo/webrender#8b53081a3de714f8c1296e20658fabe4e75a6244" dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2762,7 +2762,7 @@ dependencies = [ [[package]] name = "webrender_traits" version = "0.8.0" -source = "git+https://github.com/servo/webrender#2be67987a0ff7bdd4820b65283e6fc1604cc301c" +source = "git+https://github.com/servo/webrender#8b53081a3de714f8c1296e20658fabe4e75a6244" dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index 2ad2a845d5f..366e54a6d18 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -2595,7 +2595,7 @@ dependencies = [ [[package]] name = "webrender" version = "0.8.0" -source = "git+https://github.com/servo/webrender#2be67987a0ff7bdd4820b65283e6fc1604cc301c" +source = "git+https://github.com/servo/webrender#8b53081a3de714f8c1296e20658fabe4e75a6244" dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2620,7 +2620,7 @@ dependencies = [ [[package]] name = "webrender_traits" version = "0.8.0" -source = "git+https://github.com/servo/webrender#2be67987a0ff7bdd4820b65283e6fc1604cc301c" +source = "git+https://github.com/servo/webrender#8b53081a3de714f8c1296e20658fabe4e75a6244" dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/resources/shaders/clip_shared.glsl b/resources/shaders/clip_shared.glsl index 981ccb3020b..2c1993b1fa5 100644 --- a/resources/shaders/clip_shared.glsl +++ b/resources/shaders/clip_shared.glsl @@ -16,7 +16,8 @@ void write_clip(ClipInfo clip) { clip.bottom_right.outer_inner_radius.x, clip.bottom_left.outer_inner_radius.x); //TODO: interpolate the final mask UV - vClipMaskUvRect = clip.mask_info.uv_rect; + vec2 texture_size = textureSize(sMask, 0); + vClipMaskUvRect = clip.mask_info.uv_rect / texture_size.xyxy; vClipMaskLocalRect = clip.mask_info.local_rect; //TODO: transform } #endif diff --git a/resources/shaders/prim_shared.glsl b/resources/shaders/prim_shared.glsl index c273ee1fad5..d6248030646 100644 --- a/resources/shaders/prim_shared.glsl +++ b/resources/shaders/prim_shared.glsl @@ -254,7 +254,8 @@ struct PrimitiveInstance { int render_task_index; int layer_index; int clip_address; - ivec3 user_data; + int sub_index; + ivec2 user_data; }; PrimitiveInstance fetch_instance(int index) { @@ -270,7 +271,8 @@ PrimitiveInstance fetch_instance(int index) { pi.render_task_index = data0.z; pi.layer_index = data0.w; pi.clip_address = data1.x; - pi.user_data = data1.yzw; + pi.sub_index = data1.y; + pi.user_data = data1.zw; return pi; } @@ -302,7 +304,10 @@ struct Primitive { vec4 local_clip_rect; int prim_index; int clip_index; - ivec3 user_data; + // when sending multiple primitives of the same type (e.g. border segments) + // this index allows the vertex shader to recognize the difference + int sub_index; + ivec2 user_data; }; Primitive load_primitive(int index) { @@ -318,8 +323,9 @@ Primitive load_primitive(int index) { prim.local_clip_rect = pg.local_clip_rect; prim.prim_index = pi.specific_prim_index; - prim.user_data = pi.user_data; prim.clip_index = pi.clip_address; + prim.sub_index = pi.sub_index; + prim.user_data = pi.user_data; return prim; } @@ -588,7 +594,6 @@ struct Image { vec4 st_rect; // Location of the image texture in the texture atlas. vec4 stretch_size_and_tile_spacing; // Size of the actual image and amount of space between // tiled instances of this image. - bool has_pixel_coords; }; Image fetch_image(int index) { @@ -599,9 +604,6 @@ Image fetch_image(int index) { image.st_rect = texelFetchOffset(sData32, uv, 0, ivec2(0, 0)); image.stretch_size_and_tile_spacing = texelFetchOffset(sData32, uv, 0, ivec2(1, 0)); - image.has_pixel_coords = image.st_rect.z < 0.0; - image.st_rect.z = abs(image.st_rect.z); - return image; } diff --git a/resources/shaders/ps_angle_gradient.vs.glsl b/resources/shaders/ps_angle_gradient.vs.glsl index eda47f8b219..e1c91b544f8 100644 --- a/resources/shaders/ps_angle_gradient.vs.glsl +++ b/resources/shaders/ps_angle_gradient.vs.glsl @@ -12,7 +12,7 @@ void main(void) { prim.layer, prim.tile); - vStopCount = int(prim.user_data.y); + vStopCount = int(prim.user_data.x); vPos = vi.local_clamped_pos; // Snap the start/end points to device pixel units. @@ -24,10 +24,8 @@ void main(void) { vStartPoint = floor(0.5 + gradient.start_end_point.xy * uDevicePixelRatio) / uDevicePixelRatio; vEndPoint = floor(0.5 + gradient.start_end_point.zw * uDevicePixelRatio) / uDevicePixelRatio; - int stop_index = int(prim.user_data.x); - for (int i=0 ; i < vStopCount ; ++i) { - GradientStop stop = fetch_gradient_stop(stop_index + i); + GradientStop stop = fetch_gradient_stop(prim.sub_index + i); vColors[i] = stop.color; vOffsets[i/4][i%4] = stop.offset.x; } diff --git a/resources/shaders/ps_border.vs.glsl b/resources/shaders/ps_border.vs.glsl index b20fc11662e..feafb695467 100644 --- a/resources/shaders/ps_border.vs.glsl +++ b/resources/shaders/ps_border.vs.glsl @@ -6,6 +6,7 @@ void main(void) { Primitive prim = load_primitive(gl_InstanceID); Border border = fetch_border(prim.prim_index); + int sub_part = prim.sub_index; vec2 tl_outer = prim.local_rect.xy; vec2 tl_inner = tl_outer + vec2(max(border.radii[0].x, border.widths.x), @@ -27,7 +28,7 @@ void main(void) { -max(border.radii[1].w, border.widths.w)); vec4 segment_rect; - switch (prim.user_data.x) { + switch (sub_part) { case PST_TOP_LEFT: segment_rect = vec4(tl_outer, tl_inner - tl_outer); break; @@ -92,9 +93,6 @@ void main(void) { vLocalRect = prim.local_rect; #endif - float x0, y0, x1, y1; - int sub_part = prim.user_data.x; - switch (sub_part) { case PST_LEFT: vBorderStyle = int(border.style.x); @@ -150,6 +148,7 @@ void main(void) { break; } + float x0, y0, x1, y1; switch (sub_part) { // These are the layer tile part PrimitivePart as uploaded by the tiling.rs case PST_TOP_LEFT: diff --git a/resources/shaders/ps_box_shadow.vs.glsl b/resources/shaders/ps_box_shadow.vs.glsl index 930aef9062e..6b45af72d65 100644 --- a/resources/shaders/ps_box_shadow.vs.glsl +++ b/resources/shaders/ps_box_shadow.vs.glsl @@ -6,14 +6,14 @@ void main(void) { Primitive prim = load_primitive(gl_InstanceID); BoxShadow bs = fetch_boxshadow(prim.prim_index); - vec4 segment_rect = fetch_instance_geometry(prim.user_data.x + prim.user_data.y); + vec4 segment_rect = fetch_instance_geometry(prim.sub_index); VertexInfo vi = write_vertex(segment_rect, prim.local_clip_rect, prim.layer, prim.tile); - RenderTaskData child_task = fetch_render_task(prim.user_data.z); + RenderTaskData child_task = fetch_render_task(prim.user_data.x); vUv.z = child_task.data1.x; // Constant offsets to inset from bilinear filtering border. diff --git a/resources/shaders/ps_gradient.vs.glsl b/resources/shaders/ps_gradient.vs.glsl index 3056dec3505..a5e6bb0f3d4 100644 --- a/resources/shaders/ps_gradient.vs.glsl +++ b/resources/shaders/ps_gradient.vs.glsl @@ -7,9 +7,8 @@ void main(void) { Primitive prim = load_primitive(gl_InstanceID); Gradient gradient = fetch_gradient(prim.prim_index); - int stop_index = prim.user_data.x + prim.user_data.y; - GradientStop g0 = fetch_gradient_stop(stop_index + 0); - GradientStop g1 = fetch_gradient_stop(stop_index + 1); + GradientStop g0 = fetch_gradient_stop(prim.sub_index + 0); + GradientStop g1 = fetch_gradient_stop(prim.sub_index + 1); vec4 segment_rect; switch (int(gradient.kind.x)) { diff --git a/resources/shaders/ps_gradient_clip.vs.glsl b/resources/shaders/ps_gradient_clip.vs.glsl index 0c926503259..62e7caeb7f7 100644 --- a/resources/shaders/ps_gradient_clip.vs.glsl +++ b/resources/shaders/ps_gradient_clip.vs.glsl @@ -7,9 +7,8 @@ void main(void) { Primitive prim = load_primitive(gl_InstanceID); Gradient gradient = fetch_gradient(prim.prim_index); - int stop_index = prim.user_data.x + prim.user_data.y; - GradientStop g0 = fetch_gradient_stop(stop_index + 0); - GradientStop g1 = fetch_gradient_stop(stop_index + 1); + GradientStop g0 = fetch_gradient_stop(prim.sub_index + 0); + GradientStop g1 = fetch_gradient_stop(prim.sub_index + 1); vec4 segment_rect; switch (int(gradient.kind.x)) { diff --git a/resources/shaders/ps_image.vs.glsl b/resources/shaders/ps_image.vs.glsl index cb0500583a6..b4e7a3e80af 100644 --- a/resources/shaders/ps_image.vs.glsl +++ b/resources/shaders/ps_image.vs.glsl @@ -23,14 +23,9 @@ void main(void) { #endif // vUv will contain how many times this image has wrapped around the image size. - vec2 st0 = image.st_rect.xy; - vec2 st1 = image.st_rect.zw; - - if (image.has_pixel_coords) { - vec2 texture_size = vec2(textureSize(sDiffuse, 0)); - st0 /= texture_size; - st1 /= texture_size; - } + vec2 texture_size = vec2(textureSize(sDiffuse, 0)); + vec2 st0 = image.st_rect.xy / texture_size; + vec2 st1 = image.st_rect.zw / texture_size; vTextureSize = st1 - st0; vTextureOffset = st0; diff --git a/resources/shaders/ps_text_run.vs.glsl b/resources/shaders/ps_text_run.vs.glsl index aaba359966d..3a6e009447e 100644 --- a/resources/shaders/ps_text_run.vs.glsl +++ b/resources/shaders/ps_text_run.vs.glsl @@ -6,7 +6,7 @@ void main(void) { Primitive prim = load_primitive(gl_InstanceID); TextRun text = fetch_text_run(prim.prim_index); - Glyph glyph = fetch_glyph(prim.user_data.x + prim.user_data.y); + Glyph glyph = fetch_glyph(prim.sub_index); vec4 local_rect = vec4(glyph.offset.xy, (glyph.uv_rect.zw - glyph.uv_rect.xy) / uDevicePixelRatio); #ifdef WR_FEATURE_TRANSFORM diff --git a/resources/shaders/shared.glsl b/resources/shaders/shared.glsl index d5202d62484..ffa16a1d770 100644 --- a/resources/shaders/shared.glsl +++ b/resources/shaders/shared.glsl @@ -25,7 +25,6 @@ #define varying in // Uniform inputs - uniform sampler2D sMask; // Fragment shader outputs out vec4 oFragColor; @@ -35,6 +34,7 @@ // Shared shader uniforms //====================================================================================== uniform sampler2D sDiffuse; +uniform sampler2D sMask; //====================================================================================== // Interpolator definitions From eb5dacb137ea13a806a0204732bac377d9257869 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Fri, 4 Nov 2016 12:49:07 +1000 Subject: [PATCH 20/26] Add mappings for F1-F12 key events. --- ports/glutin/window.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ports/glutin/window.rs b/ports/glutin/window.rs index 082fff0bb15..f473b5915c1 100644 --- a/ports/glutin/window.rs +++ b/ports/glutin/window.rs @@ -703,6 +703,19 @@ impl Window { VirtualKeyCode::Tab => Ok(Key::Tab), VirtualKeyCode::Subtract => Ok(Key::Minus), + VirtualKeyCode::F1 => Ok(Key::F1), + VirtualKeyCode::F2 => Ok(Key::F2), + VirtualKeyCode::F3 => Ok(Key::F3), + VirtualKeyCode::F4 => Ok(Key::F4), + VirtualKeyCode::F5 => Ok(Key::F5), + VirtualKeyCode::F6 => Ok(Key::F6), + VirtualKeyCode::F7 => Ok(Key::F7), + VirtualKeyCode::F8 => Ok(Key::F8), + VirtualKeyCode::F9 => Ok(Key::F9), + VirtualKeyCode::F10 => Ok(Key::F10), + VirtualKeyCode::F11 => Ok(Key::F11), + VirtualKeyCode::F12 => Ok(Key::F12), + VirtualKeyCode::NavigateBackward => Ok(Key::NavigateBackward), VirtualKeyCode::NavigateForward => Ok(Key::NavigateForward), _ => Err(()), From 2843f069334932dbf0b3a087fd53300f349390fb Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Fri, 4 Nov 2016 12:49:28 +1000 Subject: [PATCH 21/26] Add runtime switch for webrender profiler (-Z wr-stats) which can be toggled by pressing Ctrl-F12. --- components/compositing/compositor.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 55127bd64fe..d0b73928232 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -18,7 +18,7 @@ use gleam::gl::types::{GLint, GLsizei}; use image::{DynamicImage, ImageFormat, RgbImage}; use ipc_channel::ipc::{self, IpcSender, IpcSharedMemory}; use ipc_channel::router::ROUTER; -use msg::constellation_msg::{Key, KeyModifiers, KeyState}; +use msg::constellation_msg::{Key, KeyModifiers, KeyState, CONTROL}; use msg::constellation_msg::{PipelineId, PipelineIndex, PipelineNamespaceId, TraversalDirection}; use net_traits::image::base::{Image, PixelFormat}; use profile_traits::mem::{self, Reporter, ReporterRequest}; @@ -1301,7 +1301,23 @@ impl IOCompositor { } } - fn on_key_event(&self, ch: Option, key: Key, state: KeyState, modifiers: KeyModifiers) { + fn on_key_event(&mut self, + ch: Option, + key: Key, + state: KeyState, + modifiers: KeyModifiers) { + // Steal a few key events for webrender debug options. + if modifiers.contains(CONTROL) && state == KeyState::Pressed { + match key { + Key::F12 => { + let profiler_enabled = self.webrender.get_profiler_enabled(); + self.webrender.set_profiler_enabled(!profiler_enabled); + return; + } + _ => {} + } + } + let msg = ConstellationMsg::KeyEvent(ch, key, state, modifiers); if let Err(e) = self.constellation_chan.send(msg) { warn!("Sending key event to constellation failed ({}).", e); From d302cf23bc29688dc7e773059de90e62daa7d603 Mon Sep 17 00:00:00 2001 From: Jake Goldsborough Date: Thu, 3 Nov 2016 23:02:12 -0700 Subject: [PATCH 22/26] moving datetimestamping responsiblities from mach package to CI upload, swaps semicolons for dashes --- etc/ci/upload_nightly.sh | 7 ++++--- python/servo/package_commands.py | 12 +++--------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/etc/ci/upload_nightly.sh b/etc/ci/upload_nightly.sh index 7870b5b389b..842042ffd62 100755 --- a/etc/ci/upload_nightly.sh +++ b/etc/ci/upload_nightly.sh @@ -16,10 +16,11 @@ usage() { upload() { - local package_filename - package_filename="$(basename "${2}")" + local nightly_filename nightly_timestamp + nightly_timestamp="$(date -u +"%Y-%m-%dT%H-%M-%SZ")" + nightly_filename="${nightly_timestamp}-$(basename "${2}")" local -r nightly_upload_dir="s3://servo-builds/nightly/${1}" - local -r package_upload_path="${nightly_upload_dir}/${package_filename}" + local -r package_upload_path="${nightly_upload_dir}/${nightly_filename}" s3cmd --mime-type="application/octet-stream" \ put "${2}" "${package_upload_path}" s3cmd cp "${package_upload_path}" "${nightly_upload_dir}/servo-latest.${3}" diff --git a/python/servo/package_commands.py b/python/servo/package_commands.py index 010b8dfb476..103238a6e55 100644 --- a/python/servo/package_commands.py +++ b/python/servo/package_commands.py @@ -19,7 +19,6 @@ import subprocess import mako.template from mach.registrar import Registrar -from datetime import datetime from mach.decorators import ( CommandArgument, @@ -155,7 +154,6 @@ class PackageCommands(CommandBase): dir_to_build = '/'.join(binary_path.split('/')[:-1]) dir_to_root = '/'.join(binary_path.split('/')[:-3]) - now = datetime.utcnow() print("Creating Servo.app") dir_to_dmg = '/'.join(binary_path.split('/')[:-2]) + '/dmg' @@ -212,9 +210,7 @@ class PackageCommands(CommandBase): print("Creating dmg") os.symlink('/Applications', dir_to_dmg + '/Applications') dmg_path = '/'.join(dir_to_build.split('/')[:-1]) + '/' - time = now.replace(microsecond=0).isoformat() - time = time.replace(':', '-') - dmg_path += time + "-servo-tech-demo.dmg" + dmg_path += "servo-tech-demo.dmg" try: subprocess.check_call(['hdiutil', 'create', '-volname', 'Servo', dmg_path, '-srcfolder', dir_to_dmg]) except subprocess.CalledProcessError as e: @@ -229,7 +225,7 @@ class PackageCommands(CommandBase): dir_to_tar = '/'.join(dir_to_build.split('/')[:-1]) + '/brew/' if not path.exists(dir_to_tar): os.makedirs(dir_to_tar) - tar_path = dir_to_tar + now.strftime("servo-%Y-%m-%d.tar.gz") + tar_path = dir_to_tar + "servo.tar.gz" if path.exists(dir_to_brew): print("Cleaning up from previous packaging") delete(dir_to_brew) @@ -316,9 +312,7 @@ class PackageCommands(CommandBase): os.close(runservo) print("Creating tarball") - time = datetime.utcnow().replace(microsecond=0).isoformat() - time = time.replace(':', "-") - tar_path = path.join(self.get_target_dir(), time + '-servo-tech-demo.tar.gz') + tar_path = path.join(self.get_target_dir(), 'servo-tech-demo.tar.gz') archive_deterministically(dir_to_temp, tar_path, prepend_path='servo/') From 4eec2c6ddcf8928546eb551f19dc975b08a7573f Mon Sep 17 00:00:00 2001 From: zakorgyula Date: Mon, 19 Sep 2016 11:11:08 +0200 Subject: [PATCH 23/26] Apply the new device crate changes --- components/bluetooth/lib.rs | 23 +++++++++++++++++++++-- components/servo/Cargo.lock | 8 ++++---- ports/cef/Cargo.lock | 8 ++++---- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/components/bluetooth/lib.rs b/components/bluetooth/lib.rs index 12ba83244be..d7f251da612 100644 --- a/components/bluetooth/lib.rs +++ b/components/bluetooth/lib.rs @@ -312,6 +312,17 @@ impl BluetoothManager { device_id } + fn device_from_service_id(&self, service_id: &str) -> Option { + let device_id = match self.service_to_device.get(service_id) { + Some(id) => id, + None => return None, + }; + match self.cached_devices.get(device_id) { + Some(d) => Some(d.clone()), + None => None, + } + } + // Service fn get_and_cache_gatt_services(&mut self, @@ -617,11 +628,15 @@ impl BluetoothManager { Some(a) => a, None => return drop(sender.send(Err(BluetoothError::Type(ADAPTER_ERROR.to_string())))), }; + let device = match self.device_from_service_id(&service_id) { + Some(device) => device, + None => return drop(sender.send(Err(BluetoothError::NotFound))), + }; let primary_service = match self.get_gatt_service(&mut adapter, &service_id) { Some(s) => s, None => return drop(sender.send(Err(BluetoothError::NotFound))), }; - let services = primary_service.get_includes().unwrap_or(vec!()); + let services = primary_service.get_includes(device).unwrap_or(vec!()); for service in services { if let Ok(service_uuid) = service.get_uuid() { if uuid == service_uuid { @@ -644,11 +659,15 @@ impl BluetoothManager { Some(a) => a, None => return drop(sender.send(Err(BluetoothError::Type(ADAPTER_ERROR.to_string())))), }; + let device = match self.device_from_service_id(&service_id) { + Some(device) => device, + None => return drop(sender.send(Err(BluetoothError::NotFound))), + }; let primary_service = match self.get_gatt_service(&mut adapter, &service_id) { Some(s) => s, None => return drop(sender.send(Err(BluetoothError::NotFound))), }; - let services = primary_service.get_includes().unwrap_or(vec!()); + let services = primary_service.get_includes(device).unwrap_or(vec!()); let mut services_vec = vec!(); for service in services { if let Ok(service_uuid) = service.get_uuid() { diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 291bae77ee7..7d917e7db05 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -217,7 +217,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "blurz" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dbus 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -515,10 +515,10 @@ dependencies = [ [[package]] name = "device" version = "0.0.1" -source = "git+https://github.com/servo/devices#6d40b1412fb496b0d9434ee2f46e9dfc4dc67ae7" +source = "git+https://github.com/servo/devices#4a6ab4be0de229fafa6aa3657a5702646832ba08" dependencies = [ "blurdroid 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "blurz 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "blurz 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2905,7 +2905,7 @@ dependencies = [ "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" "checksum blurdroid 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5fce4ea3366b583e9d49e1aa3a42252e53b42911bccd06f31c3e81c48ccfc79e" -"checksum blurz 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96134f6ac62fa6925761dbdb4096617d65d7c1d383d90e5c2d4c489919f773dc" +"checksum blurz 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4d49796c8d5a1b5f6b2b8686e46ed4ab842987c477f765b69f1d3e8df6072608" "checksum brotli 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "bff2d5511b5ba5840f46cc3f9c0c3ab09db20e9b9a4db344ef7df3fb547a627a" "checksum browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)" = "" "checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index 6ba7b681ec4..af3380f93bd 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -188,7 +188,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "blurz" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dbus 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -470,10 +470,10 @@ dependencies = [ [[package]] name = "device" version = "0.0.1" -source = "git+https://github.com/servo/devices#6d40b1412fb496b0d9434ee2f46e9dfc4dc67ae7" +source = "git+https://github.com/servo/devices#4a6ab4be0de229fafa6aa3657a5702646832ba08" dependencies = [ "blurdroid 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "blurz 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "blurz 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2763,7 +2763,7 @@ dependencies = [ "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" "checksum blurdroid 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5fce4ea3366b583e9d49e1aa3a42252e53b42911bccd06f31c3e81c48ccfc79e" -"checksum blurz 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96134f6ac62fa6925761dbdb4096617d65d7c1d383d90e5c2d4c489919f773dc" +"checksum blurz 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4d49796c8d5a1b5f6b2b8686e46ed4ab842987c477f765b69f1d3e8df6072608" "checksum brotli 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "bff2d5511b5ba5840f46cc3f9c0c3ab09db20e9b9a4db344ef7df3fb547a627a" "checksum browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)" = "" "checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" From 277c6d0154731c426bbf3fa76aeb63444b812eea Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 18 Oct 2016 18:04:58 +0200 Subject: [PATCH 24/26] Move ReferrerPolicy to net_traits. --- components/msg/constellation_msg.rs | 12 ------------ components/net/fetch/methods.rs | 3 +-- components/net/file_loader.rs | 4 ++-- components/net/http_loader.rs | 4 ++-- components/net_traits/lib.rs | 20 +++++++++++++++++++- components/net_traits/request.rs | 3 ++- components/script/dom/bindings/trace.rs | 4 ++-- components/script/dom/document.rs | 5 ++--- components/script/dom/htmlanchorelement.rs | 2 +- components/script/dom/htmllinkelement.rs | 3 +-- components/script/dom/request.rs | 2 +- components/script/dom/window.rs | 4 ++-- components/script/dom/xmlhttprequest.rs | 4 ++-- components/script/script_thread.rs | 4 ++-- components/script_traits/lib.rs | 4 ++-- tests/unit/net/fetch.rs | 3 ++- tests/unit/net/http_loader.rs | 4 ++-- tests/unit/net/resource_thread.rs | 4 ++-- 18 files changed, 47 insertions(+), 42 deletions(-) diff --git a/components/msg/constellation_msg.rs b/components/msg/constellation_msg.rs index e87bac92fd4..dba47caa4bf 100644 --- a/components/msg/constellation_msg.rs +++ b/components/msg/constellation_msg.rs @@ -305,15 +305,3 @@ pub enum FrameType { IFrame, MozBrowserIFrame, } - -/// [Policies](https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-states) -/// for providing a referrer header for a request -#[derive(Clone, Copy, Debug, Deserialize, HeapSizeOf, Serialize)] -pub enum ReferrerPolicy { - NoReferrer, - NoReferrerWhenDowngrade, - Origin, - SameOrigin, - OriginWhenCrossOrigin, - UnsafeUrl, -} diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 83bd73bbf74..0e066e918aa 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -23,8 +23,7 @@ use hyper::mime::{Mime, SubLevel, TopLevel}; use hyper::status::StatusCode; use hyper_serde::Serde; use mime_guess::guess_mime_type; -use msg::constellation_msg::ReferrerPolicy; -use net_traits::{FetchTaskTarget, FetchMetadata, NetworkError}; +use net_traits::{FetchTaskTarget, FetchMetadata, NetworkError, ReferrerPolicy}; use net_traits::request::{CacheMode, CredentialsMode, Destination}; use net_traits::request::{RedirectMode, Referrer, Request, RequestMode, ResponseTainting}; use net_traits::request::{Type, Origin, Window}; diff --git a/components/net/file_loader.rs b/components/net/file_loader.rs index 1309a305682..7ef53b0ac69 100644 --- a/components/net/file_loader.rs +++ b/components/net/file_loader.rs @@ -5,8 +5,8 @@ use about_loader; use mime_classifier::MimeClassifier; use mime_guess::guess_mime_type; -use msg::constellation_msg::{PipelineId, ReferrerPolicy}; -use net_traits::{LoadConsumer, LoadData, LoadOrigin, Metadata, NetworkError}; +use msg::constellation_msg::PipelineId; +use net_traits::{LoadConsumer, LoadData, LoadOrigin, Metadata, NetworkError, ReferrerPolicy}; use net_traits::ProgressMsg::{Done, Payload}; use resource_thread::{CancellationListener, ProgressSender}; use resource_thread::{send_error, start_sending_sniffed_opt}; diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 5b15166b9dd..0adf15b700e 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -28,9 +28,9 @@ use hyper_serde::Serde; use ipc_channel::ipc::{self, IpcSender}; use log; use mime_classifier::MimeClassifier; -use msg::constellation_msg::{PipelineId, ReferrerPolicy}; +use msg::constellation_msg::PipelineId; use net_traits::{CookieSource, IncludeSubdomains, LoadConsumer, LoadContext, LoadData}; -use net_traits::{CustomResponse, CustomResponseMediator, Metadata, NetworkError}; +use net_traits::{CustomResponse, CustomResponseMediator, Metadata, NetworkError, ReferrerPolicy}; use net_traits::ProgressMsg::{Done, Payload}; use net_traits::hosts::replace_hosts; use net_traits::response::HttpsState; diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index ce6b3e8b524..982532a2bf4 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -42,7 +42,7 @@ use hyper::mime::{Attr, Mime}; use hyper_serde::Serde; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use ipc_channel::router::ROUTER; -use msg::constellation_msg::{PipelineId, ReferrerPolicy}; +use msg::constellation_msg::PipelineId; use request::{Request, RequestInit}; use response::{HttpsState, Response}; use std::io::Error as IOError; @@ -109,6 +109,24 @@ pub struct CustomResponseMediator { pub load_url: Url } +/// [Policies](https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-states) +/// for providing a referrer header for a request +#[derive(Clone, Copy, Debug, Deserialize, HeapSizeOf, Serialize)] +pub enum ReferrerPolicy { + /// "no-referrer" + NoReferrer, + /// "no-referrer-when-downgrade" + NoReferrerWhenDowngrade, + /// "origin" + Origin, + /// "same-origin" + SameOrigin, + /// "origin-when-cross-origin" + OriginWhenCrossOrigin, + /// "unsafe-url" + UnsafeUrl, +} + #[derive(Clone, Deserialize, Serialize, HeapSizeOf)] pub struct LoadData { pub url: Url, diff --git a/components/net_traits/request.rs b/components/net_traits/request.rs index 10b202cd41a..0e820a2728c 100644 --- a/components/net_traits/request.rs +++ b/components/net_traits/request.rs @@ -2,9 +2,10 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use ReferrerPolicy; use hyper::header::Headers; use hyper::method::Method; -use msg::constellation_msg::{PipelineId, ReferrerPolicy}; +use msg::constellation_msg::PipelineId; use std::cell::{Cell, RefCell}; use std::default::Default; use std::mem::swap; diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 03a1d964808..59a6178e462 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -58,8 +58,8 @@ use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSTracer, TraceKind}; use js::jsval::JSVal; use js::rust::Runtime; use libc; -use msg::constellation_msg::{FrameId, FrameType, PipelineId, ReferrerPolicy}; -use net_traits::{Metadata, NetworkError, ResourceThreads}; +use msg::constellation_msg::{FrameId, FrameType, PipelineId}; +use net_traits::{Metadata, NetworkError, ReferrerPolicy, ResourceThreads}; use net_traits::filemanager_thread::RelativePos; use net_traits::image::base::{Image, ImageMetadata}; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread}; diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 91824f0e354..83257ac7904 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -96,9 +96,8 @@ use ipc_channel::ipc::{self, IpcSender}; use js::jsapi::{JSContext, JSObject, JSRuntime}; use js::jsapi::JS_GetRuntime; use msg::constellation_msg::{ALT, CONTROL, SHIFT, SUPER}; -use msg::constellation_msg::{FrameId, ReferrerPolicy}; -use msg::constellation_msg::{Key, KeyModifiers, KeyState}; -use net_traits::{FetchResponseMsg, IpcSend}; +use msg::constellation_msg::{FrameId, Key, KeyModifiers, KeyState}; +use net_traits::{FetchResponseMsg, IpcSend, ReferrerPolicy}; use net_traits::CookieSource::NonHTTP; use net_traits::CoreResourceMsg::{GetCookiesForUrl, SetCookiesForUrl}; use net_traits::request::RequestInit; diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index 2cd5278c4bc..7683fc02330 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -25,7 +25,7 @@ use dom::node::{Node, document_from_node, window_from_node}; use dom::urlhelper::UrlHelper; use dom::virtualmethods::VirtualMethods; use html5ever_atoms::LocalName; -use msg::constellation_msg::ReferrerPolicy; +use net_traits::ReferrerPolicy; use num_traits::ToPrimitive; use script_traits::MozBrowserEvent; use std::default::Default; diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index f4cd1ae0718..d2897b42081 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -30,8 +30,7 @@ use hyper::mime::{Mime, TopLevel, SubLevel}; use hyper_serde::Serde; use ipc_channel::ipc; use ipc_channel::router::ROUTER; -use msg::constellation_msg::ReferrerPolicy; -use net_traits::{FetchResponseListener, FetchMetadata, Metadata, NetworkError}; +use net_traits::{FetchResponseListener, FetchMetadata, Metadata, NetworkError, ReferrerPolicy}; use net_traits::request::{CredentialsMode, Destination, RequestInit, Type as RequestType}; use network_listener::{NetworkListener, PreInvoke}; use script_layout_interface::message::Msg; diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 3358fc63ef5..a748b18715c 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -25,7 +25,7 @@ use dom::headers::{Guard, Headers}; use dom::promise::Promise; use dom::xmlhttprequest::Extractable; use hyper::method::Method as HttpMethod; -use msg::constellation_msg::ReferrerPolicy as MsgReferrerPolicy; +use net_traits::ReferrerPolicy as MsgReferrerPolicy; use net_traits::request::{Origin, Window}; use net_traits::request::CacheMode as NetTraitsRequestCache; use net_traits::request::CredentialsMode as NetTraitsRequestCredentials; diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 61eb7af6142..c77ed80cff9 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -52,8 +52,8 @@ use js::jsapi::{HandleObject, HandleValue, JSAutoCompartment, JSContext}; use js::jsapi::{JS_GC, JS_GetRuntime, SetWindowProxy}; use js::jsval::UndefinedValue; use js::rust::Runtime; -use msg::constellation_msg::{FrameType, PipelineId, ReferrerPolicy}; -use net_traits::ResourceThreads; +use msg::constellation_msg::{FrameType, PipelineId}; +use net_traits::{ResourceThreads, ReferrerPolicy}; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread}; use net_traits::storage_thread::StorageType; use num_traits::ToPrimitive; diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 81fe7d22b11..c404c482308 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -48,9 +48,9 @@ use ipc_channel::router::ROUTER; use js::jsapi::{JSContext, JS_ParseJSON}; use js::jsapi::JS_ClearPendingException; use js::jsval::{JSVal, NullValue, UndefinedValue}; -use msg::constellation_msg::{PipelineId, ReferrerPolicy}; +use msg::constellation_msg::PipelineId; use net_traits::{CoreResourceThread, FetchMetadata, FilteredMetadata}; -use net_traits::{FetchResponseListener, LoadOrigin, NetworkError}; +use net_traits::{FetchResponseListener, LoadOrigin, NetworkError, ReferrerPolicy}; use net_traits::CoreResourceMsg::Fetch; use net_traits::request::{CredentialsMode, Destination, RequestInit, RequestMode}; use net_traits::trim_http_whitespace; diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index d48552f14f6..86d742680ee 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -72,8 +72,8 @@ use js::jsval::UndefinedValue; use js::rust::Runtime; use layout_wrapper::ServoLayoutNode; use mem::heap_size_of_self_and_children; -use msg::constellation_msg::{FrameId, FrameType, PipelineId, PipelineNamespace, ReferrerPolicy}; -use net_traits::{CoreResourceMsg, IpcSend, Metadata, ResourceThreads}; +use msg::constellation_msg::{FrameId, FrameType, PipelineId, PipelineNamespace}; +use net_traits::{CoreResourceMsg, IpcSend, Metadata, ReferrerPolicy, ResourceThreads}; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread}; use net_traits::request::{CredentialsMode, Destination, RequestInit}; use network_listener::NetworkListener; diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index a308c9e3dab..557d1eb1139 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -55,8 +55,8 @@ use hyper::method::Method; use ipc_channel::ipc::{IpcReceiver, IpcSender}; use libc::c_void; use msg::constellation_msg::{FrameId, FrameType, Key, KeyModifiers, KeyState}; -use msg::constellation_msg::{PipelineId, PipelineNamespaceId, ReferrerPolicy, TraversalDirection}; -use net_traits::ResourceThreads; +use msg::constellation_msg::{PipelineId, PipelineNamespaceId, TraversalDirection}; +use net_traits::{ReferrerPolicy, ResourceThreads}; use net_traits::image::base::Image; use net_traits::image_cache_thread::ImageCacheThread; use net_traits::response::HttpsState; diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs index 38b1c858c71..308ef309204 100644 --- a/tests/unit/net/fetch.rs +++ b/tests/unit/net/fetch.rs @@ -20,9 +20,10 @@ use hyper::server::{Handler, Listening, Server}; use hyper::server::{Request as HyperRequest, Response as HyperResponse}; use hyper::status::StatusCode; use hyper::uri::RequestUri; -use msg::constellation_msg::{ReferrerPolicy, TEST_PIPELINE_ID}; +use msg::constellation_msg::TEST_PIPELINE_ID; use net::fetch::cors_cache::CORSCache; use net::fetch::methods::{fetch, fetch_with_cors_cache}; +use net_traits::ReferrerPolicy; use net_traits::request::{Origin, RedirectMode, Referrer, Request, RequestMode}; use net_traits::response::{CacheState, Response, ResponseBody, ResponseType}; use std::fs::File; diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs index 0c1f827c7a5..d247e9283c7 100644 --- a/tests/unit/net/http_loader.rs +++ b/tests/unit/net/http_loader.rs @@ -18,7 +18,7 @@ use hyper::http::RawStatus; use hyper::method::Method; use hyper::mime::{Mime, SubLevel, TopLevel}; use hyper::status::StatusCode; -use msg::constellation_msg::{PipelineId, ReferrerPolicy, TEST_PIPELINE_ID}; +use msg::constellation_msg::{PipelineId, TEST_PIPELINE_ID}; use net::cookie::Cookie; use net::cookie_storage::CookieStorage; use net::hsts::HstsEntry; @@ -26,7 +26,7 @@ use net::http_loader::{HttpRequest, HttpRequestFactory, HttpState, LoadError, UI use net::http_loader::{HttpResponse, LoadErrorType}; use net::resource_thread::{AuthCacheEntry, CancellationListener}; use net_traits::{CookieSource, IncludeSubdomains, LoadContext, LoadData}; -use net_traits::{CustomResponse, LoadOrigin, Metadata}; +use net_traits::{CustomResponse, LoadOrigin, Metadata, ReferrerPolicy}; use std::borrow::Cow; use std::io::{self, Cursor, Read, Write}; use std::sync::{Arc, RwLock, mpsc}; diff --git a/tests/unit/net/resource_thread.rs b/tests/unit/net/resource_thread.rs index 860fa35f2e0..a8c95c61bad 100644 --- a/tests/unit/net/resource_thread.rs +++ b/tests/unit/net/resource_thread.rs @@ -3,10 +3,10 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use ipc_channel::ipc; -use msg::constellation_msg::{PipelineId, ReferrerPolicy}; +use msg::constellation_msg::PipelineId; use net::resource_thread::new_core_resource_thread; use net_traits::{CoreResourceMsg, LoadConsumer, LoadContext, LoadData}; -use net_traits::{LoadOrigin, NetworkError, ProgressMsg}; +use net_traits::{LoadOrigin, NetworkError, ProgressMsg, ReferrerPolicy}; use net_traits::hosts::{host_replacement, parse_hostsfile}; use profile_traits::time::ProfilerChan; use std::borrow::ToOwned; From e15d54edfd0bb63132137b7b2905a3da253bf2cf Mon Sep 17 00:00:00 2001 From: zakorgyula Date: Mon, 3 Oct 2016 22:09:52 +0200 Subject: [PATCH 25/26] WebBluetooth Test API --- components/bluetooth/Cargo.toml | 3 +- components/bluetooth/lib.rs | 90 +++- components/bluetooth/test.rs | 501 ++++++++++++++++++ components/bluetooth_traits/lib.rs | 1 + components/script/dom/mod.rs | 1 + components/script/dom/testrunner.rs | 53 ++ .../script/dom/webidls/TestRunner.webidl | 16 + components/script/dom/webidls/Window.webidl | 7 + components/script/dom/window.rs | 8 + components/servo/Cargo.lock | 11 + ports/cef/Cargo.lock | 11 + resources/gatt_blacklist.txt | 11 +- resources/package-prefs.json | 1 + resources/prefs.json | 1 + 14 files changed, 701 insertions(+), 14 deletions(-) create mode 100644 components/bluetooth/test.rs create mode 100644 components/script/dom/testrunner.rs create mode 100644 components/script/dom/webidls/TestRunner.webidl diff --git a/components/bluetooth/Cargo.toml b/components/bluetooth/Cargo.toml index e1ea441e267..7ee5f430751 100644 --- a/components/bluetooth/Cargo.toml +++ b/components/bluetooth/Cargo.toml @@ -12,10 +12,11 @@ path = "lib.rs" [dependencies] bitflags = "0.7" bluetooth_traits = {path = "../bluetooth_traits"} -device = {git = "https://github.com/servo/devices"} +device = {git = "https://github.com/servo/devices", features = ["bluetooth-test"]} ipc-channel = "0.5" rand = "0.3" util = {path = "../util"} +uuid = {version = "0.3.1", features = ["v4"]} [target.'cfg(target_os = "linux")'.dependencies] tinyfiledialogs = {git = "https://github.com/jdm/tinyfiledialogs"} diff --git a/components/bluetooth/lib.rs b/components/bluetooth/lib.rs index d7f251da612..e3d4eba1a24 100644 --- a/components/bluetooth/lib.rs +++ b/components/bluetooth/lib.rs @@ -11,17 +11,17 @@ extern crate rand; #[cfg(target_os = "linux")] extern crate tinyfiledialogs; extern crate util; +extern crate uuid; + +pub mod test; use bluetooth_traits::{BluetoothCharacteristicMsg, BluetoothCharacteristicsMsg}; use bluetooth_traits::{BluetoothDescriptorMsg, BluetoothDescriptorsMsg}; use bluetooth_traits::{BluetoothDeviceMsg, BluetoothError, BluetoothMethodMsg}; use bluetooth_traits::{BluetoothResult, BluetoothServiceMsg, BluetoothServicesMsg}; use bluetooth_traits::scanfilter::{BluetoothScanfilter, BluetoothScanfilterSequence, RequestDeviceoptions}; -use device::bluetooth::BluetoothAdapter; -use device::bluetooth::BluetoothDevice; -use device::bluetooth::BluetoothGATTCharacteristic; -use device::bluetooth::BluetoothGATTDescriptor; -use device::bluetooth::BluetoothGATTService; +use device::bluetooth::{BluetoothAdapter, BluetoothDevice, BluetoothGATTCharacteristic}; +use device::bluetooth::{BluetoothGATTDescriptor, BluetoothGATTService}; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use rand::Rng; use std::borrow::ToOwned; @@ -33,6 +33,8 @@ use util::thread::spawn_named; const ADAPTER_ERROR: &'static str = "No adapter found"; +const ADAPTER_NOT_POWERED_ERROR: &'static str = "Bluetooth adapter not powered"; + // A transaction not completed within 30 seconds shall time out. Such a transaction shall be considered to have failed. // https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=286439 (Vol. 3, page 480) const MAXIMUM_TRANSACTION_TIME: u8 = 30; @@ -71,7 +73,12 @@ macro_rules! return_if_cached( macro_rules! get_adapter_or_return_error( ($bl_manager:expr, $sender:expr) => ( match $bl_manager.get_or_create_adapter() { - Some(adapter) => adapter, + Some(adapter) => { + if !adapter.is_powered().unwrap_or(false) { + return drop($sender.send(Err(BluetoothError::Type(ADAPTER_NOT_POWERED_ERROR.to_string())))) + } + adapter + }, None => return drop($sender.send(Err(BluetoothError::Type(ADAPTER_ERROR.to_string())))), } ); @@ -155,6 +162,13 @@ fn matches_filters(device: &BluetoothDevice, filters: &BluetoothScanfilterSequen return filters.iter().any(|f| matches_filter(device, f)) } +fn is_mock_adapter(adapter: &BluetoothAdapter) -> bool { + match adapter { + &BluetoothAdapter::Mock(_) => true, + _ => false, + } +} + pub struct BluetoothManager { receiver: IpcReceiver, adapter: Option, @@ -228,6 +242,9 @@ impl BluetoothManager { BluetoothMethodMsg::WriteValue(id, value, sender) => { self.write_value(id, value, sender) }, + BluetoothMethodMsg::Test(data_set_name, sender) => { + self.test(data_set_name, sender) + } BluetoothMethodMsg::Exit => { break }, @@ -235,13 +252,46 @@ impl BluetoothManager { } } + // Test + + fn test(&mut self, data_set_name: String, sender: IpcSender>) { + self.address_to_id.clear(); + self.service_to_device.clear(); + self.characteristic_to_service.clear(); + self.descriptor_to_characteristic.clear(); + self.cached_devices.clear(); + self.cached_services.clear(); + self.cached_characteristics.clear(); + self.cached_descriptors.clear(); + self.allowed_services.clear(); + self.adapter = BluetoothAdapter::init_mock().ok(); + match test::test(self, data_set_name) { + Ok(_) => { + let _ = sender.send(Ok(())); + }, + Err(error) => { + let _ = sender.send(Err(BluetoothError::Type(error.description().to_owned()))); + }, + } + } + // Adapter - fn get_or_create_adapter(&mut self) -> Option { + pub fn get_or_create_adapter(&mut self) -> Option { let adapter_valid = self.adapter.as_ref().map_or(false, |a| a.get_address().is_ok()); if !adapter_valid { self.adapter = BluetoothAdapter::init().ok(); } + + let adapter = match self.adapter.as_ref() { + Some(adapter) => adapter, + None => return None, + }; + + if is_mock_adapter(adapter) && !adapter.is_present().unwrap_or(false) { + return None; + } + self.adapter.clone() } @@ -270,7 +320,16 @@ impl BluetoothManager { } #[cfg(target_os = "linux")] - fn select_device(&mut self, devices: Vec) -> Option { + fn select_device(&mut self, devices: Vec, adapter: &BluetoothAdapter) -> Option { + if is_mock_adapter(adapter) { + for device in devices { + if let Ok(address) = device.get_address() { + return Some(address); + } + } + return None; + } + let mut dialog_rows: Vec = vec!(); for device in devices { dialog_rows.extend_from_slice(&[device.get_address().unwrap_or("".to_string()), @@ -291,7 +350,7 @@ impl BluetoothManager { } #[cfg(not(target_os = "linux"))] - fn select_device(&mut self, devices: Vec) -> Option { + fn select_device(&mut self, devices: Vec, _adapter: &BluetoothAdapter) -> Option { for device in devices { if let Ok(address) = device.get_address() { return Some(address); @@ -475,7 +534,9 @@ impl BluetoothManager { let mut adapter = get_adapter_or_return_error!(self, sender); if let Ok(ref session) = adapter.create_discovery_session() { if session.start_discovery().is_ok() { - thread::sleep(Duration::from_millis(DISCOVERY_TIMEOUT_MS)); + if !is_mock_adapter(&adapter) { + thread::sleep(Duration::from_millis(DISCOVERY_TIMEOUT_MS)); + } } let _ = session.stop_discovery(); } @@ -492,7 +553,7 @@ impl BluetoothManager { } // Step 8. - if let Some(address) = self.select_device(matched_devices) { + if let Some(address) = self.select_device(matched_devices, &adapter) { let device_id = match self.address_to_id.get(&address) { Some(id) => id.clone(), None => return drop(sender.send(Err(BluetoothError::NotFound))), @@ -528,7 +589,12 @@ impl BluetoothManager { for _ in 0..MAXIMUM_TRANSACTION_TIME { match d.is_connected().unwrap_or(false) { true => return drop(sender.send(Ok(true))), - false => thread::sleep(Duration::from_millis(CONNECTION_TIMEOUT_MS)), + false => { + if is_mock_adapter(&adapter) { + break; + } + thread::sleep(Duration::from_millis(CONNECTION_TIMEOUT_MS)); + }, } } return drop(sender.send(Err(BluetoothError::Network))); diff --git a/components/bluetooth/test.rs b/components/bluetooth/test.rs new file mode 100644 index 00000000000..ed0b296f2ba --- /dev/null +++ b/components/bluetooth/test.rs @@ -0,0 +1,501 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use BluetoothManager; +use device::bluetooth::{BluetoothAdapter, BluetoothDevice}; +use device::bluetooth::{BluetoothGATTCharacteristic, BluetoothGATTDescriptor, BluetoothGATTService}; +use std::borrow::ToOwned; +use std::cell::RefCell; +use std::collections::HashSet; +use std::error::Error; +use std::string::String; +use uuid::Uuid; + +thread_local!(pub static CACHED_IDS: RefCell> = RefCell::new(HashSet::new())); + +const ADAPTER_ERROR: &'static str = "No adapter found"; +const WRONG_DATA_SET_ERROR: &'static str = "Wrong data set name was provided"; +const READ_FLAG: &'static str = "read"; +const WRITE_FLAG: &'static str = "write"; + +// Adapter names +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=65 +const NOT_PRESENT_ADAPTER: &'static str = "NotPresentAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=83 +const NOT_POWERED_ADAPTER: &'static str = "NotPoweredAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=118 +const EMPTY_ADAPTER: &'static str = "EmptyAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=126 +const GLUCOSE_HEART_RATE_ADAPTER: &'static str = "GlucoseHeartRateAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=135 +const UNICODE_DEVICE_ADAPTER: &'static str = "UnicodeDeviceAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=205 +const MISSING_SERVICE_HEART_RATE_ADAPTER: &'static str = "MissingServiceHeartRateAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=219 +const MISSING_CHARACTERISTIC_HEART_RATE_ADAPTER: &'static str = "MissingCharacteristicHeartRateAdapter"; +const MISSING_DESCRIPTOR_HEART_RATE_ADAPTER: &'static str = "MissingDescriptorHeartRateAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=234 +const HEART_RATE_ADAPTER: &'static str = "HeartRateAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=250 +const EMPTY_NAME_HEART_RATE_ADAPTER: &'static str = "EmptyNameHeartRateAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=267 +const NO_NAME_HEART_RATE_ADAPTER: &'static str = "NoNameHeartRateAdapter"; +// https://cs.chromium.org/chromium/src/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.h?l=284 +const TWO_HEART_RATE_SERVICES_ADAPTER: &'static str = "TwoHeartRateServicesAdapter"; +const BLACKLIST_TEST_ADAPTER: &'static str = "BlacklistTestAdapter"; + +// Device names +const CONNECTABLE_DEVICE_NAME: &'static str = "Connectable Device"; +const EMPTY_DEVICE_NAME: &'static str = ""; +// https://webbluetoothcg.github.io/web-bluetooth/tests.html#glucosedevice +const GLUCOSE_DEVICE_NAME: &'static str = "Glucose Device"; +// https://webbluetoothcg.github.io/web-bluetooth/tests.html#heartratedevice +const HEART_RATE_DEVICE_NAME: &'static str = "Heart Rate Device"; +const UNICODE_DEVICE_NAME: &'static str = "❤❤❤❤❤❤❤❤❤"; + +// Device addresses +const CONNECTABLE_DEVICE_ADDRESS: &'static str = "00:00:00:00:00:04"; +// https://webbluetoothcg.github.io/web-bluetooth/tests.html#glucosedevice +const GLUCOSE_DEVICE_ADDRESS: &'static str = "00:00:00:00:00:02"; +// https://webbluetoothcg.github.io/web-bluetooth/tests.html#heartratedevice +const HEART_RATE_DEVICE_ADDRESS: &'static str = "00:00:00:00:00:03"; +const UNICODE_DEVICE_ADDRESS: &'static str = "00:00:00:00:00:01"; + +// Service UUIDs +const BLACKLIST_TEST_SERVICE_UUID: &'static str = "611c954a-263b-4f4a-aab6-01ddb953f985"; +// https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.device_information.xml +const DEVICE_INFORMATION_UUID: &'static str = "0000180a-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.generic_access.xml +const GENERIC_ACCESS_SERVICE_UUID: &'static str = "00001800-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.glucose.xml +const GLUCOSE_SERVICE_UUID: &'static str = "00001808-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.heart_rate.xml +const HEART_RATE_SERVICE_UUID: &'static str = "0000180d-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.service.human_interface_device.xml +const HUMAN_INTERFACE_DEVICE_SERVICE_UUID: &'static str = "00001812-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.tx_power.xml +const TX_POWER_SERVICE_UUID: &'static str = "00001804-0000-1000-8000-00805f9b34fb"; + +// Characteristic UUIDs +const BLACKLIST_EXCLUDE_READS_CHARACTERISTIC_UUID: &'static str = "bad1c9a2-9a5b-4015-8b60-1579bbbf2135"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.characteristic.body_sensor_location.xml +const BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID: &'static str = "00002a38-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.characteristic.gap.device_name.xml +const DEVICE_NAME_CHARACTERISTIC_UUID: &'static str = "00002a00-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.characteristic.heart_rate_measurement.xml +const HEART_RATE_MEASUREMENT_CHARACTERISTIC_UUID: &'static str = "00002a37-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.characteristic.gap.peripheral_privacy_flag.xml +const PERIPHERAL_PRIVACY_FLAG_CHARACTERISTIC_UUID: &'static str = "00002a02-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.characteristic.serial_number_string.xml +const SERIAL_NUMBER_STRING_UUID: &'static str = "00002a25-0000-1000-8000-00805f9b34fb"; + +// Descriptor UUIDs +const BLACKLIST_EXCLUDE_READS_DESCRIPTOR_UUID: &'static str = "aaaaaaaa-aaaa-1181-0510-810819516110"; +const BLACKLIST_DESCRIPTOR_UUID: &'static str = "07711111-6104-0970-7011-1107105110aaa"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.descriptor.gatt.characteristic_user_description.xml +const CHARACTERISTIC_USER_DESCRIPTION_UUID: &'static str = "00002901-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.descriptor.gatt.client_characteristic_configuration.xml +const CLIENT_CHARACTERISTIC_CONFIGURATION_UUID: &'static str = "00002902-0000-1000-8000-00805f9b34fb"; +// https://www.bluetooth.com/specifications/gatt/ +// viewer?attributeXmlFile=org.bluetooth.descriptor.number_of_digitals.xml +const NUMBER_OF_DIGITALS_UUID: &'static str = "00002909-0000-1000-8000-00805f9b34fb"; + +const HEART_RATE_DEVICE_NAME_DESCRIPTION: &'static str = "The name of this device."; + +fn generate_id() -> Uuid { + let mut id = Uuid::nil(); + let mut generated = false; + while !generated { + id = Uuid::new_v4(); + CACHED_IDS.with(|cache| + if !cache.borrow().contains(&id) { + cache.borrow_mut().insert(id.clone()); + generated = true; + } + ); + } + id +} + +// Set the adapter's name, is_powered and is_discoverable attributes +fn set_adapter(adapter: &BluetoothAdapter, adapter_name: String) -> Result<(), Box> { + try!(adapter.set_name(adapter_name)); + try!(adapter.set_powered(true)); + try!(adapter.set_discoverable(true)); + Ok(()) +} + +// Create Device +fn create_device(adapter: &BluetoothAdapter, + name: String, + address: String) + -> Result> { + let device = try!(BluetoothDevice::create_mock_device(adapter.clone(), generate_id().to_string())); + try!(device.set_name(Some(name))); + try!(device.set_address(address)); + try!(device.set_connectable(true)); + Ok(device) +} + +// Create Device with UUIDs +fn create_device_with_uuids(adapter: &BluetoothAdapter, + name: String, + address: String, + uuids: Vec) + -> Result> { + let device = try!(create_device(adapter, name, address)); + try!(device.set_uuids(uuids)); + Ok(device) +} + +// Create Service +fn create_service(device: &BluetoothDevice, + uuid: String) + -> Result> { + let service = try!(BluetoothGATTService::create_mock_service(device.clone(), generate_id().to_string())); + try!(service.set_uuid(uuid)); + Ok(service) +} + +// Create Characteristic +fn create_characteristic(service: &BluetoothGATTService, + uuid: String) + -> Result> { + let characteristic = + try!(BluetoothGATTCharacteristic::create_mock_characteristic(service.clone(), generate_id().to_string())); + try!(characteristic.set_uuid(uuid)); + Ok(characteristic) +} + +// Create Characteristic with value +fn create_characteristic_with_value(service: &BluetoothGATTService, + uuid: String, + value: Vec) + -> Result> { + let characteristic = try!(create_characteristic(service, uuid)); + try!(characteristic.set_value(value)); + Ok(characteristic) +} + +// Create Descriptor +fn create_descriptor(characteristic: &BluetoothGATTCharacteristic, + uuid: String) + -> Result> { + let descriptor = + try!(BluetoothGATTDescriptor::create_mock_descriptor(characteristic.clone(), generate_id().to_string())); + try!(descriptor.set_uuid(uuid)); + Ok(descriptor) +} + +// Create Descriptor with value +fn create_descriptor_with_value(characteristic: &BluetoothGATTCharacteristic, + uuid: String, + value: Vec) + -> Result> { + let descriptor = try!(create_descriptor(characteristic, uuid)); + try!(descriptor.set_value(value)); + Ok(descriptor) +} + +fn create_heart_rate_service(device: &BluetoothDevice, + empty: bool) + -> Result> { + // Heart Rate Service + let heart_rate_service = try!(create_service(device, HEART_RATE_SERVICE_UUID.to_owned())); + + if empty { + return Ok(heart_rate_service) + } + + // Heart Rate Measurement Characteristic + let _heart_rate_measurement_characteristic = + try!(create_characteristic_with_value(&heart_rate_service, + HEART_RATE_MEASUREMENT_CHARACTERISTIC_UUID.to_owned(), + vec![0])); + + // Body Sensor Location Characteristic 1 + let body_sensor_location_characteristic_1 = + try!(create_characteristic_with_value(&heart_rate_service, + BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID.to_owned(), + vec![49])); + try!(body_sensor_location_characteristic_1.set_flags(vec![READ_FLAG.to_string()])); + + // Body Sensor Location Characteristic 2 + let body_sensor_location_characteristic_2 = + try!(create_characteristic_with_value(&heart_rate_service, + BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID.to_owned(), + vec![50])); + try!(body_sensor_location_characteristic_2.set_flags(vec![READ_FLAG.to_string()])); + Ok(heart_rate_service) +} + +fn create_generic_access_service(device: &BluetoothDevice, + empty: bool) + -> Result> { + // Generic Access Service + let generic_access_service = + try!(create_service(device, GENERIC_ACCESS_SERVICE_UUID.to_owned())); + + if empty { + return Ok(generic_access_service) + } + + // Device Name Characteristic + let device_name_characteristic = + try!(create_characteristic_with_value(&generic_access_service, + DEVICE_NAME_CHARACTERISTIC_UUID.to_owned(), + HEART_RATE_DEVICE_NAME.as_bytes().to_vec())); + try!(device_name_characteristic.set_flags(vec![READ_FLAG.to_string(), WRITE_FLAG.to_string()])); + + // Number of Digitals descriptor + let number_of_digitals_descriptor_1 = + try!(create_descriptor_with_value(&device_name_characteristic, + NUMBER_OF_DIGITALS_UUID.to_owned(), + vec![49])); + try!(number_of_digitals_descriptor_1.set_flags(vec![READ_FLAG.to_string(), WRITE_FLAG.to_string()])); + + let number_of_digitals_descriptor_2 = + try!(create_descriptor_with_value(&device_name_characteristic, + NUMBER_OF_DIGITALS_UUID.to_owned(), + vec![50])); + try!(number_of_digitals_descriptor_2.set_flags(vec![READ_FLAG.to_string(), WRITE_FLAG.to_string()])); + + // Characteristic User Description Descriptor + let _characteristic_user_description = + try!(create_descriptor_with_value(&device_name_characteristic, + CHARACTERISTIC_USER_DESCRIPTION_UUID.to_owned(), + HEART_RATE_DEVICE_NAME_DESCRIPTION.as_bytes().to_vec())); + + // Client Characteristic Configuration descriptor + let _client_characteristic_configuration = + try!(create_descriptor_with_value(&device_name_characteristic, + CLIENT_CHARACTERISTIC_CONFIGURATION_UUID.to_owned(), + vec![0])); + + // Peripheral Privacy Flag Characteristic + let peripheral_privacy_flag_characteristic = + try!(create_characteristic(&generic_access_service, PERIPHERAL_PRIVACY_FLAG_CHARACTERISTIC_UUID.to_owned())); + try!(peripheral_privacy_flag_characteristic + .set_flags(vec![READ_FLAG.to_string(), WRITE_FLAG.to_string()])); + Ok(generic_access_service) +} + +// Create Heart Rate Device +fn create_heart_rate_device(adapter: &BluetoothAdapter, + empty: bool) + -> Result> { + // Heart Rate Device + let heart_rate_device = + try!(create_device_with_uuids(adapter, + HEART_RATE_DEVICE_NAME.to_owned(), + HEART_RATE_DEVICE_ADDRESS.to_owned(), + vec![GENERIC_ACCESS_SERVICE_UUID.to_owned(), + HEART_RATE_SERVICE_UUID.to_owned()])); + + if empty { + return Ok(heart_rate_device); + } + + // Generic Access Service + let _generic_access_service = try!(create_generic_access_service(&heart_rate_device, false)); + + // Heart Rate Service + let _heart_rate_service = try!(create_heart_rate_service(&heart_rate_device, false)); + + Ok(heart_rate_device) +} + +fn create_missing_characterisitc_heart_rate_device(adapter: &BluetoothAdapter) -> Result<(), Box> { + let heart_rate_device_empty = try!(create_heart_rate_device(adapter, true)); + + let _generic_access_service_empty = try!(create_generic_access_service(&heart_rate_device_empty, true)); + + let _heart_rate_service_empty = try!(create_heart_rate_service(&heart_rate_device_empty, true)); + + Ok(()) +} + +fn create_missing_descriptor_heart_rate_device(adapter: &BluetoothAdapter) -> Result<(), Box> { + let heart_rate_device_empty = try!(create_heart_rate_device(adapter, true)); + + let generic_access_service_empty = try!(create_generic_access_service(&heart_rate_device_empty, true)); + + let _device_name_characteristic = + try!(create_characteristic_with_value(&generic_access_service_empty, + DEVICE_NAME_CHARACTERISTIC_UUID.to_owned(), + HEART_RATE_DEVICE_NAME.as_bytes().to_vec())); + + let peripheral_privacy_flag_characteristic = + try!(create_characteristic(&generic_access_service_empty, + PERIPHERAL_PRIVACY_FLAG_CHARACTERISTIC_UUID.to_owned())); + try!(peripheral_privacy_flag_characteristic.set_flags(vec![READ_FLAG.to_string(), WRITE_FLAG.to_string()])); + + let _heart_rate_service = try!(create_heart_rate_service(&heart_rate_device_empty, false)); + + Ok(()) +} + +fn create_two_heart_rate_services_device(adapter: &BluetoothAdapter) -> Result<(), Box> { + let heart_rate_device_empty = try!(create_heart_rate_device(adapter, true)); + + try!(heart_rate_device_empty.set_uuids(vec![GENERIC_ACCESS_SERVICE_UUID.to_owned(), + HEART_RATE_SERVICE_UUID.to_owned(), + HEART_RATE_SERVICE_UUID.to_owned()])); + + let _generic_access_service = try!(create_generic_access_service(&heart_rate_device_empty, false)); + + let heart_rate_service_empty_1 = try!(create_heart_rate_service(&heart_rate_device_empty, true)); + + let heart_rate_service_empty_2 = try!(create_heart_rate_service(&heart_rate_device_empty, true)); + + let _heart_rate_measurement_characteristic = + try!(create_characteristic_with_value(&heart_rate_service_empty_1, + HEART_RATE_MEASUREMENT_CHARACTERISTIC_UUID.to_owned(), + vec![0])); + + let _body_sensor_location_characteristic_1 = + try!(create_characteristic_with_value(&heart_rate_service_empty_1, + BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID.to_owned(), + vec![49])); + + let _body_sensor_location_characteristic_2 = + try!(create_characteristic_with_value(&heart_rate_service_empty_2, + BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID.to_owned(), + vec![50])); + Ok(()) +} + +fn create_blacklisted_device(adapter: &BluetoothAdapter) -> Result<(), Box> { + let connectable_device = + try!(create_device_with_uuids(adapter, + CONNECTABLE_DEVICE_NAME.to_owned(), + CONNECTABLE_DEVICE_ADDRESS.to_owned(), + vec![BLACKLIST_TEST_SERVICE_UUID.to_owned(), + DEVICE_INFORMATION_UUID.to_owned(), + GENERIC_ACCESS_SERVICE_UUID.to_owned(), + HEART_RATE_SERVICE_UUID.to_owned(), + HUMAN_INTERFACE_DEVICE_SERVICE_UUID.to_owned()])); + + let blacklist_test_service = try!(create_service(&connectable_device, BLACKLIST_TEST_SERVICE_UUID.to_owned())); + + let blacklist_exclude_reads_characteristic = + try!(create_characteristic(&blacklist_test_service, + BLACKLIST_EXCLUDE_READS_CHARACTERISTIC_UUID.to_owned())); + try!(blacklist_exclude_reads_characteristic + .set_flags(vec![READ_FLAG.to_string(), WRITE_FLAG.to_string()])); + + let _blacklist_exclude_reads_descriptor = + try!(create_descriptor_with_value(&blacklist_exclude_reads_characteristic, + BLACKLIST_EXCLUDE_READS_DESCRIPTOR_UUID.to_owned(), + vec![54; 3])); + + let _blacklist_descriptor = + try!(create_descriptor_with_value(&blacklist_exclude_reads_characteristic, + BLACKLIST_DESCRIPTOR_UUID.to_owned(), + vec![54; 3])); + + let device_information_service = try!(create_service(&connectable_device, DEVICE_INFORMATION_UUID.to_owned())); + + let _serial_number_string_characteristic = + try!(create_characteristic(&device_information_service, SERIAL_NUMBER_STRING_UUID.to_owned())); + + let _generic_access_service = try!(create_generic_access_service(&connectable_device, false)); + + let _heart_rate_service = try!(create_heart_rate_service(&connectable_device, false)); + + let _human_interface_device_service = + try!(create_service(&connectable_device, HUMAN_INTERFACE_DEVICE_SERVICE_UUID.to_owned())); + Ok(()) +} + +pub fn test(manager: &mut BluetoothManager, data_set_name: String) -> Result<(), Box> { + let may_existing_adapter = manager.get_or_create_adapter(); + let adapter = match may_existing_adapter.as_ref() { + Some(adapter) => adapter, + None => return Err(Box::from(ADAPTER_ERROR.to_string())), + }; + match data_set_name.as_str() { + NOT_PRESENT_ADAPTER => { + try!(set_adapter(adapter, NOT_PRESENT_ADAPTER.to_owned())); + try!(adapter.set_present(false)); + }, + NOT_POWERED_ADAPTER => { + try!(set_adapter(adapter, NOT_POWERED_ADAPTER.to_owned())); + try!(adapter.set_powered(false)); + }, + EMPTY_ADAPTER => { + try!(set_adapter(adapter, EMPTY_ADAPTER.to_owned())); + }, + GLUCOSE_HEART_RATE_ADAPTER => { + try!(set_adapter(adapter, GLUCOSE_HEART_RATE_ADAPTER.to_owned())); + + let _glucose_devie = try!(create_device_with_uuids(adapter, + GLUCOSE_DEVICE_NAME.to_owned(), + GLUCOSE_DEVICE_ADDRESS.to_owned(), + vec![GLUCOSE_SERVICE_UUID.to_owned(), + TX_POWER_SERVICE_UUID.to_owned()])); + + let _heart_rate_device_empty = try!(create_heart_rate_device(adapter, true)); + }, + UNICODE_DEVICE_ADAPTER => { + try!(set_adapter(adapter, UNICODE_DEVICE_ADAPTER.to_owned())); + + let _unicode_device = try!(create_device(adapter, + UNICODE_DEVICE_NAME.to_owned(), + UNICODE_DEVICE_ADDRESS.to_owned())); + }, + MISSING_SERVICE_HEART_RATE_ADAPTER => { + try!(set_adapter(adapter, MISSING_SERVICE_HEART_RATE_ADAPTER.to_owned())); + + let _heart_rate_device_empty = try!(create_heart_rate_device(adapter, true)); + }, + MISSING_CHARACTERISTIC_HEART_RATE_ADAPTER => { + try!(set_adapter(adapter, MISSING_CHARACTERISTIC_HEART_RATE_ADAPTER.to_owned())); + + let _ = try!(create_missing_characterisitc_heart_rate_device(adapter)); + }, + MISSING_DESCRIPTOR_HEART_RATE_ADAPTER => { + try!(set_adapter(adapter, MISSING_DESCRIPTOR_HEART_RATE_ADAPTER.to_owned())); + + let _ = try!(create_missing_descriptor_heart_rate_device(adapter)); + }, + HEART_RATE_ADAPTER => { + try!(set_adapter(adapter, HEART_RATE_ADAPTER.to_owned())); + + let _heart_rate_device = try!(create_heart_rate_device(adapter, false)); + }, + EMPTY_NAME_HEART_RATE_ADAPTER => { + try!(set_adapter(adapter, EMPTY_NAME_HEART_RATE_ADAPTER.to_owned())); + + let heart_rate_device = try!(create_heart_rate_device(adapter, false)); + try!(heart_rate_device.set_name(Some(EMPTY_DEVICE_NAME.to_owned()))); + }, + NO_NAME_HEART_RATE_ADAPTER => { + try!(set_adapter(adapter, NO_NAME_HEART_RATE_ADAPTER.to_owned())); + + let heart_rate_device = try!(create_heart_rate_device(adapter, false)); + try!(heart_rate_device.set_name(None)); + }, + TWO_HEART_RATE_SERVICES_ADAPTER => { + try!(set_adapter(adapter, TWO_HEART_RATE_SERVICES_ADAPTER.to_owned())); + + let _ = try!(create_two_heart_rate_services_device(adapter)); + }, + BLACKLIST_TEST_ADAPTER => { + try!(set_adapter(adapter, BLACKLIST_TEST_ADAPTER.to_owned())); + + let _ = try!(create_blacklisted_device(adapter)); + }, + _ => return Err(Box::from(WRONG_DATA_SET_ERROR.to_string())), + } + return Ok(()); +} diff --git a/components/bluetooth_traits/lib.rs b/components/bluetooth_traits/lib.rs index dcff8cead91..a1b1b41be6e 100644 --- a/components/bluetooth_traits/lib.rs +++ b/components/bluetooth_traits/lib.rs @@ -86,5 +86,6 @@ pub enum BluetoothMethodMsg { GetDescriptors(String, Option, IpcSender>), ReadValue(String, IpcSender>>), WriteValue(String, Vec, IpcSender>), + Test(String, IpcSender>), Exit, } diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs index 14498823424..d419d41ec61 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -399,6 +399,7 @@ pub mod testbinding; pub mod testbindingiterable; pub mod testbindingpairiterable; pub mod testbindingproxy; +pub mod testrunner; pub mod text; pub mod textdecoder; pub mod textencoder; diff --git a/components/script/dom/testrunner.rs b/components/script/dom/testrunner.rs new file mode 100644 index 00000000000..f96ab6dbf65 --- /dev/null +++ b/components/script/dom/testrunner.rs @@ -0,0 +1,53 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use bluetooth_traits::BluetoothMethodMsg; +use dom::bindings::codegen::Bindings::TestRunnerBinding; +use dom::bindings::codegen::Bindings::TestRunnerBinding::TestRunnerMethods; +use dom::bindings::error::{Error, ErrorResult}; +use dom::bindings::js::Root; +use dom::bindings::reflector::{Reflectable, Reflector, reflect_dom_object}; +use dom::bindings::str::DOMString; +use dom::globalscope::GlobalScope; +use ipc_channel::ipc::{self, IpcSender}; + +// https://webbluetoothcg.github.io/web-bluetooth/tests#test-runner + #[dom_struct] +pub struct TestRunner { + reflector_: Reflector, +} + +impl TestRunner { + pub fn new_inherited() -> TestRunner { + TestRunner { + reflector_: Reflector::new(), + } + } + + pub fn new(global: &GlobalScope) -> Root { + reflect_dom_object(box TestRunner::new_inherited(), + global, + TestRunnerBinding::Wrap) + } + + fn get_bluetooth_thread(&self) -> IpcSender { + self.global().as_window().bluetooth_thread() + } +} + +impl TestRunnerMethods for TestRunner { + // https://webbluetoothcg.github.io/web-bluetooth/tests#setBluetoothMockDataSet + fn SetBluetoothMockDataSet(&self, dataSetName: DOMString) -> ErrorResult { + let (sender, receiver) = ipc::channel().unwrap(); + self.get_bluetooth_thread().send(BluetoothMethodMsg::Test(String::from(dataSetName), sender)).unwrap(); + match receiver.recv().unwrap().into() { + Ok(()) => { + Ok(()) + }, + Err(error) => { + Err(Error::from(error)) + }, + } + } +} diff --git a/components/script/dom/webidls/TestRunner.webidl b/components/script/dom/webidls/TestRunner.webidl new file mode 100644 index 00000000000..0326c14dbec --- /dev/null +++ b/components/script/dom/webidls/TestRunner.webidl @@ -0,0 +1,16 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// https://webbluetoothcg.github.io/web-bluetooth/tests#test-runner + +// callback BluetoothManualChooserEventsCallback = void(sequence events); + +[Pref="dom.bluetooth.testing.enabled", Exposed=Window] +interface TestRunner { + [Throws] + void setBluetoothMockDataSet(DOMString dataSetName); + // void setBluetoothManualChooser(); + // void getBluetoothManualChooserEvents(BluetoothManualChooserEventsCallback callback); + // void sendBluetoothManualChooserEvent(DOMString event, DOMString argument); +}; diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl index ad3494b6f5f..5e7e08d4b18 100644 --- a/components/script/dom/webidls/Window.webidl +++ b/components/script/dom/webidls/Window.webidl @@ -185,3 +185,10 @@ Window implements WindowLocalStorage; // http://w3c.github.io/animation-timing/#framerequestcallback callback FrameRequestCallback = void (DOMHighResTimeStamp time); + +// https://webbluetoothcg.github.io/web-bluetooth/tests#test-interfaces +partial interface Window { + [Pref="dom.bluetooth.testing.enabled", Exposed=Window] + readonly attribute TestRunner testRunner; + //readonly attribute EventSender eventSender; +}; diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 61eb7af6142..067f0437268 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -45,6 +45,7 @@ use dom::performance::Performance; use dom::promise::Promise; use dom::screen::Screen; use dom::storage::Storage; +use dom::testrunner::TestRunner; use euclid::{Point2D, Rect, Size2D}; use fetch; use ipc_channel::ipc::{self, IpcSender}; @@ -239,6 +240,8 @@ pub struct Window { /// All the MediaQueryLists we need to update media_query_lists: WeakMediaQueryListVec, + + test_runner: MutNullableHeap>, } impl Window { @@ -881,6 +884,10 @@ impl WindowMethods for Window { fn Fetch(&self, input: RequestOrUSVString, init: &RequestInit) -> Rc { fetch::Fetch(&self.upcast(), input, init) } + + fn TestRunner(&self) -> Root { + self.test_runner.or_init(|| TestRunner::new(self.upcast())) + } } impl Window { @@ -1588,6 +1595,7 @@ impl Window { error_reporter: error_reporter, scroll_offsets: DOMRefCell::new(HashMap::new()), media_query_lists: WeakMediaQueryListVec::new(), + test_runner: Default::default(), }; WindowBinding::Wrap(runtime.cx(), win) diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 7d917e7db05..1fb3b302c2b 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -199,6 +199,7 @@ dependencies = [ "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)", "util 0.0.1", + "uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -215,6 +216,14 @@ name = "blurdroid" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "blurmock" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "blurz" version = "0.2.1" @@ -518,6 +527,7 @@ version = "0.0.1" source = "git+https://github.com/servo/devices#4a6ab4be0de229fafa6aa3657a5702646832ba08" dependencies = [ "blurdroid 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "blurmock 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "blurz 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2905,6 +2915,7 @@ dependencies = [ "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" "checksum blurdroid 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5fce4ea3366b583e9d49e1aa3a42252e53b42911bccd06f31c3e81c48ccfc79e" +"checksum blurmock 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c3034c7372bc7951e0a916b7e952b0043cd4ccb5112cd30827f0e1708e05c2b1" "checksum blurz 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4d49796c8d5a1b5f6b2b8686e46ed4ab842987c477f765b69f1d3e8df6072608" "checksum brotli 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "bff2d5511b5ba5840f46cc3f9c0c3ab09db20e9b9a4db344ef7df3fb547a627a" "checksum browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)" = "" diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index af3380f93bd..31698e3d967 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -170,6 +170,7 @@ dependencies = [ "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)", "util 0.0.1", + "uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -186,6 +187,14 @@ name = "blurdroid" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "blurmock" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "blurz" version = "0.2.1" @@ -473,6 +482,7 @@ version = "0.0.1" source = "git+https://github.com/servo/devices#4a6ab4be0de229fafa6aa3657a5702646832ba08" dependencies = [ "blurdroid 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "blurmock 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "blurz 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2763,6 +2773,7 @@ dependencies = [ "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" "checksum blurdroid 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5fce4ea3366b583e9d49e1aa3a42252e53b42911bccd06f31c3e81c48ccfc79e" +"checksum blurmock 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c3034c7372bc7951e0a916b7e952b0043cd4ccb5112cd30827f0e1708e05c2b1" "checksum blurz 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4d49796c8d5a1b5f6b2b8686e46ed4ab842987c477f765b69f1d3e8df6072608" "checksum brotli 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "bff2d5511b5ba5840f46cc3f9c0c3ab09db20e9b9a4db344ef7df3fb547a627a" "checksum browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)" = "" diff --git a/resources/gatt_blacklist.txt b/resources/gatt_blacklist.txt index d238bcf8924..4218811b189 100644 --- a/resources/gatt_blacklist.txt +++ b/resources/gatt_blacklist.txt @@ -40,6 +40,9 @@ f000ffc0-0451-4000-b000-000000000000 # Block access to standardized unique identifiers, for privacy reasons. 00002a25-0000-1000-8000-00805f9b34fb +# Blacklisted characteristic used to test readValue function. +bad1c9a2-9a5b-4015-8b60-1579bbbf2135 exclude-reads + ## Descriptors @@ -50,4 +53,10 @@ f000ffc0-0451-4000-b000-000000000000 # org.bluetooth.descriptor.gatt.server_characteristic_configuration # Writing to this would let a web page interfere with the broadcasted services. -00002903-0000-1000-8000-00805f9b34fb exclude-writes \ No newline at end of file +00002903-0000-1000-8000-00805f9b34fb exclude-writes + +# Blacklisted descriptor used to test. +07711111-6104-0970-7011-1107105110aaa + +# Blacklisted descriptor used to test. +aaaaaaaa-aaaa-1181-0510-810819516110 exclude-reads \ No newline at end of file diff --git a/resources/package-prefs.json b/resources/package-prefs.json index 62c13fe617f..aa5d1d83303 100644 --- a/resources/package-prefs.json +++ b/resources/package-prefs.json @@ -1,5 +1,6 @@ { "dom.bluetooth.enabled": false, + "dom.bluetooth.testing.enabled": false, "dom.forcetouch.enabled": true, "dom.mouseevent.which.enabled": false, "dom.mozbrowser.enabled": true, diff --git a/resources/prefs.json b/resources/prefs.json index 7c7fdabb61c..26b832385c7 100644 --- a/resources/prefs.json +++ b/resources/prefs.json @@ -1,5 +1,6 @@ { "dom.bluetooth.enabled": false, + "dom.bluetooth.testing.enabled": false, "dom.forcetouch.enabled": false, "dom.mouseevent.which.enabled": false, "dom.mozbrowser.enabled": false, From ada0256030904412727d85af036dcfd8605dcb97 Mon Sep 17 00:00:00 2001 From: zakorgyula Date: Mon, 3 Oct 2016 22:15:36 +0200 Subject: [PATCH 26/26] WebBluetooth WPT tests --- tests/wpt/mozilla/meta/MANIFEST.json | 972 ++++++++++++++++++ .../meta/mozilla/bluetooth/__dir__.ini | 1 + .../connect/device-goes-out-of-range.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + .../disconnect-called-before.html.ini | 4 + .../disconnect-called-during.html.ini | 4 + .../get-same-characteristic.html.ini | 4 + .../service-is-removed.html.ini | 4 + .../blacklisted-characteristics.html.ini | 4 + ...evice-goes-out-of-range-with-uuid.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + ...isconnect-called-before-with-uuid.html.ini | 4 + .../disconnect-called-before.html.ini | 4 + ...isconnect-called-during-with-uuid.html.ini | 4 + .../disconnect-called-during.html.ini | 4 + .../get-same-characteristics.html.ini | 4 + .../service-is-removed-with-uuid.html.ini | 4 + .../service-is-removed.html.ini | 4 + .../characteristic-is-removed.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + .../disconnect-called-before.html.ini | 4 + .../disconnect-called-during.html.ini | 4 + .../get-same-descriptor.html.ini | 4 + .../blacklisted-descriptors.html.ini | 4 + ...aracteristic-is-removed-with-uuid.html.ini | 4 + .../characteristic-is-removed.html.ini | 4 + ...evice-goes-out-of-range-with-uuid.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + ...isconnect-called-before-with-uuid.html.ini | 4 + .../disconnect-called-before.html.ini | 4 + ...isconnect-called-during-with-uuid.html.ini | 4 + .../disconnect-called-during.html.ini | 4 + .../get-same-descriptors.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + .../disconnect-called-before.html.ini | 4 + .../disconnect-called-during.html.ini | 4 + .../disconnected-device.html.ini | 4 + .../get-same-service.html.ini | 4 + .../blacklisted-services.html.ini | 4 + ...evice-goes-out-of-range-with-uuid.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + ...isconnect-called-before-with-uuid.html.ini | 4 + .../disconnect-called-before.html.ini | 4 + ...isconnect-called-during-with-uuid.html.ini | 4 + .../disconnect-called-during.html.ini | 4 + .../disconnected-device-with-uuid.html.ini | 4 + .../disconnected-device.html.ini | 4 + .../get-same-service.html.ini | 4 + .../no-permission-present-service.html.ini | 4 + .../characteristic-is-removed.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + .../service-is-removed.html.ini | 4 + .../characteristic-is-removed.html.ini | 4 + .../descriptor/descriptor-is-removed.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + .../descriptor/service-is-removed.html.ini | 4 + .../adapter-not-present.html.ini | 4 + .../requestDevice/adapter-off.html.ini | 4 + .../max-length-for-name-in-adv-name.html.ini | 4 + ...length-for-name-in-adv-namePrefix.html.ini | 4 + ...e-max-length-for-name-in-adv-name.html.ini | 4 + ...length-for-name-in-adv-namePrefix.html.ini | 4 + .../requestDevice/correct-uuids.html.ini | 4 + ...pty-device-from-name-empty-filter.html.ini | 4 + .../requestDevice/name-empty-filter.html.ini | 4 + ...ing-device-from-name-empty-filter.html.ini | 4 + .../requestDevice/same-device.html.ini | 4 + .../characteristic-is-removed.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + .../service-is-removed.html.ini | 4 + .../write-updates-value.html.ini | 4 + .../characteristic-is-removed.html.ini | 4 + .../descriptor/descriptor-is-removed.html.ini | 4 + .../device-goes-out-of-range.html.ini | 4 + .../descriptor/service-is-removed.html.ini | 4 + .../descriptor/write-updates-value.html.ini | 4 + .../connect/connection-succeeds.html | 15 + .../connect/device-goes-out-of-range.html | 17 + .../connect/get-same-gatt-server.html | 15 + .../disconnect/connect-disconnect-twice.html | 26 + .../bluetooth/disconnect/disconnect-once.html | 19 + .../disconnect/disconnect-twice-in-a-row.html | 21 + .../blacklisted-characteristic.html | 16 + .../characteristic-found.html | 32 + .../characteristic-not-found.html | 17 + .../device-goes-out-of-range.html | 20 + .../disconnect-called-before.html | 22 + .../disconnect-called-during.html | 23 + .../get-same-characteristic.html | 27 + .../invalid-characteristic-name.html | 17 + .../getCharacteristic/service-is-removed.html | 20 + ...blacklisted-characteristics-with-uuid.html | 16 + .../blacklisted-characteristics.html | 16 + .../characteristics-found-with-uuid.html | 28 + .../characteristics-found.html | 22 + .../characteristics-not-found-with-uuid.html | 16 + .../characteristics-not-found.html | 16 + .../correct-characteristics.html | 20 + .../device-goes-out-of-range-with-uuid.html | 19 + .../device-goes-out-of-range.html | 19 + .../disconnect-called-before-with-uuid.html | 21 + .../disconnect-called-before.html | 21 + .../disconnect-called-during-with-uuid.html | 23 + .../disconnect-called-during.html | 22 + .../get-same-characteristics.html | 19 + .../invalid-characteristic-name.html | 17 + .../service-is-removed-with-uuid.html | 19 + .../service-is-removed.html | 19 + .../getDescriptor/blacklisted-descriptor.html | 18 + .../characteristic-is-removed.html | 21 + .../getDescriptor/descriptor-found.html | 33 + .../getDescriptor/descriptor-not-found.html | 18 + .../device-goes-out-of-range.html | 21 + .../disconnect-called-before.html | 23 + .../disconnect-called-during.html | 24 + .../getDescriptor/get-same-descriptor.html | 28 + .../invalid-descriptor-name.html | 18 + .../blacklisted-descriptors-with-uuid.html | 18 + .../blacklisted-descriptors.html | 21 + .../characteristic-is-removed-with-uuid.html | 21 + .../characteristic-is-removed.html | 21 + .../getDescriptors/correct-descriptors.html | 21 + .../descriptors-found-with-uuid.html | 30 + .../getDescriptors/descriptors-found.html | 25 + .../descriptors-not-found-with-uuid.html | 19 + .../getDescriptors/descriptors-not-found.html | 19 + .../device-goes-out-of-range-with-uuid.html | 21 + .../device-goes-out-of-range.html | 21 + .../disconnect-called-before-with-uuid.html | 23 + .../disconnect-called-before.html | 23 + .../disconnect-called-during-with-uuid.html | 24 + .../disconnect-called-during.html | 24 + .../getDescriptors/get-same-descriptors.html | 21 + .../invalid-descriptor-name.html | 18 + .../device-goes-out-of-range.html | 18 + .../disconnect-called-before.html | 18 + .../disconnect-called-during.html | 19 + .../disconnected-device.html | 14 + .../getPrimaryService/get-same-service.html | 24 + .../invalid-service-name.html | 15 + .../no-permission-absent-service.html | 19 + .../no-permission-present-service.html | 19 + .../getPrimaryService/service-found.html | 31 + .../getPrimaryService/service-not-found.html | 16 + .../blacklisted-services-with-uuid.html | 16 + .../blacklisted-services.html | 26 + .../getPrimaryServices/correct-services.html | 22 + .../device-goes-out-of-range-with-uuid.html | 19 + .../device-goes-out-of-range.html | 19 + .../disconnect-called-before-with-uuid.html | 19 + .../disconnect-called-before.html | 19 + .../disconnect-called-during-with-uuid.html | 19 + .../disconnect-called-during.html | 19 + .../disconnected-device-with-uuid.html | 14 + .../disconnected-device.html | 14 + .../getPrimaryServices/get-same-service.html | 18 + .../invalid-service-name.html | 15 + ...o-permission-absent-service-with-uuid.html | 19 + ...-permission-present-service-with-uuid.html | 19 + .../no-permission-present-service.html | 15 + .../services-found-with-uuid.html | 27 + .../getPrimaryServices/services-found.html | 25 + .../services-not-found-with-uuid.html | 16 + .../services-not-found.html | 16 + .../blacklisted-characteristic.html | 20 + .../characteristic-is-removed.html | 21 + .../device-goes-out-of-range.html | 21 + .../disconnect-called-before.html | 23 + .../characteristic/read-succeeds.html | 19 + .../characteristic/read-updates-value.html | 22 + .../characteristic/service-is-removed.html | 21 + .../descriptor/blacklisted-descriptor.html | 21 + .../descriptor/characteristic-is-removed.html | 22 + .../descriptor/descriptor-is-removed.html | 22 + .../descriptor/device-goes-out-of-range.html | 22 + .../descriptor/disconnect-called-before.html | 24 + .../readValue/descriptor/read-succeeds.html | 20 + .../descriptor/read-updates-value.html | 23 + .../descriptor/service-is-removed.html | 22 + .../accept-all-devices-with-filter.html | 15 + .../requestDevice/accept-all-devices.html | 12 + .../requestDevice/adapter-not-present.html | 13 + .../bluetooth/requestDevice/adapter-off.html | 13 + .../blacklisted-service-in-filter.html | 13 + ...acklisted-service-in-optionalServices.html | 19 + .../canonicalizeFilter/empty-filter.html | 11 + .../empty-filters-member.html | 12 + .../canonicalizeFilter/empty-namePrefix.html | 38 + .../empty-services-member.html | 38 + .../max-length-for-device-name-name.html | 14 + ...max-length-for-device-name-namePrefix.html | 14 + .../max-length-for-name-in-adv-name.html | 14 + ...max-length-for-name-in-adv-namePrefix.html | 14 + .../canonicalizeFilter/no-arguments.html | 16 + .../canonicalizeFilter/no-filters-member.html | 16 + ...icode-max-length-for-device-name-name.html | 17 + ...max-length-for-device-name-namePrefix.html | 17 + ...icode-max-length-for-name-in-adv-name.html | 17 + ...max-length-for-name-in-adv-namePrefix.html | 17 + .../unicode-valid-length-name-name.html | 19 + .../unicode-valid-length-name-namePrefix.html | 18 + ...ng-service-in-optionalServices-member.html | 38 + .../wrong-service-in-services-member.html | 37 + .../requestDevice/correct-uuids.html | 19 + .../requestDevice/discovery-succeeds.html | 19 + .../requestDevice/filter-does-not-match.html | 94 ++ .../requestDevice/filter-matches.html | 64 ++ ...e-empty-device-from-name-empty-filter.html | 15 + ...-empty-device-from-name-prefix-filter.html | 14 + ...e-empty-device-from-name-wrong-filter.html | 14 + ...name-empty-device-from-service-filter.html | 14 + .../requestDevice/name-empty-filter.html | 14 + ...missing-device-from-name-empty-filter.html | 14 + ...issing-device-from-name-prefix-filter.html | 14 + ...missing-device-from-name-wrong-filter.html | 14 + ...me-missing-device-from-service-filter.html | 14 + .../bluetooth/requestDevice/no-devices.html | 14 + ...not-accept-all-devices-without-filter.html | 14 + .../bluetooth/requestDevice/same-device.html | 18 + .../single-filter-single-service.html | 14 + .../single-filter-two-services-fails.html | 14 + .../single-filter-two-services-succeeds.html | 14 + .../bluetooth/requestDevice/two-filters.html | 15 + .../blacklisted-characteristic.html | 21 + .../characteristic-is-removed.html | 22 + .../device-goes-out-of-range.html | 21 + .../disconnect-called-before.html | 23 + .../characteristic/service-is-removed.html | 21 + .../characteristic/write-succeeds.html | 18 + .../characteristic/write-updates-value.html | 22 + .../descriptor/blacklisted-descriptor.html | 23 + .../descriptor/characteristic-is-removed.html | 22 + .../descriptor/descriptor-is-removed.html | 22 + .../descriptor/device-goes-out-of-range.html | 22 + .../descriptor/disconnect-called-before.html | 24 + .../descriptor/service-is-removed.html | 23 + .../writeValue/descriptor/write-succeeds.html | 19 + .../descriptor/write-updates-value.html | 23 + .../bluetooth/bluetooth-helpers.js | 147 +++ 239 files changed, 4726 insertions(+) create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/__dir__.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/connect/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/service-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/service-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/disconnect-called-before.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/disconnect-called-during.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/get-same-descriptor.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-before.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-during.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/get-same-descriptors.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnected-device.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/get-same-service.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnected-device.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/get-same-service.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/service-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/service-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/adapter-not-present.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/adapter-off.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/correct-uuids.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-empty-filter.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/same-device.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html.ini create mode 100644 tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html.ini create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/connect/connection-succeeds.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/connect/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/connect/get-same-gatt-server.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/connect-disconnect-twice.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/disconnect-once.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/disconnect-twice-in-a-row.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/blacklisted-characteristic.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/characteristic-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/characteristic-not-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/invalid-characteristic-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/service-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-found-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-not-found-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-not-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/correct-characteristics.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/invalid-characteristic-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/service-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/blacklisted-descriptor.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/descriptor-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/descriptor-not-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/disconnect-called-during.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/get-same-descriptor.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/invalid-descriptor-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/blacklisted-descriptors-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/correct-descriptors.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-found-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-not-found-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-not-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-during.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/get-same-descriptors.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/invalid-descriptor-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnected-device.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/get-same-service.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/invalid-service-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/no-permission-absent-service.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/no-permission-present-service.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/service-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/service-not-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/blacklisted-services-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/correct-services.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnected-device.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/get-same-service.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/invalid-service-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-absent-service-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-present-service-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-found-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-not-found-with-uuid.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-not-found.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/blacklisted-characteristic.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/read-succeeds.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/read-updates-value.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/service-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/blacklisted-descriptor.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/read-succeeds.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/read-updates-value.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/service-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/accept-all-devices-with-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/accept-all-devices.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/adapter-not-present.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/adapter-off.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/blacklisted-service-in-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/blacklisted-service-in-optionalServices.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-namePrefix.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-arguments.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-filters-member.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-namePrefix.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/correct-uuids.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/discovery-succeeds.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/filter-does-not-match.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/filter-matches.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-prefix-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-wrong-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-service-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-prefix-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-wrong-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-service-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/no-devices.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/not-accept-all-devices-without-filter.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/same-device.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-single-service.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-two-services-fails.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-two-services-succeeds.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/two-filters.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/blacklisted-characteristic.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/write-succeeds.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/blacklisted-descriptor.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/disconnect-called-before.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/write-succeeds.html create mode 100644 tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html create mode 100644 tests/wpt/web-platform-tests/bluetooth/bluetooth-helpers.js diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 9a3d311ad01..626f628c173 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -6674,6 +6674,978 @@ "url": "/_mozilla/mozilla/binding_keyword.html" } ], + "mozilla/bluetooth/connect/connection-succeeds.html": [ + { + "path": "mozilla/bluetooth/connect/connection-succeeds.html", + "url": "/_mozilla/mozilla/bluetooth/connect/connection-succeeds.html" + } + ], + "mozilla/bluetooth/connect/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/connect/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/connect/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/connect/get-same-gatt-server.html": [ + { + "path": "mozilla/bluetooth/connect/get-same-gatt-server.html", + "url": "/_mozilla/mozilla/bluetooth/connect/get-same-gatt-server.html" + } + ], + "mozilla/bluetooth/disconnect/connect-disconnect-twice.html": [ + { + "path": "mozilla/bluetooth/disconnect/connect-disconnect-twice.html", + "url": "/_mozilla/mozilla/bluetooth/disconnect/connect-disconnect-twice.html" + } + ], + "mozilla/bluetooth/disconnect/disconnect-once.html": [ + { + "path": "mozilla/bluetooth/disconnect/disconnect-once.html", + "url": "/_mozilla/mozilla/bluetooth/disconnect/disconnect-once.html" + } + ], + "mozilla/bluetooth/disconnect/disconnect-twice-in-a-row.html": [ + { + "path": "mozilla/bluetooth/disconnect/disconnect-twice-in-a-row.html", + "url": "/_mozilla/mozilla/bluetooth/disconnect/disconnect-twice-in-a-row.html" + } + ], + "mozilla/bluetooth/getCharacteristic/blacklisted-characteristic.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/blacklisted-characteristic.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/blacklisted-characteristic.html" + } + ], + "mozilla/bluetooth/getCharacteristic/characteristic-found.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/characteristic-found.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/characteristic-found.html" + } + ], + "mozilla/bluetooth/getCharacteristic/characteristic-not-found.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/characteristic-not-found.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/characteristic-not-found.html" + } + ], + "mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/getCharacteristic/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/getCharacteristic/disconnect-called-during.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/disconnect-called-during.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html" + } + ], + "mozilla/bluetooth/getCharacteristic/get-same-characteristic.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/get-same-characteristic.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html" + } + ], + "mozilla/bluetooth/getCharacteristic/invalid-characteristic-name.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/invalid-characteristic-name.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/invalid-characteristic-name.html" + } + ], + "mozilla/bluetooth/getCharacteristic/service-is-removed.html": [ + { + "path": "mozilla/bluetooth/getCharacteristic/service-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristic/service-is-removed.html" + } + ], + "mozilla/bluetooth/getCharacteristics/blacklisted-characteristics-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/blacklisted-characteristics-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics-with-uuid.html" + } + ], + "mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html" + } + ], + "mozilla/bluetooth/getCharacteristics/characteristics-found-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/characteristics-found-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/characteristics-found-with-uuid.html" + } + ], + "mozilla/bluetooth/getCharacteristics/characteristics-found.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/characteristics-found.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/characteristics-found.html" + } + ], + "mozilla/bluetooth/getCharacteristics/characteristics-not-found-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/characteristics-not-found-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/characteristics-not-found-with-uuid.html" + } + ], + "mozilla/bluetooth/getCharacteristics/characteristics-not-found.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/characteristics-not-found.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/characteristics-not-found.html" + } + ], + "mozilla/bluetooth/getCharacteristics/correct-characteristics.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/correct-characteristics.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/correct-characteristics.html" + } + ], + "mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html" + } + ], + "mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html" + } + ], + "mozilla/bluetooth/getCharacteristics/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html" + } + ], + "mozilla/bluetooth/getCharacteristics/disconnect-called-during.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/disconnect-called-during.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html" + } + ], + "mozilla/bluetooth/getCharacteristics/get-same-characteristics.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/get-same-characteristics.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html" + } + ], + "mozilla/bluetooth/getCharacteristics/invalid-characteristic-name.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/invalid-characteristic-name.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/invalid-characteristic-name.html" + } + ], + "mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html" + } + ], + "mozilla/bluetooth/getCharacteristics/service-is-removed.html": [ + { + "path": "mozilla/bluetooth/getCharacteristics/service-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/getCharacteristics/service-is-removed.html" + } + ], + "mozilla/bluetooth/getDescriptor/blacklisted-descriptor.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/blacklisted-descriptor.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/blacklisted-descriptor.html" + } + ], + "mozilla/bluetooth/getDescriptor/characteristic-is-removed.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/characteristic-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html" + } + ], + "mozilla/bluetooth/getDescriptor/descriptor-found.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/descriptor-found.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/descriptor-found.html" + } + ], + "mozilla/bluetooth/getDescriptor/descriptor-not-found.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/descriptor-not-found.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/descriptor-not-found.html" + } + ], + "mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/getDescriptor/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/getDescriptor/disconnect-called-during.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/disconnect-called-during.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/disconnect-called-during.html" + } + ], + "mozilla/bluetooth/getDescriptor/get-same-descriptor.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/get-same-descriptor.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/get-same-descriptor.html" + } + ], + "mozilla/bluetooth/getDescriptor/invalid-descriptor-name.html": [ + { + "path": "mozilla/bluetooth/getDescriptor/invalid-descriptor-name.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptor/invalid-descriptor-name.html" + } + ], + "mozilla/bluetooth/getDescriptors/blacklisted-descriptors-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/blacklisted-descriptors-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/blacklisted-descriptors-with-uuid.html" + } + ], + "mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html" + } + ], + "mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html" + } + ], + "mozilla/bluetooth/getDescriptors/characteristic-is-removed.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/characteristic-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html" + } + ], + "mozilla/bluetooth/getDescriptors/correct-descriptors.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/correct-descriptors.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/correct-descriptors.html" + } + ], + "mozilla/bluetooth/getDescriptors/descriptors-found-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/descriptors-found-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/descriptors-found-with-uuid.html" + } + ], + "mozilla/bluetooth/getDescriptors/descriptors-found.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/descriptors-found.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/descriptors-found.html" + } + ], + "mozilla/bluetooth/getDescriptors/descriptors-not-found-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/descriptors-not-found-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/descriptors-not-found-with-uuid.html" + } + ], + "mozilla/bluetooth/getDescriptors/descriptors-not-found.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/descriptors-not-found.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/descriptors-not-found.html" + } + ], + "mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html" + } + ], + "mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html" + } + ], + "mozilla/bluetooth/getDescriptors/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html" + } + ], + "mozilla/bluetooth/getDescriptors/disconnect-called-during.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/disconnect-called-during.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/disconnect-called-during.html" + } + ], + "mozilla/bluetooth/getDescriptors/get-same-descriptors.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/get-same-descriptors.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/get-same-descriptors.html" + } + ], + "mozilla/bluetooth/getDescriptors/invalid-descriptor-name.html": [ + { + "path": "mozilla/bluetooth/getDescriptors/invalid-descriptor-name.html", + "url": "/_mozilla/mozilla/bluetooth/getDescriptors/invalid-descriptor-name.html" + } + ], + "mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/getPrimaryService/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/getPrimaryService/disconnect-called-during.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/disconnect-called-during.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html" + } + ], + "mozilla/bluetooth/getPrimaryService/disconnected-device.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/disconnected-device.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/disconnected-device.html" + } + ], + "mozilla/bluetooth/getPrimaryService/get-same-service.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/get-same-service.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/get-same-service.html" + } + ], + "mozilla/bluetooth/getPrimaryService/invalid-service-name.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/invalid-service-name.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/invalid-service-name.html" + } + ], + "mozilla/bluetooth/getPrimaryService/no-permission-absent-service.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/no-permission-absent-service.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/no-permission-absent-service.html" + } + ], + "mozilla/bluetooth/getPrimaryService/no-permission-present-service.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/no-permission-present-service.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/no-permission-present-service.html" + } + ], + "mozilla/bluetooth/getPrimaryService/service-found.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/service-found.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/service-found.html" + } + ], + "mozilla/bluetooth/getPrimaryService/service-not-found.html": [ + { + "path": "mozilla/bluetooth/getPrimaryService/service-not-found.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryService/service-not-found.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/blacklisted-services-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/blacklisted-services-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/blacklisted-services-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/blacklisted-services.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/blacklisted-services.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/correct-services.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/correct-services.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/correct-services.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/disconnected-device.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/disconnected-device.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/disconnected-device.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/get-same-service.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/get-same-service.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/get-same-service.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/invalid-service-name.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/invalid-service-name.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/invalid-service-name.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/no-permission-absent-service-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/no-permission-absent-service-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/no-permission-absent-service-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/no-permission-present-service-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/no-permission-present-service-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/no-permission-present-service-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/services-found-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/services-found-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/services-found-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/services-found.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/services-found.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/services-found.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/services-not-found-with-uuid.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/services-not-found-with-uuid.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/services-not-found-with-uuid.html" + } + ], + "mozilla/bluetooth/getPrimaryServices/services-not-found.html": [ + { + "path": "mozilla/bluetooth/getPrimaryServices/services-not-found.html", + "url": "/_mozilla/mozilla/bluetooth/getPrimaryServices/services-not-found.html" + } + ], + "mozilla/bluetooth/readValue/characteristic/blacklisted-characteristic.html": [ + { + "path": "mozilla/bluetooth/readValue/characteristic/blacklisted-characteristic.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/characteristic/blacklisted-characteristic.html" + } + ], + "mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html": [ + { + "path": "mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html" + } + ], + "mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/readValue/characteristic/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/readValue/characteristic/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/characteristic/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/readValue/characteristic/read-succeeds.html": [ + { + "path": "mozilla/bluetooth/readValue/characteristic/read-succeeds.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/characteristic/read-succeeds.html" + } + ], + "mozilla/bluetooth/readValue/characteristic/read-updates-value.html": [ + { + "path": "mozilla/bluetooth/readValue/characteristic/read-updates-value.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/characteristic/read-updates-value.html" + } + ], + "mozilla/bluetooth/readValue/characteristic/service-is-removed.html": [ + { + "path": "mozilla/bluetooth/readValue/characteristic/service-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/characteristic/service-is-removed.html" + } + ], + "mozilla/bluetooth/readValue/descriptor/blacklisted-descriptor.html": [ + { + "path": "mozilla/bluetooth/readValue/descriptor/blacklisted-descriptor.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/descriptor/blacklisted-descriptor.html" + } + ], + "mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html": [ + { + "path": "mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html" + } + ], + "mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html": [ + { + "path": "mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html" + } + ], + "mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/readValue/descriptor/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/readValue/descriptor/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/descriptor/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/readValue/descriptor/read-succeeds.html": [ + { + "path": "mozilla/bluetooth/readValue/descriptor/read-succeeds.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/descriptor/read-succeeds.html" + } + ], + "mozilla/bluetooth/readValue/descriptor/read-updates-value.html": [ + { + "path": "mozilla/bluetooth/readValue/descriptor/read-updates-value.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/descriptor/read-updates-value.html" + } + ], + "mozilla/bluetooth/readValue/descriptor/service-is-removed.html": [ + { + "path": "mozilla/bluetooth/readValue/descriptor/service-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/readValue/descriptor/service-is-removed.html" + } + ], + "mozilla/bluetooth/requestDevice/accept-all-devices-with-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/accept-all-devices-with-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/accept-all-devices-with-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/accept-all-devices.html": [ + { + "path": "mozilla/bluetooth/requestDevice/accept-all-devices.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/accept-all-devices.html" + } + ], + "mozilla/bluetooth/requestDevice/adapter-not-present.html": [ + { + "path": "mozilla/bluetooth/requestDevice/adapter-not-present.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/adapter-not-present.html" + } + ], + "mozilla/bluetooth/requestDevice/adapter-off.html": [ + { + "path": "mozilla/bluetooth/requestDevice/adapter-off.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/adapter-off.html" + } + ], + "mozilla/bluetooth/requestDevice/blacklisted-service-in-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/blacklisted-service-in-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/blacklisted-service-in-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/blacklisted-service-in-optionalServices.html": [ + { + "path": "mozilla/bluetooth/requestDevice/blacklisted-service-in-optionalServices.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/blacklisted-service-in-optionalServices.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-name.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-name.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-name.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-namePrefix.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-namePrefix.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-namePrefix.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/no-arguments.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/no-arguments.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-arguments.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/no-filters-member.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/no-filters-member.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-filters-member.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-name.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-name.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-name.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-namePrefix.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-namePrefix.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-namePrefix.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.html" + } + ], + "mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.html": [ + { + "path": "mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.html" + } + ], + "mozilla/bluetooth/requestDevice/correct-uuids.html": [ + { + "path": "mozilla/bluetooth/requestDevice/correct-uuids.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/correct-uuids.html" + } + ], + "mozilla/bluetooth/requestDevice/discovery-succeeds.html": [ + { + "path": "mozilla/bluetooth/requestDevice/discovery-succeeds.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/discovery-succeeds.html" + } + ], + "mozilla/bluetooth/requestDevice/filter-does-not-match.html": [ + { + "path": "mozilla/bluetooth/requestDevice/filter-does-not-match.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/filter-does-not-match.html" + } + ], + "mozilla/bluetooth/requestDevice/filter-matches.html": [ + { + "path": "mozilla/bluetooth/requestDevice/filter-matches.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/filter-matches.html" + } + ], + "mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/name-empty-device-from-name-prefix-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-empty-device-from-name-prefix-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-empty-device-from-name-prefix-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/name-empty-device-from-name-wrong-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-empty-device-from-name-wrong-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-empty-device-from-name-wrong-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/name-empty-device-from-service-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-empty-device-from-service-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-empty-device-from-service-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/name-empty-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-empty-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-empty-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/name-missing-device-from-name-prefix-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-missing-device-from-name-prefix-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-missing-device-from-name-prefix-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/name-missing-device-from-name-wrong-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-missing-device-from-name-wrong-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-missing-device-from-name-wrong-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/name-missing-device-from-service-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/name-missing-device-from-service-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/name-missing-device-from-service-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/no-devices.html": [ + { + "path": "mozilla/bluetooth/requestDevice/no-devices.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/no-devices.html" + } + ], + "mozilla/bluetooth/requestDevice/not-accept-all-devices-without-filter.html": [ + { + "path": "mozilla/bluetooth/requestDevice/not-accept-all-devices-without-filter.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/not-accept-all-devices-without-filter.html" + } + ], + "mozilla/bluetooth/requestDevice/same-device.html": [ + { + "path": "mozilla/bluetooth/requestDevice/same-device.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/same-device.html" + } + ], + "mozilla/bluetooth/requestDevice/single-filter-single-service.html": [ + { + "path": "mozilla/bluetooth/requestDevice/single-filter-single-service.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/single-filter-single-service.html" + } + ], + "mozilla/bluetooth/requestDevice/single-filter-two-services-fails.html": [ + { + "path": "mozilla/bluetooth/requestDevice/single-filter-two-services-fails.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/single-filter-two-services-fails.html" + } + ], + "mozilla/bluetooth/requestDevice/single-filter-two-services-succeeds.html": [ + { + "path": "mozilla/bluetooth/requestDevice/single-filter-two-services-succeeds.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/single-filter-two-services-succeeds.html" + } + ], + "mozilla/bluetooth/requestDevice/two-filters.html": [ + { + "path": "mozilla/bluetooth/requestDevice/two-filters.html", + "url": "/_mozilla/mozilla/bluetooth/requestDevice/two-filters.html" + } + ], + "mozilla/bluetooth/writeValue/characteristic/blacklisted-characteristic.html": [ + { + "path": "mozilla/bluetooth/writeValue/characteristic/blacklisted-characteristic.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/characteristic/blacklisted-characteristic.html" + } + ], + "mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html": [ + { + "path": "mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html" + } + ], + "mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/writeValue/characteristic/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/writeValue/characteristic/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/characteristic/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/writeValue/characteristic/service-is-removed.html": [ + { + "path": "mozilla/bluetooth/writeValue/characteristic/service-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html" + } + ], + "mozilla/bluetooth/writeValue/characteristic/write-succeeds.html": [ + { + "path": "mozilla/bluetooth/writeValue/characteristic/write-succeeds.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/characteristic/write-succeeds.html" + } + ], + "mozilla/bluetooth/writeValue/characteristic/write-updates-value.html": [ + { + "path": "mozilla/bluetooth/writeValue/characteristic/write-updates-value.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html" + } + ], + "mozilla/bluetooth/writeValue/descriptor/blacklisted-descriptor.html": [ + { + "path": "mozilla/bluetooth/writeValue/descriptor/blacklisted-descriptor.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/descriptor/blacklisted-descriptor.html" + } + ], + "mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html": [ + { + "path": "mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html" + } + ], + "mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html": [ + { + "path": "mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html" + } + ], + "mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html": [ + { + "path": "mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html" + } + ], + "mozilla/bluetooth/writeValue/descriptor/disconnect-called-before.html": [ + { + "path": "mozilla/bluetooth/writeValue/descriptor/disconnect-called-before.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/descriptor/disconnect-called-before.html" + } + ], + "mozilla/bluetooth/writeValue/descriptor/service-is-removed.html": [ + { + "path": "mozilla/bluetooth/writeValue/descriptor/service-is-removed.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html" + } + ], + "mozilla/bluetooth/writeValue/descriptor/write-succeeds.html": [ + { + "path": "mozilla/bluetooth/writeValue/descriptor/write-succeeds.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/descriptor/write-succeeds.html" + } + ], + "mozilla/bluetooth/writeValue/descriptor/write-updates-value.html": [ + { + "path": "mozilla/bluetooth/writeValue/descriptor/write-updates-value.html", + "url": "/_mozilla/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html" + } + ], "mozilla/body_listener.html": [ { "path": "mozilla/body_listener.html", diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/__dir__.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/__dir__.ini new file mode 100644 index 00000000000..dbe637be21c --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/__dir__.ini @@ -0,0 +1 @@ +prefs: [dom.bluetooth.testing.enabled:true] diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/connect/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/connect/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/connect/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html.ini new file mode 100644 index 00000000000..5530d529555 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before.html] + type: testharness + [disconnect() called before getCharacteristic. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html.ini new file mode 100644 index 00000000000..1a2657fcbbf --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during.html] + type: testharness + [disconnect() called during getCharacteristic. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html.ini new file mode 100644 index 00000000000..f8695a4fbd3 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html.ini @@ -0,0 +1,4 @@ +[get-same-characteristic.html] + type: testharness + [Calls to get the same characteristic should return the same object.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/service-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/service-is-removed.html.ini new file mode 100644 index 00000000000..a53d4c55402 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristic/service-is-removed.html.ini @@ -0,0 +1,4 @@ +[service-is-removed.html] + type: testharness + [Service is removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html.ini new file mode 100644 index 00000000000..0361a4f320d --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html.ini @@ -0,0 +1,4 @@ +[blacklisted-characteristics.html] + type: testharness + [The Device Information service is composed of blacklisted characteristics so we shouldn't find any.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html.ini new file mode 100644 index 00000000000..806be3b9264 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range-with-uuid.html] + type: testharness + [Device goes out of range with UUID. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html.ini new file mode 100644 index 00000000000..964190d4d88 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before-with-uuid.html] + type: testharness + [disconnect() called before getCharacteristics. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html.ini new file mode 100644 index 00000000000..5999c62bbda --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before.html] + type: testharness + [disconnect() called before getCharacteristics. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html.ini new file mode 100644 index 00000000000..28fd369e511 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during-with-uuid.html] + type: testharness + [disconnect() called during getCharacteristics. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html.ini new file mode 100644 index 00000000000..69f6ca74231 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during.html] + type: testharness + [disconnect() called during getCharacteristics. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html.ini new file mode 100644 index 00000000000..a18e6fe0a04 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html.ini @@ -0,0 +1,4 @@ +[get-same-characteristics.html] + type: testharness + [Calls to get the same characteristics should return the same objects.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html.ini new file mode 100644 index 00000000000..9224f668cff --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html.ini @@ -0,0 +1,4 @@ +[service-is-removed-with-uuid.html] + type: testharness + [Service is removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/service-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/service-is-removed.html.ini new file mode 100644 index 00000000000..a53d4c55402 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getCharacteristics/service-is-removed.html.ini @@ -0,0 +1,4 @@ +[service-is-removed.html] + type: testharness + [Service is removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html.ini new file mode 100644 index 00000000000..0eefaf13656 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html.ini @@ -0,0 +1,4 @@ +[characteristic-is-removed.html] + type: testharness + [Characteristic is removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/disconnect-called-before.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/disconnect-called-before.html.ini new file mode 100644 index 00000000000..6754770f361 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/disconnect-called-before.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before.html] + type: testharness + [disconnect() called before getDescriptor. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/disconnect-called-during.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/disconnect-called-during.html.ini new file mode 100644 index 00000000000..af8f78fb97e --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/disconnect-called-during.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during.html] + type: testharness + [disconnect() called during getDescriptor. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/get-same-descriptor.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/get-same-descriptor.html.ini new file mode 100644 index 00000000000..135888ec1b1 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptor/get-same-descriptor.html.ini @@ -0,0 +1,4 @@ +[get-same-descriptor.html] + type: testharness + [Calls to get the same descriptor should return the same object.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html.ini new file mode 100644 index 00000000000..45cb3b6e316 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html.ini @@ -0,0 +1,4 @@ +[blacklisted-descriptors.html] + type: testharness + [The descriptors are blacklisted.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html.ini new file mode 100644 index 00000000000..ac0e362efc1 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html.ini @@ -0,0 +1,4 @@ +[characteristic-is-removed-with-uuid.html] + type: testharness + [Characteristic is removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html.ini new file mode 100644 index 00000000000..0eefaf13656 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html.ini @@ -0,0 +1,4 @@ +[characteristic-is-removed.html] + type: testharness + [Characteristic is removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html.ini new file mode 100644 index 00000000000..1008ff322ba --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range-with-uuid.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html.ini new file mode 100644 index 00000000000..2ef92759456 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before-with-uuid.html] + type: testharness + [disconnect() called before getDescriptors. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-before.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-before.html.ini new file mode 100644 index 00000000000..85d9bc4fba0 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-before.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before.html] + type: testharness + [disconnect() called before getDescriptors. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html.ini new file mode 100644 index 00000000000..da39583d21c --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during-with-uuid.html] + type: testharness + [disconnect() called during getDescriptors. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-during.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-during.html.ini new file mode 100644 index 00000000000..bb5eb54229a --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/disconnect-called-during.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during.html] + type: testharness + [disconnect() called during getDescriptors. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/get-same-descriptors.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/get-same-descriptors.html.ini new file mode 100644 index 00000000000..4b1fcfa08bf --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getDescriptors/get-same-descriptors.html.ini @@ -0,0 +1,4 @@ +[get-same-descriptors.html] + type: testharness + [Calls to get the same descriptor should return the same object.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html.ini new file mode 100644 index 00000000000..7bffa89c3f4 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before.html] + type: testharness + [disconnect() called before getPrimaryService. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html.ini new file mode 100644 index 00000000000..b258f7a5893 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during.html] + type: testharness + [disconnect() called during getPrimaryService. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnected-device.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnected-device.html.ini new file mode 100644 index 00000000000..e8641d4018e --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/disconnected-device.html.ini @@ -0,0 +1,4 @@ +[disconnected-device.html] + type: testharness + [getPrimaryService called before connecting. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/get-same-service.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/get-same-service.html.ini new file mode 100644 index 00000000000..d0a29707776 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryService/get-same-service.html.ini @@ -0,0 +1,4 @@ +[get-same-service.html] + type: testharness + [Calls to get the same service should return the same object.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html.ini new file mode 100644 index 00000000000..4cc7d7067e4 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html.ini @@ -0,0 +1,4 @@ +[blacklisted-services.html] + type: testharness + [Request for services. Does not return blacklisted service.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html.ini new file mode 100644 index 00000000000..1008ff322ba --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range-with-uuid.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html.ini new file mode 100644 index 00000000000..70c8240fe4e --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before-with-uuid.html] + type: testharness + [disconnect() called before getPrimaryServices. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html.ini new file mode 100644 index 00000000000..fd52ad11a12 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-before.html] + type: testharness + [disconnect() called before getPrimaryServices. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html.ini new file mode 100644 index 00000000000..74d4cfd37a7 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during-with-uuid.html] + type: testharness + [disconnect() called during getPrimaryServices. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html.ini new file mode 100644 index 00000000000..9b3e3ba70cd --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html.ini @@ -0,0 +1,4 @@ +[disconnect-called-during.html] + type: testharness + [disconnect() called during getPrimaryServices. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html.ini new file mode 100644 index 00000000000..8ce91b03bea --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html.ini @@ -0,0 +1,4 @@ +[disconnected-device-with-uuid.html] + type: testharness + [getPrimaryServices called before connecting. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnected-device.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnected-device.html.ini new file mode 100644 index 00000000000..2916ee4842e --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/disconnected-device.html.ini @@ -0,0 +1,4 @@ +[disconnected-device.html] + type: testharness + [getPrimaryServices called before connecting. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/get-same-service.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/get-same-service.html.ini new file mode 100644 index 00000000000..d0a29707776 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/get-same-service.html.ini @@ -0,0 +1,4 @@ +[get-same-service.html] + type: testharness + [Calls to get the same service should return the same object.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html.ini new file mode 100644 index 00000000000..e7abcfb7c1f --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html.ini @@ -0,0 +1,4 @@ +[no-permission-present-service.html] + type: testharness + [Request for present service without permission. Reject with NotFoundError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html.ini new file mode 100644 index 00000000000..5d421d6b8c7 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html.ini @@ -0,0 +1,4 @@ +[characteristic-is-removed.html] + type: testharness + [Characteristic gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/service-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/service-is-removed.html.ini new file mode 100644 index 00000000000..d4ab00c8d6f --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/characteristic/service-is-removed.html.ini @@ -0,0 +1,4 @@ +[service-is-removed.html] + type: testharness + [Service gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html.ini new file mode 100644 index 00000000000..5d421d6b8c7 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html.ini @@ -0,0 +1,4 @@ +[characteristic-is-removed.html] + type: testharness + [Characteristic gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html.ini new file mode 100644 index 00000000000..c59e14a44dc --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html.ini @@ -0,0 +1,4 @@ +[descriptor-is-removed.html] + type: testharness + [Descriptor gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/service-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/service-is-removed.html.ini new file mode 100644 index 00000000000..d4ab00c8d6f --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/readValue/descriptor/service-is-removed.html.ini @@ -0,0 +1,4 @@ +[service-is-removed.html] + type: testharness + [Service gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/adapter-not-present.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/adapter-not-present.html.ini new file mode 100644 index 00000000000..e3387360d4a --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/adapter-not-present.html.ini @@ -0,0 +1,4 @@ +[adapter-not-present.html] + type: testharness + [Reject with NotFoundError if the adapter is not present.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/adapter-off.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/adapter-off.html.ini new file mode 100644 index 00000000000..b1efda59017 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/adapter-off.html.ini @@ -0,0 +1,4 @@ +[adapter-off.html] + type: testharness + [Reject with NotFoundError if the adapter is off.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html.ini new file mode 100644 index 00000000000..fef1f01d99d --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html.ini @@ -0,0 +1,4 @@ +[max-length-for-name-in-adv-name.html] + type: testharness + [A device name longer than 29 must reject.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html.ini new file mode 100644 index 00000000000..1edd39d02f3 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html.ini @@ -0,0 +1,4 @@ +[max-length-for-name-in-adv-namePrefix.html] + type: testharness + [A device name prefix longer than 29 must reject.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html.ini new file mode 100644 index 00000000000..983a50d4896 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html.ini @@ -0,0 +1,4 @@ +[unicode-max-length-for-name-in-adv-name.html] + type: testharness + [Unicode string with utf8 representation between (29, 248\] bytes in 'name' must throw NotFoundError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html.ini new file mode 100644 index 00000000000..b940588a8cd --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html.ini @@ -0,0 +1,4 @@ +[unicode-max-length-for-name-in-adv-namePrefix.html] + type: testharness + [Unicode string with utf8 representation between (29, 248\] bytes in 'namePrefix' must throw NotFoundError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/correct-uuids.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/correct-uuids.html.ini new file mode 100644 index 00000000000..722de77f833 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/correct-uuids.html.ini @@ -0,0 +1,4 @@ +[correct-uuids.html] + type: testharness + [We should only see UUID's that we've been given permission for.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html.ini new file mode 100644 index 00000000000..1abfe05362f --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html.ini @@ -0,0 +1,4 @@ +[name-empty-device-from-name-empty-filter.html] + type: testharness + [An empty name device can be obtained by empty name filter.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-empty-filter.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-empty-filter.html.ini new file mode 100644 index 00000000000..9d60059908f --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-empty-filter.html.ini @@ -0,0 +1,4 @@ +[name-empty-filter.html] + type: testharness + [A named device is not matched by a filter with an empty name.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html.ini new file mode 100644 index 00000000000..7737a256495 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html.ini @@ -0,0 +1,4 @@ +[name-missing-device-from-name-empty-filter.html] + type: testharness + [An unnamed device can not be obtained by empty name filter.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/same-device.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/same-device.html.ini new file mode 100644 index 00000000000..cadf49ab858 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/requestDevice/same-device.html.ini @@ -0,0 +1,4 @@ +[same-device.html] + type: testharness + [Returned device should always be the same.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html.ini new file mode 100644 index 00000000000..5d421d6b8c7 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html.ini @@ -0,0 +1,4 @@ +[characteristic-is-removed.html] + type: testharness + [Characteristic gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html.ini new file mode 100644 index 00000000000..d4ab00c8d6f --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html.ini @@ -0,0 +1,4 @@ +[service-is-removed.html] + type: testharness + [Service gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html.ini new file mode 100644 index 00000000000..a61aadb0883 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html.ini @@ -0,0 +1,4 @@ +[write-updates-value.html] + type: testharness + [A regular write request to a writable characteristic should update value.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html.ini new file mode 100644 index 00000000000..5d421d6b8c7 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html.ini @@ -0,0 +1,4 @@ +[characteristic-is-removed.html] + type: testharness + [Characteristic gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html.ini new file mode 100644 index 00000000000..c59e14a44dc --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html.ini @@ -0,0 +1,4 @@ +[descriptor-is-removed.html] + type: testharness + [Descriptor gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html.ini new file mode 100644 index 00000000000..45a9d5dbde9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html.ini @@ -0,0 +1,4 @@ +[device-goes-out-of-range.html] + type: testharness + [Device goes out of range. Reject with NetworkError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html.ini new file mode 100644 index 00000000000..d4ab00c8d6f --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html.ini @@ -0,0 +1,4 @@ +[service-is-removed.html] + type: testharness + [Service gets removed. Reject with InvalidStateError.] + expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html.ini new file mode 100644 index 00000000000..f96edea6781 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html.ini @@ -0,0 +1,4 @@ +[write-updates-value.html] + type: testharness + [A regular write request to a writable descriptor should update value.] + expected: FAIL diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/connection-succeeds.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/connection-succeeds.html new file mode 100644 index 00000000000..34747ba93a6 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/connection-succeeds.html @@ -0,0 +1,15 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/device-goes-out-of-range.html new file mode 100644 index 00000000000..063bcb6b009 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/device-goes-out-of-range.html @@ -0,0 +1,17 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/get-same-gatt-server.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/get-same-gatt-server.html new file mode 100644 index 00000000000..85dab11927f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/connect/get-same-gatt-server.html @@ -0,0 +1,15 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/connect-disconnect-twice.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/connect-disconnect-twice.html new file mode 100644 index 00000000000..51cac67b626 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/connect-disconnect-twice.html @@ -0,0 +1,26 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/disconnect-once.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/disconnect-once.html new file mode 100644 index 00000000000..1e13b354d7b --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/disconnect-once.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/disconnect-twice-in-a-row.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/disconnect-twice-in-a-row.html new file mode 100644 index 00000000000..0fa63704779 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/disconnect/disconnect-twice-in-a-row.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/blacklisted-characteristic.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/blacklisted-characteristic.html new file mode 100644 index 00000000000..131c7fa3afd --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/blacklisted-characteristic.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/characteristic-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/characteristic-found.html new file mode 100644 index 00000000000..10754eaad3d --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/characteristic-found.html @@ -0,0 +1,32 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/characteristic-not-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/characteristic-not-found.html new file mode 100644 index 00000000000..a7360567a22 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/characteristic-not-found.html @@ -0,0 +1,17 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html new file mode 100644 index 00000000000..87491e03439 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/device-goes-out-of-range.html @@ -0,0 +1,20 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html new file mode 100644 index 00000000000..63f00e2c6c8 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/disconnect-called-before.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html new file mode 100644 index 00000000000..983c191b616 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/disconnect-called-during.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html new file mode 100644 index 00000000000..f749e8e2ccb --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/get-same-characteristic.html @@ -0,0 +1,27 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/invalid-characteristic-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/invalid-characteristic-name.html new file mode 100644 index 00000000000..418603ea43d --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/invalid-characteristic-name.html @@ -0,0 +1,17 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/service-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/service-is-removed.html new file mode 100644 index 00000000000..9a10c745ab4 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristic/service-is-removed.html @@ -0,0 +1,20 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics-with-uuid.html new file mode 100644 index 00000000000..9957fa98b31 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics-with-uuid.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html new file mode 100644 index 00000000000..f4701ac77ca --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/blacklisted-characteristics.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-found-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-found-with-uuid.html new file mode 100644 index 00000000000..d078623642f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-found-with-uuid.html @@ -0,0 +1,28 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-found.html new file mode 100644 index 00000000000..d50e8e44921 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-found.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-not-found-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-not-found-with-uuid.html new file mode 100644 index 00000000000..9c4f0bcd310 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-not-found-with-uuid.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-not-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-not-found.html new file mode 100644 index 00000000000..029d20c48da --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/characteristics-not-found.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/correct-characteristics.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/correct-characteristics.html new file mode 100644 index 00000000000..f3a1f88649f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/correct-characteristics.html @@ -0,0 +1,20 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html new file mode 100644 index 00000000000..735e2c63a95 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html new file mode 100644 index 00000000000..b852d85f492 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/device-goes-out-of-range.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html new file mode 100644 index 00000000000..02f3cace850 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-before-with-uuid.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html new file mode 100644 index 00000000000..a4462a8a8ae --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-before.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html new file mode 100644 index 00000000000..f54500fa844 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-during-with-uuid.html @@ -0,0 +1,23 @@ + + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html new file mode 100644 index 00000000000..9905336ec64 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/disconnect-called-during.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html new file mode 100644 index 00000000000..4911bce432c --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/get-same-characteristics.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/invalid-characteristic-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/invalid-characteristic-name.html new file mode 100644 index 00000000000..ea960f6af10 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/invalid-characteristic-name.html @@ -0,0 +1,17 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html new file mode 100644 index 00000000000..d6a4e546e7f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/service-is-removed-with-uuid.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/service-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/service-is-removed.html new file mode 100644 index 00000000000..1847acf7db4 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getCharacteristics/service-is-removed.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/blacklisted-descriptor.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/blacklisted-descriptor.html new file mode 100644 index 00000000000..69487ee04a4 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/blacklisted-descriptor.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html new file mode 100644 index 00000000000..7af5169917c --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/characteristic-is-removed.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/descriptor-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/descriptor-found.html new file mode 100644 index 00000000000..4ae4ec1f93f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/descriptor-found.html @@ -0,0 +1,33 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/descriptor-not-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/descriptor-not-found.html new file mode 100644 index 00000000000..ac1673956a1 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/descriptor-not-found.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html new file mode 100644 index 00000000000..f766aab8a04 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/device-goes-out-of-range.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/disconnect-called-before.html new file mode 100644 index 00000000000..da515ef859c --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/disconnect-called-before.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/disconnect-called-during.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/disconnect-called-during.html new file mode 100644 index 00000000000..812d506a9ff --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/disconnect-called-during.html @@ -0,0 +1,24 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/get-same-descriptor.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/get-same-descriptor.html new file mode 100644 index 00000000000..9a64c293309 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/get-same-descriptor.html @@ -0,0 +1,28 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/invalid-descriptor-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/invalid-descriptor-name.html new file mode 100644 index 00000000000..c2b29c3fc99 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptor/invalid-descriptor-name.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/blacklisted-descriptors-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/blacklisted-descriptors-with-uuid.html new file mode 100644 index 00000000000..5798594c9fb --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/blacklisted-descriptors-with-uuid.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html new file mode 100644 index 00000000000..7859376a64c --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/blacklisted-descriptors.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html new file mode 100644 index 00000000000..ca343b558b0 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/characteristic-is-removed-with-uuid.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html new file mode 100644 index 00000000000..37d549da975 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/characteristic-is-removed.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/correct-descriptors.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/correct-descriptors.html new file mode 100644 index 00000000000..99742f1c74b --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/correct-descriptors.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-found-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-found-with-uuid.html new file mode 100644 index 00000000000..77066e1af4e --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-found-with-uuid.html @@ -0,0 +1,30 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-found.html new file mode 100644 index 00000000000..537b7da3c20 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-found.html @@ -0,0 +1,25 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-not-found-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-not-found-with-uuid.html new file mode 100644 index 00000000000..7a1aff27fd1 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-not-found-with-uuid.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-not-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-not-found.html new file mode 100644 index 00000000000..dd1f7937459 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/descriptors-not-found.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html new file mode 100644 index 00000000000..3e4b5cc7a75 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/device-goes-out-of-range-with-uuid.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html new file mode 100644 index 00000000000..4f62af9447c --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/device-goes-out-of-range.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html new file mode 100644 index 00000000000..f3ae8ba674b --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-before-with-uuid.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-before.html new file mode 100644 index 00000000000..a18710484cd --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-before.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html new file mode 100644 index 00000000000..7994b46d281 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-during-with-uuid.html @@ -0,0 +1,24 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-during.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-during.html new file mode 100644 index 00000000000..67f8394b9f8 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/disconnect-called-during.html @@ -0,0 +1,24 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/get-same-descriptors.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/get-same-descriptors.html new file mode 100644 index 00000000000..b0f761c5dff --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/get-same-descriptors.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/invalid-descriptor-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/invalid-descriptor-name.html new file mode 100644 index 00000000000..573bf7627c0 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getDescriptors/invalid-descriptor-name.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html new file mode 100644 index 00000000000..0de62861621 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/device-goes-out-of-range.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html new file mode 100644 index 00000000000..f13e494febe --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnect-called-before.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html new file mode 100644 index 00000000000..35463ca94e3 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnect-called-during.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnected-device.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnected-device.html new file mode 100644 index 00000000000..4de7ea326c2 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/disconnected-device.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/get-same-service.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/get-same-service.html new file mode 100644 index 00000000000..752b929a845 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/get-same-service.html @@ -0,0 +1,24 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/invalid-service-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/invalid-service-name.html new file mode 100644 index 00000000000..a4406338c39 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/invalid-service-name.html @@ -0,0 +1,15 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/no-permission-absent-service.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/no-permission-absent-service.html new file mode 100644 index 00000000000..bb431828536 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/no-permission-absent-service.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/no-permission-present-service.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/no-permission-present-service.html new file mode 100644 index 00000000000..63a22fc519b --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/no-permission-present-service.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/service-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/service-found.html new file mode 100644 index 00000000000..a9656dcbc47 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/service-found.html @@ -0,0 +1,31 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/service-not-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/service-not-found.html new file mode 100644 index 00000000000..6009f09a5fd --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryService/service-not-found.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/blacklisted-services-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/blacklisted-services-with-uuid.html new file mode 100644 index 00000000000..988b6dea840 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/blacklisted-services-with-uuid.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html new file mode 100644 index 00000000000..f5e0317e7be --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/blacklisted-services.html @@ -0,0 +1,26 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/correct-services.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/correct-services.html new file mode 100644 index 00000000000..3b14e7e257f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/correct-services.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html new file mode 100644 index 00000000000..cb001e7366d --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range-with-uuid.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html new file mode 100644 index 00000000000..068c38ecdeb --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/device-goes-out-of-range.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html new file mode 100644 index 00000000000..05db5f52c54 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-before-with-uuid.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html new file mode 100644 index 00000000000..87d8a362eeb --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-before.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html new file mode 100644 index 00000000000..9b43949f924 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-during-with-uuid.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html new file mode 100644 index 00000000000..229e4de7f40 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnect-called-during.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html new file mode 100644 index 00000000000..54bb8f6ac14 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnected-device-with-uuid.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnected-device.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnected-device.html new file mode 100644 index 00000000000..37700135f81 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/disconnected-device.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/get-same-service.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/get-same-service.html new file mode 100644 index 00000000000..889951315e0 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/get-same-service.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/invalid-service-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/invalid-service-name.html new file mode 100644 index 00000000000..dfae1d89a2b --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/invalid-service-name.html @@ -0,0 +1,15 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-absent-service-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-absent-service-with-uuid.html new file mode 100644 index 00000000000..6f23bb9217b --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-absent-service-with-uuid.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-present-service-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-present-service-with-uuid.html new file mode 100644 index 00000000000..9ed16d2a3a0 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-present-service-with-uuid.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html new file mode 100644 index 00000000000..d56f7b4e167 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/no-permission-present-service.html @@ -0,0 +1,15 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-found-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-found-with-uuid.html new file mode 100644 index 00000000000..7b262688706 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-found-with-uuid.html @@ -0,0 +1,27 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-found.html new file mode 100644 index 00000000000..d5286126f27 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-found.html @@ -0,0 +1,25 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-not-found-with-uuid.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-not-found-with-uuid.html new file mode 100644 index 00000000000..42ebb2c48a6 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-not-found-with-uuid.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-not-found.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-not-found.html new file mode 100644 index 00000000000..d7be5d8d005 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getPrimaryServices/services-not-found.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/blacklisted-characteristic.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/blacklisted-characteristic.html new file mode 100644 index 00000000000..fda94bf4f1f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/blacklisted-characteristic.html @@ -0,0 +1,20 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html new file mode 100644 index 00000000000..235a1252689 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/characteristic-is-removed.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html new file mode 100644 index 00000000000..c122101ab0f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/device-goes-out-of-range.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/disconnect-called-before.html new file mode 100644 index 00000000000..b3bfcb71726 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/disconnect-called-before.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/read-succeeds.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/read-succeeds.html new file mode 100644 index 00000000000..47c67838856 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/read-succeeds.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/read-updates-value.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/read-updates-value.html new file mode 100644 index 00000000000..e9ccdc037a8 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/read-updates-value.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/service-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/service-is-removed.html new file mode 100644 index 00000000000..de072c5309e --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/characteristic/service-is-removed.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/blacklisted-descriptor.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/blacklisted-descriptor.html new file mode 100644 index 00000000000..a64633ed004 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/blacklisted-descriptor.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html new file mode 100644 index 00000000000..6914f6950de --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/characteristic-is-removed.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html new file mode 100644 index 00000000000..cbd91f011b5 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/descriptor-is-removed.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html new file mode 100644 index 00000000000..ab300b2249a --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/device-goes-out-of-range.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/disconnect-called-before.html new file mode 100644 index 00000000000..5641a22aa9e --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/disconnect-called-before.html @@ -0,0 +1,24 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/read-succeeds.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/read-succeeds.html new file mode 100644 index 00000000000..1b810c67983 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/read-succeeds.html @@ -0,0 +1,20 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/read-updates-value.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/read-updates-value.html new file mode 100644 index 00000000000..376cde92168 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/read-updates-value.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/service-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/service-is-removed.html new file mode 100644 index 00000000000..fb0d1f95ff5 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/readValue/descriptor/service-is-removed.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/accept-all-devices-with-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/accept-all-devices-with-filter.html new file mode 100644 index 00000000000..e8eba04ae8f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/accept-all-devices-with-filter.html @@ -0,0 +1,15 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/accept-all-devices.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/accept-all-devices.html new file mode 100644 index 00000000000..0c2e16db957 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/accept-all-devices.html @@ -0,0 +1,12 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/adapter-not-present.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/adapter-not-present.html new file mode 100644 index 00000000000..9f5a419bad5 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/adapter-not-present.html @@ -0,0 +1,13 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/adapter-off.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/adapter-off.html new file mode 100644 index 00000000000..06e7d804856 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/adapter-off.html @@ -0,0 +1,13 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/blacklisted-service-in-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/blacklisted-service-in-filter.html new file mode 100644 index 00000000000..73ba18855e2 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/blacklisted-service-in-filter.html @@ -0,0 +1,13 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/blacklisted-service-in-optionalServices.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/blacklisted-service-in-optionalServices.html new file mode 100644 index 00000000000..a1ef467cd11 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/blacklisted-service-in-optionalServices.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filter.html new file mode 100644 index 00000000000..e78165b2d75 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filter.html @@ -0,0 +1,11 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.html new file mode 100644 index 00000000000..4acfedef2bf --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.html @@ -0,0 +1,12 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.html new file mode 100644 index 00000000000..b296fe7a29a --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.html @@ -0,0 +1,38 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.html new file mode 100644 index 00000000000..9176cc76626 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.html @@ -0,0 +1,38 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-name.html new file mode 100644 index 00000000000..9b35a48ac92 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-name.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-namePrefix.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-namePrefix.html new file mode 100644 index 00000000000..c2321712ced --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-device-name-namePrefix.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html new file mode 100644 index 00000000000..7ea0dafa53e --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-name.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html new file mode 100644 index 00000000000..7b8d7ced422 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/max-length-for-name-in-adv-namePrefix.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-arguments.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-arguments.html new file mode 100644 index 00000000000..3e59141ad09 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-arguments.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-filters-member.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-filters-member.html new file mode 100644 index 00000000000..0763557d308 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/no-filters-member.html @@ -0,0 +1,16 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-name.html new file mode 100644 index 00000000000..3a5ca1fe042 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-name.html @@ -0,0 +1,17 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-namePrefix.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-namePrefix.html new file mode 100644 index 00000000000..978d58e8de3 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-device-name-namePrefix.html @@ -0,0 +1,17 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html new file mode 100644 index 00000000000..f32a26929d6 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-name.html @@ -0,0 +1,17 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html new file mode 100644 index 00000000000..46a0c8072ae --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-max-length-for-name-in-adv-namePrefix.html @@ -0,0 +1,17 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.html new file mode 100644 index 00000000000..6bead355297 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.html @@ -0,0 +1,19 @@ + + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.html new file mode 100644 index 00000000000..e02e4b3a19c --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.html new file mode 100644 index 00000000000..dd6a5d7317e --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.html @@ -0,0 +1,38 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.html new file mode 100644 index 00000000000..cb84b955fa2 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.html @@ -0,0 +1,37 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/correct-uuids.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/correct-uuids.html new file mode 100644 index 00000000000..86eee7f2307 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/correct-uuids.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/discovery-succeeds.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/discovery-succeeds.html new file mode 100644 index 00000000000..bb5b669c431 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/discovery-succeeds.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/filter-does-not-match.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/filter-does-not-match.html new file mode 100644 index 00000000000..d9066068a1f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/filter-does-not-match.html @@ -0,0 +1,94 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/filter-matches.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/filter-matches.html new file mode 100644 index 00000000000..f137d541fdf --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/filter-matches.html @@ -0,0 +1,64 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html new file mode 100644 index 00000000000..5fc093ba4e9 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.html @@ -0,0 +1,15 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-prefix-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-prefix-filter.html new file mode 100644 index 00000000000..553d5cf8367 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-prefix-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-wrong-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-wrong-filter.html new file mode 100644 index 00000000000..17454b7a40a --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-name-wrong-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-service-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-service-filter.html new file mode 100644 index 00000000000..0c8ad3eff6d --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-device-from-service-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-filter.html new file mode 100644 index 00000000000..85e9c94a59f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-empty-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html new file mode 100644 index 00000000000..8477b5a1da9 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-empty-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-prefix-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-prefix-filter.html new file mode 100644 index 00000000000..e34fa4fa9ff --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-prefix-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-wrong-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-wrong-filter.html new file mode 100644 index 00000000000..1686d48f132 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-name-wrong-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-service-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-service-filter.html new file mode 100644 index 00000000000..1073fc5f465 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/name-missing-device-from-service-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/no-devices.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/no-devices.html new file mode 100644 index 00000000000..5ef8848b9b2 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/no-devices.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/not-accept-all-devices-without-filter.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/not-accept-all-devices-without-filter.html new file mode 100644 index 00000000000..013432047ad --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/not-accept-all-devices-without-filter.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/same-device.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/same-device.html new file mode 100644 index 00000000000..ead68342ee9 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/same-device.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-single-service.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-single-service.html new file mode 100644 index 00000000000..10ffd492447 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-single-service.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-two-services-fails.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-two-services-fails.html new file mode 100644 index 00000000000..5c49545d14f --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-two-services-fails.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-two-services-succeeds.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-two-services-succeeds.html new file mode 100644 index 00000000000..3da018861c5 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/single-filter-two-services-succeeds.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/two-filters.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/two-filters.html new file mode 100644 index 00000000000..c5dd766f898 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/requestDevice/two-filters.html @@ -0,0 +1,15 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/blacklisted-characteristic.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/blacklisted-characteristic.html new file mode 100644 index 00000000000..cd591ccd056 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/blacklisted-characteristic.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html new file mode 100644 index 00000000000..35d002c07c1 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/characteristic-is-removed.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html new file mode 100644 index 00000000000..45a3076ae91 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/device-goes-out-of-range.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/disconnect-called-before.html new file mode 100644 index 00000000000..1ebe8ca7696 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/disconnect-called-before.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html new file mode 100644 index 00000000000..f51bfe44a4e --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/service-is-removed.html @@ -0,0 +1,21 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/write-succeeds.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/write-succeeds.html new file mode 100644 index 00000000000..0344c2c2d21 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/write-succeeds.html @@ -0,0 +1,18 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html new file mode 100644 index 00000000000..d49dc2933c3 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/characteristic/write-updates-value.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/blacklisted-descriptor.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/blacklisted-descriptor.html new file mode 100644 index 00000000000..709053449a9 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/blacklisted-descriptor.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html new file mode 100644 index 00000000000..0ab4aa51a14 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/characteristic-is-removed.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html new file mode 100644 index 00000000000..68e48930a72 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/descriptor-is-removed.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html new file mode 100644 index 00000000000..6bae889ac15 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/device-goes-out-of-range.html @@ -0,0 +1,22 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/disconnect-called-before.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/disconnect-called-before.html new file mode 100644 index 00000000000..939f9e4be36 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/disconnect-called-before.html @@ -0,0 +1,24 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html new file mode 100644 index 00000000000..36d38d44d2c --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/service-is-removed.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/write-succeeds.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/write-succeeds.html new file mode 100644 index 00000000000..9a0c3c66127 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/write-succeeds.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html new file mode 100644 index 00000000000..9fb5adf749d --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/writeValue/descriptor/write-updates-value.html @@ -0,0 +1,23 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/bluetooth/bluetooth-helpers.js b/tests/wpt/web-platform-tests/bluetooth/bluetooth-helpers.js new file mode 100644 index 00000000000..14ed7d66d85 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/bluetooth-helpers.js @@ -0,0 +1,147 @@ +'use strict'; + +// Bluetooth UUID constants: +// Services: +var blacklist_test_service_uuid = "611c954a-263b-4f4a-aab6-01ddb953f985"; +var request_disconnection_service_uuid = "01d7d889-7451-419f-aeb8-d65e7b9277af"; +// Characteristics: +var blacklist_exclude_reads_characteristic_uuid = "bad1c9a2-9a5b-4015-8b60-1579bbbf2135"; +var request_disconnection_characteristic_uuid = "01d7d88a-7451-419f-aeb8-d65e7b9277af"; +// Descriptors: +var blacklist_exclude_reads_descriptor_uuid = "aaaaaaaa-aaaa-1181-0510-810819516110"; +var blacklist_descriptor_uuid = "07711111-6104-0970-7011-1107105110aaa"; +var characteristic_user_description_uuid = "00002901-0000-1000-8000-00805f9b34fb"; + +// Bluetooth Adapter types: +var adapter_type = { + not_present: 'NotPresentAdapter', + not_powered: 'NotPoweredAdapter', + empty: 'EmptyAdapter', + heart_rate: 'HeartRateAdapter', + two_heart_rate: 'TwoHeartRateServicesAdapter', + empty_name_heart_rate: 'EmptyNameHeartRateAdapter', + no_name_heart_rate: 'NoNameHeartRateAdapter', + glucose_heart_rate: 'GlucoseHeartRateAdapter', + unicode_device: 'UnicodeDeviceAdapter', + blacklist: 'BlacklistTestAdapter', + missing_characteristic_heart_rate: 'MissingCharacteristicHeartRateAdapter', + missing_service_heart_rate: 'MissingServiceHeartRateAdapter', + missing_descriptor_heart_rate: 'MissingDescriptorHeartRateAdapter' +}; + +var mock_device_name = { + heart_rate: 'Heart Rate Device', + glucose: 'Glucose Device' +}; + +var wrong = { + name: 'wrong_name', + service: 'wrong_service' +}; + +// Sometimes we need to test that using either the name, alias, or UUID +// produces the same result. The following objects help us do that. +var generic_access = { + alias: 0x1800, + name: 'generic_access', + uuid: '00001800-0000-1000-8000-00805f9b34fb' +}; + +var device_name = { + alias: 0x2a00, + name: 'gap.device_name', + uuid: '00002a00-0000-1000-8000-00805f9b34fb' +}; + +var reconnection_address = { + alias: 0x2a03, + name: 'gap.reconnection_address', + uuid: '00002a03-0000-1000-8000-00805f9b34fb' +}; + +var heart_rate = { + alias: 0x180d, + name: 'heart_rate', + uuid: '0000180d-0000-1000-8000-00805f9b34fb' +}; + +var heart_rate_measurement = { + alias: 0x2a37, + name: 'heart_rate_measurement', + uuid: '00002a37-0000-1000-8000-00805f9b34fb' +}; + +var body_sensor_location = { + alias: 0x2a38, + name: 'body_sensor_location', + uuid: '00002a38-0000-1000-8000-00805f9b34fb' +}; + +var glucose = { + alias: 0x1808, + name: 'glucose', + uuid: '00001808-0000-1000-8000-00805f9b34fb' +}; + +var battery_service = { + alias: 0x180f, + name: 'battery_service', + uuid: '0000180f-0000-1000-8000-00805f9b34fb' +}; + +var battery_level = { + alias: 0x2a19, + name: 'battery_level', + uuid: '00002a19-0000-1000-8000-00805f9b34fb' +}; + +var tx_power = { + alias: 0x1804, + name: 'tx_power', + uuid: '00001804-0000-1000-8000-00805f9b34fb' +}; + +var human_interface_device = { + alias: 0x1812, + name: 'human_interface_device', + uuid: '00001812-0000-1000-8000-00805f9b34fb' +}; + +var device_information = { + alias: 0x180a, + name: 'device_information', + uuid: '0000180a-0000-1000-8000-00805f9b34fb' +}; + +var peripherial_privacy_flag = { + alias: 0x2a02, + name: 'gap.peripheral_privacy_flag', + uuid: '00002a02-0000-1000-8000-00805f9b34fb' +}; + +var serial_number_string = { + alias: 0x2a25, + name: 'serial_number_string', + uuid: '00002a25-0000-1000-8000-00805f9b34fb' +}; + +var client_characteristic_configuration = { + alias: 0x2902, + name: 'gatt.client_characteristic_configuration', + uuid: '00002902-0000-1000-8000-00805f9b34fb' +}; + +var number_of_digitals = { + alias: 0x2909, + name: 'number_of_digitals', + uuid: '00002909-0000-1000-8000-00805f9b34fb' +}; + +// Helper function for converting strings to an array of bytes. +function asciiToDecimal(bytestr) { + var result = []; + for(var i = 0; i < bytestr.length; i++) { + result[i] = bytestr.charCodeAt(i) ; + } + return result; +}