servo: Merge #20386 - style: Rename StyleContext to ComputedStyle (from emilio:computed-style-rename); r=jwatt
authorEmilio Cobos Álvarez <emilio@crisal.io>
Thu, 22 Mar 2018 13:48:24 -0400
changeset 409591 f424cb5c00bc809c2bfe94c1aaad65d2f839ac5f
parent 409590 e63bed3691637c8d0cb05dcbefdde067bdaf07fe
child 409592 b683bb3f22a1aef672332aa3ee9d2c7a77149913
push id101247
push usernerli@mozilla.com
push dateThu, 22 Mar 2018 23:00:51 +0000
treeherdermozilla-inbound@02e384bdf97d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjwatt
milestone61.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
servo: Merge #20386 - style: Rename StyleContext to ComputedStyle (from emilio:computed-style-rename); r=jwatt Bug: 1447483 Reviewed-by: jwatt MozReview-Commit-ID: KATZ6DkmpVY Source-Repo: https://github.com/servo/servo Source-Revision: 563f0ec8245d6ff4d7d200c30655f90f5bdfed64
servo/components/style/gecko/arc_types.rs
servo/components/style/gecko/generated/atom_macro.rs
servo/components/style/gecko/generated/bindings.rs
servo/components/style/gecko/generated/structs.rs
servo/components/style/properties/gecko.mako.rs
servo/components/style/properties/properties.mako.rs
servo/components/style/sharing/mod.rs
servo/components/style/style_adjuster.rs
servo/ports/geckolib/glue.rs
--- a/servo/components/style/gecko/arc_types.rs
+++ b/servo/components/style/gecko/arc_types.rs
@@ -111,29 +111,29 @@ pub unsafe extern "C" fn Servo_RuleNode_
 }
 
 #[no_mangle]
 pub unsafe extern "C" fn Servo_RuleNode_Release(obj: &RawServoRuleNode) {
     let ptr = StrongRuleNode::from_ffi(&obj);
     ptr::read(ptr as *const StrongRuleNode);
 }
 
-// ServoStyleContext is not an opaque type on any side of FFI.
+// ComputedStyle is not an opaque type on any side of FFI.
 // This means that doing the HasArcFFI type trick is actually unsound,
-// since it gives us a way to construct an Arc<ServoStyleContext> from
-// an &ServoStyleContext, which in general is not allowed. So we
+// since it gives us a way to construct an Arc<ComputedStyle> from
+// an &ComputedStyle, which in general is not allowed. So we
 // implement the restricted set of arc type functionality we need.
 
 #[no_mangle]
-pub unsafe extern "C" fn Servo_StyleContext_AddRef(obj: &ComputedValues) {
+pub unsafe extern "C" fn Servo_ComputedStyle_AddRef(obj: &ComputedValues) {
     mem::forget(ArcBorrow::from_ref(obj).clone_arc());
 }
 
 #[no_mangle]
-pub unsafe extern "C" fn Servo_StyleContext_Release(obj: &ComputedValues) {
+pub unsafe extern "C" fn Servo_ComputedStyle_Release(obj: &ComputedValues) {
     ArcBorrow::from_ref(obj).with_arc(|a: &Arc<ComputedValues>| {
         let _: Arc<ComputedValues> = ptr::read(a);
     });
 }
 
 
 impl From<Arc<ComputedValues>> for Strong<ComputedValues> {
     fn from(arc: Arc<ComputedValues>) -> Self {
--- a/servo/components/style/gecko/generated/atom_macro.rs
+++ b/servo/components/style/gecko/generated/atom_macro.rs
@@ -975,18 +975,16 @@ cfg_if! {
             #[link_name = "_ZN9nsGkAtoms16graphicsDocumentE"]
             pub static nsGkAtoms_graphicsDocument: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms14graphicsObjectE"]
             pub static nsGkAtoms_graphicsObject: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms14graphicsSymbolE"]
             pub static nsGkAtoms_graphicsSymbol: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms4gridE"]
             pub static nsGkAtoms_grid: *mut nsStaticAtom;
-            #[link_name = "_ZN9nsGkAtoms6grippyE"]
-            pub static nsGkAtoms_grippy: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms5groupE"]
             pub static nsGkAtoms_group: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms8groupboxE"]
             pub static nsGkAtoms_groupbox: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms17groupingSeparatorE"]
             pub static nsGkAtoms_groupingSeparator: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms12groupingSizeE"]
             pub static nsGkAtoms_groupingSize: *mut nsStaticAtom;
@@ -3281,20 +3279,24 @@ cfg_if! {
             #[link_name = "_ZN9nsGkAtoms2rxE"]
             pub static nsGkAtoms_rx: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms2ryE"]
             pub static nsGkAtoms_ry: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms8saturateE"]
             pub static nsGkAtoms_saturate: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms10saturationE"]
             pub static nsGkAtoms_saturation: *mut nsStaticAtom;
+            #[link_name = "_ZN9nsGkAtoms3setE"]
+            pub static nsGkAtoms_set: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms4seedE"]
             pub static nsGkAtoms_seed: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms15shape_renderingE"]
             pub static nsGkAtoms_shape_rendering: *mut nsStaticAtom;
+            #[link_name = "_ZN9nsGkAtoms16simpleScopeChainE"]
+            pub static nsGkAtoms_simpleScopeChain: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms5skewXE"]
             pub static nsGkAtoms_skewX: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms5skewYE"]
             pub static nsGkAtoms_skewY: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms5slopeE"]
             pub static nsGkAtoms_slope: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms4slotE"]
             pub static nsGkAtoms_slot: *mut nsStaticAtom;
@@ -3929,18 +3931,16 @@ cfg_if! {
             #[link_name = "_ZN9nsGkAtoms10separator_E"]
             pub static nsGkAtoms_separator_: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms11separators_E"]
             pub static nsGkAtoms_separators_: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms4sep_E"]
             pub static nsGkAtoms_sep_: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms8setdiff_E"]
             pub static nsGkAtoms_setdiff_: *mut nsStaticAtom;
-            #[link_name = "_ZN9nsGkAtoms4set_E"]
-            pub static nsGkAtoms_set_: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms6share_E"]
             pub static nsGkAtoms_share_: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms6shift_E"]
             pub static nsGkAtoms_shift_: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms5side_E"]
             pub static nsGkAtoms_side_: *mut nsStaticAtom;
             #[link_name = "_ZN9nsGkAtoms5sinh_E"]
             pub static nsGkAtoms_sinh_: *mut nsStaticAtom;
@@ -6200,18 +6200,16 @@ cfg_if! {
             #[link_name = "?graphicsDocument@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_graphicsDocument: *mut nsStaticAtom;
             #[link_name = "?graphicsObject@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_graphicsObject: *mut nsStaticAtom;
             #[link_name = "?graphicsSymbol@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_graphicsSymbol: *mut nsStaticAtom;
             #[link_name = "?grid@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_grid: *mut nsStaticAtom;
-            #[link_name = "?grippy@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
-            pub static nsGkAtoms_grippy: *mut nsStaticAtom;
             #[link_name = "?group@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_group: *mut nsStaticAtom;
             #[link_name = "?groupbox@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_groupbox: *mut nsStaticAtom;
             #[link_name = "?groupingSeparator@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_groupingSeparator: *mut nsStaticAtom;
             #[link_name = "?groupingSize@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_groupingSize: *mut nsStaticAtom;
@@ -8506,20 +8504,24 @@ cfg_if! {
             #[link_name = "?rx@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_rx: *mut nsStaticAtom;
             #[link_name = "?ry@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_ry: *mut nsStaticAtom;
             #[link_name = "?saturate@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_saturate: *mut nsStaticAtom;
             #[link_name = "?saturation@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_saturation: *mut nsStaticAtom;
+            #[link_name = "?set@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
+            pub static nsGkAtoms_set: *mut nsStaticAtom;
             #[link_name = "?seed@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_seed: *mut nsStaticAtom;
             #[link_name = "?shape_rendering@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_shape_rendering: *mut nsStaticAtom;
+            #[link_name = "?simpleScopeChain@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
+            pub static nsGkAtoms_simpleScopeChain: *mut nsStaticAtom;
             #[link_name = "?skewX@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_skewX: *mut nsStaticAtom;
             #[link_name = "?skewY@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_skewY: *mut nsStaticAtom;
             #[link_name = "?slope@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_slope: *mut nsStaticAtom;
             #[link_name = "?slot@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_slot: *mut nsStaticAtom;
@@ -9154,18 +9156,16 @@ cfg_if! {
             #[link_name = "?separator_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_separator_: *mut nsStaticAtom;
             #[link_name = "?separators_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_separators_: *mut nsStaticAtom;
             #[link_name = "?sep_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_sep_: *mut nsStaticAtom;
             #[link_name = "?setdiff_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_setdiff_: *mut nsStaticAtom;
-            #[link_name = "?set_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
-            pub static nsGkAtoms_set_: *mut nsStaticAtom;
             #[link_name = "?share_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_share_: *mut nsStaticAtom;
             #[link_name = "?shift_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_shift_: *mut nsStaticAtom;
             #[link_name = "?side_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_side_: *mut nsStaticAtom;
             #[link_name = "?sinh_@nsGkAtoms@@2PEAVnsStaticAtom@@EA"]
             pub static nsGkAtoms_sinh_: *mut nsStaticAtom;
@@ -11425,18 +11425,16 @@ cfg_if! {
             #[link_name = "\x01?graphicsDocument@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_graphicsDocument: *mut nsStaticAtom;
             #[link_name = "\x01?graphicsObject@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_graphicsObject: *mut nsStaticAtom;
             #[link_name = "\x01?graphicsSymbol@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_graphicsSymbol: *mut nsStaticAtom;
             #[link_name = "\x01?grid@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_grid: *mut nsStaticAtom;
-            #[link_name = "\x01?grippy@nsGkAtoms@@2PAVnsStaticAtom@@A"]
-            pub static nsGkAtoms_grippy: *mut nsStaticAtom;
             #[link_name = "\x01?group@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_group: *mut nsStaticAtom;
             #[link_name = "\x01?groupbox@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_groupbox: *mut nsStaticAtom;
             #[link_name = "\x01?groupingSeparator@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_groupingSeparator: *mut nsStaticAtom;
             #[link_name = "\x01?groupingSize@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_groupingSize: *mut nsStaticAtom;
@@ -13731,20 +13729,24 @@ cfg_if! {
             #[link_name = "\x01?rx@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_rx: *mut nsStaticAtom;
             #[link_name = "\x01?ry@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_ry: *mut nsStaticAtom;
             #[link_name = "\x01?saturate@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_saturate: *mut nsStaticAtom;
             #[link_name = "\x01?saturation@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_saturation: *mut nsStaticAtom;
+            #[link_name = "\x01?set@nsGkAtoms@@2PAVnsStaticAtom@@A"]
+            pub static nsGkAtoms_set: *mut nsStaticAtom;
             #[link_name = "\x01?seed@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_seed: *mut nsStaticAtom;
             #[link_name = "\x01?shape_rendering@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_shape_rendering: *mut nsStaticAtom;
+            #[link_name = "\x01?simpleScopeChain@nsGkAtoms@@2PAVnsStaticAtom@@A"]
+            pub static nsGkAtoms_simpleScopeChain: *mut nsStaticAtom;
             #[link_name = "\x01?skewX@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_skewX: *mut nsStaticAtom;
             #[link_name = "\x01?skewY@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_skewY: *mut nsStaticAtom;
             #[link_name = "\x01?slope@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_slope: *mut nsStaticAtom;
             #[link_name = "\x01?slot@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_slot: *mut nsStaticAtom;
@@ -14379,18 +14381,16 @@ cfg_if! {
             #[link_name = "\x01?separator_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_separator_: *mut nsStaticAtom;
             #[link_name = "\x01?separators_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_separators_: *mut nsStaticAtom;
             #[link_name = "\x01?sep_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_sep_: *mut nsStaticAtom;
             #[link_name = "\x01?setdiff_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_setdiff_: *mut nsStaticAtom;
-            #[link_name = "\x01?set_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
-            pub static nsGkAtoms_set_: *mut nsStaticAtom;
             #[link_name = "\x01?share_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_share_: *mut nsStaticAtom;
             #[link_name = "\x01?shift_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_shift_: *mut nsStaticAtom;
             #[link_name = "\x01?side_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_side_: *mut nsStaticAtom;
             #[link_name = "\x01?sinh_@nsGkAtoms@@2PAVnsStaticAtom@@A"]
             pub static nsGkAtoms_sinh_: *mut nsStaticAtom;
@@ -16653,18 +16653,16 @@ macro_rules! atom {
 ("graphics-document") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_graphicsDocument as *mut _) } }};
 ("graphics-object") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_graphicsObject as *mut _) } }};
 ("graphics-symbol") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_graphicsSymbol as *mut _) } }};
 ("grid") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_grid as *mut _) } }};
-("grippy") =>
-  {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_grippy as *mut _) } }};
 ("group") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_group as *mut _) } }};
 ("groupbox") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_groupbox as *mut _) } }};
 ("grouping-separator") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_groupingSeparator as *mut _) } }};
 ("grouping-size") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_groupingSize as *mut _) } }};
@@ -18959,20 +18957,24 @@ macro_rules! atom {
 ("rx") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_rx as *mut _) } }};
 ("ry") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_ry as *mut _) } }};
 ("saturate") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_saturate as *mut _) } }};
 ("saturation") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_saturation as *mut _) } }};
+("set") =>
+  {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_set as *mut _) } }};
 ("seed") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_seed as *mut _) } }};
 ("shape-rendering") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_shape_rendering as *mut _) } }};
+("simpleScopeChain") =>
+  {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_simpleScopeChain as *mut _) } }};
 ("skewX") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_skewX as *mut _) } }};
 ("skewY") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_skewY as *mut _) } }};
 ("slope") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_slope as *mut _) } }};
 ("slot") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_slot as *mut _) } }};
@@ -19607,18 +19609,16 @@ macro_rules! atom {
 ("separator") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_separator_ as *mut _) } }};
 ("separators") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_separators_ as *mut _) } }};
 ("sep") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_sep_ as *mut _) } }};
 ("setdiff") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_setdiff_ as *mut _) } }};
-("set") =>
-  {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_set_ as *mut _) } }};
 ("share") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_share_ as *mut _) } }};
 ("shift") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_shift_ as *mut _) } }};
 ("side") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_side_ as *mut _) } }};
 ("sinh") =>
   {{ #[allow(unsafe_code)] #[allow(unused_unsafe)]unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_sinh_ as *mut _) } }};
--- a/servo/components/style/gecko/generated/bindings.rs
+++ b/servo/components/style/gecko/generated/bindings.rs
@@ -1,17 +1,17 @@
 /* automatically generated by rust-bindgen */
 
 pub use nsstring::{nsACString, nsAString, nsString, nsStringRepr};
 use gecko_bindings::structs::nsStyleTransformMatrix;
 use gecko_bindings::structs::nsTArray;
 type nsACString_internal = nsACString;
 type nsAString_internal = nsAString;
-pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;
-pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;
+pub type ComputedStyleBorrowed<'a> = &'a ::properties::ComputedValues;
+pub type ComputedStyleBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;
 pub type ServoComputedDataBorrowed<'a> = &'a ServoComputedData;
 pub type RawServoAnimationValueTableBorrowed<'a> = &'a ();
 use gecko_bindings::structs::mozilla::css::GridTemplateAreasValue;
 use gecko_bindings::structs::mozilla::css::ErrorReporter;
 use gecko_bindings::structs::mozilla::css::ImageValue;
 use gecko_bindings::structs::mozilla::css::URLValue;
 use gecko_bindings::structs::mozilla::css::URLValueData;
 use gecko_bindings::structs::mozilla::dom::CallerType;
@@ -113,19 +113,17 @@ use gecko_bindings::structs::nsStyleCont
 unsafe impl Send for nsStyleContentData {}
 unsafe impl Sync for nsStyleContentData {}
 use gecko_bindings::structs::nsStyleContentData_CounterFunction;
 unsafe impl Send for nsStyleContentData_CounterFunction {}
 unsafe impl Sync for nsStyleContentData_CounterFunction {}
 use gecko_bindings::structs::nsStyleContentType;
 unsafe impl Send for nsStyleContentType {}
 unsafe impl Sync for nsStyleContentType {}
-use gecko_bindings::structs::nsStyleContext;
-unsafe impl Send for nsStyleContext {}
-unsafe impl Sync for nsStyleContext {}
+use gecko_bindings::structs::ComputedStyle;
 use gecko_bindings::structs::nsStyleCoord;
 unsafe impl Send for nsStyleCoord {}
 unsafe impl Sync for nsStyleCoord {}
 use gecko_bindings::structs::nsStyleCoord_Calc;
 unsafe impl Send for nsStyleCoord_Calc {}
 unsafe impl Sync for nsStyleCoord_Calc {}
 use gecko_bindings::structs::nsStyleCoord_CalcValue;
 unsafe impl Send for nsStyleCoord_CalcValue {}
@@ -233,18 +231,17 @@ use gecko_bindings::structs::nsTimingFun
 use gecko_bindings::structs::nscolor;
 use gecko_bindings::structs::nscoord;
 use gecko_bindings::structs::nsresult;
 use gecko_bindings::structs::Loader;
 use gecko_bindings::structs::LoaderReusableStyleSheets;
 use gecko_bindings::structs::SheetLoadData;
 use gecko_bindings::structs::ServoStyleSheet;
 use gecko_bindings::structs::ServoComputedData;
-use gecko_bindings::structs::ServoStyleContext;
-use gecko_bindings::structs::ServoStyleContextStrong;
+use gecko_bindings::structs::ComputedStyleStrong;
 use gecko_bindings::structs::EffectCompositor_CascadeLevel;
 use gecko_bindings::structs::UpdateAnimationsTasks;
 use gecko_bindings::structs::ParsingMode;
 use gecko_bindings::structs::InheritTarget;
 use gecko_bindings::structs::URLMatchingFunction;
 use gecko_bindings::structs::StyleAnimation;
 use gecko_bindings::structs::StyleRuleInclusion;
 use gecko_bindings::structs::nsStyleTransformMatrix::MatrixTransformOperator;
@@ -581,27 +578,27 @@ extern "C" {
     pub fn Gecko_GetAnonymousContentForElement(
         element: RawGeckoElementBorrowed,
     ) -> *mut nsTArray<*mut nsIContent>;
 }
 extern "C" {
     pub fn Gecko_DestroyAnonymousContentList(anon_content: *mut nsTArray<*mut nsIContent>);
 }
 extern "C" {
-    pub fn Gecko_ServoStyleContext_Init(
-        context: *mut ServoStyleContext,
-        parent_context: ServoStyleContextBorrowedOrNull,
+    pub fn Gecko_ComputedStyle_Init(
+        context: *mut ComputedStyle,
+        parent_context: ComputedStyleBorrowedOrNull,
         pres_context: RawGeckoPresContextBorrowed,
         values: ServoComputedDataBorrowed,
         pseudo_type: CSSPseudoElementType,
         pseudo_tag: *mut nsAtom,
     );
 }
 extern "C" {
-    pub fn Gecko_ServoStyleContext_Destroy(context: *mut ServoStyleContext);
+    pub fn Gecko_ComputedStyle_Destroy(context: *mut ComputedStyle);
 }
 extern "C" {
     pub fn Gecko_ConstructStyleChildrenIterator(
         aElement: RawGeckoElementBorrowed,
         aIterator: RawGeckoStyleChildrenIteratorBorrowedMut,
     );
 }
 extern "C" {
@@ -874,18 +871,18 @@ extern "C" {
     );
 }
 extern "C" {
     pub fn Gecko_SetAnimationName(aStyleAnimation: *mut StyleAnimation, aAtom: *mut nsAtom);
 }
 extern "C" {
     pub fn Gecko_UpdateAnimations(
         aElementOrPseudo: RawGeckoElementBorrowed,
-        aOldComputedValues: ServoStyleContextBorrowedOrNull,
-        aComputedValues: ServoStyleContextBorrowedOrNull,
+        aOldComputedValues: ComputedStyleBorrowedOrNull,
+        aComputedValues: ComputedStyleBorrowedOrNull,
         aTasks: UpdateAnimationsTasks,
     );
 }
 extern "C" {
     pub fn Gecko_ElementHasAnimations(aElementOrPseudo: RawGeckoElementBorrowed) -> bool;
 }
 extern "C" {
     pub fn Gecko_ElementHasCSSAnimations(aElementOrPseudo: RawGeckoElementBorrowed) -> bool;
@@ -1168,18 +1165,18 @@ extern "C" {
         name: *mut nsAtom,
     ) -> bool;
 }
 extern "C" {
     pub fn Gecko_GetImplementedPseudo(element: RawGeckoElementBorrowed) -> CSSPseudoElementType;
 }
 extern "C" {
     pub fn Gecko_CalcStyleDifference(
-        old_style: ServoStyleContextBorrowed,
-        new_style: ServoStyleContextBorrowed,
+        old_style: ComputedStyleBorrowed,
+        new_style: ComputedStyleBorrowed,
         any_style_changed: *mut bool,
         reset_only_changed: *mut bool,
     ) -> u32;
 }
 extern "C" {
     pub fn Gecko_GetElementSnapshot(
         table: *const ServoElementSnapshotTable,
         element: RawGeckoElementBorrowed,
@@ -1984,29 +1981,29 @@ extern "C" {
     ) -> usize;
 }
 extern "C" {
     pub fn Servo_Element_HasPrimaryComputedValues(node: RawGeckoElementBorrowed) -> bool;
 }
 extern "C" {
     pub fn Servo_Element_GetPrimaryComputedValues(
         node: RawGeckoElementBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_Element_HasPseudoComputedValues(
         node: RawGeckoElementBorrowed,
         index: usize,
     ) -> bool;
 }
 extern "C" {
     pub fn Servo_Element_GetPseudoComputedValues(
         node: RawGeckoElementBorrowed,
         index: usize,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_Element_IsDisplayNone(element: RawGeckoElementBorrowed) -> bool;
 }
 extern "C" {
     pub fn Servo_Element_IsPrimaryStyleReusedViaRuleNode(element: RawGeckoElementBorrowed) -> bool;
 }
 extern "C" {
@@ -2155,19 +2152,19 @@ extern "C" {
 extern "C" {
     pub fn Servo_StyleSet_BuildFontFeatureValueSet(
         set: RawServoStyleSetBorrowed,
     ) -> *mut gfxFontFeatureValueSet;
 }
 extern "C" {
     pub fn Servo_StyleSet_ResolveForDeclarations(
         set: RawServoStyleSetBorrowed,
-        parent_style: ServoStyleContextBorrowedOrNull,
+        parent_style: ComputedStyleBorrowedOrNull,
         declarations: RawServoDeclarationBlockBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_SelectorList_Parse(selector_list: *const nsACString) -> *mut RawServoSelectorList;
 }
 extern "C" {
     pub fn Servo_SourceSizeList_Parse(value: *const nsACString) -> *mut RawServoSourceSizeList;
 }
 extern "C" {
@@ -2252,20 +2249,20 @@ extern "C" {
 extern "C" {
     pub fn Servo_AuthorStyles_SizeOfIncludingThis(
         malloc_size_of: MallocSizeOf,
         malloc_enclosing_size_of: MallocSizeOf,
         self_: RawServoAuthorStylesBorrowed,
     ) -> usize;
 }
 extern "C" {
-    pub fn Servo_StyleContext_AddRef(ctx: ServoStyleContextBorrowed);
-}
-extern "C" {
-    pub fn Servo_StyleContext_Release(ctx: ServoStyleContextBorrowed);
+    pub fn Servo_ComputedStyle_AddRef(ctx: ComputedStyleBorrowed);
+}
+extern "C" {
+    pub fn Servo_ComputedStyle_Release(ctx: ComputedStyleBorrowed);
 }
 extern "C" {
     pub fn Servo_StyleSet_MightHaveAttributeDependency(
         set: RawServoStyleSetBorrowed,
         element: RawGeckoElementBorrowed,
         local_name: *mut nsAtom,
     ) -> bool;
 }
@@ -2632,30 +2629,30 @@ extern "C" {
         data: *mut RawGeckoURLExtraData,
         output: nsTimingFunctionBorrowedMut,
     ) -> bool;
 }
 extern "C" {
     pub fn Servo_GetComputedKeyframeValues(
         keyframes: RawGeckoKeyframeListBorrowed,
         element: RawGeckoElementBorrowed,
-        style: ServoStyleContextBorrowed,
+        style: ComputedStyleBorrowed,
         set: RawServoStyleSetBorrowed,
         result: RawGeckoComputedKeyframeValuesListBorrowedMut,
     );
 }
 extern "C" {
     pub fn Servo_ComputedValues_ExtractAnimationValue(
-        computed_values: ServoStyleContextBorrowed,
+        computed_values: ComputedStyleBorrowed,
         property: nsCSSPropertyID,
     ) -> RawServoAnimationValueStrong;
 }
 extern "C" {
     pub fn Servo_ComputedValues_SpecifiesAnimationsOrTransitions(
-        computed_values: ServoStyleContextBorrowed,
+        computed_values: ComputedStyleBorrowed,
     ) -> bool;
 }
 extern "C" {
     pub fn Servo_Property_IsAnimatable(property: nsCSSPropertyID) -> bool;
 }
 extern "C" {
     pub fn Servo_Property_IsTransitionable(property: nsCSSPropertyID) -> bool;
 }
@@ -2677,17 +2674,17 @@ extern "C" {
         progress: f64,
         result: *mut RawGeckoGfxMatrix4x4,
     );
 }
 extern "C" {
     pub fn Servo_GetAnimationValues(
         declarations: RawServoDeclarationBlockBorrowed,
         element: RawGeckoElementBorrowed,
-        style: ServoStyleContextBorrowed,
+        style: ComputedStyleBorrowed,
         style_set: RawServoStyleSetBorrowed,
         animation_values: RawGeckoServoAnimationValueListBorrowedMut,
     );
 }
 extern "C" {
     pub fn Servo_AnimationValues_Interpolate(
         from: RawServoAnimationValueBorrowed,
         to: RawServoAnimationValueBorrowed,
@@ -2765,17 +2762,17 @@ extern "C" {
     pub fn Servo_AnimationValue_Uncompute(
         value: RawServoAnimationValueBorrowed,
     ) -> RawServoDeclarationBlockStrong;
 }
 extern "C" {
     pub fn Servo_AnimationValue_Compute(
         element: RawGeckoElementBorrowed,
         declarations: RawServoDeclarationBlockBorrowed,
-        style: ServoStyleContextBorrowed,
+        style: ComputedStyleBorrowed,
         raw_data: RawServoStyleSetBorrowed,
     ) -> RawServoAnimationValueStrong;
 }
 extern "C" {
     pub fn Servo_ParseStyleAttribute(
         data: *const nsACString,
         extra_data: *mut RawGeckoURLExtraData,
         quirks_mode: nsCompatibility,
@@ -2802,17 +2799,17 @@ extern "C" {
         result: *mut nsAString,
     );
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_SerializeOneValue(
         declarations: RawServoDeclarationBlockBorrowed,
         property: nsCSSPropertyID,
         buffer: *mut nsAString,
-        computed_values: ServoStyleContextBorrowedOrNull,
+        computed_values: ComputedStyleBorrowedOrNull,
         custom_properties: RawServoDeclarationBlockBorrowedOrNull,
     );
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_Count(declarations: RawServoDeclarationBlockBorrowed) -> u32;
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_GetNthProperty(
@@ -3044,41 +3041,41 @@ extern "C" {
 extern "C" {
     pub fn Servo_CSSSupports2(name: *const nsACString, value: *const nsACString) -> bool;
 }
 extern "C" {
     pub fn Servo_CSSSupports(cond: *const nsACString) -> bool;
 }
 extern "C" {
     pub fn Servo_ComputedValues_GetForAnonymousBox(
-        parent_style_or_null: ServoStyleContextBorrowedOrNull,
+        parent_style_or_null: ComputedStyleBorrowedOrNull,
         pseudo_tag: *mut nsAtom,
         set: RawServoStyleSetBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_ComputedValues_Inherit(
         set: RawServoStyleSetBorrowed,
         pseudo_tag: *mut nsAtom,
-        parent_style: ServoStyleContextBorrowedOrNull,
+        parent_style: ComputedStyleBorrowedOrNull,
         target: InheritTarget,
-    ) -> ServoStyleContextStrong;
-}
-extern "C" {
-    pub fn Servo_ComputedValues_GetStyleBits(values: ServoStyleContextBorrowed) -> u64;
+    ) -> ComputedStyleStrong;
+}
+extern "C" {
+    pub fn Servo_ComputedValues_GetStyleBits(values: ComputedStyleBorrowed) -> u64;
 }
 extern "C" {
     pub fn Servo_ComputedValues_EqualCustomProperties(
         first: ServoComputedDataBorrowed,
         second: ServoComputedDataBorrowed,
     ) -> bool;
 }
 extern "C" {
     pub fn Servo_ComputedValues_GetStyleRuleList(
-        values: ServoStyleContextBorrowed,
+        values: ComputedStyleBorrowed,
         rules: RawGeckoServoStyleRuleListBorrowedMut,
     );
 }
 extern "C" {
     pub fn Servo_Initialize(dummy_url_data: *mut RawGeckoURLExtraData);
 }
 extern "C" {
     pub fn Servo_InitializeCooperativeThread();
@@ -3095,69 +3092,69 @@ extern "C" {
 }
 extern "C" {
     pub fn Servo_TakeChangeHint(element: RawGeckoElementBorrowed, was_restyled: *mut bool) -> u32;
 }
 extern "C" {
     pub fn Servo_ResolveStyle(
         element: RawGeckoElementBorrowed,
         set: RawServoStyleSetBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_ResolvePseudoStyle(
         element: RawGeckoElementBorrowed,
         pseudo_type: CSSPseudoElementType,
         is_probe: bool,
-        inherited_style: ServoStyleContextBorrowedOrNull,
+        inherited_style: ComputedStyleBorrowedOrNull,
         set: RawServoStyleSetBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_ComputedValues_ResolveXULTreePseudoStyle(
         element: RawGeckoElementBorrowed,
         pseudo_tag: *mut nsAtom,
-        inherited_style: ServoStyleContextBorrowed,
+        inherited_style: ComputedStyleBorrowed,
         input_word: *const AtomArray,
         set: RawServoStyleSetBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_SetExplicitStyle(
         element: RawGeckoElementBorrowed,
-        primary_style: ServoStyleContextBorrowed,
+        primary_style: ComputedStyleBorrowed,
     );
 }
 extern "C" {
     pub fn Servo_HasAuthorSpecifiedRules(
-        style: ServoStyleContextBorrowed,
+        style: ComputedStyleBorrowed,
         element: RawGeckoElementBorrowed,
         pseudo_type: CSSPseudoElementType,
         rule_type_mask: u32,
         author_colors_allowed: bool,
     ) -> bool;
 }
 extern "C" {
     pub fn Servo_ResolveStyleLazily(
         element: RawGeckoElementBorrowed,
         pseudo_type: CSSPseudoElementType,
         rule_inclusion: StyleRuleInclusion,
         snapshots: *const ServoElementSnapshotTable,
         set: RawServoStyleSetBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_ReparentStyle(
-        style_to_reparent: ServoStyleContextBorrowed,
-        parent_style: ServoStyleContextBorrowed,
-        parent_style_ignoring_first_line: ServoStyleContextBorrowed,
-        layout_parent_style: ServoStyleContextBorrowed,
+        style_to_reparent: ComputedStyleBorrowed,
+        parent_style: ComputedStyleBorrowed,
+        parent_style_ignoring_first_line: ComputedStyleBorrowed,
+        layout_parent_style: ComputedStyleBorrowed,
         element: RawGeckoElementBorrowedOrNull,
         set: RawServoStyleSetBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_TraverseSubtree(
         root: RawGeckoElementBorrowed,
         set: RawServoStyleSetBorrowed,
         snapshots: *const ServoElementSnapshotTable,
         flags: ServoTraversalFlags,
     ) -> bool;
@@ -3170,48 +3167,48 @@ extern "C" {
 }
 extern "C" {
     pub fn Servo_MaybeGCRuleTree(set: RawServoStyleSetBorrowed);
 }
 extern "C" {
     pub fn Servo_StyleSet_GetBaseComputedValuesForElement(
         set: RawServoStyleSetBorrowed,
         element: RawGeckoElementBorrowed,
-        existing_style: ServoStyleContextBorrowed,
+        existing_style: ComputedStyleBorrowed,
         snapshots: *const ServoElementSnapshotTable,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_StyleSet_GetComputedValuesByAddingAnimation(
         set: RawServoStyleSetBorrowed,
         element: RawGeckoElementBorrowed,
-        existing_style: ServoStyleContextBorrowed,
+        existing_style: ComputedStyleBorrowed,
         snapshots: *const ServoElementSnapshotTable,
         animation: RawServoAnimationValueBorrowed,
-    ) -> ServoStyleContextStrong;
+    ) -> ComputedStyleStrong;
 }
 extern "C" {
     pub fn Servo_SerializeFontValueForCanvas(
         declarations: RawServoDeclarationBlockBorrowed,
         buffer: *mut nsAString,
     );
 }
 extern "C" {
     pub fn Servo_GetCustomPropertyValue(
-        computed_values: ServoStyleContextBorrowed,
+        computed_values: ComputedStyleBorrowed,
         name: *const nsAString,
         value: *mut nsAString,
     ) -> bool;
 }
 extern "C" {
-    pub fn Servo_GetCustomPropertiesCount(computed_values: ServoStyleContextBorrowed) -> u32;
+    pub fn Servo_GetCustomPropertiesCount(computed_values: ComputedStyleBorrowed) -> u32;
 }
 extern "C" {
     pub fn Servo_GetCustomPropertyNameAt(
-        arg1: ServoStyleContextBorrowed,
+        arg1: ComputedStyleBorrowed,
         index: u32,
         name: *mut nsAString,
     ) -> bool;
 }
 extern "C" {
     pub fn Servo_ProcessInvalidations(
         set: RawServoStyleSetBorrowed,
         element: RawGeckoElementBorrowed,
@@ -3283,16 +3280,19 @@ extern "C" {
         data: *mut RawGeckoURLExtraData,
         family: *mut RefPtr<SharedFontList>,
         style: nsCSSValueBorrowedMut,
         stretch: nsCSSValueBorrowedMut,
         weight: nsCSSValueBorrowedMut,
     ) -> bool;
 }
 extern "C" {
+    pub fn Servo_Property_IsShorthand(name: *const nsACString, found: *mut bool) -> bool;
+}
+extern "C" {
     pub fn Gecko_CreateCSSErrorReporter(
         sheet: *mut ServoStyleSheet,
         loader: *mut Loader,
         uri: *mut nsIURI,
     ) -> *mut ErrorReporter;
 }
 extern "C" {
     pub fn Gecko_DestroyCSSErrorReporter(reporter: *mut ErrorReporter);
--- a/servo/components/style/gecko/generated/structs.rs
+++ b/servo/components/style/gecko/generated/structs.rs
@@ -10,17 +10,17 @@ pub type ServoUnsafeCell<T> = ::std::cel
 pub type ServoCell<T> = ::std::cell::Cell<T>;
 pub type ServoNodeData = AtomicRefCell<ElementData>;
 pub type ServoWritingMode = ::logical_geometry::WritingMode;
 pub type ServoCustomPropertiesMap = Option<::servo_arc::Arc<::custom_properties::CustomPropertiesMap>>;
 pub type ServoRuleNode = Option<::rule_tree::StrongRuleNode>;
 pub type ServoVisitedStyle = Option<::servo_arc::RawOffsetArc<::properties::ComputedValues>>;
 pub type ServoComputedValueFlags = ::properties::computed_value_flags::ComputedValueFlags;
 pub type ServoRawOffsetArc<T> = ::servo_arc::RawOffsetArc<T>;
-pub type ServoStyleContextStrong = ::gecko_bindings::sugar::ownership::Strong<::properties::ComputedValues>;
+pub type ComputedStyleStrong = ::gecko_bindings::sugar::ownership::Strong<::properties::ComputedValues>;
 
 #[allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
 pub mod root {
     #[repr(C)]
     #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
     pub struct __BindgenBitfieldUnit<Storage, Align>
     where
         Storage: AsRef<[u8]> + AsMut<[u8]>,
@@ -898,16 +898,18 @@ pub mod root {
         pub struct pair<_T1, _T2> {
             pub first: _T1,
             pub second: _T2,
             pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<_T1>>,
             pub _phantom_1: ::std::marker::PhantomData<::std::cell::UnsafeCell<_T2>>,
         }
         pub type pair_first_type<_T1> = _T1;
         pub type pair_second_type<_T2> = _T2;
+        pub type pair__PCCP = u8;
+        pub type pair__PCCFP = u8;
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct input_iterator_tag {
             pub _address: u8,
         }
         #[test]
         fn bindgen_test_layout_input_iterator_tag() {
             assert_eq!(
@@ -936,35 +938,38 @@ pub mod root {
         pub type iterator_difference_type<_Distance> = _Distance;
         pub type iterator_pointer<_Pointer> = _Pointer;
         pub type iterator_reference<_Reference> = _Reference;
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct atomic {
             pub _address: u8,
         }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct function {
-            pub _address: u8,
-        }
         pub type _Base_bitset__WordT = ::std::os::raw::c_ulong;
         pub type bitset__Base = u8;
         pub type bitset__WordT = ::std::os::raw::c_ulong;
         #[repr(C)]
         #[derive(Debug)]
         pub struct bitset_reference {
             pub _M_wp: *mut root::std::bitset__WordT,
             pub _M_bpos: usize,
         }
     }
     pub mod __gnu_cxx {
         #[allow(unused_imports)]
         use self::super::super::root;
     }
+    pub type __int8_t = ::std::os::raw::c_schar;
+    pub type __uint8_t = ::std::os::raw::c_uchar;
+    pub type __int16_t = ::std::os::raw::c_short;
+    pub type __uint16_t = ::std::os::raw::c_ushort;
+    pub type __int32_t = ::std::os::raw::c_int;
+    pub type __uint32_t = ::std::os::raw::c_uint;
+    pub type __int64_t = ::std::os::raw::c_long;
+    pub type __uint64_t = ::std::os::raw::c_ulong;
     pub mod mozilla {
         #[allow(unused_imports)]
         use self::super::super::root;
         pub type fallible_t = root::std::nothrow_t;
         pub type IntegralConstant_ValueType<T> = T;
         pub type IntegralConstant_Type = u8;
         /// Convenient aliases.
         pub type TrueType = u8;
@@ -1124,33 +1129,39 @@ pub mod root {
                         stringify!(ConditionVariableImpl),
                         "::",
                         stringify!(platformData_)
                     )
                 );
             }
         }
         pub type Conditional_Type<A> = A;
-        pub const ArenaObjectID_eArenaObjectID_DummyBeforeFirstObjectID : root :: mozilla :: ArenaObjectID = 171 ;
-        pub const ArenaObjectID_eArenaObjectID_GeckoStyleContext: root::mozilla::ArenaObjectID =
+        pub const ArenaObjectID_eArenaObjectID_DummyBeforeFirstObjectID:
+            root::mozilla::ArenaObjectID = 171;
+        pub const ArenaObjectID_eArenaObjectID_GeckoComputedStyle: root::mozilla::ArenaObjectID =
             172;
         pub const ArenaObjectID_eArenaObjectID_nsLineBox: root::mozilla::ArenaObjectID = 173;
         pub const ArenaObjectID_eArenaObjectID_nsRuleNode: root::mozilla::ArenaObjectID = 174;
         pub const ArenaObjectID_eArenaObjectID_DisplayItemData: root::mozilla::ArenaObjectID = 175;
         pub const ArenaObjectID_eArenaObjectID_nsInheritedStyleData: root::mozilla::ArenaObjectID =
             176;
         pub const ArenaObjectID_eArenaObjectID_nsResetStyleData: root::mozilla::ArenaObjectID = 177;
-        pub const ArenaObjectID_eArenaObjectID_nsConditionalResetStyleData : root :: mozilla :: ArenaObjectID = 178 ;
-        pub const ArenaObjectID_eArenaObjectID_nsConditionalResetStyleDataEntry : root :: mozilla :: ArenaObjectID = 179 ;
+        pub const ArenaObjectID_eArenaObjectID_nsConditionalResetStyleData:
+            root::mozilla::ArenaObjectID = 178;
+        pub const ArenaObjectID_eArenaObjectID_nsConditionalResetStyleDataEntry:
+            root::mozilla::ArenaObjectID = 179;
         pub const ArenaObjectID_eArenaObjectID_nsFrameList: root::mozilla::ArenaObjectID = 180;
         pub const ArenaObjectID_eArenaObjectID_CustomCounterStyle: root::mozilla::ArenaObjectID =
             181;
-        pub const ArenaObjectID_eArenaObjectID_DependentBuiltinCounterStyle : root :: mozilla :: ArenaObjectID = 182 ;
-        pub const ArenaObjectID_eArenaObjectID_nsCallbackEventRequest : root :: mozilla :: ArenaObjectID = 183 ;
-        pub const ArenaObjectID_eArenaObjectID_nsIntervalSet_Interval : root :: mozilla :: ArenaObjectID = 184 ;
+        pub const ArenaObjectID_eArenaObjectID_DependentBuiltinCounterStyle:
+            root::mozilla::ArenaObjectID = 182;
+        pub const ArenaObjectID_eArenaObjectID_nsCallbackEventRequest:
+            root::mozilla::ArenaObjectID = 183;
+        pub const ArenaObjectID_eArenaObjectID_nsIntervalSet_Interval:
+            root::mozilla::ArenaObjectID = 184;
         pub const ArenaObjectID_eArenaObjectID_CellData: root::mozilla::ArenaObjectID = 185;
         pub const ArenaObjectID_eArenaObjectID_BCCellData: root::mozilla::ArenaObjectID = 186;
         pub const ArenaObjectID_eArenaObjectID_nsStyleFont: root::mozilla::ArenaObjectID = 187;
         pub const ArenaObjectID_eArenaObjectID_nsStyleColor: root::mozilla::ArenaObjectID = 188;
         pub const ArenaObjectID_eArenaObjectID_nsStyleList: root::mozilla::ArenaObjectID = 189;
         pub const ArenaObjectID_eArenaObjectID_nsStyleText: root::mozilla::ArenaObjectID = 190;
         pub const ArenaObjectID_eArenaObjectID_nsStyleVisibility: root::mozilla::ArenaObjectID =
             191;
@@ -1173,44 +1184,4201 @@ pub mod root {
         pub const ArenaObjectID_eArenaObjectID_nsStyleBorder: root::mozilla::ArenaObjectID = 205;
         pub const ArenaObjectID_eArenaObjectID_nsStyleOutline: root::mozilla::ArenaObjectID = 206;
         pub const ArenaObjectID_eArenaObjectID_nsStyleXUL: root::mozilla::ArenaObjectID = 207;
         pub const ArenaObjectID_eArenaObjectID_nsStyleSVGReset: root::mozilla::ArenaObjectID = 208;
         pub const ArenaObjectID_eArenaObjectID_nsStyleColumn: root::mozilla::ArenaObjectID = 209;
         pub const ArenaObjectID_eArenaObjectID_nsStyleEffects: root::mozilla::ArenaObjectID = 210;
         pub const ArenaObjectID_eArenaObjectID_COUNT: root::mozilla::ArenaObjectID = 211;
         pub type ArenaObjectID = u32;
+        /// This class is designed to cause crashes when various kinds of memory
+        /// corruption are observed. For instance, let's say we have a class C where we
+        /// suspect out-of-bounds writes to some members.  We can insert a member of type
+        /// Poison near the members we suspect are being corrupted by out-of-bounds
+        /// writes.  Or perhaps we have a class K we suspect is subject to use-after-free
+        /// violations, in which case it doesn't particularly matter where in the class
+        /// we add the member of type Poison.
+        ///
+        /// In either case, we then insert calls to Check() throughout the code.  Doing
+        /// so enables us to narrow down the location where the corruption is occurring.
+        /// A pleasant side-effect of these additional Check() calls is that crash
+        /// signatures may become more regular, as crashes will ideally occur
+        /// consolidated at the point of a Check(), rather than scattered about at
+        /// various uses of the corrupted memory.
+        #[repr(C)]
+        #[derive(Debug)]
+        pub struct CorruptionCanary {
+            pub mValue: usize,
+        }
+        pub const CorruptionCanary_kCanarySet: usize = 252382987;
+        #[test]
+        fn bindgen_test_layout_CorruptionCanary() {
+            assert_eq!(
+                ::std::mem::size_of::<CorruptionCanary>(),
+                8usize,
+                concat!("Size of: ", stringify!(CorruptionCanary))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<CorruptionCanary>(),
+                8usize,
+                concat!("Alignment of ", stringify!(CorruptionCanary))
+            );
+            assert_eq!(
+                unsafe { &(*(::std::ptr::null::<CorruptionCanary>())).mValue as *const _ as usize },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(CorruptionCanary),
+                    "::",
+                    stringify!(mValue)
+                )
+            );
+        }
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct Maybe {
+            pub _address: u8,
+        }
+        pub type Maybe_ValueType<T> = T;
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum SheetType {
+            Agent = 0,
+            User = 1,
+            PresHint = 2,
+            Doc = 3,
+            StyleAttr = 4,
+            Override = 5,
+            Animation = 6,
+            Transition = 7,
+            Count = 8,
+            Unknown = 255,
+        }
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct StaticRefPtr<T> {
+            pub mRawPtr: *mut T,
+            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
+        }
+        /// This struct represents a combined color from a numeric color and
+        /// the current foreground color (currentcolor keyword).
+        /// Conceptually, the formula is "color * (1 - p) + currentcolor * p"
+        /// where p is mForegroundRatio. See mozilla::LinearBlendColors for
+        /// the actual algorithm.
+        #[repr(C)]
+        #[derive(Debug, Copy)]
+        pub struct StyleComplexColor {
+            pub mColor: root::nscolor,
+            pub mForegroundRatio: u8,
+            pub mIsAuto: bool,
+        }
+        #[test]
+        fn bindgen_test_layout_StyleComplexColor() {
+            assert_eq!(
+                ::std::mem::size_of::<StyleComplexColor>(),
+                8usize,
+                concat!("Size of: ", stringify!(StyleComplexColor))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<StyleComplexColor>(),
+                4usize,
+                concat!("Alignment of ", stringify!(StyleComplexColor))
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<StyleComplexColor>())).mColor as *const _ as usize
+                },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(StyleComplexColor),
+                    "::",
+                    stringify!(mColor)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<StyleComplexColor>())).mForegroundRatio as *const _
+                        as usize
+                },
+                4usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(StyleComplexColor),
+                    "::",
+                    stringify!(mForegroundRatio)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<StyleComplexColor>())).mIsAuto as *const _ as usize
+                },
+                5usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(StyleComplexColor),
+                    "::",
+                    stringify!(mIsAuto)
+                )
+            );
+        }
+        impl Clone for StyleComplexColor {
+            fn clone(&self) -> Self {
+                *self
+            }
+        }
         /// A default deletion policy using plain old operator delete.
         ///
         /// Note that this type can be specialized, but authors should beware of the risk
         /// that the specialization may at some point cease to match (either because it
         /// gets moved to a different compilation unit or the signature changes). If the
         /// non-specialized (|delete|-based) version compiles for that type but does the
         /// wrong thing, bad things could happen.
         ///
         /// This is a non-issue for types which are always incomplete (i.e. opaque handle
         /// types), since |delete|-ing such a type will always trigger a compilation
         /// error.
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct DefaultDelete {
             pub _address: u8,
         }
+        pub mod gfx {
+            #[allow(unused_imports)]
+            use self::super::super::super::root;
+            pub type Float = f32;
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct IntPointTyped {
+                pub _address: u8,
+            }
+            pub type IntPointTyped_ToInt = u32;
+            pub type IntPointTyped_Coord = u8;
+            pub type IntPointTyped_Super = u8;
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct SizeTyped {
+                pub _address: u8,
+            }
+            pub type SizeTyped_Super = u8;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct FontVariation {
+                pub mTag: u32,
+                pub mValue: f32,
+            }
+            #[test]
+            fn bindgen_test_layout_FontVariation() {
+                assert_eq!(
+                    ::std::mem::size_of::<FontVariation>(),
+                    8usize,
+                    concat!("Size of: ", stringify!(FontVariation))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<FontVariation>(),
+                    4usize,
+                    concat!("Alignment of ", stringify!(FontVariation))
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<FontVariation>())).mTag as *const _ as usize },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FontVariation),
+                        "::",
+                        stringify!(mTag)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FontVariation>())).mValue as *const _ as usize
+                    },
+                    4usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FontVariation),
+                        "::",
+                        stringify!(mValue)
+                    )
+                );
+            }
+            impl Clone for FontVariation {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct ScaleFactor {
+                pub _address: u8,
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct UserData {
+                pub _bindgen_opaque_blob: [u64; 2usize],
+            }
+            pub type UserData_destroyFunc = u64;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct UserData_Entry {
+                pub _bindgen_opaque_blob: [u64; 3usize],
+            }
+            #[test]
+            fn bindgen_test_layout_UserData_Entry() {
+                assert_eq!(
+                    ::std::mem::size_of::<UserData_Entry>(),
+                    24usize,
+                    concat!("Size of: ", stringify!(UserData_Entry))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<UserData_Entry>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(UserData_Entry))
+                );
+            }
+            impl Clone for UserData_Entry {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[test]
+            fn bindgen_test_layout_UserData() {
+                assert_eq!(
+                    ::std::mem::size_of::<UserData>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(UserData))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<UserData>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(UserData))
+                );
+            }
+            impl Clone for UserData {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            pub struct SourceSurface__bindgen_vtable(::std::os::raw::c_void);
+            /// This is the base class for source surfaces. These objects are surfaces
+            /// which may be used as a source in a SurfacePattern or a DrawSurface call.
+            /// They cannot be drawn to directly.
+            ///
+            /// Although SourceSurface has thread-safe refcount, some SourceSurface cannot
+            /// be used on random threads at the same time. Only DataSourceSurface can be
+            /// used on random threads now. This will be fixed in the future. Eventually
+            /// all SourceSurface should be thread-safe.
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct SourceSurface {
+                pub vtable_: *const SourceSurface__bindgen_vtable,
+                pub _base: u64,
+                pub mUserData: root::mozilla::gfx::UserData,
+            }
+            #[test]
+            fn bindgen_test_layout_SourceSurface() {
+                assert_eq!(
+                    ::std::mem::size_of::<SourceSurface>(),
+                    32usize,
+                    concat!("Size of: ", stringify!(SourceSurface))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<SourceSurface>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(SourceSurface))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<SourceSurface>())).mUserData as *const _ as usize
+                    },
+                    16usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(SourceSurface),
+                        "::",
+                        stringify!(mUserData)
+                    )
+                );
+            }
+        }
+        #[repr(u32)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum Side {
+            eSideTop = 0,
+            eSideRight = 1,
+            eSideBottom = 2,
+            eSideLeft = 3,
+        }
+        #[repr(u32)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum HalfCorner {
+            eCornerTopLeftX = 0,
+            eCornerTopLeftY = 1,
+            eCornerTopRightX = 2,
+            eCornerTopRightY = 3,
+            eCornerBottomRightX = 4,
+            eCornerBottomRightY = 5,
+            eCornerBottomLeftX = 6,
+            eCornerBottomLeftY = 7,
+        }
         pub type MallocSizeOf =
             ::std::option::Option<unsafe extern "C" fn(p: *const ::std::os::raw::c_void) -> usize>;
         #[repr(C)]
+        #[derive(Debug)]
+        pub struct ThreadSafeAutoRefCnt {
+            pub mValue: u64,
+        }
+        pub const ThreadSafeAutoRefCnt_isThreadSafe: bool = true;
+        #[test]
+        fn bindgen_test_layout_ThreadSafeAutoRefCnt() {
+            assert_eq!(
+                ::std::mem::size_of::<ThreadSafeAutoRefCnt>(),
+                8usize,
+                concat!("Size of: ", stringify!(ThreadSafeAutoRefCnt))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<ThreadSafeAutoRefCnt>(),
+                8usize,
+                concat!("Alignment of ", stringify!(ThreadSafeAutoRefCnt))
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<ThreadSafeAutoRefCnt>())).mValue as *const _ as usize
+                },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(ThreadSafeAutoRefCnt),
+                    "::",
+                    stringify!(mValue)
+                )
+            );
+        }
+        #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct ReverseIterator<IteratorT> {
             pub mCurrent: IteratorT,
             pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<IteratorT>>,
         }
         pub type Array_iterator<T> = *mut T;
         pub type Array_const_iterator<T> = *mut T;
         pub type Array_reverse_iterator<T> = root::mozilla::ReverseIterator<T>;
         pub type Array_const_reverse_iterator<T> = root::mozilla::ReverseIterator<T>;
+        pub type EnumeratedArray_ArrayType = u8;
+        pub type EnumeratedArray_iterator = root::mozilla::EnumeratedArray_ArrayType;
+        pub type EnumeratedArray_const_iterator = root::mozilla::EnumeratedArray_ArrayType;
+        pub type EnumeratedArray_reverse_iterator = root::mozilla::EnumeratedArray_ArrayType;
+        pub type EnumeratedArray_const_reverse_iterator = root::mozilla::EnumeratedArray_ArrayType;
+        #[repr(C)]
+        #[derive(Debug)]
+        pub struct LinkedListElement {
+            pub mNext: *mut root::mozilla::LinkedListElement,
+            pub mPrev: *mut root::mozilla::LinkedListElement,
+            pub mIsSentinel: bool,
+        }
+        pub type LinkedListElement_Traits = root::mozilla::detail::LinkedListElementTraits;
+        pub type LinkedListElement_RawType = root::mozilla::LinkedListElement_Traits;
+        pub type LinkedListElement_ConstRawType = root::mozilla::LinkedListElement_Traits;
+        pub type LinkedListElement_ClientType = root::mozilla::LinkedListElement_Traits;
+        pub type LinkedListElement_ConstClientType = root::mozilla::LinkedListElement_Traits;
+        pub const LinkedListElement_NodeKind_Normal: root::mozilla::LinkedListElement_NodeKind = 0;
+        pub const LinkedListElement_NodeKind_Sentinel: root::mozilla::LinkedListElement_NodeKind =
+            0;
+        pub type LinkedListElement_NodeKind = i32;
+        #[repr(C)]
+        #[derive(Debug)]
+        pub struct LinkedList {
+            pub sentinel: root::mozilla::LinkedListElement,
+        }
+        pub type LinkedList_Traits = root::mozilla::detail::LinkedListElementTraits;
+        pub type LinkedList_RawType = root::mozilla::LinkedList_Traits;
+        pub type LinkedList_ConstRawType = root::mozilla::LinkedList_Traits;
+        pub type LinkedList_ClientType = root::mozilla::LinkedList_Traits;
+        pub type LinkedList_ConstClientType = root::mozilla::LinkedList_Traits;
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct LinkedList_Iterator {
+            pub mCurrent: root::mozilla::LinkedList_RawType,
+        }
+        /// # mozilla::Variant
+        ///
+        /// A variant / tagged union / heterogenous disjoint union / sum-type template
+        /// class. Similar in concept to (but not derived from) `boost::variant`.
+        ///
+        /// Sometimes, you may wish to use a C union with non-POD types. However, this is
+        /// forbidden in C++ because it is not clear which type in the union should have
+        /// its constructor and destructor run on creation and deletion
+        /// respectively. This is the problem that `mozilla::Variant` solves.
+        ///
+        /// ## Usage
+        ///
+        /// A `mozilla::Variant` instance is constructed (via move or copy) from one of
+        /// its variant types (ignoring const and references). It does *not* support
+        /// construction from subclasses of variant types or types that coerce to one of
+        /// the variant types.
+        ///
+        /// Variant<char, uint32_t> v1('a');
+        /// Variant<UniquePtr<A>, B, C> v2(MakeUnique<A>());
+        /// Variant<bool, char> v3(VariantType<char>, 0); // disambiguation needed
+        /// Variant<int, int> v4(VariantIndex<1>, 0); // 2nd int
+        ///
+        /// Because specifying the full type of a Variant value is often verbose,
+        /// there are two easier ways to construct values:
+        ///
+        /// A. AsVariant() can be used to construct a Variant value using type inference
+        /// in contexts such as expressions or when returning values from functions.
+        /// Because AsVariant() must copy or move the value into a temporary and this
+        /// cannot necessarily be elided by the compiler, it's mostly appropriate only
+        /// for use with primitive or very small types.
+        ///
+        /// Variant<char, uint32_t> Foo() { return AsVariant('x'); }
+        /// // ...
+        /// Variant<char, uint32_t> v1 = Foo();  // v1 holds char('x').
+        ///
+        /// B. Brace-construction with VariantType or VariantIndex; this also allows
+        /// in-place construction with any number of arguments.
+        ///
+        /// struct AB { AB(int, int){...} };
+        /// static Variant<AB, bool> foo()
+        /// {
+        /// return {VariantIndex<0>{}, 1, 2};
+        /// }
+        /// // ...
+        /// Variant<AB, bool> v0 = Foo();  // v0 holds AB(1,2).
+        ///
+        /// All access to the contained value goes through type-safe accessors.
+        /// Either the stored type, or the type index may be provided.
+        ///
+        /// void
+        /// Foo(Variant<A, B, C> v)
+        /// {
+        /// if (v.is<A>()) {
+        /// A& ref = v.as<A>();
+        /// ...
+        /// } else (v.is<1>()) { // Instead of v.is<B>.
+        /// ...
+        /// } else {
+        /// ...
+        /// }
+        /// }
+        ///
+        /// In some situation, a Variant may be constructed from templated types, in
+        /// which case it is possible that the same type could be given multiple times by
+        /// an external developer. Or seemingly-different types could be aliases.
+        /// In this case, repeated types can only be accessed through their index, to
+        /// prevent ambiguous access by type.
+        ///
+        /// // Bad!
+        /// template <typename T>
+        /// struct ResultOrError
+        /// {
+        /// Variant<T, int> m;
+        /// ResultOrError() : m(int(0)) {} // Error '0' by default
+        /// ResultOrError(const T& r) : m(r) {}
+        /// bool IsResult() const { return m.is<T>(); }
+        /// bool IsError() const { return m.is<int>(); }
+        /// };
+        /// // Now instantiante with the result being an int too:
+        /// ResultOrError<int> myResult(123); // Fail!
+        /// // In Variant<int, int>, which 'int' are we refering to, from inside
+        /// // ResultOrError functions?
+        ///
+        /// // Good!
+        /// template <typename T>
+        /// struct ResultOrError
+        /// {
+        /// Variant<T, int> m;
+        /// ResultOrError() : m(VariantIndex<1>{}, 0) {} // Error '0' by default
+        /// ResultOrError(const T& r) : m(VariantIndex<0>{}, r) {}
+        /// bool IsResult() const { return m.is<0>(); } // 0 -> T
+        /// bool IsError() const { return m.is<1>(); } // 1 -> int
+        /// };
+        /// // Now instantiante with the result being an int too:
+        /// ResultOrError<int> myResult(123); // It now works!
+        ///
+        /// Attempting to use the contained value as type `T1` when the `Variant`
+        /// instance contains a value of type `T2` causes an assertion failure.
+        ///
+        /// A a;
+        /// Variant<A, B, C> v(a);
+        /// v.as<B>(); // <--- Assertion failure!
+        ///
+        /// Trying to use a `Variant<Ts...>` instance as some type `U` that is not a
+        /// member of the set of `Ts...` is a compiler error.
+        ///
+        /// A a;
+        /// Variant<A, B, C> v(a);
+        /// v.as<SomeRandomType>(); // <--- Compiler error!
+        ///
+        /// Additionally, you can turn a `Variant` that `is<T>` into a `T` by moving it
+        /// out of the containing `Variant` instance with the `extract<T>` method:
+        ///
+        /// Variant<UniquePtr<A>, B, C> v(MakeUnique<A>());
+        /// auto ptr = v.extract<UniquePtr<A>>();
+        ///
+        /// Finally, you can exhaustively match on the contained variant and branch into
+        /// different code paths depending on which type is contained. This is preferred
+        /// to manually checking every variant type T with is<T>() because it provides
+        /// compile-time checking that you handled every type, rather than runtime
+        /// assertion failures.
+        ///
+        /// // Bad!
+        /// char* foo(Variant<A, B, C, D>& v) {
+        /// if (v.is<A>()) {
+        /// return ...;
+        /// } else if (v.is<B>()) {
+        /// return ...;
+        /// } else {
+        /// return doSomething(v.as<C>()); // Forgot about case D!
+        /// }
+        /// }
+        ///
+        /// // Good!
+        /// struct FooMatcher
+        /// {
+        /// // The return type of all matchers must be identical.
+        /// char* match(A& a) { ... }
+        /// char* match(B& b) { ... }
+        /// char* match(C& c) { ... }
+        /// char* match(D& d) { ... } // Compile-time error to forget D!
+        /// }
+        /// char* foo(Variant<A, B, C, D>& v) {
+        /// return v.match(FooMatcher());
+        /// }
+        ///
+        /// ## Examples
+        ///
+        /// A tree is either an empty leaf, or a node with a value and two children:
+        ///
+        /// struct Leaf { };
+        ///
+        /// template<typename T>
+        /// struct Node
+        /// {
+        /// T value;
+        /// Tree<T>* left;
+        /// Tree<T>* right;
+        /// };
+        ///
+        /// template<typename T>
+        /// using Tree = Variant<Leaf, Node<T>>;
+        ///
+        /// A copy-on-write string is either a non-owning reference to some existing
+        /// string, or an owning reference to our copy:
+        ///
+        /// class CopyOnWriteString
+        /// {
+        /// Variant<const char*, UniquePtr<char[]>> string;
+        ///
+        /// ...
+        /// };
+        ///
+        /// Because Variant must be aligned suitable to hold any value stored within it,
+        /// and because |alignas| requirements don't affect platform ABI with respect to
+        /// how parameters are laid out in memory, Variant can't be used as the type of a
+        /// function parameter.  Pass Variant to functions by pointer or reference
+        /// instead.
+        #[repr(C)]
+        #[derive(Debug)]
+        pub struct Variant {
+            pub rawData: *mut ::std::os::raw::c_uchar,
+            pub tag: root::mozilla::Variant_Tag,
+        }
+        pub type Variant_Tag = root::mozilla::detail::VariantTag;
+        pub type Variant_Impl = u8;
+        pub mod layers {
+            #[allow(unused_imports)]
+            use self::super::super::super::root;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct LayerManager {
+                _unused: [u8; 0],
+            }
+            impl Clone for LayerManager {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+        }
+        pub mod dom {
+            #[allow(unused_imports)]
+            use self::super::super::super::root;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct AllOwningUnionBase {
+                pub _address: u8,
+            }
+            #[test]
+            fn bindgen_test_layout_AllOwningUnionBase() {
+                assert_eq!(
+                    ::std::mem::size_of::<AllOwningUnionBase>(),
+                    1usize,
+                    concat!("Size of: ", stringify!(AllOwningUnionBase))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<AllOwningUnionBase>(),
+                    1usize,
+                    concat!("Alignment of ", stringify!(AllOwningUnionBase))
+                );
+            }
+            impl Clone for AllOwningUnionBase {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct GlobalObject {
+                pub mGlobalJSObject: [u64; 3usize],
+                pub mCx: *mut root::JSContext,
+                pub mGlobalObject: *mut root::nsISupports,
+            }
+            #[test]
+            fn bindgen_test_layout_GlobalObject() {
+                assert_eq!(
+                    ::std::mem::size_of::<GlobalObject>(),
+                    40usize,
+                    concat!("Size of: ", stringify!(GlobalObject))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<GlobalObject>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(GlobalObject))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<GlobalObject>())).mGlobalJSObject as *const _
+                            as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(GlobalObject),
+                        "::",
+                        stringify!(mGlobalJSObject)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<GlobalObject>())).mCx as *const _ as usize },
+                    24usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(GlobalObject),
+                        "::",
+                        stringify!(mCx)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<GlobalObject>())).mGlobalObject as *const _ as usize
+                    },
+                    32usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(GlobalObject),
+                        "::",
+                        stringify!(mGlobalObject)
+                    )
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct Sequence {
+                pub _address: u8,
+            }
+            #[repr(u32)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum CallerType {
+                System = 0,
+                NonSystem = 1,
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct Nullable {
+                pub _address: u8,
+            }
+            pub mod prototypes {
+                #[allow(unused_imports)]
+                use self::super::super::super::super::root;
+            }
+            pub mod constructors {
+                #[allow(unused_imports)]
+                use self::super::super::super::super::root;
+            }
+            pub mod namedpropertiesobjects {
+                #[allow(unused_imports)]
+                use self::super::super::super::super::root;
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct Promise {
+                _unused: [u8; 0],
+            }
+            impl Clone for Promise {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct ClientSource {
+                _unused: [u8; 0],
+            }
+            impl Clone for ClientSource {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct CSSImportRule {
+                _unused: [u8; 0],
+            }
+            impl Clone for CSSImportRule {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            /// Struct that stores info on an attribute. The name and value must either both
+            /// be null or both be non-null.
+            ///
+            /// Note that, just as the pointers returned by GetAttrNameAt, the pointers that
+            /// this struct hold are only valid until the element or its attributes are
+            /// mutated (directly or via script).
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct BorrowedAttrInfo {
+                pub mName: *const root::nsAttrName,
+                pub mValue: *const root::nsAttrValue,
+            }
+            #[test]
+            fn bindgen_test_layout_BorrowedAttrInfo() {
+                assert_eq!(
+                    ::std::mem::size_of::<BorrowedAttrInfo>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(BorrowedAttrInfo))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<BorrowedAttrInfo>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(BorrowedAttrInfo))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<BorrowedAttrInfo>())).mName as *const _ as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(BorrowedAttrInfo),
+                        "::",
+                        stringify!(mName)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<BorrowedAttrInfo>())).mValue as *const _ as usize
+                    },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(BorrowedAttrInfo),
+                        "::",
+                        stringify!(mValue)
+                    )
+                );
+            }
+            impl Clone for BorrowedAttrInfo {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            pub struct NodeInfo {
+                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
+                pub mDocument: *mut root::nsIDocument,
+                pub mInner: root::mozilla::dom::NodeInfo_NodeInfoInner,
+                pub mOwnerManager: root::RefPtr<root::nsNodeInfoManager>,
+                pub mQualifiedName: ::nsstring::nsStringRepr,
+                pub mNodeName: ::nsstring::nsStringRepr,
+                pub mLocalName: ::nsstring::nsStringRepr,
+            }
+            pub type NodeInfo_HasThreadSafeRefCnt = root::mozilla::FalseType;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct NodeInfo_cycleCollection {
+                pub _base: root::nsCycleCollectionParticipant,
+            }
+            #[test]
+            fn bindgen_test_layout_NodeInfo_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<NodeInfo_cycleCollection>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(NodeInfo_cycleCollection))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<NodeInfo_cycleCollection>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(NodeInfo_cycleCollection))
+                );
+            }
+            impl Clone for NodeInfo_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct NodeInfo_NodeInfoInner {
+                pub mName: *const root::nsAtom,
+                pub mPrefix: *mut root::nsAtom,
+                pub mNamespaceID: i32,
+                pub mNodeType: u16,
+                pub mNameString: *const root::nsAString,
+                pub mExtraName: *mut root::nsAtom,
+                pub mHash: [u32; 2usize],
+            }
+            #[test]
+            fn bindgen_test_layout_NodeInfo_NodeInfoInner() {
+                assert_eq!(
+                    ::std::mem::size_of::<NodeInfo_NodeInfoInner>(),
+                    48usize,
+                    concat!("Size of: ", stringify!(NodeInfo_NodeInfoInner))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<NodeInfo_NodeInfoInner>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(NodeInfo_NodeInfoInner))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mName as *const _
+                            as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo_NodeInfoInner),
+                        "::",
+                        stringify!(mName)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mPrefix as *const _
+                            as usize
+                    },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo_NodeInfoInner),
+                        "::",
+                        stringify!(mPrefix)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mNamespaceID as *const _
+                            as usize
+                    },
+                    16usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo_NodeInfoInner),
+                        "::",
+                        stringify!(mNamespaceID)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mNodeType as *const _
+                            as usize
+                    },
+                    20usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo_NodeInfoInner),
+                        "::",
+                        stringify!(mNodeType)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mNameString as *const _
+                            as usize
+                    },
+                    24usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo_NodeInfoInner),
+                        "::",
+                        stringify!(mNameString)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mExtraName as *const _
+                            as usize
+                    },
+                    32usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo_NodeInfoInner),
+                        "::",
+                        stringify!(mExtraName)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mHash as *const _
+                            as usize
+                    },
+                    40usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo_NodeInfoInner),
+                        "::",
+                        stringify!(mHash)
+                    )
+                );
+            }
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom8NodeInfo21_cycleCollectorGlobalE"]
+                pub static mut NodeInfo__cycleCollectorGlobal:
+                    root::mozilla::dom::NodeInfo_cycleCollection;
+            }
+            #[test]
+            fn bindgen_test_layout_NodeInfo() {
+                assert_eq!(
+                    ::std::mem::size_of::<NodeInfo>(),
+                    120usize,
+                    concat!("Size of: ", stringify!(NodeInfo))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<NodeInfo>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(NodeInfo))
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mRefCnt as *const _ as usize },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo),
+                        "::",
+                        stringify!(mRefCnt)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mDocument as *const _ as usize },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo),
+                        "::",
+                        stringify!(mDocument)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mInner as *const _ as usize },
+                    16usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo),
+                        "::",
+                        stringify!(mInner)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo>())).mOwnerManager as *const _ as usize
+                    },
+                    64usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo),
+                        "::",
+                        stringify!(mOwnerManager)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<NodeInfo>())).mQualifiedName as *const _ as usize
+                    },
+                    72usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo),
+                        "::",
+                        stringify!(mQualifiedName)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mNodeName as *const _ as usize },
+                    88usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo),
+                        "::",
+                        stringify!(mNodeName)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mLocalName as *const _ as usize },
+                    104usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(NodeInfo),
+                        "::",
+                        stringify!(mLocalName)
+                    )
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct EventTarget {
+                pub _base: root::nsIDOMEventTarget,
+                pub _base_1: root::nsWrapperCache,
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct EventTarget_COMTypeInfo {
+                pub _address: u8,
+            }
+            #[test]
+            fn bindgen_test_layout_EventTarget() {
+                assert_eq!(
+                    ::std::mem::size_of::<EventTarget>(),
+                    32usize,
+                    concat!("Size of: ", stringify!(EventTarget))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<EventTarget>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(EventTarget))
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct BoxQuadOptions {
+                _unused: [u8; 0],
+            }
+            impl Clone for BoxQuadOptions {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct ConvertCoordinateOptions {
+                _unused: [u8; 0],
+            }
+            impl Clone for ConvertCoordinateOptions {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DocGroup {
+                _unused: [u8; 0],
+            }
+            impl Clone for DocGroup {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DOMPoint {
+                _unused: [u8; 0],
+            }
+            impl Clone for DOMPoint {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DOMQuad {
+                _unused: [u8; 0],
+            }
+            impl Clone for DOMQuad {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct TextOrElementOrDocument {
+                _unused: [u8; 0],
+            }
+            impl Clone for TextOrElementOrDocument {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DOMPointInit {
+                _unused: [u8; 0],
+            }
+            impl Clone for DOMPointInit {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            pub const VisibilityState_Hidden: root::mozilla::dom::VisibilityState = 0;
+            pub const VisibilityState_Visible: root::mozilla::dom::VisibilityState = 1;
+            pub const VisibilityState_EndGuard_: root::mozilla::dom::VisibilityState = 2;
+            pub type VisibilityState = u8;
+            pub const FlashClassification_Unclassified: root::mozilla::dom::FlashClassification = 0;
+            pub const FlashClassification_Unknown: root::mozilla::dom::FlashClassification = 1;
+            pub const FlashClassification_Allowed: root::mozilla::dom::FlashClassification = 2;
+            pub const FlashClassification_Denied: root::mozilla::dom::FlashClassification = 3;
+            pub const FlashClassification_EndGuard_: root::mozilla::dom::FlashClassification = 4;
+            pub type FlashClassification = u8;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct IPCClientInfo {
+                _unused: [u8; 0],
+            }
+            impl Clone for IPCClientInfo {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct TabGroup {
+                _unused: [u8; 0],
+            }
+            impl Clone for TabGroup {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            pub struct DispatcherTrait__bindgen_vtable(::std::os::raw::c_void);
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DispatcherTrait {
+                pub vtable_: *const DispatcherTrait__bindgen_vtable,
+            }
+            #[test]
+            fn bindgen_test_layout_DispatcherTrait() {
+                assert_eq!(
+                    ::std::mem::size_of::<DispatcherTrait>(),
+                    8usize,
+                    concat!("Size of: ", stringify!(DispatcherTrait))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DispatcherTrait>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(DispatcherTrait))
+                );
+            }
+            impl Clone for DispatcherTrait {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct IPCServiceWorkerDescriptor {
+                _unused: [u8; 0],
+            }
+            impl Clone for IPCServiceWorkerDescriptor {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct AudioContext {
+                _unused: [u8; 0],
+            }
+            impl Clone for AudioContext {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct Navigator {
+                _unused: [u8; 0],
+            }
+            impl Clone for Navigator {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct Performance {
+                _unused: [u8; 0],
+            }
+            impl Clone for Performance {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct TimeoutManager {
+                _unused: [u8; 0],
+            }
+            impl Clone for TimeoutManager {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            pub const LargeAllocStatus_NONE: root::mozilla::dom::LargeAllocStatus = 0;
+            pub const LargeAllocStatus_SUCCESS: root::mozilla::dom::LargeAllocStatus = 1;
+            pub const LargeAllocStatus_NON_GET: root::mozilla::dom::LargeAllocStatus = 2;
+            pub const LargeAllocStatus_NON_E10S: root::mozilla::dom::LargeAllocStatus = 3;
+            pub const LargeAllocStatus_NOT_ONLY_TOPLEVEL_IN_TABGROUP:
+                root::mozilla::dom::LargeAllocStatus = 4;
+            pub const LargeAllocStatus_NON_WIN32: root::mozilla::dom::LargeAllocStatus = 5;
+            pub type LargeAllocStatus = u8;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct StyleSheetList {
+                _unused: [u8; 0],
+            }
+            impl Clone for StyleSheetList {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            /// A class meant to be shared by ShadowRoot and Document, that holds a list of
+            /// stylesheets.
+            ///
+            /// TODO(emilio, bug 1418159): In the future this should hold most of the
+            /// relevant style state, this should allow us to fix bug 548397.
+            #[repr(C)]
+            pub struct DocumentOrShadowRoot {
+                pub mStyleSheets: root::nsTArray<root::RefPtr<root::mozilla::StyleSheet>>,
+                pub mDOMStyleSheets: root::RefPtr<root::mozilla::dom::StyleSheetList>,
+                pub mIdentifierMap: [u64; 4usize],
+                pub mAsNode: *mut root::nsINode,
+                pub mKind: root::mozilla::dom::DocumentOrShadowRoot_Kind,
+            }
+            pub const DocumentOrShadowRoot_Kind_Document:
+                root::mozilla::dom::DocumentOrShadowRoot_Kind = 0;
+            pub const DocumentOrShadowRoot_Kind_ShadowRoot:
+                root::mozilla::dom::DocumentOrShadowRoot_Kind = 1;
+            pub type DocumentOrShadowRoot_Kind = i32;
+            pub const DocumentOrShadowRoot_ElementsFromPointFlags_IGNORE_ROOT_SCROLL_FRAME:
+                root::mozilla::dom::DocumentOrShadowRoot_ElementsFromPointFlags = 1;
+            pub const DocumentOrShadowRoot_ElementsFromPointFlags_FLUSH_LAYOUT:
+                root::mozilla::dom::DocumentOrShadowRoot_ElementsFromPointFlags = 2;
+            pub const DocumentOrShadowRoot_ElementsFromPointFlags_IS_ELEMENT_FROM_POINT:
+                root::mozilla::dom::DocumentOrShadowRoot_ElementsFromPointFlags = 4;
+            pub type DocumentOrShadowRoot_ElementsFromPointFlags = u32;
+            #[test]
+            fn bindgen_test_layout_DocumentOrShadowRoot() {
+                assert_eq!(
+                    ::std::mem::size_of::<DocumentOrShadowRoot>(),
+                    64usize,
+                    concat!("Size of: ", stringify!(DocumentOrShadowRoot))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DocumentOrShadowRoot>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(DocumentOrShadowRoot))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mStyleSheets as *const _
+                            as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DocumentOrShadowRoot),
+                        "::",
+                        stringify!(mStyleSheets)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mDOMStyleSheets as *const _
+                            as usize
+                    },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DocumentOrShadowRoot),
+                        "::",
+                        stringify!(mDOMStyleSheets)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mIdentifierMap as *const _
+                            as usize
+                    },
+                    16usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DocumentOrShadowRoot),
+                        "::",
+                        stringify!(mIdentifierMap)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mAsNode as *const _
+                            as usize
+                    },
+                    48usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DocumentOrShadowRoot),
+                        "::",
+                        stringify!(mAsNode)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mKind as *const _ as usize
+                    },
+                    56usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DocumentOrShadowRoot),
+                        "::",
+                        stringify!(mKind)
+                    )
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct AboutCapabilities {
+                _unused: [u8; 0],
+            }
+            impl Clone for AboutCapabilities {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct AnonymousContent {
+                _unused: [u8; 0],
+            }
+            impl Clone for AnonymousContent {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct BoxObject {
+                _unused: [u8; 0],
+            }
+            impl Clone for BoxObject {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DocumentTimeline {
+                _unused: [u8; 0],
+            }
+            impl Clone for DocumentTimeline {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DOMImplementation {
+                _unused: [u8; 0],
+            }
+            impl Clone for DOMImplementation {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct FontFaceSet {
+                _unused: [u8; 0],
+            }
+            impl Clone for FontFaceSet {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct FullscreenRequest {
+                _unused: [u8; 0],
+            }
+            impl Clone for FullscreenRequest {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct ImageTracker {
+                _unused: [u8; 0],
+            }
+            impl Clone for ImageTracker {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct HTMLImageElement {
+                _unused: [u8; 0],
+            }
+            impl Clone for HTMLImageElement {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct Link {
+                _unused: [u8; 0],
+            }
+            impl Clone for Link {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct MediaQueryList {
+                _unused: [u8; 0],
+            }
+            impl Clone for MediaQueryList {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            pub type OrientationType = u8;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct ScriptLoader {
+                _unused: [u8; 0],
+            }
+            impl Clone for ScriptLoader {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct XPathEvaluator {
+                _unused: [u8; 0],
+            }
+            impl Clone for XPathEvaluator {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct FrameRequestCallback {
+                pub _bindgen_opaque_blob: [u64; 6usize],
+            }
+            #[test]
+            fn bindgen_test_layout_FrameRequestCallback() {
+                assert_eq!(
+                    ::std::mem::size_of::<FrameRequestCallback>(),
+                    48usize,
+                    concat!("Size of: ", stringify!(FrameRequestCallback))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<FrameRequestCallback>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(FrameRequestCallback))
+                );
+            }
+            impl Clone for FrameRequestCallback {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            pub struct URLParams {
+                pub mParams: root::nsTArray<root::mozilla::dom::URLParams_Param>,
+            }
+            #[repr(C)]
+            pub struct URLParams_ForEachIterator__bindgen_vtable(::std::os::raw::c_void);
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct URLParams_ForEachIterator {
+                pub vtable_: *const URLParams_ForEachIterator__bindgen_vtable,
+            }
+            #[test]
+            fn bindgen_test_layout_URLParams_ForEachIterator() {
+                assert_eq!(
+                    ::std::mem::size_of::<URLParams_ForEachIterator>(),
+                    8usize,
+                    concat!("Size of: ", stringify!(URLParams_ForEachIterator))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<URLParams_ForEachIterator>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(URLParams_ForEachIterator))
+                );
+            }
+            impl Clone for URLParams_ForEachIterator {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            pub struct URLParams_Param {
+                pub mKey: ::nsstring::nsStringRepr,
+                pub mValue: ::nsstring::nsStringRepr,
+            }
+            #[test]
+            fn bindgen_test_layout_URLParams_Param() {
+                assert_eq!(
+                    ::std::mem::size_of::<URLParams_Param>(),
+                    32usize,
+                    concat!("Size of: ", stringify!(URLParams_Param))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<URLParams_Param>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(URLParams_Param))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<URLParams_Param>())).mKey as *const _ as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(URLParams_Param),
+                        "::",
+                        stringify!(mKey)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<URLParams_Param>())).mValue as *const _ as usize
+                    },
+                    16usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(URLParams_Param),
+                        "::",
+                        stringify!(mValue)
+                    )
+                );
+            }
+            #[test]
+            fn bindgen_test_layout_URLParams() {
+                assert_eq!(
+                    ::std::mem::size_of::<URLParams>(),
+                    8usize,
+                    concat!("Size of: ", stringify!(URLParams))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<URLParams>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(URLParams))
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<URLParams>())).mParams as *const _ as usize },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(URLParams),
+                        "::",
+                        stringify!(mParams)
+                    )
+                );
+            }
+            #[repr(C)]
+            pub struct SRIMetadata {
+                pub mHashes: root::nsTArray<root::nsCString>,
+                pub mIntegrityString: ::nsstring::nsStringRepr,
+                pub mAlgorithm: root::nsCString,
+                pub mAlgorithmType: i8,
+                pub mEmpty: bool,
+            }
+            pub const SRIMetadata_MAX_ALTERNATE_HASHES: u32 = 256;
+            pub const SRIMetadata_UNKNOWN_ALGORITHM: i8 = -1;
+            #[test]
+            fn bindgen_test_layout_SRIMetadata() {
+                assert_eq!(
+                    ::std::mem::size_of::<SRIMetadata>(),
+                    48usize,
+                    concat!("Size of: ", stringify!(SRIMetadata))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<SRIMetadata>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(SRIMetadata))
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<SRIMetadata>())).mHashes as *const _ as usize },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(SRIMetadata),
+                        "::",
+                        stringify!(mHashes)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<SRIMetadata>())).mIntegrityString as *const _
+                            as usize
+                    },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(SRIMetadata),
+                        "::",
+                        stringify!(mIntegrityString)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<SRIMetadata>())).mAlgorithm as *const _ as usize
+                    },
+                    24usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(SRIMetadata),
+                        "::",
+                        stringify!(mAlgorithm)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<SRIMetadata>())).mAlgorithmType as *const _ as usize
+                    },
+                    40usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(SRIMetadata),
+                        "::",
+                        stringify!(mAlgorithmType)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<SRIMetadata>())).mEmpty as *const _ as usize },
+                    41usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(SRIMetadata),
+                        "::",
+                        stringify!(mEmpty)
+                    )
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct OwningNodeOrString {
+                pub mType: root::mozilla::dom::OwningNodeOrString_Type,
+                pub mValue: root::mozilla::dom::OwningNodeOrString_Value,
+            }
+            pub const OwningNodeOrString_Type_eUninitialized:
+                root::mozilla::dom::OwningNodeOrString_Type = 0;
+            pub const OwningNodeOrString_Type_eNode: root::mozilla::dom::OwningNodeOrString_Type =
+                1;
+            pub const OwningNodeOrString_Type_eString: root::mozilla::dom::OwningNodeOrString_Type =
+                2;
+            pub type OwningNodeOrString_Type = u32;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct OwningNodeOrString_Value {
+                pub _bindgen_opaque_blob: [u64; 2usize],
+            }
+            #[test]
+            fn bindgen_test_layout_OwningNodeOrString_Value() {
+                assert_eq!(
+                    ::std::mem::size_of::<OwningNodeOrString_Value>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(OwningNodeOrString_Value))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<OwningNodeOrString_Value>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(OwningNodeOrString_Value))
+                );
+            }
+            impl Clone for OwningNodeOrString_Value {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[test]
+            fn bindgen_test_layout_OwningNodeOrString() {
+                assert_eq!(
+                    ::std::mem::size_of::<OwningNodeOrString>(),
+                    24usize,
+                    concat!("Size of: ", stringify!(OwningNodeOrString))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<OwningNodeOrString>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(OwningNodeOrString))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<OwningNodeOrString>())).mType as *const _ as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(OwningNodeOrString),
+                        "::",
+                        stringify!(mType)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<OwningNodeOrString>())).mValue as *const _ as usize
+                    },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(OwningNodeOrString),
+                        "::",
+                        stringify!(mValue)
+                    )
+                );
+            }
+            #[repr(u8)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum FillMode {
+                None = 0,
+                Forwards = 1,
+                Backwards = 2,
+                Both = 3,
+                Auto = 4,
+                EndGuard_ = 5,
+            }
+            #[repr(u8)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum PlaybackDirection {
+                Normal = 0,
+                Reverse = 1,
+                Alternate = 2,
+                Alternate_reverse = 3,
+                EndGuard_ = 4,
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct XBLChildrenElement {
+                _unused: [u8; 0],
+            }
+            impl Clone for XBLChildrenElement {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct CustomElementData {
+                _unused: [u8; 0],
+            }
+            impl Clone for CustomElementData {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            pub struct FragmentOrElement {
+                pub _base: root::nsIContent,
+                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
+                /// Array containing all attributes and children for this element
+                pub mAttrsAndChildren: root::nsAttrAndChildArray,
+            }
+            pub type FragmentOrElement_HasThreadSafeRefCnt = root::mozilla::FalseType;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct FragmentOrElement_cycleCollection {
+                pub _base: root::nsXPCOMCycleCollectionParticipant,
+            }
+            #[test]
+            fn bindgen_test_layout_FragmentOrElement_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<FragmentOrElement_cycleCollection>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(FragmentOrElement_cycleCollection))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<FragmentOrElement_cycleCollection>(),
+                    8usize,
+                    concat!(
+                        "Alignment of ",
+                        stringify!(FragmentOrElement_cycleCollection)
+                    )
+                );
+            }
+            impl Clone for FragmentOrElement_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            /// There are a set of DOM- and scripting-specific instance variables
+            /// that may only be instantiated when a content object is accessed
+            /// through the DOM. Rather than burn actual slots in the content
+            /// objects for each of these instance variables, we put them off
+            /// in a side structure that's only allocated when the content is
+            /// accessed through the DOM.
+            #[repr(C)]
+            pub struct FragmentOrElement_nsExtendedDOMSlots {
+                pub _base: root::nsIContent_nsExtendedContentSlots,
+                /// SMIL Overridde style rules (for SMIL animation of CSS properties)
+                /// @see Element::GetSMILOverrideStyle
+                pub mSMILOverrideStyle: root::RefPtr<root::nsDOMCSSAttributeDeclaration>,
+                /// Holds any SMIL override style declaration for this element.
+                pub mSMILOverrideStyleDeclaration: root::RefPtr<root::mozilla::DeclarationBlock>,
+                /// The controllers of the XUL Element.
+                pub mControllers: root::nsCOMPtr,
+                /// An object implementing the .labels property for this element.
+                pub mLabelsList: root::RefPtr<root::nsLabelsNodeList>,
+                /// ShadowRoot bound to the element.
+                pub mShadowRoot: root::RefPtr<root::mozilla::dom::ShadowRoot>,
+                /// XBL binding installed on the element.
+                pub mXBLBinding: root::RefPtr<root::nsXBLBinding>,
+                /// Web components custom element data.
+                pub mCustomElementData: root::RefPtr<root::mozilla::dom::CustomElementData>,
+                /// For XUL to hold either frameloader or opener.
+                pub mFrameLoaderOrOpener: root::nsCOMPtr,
+            }
+            #[test]
+            fn bindgen_test_layout_FragmentOrElement_nsExtendedDOMSlots() {
+                assert_eq!(
+                    ::std::mem::size_of::<FragmentOrElement_nsExtendedDOMSlots>(),
+                    104usize,
+                    concat!(
+                        "Size of: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots)
+                    )
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<FragmentOrElement_nsExtendedDOMSlots>(),
+                    8usize,
+                    concat!(
+                        "Alignment of ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
+                            .mSMILOverrideStyle as *const _ as usize
+                    },
+                    40usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
+                        "::",
+                        stringify!(mSMILOverrideStyle)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
+                            .mSMILOverrideStyleDeclaration as *const _
+                            as usize
+                    },
+                    48usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
+                        "::",
+                        stringify!(mSMILOverrideStyleDeclaration)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
+                            .mControllers as *const _ as usize
+                    },
+                    56usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
+                        "::",
+                        stringify!(mControllers)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>())).mLabelsList
+                            as *const _ as usize
+                    },
+                    64usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
+                        "::",
+                        stringify!(mLabelsList)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>())).mShadowRoot
+                            as *const _ as usize
+                    },
+                    72usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
+                        "::",
+                        stringify!(mShadowRoot)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>())).mXBLBinding
+                            as *const _ as usize
+                    },
+                    80usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
+                        "::",
+                        stringify!(mXBLBinding)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
+                            .mCustomElementData as *const _ as usize
+                    },
+                    88usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
+                        "::",
+                        stringify!(mCustomElementData)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
+                            .mFrameLoaderOrOpener as *const _ as usize
+                    },
+                    96usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
+                        "::",
+                        stringify!(mFrameLoaderOrOpener)
+                    )
+                );
+            }
+            #[repr(C)]
+            pub struct FragmentOrElement_nsDOMSlots {
+                pub _base: root::nsIContent_nsContentSlots,
+                /// The .style attribute (an interface that forwards to the actual
+                /// style rules)
+                /// @see nsGenericHTMLElement::GetStyle
+                pub mStyle: root::nsCOMPtr,
+                /// The .dataset attribute.
+                /// @see nsGenericHTMLElement::GetDataset
+                pub mDataset: *mut root::nsDOMStringMap,
+                /// @see Element::Attributes
+                pub mAttributeMap: root::RefPtr<root::nsDOMAttributeMap>,
+                /// An object implementing the .children property for this element.
+                pub mChildrenList: root::RefPtr<root::nsContentList>,
+                /// An object implementing the .classList property for this element.
+                pub mClassList: root::RefPtr<root::nsDOMTokenList>,
+            }
+            #[test]
+            fn bindgen_test_layout_FragmentOrElement_nsDOMSlots() {
+                assert_eq!(
+                    ::std::mem::size_of::<FragmentOrElement_nsDOMSlots>(),
+                    120usize,
+                    concat!("Size of: ", stringify!(FragmentOrElement_nsDOMSlots))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<FragmentOrElement_nsDOMSlots>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(FragmentOrElement_nsDOMSlots))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mStyle as *const _
+                            as usize
+                    },
+                    80usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsDOMSlots),
+                        "::",
+                        stringify!(mStyle)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mDataset
+                            as *const _ as usize
+                    },
+                    88usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsDOMSlots),
+                        "::",
+                        stringify!(mDataset)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mAttributeMap
+                            as *const _ as usize
+                    },
+                    96usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsDOMSlots),
+                        "::",
+                        stringify!(mAttributeMap)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mChildrenList
+                            as *const _ as usize
+                    },
+                    104usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsDOMSlots),
+                        "::",
+                        stringify!(mChildrenList)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mClassList
+                            as *const _ as usize
+                    },
+                    112usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement_nsDOMSlots),
+                        "::",
+                        stringify!(mClassList)
+                    )
+                );
+            }
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom17FragmentOrElement21_cycleCollectorGlobalE"]
+                pub static mut FragmentOrElement__cycleCollectorGlobal:
+                    root::mozilla::dom::FragmentOrElement_cycleCollection;
+            }
+            #[test]
+            fn bindgen_test_layout_FragmentOrElement() {
+                assert_eq!(
+                    ::std::mem::size_of::<FragmentOrElement>(),
+                    104usize,
+                    concat!("Size of: ", stringify!(FragmentOrElement))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<FragmentOrElement>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(FragmentOrElement))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement>())).mRefCnt as *const _ as usize
+                    },
+                    88usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement),
+                        "::",
+                        stringify!(mRefCnt)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FragmentOrElement>())).mAttrsAndChildren as *const _
+                            as usize
+                    },
+                    96usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FragmentOrElement),
+                        "::",
+                        stringify!(mAttrsAndChildren)
+                    )
+                );
+            }
+            #[repr(C)]
+            pub struct Attr {
+                pub _base: root::nsIAttribute,
+                pub _base_1: root::nsIDOMNode,
+                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
+                pub mValue: ::nsstring::nsStringRepr,
+            }
+            pub type Attr_HasThreadSafeRefCnt = root::mozilla::FalseType;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct Attr_cycleCollection {
+                pub _base: root::nsXPCOMCycleCollectionParticipant,
+            }
+            #[test]
+            fn bindgen_test_layout_Attr_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<Attr_cycleCollection>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(Attr_cycleCollection))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<Attr_cycleCollection>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(Attr_cycleCollection))
+                );
+            }
+            impl Clone for Attr_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom4Attr21_cycleCollectorGlobalE"]
+                pub static mut Attr__cycleCollectorGlobal: root::mozilla::dom::Attr_cycleCollection;
+            }
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom4Attr12sInitializedE"]
+                pub static mut Attr_sInitialized: bool;
+            }
+            #[test]
+            fn bindgen_test_layout_Attr() {
+                assert_eq!(
+                    ::std::mem::size_of::<Attr>(),
+                    128usize,
+                    concat!("Size of: ", stringify!(Attr))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<Attr>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(Attr))
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct DOMRectReadOnly {
+                pub _base: root::nsISupports,
+                pub _base_1: root::nsWrapperCache,
+                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
+                pub mParent: root::nsCOMPtr,
+            }
+            pub type DOMRectReadOnly_HasThreadSafeRefCnt = root::mozilla::FalseType;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DOMRectReadOnly_cycleCollection {
+                pub _base: root::nsXPCOMCycleCollectionParticipant,
+            }
+            #[test]
+            fn bindgen_test_layout_DOMRectReadOnly_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<DOMRectReadOnly_cycleCollection>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(DOMRectReadOnly_cycleCollection))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DOMRectReadOnly_cycleCollection>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(DOMRectReadOnly_cycleCollection))
+                );
+            }
+            impl Clone for DOMRectReadOnly_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom15DOMRectReadOnly21_cycleCollectorGlobalE"]
+                pub static mut DOMRectReadOnly__cycleCollectorGlobal:
+                    root::mozilla::dom::DOMRectReadOnly_cycleCollection;
+            }
+            #[test]
+            fn bindgen_test_layout_DOMRectReadOnly() {
+                assert_eq!(
+                    ::std::mem::size_of::<DOMRectReadOnly>(),
+                    48usize,
+                    concat!("Size of: ", stringify!(DOMRectReadOnly))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DOMRectReadOnly>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(DOMRectReadOnly))
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct DOMRect {
+                pub _base: root::mozilla::dom::DOMRectReadOnly,
+                pub mX: f64,
+                pub mY: f64,
+                pub mWidth: f64,
+                pub mHeight: f64,
+            }
+            #[test]
+            fn bindgen_test_layout_DOMRect() {
+                assert_eq!(
+                    ::std::mem::size_of::<DOMRect>(),
+                    80usize,
+                    concat!("Size of: ", stringify!(DOMRect))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DOMRect>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(DOMRect))
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<DOMRect>())).mX as *const _ as usize },
+                    48usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DOMRect),
+                        "::",
+                        stringify!(mX)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<DOMRect>())).mY as *const _ as usize },
+                    56usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DOMRect),
+                        "::",
+                        stringify!(mY)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<DOMRect>())).mWidth as *const _ as usize },
+                    64usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DOMRect),
+                        "::",
+                        stringify!(mWidth)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<DOMRect>())).mHeight as *const _ as usize },
+                    72usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(DOMRect),
+                        "::",
+                        stringify!(mHeight)
+                    )
+                );
+            }
+            pub const ShadowRootMode_Open: root::mozilla::dom::ShadowRootMode = 0;
+            pub const ShadowRootMode_Closed: root::mozilla::dom::ShadowRootMode = 1;
+            pub const ShadowRootMode_EndGuard_: root::mozilla::dom::ShadowRootMode = 2;
+            pub type ShadowRootMode = u8;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct IntersectionCallback {
+                pub _bindgen_opaque_blob: [u64; 6usize],
+            }
+            #[test]
+            fn bindgen_test_layout_IntersectionCallback() {
+                assert_eq!(
+                    ::std::mem::size_of::<IntersectionCallback>(),
+                    48usize,
+                    concat!("Size of: ", stringify!(IntersectionCallback))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<IntersectionCallback>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(IntersectionCallback))
+                );
+            }
+            impl Clone for IntersectionCallback {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            pub struct DOMIntersectionObserverEntry {
+                pub _base: root::nsISupports,
+                pub _base_1: root::nsWrapperCache,
+                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
+                pub mOwner: root::nsCOMPtr,
+                pub mTime: root::DOMHighResTimeStamp,
+                pub mRootBounds: root::RefPtr<root::mozilla::dom::DOMRect>,
+                pub mBoundingClientRect: root::RefPtr<root::mozilla::dom::DOMRect>,
+                pub mIntersectionRect: root::RefPtr<root::mozilla::dom::DOMRect>,
+                pub mIsIntersecting: bool,
+                pub mTarget: root::RefPtr<root::mozilla::dom::Element>,
+                pub mIntersectionRatio: f64,
+            }
+            pub type DOMIntersectionObserverEntry_HasThreadSafeRefCnt = root::mozilla::FalseType;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DOMIntersectionObserverEntry_cycleCollection {
+                pub _base: root::nsXPCOMCycleCollectionParticipant,
+            }
+            #[test]
+            fn bindgen_test_layout_DOMIntersectionObserverEntry_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<DOMIntersectionObserverEntry_cycleCollection>(),
+                    16usize,
+                    concat!(
+                        "Size of: ",
+                        stringify!(DOMIntersectionObserverEntry_cycleCollection)
+                    )
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DOMIntersectionObserverEntry_cycleCollection>(),
+                    8usize,
+                    concat!(
+                        "Alignment of ",
+                        stringify!(DOMIntersectionObserverEntry_cycleCollection)
+                    )
+                );
+            }
+            impl Clone for DOMIntersectionObserverEntry_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            extern "C" {
+                # [ link_name = "\u{1}_ZN7mozilla3dom28DOMIntersectionObserverEntry21_cycleCollectorGlobalE" ] pub static mut DOMIntersectionObserverEntry__cycleCollectorGlobal : root :: mozilla :: dom :: DOMIntersectionObserverEntry_cycleCollection ;
+            }
+            #[test]
+            fn bindgen_test_layout_DOMIntersectionObserverEntry() {
+                assert_eq!(
+                    ::std::mem::size_of::<DOMIntersectionObserverEntry>(),
+                    104usize,
+                    concat!("Size of: ", stringify!(DOMIntersectionObserverEntry))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DOMIntersectionObserverEntry>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(DOMIntersectionObserverEntry))
+                );
+            }
+            #[repr(C)]
+            pub struct DOMIntersectionObserver {
+                pub _base: root::nsISupports,
+                pub _base_1: root::nsWrapperCache,
+                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
+                pub mOwner: root::nsCOMPtr,
+                pub mDocument: root::RefPtr<root::nsIDocument>,
+                pub mCallback: root::RefPtr<root::mozilla::dom::IntersectionCallback>,
+                pub mRoot: root::RefPtr<root::mozilla::dom::Element>,
+                pub mRootMargin: root::nsCSSRect,
+                pub mThresholds: root::nsTArray<f64>,
+                pub mObservationTargets: root::nsTArray<*mut root::mozilla::dom::Element>,
+                pub mQueuedEntries:
+                    root::nsTArray<root::RefPtr<root::mozilla::dom::DOMIntersectionObserverEntry>>,
+                pub mConnected: bool,
+            }
+            pub type DOMIntersectionObserver_HasThreadSafeRefCnt = root::mozilla::FalseType;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DOMIntersectionObserver_cycleCollection {
+                pub _base: root::nsXPCOMCycleCollectionParticipant,
+            }
+            #[test]
+            fn bindgen_test_layout_DOMIntersectionObserver_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<DOMIntersectionObserver_cycleCollection>(),
+                    16usize,
+                    concat!(
+                        "Size of: ",
+                        stringify!(DOMIntersectionObserver_cycleCollection)
+                    )
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DOMIntersectionObserver_cycleCollection>(),
+                    8usize,
+                    concat!(
+                        "Alignment of ",
+                        stringify!(DOMIntersectionObserver_cycleCollection)
+                    )
+                );
+            }
+            impl Clone for DOMIntersectionObserver_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct DOMIntersectionObserver_COMTypeInfo {
+                pub _address: u8,
+            }
+            extern "C" {
+                # [ link_name = "\u{1}_ZN7mozilla3dom23DOMIntersectionObserver21_cycleCollectorGlobalE" ] pub static mut DOMIntersectionObserver__cycleCollectorGlobal : root :: mozilla :: dom :: DOMIntersectionObserver_cycleCollection ;
+            }
+            #[test]
+            fn bindgen_test_layout_DOMIntersectionObserver() {
+                assert_eq!(
+                    ::std::mem::size_of::<DOMIntersectionObserver>(),
+                    168usize,
+                    concat!("Size of: ", stringify!(DOMIntersectionObserver))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DOMIntersectionObserver>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(DOMIntersectionObserver))
+                );
+            }
+            #[repr(C)]
+            pub struct Element {
+                pub _base: root::mozilla::dom::FragmentOrElement,
+                pub mState: root::mozilla::EventStates,
+                pub mServoData: ::gecko_bindings::structs::ServoCell<*mut ::gecko_bindings::structs::ServoNodeData>,
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct Element_COMTypeInfo {
+                pub _address: u8,
+            }
+            /// StyleStateLocks is used to specify which event states should be locked,
+            /// and whether they should be locked to on or off.
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct Element_StyleStateLocks {
+                pub mLocks: root::mozilla::EventStates,
+                pub mValues: root::mozilla::EventStates,
+            }
+            #[test]
+            fn bindgen_test_layout_Element_StyleStateLocks() {
+                assert_eq!(
+                    ::std::mem::size_of::<Element_StyleStateLocks>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(Element_StyleStateLocks))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<Element_StyleStateLocks>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(Element_StyleStateLocks))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<Element_StyleStateLocks>())).mLocks as *const _
+                            as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(Element_StyleStateLocks),
+                        "::",
+                        stringify!(mLocks)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<Element_StyleStateLocks>())).mValues as *const _
+                            as usize
+                    },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(Element_StyleStateLocks),
+                        "::",
+                        stringify!(mValues)
+                    )
+                );
+            }
+            impl Clone for Element_StyleStateLocks {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            pub const Element_ATTR_MISSING: root::mozilla::dom::Element__bindgen_ty_1 = -1;
+            pub const Element_ATTR_VALUE_NO_MATCH: root::mozilla::dom::Element__bindgen_ty_1 = -2;
+            pub type Element__bindgen_ty_1 = i32;
+            /// Check whether this Element's given attribute has one of a given list of
+            /// values. If there is a match, we return the index in the list of the first
+            /// matching value. If there was no attribute at all, then we return
+            /// ATTR_MISSING. If there was an attribute but it didn't match, we return
+            /// ATTR_VALUE_NO_MATCH. A non-negative result always indicates a match.
+            ///
+            /// @param aNameSpaceID The namespace ID of the attribute.  Must not
+            /// be kNameSpaceID_Unknown.
+            /// @param aName The name atom of the attribute.  Must not be null.
+            /// @param aValues a nullptr-terminated array of pointers to atom values to test
+            /// against.
+            /// @param aCaseSensitive Whether to do a case-sensitive compare on the values.
+            /// @return ATTR_MISSING, ATTR_VALUE_NO_MATCH or the non-negative index
+            /// indicating the first value of aValues that matched
+            pub type Element_AttrValuesArray = *const *const root::nsStaticAtom;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct Element_MappedAttributeEntry {
+                pub attribute: *mut *mut root::nsStaticAtom,
+            }
+            #[test]
+            fn bindgen_test_layout_Element_MappedAttributeEntry() {
+                assert_eq!(
+                    ::std::mem::size_of::<Element_MappedAttributeEntry>(),
+                    8usize,
+                    concat!("Size of: ", stringify!(Element_MappedAttributeEntry))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<Element_MappedAttributeEntry>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(Element_MappedAttributeEntry))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<Element_MappedAttributeEntry>())).attribute
+                            as *const _ as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(Element_MappedAttributeEntry),
+                        "::",
+                        stringify!(attribute)
+                    )
+                );
+            }
+            impl Clone for Element_MappedAttributeEntry {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            /// Define a general matching function that can be passed to
+            /// GetElementsByMatching(). Each Element being considered is
+            /// passed in.
+            pub type Element_nsElementMatchFunc = ::std::option::Option<
+                unsafe extern "C" fn(aElement: *mut root::mozilla::dom::Element) -> bool,
+            >;
+            pub const Element_kAllServoDescendantBits: u32 = 12648448;
+            pub const Element_kFireMutationEvent: bool = true;
+            pub const Element_kDontFireMutationEvent: bool = false;
+            pub const Element_kNotifyDocumentObservers: bool = true;
+            pub const Element_kDontNotifyDocumentObservers: bool = false;
+            pub const Element_kCallAfterSetAttr: bool = true;
+            pub const Element_kDontCallAfterSetAttr: bool = false;
+            #[test]
+            fn bindgen_test_layout_Element() {
+                assert_eq!(
+                    ::std::mem::size_of::<Element>(),
+                    120usize,
+                    concat!("Size of: ", stringify!(Element))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<Element>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(Element))
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<Element>())).mState as *const _ as usize },
+                    104usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(Element),
+                        "::",
+                        stringify!(mState)
+                    )
+                );
+                assert_eq!(
+                    unsafe { &(*(::std::ptr::null::<Element>())).mServoData as *const _ as usize },
+                    112usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(Element),
+                        "::",
+                        stringify!(mServoData)
+                    )
+                );
+            }
+            #[repr(C)]
+            pub struct HTMLSlotElement {
+                pub _base: root::nsGenericHTMLElement,
+                pub mAssignedNodes: root::nsTArray<root::RefPtr<root::nsINode>>,
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct HTMLSlotElement_cycleCollection {
+                pub _base: root::mozilla::dom::FragmentOrElement_cycleCollection,
+            }
+            #[test]
+            fn bindgen_test_layout_HTMLSlotElement_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<HTMLSlotElement_cycleCollection>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(HTMLSlotElement_cycleCollection))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<HTMLSlotElement_cycleCollection>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(HTMLSlotElement_cycleCollection))
+                );
+            }
+            impl Clone for HTMLSlotElement_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom15HTMLSlotElement21_cycleCollectorGlobalE"]
+                pub static mut HTMLSlotElement__cycleCollectorGlobal:
+                    root::mozilla::dom::HTMLSlotElement_cycleCollection;
+            }
+            #[test]
+            fn bindgen_test_layout_HTMLSlotElement() {
+                assert_eq!(
+                    ::std::mem::size_of::<HTMLSlotElement>(),
+                    136usize,
+                    concat!("Size of: ", stringify!(HTMLSlotElement))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<HTMLSlotElement>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(HTMLSlotElement))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<HTMLSlotElement>())).mAssignedNodes as *const _
+                            as usize
+                    },
+                    128usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(HTMLSlotElement),
+                        "::",
+                        stringify!(mAssignedNodes)
+                    )
+                );
+            }
+            #[repr(u8)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum CompositeOperation {
+                Replace = 0,
+                Add = 1,
+                Accumulate = 2,
+                EndGuard_ = 3,
+            }
+            #[repr(u8)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum IterationCompositeOperation {
+                Replace = 0,
+                Accumulate = 1,
+                EndGuard_ = 2,
+            }
+            #[repr(C)]
+            pub struct DocumentFragment {
+                pub _base: root::mozilla::dom::FragmentOrElement,
+                pub _base_1: root::nsIDOMDocumentFragment,
+                pub mHost: root::RefPtr<root::mozilla::dom::Element>,
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct DocumentFragment_cycleCollection {
+                pub _base: root::mozilla::dom::FragmentOrElement_cycleCollection,
+            }
+            #[test]
+            fn bindgen_test_layout_DocumentFragment_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<DocumentFragment_cycleCollection>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(DocumentFragment_cycleCollection))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DocumentFragment_cycleCollection>(),
+                    8usize,
+                    concat!(
+                        "Alignment of ",
+                        stringify!(DocumentFragment_cycleCollection)
+                    )
+                );
+            }
+            impl Clone for DocumentFragment_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom16DocumentFragment21_cycleCollectorGlobalE"]
+                pub static mut DocumentFragment__cycleCollectorGlobal:
+                    root::mozilla::dom::DocumentFragment_cycleCollection;
+            }
+            #[test]
+            fn bindgen_test_layout_DocumentFragment() {
+                assert_eq!(
+                    ::std::mem::size_of::<DocumentFragment>(),
+                    120usize,
+                    concat!("Size of: ", stringify!(DocumentFragment))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<DocumentFragment>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(DocumentFragment))
+                );
+            }
+            #[repr(C)]
+            pub struct ShadowRoot {
+                pub _base: root::mozilla::dom::DocumentFragment,
+                pub _base_1: root::mozilla::dom::DocumentOrShadowRoot,
+                pub _base_2: root::nsStubMutationObserver,
+                pub mMode: root::mozilla::dom::ShadowRootMode,
+                pub mServoStyles: root::mozilla::UniquePtr<root::RawServoAuthorStyles>,
+                pub mStyleRuleMap: root::mozilla::UniquePtr<root::mozilla::ServoStyleRuleMap>,
+                pub mSlotMap: [u64; 4usize],
+                pub mIsComposedDocParticipant: bool,
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct ShadowRoot_cycleCollection {
+                pub _base: root::mozilla::dom::DocumentFragment_cycleCollection,
+            }
+            #[test]
+            fn bindgen_test_layout_ShadowRoot_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<ShadowRoot_cycleCollection>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(ShadowRoot_cycleCollection))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<ShadowRoot_cycleCollection>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(ShadowRoot_cycleCollection))
+                );
+            }
+            impl Clone for ShadowRoot_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            /// Represents the insertion point in a slot for a given node.
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct ShadowRoot_SlotAssignment {
+                pub mSlot: *mut root::mozilla::dom::HTMLSlotElement,
+                pub mIndex: [u32; 2usize],
+            }
+            #[test]
+            fn bindgen_test_layout_ShadowRoot_SlotAssignment() {
+                assert_eq!(
+                    ::std::mem::size_of::<ShadowRoot_SlotAssignment>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(ShadowRoot_SlotAssignment))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<ShadowRoot_SlotAssignment>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(ShadowRoot_SlotAssignment))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<ShadowRoot_SlotAssignment>())).mSlot as *const _
+                            as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(ShadowRoot_SlotAssignment),
+                        "::",
+                        stringify!(mSlot)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<ShadowRoot_SlotAssignment>())).mIndex as *const _
+                            as usize
+                    },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(ShadowRoot_SlotAssignment),
+                        "::",
+                        stringify!(mIndex)
+                    )
+                );
+            }
+            pub type ShadowRoot_SlotArray = u8;
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom10ShadowRoot21_cycleCollectorGlobalE"]
+                pub static mut ShadowRoot__cycleCollectorGlobal:
+                    root::mozilla::dom::ShadowRoot_cycleCollection;
+            }
+            #[test]
+            fn bindgen_test_layout_ShadowRoot() {
+                assert_eq!(
+                    ::std::mem::size_of::<ShadowRoot>(),
+                    256usize,
+                    concat!("Size of: ", stringify!(ShadowRoot))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<ShadowRoot>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(ShadowRoot))
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct ExplicitChildIterator {
+                pub mParent: *const root::nsIContent,
+                pub mParentAsSlot: *const root::mozilla::dom::HTMLSlotElement,
+                pub mChild: *mut root::nsIContent,
+                pub mDefaultChild: *mut root::nsIContent,
+                pub mIsFirst: bool,
+                pub mIndexInInserted: u32,
+            }
+            #[test]
+            fn bindgen_test_layout_ExplicitChildIterator() {
+                assert_eq!(
+                    ::std::mem::size_of::<ExplicitChildIterator>(),
+                    40usize,
+                    concat!("Size of: ", stringify!(ExplicitChildIterator))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<ExplicitChildIterator>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(ExplicitChildIterator))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mParent as *const _
+                            as usize
+                    },
+                    0usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(ExplicitChildIterator),
+                        "::",
+                        stringify!(mParent)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mParentAsSlot as *const _
+                            as usize
+                    },
+                    8usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(ExplicitChildIterator),
+                        "::",
+                        stringify!(mParentAsSlot)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mChild as *const _
+                            as usize
+                    },
+                    16usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(ExplicitChildIterator),
+                        "::",
+                        stringify!(mChild)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mDefaultChild as *const _
+                            as usize
+                    },
+                    24usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(ExplicitChildIterator),
+                        "::",
+                        stringify!(mDefaultChild)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mIsFirst as *const _
+                            as usize
+                    },
+                    32usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(ExplicitChildIterator),
+                        "::",
+                        stringify!(mIsFirst)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mIndexInInserted
+                            as *const _ as usize
+                    },
+                    36usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(ExplicitChildIterator),
+                        "::",
+                        stringify!(mIndexInInserted)
+                    )
+                );
+            }
+            impl Clone for ExplicitChildIterator {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct FlattenedChildIterator {
+                pub _base: root::mozilla::dom::ExplicitChildIterator,
+                pub mOriginalContent: *const root::nsIContent,
+                pub mXBLInvolved: [u8; 2usize],
+            }
+            #[test]
+            fn bindgen_test_layout_FlattenedChildIterator() {
+                assert_eq!(
+                    ::std::mem::size_of::<FlattenedChildIterator>(),
+                    56usize,
+                    concat!("Size of: ", stringify!(FlattenedChildIterator))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<FlattenedChildIterator>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(FlattenedChildIterator))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FlattenedChildIterator>())).mOriginalContent
+                            as *const _ as usize
+                    },
+                    40usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FlattenedChildIterator),
+                        "::",
+                        stringify!(mOriginalContent)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<FlattenedChildIterator>())).mXBLInvolved as *const _
+                            as usize
+                    },
+                    48usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(FlattenedChildIterator),
+                        "::",
+                        stringify!(mXBLInvolved)
+                    )
+                );
+            }
+            /// AllChildrenIterator traverses the children of an element including before /
+            /// after content and optionally XBL children.  The iterator can be initialized
+            /// to start at the end by providing false for aStartAtBeginning in order to
+            /// start iterating in reverse from the last child.
+            ///
+            /// Note: it assumes that no mutation of the DOM or frame tree takes place during
+            /// iteration, and will break horribly if that is not true.
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct AllChildrenIterator {
+                pub _base: root::mozilla::dom::FlattenedChildIterator,
+                pub mAnonKids: root::nsTArray<*mut root::nsIContent>,
+                pub mAnonKidsIdx: u32,
+                pub mFlags: u32,
+                pub mPhase: root::mozilla::dom::AllChildrenIterator_IteratorPhase,
+            }
+            pub const AllChildrenIterator_IteratorPhase_eAtBegin:
+                root::mozilla::dom::AllChildrenIterator_IteratorPhase = 0;
+            pub const AllChildrenIterator_IteratorPhase_eAtBeforeKid:
+                root::mozilla::dom::AllChildrenIterator_IteratorPhase = 1;
+            pub const AllChildrenIterator_IteratorPhase_eAtExplicitKids:
+                root::mozilla::dom::AllChildrenIterator_IteratorPhase = 2;
+            pub const AllChildrenIterator_IteratorPhase_eAtAnonKids:
+                root::mozilla::dom::AllChildrenIterator_IteratorPhase = 3;
+            pub const AllChildrenIterator_IteratorPhase_eAtAfterKid:
+                root::mozilla::dom::AllChildrenIterator_IteratorPhase = 4;
+            pub const AllChildrenIterator_IteratorPhase_eAtEnd:
+                root::mozilla::dom::AllChildrenIterator_IteratorPhase = 5;
+            pub type AllChildrenIterator_IteratorPhase = u32;
+            #[test]
+            fn bindgen_test_layout_AllChildrenIterator() {
+                assert_eq!(
+                    ::std::mem::size_of::<AllChildrenIterator>(),
+                    80usize,
+                    concat!("Size of: ", stringify!(AllChildrenIterator))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<AllChildrenIterator>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(AllChildrenIterator))
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<AllChildrenIterator>())).mAnonKids as *const _
+                            as usize
+                    },
+                    56usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(AllChildrenIterator),
+                        "::",
+                        stringify!(mAnonKids)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<AllChildrenIterator>())).mAnonKidsIdx as *const _
+                            as usize
+                    },
+                    64usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(AllChildrenIterator),
+                        "::",
+                        stringify!(mAnonKidsIdx)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<AllChildrenIterator>())).mFlags as *const _ as usize
+                    },
+                    68usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(AllChildrenIterator),
+                        "::",
+                        stringify!(mFlags)
+                    )
+                );
+                assert_eq!(
+                    unsafe {
+                        &(*(::std::ptr::null::<AllChildrenIterator>())).mPhase as *const _ as usize
+                    },
+                    72usize,
+                    concat!(
+                        "Offset of field: ",
+                        stringify!(AllChildrenIterator),
+                        "::",
+                        stringify!(mPhase)
+                    )
+                );
+            }
+            /// StyleChildrenIterator traverses the children of the element from the
+            /// perspective of the style system, particularly the children we need to
+            /// traverse during restyle.
+            ///
+            /// At present, this is identical to AllChildrenIterator with
+            /// (eAllChildren | eSkipDocumentLevelNativeAnonymousContent). We used to have
+            /// detect and skip any native anonymous children that are used to implement some
+            /// special magic in here that went away, but we keep the separate class so
+            /// we can reintroduce special magic back if needed.
+            ///
+            /// Note: it assumes that no mutation of the DOM or frame tree takes place during
+            /// iteration, and will break horribly if that is not true.
+            ///
+            /// We require this to be memmovable since Rust code can create and move
+            /// StyleChildrenIterators.
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct StyleChildrenIterator {
+                pub _base: root::mozilla::dom::AllChildrenIterator,
+            }
+            #[test]
+            fn bindgen_test_layout_StyleChildrenIterator() {
+                assert_eq!(
+                    ::std::mem::size_of::<StyleChildrenIterator>(),
+                    80usize,
+                    concat!("Size of: ", stringify!(StyleChildrenIterator))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<StyleChildrenIterator>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(StyleChildrenIterator))
+                );
+            }
+            #[repr(C)]
+            #[derive(Debug)]
+            pub struct MediaList {
+                pub _base: root::nsISupports,
+                pub _base_1: root::nsWrapperCache,
+                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
+                pub mStyleSheet: *mut root::mozilla::StyleSheet,
+            }
+            pub type MediaList_HasThreadSafeRefCnt = root::mozilla::FalseType;
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct MediaList_cycleCollection {
+                pub _base: root::nsXPCOMCycleCollectionParticipant,
+            }
+            #[test]
+            fn bindgen_test_layout_MediaList_cycleCollection() {
+                assert_eq!(
+                    ::std::mem::size_of::<MediaList_cycleCollection>(),
+                    16usize,
+                    concat!("Size of: ", stringify!(MediaList_cycleCollection))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<MediaList_cycleCollection>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(MediaList_cycleCollection))
+                );
+            }
+            impl Clone for MediaList_cycleCollection {
+                fn clone(&self) -> Self {
+                    *self
+                }
+            }
+            extern "C" {
+                #[link_name = "\u{1}_ZN7mozilla3dom9MediaList21_cycleCollectorGlobalE"]
+                pub static mut MediaList__cycleCollectorGlobal:
+                    root::mozilla::dom::MediaList_cycleCollection;
+            }
+            #[test]
+            fn bindgen_test_layout_MediaList() {
+                assert_eq!(
+                    ::std::mem::size_of::<MediaList>(),
+                    48usize,
+                    concat!("Size of: ", stringify!(MediaList))
+                );
+                assert_eq!(
+                    ::std::mem::align_of::<MediaList>(),
+                    8usize,
+                    concat!("Alignment of ", stringify!(MediaList))
+                );
+            }
+        }
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct NotNull<T> {
+            pub mBasePtr: T,
+            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
+        }
+        pub const FontFamilyType_eFamily_generic_first: root::mozilla::FontFamilyType =
+            FontFamilyType::eFamily_serif;
+        pub const FontFamilyType_eFamily_generic_last: root::mozilla::FontFamilyType =
+            FontFamilyType::eFamily_fantasy;
+        pub const FontFamilyType_eFamily_generic_count: root::mozilla::FontFamilyType =
+            FontFamilyType::eFamily_monospace;
+        #[repr(u32)]
+        /// type of font family name, either a name (e.g. Helvetica) or a
+        /// generic (e.g. serif, sans-serif), with the ability to distinguish
+        /// between unquoted and quoted names for serializaiton
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum FontFamilyType {
+            eFamily_none = 0,
+            eFamily_named = 1,
+            eFamily_named_quoted = 2,
+            eFamily_serif = 3,
+            eFamily_sans_serif = 4,
+            eFamily_monospace = 5,
+            eFamily_cursive = 6,
+            eFamily_fantasy = 7,
+            eFamily_moz_variable = 8,
+            eFamily_moz_fixed = 9,
+            eFamily_moz_emoji = 10,
+        }
+        /// font family name, a string for the name if not a generic and
+        /// a font type indicated named family or which generic family
+        #[repr(C)]
+        pub struct FontFamilyName {
+            pub mType: root::mozilla::FontFamilyType,
+            pub mName: ::nsstring::nsStringRepr,
+        }
+        #[test]
+        fn bindgen_test_layout_FontFamilyName() {
+            assert_eq!(
+                ::std::mem::size_of::<FontFamilyName>(),
+                24usize,
+                concat!("Size of: ", stringify!(FontFamilyName))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<FontFamilyName>(),
+                8usize,
+                concat!("Alignment of ", stringify!(FontFamilyName))
+            );
+            assert_eq!(
+                unsafe { &(*(::std::ptr::null::<FontFamilyName>())).mType as *const _ as usize },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(FontFamilyName),
+                    "::",
+                    stringify!(mType)
+                )
+            );
+            assert_eq!(
+                unsafe { &(*(::std::ptr::null::<FontFamilyName>())).mName as *const _ as usize },
+                8usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(FontFamilyName),
+                    "::",
+                    stringify!(mName)
+                )
+            );
+        }
+        /// A refcounted array of FontFamilyNames.  We use this to store the specified
+        /// value (in Servo) and the computed value (in both Gecko and Servo) of the
+        /// font-family property.
+        #[repr(C)]
+        pub struct SharedFontList {
+            pub mRefCnt: root::mozilla::ThreadSafeAutoRefCnt,
+            pub mNames: root::nsTArray<root::mozilla::FontFamilyName>,
+        }
+        pub type SharedFontList_HasThreadSafeRefCnt = root::mozilla::TrueType;
+        extern "C" {
+            #[link_name = "\u{1}_ZN7mozilla14SharedFontList6sEmptyE"]
+            pub static mut SharedFontList_sEmpty:
+                root::mozilla::StaticRefPtr<root::mozilla::SharedFontList>;
+        }
+        #[test]
+        fn bindgen_test_layout_SharedFontList() {
+            assert_eq!(
+                ::std::mem::size_of::<SharedFontList>(),
+                16usize,
+                concat!("Size of: ", stringify!(SharedFontList))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<SharedFontList>(),
+                8usize,
+                concat!("Alignment of ", stringify!(SharedFontList))
+            );
+            assert_eq!(
+                unsafe { &(*(::std::ptr::null::<SharedFontList>())).mRefCnt as *const _ as usize },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(SharedFontList),
+                    "::",
+                    stringify!(mRefCnt)
+                )
+            );
+            assert_eq!(
+                unsafe { &(*(::std::ptr::null::<SharedFontList>())).mNames as *const _ as usize },
+                8usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(SharedFontList),
+                    "::",
+                    stringify!(mNames)
+                )
+            );
+        }
+        #[test]
+        fn __bindgen_test_layout_StaticRefPtr_open0_SharedFontList_close0_instantiation() {
+            assert_eq!(
+                ::std::mem::size_of::<root::mozilla::StaticRefPtr<root::mozilla::SharedFontList>>(),
+                8usize,
+                concat!(
+                    "Size of template specialization: ",
+                    stringify!(root::mozilla::StaticRefPtr<root::mozilla::SharedFontList>)
+                )
+            );
+            assert_eq ! ( :: std :: mem :: align_of :: < root :: mozilla :: StaticRefPtr < root :: mozilla :: SharedFontList > > ( ) , 8usize , concat ! ( "Alignment of template specialization: " , stringify ! ( root :: mozilla :: StaticRefPtr < root :: mozilla :: SharedFontList > ) ) );
+        }
+        /// font family list, array of font families and a default font type.
+        /// font family names are either named strings or generics. the default
+        /// font type is used to preserve the variable font fallback behavior
+        #[repr(C)]
+        pub struct FontFamilyList {
+            pub mFontlist: root::mozilla::NotNull<root::RefPtr<root::mozilla::SharedFontList>>,
+            pub mDefaultFontType: root::mozilla::FontFamilyType,
+        }
+        #[test]
+        fn bindgen_test_layout_FontFamilyList() {
+            assert_eq!(
+                ::std::mem::size_of::<FontFamilyList>(),
+                16usize,
+                concat!("Size of: ", stringify!(FontFamilyList))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<FontFamilyList>(),
+                8usize,
+                concat!("Alignment of ", stringify!(FontFamilyList))
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<FontFamilyList>())).mFontlist as *const _ as usize
+                },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(FontFamilyList),
+                    "::",
+                    stringify!(mFontlist)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<FontFamilyList>())).mDefaultFontType as *const _ as usize
+                },
+                8usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(FontFamilyList),
+                    "::",
+                    stringify!(mDefaultFontType)
+                )
+            );
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleBasicShapeType {
+            Polygon = 0,
+            Circle = 1,
+            Ellipse = 2,
+            Inset = 3,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleBoxAlign {
+            Stretch = 0,
+            Start = 1,
+            Center = 2,
+            Baseline = 3,
+            End = 4,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleBoxDecorationBreak {
+            Slice = 0,
+            Clone = 1,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleBoxDirection {
+            Normal = 0,
+            Reverse = 1,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleBoxOrient {
+            Horizontal = 0,
+            Vertical = 1,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleBoxPack {
+            Start = 0,
+            Center = 1,
+            End = 2,
+            Justify = 3,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleBoxSizing {
+            Content = 0,
+            Border = 1,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleClear {
+            None = 0,
+            Left = 1,
+            Right = 2,
+            InlineStart = 3,
+            InlineEnd = 4,
+            Both = 5,
+            Line = 8,
+            Max = 13,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleGeometryBox {
+            ContentBox = 0,
+            PaddingBox = 1,
+            BorderBox = 2,
+            MarginBox = 3,
+            FillBox = 4,
+            StrokeBox = 5,
+            ViewBox = 6,
+            NoClip = 7,
+            Text = 8,
+            NoBox = 9,
+            MozAlmostPadding = 127,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleFillRule {
+            Nonzero = 0,
+            Evenodd = 1,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleFloat {
+            None = 0,
+            Left = 1,
+            Right = 2,
+            InlineStart = 3,
+            InlineEnd = 4,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleFloatEdge {
+            ContentBox = 0,
+            MarginBox = 1,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleHyphens {
+            None = 0,
+            Manual = 1,
+            Auto = 2,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleShapeRadius {
+            ClosestSide = 0,
+            FarthestSide = 1,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleShapeSourceType {
+            None = 0,
+            URL = 1,
+            Image = 2,
+            Shape = 3,
+            Box = 4,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleStackSizing {
+            Ignore = 0,
+            StretchToFit = 1,
+            IgnoreHorizontal = 2,
+            IgnoreVertical = 3,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleTextJustify {
+            None = 0,
+            Auto = 1,
+            InterWord = 2,
+            InterCharacter = 3,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleUserFocus {
+            None = 0,
+            Ignore = 1,
+            Normal = 2,
+            SelectAll = 3,
+            SelectBefore = 4,
+            SelectAfter = 5,
+            SelectSame = 6,
+            SelectMenu = 7,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleUserSelect {
+            None = 0,
+            Text = 1,
+            Element = 2,
+            Elements = 3,
+            All = 4,
+            Toggle = 5,
+            TriState = 6,
+            Auto = 7,
+            MozAll = 8,
+            MozText = 9,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleUserInput {
+            None = 0,
+            Auto = 1,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleUserModify {
+            ReadOnly = 0,
+            ReadWrite = 1,
+            WriteOnly = 2,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleWindowDragging {
+            Default = 0,
+            Drag = 1,
+            NoDrag = 2,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleOrient {
+            Inline = 0,
+            Block = 1,
+            Horizontal = 2,
+            Vertical = 3,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleImageLayerRepeat {
+            NoRepeat = 0,
+            RepeatX = 1,
+            RepeatY = 2,
+            Repeat = 3,
+            Space = 4,
+            Round = 5,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleBorderImageRepeat {
+            Stretch = 0,
+            Repeat = 1,
+            Round = 2,
+            Space = 3,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleDisplay {
+            None = 0,
+            Block = 1,
+            FlowRoot = 2,
+            Inline = 3,
+            InlineBlock = 4,
+            ListItem = 5,
+            Table = 6,
+            InlineTable = 7,
+            TableRowGroup = 8,
+            TableColumn = 9,
+            TableColumnGroup = 10,
+            TableHeaderGroup = 11,
+            TableFooterGroup = 12,
+            TableRow = 13,
+            TableCell = 14,
+            TableCaption = 15,
+            Flex = 16,
+            InlineFlex = 17,
+            Grid = 18,
+            InlineGrid = 19,
+            Ruby = 20,
+            RubyBase = 21,
+            RubyBaseContainer = 22,
+            RubyText = 23,
+            RubyTextContainer = 24,
+            Contents = 25,
+            WebkitBox = 26,
+            WebkitInlineBox = 27,
+            MozBox = 28,
+            MozInlineBox = 29,
+            MozGrid = 30,
+            MozInlineGrid = 31,
+            MozGridGroup = 32,
+            MozGridLine = 33,
+            MozStack = 34,
+            MozInlineStack = 35,
+            MozDeck = 36,
+            MozGroupbox = 37,
+            MozPopup = 38,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleGridTrackBreadth {
+            MaxContent = 1,
+            MinContent = 2,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleWhiteSpace {
+            Normal = 0,
+            Pre = 1,
+            Nowrap = 2,
+            PreWrap = 3,
+            PreLine = 4,
+            PreSpace = 5,
+        }
+        #[repr(u8)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleOverscrollBehavior {
+            Auto = 0,
+            Contain = 1,
+            None = 2,
+        }
+        pub const MediaFeatureChangeReason_ViewportChange: root::mozilla::MediaFeatureChangeReason =
+            1;
+        pub const MediaFeatureChangeReason_ZoomChange: root::mozilla::MediaFeatureChangeReason = 2;
+        pub const MediaFeatureChangeReason_MinFontSizeChange:
+            root::mozilla::MediaFeatureChangeReason = 4;
+        pub const MediaFeatureChangeReason_ResolutionChange:
+            root::mozilla::MediaFeatureChangeReason = 8;
+        pub const MediaFeatureChangeReason_MediumChange: root::mozilla::MediaFeatureChangeReason =
+            16;
+        pub const MediaFeatureChangeReason_SizeModeChange: root::mozilla::MediaFeatureChangeReason =
+            32;
+        pub const MediaFeatureChangeReason_SystemMetricsChange:
+            root::mozilla::MediaFeatureChangeReason = 64;
+        pub const MediaFeatureChangeReason_DeviceSizeIsPageSizeChange:
+            root::mozilla::MediaFeatureChangeReason = 128;
+        pub const MediaFeatureChangeReason_DisplayModeChange:
+            root::mozilla::MediaFeatureChangeReason = 256;
+        pub type MediaFeatureChangeReason = i32;
+        #[repr(C)]
+        #[derive(Debug, Copy)]
+        pub struct MediaFeatureChange {
+            pub mRestyleHint: root::nsRestyleHint,
+            pub mChangeHint: root::nsChangeHint,
+            pub mReason: root::mozilla::MediaFeatureChangeReason,
+        }
+        #[test]
+        fn bindgen_test_layout_MediaFeatureChange() {
+            assert_eq!(
+                ::std::mem::size_of::<MediaFeatureChange>(),
+                12usize,
+                concat!("Size of: ", stringify!(MediaFeatureChange))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<MediaFeatureChange>(),
+                4usize,
+                concat!("Alignment of ", stringify!(MediaFeatureChange))
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<MediaFeatureChange>())).mRestyleHint as *const _ as usize
+                },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(MediaFeatureChange),
+                    "::",
+                    stringify!(mRestyleHint)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<MediaFeatureChange>())).mChangeHint as *const _ as usize
+                },
+                4usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(MediaFeatureChange),
+                    "::",
+                    stringify!(mChangeHint)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<MediaFeatureChange>())).mReason as *const _ as usize
+                },
+                8usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(MediaFeatureChange),
+                    "::",
+                    stringify!(mReason)
+                )
+            );
+        }
+        impl Clone for MediaFeatureChange {
+            fn clone(&self) -> Self {
+                *self
+            }
+        }
+        pub mod external {
+            #[allow(unused_imports)]
+            use self::super::super::super::root;
+            /// AtomicRefCounted<T> is like RefCounted<T>, with an atomically updated
+            /// reference counter.
+            ///
+            /// NOTE: Please do not use this class, use NS_INLINE_DECL_THREADSAFE_REFCOUNTING
+            /// instead.
+            #[repr(C)]
+            #[derive(Debug, Copy, Clone)]
+            pub struct AtomicRefCounted {
+                pub _address: u8,
+            }
+        }
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct SupportsWeakPtr {
+            pub _address: u8,
+        }
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct WeakPtr {
+            pub _address: u8,
+        }
+        pub type WeakPtr_WeakReference = u8;
+        /// Event messages
+        pub type EventMessageType = u16;
+        pub const EventMessage_eVoidEvent: root::mozilla::EventMessage = 0;
+        pub const EventMessage_eAllEvents: root::mozilla::EventMessage = 1;
+        pub const EventMessage_eWindowClose: root::mozilla::EventMessage = 2;
+        pub const EventMessage_eKeyPress: root::mozilla::EventMessage = 3;
+        pub const EventMessage_eKeyUp: root::mozilla::EventMessage = 4;
+        pub const EventMessage_eKeyDown: root::mozilla::EventMessage = 5;
+        pub const EventMessage_eKeyDownOnPlugin: root::mozilla::EventMessage = 6;
+        pub const EventMessage_eKeyUpOnPlugin: root::mozilla::EventMessage = 7;
+        pub const EventMessage_eAccessKeyNotFound: root::mozilla::EventMessage = 8;
+        pub const EventMessage_eResize: root::mozilla::EventMessage = 9;
+        pub const EventMessage_eScroll: root::mozilla::EventMessage = 10;
+        pub const EventMessage_eInstall: root::mozilla::EventMessage = 11;
+        pub const EventMessage_eAppInstalled: root::mozilla::EventMessage = 12;
+        pub const EventMessage_ePluginActivate: root::mozilla::EventMessage = 13;
+        pub const EventMessage_ePluginFocus: root::mozilla::EventMessage = 14;
+        pub const EventMessage_eOffline: root::mozilla::EventMessage = 15;
+        pub const EventMessage_eOnline: root::mozilla::EventMessage = 16;
+        pub const EventMessage_eLanguageChange: root::mozilla::EventMessage = 17;
+        pub const EventMessage_eMouseMove: root::mozilla::EventMessage = 18;
+        pub const EventMessage_eMouseUp: root::mozilla::EventMessage = 19;
+        pub const EventMessage_eMouseDown: root::mozilla::EventMessage = 20;
+        pub const EventMessage_eMouseEnterIntoWidget: root::mozilla::EventMessage = 21;
+        pub const EventMessage_eMouseExitFromWidget: root::mozilla::EventMessage = 22;
+        pub const EventMessage_eMouseDoubleClick: root::mozilla::EventMessage = 23;
+        pub const EventMessage_eMouseClick: root::mozilla::EventMessage = 24;
+        pub const EventMessage_eMouseAuxClick: root::mozilla::EventMessage = 25;
+        pub const EventMessage_eMouseActivate: root::mozilla::EventMessage = 26;
+        pub const EventMessage_eMouseOver: root::mozilla::EventMessage = 27;
+        pub const EventMessage_eMouseOut: root::mozilla::EventMessage = 28;
+        pub const EventMessage_eMouseHitTest: root::mozilla::EventMessage = 29;
+        pub const EventMessage_eMouseEnter: root::mozilla::EventMessage = 30;
+        pub const EventMessage_eMouseLeave: root::mozilla::EventMessage = 31;
+        pub const EventMessage_eMouseTouchDrag: root::mozilla::EventMessage = 32;
+        pub const EventMessage_eMouseLongTap: root::mozilla::EventMessage = 33;
+        pub const EventMessage_eMouseEventFirst: root::mozilla::EventMessage = 18;
+        pub const EventMessage_eMouseEventLast: root::mozilla::EventMessage = 33;
+        pub const EventMessage_ePointerMove: root::mozilla::EventMessage = 34;
+        pub const EventMessage_ePointerUp: root::mozilla::EventMessage = 35;
+        pub const EventMessage_ePointerDown: root::mozilla::EventMessage = 36;
+        pub const EventMessage_ePointerOver: root::mozilla::EventMessage = 37;
+        pub const EventMessage_ePointerOut: root::mozilla::EventMessage = 38;
+        pub const EventMessage_ePointerEnter: root::mozilla::EventMessage = 39;
+        pub const EventMessage_ePointerLeave: root::mozilla::EventMessage = 40;
+        pub const EventMessage_ePointerCancel: root::mozilla::EventMessage = 41;
+        pub const EventMessage_ePointerGotCapture: root::mozilla::EventMessage = 42;
+        pub const EventMessage_ePointerLostCapture: root::mozilla::EventMessage = 43;
+        pub const EventMessage_ePointerEventFirst: root::mozilla::EventMessage = 34;
+        pub const EventMessage_ePointerEventLast: root::mozilla::EventMessage = 43;
+        pub const EventMessage_eContextMenu: root::mozilla::EventMessage = 44;
+        pub const EventMessage_eLoad: root::mozilla::EventMessage = 45;
+        pub const EventMessage_eUnload: root::mozilla::EventMessage = 46;
+        pub const EventMessage_eHashChange: root::mozilla::EventMessage = 47;
+        pub const EventMessage_eImageAbort: root::mozilla::EventMessage = 48;
+        pub const EventMessage_eLoadError: root::mozilla::EventMessage = 49;
+        pub const EventMessage_eLoadEnd: root::mozilla::EventMessage = 50;
+        pub const EventMessage_ePopState: root::mozilla::EventMessage = 51;
+        pub const EventMessage_eStorage: root::mozilla::EventMessage = 52;
+        pub const EventMessage_eBeforeUnload: root::mozilla::EventMessage = 53;
+        pub const EventMessage_eReadyStateChange: root::mozilla::EventMessage = 54;
+        pub const EventMessage_eFormSubmit: root::mozilla::EventMessage = 55;
+        pub const EventMessage_eFormReset: root::mozilla::EventMessage = 56;
+        pub const EventMessage_eFormChange: root::mozilla::EventMessage = 57;
+        pub const EventMessage_eFormSelect: root::mozilla::EventMessage = 58;
+        pub const EventMessage_eFormInvalid: root::mozilla::EventMessage = 59;
+        pub const EventMessage_eFormCheckboxStateChange: root::mozilla::EventMessage = 60;
+        pub const EventMessage_eFormRadioStateChange: root::mozilla::EventMessage = 61;
+        pub const EventMessage_eFocus: root::mozilla::EventMessage = 62;
+        pub const EventMessage_eBlur: root::mozilla::EventMessage = 63;
+        pub const EventMessage_eFocusIn: root::mozilla::EventMessage = 64;
+        pub const EventMessage_eFocusOut: root::mozilla::EventMessage = 65;
+        pub const EventMessage_eDragEnter: root::mozilla::EventMessage = 66;
+        pub const EventMessage_eDragOver: root::mozilla::EventMessage = 67;
+        pub const EventMessage_eDragExit: root::mozilla::EventMessage = 68;
+        pub const EventMessage_eDrag: root::mozilla::EventMessage = 69;
+        pub const EventMessage_eDragEnd: root::mozilla::EventMessage = 70;
+        pub const EventMessage_eDragStart: root::mozilla::EventMessage = 71;
+        pub const EventMessage_eDrop: root::mozilla::EventMessage = 72;
+        pub const EventMessage_eDragLeave: root::mozilla::EventMessage = 73;
+        pub const EventMessage_eDragDropEventFirst: root::mozilla::EventMessage = 66;
+        pub const EventMessage_eDragDropEventLast: root::mozilla::EventMessage = 73;
+        pub const EventMessage_eXULPopupShowing: root::mozilla::EventMessage = 74;
+        pub const EventMessage_eXULPopupShown: root::mozilla::EventMessage = 75;
+        pub const EventMessage_eXULPopupPositioned: root::mozilla::EventMessage = 76;
+        pub const EventMessage_eXULPopupHiding: root::mozilla::EventMessage = 77;
+        pub const EventMessage_eXULPopupHidden: root::mozilla::EventMessage = 78;
+        pub const EventMessage_eXULBroadcast: root::mozilla::EventMessage = 79;
+        pub const EventMessage_eXULCommandUpdate: root::mozilla::EventMessage = 80;
+        pub const EventMessage_eLegacyMouseLineOrPageScroll: root::mozilla::EventMessage = 81;
+        pub const EventMessage_eLegacyMousePixelScroll: root::mozilla::EventMessage = 82;
+        pub const EventMessage_eScrollPortUnderflow: root::mozilla::EventMessage = 83;
+        pub const EventMessage_eScrollPortOverflow: root::mozilla::EventMessage = 84;
+        pub const EventMessage_eLegacySubtreeModified: root::mozilla::EventMessage = 85;
+        pub const EventMessage_eLegacyNodeInserted: root::mozilla::EventMessage = 86;
+        pub const EventMessage_eLegacyNodeRemoved: root::mozilla::EventMessage = 87;
+        pub const EventMessage_eLegacyNodeRemovedFromDocument: root::mozilla::EventMessage = 88;
+        pub const EventMessage_eLegacyNodeInsertedIntoDocument: root::mozilla::EventMessage = 89;
+        pub const EventMessage_eLegacyAttrModified: root::mozilla::EventMessage = 90;
+        pub const EventMessage_eLegacyCharacterDataModified: root::mozilla::EventMessage = 91;
+        pub const EventMessage_eLegacyMutationEventFirst: root::mozilla::EventMessage = 85;
+        pub const EventMessage_eLegacyMutationEventLast: root::mozilla::EventMessage = 91;
+        pub const EventMessage_eUnidentifiedEvent: root::mozilla::EventMessage = 92;
+        pub const EventMessage_eCompositionStart: root::mozilla::EventMessage = 93;
+        pub const EventMessage_eCompositionEnd: root::mozilla::EventMessage = 94;
+        pub const EventMessage_eCompositionUpdate: root::mozilla::EventMessage = 95;
+        pub const EventMessage_eCompositionChange: root::mozilla::EventMessage = 96;
+        pub const EventMessage_eCompositionCommitAsIs: root::mozilla::EventMessage = 97;
+        pub const EventMessage_eCompositionCommit: root::mozilla::EventMessage = 98;
+        pub const EventMessage_eCompositionCommitRequestHandled: root::mozilla::EventMessage = 99;
+        pub const EventMessage_eLegacyDOMActivate: root::mozilla::EventMessage = 100;
+        pub const EventMessage_eLegacyDOMFocusIn: root::mozilla::EventMessage = 101;
+        pub const EventMessage_eLegacyDOMFocusOut: root::mozilla::EventMessage = 102;
+        pub const EventMessage_ePageShow: root::mozilla::EventMessage = 103;
+        pub const EventMessage_ePageHide: root::mozilla::EventMessage = 104;
+        pub const EventMessage_eSVGLoad: root::mozilla::EventMessage = 105;
+        pub const EventMessage_eSVGUnload: root::mozilla::EventMessage = 106;
+        pub const EventMessage_eSVGResize: root::mozilla::EventMessage = 107;
+        pub const EventMessage_eSVGScroll: root::mozilla::EventMessage = 108;
+        pub const EventMessage_eSVGZoom: root::mozilla::EventMessage = 109;
+        pub const EventMessage_eXULCommand: root::mozilla::EventMessage = 110;
+        pub const EventMessage_eCopy: root::mozilla::EventMessage = 111;
+        pub const EventMessage_eCut: root::mozilla::EventMessage = 112;
+        pub const EventMessage_ePaste: root::mozilla::EventMessage = 113;
+        pub const EventMessage_ePasteNoFormatting: root::mozilla::EventMessage = 114;
+        pub const EventMessage_eQuerySelectedText: root::mozilla::EventMessage = 115;
+        pub const EventMessage_eQueryTextContent: root::mozilla::EventMessage = 116;
+        pub const EventMessage_eQueryCaretRect: root::mozilla::EventMessage = 117;
+        pub const EventMessage_eQueryTextRect: root::mozilla::EventMessage = 118;
+        pub const EventMessage_eQueryTextRectArray: root::mozilla::EventMessage = 119;
+        pub const EventMessage_eQueryEditorRect: root::mozilla::EventMessage = 120;
+        pub const EventMessage_eQueryContentState: root::mozilla::EventMessage = 121;
+        pub const EventMessage_eQuerySelectionAsTransferable: root::mozilla::EventMessage = 122;
+        pub const EventMessage_eQueryCharacterAtPoint: root::mozilla::EventMessage = 123;
+        pub const EventMessage_eQueryDOMWidgetHittest: root::mozilla::EventMessage = 124;
+        pub const EventMessage_eLoadStart: root::mozilla::EventMessage = 125;
+        pub const EventMessage_eProgress: root::mozilla::EventMessage = 126;
+        pub const EventMessage_eSuspend: root::mozilla::EventMessage = 127;
+        pub const EventMessage_eEmptied: root::mozilla::EventMessage = 128;
+        pub const EventMessage_eStalled: root::mozilla::EventMessage = 129;
+        pub const EventMessage_ePlay: root::mozilla::EventMessage = 130;
+        pub const EventMessage_ePause: root::mozilla::EventMessage = 131;
+        pub const EventMessage_eLoadedMetaData: root::mozilla::EventMessage = 132;
+        pub const EventMessage_eLoadedData: root::mozilla::EventMessage = 133;
+        pub const EventMessage_eWaiting: root::mozilla::EventMessage = 134;
+        pub const EventMessage_ePlaying: root::mozilla::EventMessage = 135;
+        pub const EventMessage_eCanPlay: root::mozilla::EventMessage = 136;
+        pub const EventMessage_eCanPlayThrough: root::mozilla::EventMessage = 137;
+        pub const EventMessage_eSeeking: root::mozilla::EventMessage = 138;
+        pub const EventMessage_eSeeked: root::mozilla::EventMessage = 139;
+        pub const EventMessage_eTimeUpdate: root::mozilla::EventMessage = 140;
+        pub const EventMessage_eEnded: root::mozilla::EventMessage = 141;
+        pub const EventMessage_eRateChange: root::mozilla::EventMessage = 142;
+        pub const EventMessage_eDurationChange: root::mozilla::EventMessage = 143;
+        pub const EventMessage_eVolumeChange: root::mozilla::EventMessage = 144;
+        pub const EventMessage_eAfterPaint: root::mozilla::EventMessage = 145;
+        pub const EventMessage_eSwipeGestureMayStart: root::mozilla::EventMessage = 146;
+        pub const EventMessage_eSwipeGestureStart: root::mozilla::EventMessage = 147;
+        pub const EventMessage_eSwipeGestureUpdate: root::mozilla::EventMessage = 148;
+        pub const EventMessage_eSwipeGestureEnd: root::mozilla::EventMessage = 149;
+        pub const EventMessage_eSwipeGesture: root::mozilla::EventMessage = 150;
+        pub const EventMessage_eMagnifyGestureStart: root::mozilla::EventMessage = 151;
+        pub const EventMessage_eMagnifyGestureUpdate: root::mozilla::EventMessage = 152;
+        pub const EventMessage_eMagnifyGesture: root::mozilla::EventMessage = 153;
+        pub const EventMessage_eRotateGestureStart: root::mozilla::EventMessage = 154;
+        pub const EventMessage_eRotateGestureUpdate: root::mozilla::EventMessage = 155;
+        pub const EventMessage_eRotateGesture: root::mozilla::EventMessage = 156;
+        pub const EventMessage_eTapGesture: root::mozilla::EventMessage = 157;
+        pub const EventMessage_ePressTapGesture: root::mozilla::EventMessage = 158;
+        pub const EventMessage_eEdgeUIStarted: root::mozilla::EventMessage = 159;
+        pub const EventMessage_eEdgeUICanceled: root::mozilla::EventMessage = 160;
+        pub const EventMessage_eEdgeUICompleted: root::mozilla::EventMessage = 161;
+        pub const EventMessage_ePluginInputEvent: root::mozilla::EventMessage = 162;
+        pub const EventMessage_eSetSelection: root::mozilla::EventMessage = 163;
+        pub const EventMessage_eContentCommandCut: root::mozilla::EventMessage = 164;
+        pub const EventMessage_eContentCommandCopy: root::mozilla::EventMessage = 165;
+        pub const EventMessage_eContentCommandPaste: root::mozilla::EventMessage = 166;
+        pub const EventMessage_eContentCommandDelete: root::mozilla::EventMessage = 167;
+        pub const EventMessage_eContentCommandUndo: root::mozilla::EventMessage = 168;
+        pub const EventMessage_eContentCommandRedo: root::mozilla::EventMessage = 169;
+        pub const EventMessage_eContentCommandPasteTransferable: root::mozilla::EventMessage = 170;
+        pub const EventMessage_eContentCommandLookUpDictionary: root::mozilla::EventMessage = 171;
+        pub const EventMessage_eContentCommandScroll: root::mozilla::EventMessage = 172;
+        pub const EventMessage_eGestureNotify: root::mozilla::EventMessage = 173;
+        pub const EventMessage_eScrolledAreaChanged: root::mozilla::EventMessage = 174;
+        pub const EventMessage_eTransitionStart: root::mozilla::EventMessage = 175;
+        pub const EventMessage_eTransitionRun: root::mozilla::EventMessage = 176;
+        pub const EventMessage_eTransitionEnd: root::mozilla::EventMessage = 177;
+        pub const EventMessage_eTransitionCancel: root::mozilla::EventMessage = 178;
+        pub const EventMessage_eAnimationStart: root::mozilla::EventMessage = 179;
+        pub const EventMessage_eAnimationEnd: root::mozilla::EventMessage = 180;
+        pub const EventMessage_eAnimationIteration: root::mozilla::EventMessage = 181;
+        pub const EventMessage_eAnimationCancel: root::mozilla::EventMessage = 182;
+        pub const EventMessage_eWebkitTransitionEnd: root::mozilla::EventMessage = 183;
+        pub const EventMessage_eWebkitAnimationStart: root::mozilla::EventMessage = 184;
+        pub const EventMessage_eWebkitAnimationEnd: root::mozilla::EventMessage = 185;
+        pub const EventMessage_eWebkitAnimationIteration: root::mozilla::EventMessage = 186;
+        pub const EventMessage_eSMILBeginEvent: root::mozilla::EventMessage = 187;
+        pub const EventMessage_eSMILEndEvent: root::mozilla::EventMessage = 188;
+        pub const EventMessage_eSMILRepeatEvent: root::mozilla::EventMessage = 189;
+        pub const EventMessage_eAudioProcess: root::mozilla::EventMessage = 190;
+        pub const EventMessage_eAudioComplete: root::mozilla::EventMessage = 191;
+        pub const EventMessage_eBeforeScriptExecute: root::mozilla::EventMessage = 192;
+        pub const EventMessage_eAfterScriptExecute: root::mozilla::EventMessage = 193;
+        pub const EventMessage_eBeforePrint: root::mozilla::EventMessage = 194;
+        pub const EventMessage_eAfterPrint: root::mozilla::EventMessage = 195;
+        pub const EventMessage_eMessage: root::mozilla::EventMessage = 196;
+        pub const EventMessage_eMessageError: root::mozilla::EventMessage = 197;
+        pub const EventMessage_eOpen: root::mozilla::EventMessage = 198;
+        pub const EventMessage_eDeviceOrientation: root::mozilla::EventMessage = 199;
+        pub const EventMessage_eAbsoluteDeviceOrientation: root::mozilla::EventMessage = 200;
+        pub const EventMessage_eDeviceMotion: root::mozilla::EventMessage = 201;
+        pub const EventMessage_eDeviceProximity: root::mozilla::EventMessage = 202;
+        pub const EventMessage_eUserProximity: root::mozilla::EventMessage = 203;
+        pub const EventMessage_eDeviceLight: root::mozilla::EventMessage = 204;
+        pub const EventMessage_eVRDisplayActivate: root::mozilla::EventMessage = 205;
+        pub const EventMessage_eVRDisplayDeactivate: root::mozilla::EventMessage = 206;
+        pub const EventMessage_eVRDisplayConnect: root::mozilla::EventMessage = 207;
+        pub const EventMessage_eVRDisplayDisconnect: root::mozilla::EventMessage = 208;
+        pub const EventMessage_eVRDisplayPresentChange: root::mozilla::EventMessage = 209;
+        pub const EventMessage_eShow: root::mozilla::EventMessage = 210;
+        pub const EventMessage_eFullscreenChange: root::mozilla::EventMessage = 211;
+        pub const EventMessage_eFullscreenError: root::mozilla::EventMessage = 212;
+        pub const EventMessage_eMozFullscreenChange: root::mozilla::EventMessage = 213;
+        pub const EventMessage_eMozFullscreenError: root::mozilla::EventMessage = 214;
+        pub const EventMessage_eTouchStart: root::mozilla::EventMessage = 215;
+        pub const EventMessage_eTouchMove: root::mozilla::EventMessage = 216;
+        pub const EventMessage_eTouchEnd: root::mozilla::EventMessage = 217;
+        pub const EventMessage_eTouchCancel: root::mozilla::EventMessage = 218;
+        pub const EventMessage_eTouchPointerCancel: root::mozilla::EventMessage = 219;
+        pub const EventMessage_ePointerLockChange: root::mozilla::EventMessage = 220;
+        pub const EventMessage_ePointerLockError: root::mozilla::EventMessage = 221;
+        pub const EventMessage_eMozPointerLockChange: root::mozilla::EventMessage = 222;
+        pub const EventMessage_eMozPointerLockError: root::mozilla::EventMessage = 223;
+        pub const EventMessage_eWheel: root::mozilla::EventMessage = 224;
+        pub const EventMessage_eWheelOperationStart: root::mozilla::EventMessage = 225;
+        pub const EventMessage_eWheelOperationEnd: root::mozilla::EventMessage = 226;
+        pub const EventMessage_eTimeChange: root::mozilla::EventMessage = 227;
+        pub const EventMessage_eNetworkUpload: root::mozilla::EventMessage = 228;
+        pub const EventMessage_eNetworkDownload: root::mozilla::EventMessage = 229;
+        pub const EventMessage_eMediaRecorderDataAvailable: root::mozilla::EventMessage = 230;
+        pub const EventMessage_eMediaRecorderWarning: root::mozilla::EventMessage = 231;
+        pub const EventMessage_eMediaRecorderStop: root::mozilla::EventMessage = 232;
+        pub const EventMessage_eGamepadButtonDown: root::mozilla::EventMessage = 233;
+        pub const EventMessage_eGamepadButtonUp: root::mozilla::EventMessage = 234;
+        pub const EventMessage_eGamepadAxisMove: root::mozilla::EventMessage = 235;
+        pub const EventMessage_eGamepadConnected: root::mozilla::EventMessage = 236;
+        pub const EventMessage_eGamepadDisconnected: root::mozilla::EventMessage = 237;
+        pub const EventMessage_eGamepadEventFirst: root::mozilla::EventMessage = 233;
+        pub const EventMessage_eGamepadEventLast: root::mozilla::EventMessage = 237;
+        pub const EventMessage_eEditorInput: root::mozilla::EventMessage = 238;
+        pub const EventMessage_eSelectStart: root::mozilla::EventMessage = 239;
+        pub const EventMessage_eSelectionChange: root::mozilla::EventMessage = 240;
+        pub const EventMessage_eVisibilityChange: root::mozilla::EventMessage = 241;
+        pub const EventMessage_eToggle: root::mozilla::EventMessage = 242;
+        pub const EventMessage_eClose: root::mozilla::EventMessage = 243;
+        pub const EventMessage_eEventMessage_MaxValue: root::mozilla::EventMessage = 244;
+        pub type EventMessage = u16;
+        /// Event class IDs
+        pub type EventClassIDType = u8;
+        pub const EventClassID_eBasicEventClass: root::mozilla::EventClassID = 0;
+        pub const EventClassID_eGUIEventClass: root::mozilla::EventClassID = 1;
+        pub const EventClassID_eInputEventClass: root::mozilla::EventClassID = 2;
+        pub const EventClassID_eUIEventClass: root::mozilla::EventClassID = 3;
+        pub const EventClassID_eKeyboardEventClass: root::mozilla::EventClassID = 4;
+        pub const EventClassID_eCompositionEventClass: root::mozilla::EventClassID = 5;
+        pub const EventClassID_eQueryContentEventClass: root::mozilla::EventClassID = 6;
+        pub const EventClassID_eSelectionEventClass: root::mozilla::EventClassID = 7;
+        pub const EventClassID_eEditorInputEventClass: root::mozilla::EventClassID = 8;
+        pub const EventClassID_eMouseEventBaseClass: root::mozilla::EventClassID = 9;
+        pub const EventClassID_eMouseEventClass: root::mozilla::EventClassID = 10;
+        pub const EventClassID_eDragEventClass: root::mozilla::EventClassID = 11;
+        pub const EventClassID_eMouseScrollEventClass: root::mozilla::EventClassID = 12;
+        pub const EventClassID_eWheelEventClass: root::mozilla::EventClassID = 13;
+        pub const EventClassID_ePointerEventClass: root::mozilla::EventClassID = 14;
+        pub const EventClassID_eGestureNotifyEventClass: root::mozilla::EventClassID = 15;
+        pub const EventClassID_eSimpleGestureEventClass: root::mozilla::EventClassID = 16;
+        pub const EventClassID_eTouchEventClass: root::mozilla::EventClassID = 17;
+        pub const EventClassID_eScrollPortEventClass: root::mozilla::EventClassID = 18;
+        pub const EventClassID_eScrollAreaEventClass: root::mozilla::EventClassID = 19;
+        pub const EventClassID_eFormEventClass: root::mozilla::EventClassID = 20;
+        pub const EventClassID_eClipboardEventClass: root::mozilla::EventClassID = 21;
+        pub const EventClassID_eFocusEventClass: root::mozilla::EventClassID = 22;
+        pub const EventClassID_eTransitionEventClass: root::mozilla::EventClassID = 23;
+        pub const EventClassID_eAnimationEventClass: root::mozilla::EventClassID = 24;
+        pub const EventClassID_eSMILTimeEventClass: root::mozilla::EventClassID = 25;
+        pub const EventClassID_eCommandEventClass: root::mozilla::EventClassID = 26;
+        pub const EventClassID_eContentCommandEventClass: root::mozilla::EventClassID = 27;
+        pub const EventClassID_ePluginEventClass: root::mozilla::EventClassID = 28;
+        pub const EventClassID_eMutationEventClass: root::mozilla::EventClassID = 29;
+        pub type EventClassID = u8;
+        pub type AtomArray = root::nsTArray<root::RefPtr<root::nsAtom>>;
+        /// EventStates is the class used to represent the event states of nsIContent
+        /// instances. These states are calculated by IntrinsicState() and
+        /// ContentStatesChanged() has to be called when one of them changes thus
+        /// informing the layout/style engine of the change.
+        /// Event states are associated with pseudo-classes.
+        #[repr(C)]
+        #[derive(Debug, Copy)]
+        pub struct EventStates {
+            pub mStates: root::mozilla::EventStates_InternalType,
+        }
+        pub type EventStates_InternalType = u64;
+        pub type EventStates_ServoType = u64;
+        #[test]
+        fn bindgen_test_layout_EventStates() {
+            assert_eq!(
+                ::std::mem::size_of::<EventStates>(),
+                8usize,
+                concat!("Size of: ", stringify!(EventStates))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<EventStates>(),
+                8usize,
+                concat!("Alignment of ", stringify!(EventStates))
+            );
+            assert_eq!(
+                unsafe { &(*(::std::ptr::null::<EventStates>())).mStates as *const _ as usize },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(EventStates),
+                    "::",
+                    stringify!(mStates)
+                )
+            );
+        }
+        impl Clone for EventStates {
+            fn clone(&self) -> Self {
+                *self
+            }
+        }
+        pub const ServoTraversalFlags_Empty: root::mozilla::ServoTraversalFlags = 0;
+        pub const ServoTraversalFlags_AnimationOnly: root::mozilla::ServoTraversalFlags = 1;
+        pub const ServoTraversalFlags_ForCSSRuleChanges: root::mozilla::ServoTraversalFlags = 2;
+        pub const ServoTraversalFlags_Forgetful: root::mozilla::ServoTraversalFlags = 8;
+        pub const ServoTraversalFlags_ClearDirtyBits: root::mozilla::ServoTraversalFlags = 32;
+        pub const ServoTraversalFlags_ClearAnimationOnlyDirtyDescendants:
+            root::mozilla::ServoTraversalFlags = 64;
+        pub const ServoTraversalFlags_ParallelTraversal: root::mozilla::ServoTraversalFlags = 128;
+        pub const ServoTraversalFlags_FlushThrottledAnimations: root::mozilla::ServoTraversalFlags =
+            256;
+        pub type ServoTraversalFlags = u32;
+        #[repr(i32)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum StyleRuleInclusion {
+            All = 0,
+            DefaultOnly = 1,
+        }
+        pub const UpdateAnimationsTasks_CSSAnimations: root::mozilla::UpdateAnimationsTasks = 1;
+        pub const UpdateAnimationsTasks_CSSTransitions: root::mozilla::UpdateAnimationsTasks = 2;
+        pub const UpdateAnimationsTasks_EffectProperties: root::mozilla::UpdateAnimationsTasks = 4;
+        pub const UpdateAnimationsTasks_CascadeResults: root::mozilla::UpdateAnimationsTasks = 8;
+        pub const UpdateAnimationsTasks_DisplayChangedFromNone:
+            root::mozilla::UpdateAnimationsTasks = 16;
+        pub type UpdateAnimationsTasks = u8;
+        pub const ParsingMode_Default: root::mozilla::ParsingMode = 0;
+        pub const ParsingMode_AllowUnitlessLength: root::mozilla::ParsingMode = 1;
+        pub const ParsingMode_AllowAllNumericValues: root::mozilla::ParsingMode = 2;
+        pub type ParsingMode = u8;
+        #[repr(i32)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum InheritTarget {
+            Text = 0,
+            FirstLetterContinuation = 1,
+            PlaceholderFrame = 2,
+        }
+        #[repr(C)]
+        #[derive(Debug, Copy)]
+        pub struct ServoStyleSetSizes {
+            pub mRuleTree: usize,
+            pub mPrecomputedPseudos: usize,
+            pub mElementAndPseudosMaps: usize,
+            pub mInvalidationMap: usize,
+            pub mRevalidationSelectors: usize,
+            pub mOther: usize,
+        }
+        #[test]
+        fn bindgen_test_layout_ServoStyleSetSizes() {
+            assert_eq!(
+                ::std::mem::size_of::<ServoStyleSetSizes>(),
+                48usize,
+                concat!("Size of: ", stringify!(ServoStyleSetSizes))
+            );
+            assert_eq!(
+                ::std::mem::align_of::<ServoStyleSetSizes>(),
+                8usize,
+                concat!("Alignment of ", stringify!(ServoStyleSetSizes))
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<ServoStyleSetSizes>())).mRuleTree as *const _ as usize
+                },
+                0usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(ServoStyleSetSizes),
+                    "::",
+                    stringify!(mRuleTree)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<ServoStyleSetSizes>())).mPrecomputedPseudos as *const _
+                        as usize
+                },
+                8usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(ServoStyleSetSizes),
+                    "::",
+                    stringify!(mPrecomputedPseudos)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<ServoStyleSetSizes>())).mElementAndPseudosMaps
+                        as *const _ as usize
+                },
+                16usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(ServoStyleSetSizes),
+                    "::",
+                    stringify!(mElementAndPseudosMaps)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<ServoStyleSetSizes>())).mInvalidationMap as *const _
+                        as usize
+                },
+                24usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(ServoStyleSetSizes),
+                    "::",
+                    stringify!(mInvalidationMap)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<ServoStyleSetSizes>())).mRevalidationSelectors
+                        as *const _ as usize
+                },
+                32usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(ServoStyleSetSizes),
+                    "::",
+                    stringify!(mRevalidationSelectors)
+                )
+            );
+            assert_eq!(
+                unsafe {
+                    &(*(::std::ptr::null::<ServoStyleSetSizes>())).mOther as *const _ as usize
+                },
+                40usize,
+                concat!(
+                    "Offset of field: ",
+                    stringify!(ServoStyleSetSizes),
+                    "::",
+                    stringify!(mOther)
+                )
+            );
+        }
+        impl Clone for ServoStyleSetSizes {
+            fn clone(&self) -> Self {
+                *self
+            }
+        }
+        pub const StyleBackendType_None: root::mozilla::StyleBackendType = 0;
+        pub const StyleBackendType_Gecko: root::mozilla::StyleBackendType = 1;
+        pub const StyleBackendType_Servo: root::mozilla::StyleBackendType = 2;
+        /// Enumeration that represents one of the two supported style system backends.
+        pub type StyleBackendType = u8;
         pub mod css {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(u8)]
             /// Enum defining the mode in which a sheet is to be parsed.  This is
             /// usually, but not always, the same as the cascade level at which the
             /// sheet will apply (see nsStyleSet.h).  Most of the Loader APIs only
             /// support loading of author sheets.
@@ -2561,4231 +6729,16 @@ pub mod root {
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum URLMatchingFunction {
                 eURL = 0,
                 eURLPrefix = 1,
                 eDomain = 2,
                 eRegExp = 3,
             }
         }
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct ThreadSafeAutoRefCnt {
-            pub mValue: u64,
-        }
-        pub const ThreadSafeAutoRefCnt_isThreadSafe: bool = true;
-        #[test]
-        fn bindgen_test_layout_ThreadSafeAutoRefCnt() {
-            assert_eq!(
-                ::std::mem::size_of::<ThreadSafeAutoRefCnt>(),
-                8usize,
-                concat!("Size of: ", stringify!(ThreadSafeAutoRefCnt))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<ThreadSafeAutoRefCnt>(),
-                8usize,
-                concat!("Alignment of ", stringify!(ThreadSafeAutoRefCnt))
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<ThreadSafeAutoRefCnt>())).mValue as *const _ as usize
-                },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(ThreadSafeAutoRefCnt),
-                    "::",
-                    stringify!(mValue)
-                )
-            );
-        }
-        pub type EnumeratedArray_ArrayType = u8;
-        pub type EnumeratedArray_iterator = root::mozilla::EnumeratedArray_ArrayType;
-        pub type EnumeratedArray_const_iterator = root::mozilla::EnumeratedArray_ArrayType;
-        pub type EnumeratedArray_reverse_iterator = root::mozilla::EnumeratedArray_ArrayType;
-        pub type EnumeratedArray_const_reverse_iterator = root::mozilla::EnumeratedArray_ArrayType;
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct LinkedListElement {
-            pub mNext: *mut root::mozilla::LinkedListElement,
-            pub mPrev: *mut root::mozilla::LinkedListElement,
-            pub mIsSentinel: bool,
-        }
-        pub type LinkedListElement_Traits = root::mozilla::detail::LinkedListElementTraits;
-        pub type LinkedListElement_RawType = root::mozilla::LinkedListElement_Traits;
-        pub type LinkedListElement_ConstRawType = root::mozilla::LinkedListElement_Traits;
-        pub type LinkedListElement_ClientType = root::mozilla::LinkedListElement_Traits;
-        pub type LinkedListElement_ConstClientType = root::mozilla::LinkedListElement_Traits;
-        pub const LinkedListElement_NodeKind_Normal: root::mozilla::LinkedListElement_NodeKind = 0;
-        pub const LinkedListElement_NodeKind_Sentinel: root::mozilla::LinkedListElement_NodeKind =
-            0;
-        pub type LinkedListElement_NodeKind = i32;
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct LinkedList {
-            pub sentinel: root::mozilla::LinkedListElement,
-        }
-        pub type LinkedList_Traits = root::mozilla::detail::LinkedListElementTraits;
-        pub type LinkedList_RawType = root::mozilla::LinkedList_Traits;
-        pub type LinkedList_ConstRawType = root::mozilla::LinkedList_Traits;
-        pub type LinkedList_ClientType = root::mozilla::LinkedList_Traits;
-        pub type LinkedList_ConstClientType = root::mozilla::LinkedList_Traits;
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct LinkedList_Iterator {
-            pub mCurrent: root::mozilla::LinkedList_RawType,
-        }
-        /// # mozilla::Variant
-        ///
-        /// A variant / tagged union / heterogenous disjoint union / sum-type template
-        /// class. Similar in concept to (but not derived from) `boost::variant`.
-        ///
-        /// Sometimes, you may wish to use a C union with non-POD types. However, this is
-        /// forbidden in C++ because it is not clear which type in the union should have
-        /// its constructor and destructor run on creation and deletion
-        /// respectively. This is the problem that `mozilla::Variant` solves.
-        ///
-        /// ## Usage
-        ///
-        /// A `mozilla::Variant` instance is constructed (via move or copy) from one of
-        /// its variant types (ignoring const and references). It does *not* support
-        /// construction from subclasses of variant types or types that coerce to one of
-        /// the variant types.
-        ///
-        /// Variant<char, uint32_t> v1('a');
-        /// Variant<UniquePtr<A>, B, C> v2(MakeUnique<A>());
-        /// Variant<bool, char> v3(VariantType<char>, 0); // disambiguation needed
-        /// Variant<int, int> v4(VariantIndex<1>, 0); // 2nd int
-        ///
-        /// Because specifying the full type of a Variant value is often verbose,
-        /// there are two easier ways to construct values:
-        ///
-        /// A. AsVariant() can be used to construct a Variant value using type inference
-        /// in contexts such as expressions or when returning values from functions.
-        /// Because AsVariant() must copy or move the value into a temporary and this
-        /// cannot necessarily be elided by the compiler, it's mostly appropriate only
-        /// for use with primitive or very small types.
-        ///
-        /// Variant<char, uint32_t> Foo() { return AsVariant('x'); }
-        /// // ...
-        /// Variant<char, uint32_t> v1 = Foo();  // v1 holds char('x').
-        ///
-        /// B. Brace-construction with VariantType or VariantIndex; this also allows
-        /// in-place construction with any number of arguments.
-        ///
-        /// struct AB { AB(int, int){...} };
-        /// static Variant<AB, bool> foo()
-        /// {
-        /// return {VariantIndex<0>{}, 1, 2};
-        /// }
-        /// // ...
-        /// Variant<AB, bool> v0 = Foo();  // v0 holds AB(1,2).
-        ///
-        /// All access to the contained value goes through type-safe accessors.
-        /// Either the stored type, or the type index may be provided.
-        ///
-        /// void
-        /// Foo(Variant<A, B, C> v)
-        /// {
-        /// if (v.is<A>()) {
-        /// A& ref = v.as<A>();
-        /// ...
-        /// } else (v.is<1>()) { // Instead of v.is<B>.
-        /// ...
-        /// } else {
-        /// ...
-        /// }
-        /// }
-        ///
-        /// In some situation, a Variant may be constructed from templated types, in
-        /// which case it is possible that the same type could be given multiple times by
-        /// an external developer. Or seemingly-different types could be aliases.
-        /// In this case, repeated types can only be accessed through their index, to
-        /// prevent ambiguous access by type.
-        ///
-        /// // Bad!
-        /// template <typename T>
-        /// struct ResultOrError
-        /// {
-        /// Variant<T, int> m;
-        /// ResultOrError() : m(int(0)) {} // Error '0' by default
-        /// ResultOrError(const T& r) : m(r) {}
-        /// bool IsResult() const { return m.is<T>(); }
-        /// bool IsError() const { return m.is<int>(); }
-        /// };
-        /// // Now instantiante with the result being an int too:
-        /// ResultOrError<int> myResult(123); // Fail!
-        /// // In Variant<int, int>, which 'int' are we refering to, from inside
-        /// // ResultOrError functions?
-        ///
-        /// // Good!
-        /// template <typename T>
-        /// struct ResultOrError
-        /// {
-        /// Variant<T, int> m;
-        /// ResultOrError() : m(VariantIndex<1>{}, 0) {} // Error '0' by default
-        /// ResultOrError(const T& r) : m(VariantIndex<0>{}, r) {}
-        /// bool IsResult() const { return m.is<0>(); } // 0 -> T
-        /// bool IsError() const { return m.is<1>(); } // 1 -> int
-        /// };
-        /// // Now instantiante with the result being an int too:
-        /// ResultOrError<int> myResult(123); // It now works!
-        ///
-        /// Attempting to use the contained value as type `T1` when the `Variant`
-        /// instance contains a value of type `T2` causes an assertion failure.
-        ///
-        /// A a;
-        /// Variant<A, B, C> v(a);
-        /// v.as<B>(); // <--- Assertion failure!
-        ///
-        /// Trying to use a `Variant<Ts...>` instance as some type `U` that is not a
-        /// member of the set of `Ts...` is a compiler error.
-        ///
-        /// A a;
-        /// Variant<A, B, C> v(a);
-        /// v.as<SomeRandomType>(); // <--- Compiler error!
-        ///
-        /// Additionally, you can turn a `Variant` that `is<T>` into a `T` by moving it
-        /// out of the containing `Variant` instance with the `extract<T>` method:
-        ///
-        /// Variant<UniquePtr<A>, B, C> v(MakeUnique<A>());
-        /// auto ptr = v.extract<UniquePtr<A>>();
-        ///
-        /// Finally, you can exhaustively match on the contained variant and branch into
-        /// different code paths depending on which type is contained. This is preferred
-        /// to manually checking every variant type T with is<T>() because it provides
-        /// compile-time checking that you handled every type, rather than runtime
-        /// assertion failures.
-        ///
-        /// // Bad!
-        /// char* foo(Variant<A, B, C, D>& v) {
-        /// if (v.is<A>()) {
-        /// return ...;
-        /// } else if (v.is<B>()) {
-        /// return ...;
-        /// } else {
-        /// return doSomething(v.as<C>()); // Forgot about case D!
-        /// }
-        /// }
-        ///
-        /// // Good!
-        /// struct FooMatcher
-        /// {
-        /// // The return type of all matchers must be identical.
-        /// char* match(A& a) { ... }
-        /// char* match(B& b) { ... }
-        /// char* match(C& c) { ... }
-        /// char* match(D& d) { ... } // Compile-time error to forget D!
-        /// }
-        /// char* foo(Variant<A, B, C, D>& v) {
-        /// return v.match(FooMatcher());
-        /// }
-        ///
-        /// ## Examples
-        ///
-        /// A tree is either an empty leaf, or a node with a value and two children:
-        ///
-        /// struct Leaf { };
-        ///
-        /// template<typename T>
-        /// struct Node
-        /// {
-        /// T value;
-        /// Tree<T>* left;
-        /// Tree<T>* right;
-        /// };
-        ///
-        /// template<typename T>
-        /// using Tree = Variant<Leaf, Node<T>>;
-        ///
-        /// A copy-on-write string is either a non-owning reference to some existing
-        /// string, or an owning reference to our copy:
-        ///
-        /// class CopyOnWriteString
-        /// {
-        /// Variant<const char*, UniquePtr<char[]>> string;
-        ///
-        /// ...
-        /// };
-        ///
-        /// Because Variant must be aligned suitable to hold any value stored within it,
-        /// and because |alignas| requirements don't affect platform ABI with respect to
-        /// how parameters are laid out in memory, Variant can't be used as the type of a
-        /// function parameter.  Pass Variant to functions by pointer or reference
-        /// instead.
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct Variant {
-            pub rawData: *mut ::std::os::raw::c_uchar,
-            pub tag: root::mozilla::Variant_Tag,
-        }
-        pub type Variant_Tag = root::mozilla::detail::VariantTag;
-        pub type Variant_Impl = u8;
-        /// This class is designed to cause crashes when various kinds of memory
-        /// corruption are observed. For instance, let's say we have a class C where we
-        /// suspect out-of-bounds writes to some members.  We can insert a member of type
-        /// Poison near the members we suspect are being corrupted by out-of-bounds
-        /// writes.  Or perhaps we have a class K we suspect is subject to use-after-free
-        /// violations, in which case it doesn't particularly matter where in the class
-        /// we add the member of type Poison.
-        ///
-        /// In either case, we then insert calls to Check() throughout the code.  Doing
-        /// so enables us to narrow down the location where the corruption is occurring.
-        /// A pleasant side-effect of these additional Check() calls is that crash
-        /// signatures may become more regular, as crashes will ideally occur
-        /// consolidated at the point of a Check(), rather than scattered about at
-        /// various uses of the corrupted memory.
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct CorruptionCanary {
-            pub mValue: usize,
-        }
-        pub const CorruptionCanary_kCanarySet: usize = 252382987;
-        #[test]
-        fn bindgen_test_layout_CorruptionCanary() {
-            assert_eq!(
-                ::std::mem::size_of::<CorruptionCanary>(),
-                8usize,
-                concat!("Size of: ", stringify!(CorruptionCanary))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<CorruptionCanary>(),
-                8usize,
-                concat!("Alignment of ", stringify!(CorruptionCanary))
-            );
-            assert_eq!(
-                unsafe { &(*(::std::ptr::null::<CorruptionCanary>())).mValue as *const _ as usize },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(CorruptionCanary),
-                    "::",
-                    stringify!(mValue)
-                )
-            );
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct Maybe {
-            pub _address: u8,
-        }
-        pub type Maybe_ValueType<T> = T;
-        pub mod gfx {
-            #[allow(unused_imports)]
-            use self::super::super::super::root;
-            pub type Float = f32;
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct IntPointTyped {
-                pub _address: u8,
-            }
-            pub type IntPointTyped_ToInt = u32;
-            pub type IntPointTyped_Coord = u8;
-            pub type IntPointTyped_Super = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct SizeTyped {
-                pub _address: u8,
-            }
-            pub type SizeTyped_Super = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct FontVariation {
-                pub mTag: u32,
-                pub mValue: f32,
-            }
-            #[test]
-            fn bindgen_test_layout_FontVariation() {
-                assert_eq!(
-                    ::std::mem::size_of::<FontVariation>(),
-                    8usize,
-                    concat!("Size of: ", stringify!(FontVariation))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<FontVariation>(),
-                    4usize,
-                    concat!("Alignment of ", stringify!(FontVariation))
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<FontVariation>())).mTag as *const _ as usize },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FontVariation),
-                        "::",
-                        stringify!(mTag)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FontVariation>())).mValue as *const _ as usize
-                    },
-                    4usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FontVariation),
-                        "::",
-                        stringify!(mValue)
-                    )
-                );
-            }
-            impl Clone for FontVariation {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct ScaleFactor {
-                pub _address: u8,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct UserData {
-                pub _bindgen_opaque_blob: [u64; 2usize],
-            }
-            pub type UserData_destroyFunc = u64;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct UserData_Entry {
-                pub _bindgen_opaque_blob: [u64; 3usize],
-            }
-            #[test]
-            fn bindgen_test_layout_UserData_Entry() {
-                assert_eq!(
-                    ::std::mem::size_of::<UserData_Entry>(),
-                    24usize,
-                    concat!("Size of: ", stringify!(UserData_Entry))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<UserData_Entry>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(UserData_Entry))
-                );
-            }
-            impl Clone for UserData_Entry {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[test]
-            fn bindgen_test_layout_UserData() {
-                assert_eq!(
-                    ::std::mem::size_of::<UserData>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(UserData))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<UserData>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(UserData))
-                );
-            }
-            impl Clone for UserData {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            pub struct SourceSurface__bindgen_vtable(::std::os::raw::c_void);
-            /// This is the base class for source surfaces. These objects are surfaces
-            /// which may be used as a source in a SurfacePattern or a DrawSurface call.
-            /// They cannot be drawn to directly.
-            ///
-            /// Although SourceSurface has thread-safe refcount, some SourceSurface cannot
-            /// be used on random threads at the same time. Only DataSourceSurface can be
-            /// used on random threads now. This will be fixed in the future. Eventually
-            /// all SourceSurface should be thread-safe.
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct SourceSurface {
-                pub vtable_: *const SourceSurface__bindgen_vtable,
-                pub _base: u64,
-                pub mUserData: root::mozilla::gfx::UserData,
-            }
-            #[test]
-            fn bindgen_test_layout_SourceSurface() {
-                assert_eq!(
-                    ::std::mem::size_of::<SourceSurface>(),
-                    32usize,
-                    concat!("Size of: ", stringify!(SourceSurface))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<SourceSurface>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(SourceSurface))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<SourceSurface>())).mUserData as *const _ as usize
-                    },
-                    16usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(SourceSurface),
-                        "::",
-                        stringify!(mUserData)
-                    )
-                );
-            }
-        }
-        pub mod layers {
-            #[allow(unused_imports)]
-            use self::super::super::super::root;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct LayerManager {
-                _unused: [u8; 0],
-            }
-            impl Clone for LayerManager {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-        }
-        pub mod dom {
-            #[allow(unused_imports)]
-            use self::super::super::super::root;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct AllOwningUnionBase {
-                pub _address: u8,
-            }
-            #[test]
-            fn bindgen_test_layout_AllOwningUnionBase() {
-                assert_eq!(
-                    ::std::mem::size_of::<AllOwningUnionBase>(),
-                    1usize,
-                    concat!("Size of: ", stringify!(AllOwningUnionBase))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<AllOwningUnionBase>(),
-                    1usize,
-                    concat!("Alignment of ", stringify!(AllOwningUnionBase))
-                );
-            }
-            impl Clone for AllOwningUnionBase {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct GlobalObject {
-                pub mGlobalJSObject: [u64; 3usize],
-                pub mCx: *mut root::JSContext,
-                pub mGlobalObject: *mut root::nsISupports,
-            }
-            #[test]
-            fn bindgen_test_layout_GlobalObject() {
-                assert_eq!(
-                    ::std::mem::size_of::<GlobalObject>(),
-                    40usize,
-                    concat!("Size of: ", stringify!(GlobalObject))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<GlobalObject>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(GlobalObject))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<GlobalObject>())).mGlobalJSObject as *const _
-                            as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(GlobalObject),
-                        "::",
-                        stringify!(mGlobalJSObject)
-                    )
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<GlobalObject>())).mCx as *const _ as usize },
-                    24usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(GlobalObject),
-                        "::",
-                        stringify!(mCx)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<GlobalObject>())).mGlobalObject as *const _ as usize
-                    },
-                    32usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(GlobalObject),
-                        "::",
-                        stringify!(mGlobalObject)
-                    )
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Sequence {
-                pub _address: u8,
-            }
-            #[repr(u32)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum CallerType {
-                System = 0,
-                NonSystem = 1,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Nullable {
-                pub _address: u8,
-            }
-            pub mod prototypes {
-                #[allow(unused_imports)]
-                use self::super::super::super::super::root;
-            }
-            pub mod constructors {
-                #[allow(unused_imports)]
-                use self::super::super::super::super::root;
-            }
-            pub mod namedpropertiesobjects {
-                #[allow(unused_imports)]
-                use self::super::super::super::super::root;
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct Promise {
-                _unused: [u8; 0],
-            }
-            impl Clone for Promise {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ClientSource {
-                _unused: [u8; 0],
-            }
-            impl Clone for ClientSource {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct CSSImportRule {
-                _unused: [u8; 0],
-            }
-            impl Clone for CSSImportRule {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            /// Struct that stores info on an attribute. The name and value must either both
-            /// be null or both be non-null.
-            ///
-            /// Note that, just as the pointers returned by GetAttrNameAt, the pointers that
-            /// this struct hold are only valid until the element or its attributes are
-            /// mutated (directly or via script).
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct BorrowedAttrInfo {
-                pub mName: *const root::nsAttrName,
-                pub mValue: *const root::nsAttrValue,
-            }
-            #[test]
-            fn bindgen_test_layout_BorrowedAttrInfo() {
-                assert_eq!(
-                    ::std::mem::size_of::<BorrowedAttrInfo>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(BorrowedAttrInfo))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<BorrowedAttrInfo>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(BorrowedAttrInfo))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<BorrowedAttrInfo>())).mName as *const _ as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(BorrowedAttrInfo),
-                        "::",
-                        stringify!(mName)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<BorrowedAttrInfo>())).mValue as *const _ as usize
-                    },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(BorrowedAttrInfo),
-                        "::",
-                        stringify!(mValue)
-                    )
-                );
-            }
-            impl Clone for BorrowedAttrInfo {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            pub struct NodeInfo {
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                pub mDocument: *mut root::nsIDocument,
-                pub mInner: root::mozilla::dom::NodeInfo_NodeInfoInner,
-                pub mOwnerManager: root::RefPtr<root::nsNodeInfoManager>,
-                pub mQualifiedName: ::nsstring::nsStringRepr,
-                pub mNodeName: ::nsstring::nsStringRepr,
-                pub mLocalName: ::nsstring::nsStringRepr,
-            }
-            pub type NodeInfo_HasThreadSafeRefCnt = root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct NodeInfo_cycleCollection {
-                pub _base: root::nsCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_NodeInfo_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<NodeInfo_cycleCollection>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(NodeInfo_cycleCollection))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<NodeInfo_cycleCollection>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(NodeInfo_cycleCollection))
-                );
-            }
-            impl Clone for NodeInfo_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct NodeInfo_NodeInfoInner {
-                pub mName: *const root::nsAtom,
-                pub mPrefix: *mut root::nsAtom,
-                pub mNamespaceID: i32,
-                pub mNodeType: u16,
-                pub mNameString: *const root::nsAString,
-                pub mExtraName: *mut root::nsAtom,
-                pub mHash: [u32; 2usize],
-            }
-            #[test]
-            fn bindgen_test_layout_NodeInfo_NodeInfoInner() {
-                assert_eq!(
-                    ::std::mem::size_of::<NodeInfo_NodeInfoInner>(),
-                    48usize,
-                    concat!("Size of: ", stringify!(NodeInfo_NodeInfoInner))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<NodeInfo_NodeInfoInner>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(NodeInfo_NodeInfoInner))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mName as *const _
-                            as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo_NodeInfoInner),
-                        "::",
-                        stringify!(mName)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mPrefix as *const _
-                            as usize
-                    },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo_NodeInfoInner),
-                        "::",
-                        stringify!(mPrefix)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mNamespaceID as *const _
-                            as usize
-                    },
-                    16usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo_NodeInfoInner),
-                        "::",
-                        stringify!(mNamespaceID)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mNodeType as *const _
-                            as usize
-                    },
-                    20usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo_NodeInfoInner),
-                        "::",
-                        stringify!(mNodeType)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mNameString as *const _
-                            as usize
-                    },
-                    24usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo_NodeInfoInner),
-                        "::",
-                        stringify!(mNameString)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mExtraName as *const _
-                            as usize
-                    },
-                    32usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo_NodeInfoInner),
-                        "::",
-                        stringify!(mExtraName)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo_NodeInfoInner>())).mHash as *const _
-                            as usize
-                    },
-                    40usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo_NodeInfoInner),
-                        "::",
-                        stringify!(mHash)
-                    )
-                );
-            }
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom8NodeInfo21_cycleCollectorGlobalE"]
-                pub static mut NodeInfo__cycleCollectorGlobal:
-                    root::mozilla::dom::NodeInfo_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_NodeInfo() {
-                assert_eq!(
-                    ::std::mem::size_of::<NodeInfo>(),
-                    120usize,
-                    concat!("Size of: ", stringify!(NodeInfo))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<NodeInfo>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(NodeInfo))
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mRefCnt as *const _ as usize },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo),
-                        "::",
-                        stringify!(mRefCnt)
-                    )
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mDocument as *const _ as usize },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo),
-                        "::",
-                        stringify!(mDocument)
-                    )
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mInner as *const _ as usize },
-                    16usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo),
-                        "::",
-                        stringify!(mInner)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo>())).mOwnerManager as *const _ as usize
-                    },
-                    64usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo),
-                        "::",
-                        stringify!(mOwnerManager)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<NodeInfo>())).mQualifiedName as *const _ as usize
-                    },
-                    72usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo),
-                        "::",
-                        stringify!(mQualifiedName)
-                    )
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mNodeName as *const _ as usize },
-                    88usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo),
-                        "::",
-                        stringify!(mNodeName)
-                    )
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<NodeInfo>())).mLocalName as *const _ as usize },
-                    104usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(NodeInfo),
-                        "::",
-                        stringify!(mLocalName)
-                    )
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct EventTarget {
-                pub _base: root::nsIDOMEventTarget,
-                pub _base_1: root::nsWrapperCache,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct EventTarget_COMTypeInfo {
-                pub _address: u8,
-            }
-            #[test]
-            fn bindgen_test_layout_EventTarget() {
-                assert_eq!(
-                    ::std::mem::size_of::<EventTarget>(),
-                    32usize,
-                    concat!("Size of: ", stringify!(EventTarget))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<EventTarget>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(EventTarget))
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct BoxQuadOptions {
-                _unused: [u8; 0],
-            }
-            impl Clone for BoxQuadOptions {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ConvertCoordinateOptions {
-                _unused: [u8; 0],
-            }
-            impl Clone for ConvertCoordinateOptions {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DocGroup {
-                _unused: [u8; 0],
-            }
-            impl Clone for DocGroup {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DOMPoint {
-                _unused: [u8; 0],
-            }
-            impl Clone for DOMPoint {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DOMQuad {
-                _unused: [u8; 0],
-            }
-            impl Clone for DOMQuad {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct TextOrElementOrDocument {
-                _unused: [u8; 0],
-            }
-            impl Clone for TextOrElementOrDocument {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DOMPointInit {
-                _unused: [u8; 0],
-            }
-            impl Clone for DOMPointInit {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            pub const VisibilityState_Hidden: root::mozilla::dom::VisibilityState = 0;
-            pub const VisibilityState_Visible: root::mozilla::dom::VisibilityState = 1;
-            pub const VisibilityState_EndGuard_: root::mozilla::dom::VisibilityState = 2;
-            pub type VisibilityState = u8;
-            pub const FlashClassification_Unclassified: root::mozilla::dom::FlashClassification = 0;
-            pub const FlashClassification_Unknown: root::mozilla::dom::FlashClassification = 1;
-            pub const FlashClassification_Allowed: root::mozilla::dom::FlashClassification = 2;
-            pub const FlashClassification_Denied: root::mozilla::dom::FlashClassification = 3;
-            pub const FlashClassification_EndGuard_: root::mozilla::dom::FlashClassification = 4;
-            pub type FlashClassification = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct IPCClientInfo {
-                _unused: [u8; 0],
-            }
-            impl Clone for IPCClientInfo {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct TabGroup {
-                _unused: [u8; 0],
-            }
-            impl Clone for TabGroup {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            pub struct DispatcherTrait__bindgen_vtable(::std::os::raw::c_void);
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DispatcherTrait {
-                pub vtable_: *const DispatcherTrait__bindgen_vtable,
-            }
-            #[test]
-            fn bindgen_test_layout_DispatcherTrait() {
-                assert_eq!(
-                    ::std::mem::size_of::<DispatcherTrait>(),
-                    8usize,
-                    concat!("Size of: ", stringify!(DispatcherTrait))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DispatcherTrait>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(DispatcherTrait))
-                );
-            }
-            impl Clone for DispatcherTrait {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct IPCServiceWorkerDescriptor {
-                _unused: [u8; 0],
-            }
-            impl Clone for IPCServiceWorkerDescriptor {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct AudioContext {
-                _unused: [u8; 0],
-            }
-            impl Clone for AudioContext {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct Navigator {
-                _unused: [u8; 0],
-            }
-            impl Clone for Navigator {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct Performance {
-                _unused: [u8; 0],
-            }
-            impl Clone for Performance {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct TimeoutManager {
-                _unused: [u8; 0],
-            }
-            impl Clone for TimeoutManager {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            pub const LargeAllocStatus_NONE: root::mozilla::dom::LargeAllocStatus = 0;
-            pub const LargeAllocStatus_SUCCESS: root::mozilla::dom::LargeAllocStatus = 1;
-            pub const LargeAllocStatus_NON_GET: root::mozilla::dom::LargeAllocStatus = 2;
-            pub const LargeAllocStatus_NON_E10S: root::mozilla::dom::LargeAllocStatus = 3;
-            pub const LargeAllocStatus_NOT_ONLY_TOPLEVEL_IN_TABGROUP : root :: mozilla :: dom :: LargeAllocStatus = 4 ;
-            pub const LargeAllocStatus_NON_WIN32: root::mozilla::dom::LargeAllocStatus = 5;
-            pub type LargeAllocStatus = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct StyleSheetList {
-                _unused: [u8; 0],
-            }
-            impl Clone for StyleSheetList {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            /// A class meant to be shared by ShadowRoot and Document, that holds a list of
-            /// stylesheets.
-            ///
-            /// TODO(emilio, bug 1418159): In the future this should hold most of the
-            /// relevant style state, this should allow us to fix bug 548397.
-            #[repr(C)]
-            pub struct DocumentOrShadowRoot {
-                pub mStyleSheets: root::nsTArray<root::RefPtr<root::mozilla::StyleSheet>>,
-                pub mDOMStyleSheets: root::RefPtr<root::mozilla::dom::StyleSheetList>,
-                pub mIdentifierMap: [u64; 4usize],
-                pub mAsNode: *mut root::nsINode,
-                pub mKind: root::mozilla::dom::DocumentOrShadowRoot_Kind,
-            }
-            pub const DocumentOrShadowRoot_Kind_Document : root :: mozilla :: dom :: DocumentOrShadowRoot_Kind = 0 ;
-            pub const DocumentOrShadowRoot_Kind_ShadowRoot : root :: mozilla :: dom :: DocumentOrShadowRoot_Kind = 1 ;
-            pub type DocumentOrShadowRoot_Kind = i32;
-            pub const DocumentOrShadowRoot_ElementsFromPointFlags_IGNORE_ROOT_SCROLL_FRAME : root :: mozilla :: dom :: DocumentOrShadowRoot_ElementsFromPointFlags = 1 ;
-            pub const DocumentOrShadowRoot_ElementsFromPointFlags_FLUSH_LAYOUT : root :: mozilla :: dom :: DocumentOrShadowRoot_ElementsFromPointFlags = 2 ;
-            pub const DocumentOrShadowRoot_ElementsFromPointFlags_IS_ELEMENT_FROM_POINT : root :: mozilla :: dom :: DocumentOrShadowRoot_ElementsFromPointFlags = 4 ;
-            pub type DocumentOrShadowRoot_ElementsFromPointFlags = u32;
-            #[test]
-            fn bindgen_test_layout_DocumentOrShadowRoot() {
-                assert_eq!(
-                    ::std::mem::size_of::<DocumentOrShadowRoot>(),
-                    64usize,
-                    concat!("Size of: ", stringify!(DocumentOrShadowRoot))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DocumentOrShadowRoot>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(DocumentOrShadowRoot))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mStyleSheets as *const _
-                            as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(DocumentOrShadowRoot),
-                        "::",
-                        stringify!(mStyleSheets)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mDOMStyleSheets as *const _
-                            as usize
-                    },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(DocumentOrShadowRoot),
-                        "::",
-                        stringify!(mDOMStyleSheets)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mIdentifierMap as *const _
-                            as usize
-                    },
-                    16usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(DocumentOrShadowRoot),
-                        "::",
-                        stringify!(mIdentifierMap)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mAsNode as *const _
-                            as usize
-                    },
-                    48usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(DocumentOrShadowRoot),
-                        "::",
-                        stringify!(mAsNode)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<DocumentOrShadowRoot>())).mKind as *const _ as usize
-                    },
-                    56usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(DocumentOrShadowRoot),
-                        "::",
-                        stringify!(mKind)
-                    )
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct AboutCapabilities {
-                _unused: [u8; 0],
-            }
-            impl Clone for AboutCapabilities {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct AnonymousContent {
-                _unused: [u8; 0],
-            }
-            impl Clone for AnonymousContent {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct BoxObject {
-                _unused: [u8; 0],
-            }
-            impl Clone for BoxObject {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DocumentTimeline {
-                _unused: [u8; 0],
-            }
-            impl Clone for DocumentTimeline {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DOMImplementation {
-                _unused: [u8; 0],
-            }
-            impl Clone for DOMImplementation {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct FontFaceSet {
-                _unused: [u8; 0],
-            }
-            impl Clone for FontFaceSet {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct FullscreenRequest {
-                _unused: [u8; 0],
-            }
-            impl Clone for FullscreenRequest {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ImageTracker {
-                _unused: [u8; 0],
-            }
-            impl Clone for ImageTracker {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct HTMLImageElement {
-                _unused: [u8; 0],
-            }
-            impl Clone for HTMLImageElement {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct Link {
-                _unused: [u8; 0],
-            }
-            impl Clone for Link {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct MediaQueryList {
-                _unused: [u8; 0],
-            }
-            impl Clone for MediaQueryList {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            pub type OrientationType = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ScriptLoader {
-                _unused: [u8; 0],
-            }
-            impl Clone for ScriptLoader {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct XPathEvaluator {
-                _unused: [u8; 0],
-            }
-            impl Clone for XPathEvaluator {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct FrameRequestCallback {
-                pub _bindgen_opaque_blob: [u64; 6usize],
-            }
-            #[test]
-            fn bindgen_test_layout_FrameRequestCallback() {
-                assert_eq!(
-                    ::std::mem::size_of::<FrameRequestCallback>(),
-                    48usize,
-                    concat!("Size of: ", stringify!(FrameRequestCallback))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<FrameRequestCallback>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(FrameRequestCallback))
-                );
-            }
-            impl Clone for FrameRequestCallback {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            pub struct URLParams {
-                pub mParams: root::nsTArray<root::mozilla::dom::URLParams_Param>,
-            }
-            #[repr(C)]
-            pub struct URLParams_ForEachIterator__bindgen_vtable(::std::os::raw::c_void);
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct URLParams_ForEachIterator {
-                pub vtable_: *const URLParams_ForEachIterator__bindgen_vtable,
-            }
-            #[test]
-            fn bindgen_test_layout_URLParams_ForEachIterator() {
-                assert_eq!(
-                    ::std::mem::size_of::<URLParams_ForEachIterator>(),
-                    8usize,
-                    concat!("Size of: ", stringify!(URLParams_ForEachIterator))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<URLParams_ForEachIterator>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(URLParams_ForEachIterator))
-                );
-            }
-            impl Clone for URLParams_ForEachIterator {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            pub struct URLParams_Param {
-                pub mKey: ::nsstring::nsStringRepr,
-                pub mValue: ::nsstring::nsStringRepr,
-            }
-            #[test]
-            fn bindgen_test_layout_URLParams_Param() {
-                assert_eq!(
-                    ::std::mem::size_of::<URLParams_Param>(),
-                    32usize,
-                    concat!("Size of: ", stringify!(URLParams_Param))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<URLParams_Param>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(URLParams_Param))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<URLParams_Param>())).mKey as *const _ as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(URLParams_Param),
-                        "::",
-                        stringify!(mKey)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<URLParams_Param>())).mValue as *const _ as usize
-                    },
-                    16usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(URLParams_Param),
-                        "::",
-                        stringify!(mValue)
-                    )
-                );
-            }
-            #[test]
-            fn bindgen_test_layout_URLParams() {
-                assert_eq!(
-                    ::std::mem::size_of::<URLParams>(),
-                    8usize,
-                    concat!("Size of: ", stringify!(URLParams))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<URLParams>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(URLParams))
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<URLParams>())).mParams as *const _ as usize },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(URLParams),
-                        "::",
-                        stringify!(mParams)
-                    )
-                );
-            }
-            #[repr(C)]
-            pub struct SRIMetadata {
-                pub mHashes: root::nsTArray<root::nsCString>,
-                pub mIntegrityString: ::nsstring::nsStringRepr,
-                pub mAlgorithm: root::nsCString,
-                pub mAlgorithmType: i8,
-                pub mEmpty: bool,
-            }
-            pub const SRIMetadata_MAX_ALTERNATE_HASHES: u32 = 256;
-            pub const SRIMetadata_UNKNOWN_ALGORITHM: i8 = -1;
-            #[test]
-            fn bindgen_test_layout_SRIMetadata() {
-                assert_eq!(
-                    ::std::mem::size_of::<SRIMetadata>(),
-                    48usize,
-                    concat!("Size of: ", stringify!(SRIMetadata))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<SRIMetadata>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(SRIMetadata))
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<SRIMetadata>())).mHashes as *const _ as usize },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(SRIMetadata),
-                        "::",
-                        stringify!(mHashes)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<SRIMetadata>())).mIntegrityString as *const _
-                            as usize
-                    },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(SRIMetadata),
-                        "::",
-                        stringify!(mIntegrityString)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<SRIMetadata>())).mAlgorithm as *const _ as usize
-                    },
-                    24usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(SRIMetadata),
-                        "::",
-                        stringify!(mAlgorithm)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<SRIMetadata>())).mAlgorithmType as *const _ as usize
-                    },
-                    40usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(SRIMetadata),
-                        "::",
-                        stringify!(mAlgorithmType)
-                    )
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<SRIMetadata>())).mEmpty as *const _ as usize },
-                    41usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(SRIMetadata),
-                        "::",
-                        stringify!(mEmpty)
-                    )
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct OwningNodeOrString {
-                pub mType: root::mozilla::dom::OwningNodeOrString_Type,
-                pub mValue: root::mozilla::dom::OwningNodeOrString_Value,
-            }
-            pub const OwningNodeOrString_Type_eUninitialized : root :: mozilla :: dom :: OwningNodeOrString_Type = 0 ;
-            pub const OwningNodeOrString_Type_eNode: root::mozilla::dom::OwningNodeOrString_Type =
-                1;
-            pub const OwningNodeOrString_Type_eString: root::mozilla::dom::OwningNodeOrString_Type =
-                2;
-            pub type OwningNodeOrString_Type = u32;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct OwningNodeOrString_Value {
-                pub _bindgen_opaque_blob: [u64; 2usize],
-            }
-            #[test]
-            fn bindgen_test_layout_OwningNodeOrString_Value() {
-                assert_eq!(
-                    ::std::mem::size_of::<OwningNodeOrString_Value>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(OwningNodeOrString_Value))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<OwningNodeOrString_Value>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(OwningNodeOrString_Value))
-                );
-            }
-            impl Clone for OwningNodeOrString_Value {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[test]
-            fn bindgen_test_layout_OwningNodeOrString() {
-                assert_eq!(
-                    ::std::mem::size_of::<OwningNodeOrString>(),
-                    24usize,
-                    concat!("Size of: ", stringify!(OwningNodeOrString))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<OwningNodeOrString>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(OwningNodeOrString))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<OwningNodeOrString>())).mType as *const _ as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(OwningNodeOrString),
-                        "::",
-                        stringify!(mType)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<OwningNodeOrString>())).mValue as *const _ as usize
-                    },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(OwningNodeOrString),
-                        "::",
-                        stringify!(mValue)
-                    )
-                );
-            }
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum FillMode {
-                None = 0,
-                Forwards = 1,
-                Backwards = 2,
-                Both = 3,
-                Auto = 4,
-                EndGuard_ = 5,
-            }
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum PlaybackDirection {
-                Normal = 0,
-                Reverse = 1,
-                Alternate = 2,
-                Alternate_reverse = 3,
-                EndGuard_ = 4,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct XBLChildrenElement {
-                _unused: [u8; 0],
-            }
-            impl Clone for XBLChildrenElement {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct CustomElementData {
-                _unused: [u8; 0],
-            }
-            impl Clone for CustomElementData {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            pub struct FragmentOrElement {
-                pub _base: root::nsIContent,
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                /// Array containing all attributes and children for this element
-                pub mAttrsAndChildren: root::nsAttrAndChildArray,
-            }
-            pub type FragmentOrElement_HasThreadSafeRefCnt = root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct FragmentOrElement_cycleCollection {
-                pub _base: root::nsXPCOMCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_FragmentOrElement_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<FragmentOrElement_cycleCollection>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(FragmentOrElement_cycleCollection))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<FragmentOrElement_cycleCollection>(),
-                    8usize,
-                    concat!(
-                        "Alignment of ",
-                        stringify!(FragmentOrElement_cycleCollection)
-                    )
-                );
-            }
-            impl Clone for FragmentOrElement_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            /// There are a set of DOM- and scripting-specific instance variables
-            /// that may only be instantiated when a content object is accessed
-            /// through the DOM. Rather than burn actual slots in the content
-            /// objects for each of these instance variables, we put them off
-            /// in a side structure that's only allocated when the content is
-            /// accessed through the DOM.
-            #[repr(C)]
-            pub struct FragmentOrElement_nsExtendedDOMSlots {
-                pub _base: root::nsIContent_nsExtendedContentSlots,
-                /// SMIL Overridde style rules (for SMIL animation of CSS properties)
-                /// @see Element::GetSMILOverrideStyle
-                pub mSMILOverrideStyle: root::RefPtr<root::nsDOMCSSAttributeDeclaration>,
-                /// Holds any SMIL override style declaration for this element.
-                pub mSMILOverrideStyleDeclaration: root::RefPtr<root::mozilla::DeclarationBlock>,
-                /// The controllers of the XUL Element.
-                pub mControllers: root::nsCOMPtr,
-                /// An object implementing the .labels property for this element.
-                pub mLabelsList: root::RefPtr<root::nsLabelsNodeList>,
-                /// ShadowRoot bound to the element.
-                pub mShadowRoot: root::RefPtr<root::mozilla::dom::ShadowRoot>,
-                /// XBL binding installed on the element.
-                pub mXBLBinding: root::RefPtr<root::nsXBLBinding>,
-                /// Web components custom element data.
-                pub mCustomElementData: root::RefPtr<root::mozilla::dom::CustomElementData>,
-                /// For XUL to hold either frameloader or opener.
-                pub mFrameLoaderOrOpener: root::nsCOMPtr,
-            }
-            #[test]
-            fn bindgen_test_layout_FragmentOrElement_nsExtendedDOMSlots() {
-                assert_eq!(
-                    ::std::mem::size_of::<FragmentOrElement_nsExtendedDOMSlots>(),
-                    104usize,
-                    concat!(
-                        "Size of: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots)
-                    )
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<FragmentOrElement_nsExtendedDOMSlots>(),
-                    8usize,
-                    concat!(
-                        "Alignment of ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
-                            .mSMILOverrideStyle as *const _ as usize
-                    },
-                    40usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
-                        "::",
-                        stringify!(mSMILOverrideStyle)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
-                            .mSMILOverrideStyleDeclaration as *const _
-                            as usize
-                    },
-                    48usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
-                        "::",
-                        stringify!(mSMILOverrideStyleDeclaration)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
-                            .mControllers as *const _ as usize
-                    },
-                    56usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
-                        "::",
-                        stringify!(mControllers)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>())).mLabelsList
-                            as *const _ as usize
-                    },
-                    64usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
-                        "::",
-                        stringify!(mLabelsList)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>())).mShadowRoot
-                            as *const _ as usize
-                    },
-                    72usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
-                        "::",
-                        stringify!(mShadowRoot)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>())).mXBLBinding
-                            as *const _ as usize
-                    },
-                    80usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
-                        "::",
-                        stringify!(mXBLBinding)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
-                            .mCustomElementData as *const _ as usize
-                    },
-                    88usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
-                        "::",
-                        stringify!(mCustomElementData)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsExtendedDOMSlots>()))
-                            .mFrameLoaderOrOpener as *const _ as usize
-                    },
-                    96usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsExtendedDOMSlots),
-                        "::",
-                        stringify!(mFrameLoaderOrOpener)
-                    )
-                );
-            }
-            #[repr(C)]
-            pub struct FragmentOrElement_nsDOMSlots {
-                pub _base: root::nsIContent_nsContentSlots,
-                /// The .style attribute (an interface that forwards to the actual
-                /// style rules)
-                /// @see nsGenericHTMLElement::GetStyle
-                pub mStyle: root::nsCOMPtr,
-                /// The .dataset attribute.
-                /// @see nsGenericHTMLElement::GetDataset
-                pub mDataset: *mut root::nsDOMStringMap,
-                /// @see Element::Attributes
-                pub mAttributeMap: root::RefPtr<root::nsDOMAttributeMap>,
-                /// An object implementing the .children property for this element.
-                pub mChildrenList: root::RefPtr<root::nsContentList>,
-                /// An object implementing the .classList property for this element.
-                pub mClassList: root::RefPtr<root::nsDOMTokenList>,
-            }
-            #[test]
-            fn bindgen_test_layout_FragmentOrElement_nsDOMSlots() {
-                assert_eq!(
-                    ::std::mem::size_of::<FragmentOrElement_nsDOMSlots>(),
-                    120usize,
-                    concat!("Size of: ", stringify!(FragmentOrElement_nsDOMSlots))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<FragmentOrElement_nsDOMSlots>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(FragmentOrElement_nsDOMSlots))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mStyle as *const _
-                            as usize
-                    },
-                    80usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsDOMSlots),
-                        "::",
-                        stringify!(mStyle)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mDataset
-                            as *const _ as usize
-                    },
-                    88usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsDOMSlots),
-                        "::",
-                        stringify!(mDataset)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mAttributeMap
-                            as *const _ as usize
-                    },
-                    96usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsDOMSlots),
-                        "::",
-                        stringify!(mAttributeMap)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mChildrenList
-                            as *const _ as usize
-                    },
-                    104usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsDOMSlots),
-                        "::",
-                        stringify!(mChildrenList)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement_nsDOMSlots>())).mClassList
-                            as *const _ as usize
-                    },
-                    112usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement_nsDOMSlots),
-                        "::",
-                        stringify!(mClassList)
-                    )
-                );
-            }
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom17FragmentOrElement21_cycleCollectorGlobalE"]
-                pub static mut FragmentOrElement__cycleCollectorGlobal:
-                    root::mozilla::dom::FragmentOrElement_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_FragmentOrElement() {
-                assert_eq!(
-                    ::std::mem::size_of::<FragmentOrElement>(),
-                    104usize,
-                    concat!("Size of: ", stringify!(FragmentOrElement))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<FragmentOrElement>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(FragmentOrElement))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement>())).mRefCnt as *const _ as usize
-                    },
-                    88usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement),
-                        "::",
-                        stringify!(mRefCnt)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FragmentOrElement>())).mAttrsAndChildren as *const _
-                            as usize
-                    },
-                    96usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FragmentOrElement),
-                        "::",
-                        stringify!(mAttrsAndChildren)
-                    )
-                );
-            }
-            #[repr(C)]
-            pub struct Attr {
-                pub _base: root::nsIAttribute,
-                pub _base_1: root::nsIDOMNode,
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                pub mValue: ::nsstring::nsStringRepr,
-            }
-            pub type Attr_HasThreadSafeRefCnt = root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct Attr_cycleCollection {
-                pub _base: root::nsXPCOMCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_Attr_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<Attr_cycleCollection>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(Attr_cycleCollection))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<Attr_cycleCollection>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(Attr_cycleCollection))
-                );
-            }
-            impl Clone for Attr_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom4Attr21_cycleCollectorGlobalE"]
-                pub static mut Attr__cycleCollectorGlobal: root::mozilla::dom::Attr_cycleCollection;
-            }
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom4Attr12sInitializedE"]
-                pub static mut Attr_sInitialized: bool;
-            }
-            #[test]
-            fn bindgen_test_layout_Attr() {
-                assert_eq!(
-                    ::std::mem::size_of::<Attr>(),
-                    128usize,
-                    concat!("Size of: ", stringify!(Attr))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<Attr>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(Attr))
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct DOMRectReadOnly {
-                pub _base: root::nsISupports,
-                pub _base_1: root::nsWrapperCache,
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                pub mParent: root::nsCOMPtr,
-            }
-            pub type DOMRectReadOnly_HasThreadSafeRefCnt = root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DOMRectReadOnly_cycleCollection {
-                pub _base: root::nsXPCOMCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_DOMRectReadOnly_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<DOMRectReadOnly_cycleCollection>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(DOMRectReadOnly_cycleCollection))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DOMRectReadOnly_cycleCollection>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(DOMRectReadOnly_cycleCollection))
-                );
-            }
-            impl Clone for DOMRectReadOnly_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom15DOMRectReadOnly21_cycleCollectorGlobalE"]
-                pub static mut DOMRectReadOnly__cycleCollectorGlobal:
-                    root::mozilla::dom::DOMRectReadOnly_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_DOMRectReadOnly() {
-                assert_eq!(
-                    ::std::mem::size_of::<DOMRectReadOnly>(),
-                    48usize,
-                    concat!("Size of: ", stringify!(DOMRectReadOnly))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DOMRectReadOnly>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(DOMRectReadOnly))
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct DOMRect {
-                pub _base: root::mozilla::dom::DOMRectReadOnly,
-                pub _base_1: root::nsIDOMClientRect,
-                pub mX: f64,
-                pub mY: f64,
-                pub mWidth: f64,
-                pub mHeight: f64,
-            }
-            #[test]
-            fn bindgen_test_layout_DOMRect() {
-                assert_eq!(
-                    ::std::mem::size_of::<DOMRect>(),
-                    88usize,
-                    concat!("Size of: ", stringify!(DOMRect))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DOMRect>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(DOMRect))
-                );
-            }
-            pub const ShadowRootMode_Open: root::mozilla::dom::ShadowRootMode = 0;
-            pub const ShadowRootMode_Closed: root::mozilla::dom::ShadowRootMode = 1;
-            pub const ShadowRootMode_EndGuard_: root::mozilla::dom::ShadowRootMode = 2;
-            pub type ShadowRootMode = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct IntersectionCallback {
-                pub _bindgen_opaque_blob: [u64; 6usize],
-            }
-            #[test]
-            fn bindgen_test_layout_IntersectionCallback() {
-                assert_eq!(
-                    ::std::mem::size_of::<IntersectionCallback>(),
-                    48usize,
-                    concat!("Size of: ", stringify!(IntersectionCallback))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<IntersectionCallback>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(IntersectionCallback))
-                );
-            }
-            impl Clone for IntersectionCallback {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            pub struct DOMIntersectionObserverEntry {
-                pub _base: root::nsISupports,
-                pub _base_1: root::nsWrapperCache,
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                pub mOwner: root::nsCOMPtr,
-                pub mTime: root::DOMHighResTimeStamp,
-                pub mRootBounds: root::RefPtr<root::mozilla::dom::DOMRect>,
-                pub mBoundingClientRect: root::RefPtr<root::mozilla::dom::DOMRect>,
-                pub mIntersectionRect: root::RefPtr<root::mozilla::dom::DOMRect>,
-                pub mIsIntersecting: bool,
-                pub mTarget: root::RefPtr<root::mozilla::dom::Element>,
-                pub mIntersectionRatio: f64,
-            }
-            pub type DOMIntersectionObserverEntry_HasThreadSafeRefCnt = root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DOMIntersectionObserverEntry_cycleCollection {
-                pub _base: root::nsXPCOMCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_DOMIntersectionObserverEntry_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<DOMIntersectionObserverEntry_cycleCollection>(),
-                    16usize,
-                    concat!(
-                        "Size of: ",
-                        stringify!(DOMIntersectionObserverEntry_cycleCollection)
-                    )
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DOMIntersectionObserverEntry_cycleCollection>(),
-                    8usize,
-                    concat!(
-                        "Alignment of ",
-                        stringify!(DOMIntersectionObserverEntry_cycleCollection)
-                    )
-                );
-            }
-            impl Clone for DOMIntersectionObserverEntry_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            extern "C" {
-                # [ link_name = "\u{1}_ZN7mozilla3dom28DOMIntersectionObserverEntry21_cycleCollectorGlobalE" ] pub static mut DOMIntersectionObserverEntry__cycleCollectorGlobal : root :: mozilla :: dom :: DOMIntersectionObserverEntry_cycleCollection ;
-            }
-            #[test]
-            fn bindgen_test_layout_DOMIntersectionObserverEntry() {
-                assert_eq!(
-                    ::std::mem::size_of::<DOMIntersectionObserverEntry>(),
-                    104usize,
-                    concat!("Size of: ", stringify!(DOMIntersectionObserverEntry))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DOMIntersectionObserverEntry>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(DOMIntersectionObserverEntry))
-                );
-            }
-            #[repr(C)]
-            pub struct DOMIntersectionObserver {
-                pub _base: root::nsISupports,
-                pub _base_1: root::nsWrapperCache,
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                pub mOwner: root::nsCOMPtr,
-                pub mDocument: root::RefPtr<root::nsIDocument>,
-                pub mCallback: root::RefPtr<root::mozilla::dom::IntersectionCallback>,
-                pub mRoot: root::RefPtr<root::mozilla::dom::Element>,
-                pub mRootMargin: root::nsCSSRect,
-                pub mThresholds: root::nsTArray<f64>,
-                pub mObservationTargets: root::nsTArray<*mut root::mozilla::dom::Element>,
-                pub mQueuedEntries:
-                    root::nsTArray<root::RefPtr<root::mozilla::dom::DOMIntersectionObserverEntry>>,
-                pub mConnected: bool,
-            }
-            pub type DOMIntersectionObserver_HasThreadSafeRefCnt = root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DOMIntersectionObserver_cycleCollection {
-                pub _base: root::nsXPCOMCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_DOMIntersectionObserver_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<DOMIntersectionObserver_cycleCollection>(),
-                    16usize,
-                    concat!(
-                        "Size of: ",
-                        stringify!(DOMIntersectionObserver_cycleCollection)
-                    )
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DOMIntersectionObserver_cycleCollection>(),
-                    8usize,
-                    concat!(
-                        "Alignment of ",
-                        stringify!(DOMIntersectionObserver_cycleCollection)
-                    )
-                );
-            }
-            impl Clone for DOMIntersectionObserver_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct DOMIntersectionObserver_COMTypeInfo {
-                pub _address: u8,
-            }
-            extern "C" {
-                # [ link_name = "\u{1}_ZN7mozilla3dom23DOMIntersectionObserver21_cycleCollectorGlobalE" ] pub static mut DOMIntersectionObserver__cycleCollectorGlobal : root :: mozilla :: dom :: DOMIntersectionObserver_cycleCollection ;
-            }
-            #[test]
-            fn bindgen_test_layout_DOMIntersectionObserver() {
-                assert_eq!(
-                    ::std::mem::size_of::<DOMIntersectionObserver>(),
-                    168usize,
-                    concat!("Size of: ", stringify!(DOMIntersectionObserver))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DOMIntersectionObserver>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(DOMIntersectionObserver))
-                );
-            }
-            #[repr(C)]
-            pub struct Element {
-                pub _base: root::mozilla::dom::FragmentOrElement,
-                pub mState: root::mozilla::EventStates,
-                pub mServoData: ::gecko_bindings::structs::ServoCell<*mut ::gecko_bindings::structs::ServoNodeData>,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Element_COMTypeInfo {
-                pub _address: u8,
-            }
-            /// StyleStateLocks is used to specify which event states should be locked,
-            /// and whether they should be locked to on or off.
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct Element_StyleStateLocks {
-                pub mLocks: root::mozilla::EventStates,
-                pub mValues: root::mozilla::EventStates,
-            }
-            #[test]
-            fn bindgen_test_layout_Element_StyleStateLocks() {
-                assert_eq!(
-                    ::std::mem::size_of::<Element_StyleStateLocks>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(Element_StyleStateLocks))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<Element_StyleStateLocks>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(Element_StyleStateLocks))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<Element_StyleStateLocks>())).mLocks as *const _
-                            as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(Element_StyleStateLocks),
-                        "::",
-                        stringify!(mLocks)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<Element_StyleStateLocks>())).mValues as *const _
-                            as usize
-                    },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(Element_StyleStateLocks),
-                        "::",
-                        stringify!(mValues)
-                    )
-                );
-            }
-            impl Clone for Element_StyleStateLocks {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            pub const Element_ATTR_MISSING: root::mozilla::dom::Element__bindgen_ty_1 = -1;
-            pub const Element_ATTR_VALUE_NO_MATCH: root::mozilla::dom::Element__bindgen_ty_1 = -2;
-            pub type Element__bindgen_ty_1 = i32;
-            /// Check whether this Element's given attribute has one of a given list of
-            /// values. If there is a match, we return the index in the list of the first
-            /// matching value. If there was no attribute at all, then we return
-            /// ATTR_MISSING. If there was an attribute but it didn't match, we return
-            /// ATTR_VALUE_NO_MATCH. A non-negative result always indicates a match.
-            ///
-            /// @param aNameSpaceID The namespace ID of the attribute.  Must not
-            /// be kNameSpaceID_Unknown.
-            /// @param aName The name atom of the attribute.  Must not be null.
-            /// @param aValues a nullptr-terminated array of pointers to atom values to test
-            /// against.
-            /// @param aCaseSensitive Whether to do a case-sensitive compare on the values.
-            /// @return ATTR_MISSING, ATTR_VALUE_NO_MATCH or the non-negative index
-            /// indicating the first value of aValues that matched
-            pub type Element_AttrValuesArray = *const *const root::nsStaticAtom;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct Element_MappedAttributeEntry {
-                pub attribute: *mut *mut root::nsStaticAtom,
-            }
-            #[test]
-            fn bindgen_test_layout_Element_MappedAttributeEntry() {
-                assert_eq!(
-                    ::std::mem::size_of::<Element_MappedAttributeEntry>(),
-                    8usize,
-                    concat!("Size of: ", stringify!(Element_MappedAttributeEntry))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<Element_MappedAttributeEntry>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(Element_MappedAttributeEntry))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<Element_MappedAttributeEntry>())).attribute
-                            as *const _ as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(Element_MappedAttributeEntry),
-                        "::",
-                        stringify!(attribute)
-                    )
-                );
-            }
-            impl Clone for Element_MappedAttributeEntry {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            /// Define a general matching function that can be passed to
-            /// GetElementsByMatching(). Each Element being considered is
-            /// passed in.
-            pub type Element_nsElementMatchFunc = ::std::option::Option<
-                unsafe extern "C" fn(aElement: *mut root::mozilla::dom::Element) -> bool,
-            >;
-            pub const Element_kAllServoDescendantBits: u32 = 12648448;
-            pub const Element_kFireMutationEvent: bool = true;
-            pub const Element_kDontFireMutationEvent: bool = false;
-            pub const Element_kNotifyDocumentObservers: bool = true;
-            pub const Element_kDontNotifyDocumentObservers: bool = false;
-            pub const Element_kCallAfterSetAttr: bool = true;
-            pub const Element_kDontCallAfterSetAttr: bool = false;
-            #[test]
-            fn bindgen_test_layout_Element() {
-                assert_eq!(
-                    ::std::mem::size_of::<Element>(),
-                    120usize,
-                    concat!("Size of: ", stringify!(Element))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<Element>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(Element))
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<Element>())).mState as *const _ as usize },
-                    104usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(Element),
-                        "::",
-                        stringify!(mState)
-                    )
-                );
-                assert_eq!(
-                    unsafe { &(*(::std::ptr::null::<Element>())).mServoData as *const _ as usize },
-                    112usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(Element),
-                        "::",
-                        stringify!(mServoData)
-                    )
-                );
-            }
-            #[repr(C)]
-            pub struct HTMLSlotElement {
-                pub _base: root::nsGenericHTMLElement,
-                pub mAssignedNodes: root::nsTArray<root::RefPtr<root::nsINode>>,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct HTMLSlotElement_cycleCollection {
-                pub _base: root::mozilla::dom::FragmentOrElement_cycleCollection,
-            }
-            #[test]
-            fn bindgen_test_layout_HTMLSlotElement_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<HTMLSlotElement_cycleCollection>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(HTMLSlotElement_cycleCollection))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<HTMLSlotElement_cycleCollection>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(HTMLSlotElement_cycleCollection))
-                );
-            }
-            impl Clone for HTMLSlotElement_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom15HTMLSlotElement21_cycleCollectorGlobalE"]
-                pub static mut HTMLSlotElement__cycleCollectorGlobal:
-                    root::mozilla::dom::HTMLSlotElement_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_HTMLSlotElement() {
-                assert_eq!(
-                    ::std::mem::size_of::<HTMLSlotElement>(),
-                    136usize,
-                    concat!("Size of: ", stringify!(HTMLSlotElement))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<HTMLSlotElement>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(HTMLSlotElement))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<HTMLSlotElement>())).mAssignedNodes as *const _
-                            as usize
-                    },
-                    128usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(HTMLSlotElement),
-                        "::",
-                        stringify!(mAssignedNodes)
-                    )
-                );
-            }
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum CompositeOperation {
-                Replace = 0,
-                Add = 1,
-                Accumulate = 2,
-                EndGuard_ = 3,
-            }
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum IterationCompositeOperation {
-                Replace = 0,
-                Accumulate = 1,
-                EndGuard_ = 2,
-            }
-            #[repr(C)]
-            pub struct DocumentFragment {
-                pub _base: root::mozilla::dom::FragmentOrElement,
-                pub _base_1: root::nsIDOMDocumentFragment,
-                pub mHost: root::RefPtr<root::mozilla::dom::Element>,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DocumentFragment_cycleCollection {
-                pub _base: root::mozilla::dom::FragmentOrElement_cycleCollection,
-            }
-            #[test]
-            fn bindgen_test_layout_DocumentFragment_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<DocumentFragment_cycleCollection>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(DocumentFragment_cycleCollection))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DocumentFragment_cycleCollection>(),
-                    8usize,
-                    concat!(
-                        "Alignment of ",
-                        stringify!(DocumentFragment_cycleCollection)
-                    )
-                );
-            }
-            impl Clone for DocumentFragment_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom16DocumentFragment21_cycleCollectorGlobalE"]
-                pub static mut DocumentFragment__cycleCollectorGlobal:
-                    root::mozilla::dom::DocumentFragment_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_DocumentFragment() {
-                assert_eq!(
-                    ::std::mem::size_of::<DocumentFragment>(),
-                    120usize,
-                    concat!("Size of: ", stringify!(DocumentFragment))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<DocumentFragment>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(DocumentFragment))
-                );
-            }
-            #[repr(C)]
-            pub struct ShadowRoot {
-                pub _base: root::mozilla::dom::DocumentFragment,
-                pub _base_1: root::mozilla::dom::DocumentOrShadowRoot,
-                pub _base_2: root::nsStubMutationObserver,
-                pub mMode: root::mozilla::dom::ShadowRootMode,
-                pub mServoStyles: root::mozilla::UniquePtr<root::RawServoAuthorStyles>,
-                pub mStyleRuleMap: root::mozilla::UniquePtr<root::mozilla::ServoStyleRuleMap>,
-                pub mSlotMap: [u64; 4usize],
-                pub mIsComposedDocParticipant: bool,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ShadowRoot_cycleCollection {
-                pub _base: root::mozilla::dom::DocumentFragment_cycleCollection,
-            }
-            #[test]
-            fn bindgen_test_layout_ShadowRoot_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<ShadowRoot_cycleCollection>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(ShadowRoot_cycleCollection))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<ShadowRoot_cycleCollection>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(ShadowRoot_cycleCollection))
-                );
-            }
-            impl Clone for ShadowRoot_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            /// Represents the insertion point in a slot for a given node.
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct ShadowRoot_SlotAssignment {
-                pub mSlot: *mut root::mozilla::dom::HTMLSlotElement,
-                pub mIndex: [u32; 2usize],
-            }
-            #[test]
-            fn bindgen_test_layout_ShadowRoot_SlotAssignment() {
-                assert_eq!(
-                    ::std::mem::size_of::<ShadowRoot_SlotAssignment>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(ShadowRoot_SlotAssignment))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<ShadowRoot_SlotAssignment>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(ShadowRoot_SlotAssignment))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<ShadowRoot_SlotAssignment>())).mSlot as *const _
-                            as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(ShadowRoot_SlotAssignment),
-                        "::",
-                        stringify!(mSlot)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<ShadowRoot_SlotAssignment>())).mIndex as *const _
-                            as usize
-                    },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(ShadowRoot_SlotAssignment),
-                        "::",
-                        stringify!(mIndex)
-                    )
-                );
-            }
-            pub type ShadowRoot_SlotArray = u8;
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom10ShadowRoot21_cycleCollectorGlobalE"]
-                pub static mut ShadowRoot__cycleCollectorGlobal:
-                    root::mozilla::dom::ShadowRoot_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_ShadowRoot() {
-                assert_eq!(
-                    ::std::mem::size_of::<ShadowRoot>(),
-                    256usize,
-                    concat!("Size of: ", stringify!(ShadowRoot))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<ShadowRoot>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(ShadowRoot))
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ExplicitChildIterator {
-                pub mParent: *const root::nsIContent,
-                pub mParentAsSlot: *const root::mozilla::dom::HTMLSlotElement,
-                pub mChild: *mut root::nsIContent,
-                pub mDefaultChild: *mut root::nsIContent,
-                pub mIsFirst: bool,
-                pub mIndexInInserted: u32,
-            }
-            #[test]
-            fn bindgen_test_layout_ExplicitChildIterator() {
-                assert_eq!(
-                    ::std::mem::size_of::<ExplicitChildIterator>(),
-                    40usize,
-                    concat!("Size of: ", stringify!(ExplicitChildIterator))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<ExplicitChildIterator>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(ExplicitChildIterator))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mParent as *const _
-                            as usize
-                    },
-                    0usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(ExplicitChildIterator),
-                        "::",
-                        stringify!(mParent)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mParentAsSlot as *const _
-                            as usize
-                    },
-                    8usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(ExplicitChildIterator),
-                        "::",
-                        stringify!(mParentAsSlot)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mChild as *const _
-                            as usize
-                    },
-                    16usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(ExplicitChildIterator),
-                        "::",
-                        stringify!(mChild)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mDefaultChild as *const _
-                            as usize
-                    },
-                    24usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(ExplicitChildIterator),
-                        "::",
-                        stringify!(mDefaultChild)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mIsFirst as *const _
-                            as usize
-                    },
-                    32usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(ExplicitChildIterator),
-                        "::",
-                        stringify!(mIsFirst)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<ExplicitChildIterator>())).mIndexInInserted
-                            as *const _ as usize
-                    },
-                    36usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(ExplicitChildIterator),
-                        "::",
-                        stringify!(mIndexInInserted)
-                    )
-                );
-            }
-            impl Clone for ExplicitChildIterator {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct FlattenedChildIterator {
-                pub _base: root::mozilla::dom::ExplicitChildIterator,
-                pub mOriginalContent: *const root::nsIContent,
-                pub mXBLInvolved: [u8; 2usize],
-            }
-            #[test]
-            fn bindgen_test_layout_FlattenedChildIterator() {
-                assert_eq!(
-                    ::std::mem::size_of::<FlattenedChildIterator>(),
-                    56usize,
-                    concat!("Size of: ", stringify!(FlattenedChildIterator))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<FlattenedChildIterator>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(FlattenedChildIterator))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FlattenedChildIterator>())).mOriginalContent
-                            as *const _ as usize
-                    },
-                    40usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FlattenedChildIterator),
-                        "::",
-                        stringify!(mOriginalContent)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<FlattenedChildIterator>())).mXBLInvolved as *const _
-                            as usize
-                    },
-                    48usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(FlattenedChildIterator),
-                        "::",
-                        stringify!(mXBLInvolved)
-                    )
-                );
-            }
-            /// AllChildrenIterator traverses the children of an element including before /
-            /// after content and optionally XBL children.  The iterator can be initialized
-            /// to start at the end by providing false for aStartAtBeginning in order to
-            /// start iterating in reverse from the last child.
-            ///
-            /// Note: it assumes that no mutation of the DOM or frame tree takes place during
-            /// iteration, and will break horribly if that is not true.
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct AllChildrenIterator {
-                pub _base: root::mozilla::dom::FlattenedChildIterator,
-                pub mAnonKids: root::nsTArray<*mut root::nsIContent>,
-                pub mAnonKidsIdx: u32,
-                pub mFlags: u32,
-                pub mPhase: root::mozilla::dom::AllChildrenIterator_IteratorPhase,
-            }
-            pub const AllChildrenIterator_IteratorPhase_eAtBegin : root :: mozilla :: dom :: AllChildrenIterator_IteratorPhase = 0 ;
-            pub const AllChildrenIterator_IteratorPhase_eAtBeforeKid : root :: mozilla :: dom :: AllChildrenIterator_IteratorPhase = 1 ;
-            pub const AllChildrenIterator_IteratorPhase_eAtExplicitKids : root :: mozilla :: dom :: AllChildrenIterator_IteratorPhase = 2 ;
-            pub const AllChildrenIterator_IteratorPhase_eAtAnonKids : root :: mozilla :: dom :: AllChildrenIterator_IteratorPhase = 3 ;
-            pub const AllChildrenIterator_IteratorPhase_eAtAfterKid : root :: mozilla :: dom :: AllChildrenIterator_IteratorPhase = 4 ;
-            pub const AllChildrenIterator_IteratorPhase_eAtEnd : root :: mozilla :: dom :: AllChildrenIterator_IteratorPhase = 5 ;
-            pub type AllChildrenIterator_IteratorPhase = u32;
-            #[test]
-            fn bindgen_test_layout_AllChildrenIterator() {
-                assert_eq!(
-                    ::std::mem::size_of::<AllChildrenIterator>(),
-                    80usize,
-                    concat!("Size of: ", stringify!(AllChildrenIterator))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<AllChildrenIterator>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(AllChildrenIterator))
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<AllChildrenIterator>())).mAnonKids as *const _
-                            as usize
-                    },
-                    56usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(AllChildrenIterator),
-                        "::",
-                        stringify!(mAnonKids)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<AllChildrenIterator>())).mAnonKidsIdx as *const _
-                            as usize
-                    },
-                    64usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(AllChildrenIterator),
-                        "::",
-                        stringify!(mAnonKidsIdx)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<AllChildrenIterator>())).mFlags as *const _ as usize
-                    },
-                    68usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(AllChildrenIterator),
-                        "::",
-                        stringify!(mFlags)
-                    )
-                );
-                assert_eq!(
-                    unsafe {
-                        &(*(::std::ptr::null::<AllChildrenIterator>())).mPhase as *const _ as usize
-                    },
-                    72usize,
-                    concat!(
-                        "Offset of field: ",
-                        stringify!(AllChildrenIterator),
-                        "::",
-                        stringify!(mPhase)
-                    )
-                );
-            }
-            /// StyleChildrenIterator traverses the children of the element from the
-            /// perspective of the style system, particularly the children we need to
-            /// traverse during restyle.
-            ///
-            /// At present, this is identical to AllChildrenIterator with
-            /// (eAllChildren | eSkipDocumentLevelNativeAnonymousContent). We used to have
-            /// detect and skip any native anonymous children that are used to implement some
-            /// special magic in here that went away, but we keep the separate class so
-            /// we can reintroduce special magic back if needed.
-            ///
-            /// Note: it assumes that no mutation of the DOM or frame tree takes place during
-            /// iteration, and will break horribly if that is not true.
-            ///
-            /// We require this to be memmovable since Rust code can create and move
-            /// StyleChildrenIterators.
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct StyleChildrenIterator {
-                pub _base: root::mozilla::dom::AllChildrenIterator,
-            }
-            #[test]
-            fn bindgen_test_layout_StyleChildrenIterator() {
-                assert_eq!(
-                    ::std::mem::size_of::<StyleChildrenIterator>(),
-                    80usize,
-                    concat!("Size of: ", stringify!(StyleChildrenIterator))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<StyleChildrenIterator>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(StyleChildrenIterator))
-                );
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct MediaList {
-                pub _base: root::nsISupports,
-                pub _base_1: root::nsWrapperCache,
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                pub mStyleSheet: *mut root::mozilla::StyleSheet,
-            }
-            pub type MediaList_HasThreadSafeRefCnt = root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct MediaList_cycleCollection {
-                pub _base: root::nsXPCOMCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_MediaList_cycleCollection() {
-                assert_eq!(
-                    ::std::mem::size_of::<MediaList_cycleCollection>(),
-                    16usize,
-                    concat!("Size of: ", stringify!(MediaList_cycleCollection))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<MediaList_cycleCollection>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(MediaList_cycleCollection))
-                );
-            }
-            impl Clone for MediaList_cycleCollection {
-                fn clone(&self) -> Self {
-                    *self
-                }
-            }
-            extern "C" {
-                #[link_name = "\u{1}_ZN7mozilla3dom9MediaList21_cycleCollectorGlobalE"]
-                pub static mut MediaList__cycleCollectorGlobal:
-                    root::mozilla::dom::MediaList_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_MediaList() {
-                assert_eq!(
-                    ::std::mem::size_of::<MediaList>(),
-                    48usize,
-                    concat!("Size of: ", stringify!(MediaList))
-                );
-                assert_eq!(
-                    ::std::mem::align_of::<MediaList>(),
-                    8usize,
-                    concat!("Alignment of ", stringify!(MediaList))
-                );
-            }
-        }
-        #[repr(C)]
-        pub struct CSSVariableValues {
-            /// Map of variable names to IDs.  Variable IDs are indexes into
-            /// mVariables.
-            pub mVariableIDs: [u64; 4usize],
-            /// Array of variables, indexed by variable ID.
-            pub mVariables: root::nsTArray<root::mozilla::CSSVariableValues_Variable>,
-        }
-        #[repr(C)]
-        pub struct CSSVariableValues_Variable {
-            pub mVariableName: ::nsstring::nsStringRepr,
-            pub mValue: ::nsstring::nsStringRepr,
-            pub mFirstToken: root::nsCSSTokenSerializationType,
-            pub mLastToken: root::nsCSSTokenSerializationType,
-        }
-        #[test]
-        fn bindgen_test_layout_CSSVariableValues_Variable() {
-            assert_eq!(
-                ::std::mem::size_of::<CSSVariableValues_Variable>(),
-                40usize,
-                concat!("Size of: ", stringify!(CSSVariableValues_Variable))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<CSSVariableValues_Variable>(),
-                8usize,
-                concat!("Alignment of ", stringify!(CSSVariableValues_Variable))
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<CSSVariableValues_Variable>())).mVariableName as *const _
-                        as usize
-                },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(CSSVariableValues_Variable),
-                    "::",
-                    stringify!(mVariableName)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<CSSVariableValues_Variable>())).mValue as *const _
-                        as usize
-                },
-                16usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(CSSVariableValues_Variable),
-                    "::",
-                    stringify!(mValue)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<CSSVariableValues_Variable>())).mFirstToken as *const _
-                        as usize
-                },
-                32usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(CSSVariableValues_Variable),
-                    "::",
-                    stringify!(mFirstToken)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<CSSVariableValues_Variable>())).mLastToken as *const _
-                        as usize
-                },
-                36usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(CSSVariableValues_Variable),
-                    "::",
-                    stringify!(mLastToken)
-                )
-            );
-        }
-        #[test]
-        fn bindgen_test_layout_CSSVariableValues() {
-            assert_eq!(
-                ::std::mem::size_of::<CSSVariableValues>(),
-                40usize,
-                concat!("Size of: ", stringify!(CSSVariableValues))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<CSSVariableValues>(),
-                8usize,
-                concat!("Alignment of ", stringify!(CSSVariableValues))
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<CSSVariableValues>())).mVariableIDs as *const _ as usize
-                },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(CSSVariableValues),
-                    "::",
-                    stringify!(mVariableIDs)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<CSSVariableValues>())).mVariables as *const _ as usize
-                },
-                32usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(CSSVariableValues),
-                    "::",
-                    stringify!(mVariables)
-                )
-            );
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum SheetType {
-            Agent = 0,
-            User = 1,
-            PresHint = 2,
-            Doc = 3,
-            StyleAttr = 4,
-            Override = 5,
-            Animation = 6,
-            Transition = 7,
-            Count = 8,
-            Unknown = 255,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct StaticRefPtr<T> {
-            pub mRawPtr: *mut T,
-            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
-        }
-        /// This struct represents a combined color from a numeric color and
-        /// the current foreground color (currentcolor keyword).
-        /// Conceptually, the formula is "color * (1 - p) + currentcolor * p"
-        /// where p is mForegroundRatio. See mozilla::LinearBlendColors for
-        /// the actual algorithm.
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct StyleComplexColor {
-            pub mColor: root::nscolor,
-            pub mForegroundRatio: u8,
-            pub mIsAuto: bool,
-        }
-        #[test]
-        fn bindgen_test_layout_StyleComplexColor() {
-            assert_eq!(
-                ::std::mem::size_of::<StyleComplexColor>(),
-                8usize,
-                concat!("Size of: ", stringify!(StyleComplexColor))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<StyleComplexColor>(),
-                4usize,
-                concat!("Alignment of ", stringify!(StyleComplexColor))
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<StyleComplexColor>())).mColor as *const _ as usize
-                },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(StyleComplexColor),
-                    "::",
-                    stringify!(mColor)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<StyleComplexColor>())).mForegroundRatio as *const _
-                        as usize
-                },
-                4usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(StyleComplexColor),
-                    "::",
-                    stringify!(mForegroundRatio)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<StyleComplexColor>())).mIsAuto as *const _ as usize
-                },
-                5usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(StyleComplexColor),
-                    "::",
-                    stringify!(mIsAuto)
-                )
-            );
-        }
-        impl Clone for StyleComplexColor {
-            fn clone(&self) -> Self {
-                *self
-            }
-        }
-        #[repr(u32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum Side {
-            eSideTop = 0,
-            eSideRight = 1,
-            eSideBottom = 2,
-            eSideLeft = 3,
-        }
-        #[repr(u32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum HalfCorner {
-            eCornerTopLeftX = 0,
-            eCornerTopLeftY = 1,
-            eCornerTopRightX = 2,
-            eCornerTopRightY = 3,
-            eCornerBottomRightX = 4,
-            eCornerBottomRightY = 5,
-            eCornerBottomLeftX = 6,
-            eCornerBottomLeftY = 7,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct NotNull<T> {
-            pub mBasePtr: T,
-            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
-        }
-        pub const FontFamilyType_eFamily_generic_first: root::mozilla::FontFamilyType =
-            FontFamilyType::eFamily_serif;
-        pub const FontFamilyType_eFamily_generic_last: root::mozilla::FontFamilyType =
-            FontFamilyType::eFamily_fantasy;
-        pub const FontFamilyType_eFamily_generic_count: root::mozilla::FontFamilyType =
-            FontFamilyType::eFamily_monospace;
-        #[repr(u32)]
-        /// type of font family name, either a name (e.g. Helvetica) or a
-        /// generic (e.g. serif, sans-serif), with the ability to distinguish
-        /// between unquoted and quoted names for serializaiton
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum FontFamilyType {
-            eFamily_none = 0,
-            eFamily_named = 1,
-            eFamily_named_quoted = 2,
-            eFamily_serif = 3,
-            eFamily_sans_serif = 4,
-            eFamily_monospace = 5,
-            eFamily_cursive = 6,
-            eFamily_fantasy = 7,
-            eFamily_moz_variable = 8,
-            eFamily_moz_fixed = 9,
-            eFamily_moz_emoji = 10,
-        }
-        /// font family name, a string for the name if not a generic and
-        /// a font type indicated named family or which generic family
-        #[repr(C)]
-        pub struct FontFamilyName {
-            pub mType: root::mozilla::FontFamilyType,
-            pub mName: ::nsstring::nsStringRepr,
-        }
-        #[test]
-        fn bindgen_test_layout_FontFamilyName() {
-            assert_eq!(
-                ::std::mem::size_of::<FontFamilyName>(),
-                24usize,
-                concat!("Size of: ", stringify!(FontFamilyName))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<FontFamilyName>(),
-                8usize,
-                concat!("Alignment of ", stringify!(FontFamilyName))
-            );
-            assert_eq!(
-                unsafe { &(*(::std::ptr::null::<FontFamilyName>())).mType as *const _ as usize },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(FontFamilyName),
-                    "::",
-                    stringify!(mType)
-                )
-            );
-            assert_eq!(
-                unsafe { &(*(::std::ptr::null::<FontFamilyName>())).mName as *const _ as usize },
-                8usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(FontFamilyName),
-                    "::",
-                    stringify!(mName)
-                )
-            );
-        }
-        /// A refcounted array of FontFamilyNames.  We use this to store the specified
-        /// value (in Servo) and the computed value (in both Gecko and Servo) of the
-        /// font-family property.
-        #[repr(C)]
-        pub struct SharedFontList {
-            pub mRefCnt: root::mozilla::ThreadSafeAutoRefCnt,
-            pub mNames: root::nsTArray<root::mozilla::FontFamilyName>,
-        }
-        pub type SharedFontList_HasThreadSafeRefCnt = root::mozilla::TrueType;
-        extern "C" {
-            #[link_name = "\u{1}_ZN7mozilla14SharedFontList6sEmptyE"]
-            pub static mut SharedFontList_sEmpty:
-                root::mozilla::StaticRefPtr<root::mozilla::SharedFontList>;
-        }
-        #[test]
-        fn bindgen_test_layout_SharedFontList() {
-            assert_eq!(
-                ::std::mem::size_of::<SharedFontList>(),
-                16usize,
-                concat!("Size of: ", stringify!(SharedFontList))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<SharedFontList>(),
-                8usize,
-                concat!("Alignment of ", stringify!(SharedFontList))
-            );
-            assert_eq!(
-                unsafe { &(*(::std::ptr::null::<SharedFontList>())).mRefCnt as *const _ as usize },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(SharedFontList),
-                    "::",
-                    stringify!(mRefCnt)
-                )
-            );
-            assert_eq!(
-                unsafe { &(*(::std::ptr::null::<SharedFontList>())).mNames as *const _ as usize },
-                8usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(SharedFontList),
-                    "::",
-                    stringify!(mNames)
-                )
-            );
-        }
-        #[test]
-        fn __bindgen_test_layout_StaticRefPtr_open0_SharedFontList_close0_instantiation() {
-            assert_eq!(
-                ::std::mem::size_of::<root::mozilla::StaticRefPtr<root::mozilla::SharedFontList>>(),
-                8usize,
-                concat!(
-                    "Size of template specialization: ",
-                    stringify!(root::mozilla::StaticRefPtr<root::mozilla::SharedFontList>)
-                )
-            );
-            assert_eq ! ( :: std :: mem :: align_of :: < root :: mozilla :: StaticRefPtr < root :: mozilla :: SharedFontList > > ( ) , 8usize , concat ! ( "Alignment of template specialization: " , stringify ! ( root :: mozilla :: StaticRefPtr < root :: mozilla :: SharedFontList > ) ) );
-        }
-        /// font family list, array of font families and a default font type.
-        /// font family names are either named strings or generics. the default
-        /// font type is used to preserve the variable font fallback behavior
-        #[repr(C)]
-        pub struct FontFamilyList {
-            pub mFontlist: root::mozilla::NotNull<root::RefPtr<root::mozilla::SharedFontList>>,
-            pub mDefaultFontType: root::mozilla::FontFamilyType,
-        }
-        #[test]
-        fn bindgen_test_layout_FontFamilyList() {
-            assert_eq!(
-                ::std::mem::size_of::<FontFamilyList>(),
-                16usize,
-                concat!("Size of: ", stringify!(FontFamilyList))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<FontFamilyList>(),
-                8usize,
-                concat!("Alignment of ", stringify!(FontFamilyList))
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<FontFamilyList>())).mFontlist as *const _ as usize
-                },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(FontFamilyList),
-                    "::",
-                    stringify!(mFontlist)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<FontFamilyList>())).mDefaultFontType as *const _ as usize
-                },
-                8usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(FontFamilyList),
-                    "::",
-                    stringify!(mDefaultFontType)
-                )
-            );
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleBasicShapeType {
-            Polygon = 0,
-            Circle = 1,
-            Ellipse = 2,
-            Inset = 3,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleBoxAlign {
-            Stretch = 0,
-            Start = 1,
-            Center = 2,
-            Baseline = 3,
-            End = 4,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleBoxDecorationBreak {
-            Slice = 0,
-            Clone = 1,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleBoxDirection {
-            Normal = 0,
-            Reverse = 1,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleBoxOrient {
-            Horizontal = 0,
-            Vertical = 1,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleBoxPack {
-            Start = 0,
-            Center = 1,
-            End = 2,
-            Justify = 3,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleBoxSizing {
-            Content = 0,
-            Border = 1,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleClear {
-            None = 0,
-            Left = 1,
-            Right = 2,
-            InlineStart = 3,
-            InlineEnd = 4,
-            Both = 5,
-            Line = 8,
-            Max = 13,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleGeometryBox {
-            ContentBox = 0,
-            PaddingBox = 1,
-            BorderBox = 2,
-            MarginBox = 3,
-            FillBox = 4,
-            StrokeBox = 5,
-            ViewBox = 6,
-            NoClip = 7,
-            Text = 8,
-            NoBox = 9,
-            MozAlmostPadding = 127,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleFillRule {
-            Nonzero = 0,
-            Evenodd = 1,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleFloat {
-            None = 0,
-            Left = 1,
-            Right = 2,
-            InlineStart = 3,
-            InlineEnd = 4,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleFloatEdge {
-            ContentBox = 0,
-            MarginBox = 1,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleHyphens {
-            None = 0,
-            Manual = 1,
-            Auto = 2,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleShapeRadius {
-            ClosestSide = 0,
-            FarthestSide = 1,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleShapeSourceType {
-            None = 0,
-            URL = 1,
-            Image = 2,
-            Shape = 3,
-            Box = 4,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleStackSizing {
-            Ignore = 0,
-            StretchToFit = 1,
-            IgnoreHorizontal = 2,
-            IgnoreVertical = 3,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleTextJustify {
-            None = 0,
-            Auto = 1,
-            InterWord = 2,
-            InterCharacter = 3,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleUserFocus {
-            None = 0,
-            Ignore = 1,
-            Normal = 2,
-            SelectAll = 3,
-            SelectBefore = 4,
-            SelectAfter = 5,
-            SelectSame = 6,
-            SelectMenu = 7,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleUserSelect {
-            None = 0,
-            Text = 1,
-            Element = 2,
-            Elements = 3,
-            All = 4,
-            Toggle = 5,
-            TriState = 6,
-            Auto = 7,
-            MozAll = 8,
-            MozText = 9,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleUserInput {
-            None = 0,
-            Auto = 1,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleUserModify {
-            ReadOnly = 0,
-            ReadWrite = 1,
-            WriteOnly = 2,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleWindowDragging {
-            Default = 0,
-            Drag = 1,
-            NoDrag = 2,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleOrient {
-            Inline = 0,
-            Block = 1,
-            Horizontal = 2,
-            Vertical = 3,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleImageLayerRepeat {
-            NoRepeat = 0,
-            RepeatX = 1,
-            RepeatY = 2,
-            Repeat = 3,
-            Space = 4,
-            Round = 5,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleBorderImageRepeat {
-            Stretch = 0,
-            Repeat = 1,
-            Round = 2,
-            Space = 3,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleDisplay {
-            None = 0,
-            Block = 1,
-            FlowRoot = 2,
-            Inline = 3,
-            InlineBlock = 4,
-            ListItem = 5,
-            Table = 6,
-            InlineTable = 7,
-            TableRowGroup = 8,
-            TableColumn = 9,
-            TableColumnGroup = 10,
-            TableHeaderGroup = 11,
-            TableFooterGroup = 12,
-            TableRow = 13,
-            TableCell = 14,
-            TableCaption = 15,
-            Flex = 16,
-            InlineFlex = 17,
-            Grid = 18,
-            InlineGrid = 19,
-            Ruby = 20,
-            RubyBase = 21,
-            RubyBaseContainer = 22,
-            RubyText = 23,
-            RubyTextContainer = 24,
-            Contents = 25,
-            WebkitBox = 26,
-            WebkitInlineBox = 27,
-            MozBox = 28,
-            MozInlineBox = 29,
-            MozGrid = 30,
-            MozInlineGrid = 31,
-            MozGridGroup = 32,
-            MozGridLine = 33,
-            MozStack = 34,
-            MozInlineStack = 35,
-            MozDeck = 36,
-            MozGroupbox = 37,
-            MozPopup = 38,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleGridTrackBreadth {
-            MaxContent = 1,
-            MinContent = 2,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleWhiteSpace {
-            Normal = 0,
-            Pre = 1,
-            Nowrap = 2,
-            PreWrap = 3,
-            PreLine = 4,
-            PreSpace = 5,
-        }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StyleOverscrollBehavior {
-            Auto = 0,
-            Contain = 1,
-            None = 2,
-        }
-        pub const MediaFeatureChangeReason_ViewportChange: root::mozilla::MediaFeatureChangeReason =
-            1;
-        pub const MediaFeatureChangeReason_ZoomChange: root::mozilla::MediaFeatureChangeReason = 2;
-        pub const MediaFeatureChangeReason_MinFontSizeChange : root :: mozilla :: MediaFeatureChangeReason = 4 ;
-        pub const MediaFeatureChangeReason_ResolutionChange : root :: mozilla :: MediaFeatureChangeReason = 8 ;
-        pub const MediaFeatureChangeReason_MediumChange: root::mozilla::MediaFeatureChangeReason =
-            16;
-        pub const MediaFeatureChangeReason_SizeModeChange: root::mozilla::MediaFeatureChangeReason =
-            32;
-        pub const MediaFeatureChangeReason_SystemMetricsChange : root :: mozilla :: MediaFeatureChangeReason = 64 ;
-        pub const MediaFeatureChangeReason_DeviceSizeIsPageSizeChange : root :: mozilla :: MediaFeatureChangeReason = 128 ;
-        pub const MediaFeatureChangeReason_DisplayModeChange : root :: mozilla :: MediaFeatureChangeReason = 256 ;
-        pub type MediaFeatureChangeReason = i32;
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct MediaFeatureChange {
-            pub mRestyleHint: root::nsRestyleHint,
-            pub mChangeHint: root::nsChangeHint,
-            pub mReason: root::mozilla::MediaFeatureChangeReason,
-        }
-        #[test]
-        fn bindgen_test_layout_MediaFeatureChange() {
-            assert_eq!(
-                ::std::mem::size_of::<MediaFeatureChange>(),
-                12usize,
-                concat!("Size of: ", stringify!(MediaFeatureChange))
-            );
-            assert_eq!(
-                ::std::mem::align_of::<MediaFeatureChange>(),
-                4usize,
-                concat!("Alignment of ", stringify!(MediaFeatureChange))
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<MediaFeatureChange>())).mRestyleHint as *const _ as usize
-                },
-                0usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(MediaFeatureChange),
-                    "::",
-                    stringify!(mRestyleHint)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<MediaFeatureChange>())).mChangeHint as *const _ as usize
-                },
-                4usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(MediaFeatureChange),
-                    "::",
-                    stringify!(mChangeHint)
-                )
-            );
-            assert_eq!(
-                unsafe {
-                    &(*(::std::ptr::null::<MediaFeatureChange>())).mReason as *const _ as usize
-                },
-                8usize,
-                concat!(
-                    "Offset of field: ",
-                    stringify!(MediaFeatureChange),
-                    "::",
-                    stringify!(mReason)
-                )
-            );
-        }
-        impl Clone for MediaFeatureChange {
-            fn clone(&self) -> Self {
-                *self
-            }
-        }
-        pub mod external {
-            #[allow(unused_imports)]
-            use self::super::super::super::root;
-            /// AtomicRefCounted<T> is like RefCounted<T>, with an atomically updated
-            /// reference counter.
-            ///
-            /// NOTE: Please do not use this class, use NS_INLINE_DECL_THREADSAFE_REFCOUNTING
-            /// instead.
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct AtomicRefCounted {
-                pub _address: u8,
-            }
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct SupportsWeakPtr {
-            pub _address: u8,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct WeakPtr {
-            pub _address: u8,
-        }
-        pub type WeakPtr_WeakReference = u8;
-        /// Event messages
-        pub type EventMessageType = u16;
-        pub const EventMessage_eVoidEvent: root::mozilla::EventMessage = 0;
-        pub const EventMessage_eAllEvents: root::mozilla::EventMessage = 1;
-        pub const EventMessage_eWindowClose: root::mozilla::EventMessage = 2;
-        pub const EventMessage_eKeyPress: root::mozilla::EventMessage = 3;
-        pub const EventMessage_eKeyUp: root::mozilla::EventMessage = 4;
-        pub const EventMessage_eKeyDown: root::mozilla::EventMessage = 5;
-        pub const EventMessage_eKeyDownOnPlugin: root::mozilla::EventMessage = 6;
-        pub const EventMessage_eKeyUpOnPlugin: root::mozilla::EventMessage = 7;
-        pub const EventMessage_eAccessKeyNotFound: root::mozilla::EventMessage = 8;
-        pub const EventMessage_eResize: root::mozilla::EventMessage = 9;
-        pub const EventMessage_eScroll: root::mozilla::EventMessage = 10;
-        pub const EventMessage_eInstall: root::mozilla::EventMessage = 11;
-        pub const EventMessage_eAppInstalled: root::mozilla::EventMessage = 12;
-        pub const EventMessage_ePluginActivate: root::mozilla::EventMessage = 13;
-        pub const EventMessage_ePluginFocus: root::mozilla::EventMessage = 14;
-        pub const EventMessage_eOffline: root::mozilla::EventMessage = 15;
-        pub const EventMessage_eOnline: root::mozilla::EventMessage = 16;
-        pub const EventMessage_eLanguageChange: root::mozilla::EventMessage = 17;
-        pub const EventMessage_eMouseMove: root::mozilla::EventMessage = 18;
-        pub const EventMessage_eMouseUp: root::mozilla::EventMessage = 19;
-        pub const EventMessage_eMouseDown: root::mozilla::EventMessage = 20;
-        pub const EventMessage_eMouseEnterIntoWidget: root::mozilla::EventMessage = 21;
-        pub const EventMessage_eMouseExitFromWidget: root::mozilla::EventMessage = 22;
-        pub const EventMessage_eMouseDoubleClick: root::mozilla::EventMessage = 23;
-        pub const EventMessage_eMouseClick: root::mozilla::EventMessage = 24;
-        pub const EventMessage_eMouseAuxClick: root::mozilla::EventMessage = 25;
-        pub const EventMessage_eMouseActivate: root::mozilla::EventMessage = 26;
-        pub const EventMessage_eMouseOver: root::mozilla::EventMessage = 27;
-        pub const EventMessage_eMouseOut: root::mozilla::EventMessage = 28;
-        pub const EventMessage_eMouseHitTest: root::mozilla::EventMessage = 29;
-        pub const EventMessage_eMouseEnter: root::mozilla::EventMessage = 30;
-        pub const EventMessage_eMouseLeave: root::mozilla::EventMessage = 31;
-        pub const EventMessage_eMouseTouchDrag: root::mozilla::EventMessage = 32;
-        pub const EventMessage_eMouseLongTap: root::mozilla::EventMessage = 33;
-        pub const EventMessage_eMouseEventFirst: root::mozilla::EventMessage = 18;
-        pub const EventMessage_eMouseEventLast: root::mozilla::EventMessage = 33;
-        pub const EventMessage_ePointerMove: root::mozilla::EventMessage = 34;
-        pub const EventMessage_ePointerUp: root::mozilla::EventMessage = 35;
-        pub const EventMessage_ePointerDown: root::mozilla::EventMessage = 36;
-        pub const EventMessage_ePointerOver: root::mozilla::EventMessage = 37;
-        pub const EventMessage_ePointerOut: root::mozilla::EventMessage = 38;
-        pub const EventMessage_ePointerEnter: root::mozilla::EventMessage = 39;
-        pub const EventMessage_ePointerLeave: root::mozilla::EventMessage = 40;
-        pub const EventMessage_ePointerCancel: root::mozilla::EventMessage = 41;
-        pub const EventMessage_ePointerGotCapture: root::mozilla::EventMessage = 42;
-        pub const EventMessage_ePointerLostCapture: root::mozilla::EventMessage = 43;
-        pub const EventMessage_ePointerEventFirst: root::mozilla::EventMessage = 34;
-        pub const EventMessage_ePointerEventLast: root::mozilla::EventMessage = 43;
-        pub const EventMessage_eContextMenu: root::mozilla::EventMessage = 44;
-        pub const EventMessage_eLoad: root::mozilla::EventMessage = 45;
-        pub const EventMessage_eUnload: root::mozilla::EventMessage = 46;
-        pub const EventMessage_eHashChange: root::mozilla::EventMessage = 47;
-        pub const EventMessage_eImageAbort: root::mozilla::EventMessage = 48;
-        pub const EventMessage_eLoadError: root::mozilla::EventMessage = 49;
-        pub const EventMessage_eLoadEnd: root::mozilla::EventMessage = 50;
-        pub const EventMessage_ePopState: root::mozilla::EventMessage = 51;
-        pub const EventMessage_eStorage: root::mozilla::EventMessage = 52;
-        pub const EventMessage_eBeforeUnload: root::mozilla::EventMessage = 53;
-        pub const EventMessage_eReadyStateChange: root::mozilla::EventMessage = 54;
-        pub const EventMessage_eFormSubmit: root::mozilla::EventMessage = 55;
-        pub const EventMessage_eFormReset: root::mozilla::EventMessage = 56;
-        pub const EventMessage_eFormChange: root::mozilla::EventMessage = 57;
-        pub const EventMessage_eFormSelect: root::mozilla::EventMessage = 58;
-        pub const EventMessage_eFormInvalid: root::mozilla::EventMessage = 59;
-        pub const EventMessage_eFormCheckboxStateChange: root::mozilla::EventMessage = 60;
-        pub const EventMessage_eFormRadioStateChange: root::mozilla::EventMessage = 61;
-        pub const EventMessage_eFocus: root::mozilla::EventMessage = 62;
-        pub const EventMessage_eBlur: root::mozilla::EventMessage = 63;
-        pub const EventMessage_eFocusIn: root::mozilla::EventMessage = 64;
-        pub const EventMessage_eFocusOut: root::mozilla::EventMessage = 65;
-        pub const EventMessage_eDragEnter: root::mozilla::EventMessage = 66;
-        pub const EventMessage_eDragOver: root::mozilla::EventMessage = 67;
-        pub const EventMessage_eDragExit: root::mozilla::EventMessage = 68;
-        pub const EventMessage_eDrag: root::mozilla::EventMessage = 69;
-        pub const EventMessage_eDragEnd: root::mozilla::EventMessage = 70;
-        pub const EventMessage_eDragStart: root::mozilla::EventMessage = 71;
-        pub const EventMessage_eDrop: root::mozilla::EventMessage = 72;
-        pub const EventMessage_eDragLeave: root::mozilla::EventMessage = 73;
-        pub const EventMessage_eDragDropEventFirst: root::mozilla::EventMessage = 66;
-        pub const EventMessage_eDragDropEventLast: root::mozilla::EventMessage = 73;
-        pub const EventMessage_eXULPopupShowing: root::mozilla::EventMessage = 74;
-        pub const EventMessage_eXULPopupShown: root::mozilla::EventMessage = 75;
-        pub const EventMessage_eXULPopupPositioned: root::mozilla::EventMessage = 76;
-        pub const EventMessage_eXULPopupHiding: root::mozilla::EventMessage = 77;
-        pub const EventMessage_eXULPopupHidden: root::mozilla::EventMessage = 78;
-        pub const EventMessage_eXULBroadcast: root::mozilla::EventMessage = 79;
-        pub const EventMessage_eXULCommandUpdate: root::mozilla::EventMessage = 80;
-        pub const EventMessage_eLegacyMouseLineOrPageScroll: root::mozilla::EventMessage = 81;
-        pub const EventMessage_eLegacyMousePixelScroll: root::mozilla::EventMessage = 82;
-        pub const EventMessage_eScrollPortUnderflow: root::mozilla::EventMessage = 83;
-        pub const EventMessage_eScrollPortOverflow: root::mozilla::EventMessage = 84;
-        pub const EventMessage_eLegacySubtreeModified: root::mozilla::EventMessage = 85;
-        pub const EventMessage_eLegacyNodeInserted: root::mozilla::EventMessage = 86;
-        pub const EventMessage_eLegacyNodeRemoved: root::mozilla::EventMessage = 87;
-        pub const EventMessage_eLegacyNodeRemovedFromDocument: root::mozilla::EventMessage = 88;
-        pub const EventMessage_eLegacyNodeInsertedIntoDocument: root::mozilla::EventMessage = 89;
-        pub const EventMessage_eLegacyAttrModified: root::mozilla::EventMessage = 90;
-        pub const EventMessage_eLegacyCharacterDataModified: root::mozilla::EventMessage = 91;
-        pub const EventMessage_eLegacyMutationEventFirst: root::mozilla::EventMessage = 85;
-        pub const EventMessage_eLegacyMutationEventLast: root::mozilla::EventMessage = 91;
-        pub const EventMessage_eUnidentifiedEvent: root::mozilla::EventMessage = 92;
-        pub const EventMessage_eCompositionStart: root::mozilla::EventMessage = 93;
-        pub const EventMessage_eCompositionEnd: root::mozilla::EventMessage = 94;
-        pub const EventMessage_eCompositionUpdate: root::mozilla::EventMessage = 95;
-        pub const EventMessage_eCompositionChange: root::mozilla::EventMessage = 96;
-        pub const EventMessage_eCompositionCommitAsIs: root::mozilla::EventMessage = 97;
-        pub const EventMessage_eCompositionCommit: root::mozilla::EventMessage = 98;
-        pub const EventMessage_eCompositionCommitRequestHandled: root::mozilla::EventMessage = 99;
-        pub const EventMessage_eLegacyDOMActivate: root::mozilla::EventMessage = 100;
-        pub const EventMessage_eLegacyDOMFocusIn: root::mozilla::EventMessage = 101;
-        pub const EventMessage_eLegacyDOMFocusOut: root::mozilla::EventMessage = 102;
-        pub const EventMessage_ePageShow: root::mozilla::EventMessage = 103;
-        pub const EventMessage_ePageHide: root::mozilla::EventMessage = 104;
-        pub const EventMessage_eSVGLoad: root::mozilla::EventMessage = 105;
-        pub const EventMessage_eSVGUnload: root::mozilla::EventMessage = 106;
-        pub const EventMessage_eSVGResize: root::mozilla::EventMessage = 107;
-        pub const EventMessage_eSVGScroll: root::mozilla::EventMessage = 108;
-        pub const EventMessage_eSVGZoom: root::mozilla::EventMessage = 109;
-        pub const EventMessage_eXULCommand: root::mozilla::EventMessage = 110;
-        pub const EventMessage_eCopy: root::mozilla::EventMessage = 111;
-        pub const EventMessage_eCut: root::mozilla::EventMessage = 112;
-        pub const EventMessage_ePaste: root::mozilla::EventMessage = 113;
-        pub const EventMessage_ePasteNoFormatting: root::mozilla::EventMessage = 114;
-        pub const EventMessage_eQuerySelectedText: root::mozilla::EventMessage = 115;
-        pub const EventMessage_eQueryTextContent: root::mozilla::EventMessage = 116;
-        pub const EventMessage_eQueryCaretRect: root::mozilla::EventMessage = 117;
-        pub const EventMessage_eQueryTextRect: root::mozilla::EventMessage = 118;
-        pub const EventMessage_eQueryTextRectArray: root::mozilla::EventMessage = 119;
-        pub const EventMessage_eQueryEditorRect: root::mozilla::EventMessage = 120;
-        pub const EventMessage_eQueryContentState: root::mozilla::EventMessage = 121;
-        pub const EventMessage_eQuerySelectionAsTransferable: root::mozilla::EventMessage = 122;
-        pub const EventMessage_eQueryCharacterAtPoint: root::mozilla::EventMessage = 123;
-        pub const EventMessage_eQueryDOMWidgetHittest: root::mozilla::EventMessage = 124;
-        pub const EventMessage_eLoadStart: root::mozilla::EventMessage = 125;
-        pub const EventMessage_eProgress: root::mozilla::EventMessage = 126;
-        pub const EventMessage_eSuspend: root::mozilla::EventMessage = 127;
-        pub const EventMessage_eEmptied: root::mozilla::EventMessage = 128;
-        pub const EventMessage_eStalled: root::mozilla::EventMessage = 129;
-        pub const EventMessage_ePlay: root::mozilla::EventMessage = 130;
-        pub const EventMessage_ePause: root::mozilla::EventMessage = 131;
-        pub const EventMessage_eLoadedMetaData: root::mozilla::EventMessage = 132;
-        pub const EventMessage_eLoadedData: root::mozilla::EventMessage = 133;
-        pub const EventMessage_eWaiting: root::mozilla::EventMessage = 134;
-        pub const EventMessage_ePlaying: root::mozilla::EventMessage = 135;
-        pub const EventMessage_eCanPlay: root::mozilla::EventMessage = 136;
-        pub const EventMessage_eCanPlayThrough: root::mozilla::EventMessage = 137;
-        pub const EventMessage_eSeeking: root::mozilla::EventMessage = 138;
-        pub const EventMessage_eSeeked: root::mozilla::EventMessage = 139;
-        pub const EventMessage_eTimeUpdate: root::mozilla::EventMessage = 140;
-        pub const EventMessage_eEnded: root::mozilla::EventMessage = 141;
-        pub const EventMessage_eRateChange: root::mozilla::EventMessage = 142;
-        pub const EventMessage_eDurationChange: root::mozilla::EventMessage = 143;
-        pub const EventMessage_eVolumeChange: root::mozilla::EventMessage = 144;
-        pub const EventMessage_eAfterPaint: root::mozilla::EventMessage = 145;
-        pub const EventMessage_eSwipeGestureMayStart: root::mozilla::EventMessage = 146;
-        pub const EventMessage_eSwipeGestureStart: root::mozilla::EventMessage = 147;
-        pub const EventMessage_eSwipeGestureUpdate: root::mozilla::EventMessage = 148;
-        pub const EventMessage_eSwipeGestureEnd: root::mozilla::EventMessage = 149;
-        pub const EventMessage_eSwipeGesture: root::mozilla::EventMessage = 150;
-        pub const EventMessage_eMagnifyGestureStart: root::mozilla::EventMessage = 151;
-        pub const EventMessage_eMagnifyGestureUpdate: root::mozilla::EventMessage = 152;
-        pub const EventMessage_eMagnifyGesture: root::mozilla::EventMessage = 153;
-        pub const EventMessage_eRotateGestureStart: root::mozilla::EventMessage = 154;
-        pub const EventMessage_eRotateGestureUpdate: root::mozilla::EventMessage = 155;
-        pub const EventMessage_eRotateGesture: root::mozilla::EventMessage = 156;
-        pub const EventMessage_eTapGesture: root::mozilla::EventMessage = 157;
-        pub const EventMessage_ePressTapGesture: root::mozilla::EventMessage = 158;
-        pub const EventMessage_eEdgeUIStarted: root::mozilla::EventMessage = 159;
-        pub const EventMessage_eEdgeUICanceled: root::mozilla::EventMessage = 160;
-        pub const EventMessage_eEdgeUICompleted: root::mozilla::EventMessage = 161;
-        pub const EventMessage_ePluginInputEvent: root::mozilla::EventMessage = 162;
-        pub const EventMessage_eSetSelection: root::mozilla::EventMessage = 163;
-        pub const EventMessage_eContentCommandCut: root::mozilla::EventMessage = 164;
-        pub const EventMessage_eContentCommandCopy: root::mozilla::EventMessage = 165;
-        pub const EventMessage_eContentCommandPaste: root::mozilla::EventMessage = 166;
-        pub const EventMessage_eContentCommandDelete: root::mozilla::EventMessage = 167;