servo: Merge #17919 - Update binding files (from upsuper:update-bindings); r=heycam
authorXidorn Quan <me@upsuper.org>
Sun, 30 Jul 2017 05:16:11 -0500
changeset 420631 93cd16b433602479314438282c94b2143d22b452
parent 420630 ef19aed2b62bfcf18d92f3f04c5142abbb797393
child 420632 f1c1543f046e53aefdb7562a57182169bf345ae8
push id7566
push usermtabara@mozilla.com
push dateWed, 02 Aug 2017 08:25:16 +0000
treeherdermozilla-beta@86913f512c3c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersheycam
milestone56.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 #17919 - Update binding files (from upsuper:update-bindings); r=heycam From tip of autoland. Source-Repo: https://github.com/servo/servo Source-Revision: 3ec5fce10832495204e6b12e6761bcc5879b099a
servo/components/style/gecko/generated/atom_macro.rs
servo/components/style/gecko/generated/structs_debug.rs
servo/components/style/gecko/generated/structs_release.rs
--- a/servo/components/style/gecko/generated/atom_macro.rs
+++ b/servo/components/style/gecko/generated/atom_macro.rs
@@ -2021,16 +2021,18 @@ cfg_if! {
             #[link_name = "_ZN9nsGkAtoms13onupdatereadyE"]
             pub static nsGkAtoms_onupdateready: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms15onupgradeneededE"]
             pub static nsGkAtoms_onupgradeneeded: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms14onussdreceivedE"]
             pub static nsGkAtoms_onussdreceived: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms15onversionchangeE"]
             pub static nsGkAtoms_onversionchange: *mut nsIAtom;
+            #[link_name = "_ZN9nsGkAtoms18onvisibilitychangeE"]
+            pub static nsGkAtoms_onvisibilitychange: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms13onvoicechangeE"]
             pub static nsGkAtoms_onvoicechange: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms15onvoiceschangedE"]
             pub static nsGkAtoms_onvoiceschanged: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms19onvrdisplayactivateE"]
             pub static nsGkAtoms_onvrdisplayactivate: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms18onvrdisplayconnectE"]
             pub static nsGkAtoms_onvrdisplayconnect: *mut nsIAtom;
@@ -7150,16 +7152,18 @@ cfg_if! {
             #[link_name = "?onupdateready@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onupdateready: *mut nsIAtom;
             #[link_name = "?onupgradeneeded@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onupgradeneeded: *mut nsIAtom;
             #[link_name = "?onussdreceived@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onussdreceived: *mut nsIAtom;
             #[link_name = "?onversionchange@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onversionchange: *mut nsIAtom;
+            #[link_name = "?onvisibilitychange@nsGkAtoms@@2PEAVnsIAtom@@EA"]
+            pub static nsGkAtoms_onvisibilitychange: *mut nsIAtom;
             #[link_name = "?onvoicechange@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onvoicechange: *mut nsIAtom;
             #[link_name = "?onvoiceschanged@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onvoiceschanged: *mut nsIAtom;
             #[link_name = "?onvrdisplayactivate@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onvrdisplayactivate: *mut nsIAtom;
             #[link_name = "?onvrdisplayconnect@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onvrdisplayconnect: *mut nsIAtom;
@@ -12279,16 +12283,18 @@ cfg_if! {
             #[link_name = "\x01?onupdateready@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onupdateready: *mut nsIAtom;
             #[link_name = "\x01?onupgradeneeded@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onupgradeneeded: *mut nsIAtom;
             #[link_name = "\x01?onussdreceived@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onussdreceived: *mut nsIAtom;
             #[link_name = "\x01?onversionchange@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onversionchange: *mut nsIAtom;
+            #[link_name = "\x01?onvisibilitychange@nsGkAtoms@@2PAVnsIAtom@@A"]
+            pub static nsGkAtoms_onvisibilitychange: *mut nsIAtom;
             #[link_name = "\x01?onvoicechange@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onvoicechange: *mut nsIAtom;
             #[link_name = "\x01?onvoiceschanged@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onvoiceschanged: *mut nsIAtom;
             #[link_name = "\x01?onvrdisplayactivate@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onvrdisplayactivate: *mut nsIAtom;
             #[link_name = "\x01?onvrdisplayconnect@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onvrdisplayconnect: *mut nsIAtom;
@@ -17411,16 +17417,18 @@ macro_rules! atom {
 ("onupdateready") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onupdateready as *mut _) } };
 ("onupgradeneeded") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onupgradeneeded as *mut _) } };
 ("onussdreceived") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onussdreceived as *mut _) } };
 ("onversionchange") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onversionchange as *mut _) } };
+("onvisibilitychange") =>
+  { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onvisibilitychange as *mut _) } };
 ("onvoicechange") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onvoicechange as *mut _) } };
 ("onvoiceschanged") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onvoiceschanged as *mut _) } };
 ("onvrdisplayactivate") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onvrdisplayactivate as *mut _) } };
 ("onvrdisplayconnect") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onvrdisplayconnect as *mut _) } };
--- a/servo/components/style/gecko/generated/structs_debug.rs
+++ b/servo/components/style/gecko/generated/structs_debug.rs
@@ -1047,18 +1047,16 @@ 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!(::std::mem::size_of::<input_iterator_tag>() , 1usize ,
@@ -1079,53 +1077,32 @@ pub mod root {
         }
         pub type iterator_iterator_category<_Category> = _Category;
         pub type iterator_value_type<_Tp> = _Tp;
         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 __iterator_traits {
-            pub _address: u8,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct iterator_traits {
-            pub _address: u8,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct reverse_iterator<_Iterator> {
-            pub current: _Iterator,
-            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<_Iterator>>,
-        }
-        pub type reverse_iterator___traits_type = root::std::iterator_traits;
-        pub type reverse_iterator_iterator_type<_Iterator> = _Iterator;
-        pub type reverse_iterator_difference_type =
-            root::std::reverse_iterator___traits_type;
-        pub type reverse_iterator_pointer =
-            root::std::reverse_iterator___traits_type;
-        pub type reverse_iterator_reference =
-            root::std::reverse_iterator___traits_type;
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
         pub struct atomic {
         }
-        pub mod chrono {
-            #[allow(unused_imports)]
-            use self::super::super::super::root;
+        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 __off_t = ::std::os::raw::c_long;
-    pub type __off64_t = ::std::os::raw::c_long;
     pub mod mozilla {
         #[allow(unused_imports)]
         use self::super::super::root;
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct fallible_t {
             pub _address: u8,
         }
@@ -1134,17 +1111,19 @@ pub mod root {
             assert_eq!(::std::mem::size_of::<fallible_t>() , 1usize , concat !
                        ( "Size of: " , stringify ! ( fallible_t ) ));
             assert_eq! (::std::mem::align_of::<fallible_t>() , 1usize , concat
                         ! ( "Alignment of " , stringify ! ( fallible_t ) ));
         }
         impl Clone for fallible_t {
             fn clone(&self) -> Self { *self }
         }
-        /** Convenient aliases. */
+        pub type IntegralConstant_ValueType<T> = T;
+        pub type IntegralConstant_Type = u8;
+        /// Convenient aliases.
         pub type TrueType = u8;
         pub type FalseType = u8;
         pub mod detail {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(C)]
             #[derive(Debug, Copy)]
             pub struct nsStringRepr {
@@ -1298,55 +1277,30 @@ pub mod root {
                 SHARED = 4,
                 OWNED = 8,
                 FIXED = 16,
                 LITERAL = 32,
             }
             #[repr(u16)]
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum StringClassFlags { FIXED = 1, NULL_TERMINATED = 2, }
-            /**
- * LinkedList supports refcounted elements using this adapter class. Clients
- * using LinkedList<RefPtr<T>> will get a data structure that holds a strong
- * reference to T as long as T is in the list.
- */
+            /// LinkedList supports refcounted elements using this adapter class. Clients
+            /// using LinkedList<RefPtr<T>> will get a data structure that holds a strong
+            /// reference to T as long as T is in the list.
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct LinkedListElementTraits {
                 pub _address: u8,
             }
             pub type LinkedListElementTraits_RawType<T> = *mut T;
             pub type LinkedListElementTraits_ConstRawType<T> = *mut T;
             pub type LinkedListElementTraits_ClientType<T> = *mut T;
             pub type LinkedListElementTraits_ConstClientType<T> = *mut T;
             #[repr(C)]
             #[derive(Debug)]
-            pub struct GuardObjectNotifier {
-                pub mStatementDone: *mut bool,
-            }
-            #[test]
-            fn bindgen_test_layout_GuardObjectNotifier() {
-                assert_eq!(::std::mem::size_of::<GuardObjectNotifier>() ,
-                           8usize , concat ! (
-                           "Size of: " , stringify ! ( GuardObjectNotifier )
-                           ));
-                assert_eq! (::std::mem::align_of::<GuardObjectNotifier>() ,
-                            8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            GuardObjectNotifier ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const GuardObjectNotifier ) ) .
-                            mStatementDone as * const _ as usize } , 0usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            GuardObjectNotifier ) , "::" , stringify ! (
-                            mStatementDone ) ));
-            }
-            #[repr(C)]
-            #[derive(Debug)]
             pub struct GuardObjectNotificationReceiver {
                 pub mStatementDone: bool,
             }
             #[test]
             fn bindgen_test_layout_GuardObjectNotificationReceiver() {
                 assert_eq!(::std::mem::size_of::<GuardObjectNotificationReceiver>()
                            , 1usize , concat ! (
                            "Size of: " , stringify ! (
@@ -1363,41 +1317,18 @@ pub mod root {
                             "Alignment of field: " , stringify ! (
                             GuardObjectNotificationReceiver ) , "::" ,
                             stringify ! ( mStatementDone ) ));
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct WeakReference {
             }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct MutexImpl {
-                pub platformData_: [*mut ::std::os::raw::c_void; 5usize],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct MutexImpl_PlatformData {
-                _unused: [u8; 0],
-            }
-            #[test]
-            fn bindgen_test_layout_MutexImpl() {
-                assert_eq!(::std::mem::size_of::<MutexImpl>() , 40usize ,
-                           concat ! ( "Size of: " , stringify ! ( MutexImpl )
-                           ));
-                assert_eq! (::std::mem::align_of::<MutexImpl>() , 8usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( MutexImpl ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const MutexImpl ) ) . platformData_
-                            as * const _ as usize } , 0usize , concat ! (
-                            "Alignment of field: " , stringify ! ( MutexImpl )
-                            , "::" , stringify ! ( platformData_ ) ));
-            }
-        }
+        }
+        pub type Conditional_Type<A> = A;
         #[repr(u32)]
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum ArenaObjectID {
             eArenaObjectID_DummyBeforeFirstObjectID = 173,
             eArenaObjectID_GeckoStyleContext = 174,
             eArenaObjectID_nsLineBox = 175,
             eArenaObjectID_nsRuleNode = 176,
             eArenaObjectID_DisplayItemData = 177,
@@ -1451,44 +1382,48 @@ pub mod root {
             assert_eq! (::std::mem::align_of::<MallocAllocPolicy>() , 1usize ,
                         concat ! (
                         "Alignment of " , stringify ! ( MallocAllocPolicy )
                         ));
         }
         impl Clone for MallocAllocPolicy {
             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.
- */
+        /// 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 type MallocSizeOf =
             ::std::option::Option<unsafe extern "C" fn(p:
                                                            *const ::std::os::raw::c_void)
                                       -> usize>;
         #[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 mod css {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(C)]
             pub struct ErrorReporter {
                 pub mError: root::nsAutoString,
                 pub mErrorLine: ::nsstring::nsStringRepr,
                 pub mFileName: ::nsstring::nsStringRepr,
@@ -1577,46 +1512,44 @@ pub mod root {
                             & ( * ( 0 as * const ErrorReporter ) ) .
                             mErrorColNumber as * const _ as usize } , 240usize
                             , concat ! (
                             "Alignment of field: " , stringify ! (
                             ErrorReporter ) , "::" , stringify ! (
                             mErrorColNumber ) ));
             }
             #[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.
- *
- * Author sheets are the normal case: styles embedded in or linked
- * from HTML pages.  They are also the most restricted.
- *
- * User sheets can do anything author sheets can do, and also get
- * access to a few CSS extensions that are not yet suitable for
- * exposure on the public Web, but are very useful for expressing
- * user style overrides, such as @-moz-document rules.
- *
- * XXX: eUserSheetFeatures was added in bug 1035091, but some patches in
- * that bug never landed to use this enum value. Currently, all the features
- * in user sheet are also available in author sheet.
- *
- * Agent sheets have access to all author- and user-sheet features
- * plus more extensions that are necessary for internal use but,
- * again, not yet suitable for exposure on the public Web.  Some of
- * these are outright unsafe to expose; in particular, incorrect
- * styling of anonymous box pseudo-elements can violate layout
- * invariants.
- *
- * Agent sheets that do not use any unsafe rules could use
- * eSafeAgentSheetFeatures when creating the sheet. This enum value allows
- * Servo backend to recognize the sheets as the agent level, but Gecko
- * backend will parse it under _author_ level.
- */
+            /// 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.
+            ///
+            /// Author sheets are the normal case: styles embedded in or linked
+            /// from HTML pages.  They are also the most restricted.
+            ///
+            /// User sheets can do anything author sheets can do, and also get
+            /// access to a few CSS extensions that are not yet suitable for
+            /// exposure on the public Web, but are very useful for expressing
+            /// user style overrides, such as @-moz-document rules.
+            ///
+            /// XXX: eUserSheetFeatures was added in bug 1035091, but some patches in
+            /// that bug never landed to use this enum value. Currently, all the features
+            /// in user sheet are also available in author sheet.
+            ///
+            /// Agent sheets have access to all author- and user-sheet features
+            /// plus more extensions that are necessary for internal use but,
+            /// again, not yet suitable for exposure on the public Web.  Some of
+            /// these are outright unsafe to expose; in particular, incorrect
+            /// styling of anonymous box pseudo-elements can violate layout
+            /// invariants.
+            ///
+            /// Agent sheets that do not use any unsafe rules could use
+            /// eSafeAgentSheetFeatures when creating the sheet. This enum value allows
+            /// Servo backend to recognize the sheets as the agent level, but Gecko
+            /// backend will parse it under _author_ level.
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum SheetParsingMode {
                 eAuthorSheetFeatures = 0,
                 eUserSheetFeatures = 1,
                 eAgentSheetFeatures = 2,
                 eSafeAgentSheetFeatures = 3,
             }
             #[repr(C)]
@@ -1723,16 +1656,17 @@ pub mod root {
             #[test]
             fn bindgen_test_layout_Rule() {
                 assert_eq!(::std::mem::size_of::<Rule>() , 72usize , concat !
                            ( "Size of: " , stringify ! ( Rule ) ));
                 assert_eq! (::std::mem::align_of::<Rule>() , 8usize , concat !
                             ( "Alignment of " , stringify ! ( Rule ) ));
             }
             #[repr(C)]
+            #[derive(Debug)]
             pub struct Loader {
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
                 pub _mOwningThread: root::nsAutoOwningThread,
                 pub mSheets: root::nsAutoPtr<root::mozilla::css::Loader_Sheets>,
                 pub mParsingDatas: [u64; 10usize],
                 pub mPostedEvents: root::mozilla::css::Loader_LoadDataArray,
                 pub mObservers: [u64; 2usize],
                 pub mDocument: *mut root::nsIDocument,
@@ -2244,19 +2178,17 @@ pub mod root {
                 assert_eq! (unsafe {
                             & ( * ( 0 as * const ComplexColorValue ) ) .
                             _mOwningThread as * const _ as usize } , 32usize ,
                             concat ! (
                             "Alignment of field: " , stringify ! (
                             ComplexColorValue ) , "::" , stringify ! (
                             _mOwningThread ) ));
             }
-            /*********************
- * Style sheet reuse *
- *********************/
+            /// Style sheet reuse *
             #[repr(C)]
             #[derive(Debug)]
             pub struct LoaderReusableStyleSheets {
                 pub mReusableSheets: root::nsTArray<root::RefPtr<root::mozilla::StyleSheet>>,
             }
             #[test]
             fn bindgen_test_layout_LoaderReusableStyleSheets() {
                 assert_eq!(::std::mem::size_of::<LoaderReusableStyleSheets>()
@@ -2275,26 +2207,19 @@ pub mod root {
                             LoaderReusableStyleSheets ) , "::" , stringify ! (
                             mReusableSheets ) ));
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct SheetLoadData {
                 _unused: [u8; 0],
             }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct ImportRule {
-                _unused: [u8; 0],
-            }
             #[repr(i32)]
-            /**
- * Enum defining the type of URL matching function for a @-moz-document rule
- * condition.
- */
+            /// Enum defining the type of URL matching function for a @-moz-document rule
+            /// condition.
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum URLMatchingFunction {
                 eURL = 0,
                 eURLPrefix = 1,
                 eDomain = 2,
                 eRegExp = 3,
             }
             #[repr(C)]
@@ -2333,16 +2258,25 @@ pub mod root {
             pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct StaticRefPtr<T> {
             pub mRawPtr: *mut T,
             pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<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 =
@@ -2375,97 +2309,25 @@ pub mod root {
             root::mozilla::LinkedList_Traits;
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct LinkedList_Iterator {
             pub mCurrent: root::mozilla::LinkedList_RawType,
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
-        pub struct AlignedStorage2 {
-            pub u: root::mozilla::AlignedStorage2_U,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct AlignedStorage2_U {
-            pub mBytes: root::__BindgenUnionField<*mut ::std::os::raw::c_char>,
-            pub mDummy: root::__BindgenUnionField<u64>,
-            pub bindgen_union_field: u64,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
         pub struct Maybe {
         }
         pub type Maybe_ValueType<T> = T;
         pub mod gfx {
             #[allow(unused_imports)]
             use self::super::super::super::root;
-            pub type IntRegion = [u64; 3usize];
             pub type Float = f32;
             #[repr(C)]
             #[derive(Debug, Copy)]
-            pub struct Color {
-                pub _bindgen_opaque_blob: [u32; 4usize],
-            }
-            #[test]
-            fn bindgen_test_layout_Color() {
-                assert_eq!(::std::mem::size_of::<Color>() , 16usize , concat !
-                           ( "Size of: " , stringify ! ( Color ) ));
-                assert_eq! (::std::mem::align_of::<Color>() , 4usize , concat
-                            ! ( "Alignment of " , stringify ! ( Color ) ));
-            }
-            impl Clone for Color {
-                fn clone(&self) -> Self { *self }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct PointTyped {
-            }
-            pub type PointTyped_Coord = u8;
-            pub type PointTyped_Super = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct SizeTyped {
-            }
-            pub type SizeTyped_Super = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct IntPointTyped {
-            }
-            pub type IntPointTyped_ToInt = u32;
-            pub type IntPointTyped_Coord = u8;
-            pub type IntPointTyped_Super = u8;
-            pub type IntPoint = [u32; 2usize];
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct IntSizeTyped {
-            }
-            pub type IntSizeTyped_ToInt = u32;
-            pub type IntSizeTyped_Super = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct RectTyped {
-            }
-            pub type RectTyped_Super = u8;
-            pub type IntMargin = [u32; 4usize];
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct MarginTyped {
-            }
-            pub type MarginTyped_Super = u8;
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct IntRectTyped {
-            }
-            pub type IntRectTyped_Super = u8;
-            pub type IntRectTyped_Self = u8;
-            pub type IntRectTyped_ToInt = u32;
-            pub type IntRect = [u32; 4usize];
-            #[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 ! (
@@ -2486,890 +2348,28 @@ pub mod root {
                             FontVariation ) , "::" , stringify ! ( mValue )
                             ));
             }
             impl Clone for FontVariation {
                 fn clone(&self) -> Self { *self }
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct ScaleFactor {
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct ScaleFactors2D {
-            }
-            pub type Matrix4x4 = [u32; 16usize];
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct SourceSurface {
                 _unused: [u8; 0],
             }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct DrawTarget {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Path {
-                _unused: [u8; 0],
-            }
         }
         pub mod layers {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct LayerManager {
                 _unused: [u8; 0],
             }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct ContainerLayer {
-                _unused: [u8; 0],
-            }
-            /**
- * The viewport and displayport metrics for the painted frame at the
- * time of a layer-tree transaction.  These metrics are especially
- * useful for shadow layers, because the metrics values are updated
- * atomically with new pixels.
- */
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct FrameMetrics {
-                pub mScrollId: root::mozilla::layers::FrameMetrics_ViewID,
-                pub mPresShellResolution: f32,
-                pub mCompositionBounds: root::mozilla::ParentLayerRect,
-                pub mDisplayPort: root::mozilla::CSSRect,
-                pub mCriticalDisplayPort: root::mozilla::CSSRect,
-                pub mScrollableRect: root::mozilla::CSSRect,
-                pub mCumulativeResolution: root::mozilla::LayoutDeviceToLayerScale2D,
-                pub mDevPixelsPerCSSPixel: root::mozilla::CSSToLayoutDeviceScale,
-                pub mScrollOffset: root::mozilla::CSSPoint,
-                pub mZoom: root::mozilla::CSSToParentLayerScale2D,
-                pub mScrollGeneration: u32,
-                pub mSmoothScrollOffset: root::mozilla::CSSPoint,
-                pub mRootCompositionSize: root::mozilla::CSSSize,
-                pub mDisplayPortMargins: root::mozilla::ScreenMargin,
-                pub mPresShellId: u32,
-                pub mViewport: root::mozilla::CSSRect,
-                pub mExtraResolution: root::mozilla::ScreenToLayerScale2D,
-                pub mPaintRequestTime: root::mozilla::TimeStamp,
-                pub mScrollUpdateType: root::mozilla::layers::FrameMetrics_ScrollOffsetUpdateType,
-                pub _bitfield_1: u8,
-                pub __bindgen_padding_0: [u16; 3usize],
-            }
-            pub type FrameMetrics_ViewID = u64;
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum FrameMetrics_ScrollOffsetUpdateType {
-                eNone = 0,
-                eMainThread = 1,
-                ePending = 2,
-                eUserAction = 3,
-                eRestore = 4,
-            }
-            extern "C" {
-                #[link_name =
-                      "_ZN7mozilla6layers12FrameMetrics14NULL_SCROLL_IDE"]
-                pub static FrameMetrics_NULL_SCROLL_ID:
-                           root::mozilla::layers::FrameMetrics_ViewID;
-            }
-            pub const FrameMetrics_START_SCROLL_ID:
-                      root::mozilla::layers::FrameMetrics_ViewID =
-                2;
-            pub const FrameMetrics_sScrollOffsetUpdateTypeCount: usize = 5;
-            extern "C" {
-                #[link_name =
-                      "_ZN7mozilla6layers12FrameMetrics30sHighestScrollOffsetUpdateTypeE"]
-                pub static FrameMetrics_sHighestScrollOffsetUpdateType:
-                           root::mozilla::layers::FrameMetrics_ScrollOffsetUpdateType;
-            }
-            #[test]
-            fn bindgen_test_layout_FrameMetrics() {
-                assert_eq!(::std::mem::size_of::<FrameMetrics>() , 184usize ,
-                           concat ! (
-                           "Size of: " , stringify ! ( FrameMetrics ) ));
-                assert_eq! (::std::mem::align_of::<FrameMetrics>() , 8usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( FrameMetrics ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) . mScrollId
-                            as * const _ as usize } , 0usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! ( mScrollId )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mPresShellResolution as * const _ as usize } ,
-                            8usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mPresShellResolution ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mCompositionBounds as * const _ as usize } ,
-                            12usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mCompositionBounds ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mDisplayPort as * const _ as usize } , 28usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! ( mDisplayPort
-                            ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mCriticalDisplayPort as * const _ as usize } ,
-                            44usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mCriticalDisplayPort ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mScrollableRect as * const _ as usize } , 60usize
-                            , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mScrollableRect ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mCumulativeResolution as * const _ as usize } ,
-                            76usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mCumulativeResolution ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mDevPixelsPerCSSPixel as * const _ as usize } ,
-                            84usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mDevPixelsPerCSSPixel ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mScrollOffset as * const _ as usize } , 88usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mScrollOffset ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) . mZoom as *
-                            const _ as usize } , 96usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! ( mZoom ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mScrollGeneration as * const _ as usize } ,
-                            104usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mScrollGeneration ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mSmoothScrollOffset as * const _ as usize } ,
-                            108usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mSmoothScrollOffset ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mRootCompositionSize as * const _ as usize } ,
-                            116usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mRootCompositionSize ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mDisplayPortMargins as * const _ as usize } ,
-                            124usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mDisplayPortMargins ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mPresShellId as * const _ as usize } , 140usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! ( mPresShellId
-                            ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) . mViewport
-                            as * const _ as usize } , 144usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! ( mViewport )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mExtraResolution as * const _ as usize } ,
-                            160usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mExtraResolution ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mPaintRequestTime as * const _ as usize } ,
-                            168usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mPaintRequestTime ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const FrameMetrics ) ) .
-                            mScrollUpdateType as * const _ as usize } ,
-                            176usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            FrameMetrics ) , "::" , stringify ! (
-                            mScrollUpdateType ) ));
-            }
-            impl Clone for FrameMetrics {
-                fn clone(&self) -> Self { *self }
-            }
-            impl FrameMetrics {
-                #[inline]
-                pub fn mIsRootContent(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 1u64 as u8;
-                    let val = (unit_field_val & mask) >> 0usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mIsRootContent(&mut self, val: bool) {
-                    let mask = 1u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 0usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn mDoSmoothScroll(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 2u64 as u8;
-                    let val = (unit_field_val & mask) >> 1usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mDoSmoothScroll(&mut self, val: bool) {
-                    let mask = 2u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 1usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn mUseDisplayPortMargins(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 4u64 as u8;
-                    let val = (unit_field_val & mask) >> 2usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mUseDisplayPortMargins(&mut self, val: bool) {
-                    let mask = 4u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 2usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn mIsScrollInfoLayer(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 8u64 as u8;
-                    let val = (unit_field_val & mask) >> 3usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mIsScrollInfoLayer(&mut self, val: bool) {
-                    let mask = 8u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 3usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn new_bitfield_1(mIsRootContent: bool,
-                                      mDoSmoothScroll: bool,
-                                      mUseDisplayPortMargins: bool,
-                                      mIsScrollInfoLayer: bool) -> u8 {
-                    ({
-                         ({
-                              ({
-                                   ({ 0 } |
-                                        ((mIsRootContent as u8 as u8) <<
-                                             0usize) & (1u64 as u8))
-                               } |
-                                   ((mDoSmoothScroll as u8 as u8) << 1usize) &
-                                       (2u64 as u8))
-                          } |
-                              ((mUseDisplayPortMargins as u8 as u8) << 2usize)
-                                  & (4u64 as u8))
-                     } |
-                         ((mIsScrollInfoLayer as u8 as u8) << 3usize) &
-                             (8u64 as u8))
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct ScrollSnapInfo {
-                pub mScrollSnapTypeX: u8,
-                pub mScrollSnapTypeY: u8,
-                pub mScrollSnapIntervalX: [u32; 2usize],
-                pub mScrollSnapIntervalY: [u32; 2usize],
-                pub mScrollSnapDestination: root::nsPoint,
-                pub mScrollSnapCoordinates: root::nsTArray<root::nsPoint>,
-            }
-            #[test]
-            fn bindgen_test_layout_ScrollSnapInfo() {
-                assert_eq!(::std::mem::size_of::<ScrollSnapInfo>() , 40usize ,
-                           concat ! (
-                           "Size of: " , stringify ! ( ScrollSnapInfo ) ));
-                assert_eq! (::std::mem::align_of::<ScrollSnapInfo>() , 8usize
-                            , concat ! (
-                            "Alignment of " , stringify ! ( ScrollSnapInfo )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollSnapInfo ) ) .
-                            mScrollSnapTypeX as * const _ as usize } , 0usize
-                            , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollSnapInfo ) , "::" , stringify ! (
-                            mScrollSnapTypeX ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollSnapInfo ) ) .
-                            mScrollSnapTypeY as * const _ as usize } , 1usize
-                            , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollSnapInfo ) , "::" , stringify ! (
-                            mScrollSnapTypeY ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollSnapInfo ) ) .
-                            mScrollSnapIntervalX as * const _ as usize } ,
-                            4usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollSnapInfo ) , "::" , stringify ! (
-                            mScrollSnapIntervalX ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollSnapInfo ) ) .
-                            mScrollSnapIntervalY as * const _ as usize } ,
-                            12usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollSnapInfo ) , "::" , stringify ! (
-                            mScrollSnapIntervalY ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollSnapInfo ) ) .
-                            mScrollSnapDestination as * const _ as usize } ,
-                            20usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollSnapInfo ) , "::" , stringify ! (
-                            mScrollSnapDestination ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollSnapInfo ) ) .
-                            mScrollSnapCoordinates as * const _ as usize } ,
-                            32usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollSnapInfo ) , "::" , stringify ! (
-                            mScrollSnapCoordinates ) ));
-            }
-            /**
- * A clip that applies to a layer, that may be scrolled by some of the
- * scroll frames associated with the layer.
- */
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct LayerClip {
-                pub mClipRect: root::mozilla::ParentLayerIntRect,
-                pub mMaskLayerIndex: [u64; 2usize],
-            }
-            #[test]
-            fn bindgen_test_layout_LayerClip() {
-                assert_eq!(::std::mem::size_of::<LayerClip>() , 32usize ,
-                           concat ! ( "Size of: " , stringify ! ( LayerClip )
-                           ));
-                assert_eq! (::std::mem::align_of::<LayerClip>() , 8usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( LayerClip ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const LayerClip ) ) . mClipRect as
-                            * const _ as usize } , 0usize , concat ! (
-                            "Alignment of field: " , stringify ! ( LayerClip )
-                            , "::" , stringify ! ( mClipRect ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const LayerClip ) ) .
-                            mMaskLayerIndex as * const _ as usize } , 16usize
-                            , concat ! (
-                            "Alignment of field: " , stringify ! ( LayerClip )
-                            , "::" , stringify ! ( mMaskLayerIndex ) ));
-            }
-            /**
- * Metadata about a scroll frame that's stored in the layer tree for use by
- * the compositor (including APZ). This includes the scroll frame's FrameMetrics,
- * as well as other metadata. We don't put the other metadata into FrameMetrics
- * to avoid FrameMetrics becoming too bloated (as a FrameMetrics is e.g. sent
- * over IPC for every repaint request for every active scroll frame).
- */
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct ScrollMetadata {
-                pub mMetrics: root::mozilla::layers::FrameMetrics,
-                pub mSnapInfo: root::mozilla::layers::ScrollSnapInfo,
-                pub mScrollParentId: root::mozilla::layers::ScrollMetadata_ViewID,
-                pub mBackgroundColor: root::mozilla::gfx::Color,
-                pub mContentDescription: root::nsCString,
-                pub mLineScrollAmount: root::mozilla::LayoutDeviceIntSize,
-                pub mPageScrollAmount: root::mozilla::LayoutDeviceIntSize,
-                pub mScrollClip: [u64; 5usize],
-                pub _bitfield_1: u8,
-                pub __bindgen_padding_0: [u8; 7usize],
-            }
-            pub type ScrollMetadata_ViewID =
-                root::mozilla::layers::FrameMetrics_ViewID;
-            extern "C" {
-                #[link_name =
-                      "_ZN7mozilla6layers14ScrollMetadata13sNullMetadataE"]
-                pub static mut ScrollMetadata_sNullMetadata:
-                           root::mozilla::StaticAutoPtr<root::mozilla::layers::ScrollMetadata>;
-            }
-            #[test]
-            fn bindgen_test_layout_ScrollMetadata() {
-                assert_eq!(::std::mem::size_of::<ScrollMetadata>() , 328usize
-                           , concat ! (
-                           "Size of: " , stringify ! ( ScrollMetadata ) ));
-                assert_eq! (::std::mem::align_of::<ScrollMetadata>() , 8usize
-                            , concat ! (
-                            "Alignment of " , stringify ! ( ScrollMetadata )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollMetadata ) ) . mMetrics
-                            as * const _ as usize } , 0usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollMetadata ) , "::" , stringify ! ( mMetrics )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollMetadata ) ) .
-                            mSnapInfo as * const _ as usize } , 184usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollMetadata ) , "::" , stringify ! ( mSnapInfo
-                            ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollMetadata ) ) .
-                            mScrollParentId as * const _ as usize } , 224usize
-                            , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollMetadata ) , "::" , stringify ! (
-                            mScrollParentId ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollMetadata ) ) .
-                            mBackgroundColor as * const _ as usize } ,
-                            232usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollMetadata ) , "::" , stringify ! (
-                            mBackgroundColor ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollMetadata ) ) .
-                            mContentDescription as * const _ as usize } ,
-                            248usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollMetadata ) , "::" , stringify ! (
-                            mContentDescription ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollMetadata ) ) .
-                            mLineScrollAmount as * const _ as usize } ,
-                            264usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollMetadata ) , "::" , stringify ! (
-                            mLineScrollAmount ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollMetadata ) ) .
-                            mPageScrollAmount as * const _ as usize } ,
-                            272usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollMetadata ) , "::" , stringify ! (
-                            mPageScrollAmount ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollMetadata ) ) .
-                            mScrollClip as * const _ as usize } , 280usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollMetadata ) , "::" , stringify ! (
-                            mScrollClip ) ));
-            }
-            impl ScrollMetadata {
-                #[inline]
-                pub fn mHasScrollgrab(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 1u64 as u8;
-                    let val = (unit_field_val & mask) >> 0usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mHasScrollgrab(&mut self, val: bool) {
-                    let mask = 1u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 0usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn mAllowVerticalScrollWithWheel(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 2u64 as u8;
-                    let val = (unit_field_val & mask) >> 1usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mAllowVerticalScrollWithWheel(&mut self,
-                                                         val: bool) {
-                    let mask = 2u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 1usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn mIsLayersIdRoot(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 4u64 as u8;
-                    let val = (unit_field_val & mask) >> 2usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mIsLayersIdRoot(&mut self, val: bool) {
-                    let mask = 4u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 2usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn mUsesContainerScrolling(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 8u64 as u8;
-                    let val = (unit_field_val & mask) >> 3usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mUsesContainerScrolling(&mut self, val: bool) {
-                    let mask = 8u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 3usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn mForceDisableApz(&self) -> bool {
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    let mask = 16u64 as u8;
-                    let val = (unit_field_val & mask) >> 4usize;
-                    unsafe { ::std::mem::transmute(val as u8) }
-                }
-                #[inline]
-                pub fn set_mForceDisableApz(&mut self, val: bool) {
-                    let mask = 16u64 as u8;
-                    let val = val as u8 as u8;
-                    let mut unit_field_val: u8 =
-                        unsafe { ::std::mem::uninitialized() };
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&self._bitfield_1 as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut unit_field_val as
-                                                            *mut u8 as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>())
-                    };
-                    unit_field_val &= !mask;
-                    unit_field_val |= (val << 4usize) & mask;
-                    unsafe {
-                        ::std::ptr::copy_nonoverlapping(&unit_field_val as
-                                                            *const _ as
-                                                            *const u8,
-                                                        &mut self._bitfield_1
-                                                            as *mut _ as
-                                                            *mut u8,
-                                                        ::std::mem::size_of::<u8>());
-                    }
-                }
-                #[inline]
-                pub fn new_bitfield_1(mHasScrollgrab: bool,
-                                      mAllowVerticalScrollWithWheel: bool,
-                                      mIsLayersIdRoot: bool,
-                                      mUsesContainerScrolling: bool,
-                                      mForceDisableApz: bool) -> u8 {
-                    ({
-                         ({
-                              ({
-                                   ({
-                                        ({ 0 } |
-                                             ((mHasScrollgrab as u8 as u8) <<
-                                                  0usize) & (1u64 as u8))
-                                    } |
-                                        ((mAllowVerticalScrollWithWheel as u8
-                                              as u8) << 1usize) &
-                                            (2u64 as u8))
-                               } |
-                                   ((mIsLayersIdRoot as u8 as u8) << 2usize) &
-                                       (4u64 as u8))
-                          } |
-                              ((mUsesContainerScrolling as u8 as u8) <<
-                                   3usize) & (8u64 as u8))
-                     } |
-                         ((mForceDisableApz as u8 as u8) << 4usize) &
-                             (16u64 as u8))
-                }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Layer {
-                _unused: [u8; 0],
-            }
         }
         pub mod dom {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(u8)]
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum PlaybackDirection {
                 Normal = 0,
@@ -3387,245 +2387,24 @@ pub mod root {
                 Both = 3,
                 Auto = 4,
                 EndGuard_ = 5,
             }
             pub mod binding_detail {
                 #[allow(unused_imports)]
                 use self::super::super::super::super::root;
                 #[repr(C)]
-                #[derive(Debug)]
-                pub struct FastErrorResult {
-                    pub _base: root::mozilla::binding_danger::TErrorResult,
-                }
-                #[test]
-                fn bindgen_test_layout_FastErrorResult() {
-                    assert_eq!(::std::mem::size_of::<FastErrorResult>() ,
-                               32usize , concat ! (
-                               "Size of: " , stringify ! ( FastErrorResult )
-                               ));
-                    assert_eq! (::std::mem::align_of::<FastErrorResult>() ,
-                                8usize , concat ! (
-                                "Alignment of " , stringify ! (
-                                FastErrorResult ) ));
-                }
-                #[repr(C)]
-                pub struct FakeString {
-                    pub mData: *mut root::mozilla::detail::nsStringRepr_char_type,
-                    pub mLength: root::mozilla::detail::nsStringRepr_size_type,
-                    pub mDataFlags: root::mozilla::detail::nsStringRepr_DataFlags,
-                    pub mClassFlags: root::mozilla::detail::nsStringRepr_ClassFlags,
-                    pub mInlineStorage: [root::mozilla::detail::nsStringRepr_char_type; 64usize],
-                }
-                #[repr(C)]
-                #[derive(Debug)]
-                pub struct FakeString_StringAsserter {
-                    pub _base: ::nsstring::nsStringRepr,
-                }
-                #[test]
-                fn bindgen_test_layout_FakeString_StringAsserter() {
-                    assert_eq!(::std::mem::size_of::<FakeString_StringAsserter>()
-                               , 16usize , concat ! (
-                               "Size of: " , stringify ! (
-                               FakeString_StringAsserter ) ));
-                    assert_eq! (::std::mem::align_of::<FakeString_StringAsserter>()
-                                , 8usize , concat ! (
-                                "Alignment of " , stringify ! (
-                                FakeString_StringAsserter ) ));
-                }
-                pub const FakeString_sInlineCapacity: usize = 64;
-                #[test]
-                fn bindgen_test_layout_FakeString() {
-                    assert_eq!(::std::mem::size_of::<FakeString>() , 144usize
-                               , concat ! (
-                               "Size of: " , stringify ! ( FakeString ) ));
-                    assert_eq! (::std::mem::align_of::<FakeString>() , 8usize
-                                , concat ! (
-                                "Alignment of " , stringify ! ( FakeString )
-                                ));
-                    assert_eq! (unsafe {
-                                & ( * ( 0 as * const FakeString ) ) . mData as
-                                * const _ as usize } , 0usize , concat ! (
-                                "Alignment of field: " , stringify ! (
-                                FakeString ) , "::" , stringify ! ( mData )
-                                ));
-                    assert_eq! (unsafe {
-                                & ( * ( 0 as * const FakeString ) ) . mLength
-                                as * const _ as usize } , 8usize , concat ! (
-                                "Alignment of field: " , stringify ! (
-                                FakeString ) , "::" , stringify ! ( mLength )
-                                ));
-                    assert_eq! (unsafe {
-                                & ( * ( 0 as * const FakeString ) ) .
-                                mDataFlags as * const _ as usize } , 12usize ,
-                                concat ! (
-                                "Alignment of field: " , stringify ! (
-                                FakeString ) , "::" , stringify ! ( mDataFlags
-                                ) ));
-                    assert_eq! (unsafe {
-                                & ( * ( 0 as * const FakeString ) ) .
-                                mClassFlags as * const _ as usize } , 14usize
-                                , concat ! (
-                                "Alignment of field: " , stringify ! (
-                                FakeString ) , "::" , stringify ! (
-                                mClassFlags ) ));
-                    assert_eq! (unsafe {
-                                & ( * ( 0 as * const FakeString ) ) .
-                                mInlineStorage as * const _ as usize } ,
-                                16usize , concat ! (
-                                "Alignment of field: " , stringify ! (
-                                FakeString ) , "::" , stringify ! (
-                                mInlineStorage ) ));
-                }
-                #[repr(C)]
-                #[derive(Debug)]
-                pub struct FastElementCreationOptions {
-                    pub _base: root::mozilla::dom::ElementCreationOptions,
-                }
-                #[test]
-                fn bindgen_test_layout_FastElementCreationOptions() {
-                    assert_eq!(::std::mem::size_of::<FastElementCreationOptions>()
-                               , 56usize , concat ! (
-                               "Size of: " , stringify ! (
-                               FastElementCreationOptions ) ));
-                    assert_eq! (::std::mem::align_of::<FastElementCreationOptions>()
-                                , 8usize , concat ! (
-                                "Alignment of " , stringify ! (
-                                FastElementCreationOptions ) ));
-                }
-                #[repr(C)]
                 #[derive(Debug, Copy, Clone)]
                 pub struct RecordEntry<KeyType, ValueType> {
                     pub mKey: KeyType,
                     pub mValue: ValueType,
                     pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<KeyType>>,
                     pub _phantom_1: ::std::marker::PhantomData<::std::cell::UnsafeCell<ValueType>>,
                 }
             }
-            /**
- * A class for representing string return values.  This can be either passed to
- * callees that have an nsString or nsAString out param or passed to a callee
- * that actually knows about this class and can work with it.  Such a callee may
- * call SetStringBuffer or SetEphemeralStringBuffer or SetOwnedString or
- * SetOwnedAtom on this object.  It's only OK to call
- * SetStringBuffer/SetOwnedString/SetOwnedAtom if the caller of the method in
- * question plans to keep holding a strong ref to the stringbuffer involved,
- * whether it's a raw nsStringBuffer, or stored inside the string or atom being
- * passed.  In the string/atom cases that means the caller must own the string
- * or atom, and not mutate it (in the string case) for the lifetime of the
- * DOMString.
- *
- * The proper way to store a value in this class is to either to do nothing
- * (which leaves this as an empty string), to call
- * SetStringBuffer/SetEphemeralStringBuffer with a non-null stringbuffer, to
- * call SetOwnedString, to call SetOwnedAtom, to call SetNull(), or to call
- * AsAString() and set the value in the resulting nsString.  These options are
- * mutually exclusive! Don't do more than one of them.
- *
- * The proper way to extract a value is to check IsNull().  If not null, then
- * check HasStringBuffer().  If that's true, check for a zero length, and if the
- * length is nonzero call StringBuffer().  If the length is zero this is the
- * empty string.  If HasStringBuffer() returns false, call AsAString() and get
- * the value from that.
- */
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct DOMString {
-                pub mString: [u64; 21usize],
-                pub mStringBuffer: *mut root::nsStringBuffer,
-                pub mLength: u32,
-                pub mIsNull: bool,
-                pub mStringBufferOwned: bool,
-            }
-            #[repr(u32)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum DOMString_NullHandling {
-                eTreatNullAsNull = 0,
-                eTreatNullAsEmpty = 1,
-                eNullNotExpected = 2,
-            }
-            #[test]
-            fn bindgen_test_layout_DOMString() {
-                assert_eq!(::std::mem::size_of::<DOMString>() , 184usize ,
-                           concat ! ( "Size of: " , stringify ! ( DOMString )
-                           ));
-                assert_eq! (::std::mem::align_of::<DOMString>() , 8usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( DOMString ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const DOMString ) ) . mString as *
-                            const _ as usize } , 0usize , concat ! (
-                            "Alignment of field: " , stringify ! ( DOMString )
-                            , "::" , stringify ! ( mString ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const DOMString ) ) . mStringBuffer
-                            as * const _ as usize } , 168usize , concat ! (
-                            "Alignment of field: " , stringify ! ( DOMString )
-                            , "::" , stringify ! ( mStringBuffer ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const DOMString ) ) . mLength as *
-                            const _ as usize } , 176usize , concat ! (
-                            "Alignment of field: " , stringify ! ( DOMString )
-                            , "::" , stringify ! ( mLength ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const DOMString ) ) . mIsNull as *
-                            const _ as usize } , 180usize , concat ! (
-                            "Alignment of field: " , stringify ! ( DOMString )
-                            , "::" , stringify ! ( mIsNull ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const DOMString ) ) .
-                            mStringBufferOwned as * const _ as usize } ,
-                            181usize , concat ! (
-                            "Alignment of field: " , stringify ! ( DOMString )
-                            , "::" , stringify ! ( mStringBufferOwned ) ));
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DictionaryBase {
-                pub mIsAnyMemberPresent: bool,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DictionaryBase_FastDictionaryInitializer {
-                pub _address: u8,
-            }
-            #[test]
-            fn bindgen_test_layout_DictionaryBase_FastDictionaryInitializer() {
-                assert_eq!(::std::mem::size_of::<DictionaryBase_FastDictionaryInitializer>()
-                           , 1usize , concat ! (
-                           "Size of: " , stringify ! (
-                           DictionaryBase_FastDictionaryInitializer ) ));
-                assert_eq! (::std::mem::align_of::<DictionaryBase_FastDictionaryInitializer>()
-                            , 1usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            DictionaryBase_FastDictionaryInitializer ) ));
-            }
-            impl Clone for DictionaryBase_FastDictionaryInitializer {
-                fn clone(&self) -> Self { *self }
-            }
-            #[test]
-            fn bindgen_test_layout_DictionaryBase() {
-                assert_eq!(::std::mem::size_of::<DictionaryBase>() , 1usize ,
-                           concat ! (
-                           "Size of: " , stringify ! ( DictionaryBase ) ));
-                assert_eq! (::std::mem::align_of::<DictionaryBase>() , 1usize
-                            , concat ! (
-                            "Alignment of " , stringify ! ( DictionaryBase )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const DictionaryBase ) ) .
-                            mIsAnyMemberPresent as * const _ as usize } ,
-                            0usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            DictionaryBase ) , "::" , stringify ! (
-                            mIsAnyMemberPresent ) ));
-            }
-            impl Clone for DictionaryBase {
-                fn clone(&self) -> Self { *self }
-            }
             #[repr(C)]
             #[derive(Debug, Copy)]
             pub struct AllOwningUnionBase {
                 pub _address: u8,
             }
             #[test]
             fn bindgen_test_layout_AllOwningUnionBase() {
                 assert_eq!(::std::mem::size_of::<AllOwningUnionBase>() ,
@@ -3675,152 +2454,28 @@ pub mod root {
                             mGlobalObject as * const _ as usize } , 32usize ,
                             concat ! (
                             "Alignment of field: " , stringify ! (
                             GlobalObject ) , "::" , stringify ! (
                             mGlobalObject ) ));
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct Optional {
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct NonNull<T> {
-                pub ptr: *mut T,
-                pub inited: bool,
-                pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct Sequence {
             }
             #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ParentObject {
-                pub mObject: *const root::nsISupports,
-                pub mWrapperCache: *const root::nsWrapperCache,
-                pub mUseXBLScope: bool,
-            }
-            #[test]
-            fn bindgen_test_layout_ParentObject() {
-                assert_eq!(::std::mem::size_of::<ParentObject>() , 24usize ,
-                           concat ! (
-                           "Size of: " , stringify ! ( ParentObject ) ));
-                assert_eq! (::std::mem::align_of::<ParentObject>() , 8usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( ParentObject ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ParentObject ) ) . mObject as
-                            * const _ as usize } , 0usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ParentObject ) , "::" , stringify ! ( mObject )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ParentObject ) ) .
-                            mWrapperCache as * const _ as usize } , 8usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ParentObject ) , "::" , stringify ! (
-                            mWrapperCache ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ParentObject ) ) .
-                            mUseXBLScope as * const _ as usize } , 16usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ParentObject ) , "::" , stringify ! ( mUseXBLScope
-                            ) ));
-            }
-            impl Clone for ParentObject {
-                fn clone(&self) -> Self { *self }
-            }
-            #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct Nullable {
             }
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum CSSStyleSheetParsingMode {
-                Author = 0,
-                User = 1,
-                Agent = 2,
-                EndGuard_ = 3,
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct OriginAttributesDictionary {
-                pub _base: root::mozilla::dom::DictionaryBase,
-                pub mAppId: u32,
-                pub mFirstPartyDomain: ::nsstring::nsStringRepr,
-                pub mInIsolatedMozBrowser: bool,
-                pub mPrivateBrowsingId: u32,
-                pub mUserContextId: u32,
-            }
-            #[test]
-            fn bindgen_test_layout_OriginAttributesDictionary() {
-                assert_eq!(::std::mem::size_of::<OriginAttributesDictionary>()
-                           , 40usize , concat ! (
-                           "Size of: " , stringify ! (
-                           OriginAttributesDictionary ) ));
-                assert_eq! (::std::mem::align_of::<OriginAttributesDictionary>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            OriginAttributesDictionary ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const OriginAttributesDictionary )
-                            ) . mAppId as * const _ as usize } , 4usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            OriginAttributesDictionary ) , "::" , stringify !
-                            ( mAppId ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const OriginAttributesDictionary )
-                            ) . mFirstPartyDomain as * const _ as usize } ,
-                            8usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            OriginAttributesDictionary ) , "::" , stringify !
-                            ( mFirstPartyDomain ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const OriginAttributesDictionary )
-                            ) . mInIsolatedMozBrowser as * const _ as usize }
-                            , 24usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            OriginAttributesDictionary ) , "::" , stringify !
-                            ( mInIsolatedMozBrowser ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const OriginAttributesDictionary )
-                            ) . mPrivateBrowsingId as * const _ as usize } ,
-                            28usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            OriginAttributesDictionary ) , "::" , stringify !
-                            ( mPrivateBrowsingId ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const OriginAttributesDictionary )
-                            ) . mUserContextId as * const _ as usize } ,
-                            32usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            OriginAttributesDictionary ) , "::" , stringify !
-                            ( mUserContextId ) ));
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Promise {
-                _unused: [u8; 0],
-            }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct CSSImportRule {
                 _unused: [u8; 0],
             }
             #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct CSSRuleList {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
             #[derive(Debug)]
             pub struct MediaList {
                 pub _base: root::nsIDOMMediaList,
                 pub _base_1: root::nsWrapperCache,
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
                 pub _mOwningThread: root::nsAutoOwningThread,
                 pub mStyleSheet: *mut root::mozilla::StyleSheet,
             }
@@ -3902,30 +2557,29 @@ pub mod root {
                             ) , "::" , stringify ! ( mAlgorithmType ) ));
                 assert_eq! (unsafe {
                             & ( * ( 0 as * const SRIMetadata ) ) . mEmpty as *
                             const _ as usize } , 41usize , concat ! (
                             "Alignment of field: " , stringify ! ( SRIMetadata
                             ) , "::" , stringify ! ( mEmpty ) ));
             }
             #[repr(C)]
+            #[derive(Debug)]
             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.
-   */
+            /// 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() {
@@ -4007,24 +2661,22 @@ pub mod root {
                             "Alignment of field: " , stringify ! ( Element ) ,
                             "::" , stringify ! ( mServoData ) ));
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct ShadowRoot {
                 _unused: [u8; 0],
             }
-            /**
- * 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).
- */
+            /// 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() {
@@ -4047,16 +2699,17 @@ pub mod root {
                             "Alignment of field: " , stringify ! (
                             BorrowedAttrInfo ) , "::" , stringify ! ( mValue )
                             ));
             }
             impl Clone for BorrowedAttrInfo {
                 fn clone(&self) -> Self { *self }
             }
             #[repr(C)]
+            #[derive(Debug)]
             pub struct NodeInfo {
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
                 pub _mOwningThread: root::nsAutoOwningThread,
                 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,
@@ -4236,57 +2889,16 @@ pub mod root {
                            concat ! (
                            "Size of: " , stringify ! ( EventTarget ) ));
                 assert_eq! (::std::mem::align_of::<EventTarget>() , 8usize ,
                             concat ! (
                             "Alignment of " , stringify ! ( EventTarget ) ));
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct AddEventListenerOptionsOrBoolean {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Event {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct EventListener {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct EventListenerOptionsOrBoolean {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct EventHandlerNonNull {
-                pub _base: root::mozilla::dom::CallbackFunction,
-            }
-            #[test]
-            fn bindgen_test_layout_EventHandlerNonNull() {
-                assert_eq!(::std::mem::size_of::<EventHandlerNonNull>() ,
-                           56usize , concat ! (
-                           "Size of: " , stringify ! ( EventHandlerNonNull )
-                           ));
-                assert_eq! (::std::mem::align_of::<EventHandlerNonNull>() ,
-                            8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            EventHandlerNonNull ) ));
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct AccessibleNode {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct BoxQuadOptions {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct ConvertCoordinateOptions {
                 _unused: [u8; 0],
             }
@@ -4357,44 +2969,28 @@ pub mod root {
             pub enum OwningNodeOrString_Type {
                 eUninitialized = 0,
                 eNode = 1,
                 eString = 2,
             }
             #[repr(C)]
             #[derive(Debug, Copy)]
             pub struct OwningNodeOrString_Value {
-                pub mNode: root::__BindgenUnionField<root::mozilla::dom::UnionMember>,
-                pub mString: root::__BindgenUnionField<root::mozilla::dom::UnionMember>,
-                pub bindgen_union_field: [u64; 2usize],
+                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 ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const OwningNodeOrString_Value ) )
-                            . mNode as * const _ as usize } , 0usize , concat
-                            ! (
-                            "Alignment of field: " , stringify ! (
-                            OwningNodeOrString_Value ) , "::" , stringify ! (
-                            mNode ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const OwningNodeOrString_Value ) )
-                            . mString as * const _ as usize } , 0usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            OwningNodeOrString_Value ) , "::" , stringify ! (
-                            mString ) ));
             }
             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 ! (
@@ -4416,51 +3012,26 @@ pub mod root {
                             mValue as * const _ as usize } , 8usize , concat !
                             (
                             "Alignment of field: " , stringify ! (
                             OwningNodeOrString ) , "::" , stringify ! ( mValue
                             ) ));
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct Text {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct TextOrElementOrDocument {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct DOMPointInit {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct GetRootNodeOptions {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Touch {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Selection {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct UnionMember {
-                pub mStorage: root::mozilla::AlignedStorage2,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct TabGroup {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             pub struct DispatcherTrait__bindgen_vtable(::std::os::raw::c_void);
             #[repr(C)]
             #[derive(Debug, Copy)]
             pub struct DispatcherTrait {
@@ -4669,51 +3240,26 @@ pub mod root {
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct DocGroup {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct Performance {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct ServiceWorkerRegistration {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct TimeoutManager {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct CustomElementRegistry {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Location {
-                _unused: [u8; 0],
-            }
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum LargeAllocStatus {
-                NONE = 0,
-                SUCCESS = 1,
-                NON_GET = 2,
-                NON_E10S = 3,
-                NOT_ONLY_TOPLEVEL_IN_TABGROUP = 4,
-                NON_WIN32 = 5,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct PrefSetting {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug)]
             pub struct CallbackObject {
                 pub _base: root::nsISupports,
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
@@ -4956,40 +3502,16 @@ pub mod root {
                             mIncumbentJSGlobal as * const _ as usize } ,
                             48usize , concat ! (
                             "Alignment of field: " , stringify ! (
                             CallbackObject ) , "::" , stringify ! (
                             mIncumbentJSGlobal ) ));
             }
             #[repr(C)]
             #[derive(Debug)]
-            pub struct CallbackObjectHolder {
-                pub mPtrBits: usize,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct CallbackObjectHolderBase {
-                pub _address: u8,
-            }
-            #[test]
-            fn bindgen_test_layout_CallbackObjectHolderBase() {
-                assert_eq!(::std::mem::size_of::<CallbackObjectHolderBase>() ,
-                           1usize , concat ! (
-                           "Size of: " , stringify ! (
-                           CallbackObjectHolderBase ) ));
-                assert_eq! (::std::mem::align_of::<CallbackObjectHolderBase>()
-                            , 1usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            CallbackObjectHolderBase ) ));
-            }
-            impl Clone for CallbackObjectHolderBase {
-                fn clone(&self) -> Self { *self }
-            }
-            #[repr(C)]
-            #[derive(Debug)]
             pub struct CallbackFunction {
                 pub _base: root::mozilla::dom::CallbackObject,
             }
             #[test]
             fn bindgen_test_layout_CallbackFunction() {
                 assert_eq!(::std::mem::size_of::<CallbackFunction>() , 56usize
                            , concat ! (
                            "Size of: " , stringify ! ( CallbackFunction ) ));
@@ -5013,146 +3535,28 @@ pub mod root {
             #[repr(u8)]
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum VisibilityState {
                 Hidden = 0,
                 Visible = 1,
                 Prerender = 2,
                 EndGuard_ = 3,
             }
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum FlashClassification {
-                Unclassified = 0,
-                Unknown = 1,
-                Allowed = 2,
-                Denied = 3,
-                EndGuard_ = 4,
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct ElementCreationOptions {
-                pub _base: root::mozilla::dom::DictionaryBase,
-                pub mIs: [u64; 3usize],
-                pub mPseudo: [u64; 3usize],
-            }
-            #[test]
-            fn bindgen_test_layout_ElementCreationOptions() {
-                assert_eq!(::std::mem::size_of::<ElementCreationOptions>() ,
-                           56usize , concat ! (
-                           "Size of: " , stringify ! ( ElementCreationOptions
-                           ) ));
-                assert_eq! (::std::mem::align_of::<ElementCreationOptions>() ,
-                            8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            ElementCreationOptions ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ElementCreationOptions ) ) .
-                            mIs as * const _ as usize } , 8usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementCreationOptions ) , "::" , stringify ! (
-                            mIs ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ElementCreationOptions ) ) .
-                            mPseudo as * const _ as usize } , 32usize , concat
-                            ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementCreationOptions ) , "::" , stringify ! (
-                            mPseudo ) ));
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct ElementCreationOptionsOrString {
-                pub mType: root::mozilla::dom::ElementCreationOptionsOrString_Type,
-                pub mValue: root::mozilla::dom::ElementCreationOptionsOrString_Value,
-            }
-            #[repr(u32)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum ElementCreationOptionsOrString_Type {
-                eUninitialized = 0,
-                eElementCreationOptions = 1,
-                eString = 2,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ElementCreationOptionsOrString_Value {
-                pub mElementCreationOptions: root::__BindgenUnionField<root::mozilla::dom::UnionMember>,
-                pub mString: root::__BindgenUnionField<root::mozilla::dom::UnionMember>,
-                pub bindgen_union_field: [u64; 18usize],
-            }
-            #[test]
-            fn bindgen_test_layout_ElementCreationOptionsOrString_Value() {
-                assert_eq!(::std::mem::size_of::<ElementCreationOptionsOrString_Value>()
-                           , 144usize , concat ! (
-                           "Size of: " , stringify ! (
-                           ElementCreationOptionsOrString_Value ) ));
-                assert_eq! (::std::mem::align_of::<ElementCreationOptionsOrString_Value>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            ElementCreationOptionsOrString_Value ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * (
-                            0 as * const ElementCreationOptionsOrString_Value
-                            ) ) . mElementCreationOptions as * const _ as
-                            usize } , 0usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementCreationOptionsOrString_Value ) , "::" ,
-                            stringify ! ( mElementCreationOptions ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * (
-                            0 as * const ElementCreationOptionsOrString_Value
-                            ) ) . mString as * const _ as usize } , 0usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementCreationOptionsOrString_Value ) , "::" ,
-                            stringify ! ( mString ) ));
-            }
-            impl Clone for ElementCreationOptionsOrString_Value {
-                fn clone(&self) -> Self { *self }
-            }
-            #[test]
-            fn bindgen_test_layout_ElementCreationOptionsOrString() {
-                assert_eq!(::std::mem::size_of::<ElementCreationOptionsOrString>()
-                           , 152usize , concat ! (
-                           "Size of: " , stringify ! (
-                           ElementCreationOptionsOrString ) ));
-                assert_eq! (::std::mem::align_of::<ElementCreationOptionsOrString>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            ElementCreationOptionsOrString ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const ElementCreationOptionsOrString )
-                            ) . mType as * const _ as usize } , 0usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementCreationOptionsOrString ) , "::" ,
-                            stringify ! ( mType ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const ElementCreationOptionsOrString )
-                            ) . mValue as * const _ as usize } , 8usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementCreationOptionsOrString ) , "::" ,
-                            stringify ! ( mValue ) ));
-            }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct Animation {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct AnonymousContent {
                 _unused: [u8; 0],
             }
             #[repr(C)]
+            #[derive(Debug)]
             pub struct Attr {
                 pub _base: root::nsIAttribute,
                 pub _base_1: root::nsIDOMAttr,
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
                 pub _mOwningThread: root::nsAutoOwningThread,
                 pub mValue: ::nsstring::nsStringRepr,
             }
             pub type Attr_HasThreadSafeRefCnt = root::mozilla::FalseType;
@@ -5187,51 +3591,17 @@ pub mod root {
             #[test]
             fn bindgen_test_layout_Attr() {
                 assert_eq!(::std::mem::size_of::<Attr>() , 136usize , concat !
                            ( "Size of: " , stringify ! ( Attr ) ));
                 assert_eq! (::std::mem::align_of::<Attr>() , 8usize , concat !
                             ( "Alignment of " , stringify ! ( Attr ) ));
             }
             #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct BoxObject {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct CDATASection {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Comment {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct DocumentFragment {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct DocumentTimeline {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct DocumentType {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct DOMImplementation {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
+            #[derive(Debug)]
             pub struct DOMIntersectionObserver {
                 pub _base: root::nsISupports,
                 pub _base_1: root::nsWrapperCache,
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
                 pub _mOwningThread: root::nsAutoOwningThread,
                 pub mOwner: root::nsCOMPtr<root::nsPIDOMWindowInner>,
                 pub mDocument: root::RefPtr<root::nsIDocument>,
                 pub mCallback: root::RefPtr<root::mozilla::dom::IntersectionCallback>,
@@ -5282,26 +3652,16 @@ pub mod root {
                            ) ));
                 assert_eq! (::std::mem::align_of::<DOMIntersectionObserver>()
                             , 8usize , concat ! (
                             "Alignment of " , stringify ! (
                             DOMIntersectionObserver ) ));
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct DOMStringList {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct ElementRegistrationOptions {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct FontFaceSet {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug)]
             pub struct FrameRequestCallback {
                 pub _base: root::mozilla::dom::CallbackFunction,
             }
@@ -5323,172 +3683,47 @@ pub mod root {
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct ImageTracker {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct HTMLBodyElement {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct Link {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct MediaQueryList {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
-            pub struct NodeFilter {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct NodeIterator {
-                _unused: [u8; 0],
-            }
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum OrientationType { }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct ProcessingInstruction {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct ScriptLoader {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct StyleSheetList {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct SVGSVGElement {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct TouchList {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct TreeWalker {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
             pub struct XPathEvaluator {
                 _unused: [u8; 0],
             }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct XPathExpression {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct XPathNSResolver {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct XPathResult {
-                _unused: [u8; 0],
-            }
-            pub type NodeFilterHolder =
-                root::mozilla::dom::CallbackObjectHolder;
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum ScrollBehavior {
-                Auto = 0,
-                Instant = 1,
-                Smooth = 2,
-                EndGuard_ = 3,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ScrollOptions {
-                pub _base: root::mozilla::dom::DictionaryBase,
-                pub mBehavior: root::mozilla::dom::ScrollBehavior,
-            }
-            #[test]
-            fn bindgen_test_layout_ScrollOptions() {
-                assert_eq!(::std::mem::size_of::<ScrollOptions>() , 2usize ,
-                           concat ! (
-                           "Size of: " , stringify ! ( ScrollOptions ) ));
-                assert_eq! (::std::mem::align_of::<ScrollOptions>() , 1usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( ScrollOptions )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollOptions ) ) . mBehavior
-                            as * const _ as usize } , 1usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollOptions ) , "::" , stringify ! ( mBehavior )
-                            ));
-            }
-            impl Clone for ScrollOptions {
-                fn clone(&self) -> Self { *self }
-            }
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct ScrollToOptions {
-                pub _base: root::mozilla::dom::ScrollOptions,
-                pub mLeft: [u64; 2usize],
-                pub mTop: [u64; 2usize],
-            }
-            #[test]
-            fn bindgen_test_layout_ScrollToOptions() {
-                assert_eq!(::std::mem::size_of::<ScrollToOptions>() , 40usize
-                           , concat ! (
-                           "Size of: " , stringify ! ( ScrollToOptions ) ));
-                assert_eq! (::std::mem::align_of::<ScrollToOptions>() , 8usize
-                            , concat ! (
-                            "Alignment of " , stringify ! ( ScrollToOptions )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollToOptions ) ) . mLeft
-                            as * const _ as usize } , 8usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollToOptions ) , "::" , stringify ! ( mLeft )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollToOptions ) ) . mTop as
-                            * const _ as usize } , 24usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ScrollToOptions ) , "::" , stringify ! ( mTop )
-                            ));
-            }
-            /**
- * 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.
- */
+            pub type Record_EntryType<KeyType, ValueType> =
+                root::mozilla::dom::binding_detail::RecordEntry<KeyType,
+                                                                ValueType>;
+            /// 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>() ,
@@ -5503,121 +3738,40 @@ pub mod root {
             #[repr(u8)]
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum CompositeOperation {
                 Replace = 0,
                 Add = 1,
                 Accumulate = 2,
                 EndGuard_ = 3,
             }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct CSSPseudoElement {
-                _unused: [u8; 0],
-            }
             #[repr(u8)]
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum IterationCompositeOperation {
                 Replace = 0,
                 Accumulate = 1,
                 EndGuard_ = 2,
             }
             #[repr(C)]
-            #[derive(Debug)]
-            pub struct ElementOrCSSPseudoElement {
-                pub mType: root::mozilla::dom::ElementOrCSSPseudoElement_Type,
-                pub mValue: root::mozilla::dom::ElementOrCSSPseudoElement_Value,
-            }
-            #[repr(u32)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum ElementOrCSSPseudoElement_Type {
-                eUninitialized = 0,
-                eElement = 1,
-                eCSSPseudoElement = 2,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ElementOrCSSPseudoElement_Value {
-                pub mElement: root::__BindgenUnionField<root::mozilla::dom::UnionMember>,
-                pub mCSSPseudoElement: root::__BindgenUnionField<root::mozilla::dom::UnionMember>,
-                pub bindgen_union_field: [u64; 2usize],
-            }
-            #[test]
-            fn bindgen_test_layout_ElementOrCSSPseudoElement_Value() {
-                assert_eq!(::std::mem::size_of::<ElementOrCSSPseudoElement_Value>()
-                           , 16usize , concat ! (
-                           "Size of: " , stringify ! (
-                           ElementOrCSSPseudoElement_Value ) ));
-                assert_eq! (::std::mem::align_of::<ElementOrCSSPseudoElement_Value>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            ElementOrCSSPseudoElement_Value ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const ElementOrCSSPseudoElement_Value )
-                            ) . mElement as * const _ as usize } , 0usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementOrCSSPseudoElement_Value ) , "::" ,
-                            stringify ! ( mElement ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const ElementOrCSSPseudoElement_Value )
-                            ) . mCSSPseudoElement as * const _ as usize } ,
-                            0usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementOrCSSPseudoElement_Value ) , "::" ,
-                            stringify ! ( mCSSPseudoElement ) ));
-            }
-            impl Clone for ElementOrCSSPseudoElement_Value {
-                fn clone(&self) -> Self { *self }
-            }
-            #[test]
-            fn bindgen_test_layout_ElementOrCSSPseudoElement() {
-                assert_eq!(::std::mem::size_of::<ElementOrCSSPseudoElement>()
-                           , 24usize , concat ! (
-                           "Size of: " , stringify ! (
-                           ElementOrCSSPseudoElement ) ));
-                assert_eq! (::std::mem::align_of::<ElementOrCSSPseudoElement>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            ElementOrCSSPseudoElement ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ElementOrCSSPseudoElement ) )
-                            . mType as * const _ as usize } , 0usize , concat
-                            ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementOrCSSPseudoElement ) , "::" , stringify ! (
-                            mType ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ElementOrCSSPseudoElement ) )
-                            . mValue as * const _ as usize } , 8usize , concat
-                            ! (
-                            "Alignment of field: " , stringify ! (
-                            ElementOrCSSPseudoElement ) , "::" , stringify ! (
-                            mValue ) ));
-            }
-            #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct XBLChildrenElement {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct CustomElementData {
                 _unused: [u8; 0],
             }
             #[repr(C)]
+            #[derive(Debug)]
             pub struct FragmentOrElement {
                 pub _base: root::nsIContent,
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
                 pub _mOwningThread: root::nsAutoOwningThread,
-                /**
-   * Array containing all attributes and children for this element
-   */
+                /// 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,
@@ -5631,80 +3785,53 @@ pub mod root {
                 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)]
+            /// 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)]
+            #[derive(Debug)]
             pub struct FragmentOrElement_nsExtendedDOMSlots {
-                /**
-     * SMIL Overridde style rules (for SMIL animation of CSS properties)
-     * @see Element::GetSMILOverrideStyle
-     */
+                /// SMIL Overridde style rules (for SMIL animation of CSS properties)
+                /// @see Element::GetSMILOverrideStyle
                 pub mSMILOverrideStyle: root::nsCOMPtr<root::nsICSSDeclaration>,
-                /**
-     * Holds any SMIL override style declaration for this element.
-     */
+                /// Holds any SMIL override style declaration for this element.
                 pub mSMILOverrideStyleDeclaration: root::RefPtr<root::mozilla::DeclarationBlock>,
-                /**
-    * The nearest enclosing content node with a binding that created us.
-    * @see FragmentOrElement::GetBindingParent
-    */
+                /// The nearest enclosing content node with a binding that created us.
+                /// @see FragmentOrElement::GetBindingParent
                 pub mBindingParent: *mut root::nsIContent,
-                /**
-    * The controllers of the XUL Element.
-    */
+                /// The controllers of the XUL Element.
                 pub mControllers: root::nsCOMPtr<root::nsIControllers>,
-                /**
-     * An object implementing the .labels property for this element.
-     */
+                /// An object implementing the .labels property for this element.
                 pub mLabelsList: root::RefPtr<root::nsLabelsNodeList>,
-                /**
-     * ShadowRoot bound to the element.
-     */
+                /// ShadowRoot bound to the element.
                 pub mShadowRoot: root::RefPtr<root::mozilla::dom::ShadowRoot>,
-                /**
-     * The root ShadowRoot of this element if it is in a shadow tree.
-     */
+                /// The root ShadowRoot of this element if it is in a shadow tree.
                 pub mContainingShadow: root::RefPtr<root::mozilla::dom::ShadowRoot>,
-                /**
-     * An array of web component insertion points to which this element
-     * is distributed.
-     */
+                /// An array of web component insertion points to which this element
+                /// is distributed.
                 pub mDestInsertionPoints: root::nsTArray<*mut root::nsIContent>,
-                /**
-     * XBL binding installed on the element.
-     */
+                /// XBL binding installed on the element.
                 pub mXBLBinding: root::RefPtr<root::nsXBLBinding>,
-                /**
-     * XBL binding installed on the lement.
-     */
+                /// XBL binding installed on the lement.
                 pub mXBLInsertionParent: root::nsCOMPtr<root::nsIContent>,
-                /**
-     * Web components custom element data.
-     */
+                /// Web components custom element data.
                 pub mCustomElementData: root::RefPtr<root::mozilla::dom::CustomElementData>,
-                /**
-     * Registered Intersection Observers on the element.
-     */
+                /// Registered Intersection Observers on the element.
                 pub mRegisteredIntersectionObservers: [u64; 6usize],
-                /**
-     * For XUL to hold either frameloader or opener.
-     */
+                /// For XUL to hold either frameloader or opener.
                 pub mFrameLoaderOrOpener: root::nsCOMPtr<root::nsISupports>,
             }
             #[test]
             fn bindgen_test_layout_FragmentOrElement_nsExtendedDOMSlots() {
                 assert_eq!(::std::mem::size_of::<FragmentOrElement_nsExtendedDOMSlots>()
                            , 144usize , concat ! (
                            "Size of: " , stringify ! (
                            FragmentOrElement_nsExtendedDOMSlots ) ));
@@ -5827,41 +3954,32 @@ pub mod root {
                             0 as * const FragmentOrElement_nsExtendedDOMSlots
                             ) ) . mFrameLoaderOrOpener as * const _ as usize }
                             , 136usize , concat ! (
                             "Alignment of field: " , stringify ! (
                             FragmentOrElement_nsExtendedDOMSlots ) , "::" ,
                             stringify ! ( mFrameLoaderOrOpener ) ));
             }
             #[repr(C)]
+            #[derive(Debug)]
             pub struct FragmentOrElement_nsDOMSlots {
                 pub _base: root::nsINode_nsSlots,
-                /**
-     * The .style attribute (an interface that forwards to the actual
-     * style rules)
-     * @see nsGenericHTMLElement::GetStyle
-     */
+                /// The .style attribute (an interface that forwards to the actual
+                /// style rules)
+                /// @see nsGenericHTMLElement::GetStyle
                 pub mStyle: root::nsCOMPtr<root::nsICSSDeclaration>,
-                /**
-     * The .dataset attribute.
-     * @see nsGenericHTMLElement::GetDataset
-     */
+                /// The .dataset attribute.
+                /// @see nsGenericHTMLElement::GetDataset
                 pub mDataset: *mut root::nsDOMStringMap,
-                /**
-     * An object implementing nsIDOMMozNamedAttrMap for this content (attributes)
-     * @see FragmentOrElement::GetAttributes
-     */
+                /// An object implementing nsIDOMMozNamedAttrMap for this content (attributes)
+                /// @see FragmentOrElement::GetAttributes
                 pub mAttributeMap: root::RefPtr<root::nsDOMAttributeMap>,
-                /**
-     * An object implementing the .children property for this element.
-     */
+                /// An object implementing the .children property for this element.
                 pub mChildrenList: root::RefPtr<root::nsContentList>,
-                /**
-     * An object implementing the .classList property for this element.
-     */
+                /// An object implementing the .classList property for this element.
                 pub mClassList: root::RefPtr<root::nsDOMTokenList>,
                 pub mExtendedSlots: root::mozilla::UniquePtr<root::mozilla::dom::FragmentOrElement_nsExtendedDOMSlots>,
             }
             #[test]
             fn bindgen_test_layout_FragmentOrElement_nsDOMSlots() {
                 assert_eq!(::std::mem::size_of::<FragmentOrElement_nsDOMSlots>()
                            , 104usize , concat ! (
                            "Size of: " , stringify ! (
@@ -5952,21 +4070,16 @@ pub mod root {
                             & ( * ( 0 as * const FragmentOrElement ) ) .
                             mAttrsAndChildren as * const _ as usize } ,
                             104usize , concat ! (
                             "Alignment of field: " , stringify ! (
                             FragmentOrElement ) , "::" , stringify ! (
                             mAttrsAndChildren ) ));
             }
             #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct SVGAnimationElement {
-                _unused: [u8; 0],
-            }
-            #[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,
@@ -5976,99 +4089,16 @@ pub mod root {
                 assert_eq!(::std::mem::size_of::<DOMRect>() , 96usize , concat
                            ! ( "Size of: " , stringify ! ( DOMRect ) ));
                 assert_eq! (::std::mem::align_of::<DOMRect>() , 8usize ,
                             concat ! (
                             "Alignment of " , stringify ! ( DOMRect ) ));
             }
             #[repr(C)]
             #[derive(Debug)]
-            pub struct DOMRectList {
-                pub _base: root::nsIDOMClientRectList,
-                pub _base_1: root::nsWrapperCache,
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                pub _mOwningThread: root::nsAutoOwningThread,
-                pub mArray: root::nsTArray<root::RefPtr<root::mozilla::dom::DOMRect>>,
-                pub mParent: root::nsCOMPtr<root::nsISupports>,
-            }
-            pub type DOMRectList_HasThreadSafeRefCnt =
-                root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DOMRectList_cycleCollection {
-                pub _base: root::nsXPCOMCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_DOMRectList_cycleCollection() {
-                assert_eq!(::std::mem::size_of::<DOMRectList_cycleCollection>()
-                           , 16usize , concat ! (
-                           "Size of: " , stringify ! (
-                           DOMRectList_cycleCollection ) ));
-                assert_eq! (::std::mem::align_of::<DOMRectList_cycleCollection>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            DOMRectList_cycleCollection ) ));
-            }
-            impl Clone for DOMRectList_cycleCollection {
-                fn clone(&self) -> Self { *self }
-            }
-            extern "C" {
-                #[link_name =
-                      "_ZN7mozilla3dom11DOMRectList21_cycleCollectorGlobalE"]
-                pub static mut DOMRectList__cycleCollectorGlobal:
-                           root::mozilla::dom::DOMRectList_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_DOMRectList() {
-                assert_eq!(::std::mem::size_of::<DOMRectList>() , 64usize ,
-                           concat ! (
-                           "Size of: " , stringify ! ( DOMRectList ) ));
-                assert_eq! (::std::mem::align_of::<DOMRectList>() , 8usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( DOMRectList ) ));
-            }
-            pub type DOMTokenListSupportedToken =
-                *const ::std::os::raw::c_char;
-            pub type DOMTokenListSupportedTokenArray =
-                *mut root::mozilla::dom::DOMTokenListSupportedToken;
-            #[repr(u8)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum ScrollLogicalPosition {
-                Start = 0,
-                End = 1,
-                EndGuard_ = 2,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct ScrollIntoViewOptions {
-                pub _base: root::mozilla::dom::ScrollOptions,
-                pub mBlock: root::mozilla::dom::ScrollLogicalPosition,
-            }
-            #[test]
-            fn bindgen_test_layout_ScrollIntoViewOptions() {
-                assert_eq!(::std::mem::size_of::<ScrollIntoViewOptions>() ,
-                           3usize , concat ! (
-                           "Size of: " , stringify ! ( ScrollIntoViewOptions )
-                           ));
-                assert_eq! (::std::mem::align_of::<ScrollIntoViewOptions>() ,
-                            1usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            ScrollIntoViewOptions ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ScrollIntoViewOptions ) ) .
-                            mBlock as * const _ as usize } , 2usize , concat !
-                            (
-                            "Alignment of field: " , stringify ! (
-                            ScrollIntoViewOptions ) , "::" , stringify ! (
-                            mBlock ) ));
-            }
-            impl Clone for ScrollIntoViewOptions {
-                fn clone(&self) -> Self { *self }
-            }
-            #[repr(C)]
             pub struct DOMIntersectionObserverEntry {
                 pub _base: root::nsISupports,
                 pub _base_1: root::nsWrapperCache,
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
                 pub _mOwningThread: root::nsAutoOwningThread,
                 pub mOwner: root::nsCOMPtr<root::nsISupports>,
                 pub mTime: root::DOMHighResTimeStamp,
                 pub mRootBounds: root::RefPtr<root::mozilla::dom::DOMRect>,
@@ -6129,229 +4159,16 @@ pub mod root {
                            "Size of: " , stringify ! ( IntersectionCallback )
                            ));
                 assert_eq! (::std::mem::align_of::<IntersectionCallback>() ,
                             8usize , concat ! (
                             "Alignment of " , stringify ! (
                             IntersectionCallback ) ));
             }
             #[repr(C)]
-            #[derive(Debug)]
-            pub struct OwningDoubleOrDoubleSequence {
-                pub mType: root::mozilla::dom::OwningDoubleOrDoubleSequence_Type,
-                pub mValue: root::mozilla::dom::OwningDoubleOrDoubleSequence_Value,
-            }
-            #[repr(u32)]
-            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-            pub enum OwningDoubleOrDoubleSequence_Type {
-                eUninitialized = 0,
-                eDouble = 1,
-                eDoubleSequence = 2,
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct OwningDoubleOrDoubleSequence_Value {
-                pub mDouble: root::__BindgenUnionField<root::mozilla::dom::UnionMember>,
-                pub mDoubleSequence: root::__BindgenUnionField<root::mozilla::dom::UnionMember>,
-                pub bindgen_union_field: u64,
-            }
-            #[test]
-            fn bindgen_test_layout_OwningDoubleOrDoubleSequence_Value() {
-                assert_eq!(::std::mem::size_of::<OwningDoubleOrDoubleSequence_Value>()
-                           , 8usize , concat ! (
-                           "Size of: " , stringify ! (
-                           OwningDoubleOrDoubleSequence_Value ) ));
-                assert_eq! (::std::mem::align_of::<OwningDoubleOrDoubleSequence_Value>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            OwningDoubleOrDoubleSequence_Value ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * (
-                            0 as * const OwningDoubleOrDoubleSequence_Value )
-                            ) . mDouble as * const _ as usize } , 0usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            OwningDoubleOrDoubleSequence_Value ) , "::" ,
-                            stringify ! ( mDouble ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * (
-                            0 as * const OwningDoubleOrDoubleSequence_Value )
-                            ) . mDoubleSequence as * const _ as usize } ,
-                            0usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            OwningDoubleOrDoubleSequence_Value ) , "::" ,
-                            stringify ! ( mDoubleSequence ) ));
-            }
-            impl Clone for OwningDoubleOrDoubleSequence_Value {
-                fn clone(&self) -> Self { *self }
-            }
-            #[test]
-            fn bindgen_test_layout_OwningDoubleOrDoubleSequence() {
-                assert_eq!(::std::mem::size_of::<OwningDoubleOrDoubleSequence>()
-                           , 16usize , concat ! (
-                           "Size of: " , stringify ! (
-                           OwningDoubleOrDoubleSequence ) ));
-                assert_eq! (::std::mem::align_of::<OwningDoubleOrDoubleSequence>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            OwningDoubleOrDoubleSequence ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const OwningDoubleOrDoubleSequence ) )
-                            . mType as * const _ as usize } , 0usize , concat
-                            ! (
-                            "Alignment of field: " , stringify ! (
-                            OwningDoubleOrDoubleSequence ) , "::" , stringify
-                            ! ( mType ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const OwningDoubleOrDoubleSequence ) )
-                            . mValue as * const _ as usize } , 8usize , concat
-                            ! (
-                            "Alignment of field: " , stringify ! (
-                            OwningDoubleOrDoubleSequence ) , "::" , stringify
-                            ! ( mValue ) ));
-            }
-            #[repr(C)]
-            pub struct IntersectionObserverInit {
-                pub _base: root::mozilla::dom::DictionaryBase,
-                pub mRoot: root::RefPtr<root::mozilla::dom::Element>,
-                pub mRootMargin: ::nsstring::nsStringRepr,
-                pub mThreshold: root::mozilla::dom::OwningDoubleOrDoubleSequence,
-            }
-            #[test]
-            fn bindgen_test_layout_IntersectionObserverInit() {
-                assert_eq!(::std::mem::size_of::<IntersectionObserverInit>() ,
-                           48usize , concat ! (
-                           "Size of: " , stringify ! (
-                           IntersectionObserverInit ) ));
-                assert_eq! (::std::mem::align_of::<IntersectionObserverInit>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            IntersectionObserverInit ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const IntersectionObserverInit ) )
-                            . mRoot as * const _ as usize } , 8usize , concat
-                            ! (
-                            "Alignment of field: " , stringify ! (
-                            IntersectionObserverInit ) , "::" , stringify ! (
-                            mRoot ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const IntersectionObserverInit ) )
-                            . mRootMargin as * const _ as usize } , 16usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            IntersectionObserverInit ) , "::" , stringify ! (
-                            mRootMargin ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const IntersectionObserverInit ) )
-                            . mThreshold as * const _ as usize } , 32usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            IntersectionObserverInit ) , "::" , stringify ! (
-                            mThreshold ) ));
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct AnimationFilter {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct DOMMatrixReadOnly {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct UnrestrictedDoubleOrKeyframeAnimationOptions {
-                _unused: [u8; 0],
-            }
-            #[repr(C)]
-            pub struct DestinationInsertionPointList {
-                pub _base: root::nsINodeList,
-                pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
-                pub _mOwningThread: root::nsAutoOwningThread,
-                pub mParent: root::RefPtr<root::mozilla::dom::Element>,
-                pub mDestinationPoints: root::nsCOMArray,
-            }
-            pub type DestinationInsertionPointList_HasThreadSafeRefCnt =
-                root::mozilla::FalseType;
-            #[repr(C)]
-            #[derive(Debug, Copy)]
-            pub struct DestinationInsertionPointList_cycleCollection {
-                pub _base: root::nsXPCOMCycleCollectionParticipant,
-            }
-            #[test]
-            fn bindgen_test_layout_DestinationInsertionPointList_cycleCollection() {
-                assert_eq!(::std::mem::size_of::<DestinationInsertionPointList_cycleCollection>()
-                           , 16usize , concat ! (
-                           "Size of: " , stringify ! (
-                           DestinationInsertionPointList_cycleCollection ) ));
-                assert_eq! (::std::mem::align_of::<DestinationInsertionPointList_cycleCollection>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            DestinationInsertionPointList_cycleCollection )
-                            ));
-            }
-            impl Clone for DestinationInsertionPointList_cycleCollection {
-                fn clone(&self) -> Self { *self }
-            }
-            extern "C" {
-                #[link_name =
-                      "_ZN7mozilla3dom29DestinationInsertionPointList21_cycleCollectorGlobalE"]
-                pub static mut
-                           DestinationInsertionPointList__cycleCollectorGlobal:
-                           root::mozilla::dom::DestinationInsertionPointList_cycleCollection;
-            }
-            #[test]
-            fn bindgen_test_layout_DestinationInsertionPointList() {
-                assert_eq!(::std::mem::size_of::<DestinationInsertionPointList>()
-                           , 64usize , concat ! (
-                           "Size of: " , stringify ! (
-                           DestinationInsertionPointList ) ));
-                assert_eq! (::std::mem::align_of::<DestinationInsertionPointList>()
-                            , 8usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            DestinationInsertionPointList ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const DestinationInsertionPointList ) )
-                            . mRefCnt as * const _ as usize } , 32usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            DestinationInsertionPointList ) , "::" , stringify
-                            ! ( mRefCnt ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const DestinationInsertionPointList ) )
-                            . _mOwningThread as * const _ as usize } , 40usize
-                            , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            DestinationInsertionPointList ) , "::" , stringify
-                            ! ( _mOwningThread ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const DestinationInsertionPointList ) )
-                            . mParent as * const _ as usize } , 48usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            DestinationInsertionPointList ) , "::" , stringify
-                            ! ( mParent ) ));
-                assert_eq! (unsafe {
-                            & (
-                            * ( 0 as * const DestinationInsertionPointList ) )
-                            . mDestinationPoints as * const _ as usize } ,
-                            56usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            DestinationInsertionPointList ) , "::" , stringify
-                            ! ( mDestinationPoints ) ));
-            }
-            #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct Grid {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug)]
             pub struct ExplicitChildIterator {
                 pub mParent: *const root::nsIContent,
@@ -6433,25 +4250,23 @@ pub mod root {
                 assert_eq! (unsafe {
                             & ( * ( 0 as * const FlattenedChildIterator ) ) .
                             mXBLInvolved as * const _ as usize } , 40usize ,
                             concat ! (
                             "Alignment 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.
- */
+            /// 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 mOriginalContent: *const root::nsIContent,
                 pub mAnonKids: root::nsTArray<*mut root::nsIContent>,
                 pub mAnonKidsIdx: u32,
                 pub mFlags: u32,
@@ -6516,51 +4331,24 @@ pub mod root {
                 assert_eq! (unsafe {
                             & ( * ( 0 as * const AllChildrenIterator ) ) .
                             mMutationGuard as * const _ as usize } , 80usize ,
                             concat ! (
                             "Alignment of field: " , stringify ! (
                             AllChildrenIterator ) , "::" , stringify ! (
                             mMutationGuard ) ));
             }
-            /**
- * CSSValue - a DOM object representing values in DOM computed style.
- */
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct CSSValue {
-                pub _base: root::nsISupports,
-                pub _base_1: root::nsWrapperCache,
-            }
-            #[test]
-            fn bindgen_test_layout_CSSValue() {
-                assert_eq!(::std::mem::size_of::<CSSValue>() , 32usize ,
-                           concat ! ( "Size of: " , stringify ! ( CSSValue )
-                           ));
-                assert_eq! (::std::mem::align_of::<CSSValue>() , 8usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( CSSValue ) ));
-            }
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct CSSVariableResolver {
-            _unused: [u8; 0],
         }
         #[repr(C)]
         #[derive(Debug)]
         pub struct CSSVariableValues {
-            /**
-   * Map of variable names to IDs.  Variable IDs are indexes into
-   * mVariables.
-   */
+            /// Map of variable names to IDs.  Variable IDs are indexes into
+            /// mVariables.
             pub mVariableIDs: [u64; 6usize],
-            /**
-   * Array of variables, indexed by variable ID.
-   */
+            /// Array of variables, indexed by variable ID.
             pub mVariables: root::nsTArray<root::mozilla::CSSVariableValues_Variable>,
         }
         #[repr(C)]
         #[derive(Debug)]
         pub struct CSSVariableValues_Variable {
             pub mVariableName: ::nsstring::nsStringRepr,
             pub mValue: ::nsstring::nsStringRepr,
             pub mFirstToken: root::nsCSSTokenSerializationType,
@@ -6638,49 +4426,21 @@ pub mod root {
             ScopedDoc = 4,
             StyleAttr = 5,
             Override = 6,
             Animation = 7,
             Transition = 8,
             Count = 9,
             Unknown = 255,
         }
-        /**
- * StaticAutoPtr and StaticRefPtr are like nsAutoPtr and nsRefPtr, except they
- * are suitable for use as global variables.
- *
- * In particular, a global instance of Static{Auto,Ref}Ptr doesn't cause the
- * compiler to emit  a static initializer (in release builds, anyway).
- *
- * In order to accomplish this, Static{Auto,Ref}Ptr must have a trivial
- * constructor and destructor.  As a consequence, it cannot initialize its raw
- * pointer to 0 on construction, and it cannot delete/release its raw pointer
- * upon destruction.
- *
- * Since the compiler guarantees that all global variables are initialized to
- * 0, these trivial constructors are safe.  Since we rely on this, the clang
- * plugin, run as part of our "static analysis" builds, makes it a compile-time
- * error to use Static{Auto,Ref}Ptr as anything except a global variable.
- *
- * Static{Auto,Ref}Ptr have a limited interface as compared to ns{Auto,Ref}Ptr;
- * this is intentional, since their range of acceptable uses is smaller.
- */
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct StaticAutoPtr<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.
- */
+        /// 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]
@@ -6740,38 +4500,34 @@ pub mod root {
             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
- */
+        /// 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,
         }
-        /**
- * font family name, a string for the name if not a generic and
- * a font type indicated named family or which generic family
- */
+        /// 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)]
         #[derive(Debug)]
         pub struct FontFamilyName {
             pub mType: root::mozilla::FontFamilyType,
             pub mName: ::nsstring::nsStringRepr,
         }
         #[test]
         fn bindgen_test_layout_FontFamilyName() {
@@ -6787,21 +4543,19 @@ pub mod root {
                         "Alignment of field: " , stringify ! ( FontFamilyName
                         ) , "::" , stringify ! ( mType ) ));
             assert_eq! (unsafe {
                         & ( * ( 0 as * const FontFamilyName ) ) . mName as *
                         const _ as usize } , 8usize , concat ! (
                         "Alignment of field: " , stringify ! ( FontFamilyName
                         ) , "::" , stringify ! ( mName ) ));
         }
-        /**
- * 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
- */
+        /// 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)]
         #[derive(Debug)]
         pub struct FontFamilyList {
             pub mFontlist: root::nsTArray<root::mozilla::FontFamilyName>,
             pub mDefaultFontType: root::mozilla::FontFamilyType,
         }
         #[test]
         fn bindgen_test_layout_FontFamilyList() {
@@ -7042,155 +4796,39 @@ pub mod root {
             Pre = 1,
             Nowrap = 2,
             PreWrap = 3,
             PreLine = 4,
             PreSpace = 5,
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
-        pub struct WritingMode {
-            _unused: [u8; 0],
-        }
-        #[repr(u32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum LogicalSide {
-            eLogicalSideBStart = 0,
-            eLogicalSideBEnd = 1,
-            eLogicalSideIStart = 2,
-            eLogicalSideIEnd = 3,
-        }
-        /**
- * Additional data used in conjunction with an nsRestyleHint to control the
- * restyle process.
- */
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct RestyleHintData {
-            pub mSelectorsForDescendants: root::nsTArray<*mut root::nsCSSSelector>,
-        }
-        #[test]
-        fn bindgen_test_layout_RestyleHintData() {
-            assert_eq!(::std::mem::size_of::<RestyleHintData>() , 8usize ,
-                       concat ! (
-                       "Size of: " , stringify ! ( RestyleHintData ) ));
-            assert_eq! (::std::mem::align_of::<RestyleHintData>() , 8usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( RestyleHintData ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const RestyleHintData ) ) .
-                        mSelectorsForDescendants as * const _ as usize } ,
-                        0usize , concat ! (
-                        "Alignment of field: " , stringify ! ( RestyleHintData
-                        ) , "::" , stringify ! ( mSelectorsForDescendants )
-                        ));
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
         pub struct NotNull<T> {
             pub mBasePtr: T,
             pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct WeakPtr {
         }
         pub type WeakPtr_WeakReference = u8;
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct SupportsWeakPtr {
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
-        pub struct WidgetEvent {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct WidgetGUIEvent {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct WidgetInputEvent {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct WidgetPointerEvent {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct EventFlags {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
         pub struct ShortcutKeyCandidate {
             _unused: [u8; 0],
         }
-        pub const FlushType_Frames: root::mozilla::FlushType =
-            FlushType::Style;
-        #[repr(u8)]
-        /**
- * This is the enum used by nsIDocument::FlushPendingNotifications to
- * decide what to flush.
- *
- * Please note that if you change these values, you should sync it with the
- * flushTypeNames array inside PresShell::FlushPendingNotifications.
- */
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum FlushType {
-            None = 0,
-            Content = 1,
-            ContentAndNotify = 2,
-            Style = 3,
-            EnsurePresShellInitAndFrames = 4,
-            InterruptibleLayout = 5,
-            Layout = 6,
-            Display = 7,
-            Count = 8,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct ChangesToFlush {
-            pub mFlushType: root::mozilla::FlushType,
-            pub mFlushAnimations: bool,
-        }
-        #[test]
-        fn bindgen_test_layout_ChangesToFlush() {
-            assert_eq!(::std::mem::size_of::<ChangesToFlush>() , 2usize ,
-                       concat ! ( "Size of: " , stringify ! ( ChangesToFlush )
-                       ));
-            assert_eq! (::std::mem::align_of::<ChangesToFlush>() , 1usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( ChangesToFlush ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ChangesToFlush ) ) . mFlushType
-                        as * const _ as usize } , 0usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ChangesToFlush
-                        ) , "::" , stringify ! ( mFlushType ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ChangesToFlush ) ) .
-                        mFlushAnimations as * const _ as usize } , 1usize ,
-                        concat ! (
-                        "Alignment of field: " , stringify ! ( ChangesToFlush
-                        ) , "::" , stringify ! ( mFlushAnimations ) ));
-        }
-        impl Clone for ChangesToFlush {
-            fn clone(&self) -> Self { *self }
-        }
-        /**
- * 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.
- */
+        /// 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]
@@ -7204,19 +4842,16 @@ pub mod root {
                         & ( * ( 0 as * const EventStates ) ) . mStates as *
                         const _ as usize } , 0usize , concat ! (
                         "Alignment of field: " , stringify ! ( EventStates ) ,
                         "::" , stringify ! ( mStates ) ));
         }
         impl Clone for EventStates {
             fn clone(&self) -> Self { *self }
         }
-        #[repr(i32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum LazyComputeBehavior { Allow = 0, Assert = 1, }
         pub const ServoTraversalFlags_Empty:
                   root::mozilla::ServoTraversalFlags =
             0;
         pub const ServoTraversalFlags_AnimationOnly:
                   root::mozilla::ServoTraversalFlags =
             1;
         pub const ServoTraversalFlags_ForCSSRuleChanges:
                   root::mozilla::ServoTraversalFlags =
@@ -7730,68 +5365,62 @@ pub mod root {
                         "Alignment of " , stringify ! ( GeckoEffects ) ));
             assert_eq! (unsafe {
                         & ( * ( 0 as * const GeckoEffects ) ) . gecko as *
                         const _ as usize } , 0usize , concat ! (
                         "Alignment of field: " , stringify ! ( GeckoEffects )
                         , "::" , stringify ! ( gecko ) ));
         }
         #[repr(u8)]
-        /**
- * Enumeration that represents one of the two supported style system backends.
- */
+        /// Enumeration that represents one of the two supported style system backends.
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum StyleBackendType { None = 0, Gecko = 1, Servo = 2, }
         pub type TimeStampValue = u64;
-        /**
- * Instances of this class represent moments in time, or a special
- * "null" moment. We do not use the non-monotonic system clock or
- * local time, since they can be reset, causing apparent backward
- * travel in time, which can confuse algorithms. Instead we measure
- * elapsed time according to the system.  This time can never go
- * backwards (i.e. it never wraps around, at least not in less than
- * five million years of system elapsed time). It might not advance
- * while the system is sleeping. If TimeStamp::SetNow() is not called
- * at all for hours or days, we might not notice the passage of some
- * of that time.
- *
- * We deliberately do not expose a way to convert TimeStamps to some
- * particular unit. All you can do is compute a difference between two
- * TimeStamps to get a TimeDuration. You can also add a TimeDuration
- * to a TimeStamp to get a new TimeStamp. You can't do something
- * meaningless like add two TimeStamps.
- *
- * Internally this is implemented as either a wrapper around
- *   - high-resolution, monotonic, system clocks if they exist on this
- *     platform
- *   - PRIntervalTime otherwise.  We detect wraparounds of
- *     PRIntervalTime and work around them.
- *
- * This class is similar to C++11's time_point, however it is
- * explicitly nullable and provides an IsNull() method. time_point
- * is initialized to the clock's epoch and provides a
- * time_since_epoch() method that functions similiarly. i.e.
- * t.IsNull() is equivalent to t.time_since_epoch() == decltype(t)::duration::zero();
- */
+        /// Instances of this class represent moments in time, or a special
+        /// "null" moment. We do not use the non-monotonic system clock or
+        /// local time, since they can be reset, causing apparent backward
+        /// travel in time, which can confuse algorithms. Instead we measure
+        /// elapsed time according to the system.  This time can never go
+        /// backwards (i.e. it never wraps around, at least not in less than
+        /// five million years of system elapsed time). It might not advance
+        /// while the system is sleeping. If TimeStamp::SetNow() is not called
+        /// at all for hours or days, we might not notice the passage of some
+        /// of that time.
+        ///
+        /// We deliberately do not expose a way to convert TimeStamps to some
+        /// particular unit. All you can do is compute a difference between two
+        /// TimeStamps to get a TimeDuration. You can also add a TimeDuration
+        /// to a TimeStamp to get a new TimeStamp. You can't do something
+        /// meaningless like add two TimeStamps.
+        ///
+        /// Internally this is implemented as either a wrapper around
+        /// - high-resolution, monotonic, system clocks if they exist on this
+        /// platform
+        /// - PRIntervalTime otherwise.  We detect wraparounds of
+        /// PRIntervalTime and work around them.
+        ///
+        /// This class is similar to C++11's time_point, however it is
+        /// explicitly nullable and provides an IsNull() method. time_point
+        /// is initialized to the clock's epoch and provides a
+        /// time_since_epoch() method that functions similiarly. i.e.
+        /// t.IsNull() is equivalent to t.time_since_epoch() == decltype(t)::duration::zero();
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct TimeStamp {
-            /**
-   * When built with PRIntervalTime, a value of 0 means this instance
-   * is "null". Otherwise, the low 32 bits represent a PRIntervalTime,
-   * and the high 32 bits represent a counter of the number of
-   * rollovers of PRIntervalTime that we've seen. This counter starts
-   * at 1 to avoid a real time colliding with the "null" value.
-   *
-   * PR_INTERVAL_MAX is set at 100,000 ticks per second. So the minimum
-   * time to wrap around is about 2^64/100000 seconds, i.e. about
-   * 5,849,424 years.
-   *
-   * When using a system clock, a value is system dependent.
-   */
+            /// When built with PRIntervalTime, a value of 0 means this instance
+            /// is "null". Otherwise, the low 32 bits represent a PRIntervalTime,
+            /// and the high 32 bits represent a counter of the number of
+            /// rollovers of PRIntervalTime that we've seen. This counter starts
+            /// at 1 to avoid a real time colliding with the "null" value.
+            ///
+            /// PR_INTERVAL_MAX is set at 100,000 ticks per second. So the minimum
+            /// time to wrap around is about 2^64/100000 seconds, i.e. about
+            /// 5,849,424 years.
+            ///
+            /// When using a system clock, a value is system dependent.
             pub mValue: root::mozilla::TimeStampValue,
         }
         #[test]
         fn bindgen_test_layout_TimeStamp() {
             assert_eq!(::std::mem::size_of::<TimeStamp>() , 8usize , concat !
                        ( "Size of: " , stringify ! ( TimeStamp ) ));
             assert_eq! (::std::mem::align_of::<TimeStamp>() , 8usize , concat
                         ! ( "Alignment of " , stringify ! ( TimeStamp ) ));
@@ -7799,71 +5428,64 @@ pub mod root {
                         & ( * ( 0 as * const TimeStamp ) ) . mValue as * const
                         _ as usize } , 0usize , concat ! (
                         "Alignment of field: " , stringify ! ( TimeStamp ) ,
                         "::" , stringify ! ( mValue ) ));
         }
         impl Clone for TimeStamp {
             fn clone(&self) -> Self { *self }
         }
-        /**
- * Instances of this class represent the length of an interval of time.
- * Negative durations are allowed, meaning the end is before the start.
- *
- * Internally the duration is stored as a int64_t in units of
- * PR_TicksPerSecond() when building with NSPR interval timers, or a
- * system-dependent unit when building with system clocks.  The
- * system-dependent unit must be constant, otherwise the semantics of
- * this class would be broken.
- *
- * The ValueCalculator template parameter determines how arithmetic
- * operations are performed on the integer count of ticks (mValue).
- */
+        /// Instances of this class represent the length of an interval of time.
+        /// Negative durations are allowed, meaning the end is before the start.
+        ///
+        /// Internally the duration is stored as a int64_t in units of
+        /// PR_TicksPerSecond() when building with NSPR interval timers, or a
+        /// system-dependent unit when building with system clocks.  The
+        /// system-dependent unit must be constant, otherwise the semantics of
+        /// this class would be broken.
+        ///
+        /// The ValueCalculator template parameter determines how arithmetic
+        /// operations are performed on the integer count of ticks (mValue).
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct BaseTimeDuration {
             pub mValue: i64,
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct BaseTimeDuration__SomethingVeryRandomHere {
             pub _address: u8,
         }
-        /**
- * Perform arithmetic operations on the value of a BaseTimeDuration without
- * doing strict checks on the range of values.
- */
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct TimeDurationValueCalculator {
-            pub _address: u8,
-        }
-        #[test]
-        fn bindgen_test_layout_TimeDurationValueCalculator() {
-            assert_eq!(::std::mem::size_of::<TimeDurationValueCalculator>() ,
-                       1usize , concat ! (
-                       "Size of: " , stringify ! ( TimeDurationValueCalculator
-                       ) ));
-            assert_eq! (::std::mem::align_of::<TimeDurationValueCalculator>()
-                        , 1usize , concat ! (
-                        "Alignment of " , stringify ! (
-                        TimeDurationValueCalculator ) ));
-        }
-        impl Clone for TimeDurationValueCalculator {
-            fn clone(&self) -> Self { *self }
-        }
-        /**
- * Specialization of BaseTimeDuration that uses TimeDurationValueCalculator for
- * arithmetic on the mValue member.
- *
- * Use this class for time durations that are *not* expected to hold values of
- * Forever (or the negative equivalent) or when such time duration are *not*
- * expected to be used in arithmetic operations.
- */
-        pub type TimeDuration = root::mozilla::BaseTimeDuration;
+        pub type Vector_Impl = u8;
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct Vector_CapacityAndReserved {
+            pub mCapacity: usize,
+            pub mReserved: usize,
+        }
+        pub type Vector_ElementType<T> = T;
+        pub const Vector_InlineLength: root::mozilla::Vector__bindgen_ty_1 =
+            Vector__bindgen_ty_1::InlineLength;
+        #[repr(i32)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum Vector__bindgen_ty_1 { InlineLength = 0, }
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct Vector_Range<T> {
+            pub mCur: *mut T,
+            pub mEnd: *mut T,
+            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
+        }
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct Vector_ConstRange<T> {
+            pub mCur: *mut T,
+            pub mEnd: *mut T,
+            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
+        }
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct ErrorResult {
             pub _bindgen_opaque_blob: [u64; 4usize],
         }
         pub type ErrorResult_BaseErrorResult =
             root::mozilla::binding_danger::TErrorResult;
         #[test]
@@ -7872,43 +5494,28 @@ pub mod root {
                        ! ( "Size of: " , stringify ! ( ErrorResult ) ));
             assert_eq! (::std::mem::align_of::<ErrorResult>() , 8usize ,
                         concat ! (
                         "Alignment of " , stringify ! ( ErrorResult ) ));
         }
         impl Clone for ErrorResult {
             fn clone(&self) -> Self { *self }
         }
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct OOMReporter {
-            pub _base: root::mozilla::dom::binding_detail::FastErrorResult,
-        }
-        #[test]
-        fn bindgen_test_layout_OOMReporter() {
-            assert_eq!(::std::mem::size_of::<OOMReporter>() , 32usize , concat
-                       ! ( "Size of: " , stringify ! ( OOMReporter ) ));
-            assert_eq! (::std::mem::align_of::<OOMReporter>() , 8usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( OOMReporter ) ));
-        }
         pub mod binding_danger {
             #[allow(unused_imports)]
             use self::super::super::super::root;
-            /**
- * Templated implementation class for various ErrorResult-like things.  The
- * instantiations differ only in terms of their cleanup policies (used in the
- * destructor), which they can specify via the template argument.  Note that
- * this means it's safe to reinterpret_cast between the instantiations unless
- * you plan to invoke the destructor through such a cast pointer.
- *
- * A cleanup policy consists of two booleans: whether to assert that we've been
- * reported or suppressed, and whether to then go ahead and suppress the
- * exception.
- */
+            /// Templated implementation class for various ErrorResult-like things.  The
+            /// instantiations differ only in terms of their cleanup policies (used in the
+            /// destructor), which they can specify via the template argument.  Note that
+            /// this means it's safe to reinterpret_cast between the instantiations unless
+            /// you plan to invoke the destructor through such a cast pointer.
+            ///
+            /// A cleanup policy consists of two booleans: whether to assert that we've been
+            /// reported or suppressed, and whether to then go ahead and suppress the
+            /// exception.
             #[repr(C)]
             #[derive(Debug)]
             pub struct TErrorResult {
                 pub mResult: root::nsresult,
                 pub __bindgen_anon_1: root::mozilla::binding_danger::TErrorResult__bindgen_ty_1,
                 pub mMightHaveUnreportedJSException: bool,
                 pub mUnionState: root::mozilla::binding_danger::TErrorResult_UnionState,
                 pub _mOwningThread: root::nsAutoOwningThread,
@@ -7940,37 +5547,16 @@ pub mod root {
             pub struct TErrorResult__bindgen_ty_1 {
                 pub mMessage: root::__BindgenUnionField<*mut root::mozilla::binding_danger::TErrorResult_Message>,
                 pub mJSException: root::__BindgenUnionField<root::JS::Value>,
                 pub mDOMExceptionInfo: root::__BindgenUnionField<*mut root::mozilla::binding_danger::TErrorResult_DOMExceptionInfo>,
                 pub bindgen_union_field: u64,
             }
             #[repr(C)]
             #[derive(Debug, Copy)]
-            pub struct JustAssertCleanupPolicy {
-                pub _address: u8,
-            }
-            pub const JustAssertCleanupPolicy_assertHandled: bool = true;
-            pub const JustAssertCleanupPolicy_suppress: bool = false;
-            #[test]
-            fn bindgen_test_layout_JustAssertCleanupPolicy() {
-                assert_eq!(::std::mem::size_of::<JustAssertCleanupPolicy>() ,
-                           1usize , concat ! (
-                           "Size of: " , stringify ! ( JustAssertCleanupPolicy
-                           ) ));
-                assert_eq! (::std::mem::align_of::<JustAssertCleanupPolicy>()
-                            , 1usize , concat ! (
-                            "Alignment of " , stringify ! (
-                            JustAssertCleanupPolicy ) ));
-            }
-            impl Clone for JustAssertCleanupPolicy {
-                fn clone(&self) -> Self { *self }
-            }
-            #[repr(C)]
-            #[derive(Debug, Copy)]
             pub struct AssertAndSuppressCleanupPolicy {
                 pub _address: u8,
             }
             pub const AssertAndSuppressCleanupPolicy_assertHandled: bool =
                 true;
             pub const AssertAndSuppressCleanupPolicy_suppress: bool = true;
             #[test]
             fn bindgen_test_layout_AssertAndSuppressCleanupPolicy() {
@@ -7982,19 +5568,17 @@ pub mod root {
                             , 1usize , concat ! (
                             "Alignment of " , stringify ! (
                             AssertAndSuppressCleanupPolicy ) ));
             }
             impl Clone for AssertAndSuppressCleanupPolicy {
                 fn clone(&self) -> Self { *self }
             }
         }
-        /**
- * Superclass for data common to CSSStyleSheet and ServoStyleSheet.
- */
+        /// Superclass for data common to CSSStyleSheet and ServoStyleSheet.
         #[repr(C)]
         #[derive(Debug)]
         pub struct StyleSheet {
             pub _base: root::nsIDOMCSSStyleSheet,
             pub _base_1: root::nsICSSLoaderObserver,
             pub _base_2: root::nsWrapperCache,
             pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
             pub _mOwningThread: root::nsAutoOwningThread,
@@ -8029,22 +5613,20 @@ pub mod root {
                         8usize , concat ! (
                         "Alignment of " , stringify ! (
                         StyleSheet_cycleCollection ) ));
         }
         impl Clone for StyleSheet_cycleCollection {
             fn clone(&self) -> Self { *self }
         }
         #[repr(i32)]
-        /**
-   * The different changes that a stylesheet may go through.
-   *
-   * Used by the StyleSets in order to handle more efficiently some kinds of
-   * changes.
-   */
+        /// The different changes that a stylesheet may go through.
+        ///
+        /// Used by the StyleSets in order to handle more efficiently some kinds of
+        /// changes.
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum StyleSheet_ChangeType {
             Added = 0,
             Removed = 1,
             ApplicableStateChanged = 2,
             RuleAdded = 3,
             RuleRemoved = 4,
             RuleChanged = 5,
@@ -8097,52 +5679,16 @@ pub mod root {
         }
         #[test]
         fn bindgen_test_layout_StyleSheet() {
             assert_eq!(::std::mem::size_of::<StyleSheet>() , 144usize , concat
                        ! ( "Size of: " , stringify ! ( StyleSheet ) ));
             assert_eq! (::std::mem::align_of::<StyleSheet>() , 8usize , concat
                         ! ( "Alignment of " , stringify ! ( StyleSheet ) ));
         }
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct OriginAttributes {
-            pub _base: root::mozilla::dom::OriginAttributesDictionary,
-        }
-        pub const OriginAttributes_STRIP_FIRST_PARTY_DOMAIN:
-                  root::mozilla::OriginAttributes__bindgen_ty_1 =
-            OriginAttributes__bindgen_ty_1::STRIP_FIRST_PARTY_DOMAIN;
-        pub const OriginAttributes_STRIP_USER_CONTEXT_ID:
-                  root::mozilla::OriginAttributes__bindgen_ty_1 =
-            OriginAttributes__bindgen_ty_1::STRIP_USER_CONTEXT_ID;
-        #[repr(u32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum OriginAttributes__bindgen_ty_1 {
-            STRIP_FIRST_PARTY_DOMAIN = 1,
-            STRIP_USER_CONTEXT_ID = 2,
-        }
-        extern "C" {
-            #[link_name =
-                  "_ZN7mozilla16OriginAttributes20sFirstPartyIsolationE"]
-            pub static mut OriginAttributes_sFirstPartyIsolation: bool;
-        }
-        extern "C" {
-            #[link_name =
-                  "_ZN7mozilla16OriginAttributes23sRestrictedOpenerAccessE"]
-            pub static mut OriginAttributes_sRestrictedOpenerAccess: bool;
-        }
-        #[test]
-        fn bindgen_test_layout_OriginAttributes() {
-            assert_eq!(::std::mem::size_of::<OriginAttributes>() , 40usize ,
-                       concat ! (
-                       "Size of: " , stringify ! ( OriginAttributes ) ));
-            assert_eq! (::std::mem::align_of::<OriginAttributes>() , 8usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( OriginAttributes ) ));
-        }
         pub mod net {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(u32)]
             #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
             pub enum ReferrerPolicy {
                 RP_No_Referrer = 2,
                 RP_Origin = 3,
@@ -8158,16 +5704,17 @@ pub mod root {
         #[repr(u8)]
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum CORSMode {
             CORS_NONE = 0,
             CORS_ANONYMOUS = 1,
             CORS_USE_CREDENTIALS = 2,
         }
         #[repr(C)]
+        #[derive(Debug)]
         pub struct CSSStyleSheet {
             pub _base: root::mozilla::StyleSheet,
             pub mRuleCollection: root::RefPtr<root::CSSRuleListImpl>,
             pub mInRuleProcessorCache: bool,
             pub mScopeElement: root::RefPtr<root::mozilla::dom::Element>,
             pub mRuleProcessors: *mut u8,
         }
         pub use self::super::super::root::mozilla::net::ReferrerPolicy as
@@ -8279,20 +5826,18 @@ pub mod root {
                         concat ! (
                         "Alignment of " , stringify ! ( ServoStyleSheet ) ));
             assert_eq! (unsafe {
                         & ( * ( 0 as * const ServoStyleSheet ) ) . mRuleList
                         as * const _ as usize } , 144usize , concat ! (
                         "Alignment of field: " , stringify ! ( ServoStyleSheet
                         ) , "::" , stringify ! ( mRuleList ) ));
         }
-        /**
- * Smart pointer class that can hold a pointer to either an nsStyleSet
- * or a ServoStyleSet.
- */
+        /// Smart pointer class that can hold a pointer to either an nsStyleSet
+        /// or a ServoStyleSet.
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct StyleSetHandle {
             pub mPtr: root::mozilla::StyleSetHandle_Ptr,
         }
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct StyleSetHandle_Ptr {
@@ -8331,20 +5876,19 @@ pub mod root {
                         "Alignment of field: " , stringify ! ( StyleSetHandle
                         ) , "::" , stringify ! ( mPtr ) ));
         }
         impl Clone for StyleSetHandle {
             fn clone(&self) -> Self { *self }
         }
         #[repr(C)]
         pub struct StyleSheetInfo__bindgen_vtable(::std::os::raw::c_void);
-        /**
- * Struct for data common to CSSStyleSheetInner and ServoStyleSheet.
- */
-        #[repr(C)]
+        /// Struct for data common to CSSStyleSheetInner and ServoStyleSheet.
+        #[repr(C)]
+        #[derive(Debug)]
         pub struct StyleSheetInfo {
             pub vtable_: *const StyleSheetInfo__bindgen_vtable,
             pub mSheetURI: root::nsCOMPtr<root::nsIURI>,
             pub mOriginalSheetURI: root::nsCOMPtr<root::nsIURI>,
             pub mBaseURI: root::nsCOMPtr<root::nsIURI>,
             pub mPrincipal: root::nsCOMPtr<root::nsIPrincipal>,
             pub mCORSMode: root::mozilla::CORSMode,
             pub mReferrerPolicy: root::mozilla::StyleSheetInfo_ReferrerPolicy,
@@ -8471,185 +6015,16 @@ pub mod root {
             placeholder = 23,
             mozColorSwatch = 24,
             Count = 25,
             NonInheritingAnonBox = 26,
             XULTree = 27,
             NotPseudo = 28,
             MAX = 29,
         }
-        /**
- * The set of style sheets that apply to a document, backed by a Servo
- * Stylist.  A ServoStyleSet contains ServoStyleSheets.
- */
-        #[repr(C)]
-        pub struct ServoStyleSet {
-            pub mPresContext: *mut root::nsPresContext,
-            pub mRawSet: root::mozilla::UniquePtr<root::RawServoStyleSet>,
-            pub mSheets: [u64; 9usize],
-            pub mAuthorStyleDisabled: bool,
-            pub mStylistState: root::mozilla::StylistState,
-            pub mUserFontSetUpdateGeneration: u64,
-            pub mUserFontCacheUpdateGeneration: u32,
-            pub mNeedsRestyleAfterEnsureUniqueInner: bool,
-            pub mNonInheritingStyleContexts: [u64; 5usize],
-            pub mPostTraversalTasks: root::nsTArray<root::mozilla::PostTraversalTask>,
-            pub mStyleRuleMap: root::RefPtr<root::mozilla::ServoStyleRuleMap>,
-            pub mBindingManager: root::RefPtr<root::nsBindingManager>,
-        }
-        pub type ServoStyleSet_SnapshotTable =
-            root::mozilla::ServoElementSnapshotTable;
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct ServoStyleSet_AutoSetInServoTraversal {
-            pub mSet: *mut root::mozilla::ServoStyleSet,
-        }
-        #[test]
-        fn bindgen_test_layout_ServoStyleSet_AutoSetInServoTraversal() {
-            assert_eq!(::std::mem::size_of::<ServoStyleSet_AutoSetInServoTraversal>()
-                       , 8usize , concat ! (
-                       "Size of: " , stringify ! (
-                       ServoStyleSet_AutoSetInServoTraversal ) ));
-            assert_eq! (::std::mem::align_of::<ServoStyleSet_AutoSetInServoTraversal>()
-                        , 8usize , concat ! (
-                        "Alignment of " , stringify ! (
-                        ServoStyleSet_AutoSetInServoTraversal ) ));
-            assert_eq! (unsafe {
-                        & (
-                        * ( 0 as * const ServoStyleSet_AutoSetInServoTraversal
-                        ) ) . mSet as * const _ as usize } , 0usize , concat !
-                        (
-                        "Alignment of field: " , stringify ! (
-                        ServoStyleSet_AutoSetInServoTraversal ) , "::" ,
-                        stringify ! ( mSet ) ));
-        }
-        extern "C" {
-            #[link_name = "_ZN7mozilla13ServoStyleSet17sInServoTraversalE"]
-            pub static mut ServoStyleSet_sInServoTraversal:
-                       *mut root::mozilla::ServoStyleSet;
-        }
-        #[test]
-        fn bindgen_test_layout_ServoStyleSet() {
-            assert_eq!(::std::mem::size_of::<ServoStyleSet>() , 176usize ,
-                       concat ! ( "Size of: " , stringify ! ( ServoStyleSet )
-                       ));
-            assert_eq! (::std::mem::align_of::<ServoStyleSet>() , 8usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( ServoStyleSet ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) . mPresContext
-                        as * const _ as usize } , 0usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mPresContext ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) . mRawSet as *
-                        const _ as usize } , 8usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mRawSet ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) . mSheets as *
-                        const _ as usize } , 16usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mSheets ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) .
-                        mAuthorStyleDisabled as * const _ as usize } , 88usize
-                        , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mAuthorStyleDisabled ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) . mStylistState
-                        as * const _ as usize } , 89usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mStylistState ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) .
-                        mUserFontSetUpdateGeneration as * const _ as usize } ,
-                        96usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mUserFontSetUpdateGeneration )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) .
-                        mUserFontCacheUpdateGeneration as * const _ as usize }
-                        , 104usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mUserFontCacheUpdateGeneration
-                        ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) .
-                        mNeedsRestyleAfterEnsureUniqueInner as * const _ as
-                        usize } , 108usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! (
-                        mNeedsRestyleAfterEnsureUniqueInner ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) .
-                        mNonInheritingStyleContexts as * const _ as usize } ,
-                        112usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mNonInheritingStyleContexts )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) .
-                        mPostTraversalTasks as * const _ as usize } , 152usize
-                        , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mPostTraversalTasks ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) . mStyleRuleMap
-                        as * const _ as usize } , 160usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mStyleRuleMap ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ServoStyleSet ) ) .
-                        mBindingManager as * const _ as usize } , 168usize ,
-                        concat ! (
-                        "Alignment of field: " , stringify ! ( ServoStyleSet )
-                        , "::" , stringify ! ( mBindingManager ) ));
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct EventChainVisitor {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct EventChainPostVisitor {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct EventChainPreVisitor {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct EventListenerManager {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct TextEditor {
-            _unused: [u8; 0],
-        }
-        #[test]
-        fn __bindgen_test_layout_StaticRefPtr_instantiation_2() {
-            assert_eq!(::std::mem::size_of::<root::mozilla::StaticRefPtr<root::mozilla::URLExtraData>>()
-                       , 8usize , concat ! (
-                       "Size of template specialization: " , stringify ! (
-                       root::mozilla::StaticRefPtr<root::mozilla::URLExtraData>
-                       ) ));
-            assert_eq!(::std::mem::align_of::<root::mozilla::StaticRefPtr<root::mozilla::URLExtraData>>()
-                       , 8usize , concat ! (
-                       "Alignment of template specialization: " , stringify !
-                       (
-                       root::mozilla::StaticRefPtr<root::mozilla::URLExtraData>
-                       ) ));
-        }
         #[repr(C)]
         #[derive(Debug)]
         pub struct URLExtraData {
             pub mRefCnt: root::mozilla::ThreadSafeAutoRefCnt,
             pub mBaseURI: root::nsCOMPtr<root::nsIURI>,
             pub mReferrer: root::nsCOMPtr<root::nsIURI>,
             pub mPrincipal: root::nsCOMPtr<root::nsIPrincipal>,
         }
@@ -8683,143 +6058,59 @@ pub mod root {
                         "Alignment of field: " , stringify ! ( URLExtraData )
                         , "::" , stringify ! ( mReferrer ) ));
             assert_eq! (unsafe {
                         & ( * ( 0 as * const URLExtraData ) ) . mPrincipal as
                         * const _ as usize } , 24usize , concat ! (
                         "Alignment of field: " , stringify ! ( URLExtraData )
                         , "::" , stringify ! ( mPrincipal ) ));
         }
+        #[test]
+        fn __bindgen_test_layout_StaticRefPtr_open0_URLExtraData_close0_instantiation() {
+            assert_eq!(::std::mem::size_of::<root::mozilla::StaticRefPtr<root::mozilla::URLExtraData>>()
+                       , 8usize , concat ! (
+                       "Size of template specialization: " , stringify ! (
+                       root::mozilla::StaticRefPtr<root::mozilla::URLExtraData>
+                       ) ));
+            assert_eq!(::std::mem::align_of::<root::mozilla::StaticRefPtr<root::mozilla::URLExtraData>>()
+                       , 8usize , concat ! (
+                       "Alignment of template specialization: " , stringify !
+                       (
+                       root::mozilla::StaticRefPtr<root::mozilla::URLExtraData>
+                       ) ));
+        }
         pub mod widget {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct IMEState {
                 _unused: [u8; 0],
             }
         }
-        pub type RawSelectionType = ::std::os::raw::c_short;
-        #[repr(i16)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum SelectionType {
-            eInvalid = -1,
-            eNone = 0,
-            eNormal = 1,
-            eSpellCheck = 2,
-            eIMERawClause = 4,
-            eIMESelectedRawClause = 8,
-            eIMEConvertedClause = 16,
-            eIMESelectedClause = 32,
-            eAccessibility = 64,
-            eFind = 128,
-            eURLSecondary = 256,
-            eURLStrikeout = 512,
-        }
         #[repr(C)]
         #[derive(Debug, Copy)]
-        pub struct CSSPixel {
-            pub _address: u8,
-        }
-        #[test]
-        fn bindgen_test_layout_CSSPixel() {
-            assert_eq!(::std::mem::size_of::<CSSPixel>() , 1usize , concat ! (
-                       "Size of: " , stringify ! ( CSSPixel ) ));
-            assert_eq! (::std::mem::align_of::<CSSPixel>() , 1usize , concat !
-                        ( "Alignment of " , stringify ! ( CSSPixel ) ));
-        }
-        impl Clone for CSSPixel {
-            fn clone(&self) -> Self { *self }
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct LayoutDevicePixel {
-            pub _address: u8,
-        }
-        #[test]
-        fn bindgen_test_layout_LayoutDevicePixel() {
-            assert_eq!(::std::mem::size_of::<LayoutDevicePixel>() , 1usize ,
-                       concat ! (
-                       "Size of: " , stringify ! ( LayoutDevicePixel ) ));
-            assert_eq! (::std::mem::align_of::<LayoutDevicePixel>() , 1usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( LayoutDevicePixel )
-                        ));
-        }
-        impl Clone for LayoutDevicePixel {
+        pub struct ArenaAllocator_ArenaHeader {
+            /// The location in memory of the data portion of the arena.
+            pub offset: usize,
+            /// The location in memory of the end of the data portion of the arena.
+            pub tail: usize,
+        }
+        impl Clone for ArenaAllocator_ArenaHeader {
             fn clone(&self) -> Self { *self }
         }
         #[repr(C)]
         #[derive(Debug, Copy)]
-        pub struct LayerPixel {
-            pub _address: u8,
-        }
-        #[test]
-        fn bindgen_test_layout_LayerPixel() {
-            assert_eq!(::std::mem::size_of::<LayerPixel>() , 1usize , concat !
-                       ( "Size of: " , stringify ! ( LayerPixel ) ));
-            assert_eq! (::std::mem::align_of::<LayerPixel>() , 1usize , concat
-                        ! ( "Alignment of " , stringify ! ( LayerPixel ) ));
-        }
-        impl Clone for LayerPixel {
-            fn clone(&self) -> Self { *self }
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct ScreenPixel {
-            pub _address: u8,
-        }
-        #[test]
-        fn bindgen_test_layout_ScreenPixel() {
-            assert_eq!(::std::mem::size_of::<ScreenPixel>() , 1usize , concat
-                       ! ( "Size of: " , stringify ! ( ScreenPixel ) ));
-            assert_eq! (::std::mem::align_of::<ScreenPixel>() , 1usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( ScreenPixel ) ));
-        }
-        impl Clone for ScreenPixel {
+        pub struct ArenaAllocator_ArenaChunk {
+            pub header: root::mozilla::ArenaAllocator_ArenaHeader,
+            pub next: *mut root::mozilla::ArenaAllocator_ArenaChunk,
+        }
+        impl Clone for ArenaAllocator_ArenaChunk {
             fn clone(&self) -> Self { *self }
         }
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct ParentLayerPixel {
-            pub _address: u8,
-        }
-        #[test]
-        fn bindgen_test_layout_ParentLayerPixel() {
-            assert_eq!(::std::mem::size_of::<ParentLayerPixel>() , 1usize ,
-                       concat ! (
-                       "Size of: " , stringify ! ( ParentLayerPixel ) ));
-            assert_eq! (::std::mem::align_of::<ParentLayerPixel>() , 1usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( ParentLayerPixel ) ));
-        }
-        impl Clone for ParentLayerPixel {
-            fn clone(&self) -> Self { *self }
-        }
-        pub type CSSPoint = [u32; 2usize];
-        pub type CSSIntPoint = [u32; 2usize];
-        pub type CSSSize = [u32; 2usize];
-        pub type CSSRect = [u32; 4usize];
-        pub type LayoutDeviceIntPoint = [u32; 2usize];
-        pub type LayoutDeviceIntSize = [u32; 2usize];
-        pub type LayoutDeviceIntRect = [u32; 4usize];
-        pub type ScreenIntSize = u8;
-        pub type ScreenMargin = [u32; 4usize];
-        pub type ParentLayerRect = [u32; 4usize];
-        pub type ParentLayerIntRect = [u32; 4usize];
-        pub type CSSToLayoutDeviceScale = u32;
-        pub type CSSToParentLayerScale2D = [u32; 2usize];
-        pub type LayoutDeviceToLayerScale2D = [u32; 2usize];
-        pub type ScreenToLayerScale2D = [u32; 2usize];
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct AccessibleCaretEventHub {
-            _unused: [u8; 0],
-        }
         pub mod a11y {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct DocAccessible {
                 _unused: [u8; 0],
             }
@@ -8841,33 +6132,66 @@ pub mod root {
         pub type Runnable_HasThreadSafeRefCnt = root::mozilla::TrueType;
         #[test]
         fn bindgen_test_layout_Runnable() {
             assert_eq!(::std::mem::size_of::<Runnable>() , 40usize , concat !
                        ( "Size of: " , stringify ! ( Runnable ) ));
             assert_eq! (::std::mem::align_of::<Runnable>() , 8usize , concat !
                         ( "Alignment of " , stringify ! ( Runnable ) ));
         }
-        #[repr(i32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum TaskCategory {
-            UI = 0,
-            Network = 1,
-            Timer = 2,
-            Worker = 3,
-            IdleCallback = 4,
-            RefreshDriver = 5,
-            GarbageCollection = 6,
-            Other = 7,
-            Count = 8,
+        #[repr(C)]
+        #[derive(Debug)]
+        pub struct CycleCollectedJSContext_RunInMetastableStateData {
+            pub mRunnable: root::nsCOMPtr<root::nsIRunnable>,
+            pub mRecursionDepth: u32,
+        }
+        #[test]
+        fn bindgen_test_layout_CycleCollectedJSContext_RunInMetastableStateData() {
+            assert_eq!(::std::mem::size_of::<CycleCollectedJSContext_RunInMetastableStateData>()
+                       , 16usize , concat ! (
+                       "Size of: " , stringify ! (
+                       CycleCollectedJSContext_RunInMetastableStateData ) ));
+            assert_eq! (::std::mem::align_of::<CycleCollectedJSContext_RunInMetastableStateData>()
+                        , 8usize , concat ! (
+                        "Alignment of " , stringify ! (
+                        CycleCollectedJSContext_RunInMetastableStateData ) ));
+            assert_eq! (unsafe {
+                        & (
+                        * (
+                        0 as * const
+                        CycleCollectedJSContext_RunInMetastableStateData ) ) .
+                        mRunnable as * const _ as usize } , 0usize , concat !
+                        (
+                        "Alignment of field: " , stringify ! (
+                        CycleCollectedJSContext_RunInMetastableStateData ) ,
+                        "::" , stringify ! ( mRunnable ) ));
+            assert_eq! (unsafe {
+                        & (
+                        * (
+                        0 as * const
+                        CycleCollectedJSContext_RunInMetastableStateData ) ) .
+                        mRecursionDepth as * const _ as usize } , 8usize ,
+                        concat ! (
+                        "Alignment of field: " , stringify ! (
+                        CycleCollectedJSContext_RunInMetastableStateData ) ,
+                        "::" , stringify ! ( mRecursionDepth ) ));
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
-        pub struct AbstractThread {
-            _unused: [u8; 0],
+        pub struct SegmentedVector_SegmentImpl_Storage {
+            pub mBuf: root::__BindgenUnionField<*mut ::std::os::raw::c_char>,
+            pub mAlign: root::__BindgenUnionField<u8>,
+            pub bindgen_union_field: u64,
+        }
+        pub type SegmentedVector_Segment = u8;
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct SegmentedVector_IterImpl {
+            pub mSegment: *mut root::mozilla::SegmentedVector_Segment,
+            pub mIndex: usize,
         }
         #[repr(i16)]
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum UseCounter {
             eUseCounter_UNKNOWN = -1,
             eUseCounter_SVGSVGElement_getElementById = 0,
             eUseCounter_SVGSVGElement_currentScale_getter = 1,
             eUseCounter_SVGSVGElement_currentScale_setter = 2,
@@ -8955,21 +6279,16 @@ pub mod root {
             eUseCounter_FileLastModifiedDate = 84,
             eUseCounter_ImageBitmapRenderingContext_TransferImageBitmap = 85,
             eUseCounter_URLCreateObjectURL_MediaStream = 86,
             eUseCounter_XMLBaseAttribute = 87,
             eUseCounter_XMLBaseAttributeForStyleAttr = 88,
             eUseCounter_Count = 89,
         }
         #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct PendingAnimationTracker {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
         #[derive(Debug)]
         pub struct ScrollbarStyles {
             pub mHorizontal: u8,
             pub mVertical: u8,
             pub mScrollBehavior: u8,
             pub mScrollSnapTypeX: u8,
             pub mScrollSnapTypeY: u8,
             pub mScrollSnapPointsX: root::nsStyleCoord,
@@ -9126,22 +6445,20 @@ pub mod root {
                         mDefaultFantasyFont ) ));
             assert_eq! (unsafe {
                         & ( * ( 0 as * const LangGroupFontPrefs ) ) . mNext as
                         * const _ as usize } , 632usize , concat ! (
                         "Alignment of field: " , stringify ! (
                         LangGroupFontPrefs ) , "::" , stringify ! ( mNext )
                         ));
         }
-        /**
- * Some functionality that has historically lived on nsPresContext does not
- * actually need to be per-document. This singleton class serves as a host
- * for that functionality. We delegate to it from nsPresContext where
- * appropriate, and use it standalone in some cases as well.
- */
+        /// Some functionality that has historically lived on nsPresContext does not
+        /// actually need to be per-document. This singleton class serves as a host
+        /// for that functionality. We delegate to it from nsPresContext where
+        /// appropriate, and use it standalone in some cases as well.
         #[repr(C)]
         #[derive(Debug)]
         pub struct StaticPresData {
             pub mLangService: *mut root::nsLanguageAtomService,
             pub mBorderWidthTable: [root::nscoord; 3usize],
             pub mStaticLangGroupFontPrefs: root::mozilla::LangGroupFontPrefs,
         }
         #[test]
@@ -9167,16 +6484,17 @@ pub mod root {
                         & ( * ( 0 as * const StaticPresData ) ) .
                         mStaticLangGroupFontPrefs as * const _ as usize } ,
                         24usize , concat ! (
                         "Alignment of field: " , stringify ! ( StaticPresData
                         ) , "::" , stringify ! ( mStaticLangGroupFontPrefs )
                         ));
         }
         #[repr(C)]
+        #[derive(Debug)]
         pub struct EffectCompositor {
             pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
             pub _mOwningThread: root::nsAutoOwningThread,
             pub mPresContext: *mut root::nsPresContext,
             pub mElementsToRestyle: [u64; 12usize],
             pub mIsInPreTraverse: bool,
             pub mRuleProcessors: [u64; 4usize],
         }
@@ -9398,264 +6716,64 @@ pub mod root {
                         mRetiredStyles ) ));
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct RestyleManager {
             _unused: [u8; 0],
         }
         #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct DeadlockDetector {
+        #[derive(Debug, Copy)]
+        pub struct XREAppData_NSFreePolicy {
             pub _address: u8,
         }
-        /**
- * BlockingResourceBase
- * Base class of resources that might block clients trying to acquire them.
- * Does debugging and deadlock detection in DEBUG builds.
- **/
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct BlockingResourceBase {
-            /**
-   * mChainPrev
-   * A series of resource acquisitions creates a chain of orders.  This
-   * chain is implemented as a linked list; |mChainPrev| points to the
-   * resource most recently Acquire()'d before this one.
-   **/
-            pub mChainPrev: *mut root::mozilla::BlockingResourceBase,
-            /**
-   * mName
-   * A descriptive name for this resource.  Used in error
-   * messages etc.
-   */
-            pub mName: *const ::std::os::raw::c_char,
-            /**
-   * mType
-   * The more specific type of this resource.  Used to implement
-   * special semantics (e.g., reentrancy of monitors).
-   **/
-            pub mType: root::mozilla::BlockingResourceBase_BlockingResourceType,
-            /**
-   * mAcquired
-   * Indicates if this resource is currently acquired.
-   */
-            pub mAcquired: root::mozilla::BlockingResourceBase_AcquisitionState,
-        }
-        #[repr(u32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum BlockingResourceBase_BlockingResourceType {
-            eMutex = 0,
-            eReentrantMonitor = 1,
-            eCondVar = 2,
-            eRecursiveMutex = 3,
-        }
-        pub type BlockingResourceBase_DDT = root::mozilla::DeadlockDetector;
-        pub type BlockingResourceBase_AcquisitionState = bool;
-        extern "C" {
-            #[link_name =
-                  "_ZN7mozilla20BlockingResourceBase17kResourceTypeNameE"]
-            pub static mut BlockingResourceBase_kResourceTypeName:
-                       [*const ::std::os::raw::c_char; 0usize];
-        }
-        extern "C" {
-            #[link_name = "_ZN7mozilla20BlockingResourceBase9sCallOnceE"]
-            pub static mut BlockingResourceBase_sCallOnce:
-                       root::PRCallOnceType;
-        }
-        extern "C" {
-            #[link_name =
-                  "_ZN7mozilla20BlockingResourceBase26sResourceAcqnChainFrontTPIE"]
-            pub static mut BlockingResourceBase_sResourceAcqnChainFrontTPI:
-                       ::std::os::raw::c_uint;
-        }
-        extern "C" {
-            #[link_name =
-                  "_ZN7mozilla20BlockingResourceBase17sDeadlockDetectorE"]
-            pub static mut BlockingResourceBase_sDeadlockDetector:
-                       *mut root::mozilla::BlockingResourceBase_DDT;
-        }
-        #[test]
-        fn bindgen_test_layout_BlockingResourceBase() {
-            assert_eq!(::std::mem::size_of::<BlockingResourceBase>() , 24usize
-                       , concat ! (
-                       "Size of: " , stringify ! ( BlockingResourceBase ) ));
-            assert_eq! (::std::mem::align_of::<BlockingResourceBase>() ,
-                        8usize , concat ! (
-                        "Alignment of " , stringify ! ( BlockingResourceBase )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const BlockingResourceBase ) ) .
-                        mChainPrev as * const _ as usize } , 0usize , concat !
-                        (
-                        "Alignment of field: " , stringify ! (
-                        BlockingResourceBase ) , "::" , stringify ! (
-                        mChainPrev ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const BlockingResourceBase ) ) . mName
-                        as * const _ as usize } , 8usize , concat ! (
-                        "Alignment of field: " , stringify ! (
-                        BlockingResourceBase ) , "::" , stringify ! ( mName )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const BlockingResourceBase ) ) . mType
-                        as * const _ as usize } , 16usize , concat ! (
-                        "Alignment of field: " , stringify ! (
-                        BlockingResourceBase ) , "::" , stringify ! ( mType )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const BlockingResourceBase ) ) .
-                        mAcquired as * const _ as usize } , 20usize , concat !
-                        (
-                        "Alignment of field: " , stringify ! (
-                        BlockingResourceBase ) , "::" , stringify ! (
-                        mAcquired ) ));
-        }
-        /**
- * OffTheBooksMutex is identical to Mutex, except that OffTheBooksMutex doesn't
- * include leak checking.  Sometimes you want to intentionally "leak" a mutex
- * until shutdown; in these cases, OffTheBooksMutex is for you.
- */
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct OffTheBooksMutex {
-            pub _base: root::mozilla::detail::MutexImpl,
-            pub _base_1: root::mozilla::BlockingResourceBase,
-            pub mOwningThread: *mut root::PRThread,
-        }
-        #[test]
-        fn bindgen_test_layout_OffTheBooksMutex() {
-            assert_eq!(::std::mem::size_of::<OffTheBooksMutex>() , 72usize ,
-                       concat ! (
-                       "Size of: " , stringify ! ( OffTheBooksMutex ) ));
-            assert_eq! (::std::mem::align_of::<OffTheBooksMutex>() , 8usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( OffTheBooksMutex ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const OffTheBooksMutex ) ) .
-                        mOwningThread as * const _ as usize } , 64usize ,
-                        concat ! (
-                        "Alignment of field: " , stringify ! (
-                        OffTheBooksMutex ) , "::" , stringify ! (
-                        mOwningThread ) ));
-        }
-        /**
- * Mutex
- * When possible, use MutexAutoLock/MutexAutoUnlock to lock/unlock this
- * mutex within a scope, instead of calling Lock/Unlock directly.
- */
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct Mutex {
-            pub _base: root::mozilla::OffTheBooksMutex,
-        }
-        #[test]
-        fn bindgen_test_layout_Mutex() {
-            assert_eq!(::std::mem::size_of::<Mutex>() , 72usize , concat ! (
-                       "Size of: " , stringify ! ( Mutex ) ));
-            assert_eq! (::std::mem::align_of::<Mutex>() , 8usize , concat ! (
-                        "Alignment of " , stringify ! ( Mutex ) ));
+        #[test]
+        fn bindgen_test_layout_XREAppData_NSFreePolicy() {
+            assert_eq!(::std::mem::size_of::<XREAppData_NSFreePolicy>() ,
+                       1usize , concat ! (
+                       "Size of: " , stringify ! ( XREAppData_NSFreePolicy )
+                       ));
+            assert_eq! (::std::mem::align_of::<XREAppData_NSFreePolicy>() ,
+                        1usize , concat ! (
+                        "Alignment of " , stringify ! (
+                        XREAppData_NSFreePolicy ) ));
+        }
+        impl Clone for XREAppData_NSFreePolicy {
+            fn clone(&self) -> Self { *self }
         }
         pub mod image {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct ImageURL {
                 _unused: [u8; 0],
             }
-            /**
- * An ImageLib cache entry key.
- *
- * We key the cache on the initial URI (before any redirects), with some
- * canonicalization applied. See ComputeHash() for the details.
- * Controlled documents do not share their cache entries with
- * non-controlled documents, or other controlled documents.
- */
-            #[repr(C)]
-            #[derive(Debug)]
-            pub struct ImageCacheKey {
-                pub mURI: root::RefPtr<root::mozilla::image::ImageURL>,
-                pub mBlobSerial: [u64; 2usize],
-                pub mOriginAttributes: root::mozilla::OriginAttributes,
-                pub mControlledDocument: *mut ::std::os::raw::c_void,
-                pub mHash: root::PLDHashNumber,
-                pub mIsChrome: bool,
-            }
-            #[test]
-            fn bindgen_test_layout_ImageCacheKey() {
-                assert_eq!(::std::mem::size_of::<ImageCacheKey>() , 80usize ,
-                           concat ! (
-                           "Size of: " , stringify ! ( ImageCacheKey ) ));
-                assert_eq! (::std::mem::align_of::<ImageCacheKey>() , 8usize ,
-                            concat ! (
-                            "Alignment of " , stringify ! ( ImageCacheKey )
-                            ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ImageCacheKey ) ) . mURI as *
-                            const _ as usize } , 0usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ImageCacheKey ) , "::" , stringify ! ( mURI ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ImageCacheKey ) ) .
-                            mBlobSerial as * const _ as usize } , 8usize ,
-                            concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ImageCacheKey ) , "::" , stringify ! ( mBlobSerial
-                            ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ImageCacheKey ) ) .
-                            mOriginAttributes as * const _ as usize } ,
-                            24usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ImageCacheKey ) , "::" , stringify ! (
-                            mOriginAttributes ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ImageCacheKey ) ) .
-                            mControlledDocument as * const _ as usize } ,
-                            64usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ImageCacheKey ) , "::" , stringify ! (
-                            mControlledDocument ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ImageCacheKey ) ) . mHash as
-                            * const _ as usize } , 72usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ImageCacheKey ) , "::" , stringify ! ( mHash ) ));
-                assert_eq! (unsafe {
-                            & ( * ( 0 as * const ImageCacheKey ) ) . mIsChrome
-                            as * const _ as usize } , 76usize , concat ! (
-                            "Alignment of field: " , stringify ! (
-                            ImageCacheKey ) , "::" , stringify ! ( mIsChrome )
-                            ));
-            }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct Image {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct ProgressTracker {
                 _unused: [u8; 0],
             }
             #[repr(C)]
             pub struct IProgressObserver__bindgen_vtable(::std::os::raw::c_void);
-            /**
- * An interface for observing changes to image state, as reported by
- * ProgressTracker.
- *
- * This is the ImageLib-internal version of imgINotificationObserver,
- * essentially, with implementation details that code outside of ImageLib
- * shouldn't see.
- *
- * XXX(seth): It's preferable to avoid adding anything to this interface if
- * possible.  In the long term, it would be ideal to get to a place where we can
- * just use the imgINotificationObserver interface internally as well.
- */
+            /// An interface for observing changes to image state, as reported by
+            /// ProgressTracker.
+            ///
+            /// This is the ImageLib-internal version of imgINotificationObserver,
+            /// essentially, with implementation details that code outside of ImageLib
+            /// shouldn't see.
+            ///
+            /// XXX(seth): It's preferable to avoid adding anything to this interface if
+            /// possible.  In the long term, it would be ideal to get to a place where we can
+            /// just use the imgINotificationObserver interface internally as well.
             #[repr(C)]
             #[derive(Debug)]
             pub struct IProgressObserver {
                 pub vtable_: *const IProgressObserver__bindgen_vtable,
                 pub _base: u64,
             }
             #[test]
             fn bindgen_test_layout_IProgressObserver() {
@@ -9663,27 +6781,16 @@ pub mod root {
                            16usize , concat ! (
                            "Size of: " , stringify ! ( IProgressObserver ) ));
                 assert_eq! (::std::mem::align_of::<IProgressObserver>() ,
                             8usize , concat ! (
                             "Alignment of " , stringify ! ( IProgressObserver
                             ) ));
             }
         }
-        pub type CounterValue = i32;
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct NegativeType {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct PadType {
-            _unused: [u8; 0],
-        }
         #[repr(C)]
         pub struct CounterStyle__bindgen_vtable(::std::os::raw::c_void);
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct CounterStyle {
             pub vtable_: *const CounterStyle__bindgen_vtable,
             pub mStyle: i32,
         }
@@ -9975,16 +7082,26 @@ pub mod root {
             assert_eq! (unsafe {
                         & ( * ( 0 as * const StyleShapeSource ) ) .
                         mReferenceBox as * const _ as usize } , 9usize ,
                         concat ! (
                         "Alignment of field: " , stringify ! (
                         StyleShapeSource ) , "::" , stringify ! (
                         mReferenceBox ) ));
         }
+        /// <div rustbindgen="true" replaces="mozilla::UniquePtr">
+        ///
+        /// TODO(Emilio): This is a workaround and we should be able to get rid of this
+        /// one.
+        #[repr(C)]
+        #[derive(Debug, Copy, Clone)]
+        pub struct UniquePtr<T> {
+            pub mPtr: *mut T,
+            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
+        }
         pub const SERVO_PREF_ENABLED_align_content: bool = false;
         pub const SERVO_PREF_ENABLED_align_items: bool = false;
         pub const SERVO_PREF_ENABLED_align_self: bool = false;
         pub const SERVO_PREF_ENABLED_all: bool = true;
         pub const SERVO_PREF_ENABLED_animation: bool = false;
         pub const SERVO_PREF_ENABLED_animation_delay: bool = false;
         pub const SERVO_PREF_ENABLED_animation_direction: bool = false;
         pub const SERVO_PREF_ENABLED_animation_duration: bool = false;
@@ -10354,23 +7471,21 @@ pub mod root {
         pub const SERVO_PREF_ENABLED__moz_window_transform: bool = false;
         pub const SERVO_PREF_ENABLED__moz_window_transform_origin: bool =
             false;
         pub const SERVO_PREF_ENABLED_word_break: bool = false;
         pub const SERVO_PREF_ENABLED_word_spacing: bool = false;
         pub const SERVO_PREF_ENABLED_overflow_wrap: bool = false;
         pub const SERVO_PREF_ENABLED_writing_mode: bool = false;
         pub const SERVO_PREF_ENABLED_z_index: bool = false;
-        /**
- * This class holds all non-tree-structural state of an element that might be
- * used for selector matching eventually.
- *
- * This means the attributes, and the element state, such as :hover, :active,
- * etc...
- */
+        /// This class holds all non-tree-structural state of an element that might be
+        /// used for selector matching eventually.
+        ///
+        /// This means the attributes, and the element state, such as :hover, :active,
+        /// etc...
         #[repr(C)]
         #[derive(Debug)]
         pub struct ServoElementSnapshot {
             pub mAttrs: root::nsTArray<root::mozilla::ServoAttrSnapshot>,
             pub mClass: root::nsAttrValue,
             pub mState: root::mozilla::ServoElementSnapshot_ServoStateType,
             pub mContains: root::mozilla::ServoElementSnapshot_Flags,
             pub _bitfield_1: u8,
@@ -10832,20 +7947,18 @@ pub mod root {
             assert_eq! (unsafe {
                         & ( * ( 0 as * const AnimationPropertySegment ) ) .
                         mToComposite as * const _ as usize } , 201usize ,
                         concat ! (
                         "Alignment of field: " , stringify ! (
                         AnimationPropertySegment ) , "::" , stringify ! (
                         mToComposite ) ));
         }
-        /**
- * Stores the results of calculating the timing properties of an animation
- * at a given sample time.
- */
+        /// Stores the results of calculating the timing properties of an animation
+        /// at a given sample time.
         #[repr(C)]
         #[derive(Debug)]
         pub struct ComputedTiming {
             pub mActiveDuration: root::mozilla::StickyTimeDuration,
             pub mActiveTime: root::mozilla::StickyTimeDuration,
             pub mEndTime: root::mozilla::StickyTimeDuration,
             pub mProgress: [u64; 2usize],
             pub mCurrentIteration: u64,
@@ -10926,32 +8039,30 @@ pub mod root {
                         "Alignment of field: " , stringify ! ( ComputedTiming
                         ) , "::" , stringify ! ( mPhase ) ));
             assert_eq! (unsafe {
                         & ( * ( 0 as * const ComputedTiming ) ) . mBeforeFlag
                         as * const _ as usize } , 80usize , concat ! (
                         "Alignment of field: " , stringify ! ( ComputedTiming
                         ) , "::" , stringify ! ( mBeforeFlag ) ));
         }
-        /**
- * A single keyframe.
- *
- * This is the canonical form in which keyframe effects are stored and
- * corresponds closely to the type of objects returned via the getKeyframes()
- * API.
- *
- * Before computing an output animation value, however, we flatten these frames
- * down to a series of per-property value arrays where we also resolve any
- * overlapping shorthands/longhands, convert specified CSS values to computed
- * values, etc.
- *
- * When the target element or style context changes, however, we rebuild these
- * per-property arrays from the original list of keyframes objects. As a result,
- * these objects represent the master definition of the effect's values.
- */
+        /// A single keyframe.
+        ///
+        /// This is the canonical form in which keyframe effects are stored and
+        /// corresponds closely to the type of objects returned via the getKeyframes()
+        /// API.
+        ///
+        /// Before computing an output animation value, however, we flatten these frames
+        /// down to a series of per-property value arrays where we also resolve any
+        /// overlapping shorthands/longhands, convert specified CSS values to computed
+        /// values, etc.
+        ///
+        /// When the target element or style context changes, however, we rebuild these
+        /// per-property arrays from the original list of keyframes objects. As a result,
+        /// these objects represent the master definition of the effect's values.
         #[repr(C)]
         #[derive(Debug)]
         pub struct Keyframe {
             pub mOffset: [u64; 2usize],
             pub mComputedOffset: f64,
             pub mTimingFunction: [u64; 18usize],
             pub mComposite: [u8; 2usize],
             pub mPropertyValues: root::nsTArray<root::mozilla::PropertyValuePair>,
@@ -10984,19 +8095,17 @@ pub mod root {
                         "Alignment of field: " , stringify ! ( Keyframe ) ,
                         "::" , stringify ! ( mComposite ) ));
             assert_eq! (unsafe {
                         & ( * ( 0 as * const Keyframe ) ) . mPropertyValues as
                         * const _ as usize } , 176usize , concat ! (
                         "Alignment of field: " , stringify ! ( Keyframe ) ,
                         "::" , stringify ! ( mPropertyValues ) ));
         }
-        /**
- * A property-value pair specified on a keyframe.
- */
+        /// A property-value pair specified on a keyframe.
         #[repr(C)]
         #[derive(Debug)]
         pub struct PropertyValuePair {
             pub mProperty: root::nsCSSPropertyID,
             pub mValue: root::nsCSSValue,
             pub mServoDeclarationBlock: root::RefPtr<root::RawServoDeclarationBlock>,
             pub mSimulateComputeValuesFailure: bool,
         }
@@ -11063,38 +8172,34 @@ pub mod root {
                         & ( * ( 0 as * const PropertyStyleAnimationValuePair )
                         ) . mValue as * const _ as usize } , 8usize , concat !
                         (
                         "Alignment of field: " , stringify ! (
                         PropertyStyleAnimationValuePair ) , "::" , stringify !
                         ( mValue ) ));
         }
         #[test]
-        fn __bindgen_test_layout_DefaultDelete_instantiation_3() {
+        fn __bindgen_test_layout_DefaultDelete_open0_RawServoStyleSet_close0_instantiation() {
             assert_eq!(::std::mem::size_of::<root::mozilla::DefaultDelete>() ,
                        1usize , concat ! (
                        "Size of template specialization: " , stringify ! (
                        root::mozilla::DefaultDelete ) ));
             assert_eq!(::std::mem::align_of::<root::mozilla::DefaultDelete>()
                        , 1usize , concat ! (
                        "Alignment of template specialization: " , stringify !
                        ( root::mozilla::DefaultDelete ) ));
         }
-        /**
- * Utility class to handle animated style values
- */
+        /// Utility class to handle animated style values
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct StyleAnimationValue {
             pub _bindgen_opaque_blob: [u64; 2usize],
         }
         #[repr(u32)]
-        /**
-   * The types and values for the values that we extract and animate.
-   */
+        /// The types and values for the values that we extract and animate.
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum StyleAnimationValue_Unit {
             eUnit_Null = 0,
             eUnit_Normal = 1,
             eUnit_Auto = 2,
             eUnit_None = 3,
             eUnit_Enumerated = 4,
             eUnit_Visibility = 5,
@@ -11318,16 +8423,17 @@ pub mod root {
                         ) , "::" , stringify ! ( mServo ) ));
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct ServoCSSRuleList {
             _unused: [u8; 0],
         }
         #[repr(C)]
+        #[derive(Debug)]
         pub struct ServoStyleSheetInner {
             pub _base: root::mozilla::StyleSheetInfo,
             pub mContents: root::RefPtr<root::RawServoStyleSheetContents>,
             pub mURLData: root::RefPtr<root::mozilla::URLExtraData>,
         }
         #[test]
         fn bindgen_test_layout_ServoStyleSheetInner() {
             assert_eq!(::std::mem::size_of::<ServoStyleSheetInner>() ,
@@ -11455,30 +8561,28 @@ pub mod root {
                         concat ! (
                         "Alignment of field: " , stringify ! (
                         ComputedTimingFunction ) , "::" , stringify ! (
                         mStepsOrFrames ) ));
         }
         impl Clone for ComputedTimingFunction {
             fn clone(&self) -> Self { *self }
         }
-        /**
- * A ValueCalculator class that performs additional checks before performing
- * arithmetic operations such that if either operand is Forever (or the
- * negative equivalent) the result remains Forever (or the negative equivalent
- * as appropriate).
- *
- * Currently this only checks if either argument to each operation is
- * Forever/-Forever. However, it is possible that, for example,
- * aA + aB > INT64_MAX (or < INT64_MIN).
- *
- * We currently don't check for that case since we don't expect that to
- * happen often except under test conditions in which case the wrapping
- * behavior is probably acceptable.
- */
+        /// A ValueCalculator class that performs additional checks before performing
+        /// arithmetic operations such that if either operand is Forever (or the
+        /// negative equivalent) the result remains Forever (or the negative equivalent
+        /// as appropriate).
+        ///
+        /// Currently this only checks if either argument to each operation is
+        /// Forever/-Forever. However, it is possible that, for example,
+        /// aA + aB > INT64_MAX (or < INT64_MIN).
+        ///
+        /// We currently don't check for that case since we don't expect that to
+        /// happen often except under test conditions in which case the wrapping
+        /// behavior is probably acceptable.
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct StickyTimeDurationValueCalculator {
             pub _address: u8,
         }
         #[test]
         fn bindgen_test_layout_StickyTimeDurationValueCalculator() {
             assert_eq!(::std::mem::size_of::<StickyTimeDurationValueCalculator>()
@@ -11488,71 +8592,32 @@ pub mod root {
             assert_eq! (::std::mem::align_of::<StickyTimeDurationValueCalculator>()
                         , 1usize , concat ! (
                         "Alignment of " , stringify ! (
                         StickyTimeDurationValueCalculator ) ));
         }
         impl Clone for StickyTimeDurationValueCalculator {
             fn clone(&self) -> Self { *self }
         }
-        /**
- * Specialization of BaseTimeDuration that uses
- * StickyTimeDurationValueCalculator for arithmetic on the mValue member.
- *
- * Use this class when you need a time duration that is expected to hold values
- * of Forever (or the negative equivalent) *and* when you expect that
- * time duration to be used in arithmetic operations (and not just value
- * comparisons).
- */
+        /// Specialization of BaseTimeDuration that uses
+        /// StickyTimeDurationValueCalculator for arithmetic on the mValue member.
+        ///
+        /// Use this class when you need a time duration that is expected to hold values
+        /// of Forever (or the negative equivalent) *and* when you expect that
+        /// time duration to be used in arithmetic operations (and not just value
+        /// comparisons).
         pub type StickyTimeDuration = root::mozilla::BaseTimeDuration;
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
-        pub struct SVGLengthList {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct SVGNumberList {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct SVGPathData {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct SVGPointList {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct SVGAnimatedPreserveAspectRatio {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct SVGStringList {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct SVGTransformList {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
         pub struct DeclarationBlock {
             _unused: [u8; 0],
         }
-        /**
- * A structure representing a single attribute name and value.
- *
- * This is pretty similar to the private nsAttrAndChildArray::InternalAttr.
- */
+        /// A structure representing a single attribute name and value.
+        ///
+        /// This is pretty similar to the private nsAttrAndChildArray::InternalAttr.
         #[repr(C)]
         #[derive(Debug)]
         pub struct ServoAttrSnapshot {
             pub mName: root::nsAttrName,
             pub mValue: root::nsAttrValue,
         }
         #[test]
         fn bindgen_test_layout_ServoAttrSnapshot() {
@@ -11571,20 +8636,18 @@ pub mod root {
             assert_eq! (unsafe {
                         & ( * ( 0 as * const ServoAttrSnapshot ) ) . mValue as
                         * const _ as usize } , 8usize , concat ! (
                         "Alignment of field: " , stringify ! (
                         ServoAttrSnapshot ) , "::" , stringify ! ( mValue )
                         ));
         }
         #[repr(u8)]
-        /**
- * A bitflags enum class used to determine what data does a ServoElementSnapshot
- * contains.
- */
+        /// A bitflags enum class used to determine what data does a ServoElementSnapshot
+        /// contains.
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum ServoElementSnapshotFlags {
             State = 1,
             Attributes = 2,
             Id = 4,
             MaybeClass = 8,
             OtherPseudoClassState = 16,
         }
@@ -11616,40 +8679,16 @@ pub mod root {
                         ! (
                         "Alignment of field: " , stringify ! (
                         NonOwningAnimationTarget ) , "::" , stringify ! (
                         mPseudoType ) ));
         }
         impl Clone for NonOwningAnimationTarget {
             fn clone(&self) -> Self { *self }
         }
-        #[repr(u8)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum Directionality {
-            eDir_NotSet = 0,
-            eDir_RTL = 1,
-            eDir_LTR = 2,
-            eDir_Auto = 3,
-        }
-        /**
- * An DisplayItemClip represents the intersection of an optional rectangle
- * with a list of rounded rectangles (which is often empty), all in appunits.
- * It can represent everything CSS clipping can do to an element (except for
- * SVG clip-path), including no clipping at all.
- */
-        #[repr(C)]
-        #[derive(Debug)]
-        pub struct DisplayItemClip {
-            pub mClipRect: root::nsRect,
-            pub mRoundedClipRects: root::nsTArray<root::mozilla::DisplayItemClip_RoundedRect>,
-            pub mHaveClipRect: bool,
-        }
-        pub type DisplayItemClip_Color = root::mozilla::gfx::Color;
-        pub type DisplayItemClip_DrawTarget = root::mozilla::gfx::DrawTarget;
-        pub type DisplayItemClip_Path = root::mozilla::gfx::Path;
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct DisplayItemClip_RoundedRect {
             pub mRect: root::nsRect,
             pub mRadii: [root::nscoord; 8usize],
         }
         #[test]
         fn bindgen_test_layout_DisplayItemClip_RoundedRect() {
@@ -11672,47 +8711,16 @@ pub mod root {
                         mRadii as * const _ as usize } , 16usize , concat ! (
                         "Alignment of field: " , stringify ! (
                         DisplayItemClip_RoundedRect ) , "::" , stringify ! (
                         mRadii ) ));
         }
         impl Clone for DisplayItemClip_RoundedRect {
             fn clone(&self) -> Self { *self }
         }
-        #[test]
-        fn bindgen_test_layout_DisplayItemClip() {
-            assert_eq!(::std::mem::size_of::<DisplayItemClip>() , 32usize ,
-                       concat ! (
-                       "Size of: " , stringify ! ( DisplayItemClip ) ));
-            assert_eq! (::std::mem::align_of::<DisplayItemClip>() , 8usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( DisplayItemClip ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const DisplayItemClip ) ) . mClipRect
-                        as * const _ as usize } , 0usize , concat ! (
-                        "Alignment of field: " , stringify ! ( DisplayItemClip
-                        ) , "::" , stringify ! ( mClipRect ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const DisplayItemClip ) ) .
-                        mRoundedClipRects as * const _ as usize } , 16usize ,
-                        concat ! (
-                        "Alignment of field: " , stringify ! ( DisplayItemClip
-                        ) , "::" , stringify ! ( mRoundedClipRects ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const DisplayItemClip ) ) .
-                        mHaveClipRect as * const _ as usize } , 24usize ,
-                        concat ! (
-                        "Alignment of field: " , stringify ! ( DisplayItemClip
-                        ) , "::" , stringify ! ( mHaveClipRect ) ));
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct ContainerLayerParameters {
-            _unused: [u8; 0],
-        }
         #[repr(C)]
         #[derive(Debug)]
         pub struct ServoElementSnapshotTable {
             pub _base: [u64; 6usize],
         }
         #[test]
         fn bindgen_test_layout_ServoElementSnapshotTable() {
             assert_eq!(::std::mem::size_of::<ServoElementSnapshotTable>() ,
@@ -11882,35 +8890,31 @@ pub mod root {
             eIntID_PhysicalHomeButton = 47,
             eIntID_ScrollbarDisplayOnMouseMove = 48,
             eIntID_ScrollbarFadeBeginDelay = 49,
             eIntID_ScrollbarFadeDuration = 50,
             eIntID_ContextMenuOffsetVertical = 51,
             eIntID_ContextMenuOffsetHorizontal = 52,
         }
         #[repr(u32)]
-        /**
-   * Windows themes we currently detect.
-   */
+        /// Windows themes we currently detect.
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum LookAndFeel_WindowsTheme {
             eWindowsTheme_Generic = 0,
             eWindowsTheme_Classic = 1,
             eWindowsTheme_Aero = 2,
             eWindowsTheme_LunaBlue = 3,
             eWindowsTheme_LunaOlive = 4,
             eWindowsTheme_LunaSilver = 5,
             eWindowsTheme_Royale = 6,
             eWindowsTheme_Zune = 7,
             eWindowsTheme_AeroLite = 8,
         }
         #[repr(u32)]
-        /**
-   * Operating system versions.
-   */
+        /// Operating system versions.
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum LookAndFeel_OperatingSystemVersion {
             eOperatingSystemVersion_Windows7 = 2,
             eOperatingSystemVersion_Windows8 = 3,
             eOperatingSystemVersion_Windows10 = 4,
             eOperatingSystemVersion_Unknown = 5,
         }
         pub const LookAndFeel_eScrollArrow_None:
@@ -12011,16 +9015,17 @@ pub mod root {
             assert_eq! (::std::mem::align_of::<LookAndFeel>() , 1usize ,
                         concat ! (
                         "Alignment of " , stringify ! ( LookAndFeel ) ));
         }
         impl Clone for LookAndFeel {
             fn clone(&self) -> Self { *self }
         }
         #[repr(C)]
+        #[derive(Debug)]
         pub struct PseudoElementHashEntry {
             pub _base: root::PLDHashEntryHdr,
             pub mElement: root::RefPtr<root::mozilla::dom::Element>,
             pub mPseudoType: root::mozilla::CSSPseudoElementType,
         }
         pub type PseudoElementHashEntry_KeyType =
             root::mozilla::NonOwningAnimationTarget;
         pub type PseudoElementHashEntry_KeyTypePointer =
@@ -12050,26 +9055,16 @@ pub mod root {
             assert_eq! (unsafe {
                         & ( * ( 0 as * const PseudoElementHashEntry ) ) .
                         mPseudoType as * const _ as usize } , 16usize , concat
                         ! (
                         "Alignment of field: " , stringify ! (
                         PseudoElementHashEntry ) , "::" , stringify ! (
                         mPseudoType ) ));
         }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct RestyleTracker {
-            _unused: [u8; 0],
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct AnimationPerformanceWarning {
-            _unused: [u8; 0],
-        }
         pub type CSSPseudoClassTypeBase = u8;
         #[repr(u8)]
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum CSSPseudoClassType {
             empty = 0,
             mozOnlyWhitespace = 1,
             mozEmptyExceptChildrenWithLocalname = 2,
             lang = 3,
@@ -12174,24 +9169,22 @@ pub mod root {
                         concat ! (
                         "Alignment of " , stringify ! ( ServoMediaList ) ));
             assert_eq! (unsafe {
                         & ( * ( 0 as * const ServoMediaList ) ) . mRawList as
                         * const _ as usize } , 56usize , concat ! (
                         "Alignment of field: " , stringify ! ( ServoMediaList
                         ) , "::" , stringify ! ( mRawList ) ));
         }
-        /**
- * A PostTraversalTask is a task to be performed immediately after a Servo
- * traversal.  There are just a few tasks we need to perform, so we use this
- * class rather than Runnables, to avoid virtual calls and some allocations.
- *
- * A PostTraversalTask is only safe to run immediately after the Servo
- * traversal, since it can hold raw pointers to DOM objects.
- */
+        /// A PostTraversalTask is a task to be performed immediately after a Servo
+        /// traversal.  There are just a few tasks we need to perform, so we use this
+        /// class rather than Runnables, to avoid virtual calls and some allocations.
+        ///
+        /// A PostTraversalTask is only safe to run immediately after the Servo
+        /// traversal, since it can hold raw pointers to DOM objects.
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct PostTraversalTask {
             pub mType: root::mozilla::PostTraversalTask_Type,
             pub mTarget: *mut ::std::os::raw::c_void,
             pub mResult: root::nsresult,
         }
         #[repr(i32)]
@@ -12229,32 +9222,16 @@ pub mod root {
                         "Alignment of field: " , stringify ! (
                         PostTraversalTask ) , "::" , stringify ! ( mResult )
                         ));
         }
         impl Clone for PostTraversalTask {
             fn clone(&self) -> Self { *self }
         }
         #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct ServoStyleRuleMap {
-            _unused: [u8; 0],
-        }
-        #[repr(u8)]
-        /**
- * A few flags used to track which kind of stylist state we may need to
- * update.
- */
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum StylistState {
-            NotDirty = 0,
-            StyleSheetsDirty = 1,
-            FullyDirty = 2,
-        }
-        #[repr(C)]
         #[derive(Debug)]
         pub struct CSSFontFaceDescriptors {
             pub mFamily: root::nsCSSValue,
             pub mStyle: root::nsCSSValue,
             pub mWeight: root::nsCSSValue,
             pub mStretch: root::nsCSSValue,
             pub mSrc: root::nsCSSValue,
             pub mUnicodeRange: root::nsCSSValue,
@@ -12332,219 +9309,17 @@ pub mod root {
             assert_eq! (unsafe {
                         & ( * ( 0 as * const CSSFontFaceDescriptors ) ) .
                         mDisplay as * const _ as usize } , 128usize , concat !
                         (
                         "Alignment of field: " , stringify ! (
                         CSSFontFaceDescriptors ) , "::" , stringify ! (
                         mDisplay ) ));
         }
-        /**
- * <div rustbindgen="true" replaces="mozilla::UniquePtr">
- *
- * TODO(Emilio): This is a workaround and we should be able to get rid of this
- * one.
- */
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct UniquePtr<T> {
-            pub mPtr: *mut T,
-            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
-        }
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct _IO_FILE {
-        pub _flags: ::std::os::raw::c_int,
-        pub _IO_read_ptr: *mut ::std::os::raw::c_char,
-        pub _IO_read_end: *mut ::std::os::raw::c_char,
-        pub _IO_read_base: *mut ::std::os::raw::c_char,
-        pub _IO_write_base: *mut ::std::os::raw::c_char,
-        pub _IO_write_ptr: *mut ::std::os::raw::c_char,
-        pub _IO_write_end: *mut ::std::os::raw::c_char,
-        pub _IO_buf_base: *mut ::std::os::raw::c_char,
-        pub _IO_buf_end: *mut ::std::os::raw::c_char,
-        pub _IO_save_base: *mut ::std::os::raw::c_char,
-        pub _IO_backup_base: *mut ::std::os::raw::c_char,
-        pub _IO_save_end: *mut ::std::os::raw::c_char,
-        pub _markers: *mut root::_IO_marker,
-        pub _chain: *mut root::_IO_FILE,
-        pub _fileno: ::std::os::raw::c_int,
-        pub _flags2: ::std::os::raw::c_int,
-        pub _old_offset: root::__off_t,
-        pub _cur_column: ::std::os::raw::c_ushort,
-        pub _vtable_offset: ::std::os::raw::c_schar,
-        pub _shortbuf: [::std::os::raw::c_char; 1usize],
-        pub _lock: *mut root::_IO_lock_t,
-        pub _offset: root::__off64_t,
-        pub __pad1: *mut ::std::os::raw::c_void,
-        pub __pad2: *mut ::std::os::raw::c_void,
-        pub __pad3: *mut ::std::os::raw::c_void,
-        pub __pad4: *mut ::std::os::raw::c_void,
-        pub __pad5: usize,
-        pub _mode: ::std::os::raw::c_int,
-        pub _unused2: [::std::os::raw::c_char; 20usize],
-    }
-    #[test]
-    fn bindgen_test_layout__IO_FILE() {
-        assert_eq!(::std::mem::size_of::<_IO_FILE>() , 216usize , concat ! (
-                   "Size of: " , stringify ! ( _IO_FILE ) ));
-        assert_eq! (::std::mem::align_of::<_IO_FILE>() , 8usize , concat ! (
-                    "Alignment of " , stringify ! ( _IO_FILE ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _flags as * const _ as
-                    usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _flags ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_read_ptr as *
-                    const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_read_ptr ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_read_end as *
-                    const _ as usize } , 16usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_read_end ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_read_base as *
-                    const _ as usize } , 24usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_read_base ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_write_base as *
-                    const _ as usize } , 32usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_write_base ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_write_ptr as *
-                    const _ as usize } , 40usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_write_ptr ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_write_end as *
-                    const _ as usize } , 48usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_write_end ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_buf_base as *
-                    const _ as usize } , 56usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_buf_base ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_buf_end as * const
-                    _ as usize } , 64usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_buf_end ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_save_base as *
-                    const _ as usize } , 72usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_save_base ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_backup_base as *
-                    const _ as usize } , 80usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_backup_base ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _IO_save_end as *
-                    const _ as usize } , 88usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _IO_save_end ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _markers as * const _
-                    as usize } , 96usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _markers ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _chain as * const _ as
-                    usize } , 104usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _chain ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _fileno as * const _
-                    as usize } , 112usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _fileno ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _flags2 as * const _
-                    as usize } , 116usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _flags2 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _old_offset as * const
-                    _ as usize } , 120usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _old_offset ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _cur_column as * const
-                    _ as usize } , 128usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _cur_column ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _vtable_offset as *
-                    const _ as usize } , 130usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _vtable_offset ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _shortbuf as * const _
-                    as usize } , 131usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _shortbuf ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _lock as * const _ as
-                    usize } , 136usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _lock ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _offset as * const _
-                    as usize } , 144usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _offset ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . __pad1 as * const _ as
-                    usize } , 152usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( __pad1 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . __pad2 as * const _ as
-                    usize } , 160usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( __pad2 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . __pad3 as * const _ as
-                    usize } , 168usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( __pad3 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . __pad4 as * const _ as
-                    usize } , 176usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( __pad4 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . __pad5 as * const _ as
-                    usize } , 184usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( __pad5 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _mode as * const _ as
-                    usize } , 192usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _mode ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_FILE ) ) . _unused2 as * const _
-                    as usize } , 196usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_FILE ) , "::" ,
-                    stringify ! ( _unused2 ) ));
-    }
-    impl Clone for _IO_FILE {
-        fn clone(&self) -> Self { *self }
-    }
-    pub type FILE = root::_IO_FILE;
-    pub type va_list = root::__builtin_va_list;
+    }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct InfallibleAllocPolicy {
         pub _address: u8,
     }
     #[test]
     fn bindgen_test_layout_InfallibleAllocPolicy() {
         assert_eq!(::std::mem::size_of::<InfallibleAllocPolicy>() , 1usize ,
@@ -12553,28 +9328,25 @@ pub mod root {
         assert_eq! (::std::mem::align_of::<InfallibleAllocPolicy>() , 1usize ,
                     concat ! (
                     "Alignment of " , stringify ! ( InfallibleAllocPolicy )
                     ));
     }
     impl Clone for InfallibleAllocPolicy {
         fn clone(&self) -> Self { *self }
     }
-    /**
- * MozRefCountType is Mozilla's reference count type.
- *
- * We use the same type to represent the refcount of RefCounted objects
- * as well, in order to be able to use the leak detection facilities
- * that are implemented by XPCOM.
- *
- * Note that this type is not in the mozilla namespace so that it is
- * usable for both C and C++ code.
- */
+    /// MozRefCountType is Mozilla's reference count type.
+    ///
+    /// We use the same type to represent the refcount of RefCounted objects
+    /// as well, in order to be able to use the leak detection facilities
+    /// that are implemented by XPCOM.
+    ///
+    /// Note that this type is not in the mozilla namespace so that it is
+    /// usable for both C and C++ code.
     pub type MozRefCountType = usize;
-    pub type MozExternalRefCountType = u32;
     pub const nsresult_NS_ERROR_NO_INTERFACE: root::nsresult =
         nsresult::NS_NOINTERFACE;
     pub const nsresult_NS_ERROR_INVALID_ARG: root::nsresult =
         nsresult::NS_ERROR_ILLEGAL_VALUE;
     pub const nsresult_NS_ERROR_INVALID_POINTER: root::nsresult =
         nsresult::NS_ERROR_ILLEGAL_VALUE;
     pub const nsresult_NS_ERROR_NULL_POINTER: root::nsresult =
         nsresult::NS_ERROR_ILLEGAL_VALUE;
@@ -13091,392 +9863,16 @@ pub mod root {
         NS_ERROR_DOCUMENT_IS_PRINTMODE = 2155349969,
         NS_SUCCESS_DONT_FIXUP = 7864321,
         NS_SUCCESS_RESTART_APP_NOT_SAME_PROFILE = 7864323,
         NS_SUCCESS_UNORM_NOTFOUND = 7864337,
         NS_ERROR_NOT_IN_TREE = 2155348006,
         NS_OK_NO_NAME_CLAUSE_HANDLED = 7864354,
     }
     pub type nsrefcnt = root::MozRefCountType;
-    pub type _IO_lock_t = ::std::os::raw::c_void;
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct _IO_marker {
-        pub _next: *mut root::_IO_marker,
-        pub _sbuf: *mut root::_IO_FILE,
-        pub _pos: ::std::os::raw::c_int,
-    }
-    #[test]
-    fn bindgen_test_layout__IO_marker() {
-        assert_eq!(::std::mem::size_of::<_IO_marker>() , 24usize , concat ! (
-                   "Size of: " , stringify ! ( _IO_marker ) ));
-        assert_eq! (::std::mem::align_of::<_IO_marker>() , 8usize , concat ! (
-                    "Alignment of " , stringify ! ( _IO_marker ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_marker ) ) . _next as * const _
-                    as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_marker ) , "::"
-                    , stringify ! ( _next ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_marker ) ) . _sbuf as * const _
-                    as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_marker ) , "::"
-                    , stringify ! ( _sbuf ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const _IO_marker ) ) . _pos as * const _ as
-                    usize } , 16usize , concat ! (
-                    "Alignment of field: " , stringify ! ( _IO_marker ) , "::"
-                    , stringify ! ( _pos ) ));
-    }
-    impl Clone for _IO_marker {
-        fn clone(&self) -> Self { *self }
-    }
-    #[repr(C)]
-    pub struct nsQueryFrame__bindgen_vtable(::std::os::raw::c_void);
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsQueryFrame {
-        pub vtable_: *const nsQueryFrame__bindgen_vtable,
-    }
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsQueryFrame_FrameIID {
-        BRFrame_id = 0,
-        DetailsFrame_id = 1,
-        nsAutoRepeatBoxFrame_id = 2,
-        nsBCTableCellFrame_id = 3,
-        nsBackdropFrame_id = 4,
-        nsBlockFrame_id = 5,
-        nsBox_id = 6,
-        nsBoxFrame_id = 7,
-        nsBulletFrame_id = 8,
-        nsButtonBoxFrame_id = 9,
-        nsCanvasFrame_id = 10,
-        nsColorControlFrame_id = 11,
-        nsColumnSetFrame_id = 12,
-        nsComboboxControlFrame_id = 13,
-        nsComboboxDisplayFrame_id = 14,
-        nsContinuingTextFrame_id = 15,
-        nsDateTimeControlFrame_id = 16,
-        nsDeckFrame_id = 17,
-        nsDocElementBoxFrame_id = 18,
-        nsFieldSetFrame_id = 19,
-        nsFileControlFrame_id = 20,
-        nsFirstLetterFrame_id = 21,
-        nsFirstLineFrame_id = 22,
-        nsFlexContainerFrame_id = 23,
-        nsFrame_id = 24,
-        nsGfxButtonControlFrame_id = 25,
-        nsGfxCheckboxControlFrame_id = 26,
-        nsGfxRadioControlFrame_id = 27,
-        nsGridContainerFrame_id = 28,
-        nsGridRowGroupFrame_id = 29,
-        nsGridRowLeafFrame_id = 30,
-        nsGroupBoxFrame_id = 31,
-        nsHTMLButtonControlFrame_id = 32,
-        nsHTMLCanvasFrame_id = 33,
-        nsHTMLFramesetBlankFrame_id = 34,
-        nsHTMLFramesetBorderFrame_id = 35,
-        nsHTMLFramesetFrame_id = 36,
-        nsHTMLScrollFrame_id = 37,
-        nsImageBoxFrame_id = 38,
-        nsImageControlFrame_id = 39,
-        nsImageFrame_id = 40,
-        nsInlineFrame_id = 41,
-        nsLeafBoxFrame_id = 42,
-        nsLegendFrame_id = 43,
-        nsListBoxBodyFrame_id = 44,
-        nsListControlFrame_id = 45,
-        nsListItemFrame_id = 46,
-        nsMathMLFrame_id = 47,
-        nsMathMLmactionFrame_id = 48,
-        nsMathMLmathBlockFrame_id = 49,
-        nsMathMLmathInlineFrame_id = 50,
-        nsMathMLmencloseFrame_id = 51,
-        nsMathMLmfencedFrame_id = 52,
-        nsMathMLmfracFrame_id = 53,
-        nsMathMLmmultiscriptsFrame_id = 54,
-        nsMathMLmoFrame_id = 55,
-        nsMathMLmpaddedFrame_id = 56,
-        nsMathMLmrootFrame_id = 57,
-        nsMathMLmrowFrame_id = 58,
-        nsMathMLmspaceFrame_id = 59,
-        nsMathMLmsqrtFrame_id = 60,
-        nsMathMLmtableFrame_id = 61,
-        nsMathMLmtableWrapperFrame_id = 62,
-        nsMathMLmtdFrame_id = 63,
-        nsMathMLmtdInnerFrame_id = 64,
-        nsMathMLmtrFrame_id = 65,
-        nsMathMLmunderoverFrame_id = 66,
-        nsMathMLsemanticsFrame_id = 67,
-        nsMathMLTokenFrame_id = 68,
-        nsMenuBarFrame_id = 69,
-        nsMenuFrame_id = 70,
-        nsMenuPopupFrame_id = 71,
-        nsMeterFrame_id = 72,
-        nsNumberControlFrame_id = 73,
-        nsPluginFrame_id = 74,
-        nsPageBreakFrame_id = 75,
-        nsPageContentFrame_id = 76,
-        nsPageFrame_id = 77,
-        nsPlaceholderFrame_id = 78,
-        nsPopupSetFrame_id = 79,
-        nsProgressFrame_id = 80,
-        nsProgressMeterFrame_id = 81,
-        nsRangeFrame_id = 82,
-        nsResizerFrame_id = 83,
-        nsRootBoxFrame_id = 84,
-        nsRubyBaseContainerFrame_id = 85,
-        nsRubyBaseFrame_id = 86,
-        nsRubyFrame_id = 87,
-        nsRubyTextContainerFrame_id = 88,
-        nsRubyTextFrame_id = 89,
-        nsScrollbarButtonFrame_id = 90,
-        nsScrollbarFrame_id = 91,
-        nsSelectsAreaFrame_id = 92,
-        nsSimplePageSequenceFrame_id = 93,
-        nsSliderFrame_id = 94,
-        nsSplitterFrame_id = 95,
-        nsStackFrame_id = 96,
-        nsSubDocumentFrame_id = 97,
-        nsSVGAFrame_id = 98,
-        nsSVGClipPathFrame_id = 99,
-        nsSVGContainerFrame_id = 100,
-        SVGFEContainerFrame_id = 101,
-        SVGFEImageFrame_id = 102,
-        SVGFELeafFrame_id = 103,
-        SVGFEUnstyledLeafFrame_id = 104,
-        nsSVGFilterFrame_id = 105,
-        nsSVGForeignObjectFrame_id = 106,
-        nsSVGGenericContainerFrame_id = 107,
-        nsSVGGFrame_id = 108,
-        nsSVGImageFrame_id = 109,
-        nsSVGInnerSVGFrame_id = 110,
-        nsSVGLinearGradientFrame_id = 111,
-        nsSVGMarkerFrame_id = 112,
-        nsSVGMarkerAnonChildFrame_id = 113,
-        nsSVGMaskFrame_id = 114,
-        nsSVGOuterSVGFrame_id = 115,
-        nsSVGOuterSVGAnonChildFrame_id = 116,
-        SVGGeometryFrame_id = 117,
-        nsSVGPatternFrame_id = 118,
-        nsSVGRadialGradientFrame_id = 119,
-        nsSVGStopFrame_id = 120,
-        nsSVGSwitchFrame_id = 121,
-        nsSVGSymbolFrame_id = 122,
-        SVGTextFrame_id = 123,
-        nsSVGUseFrame_id = 124,
-        SVGViewFrame_id = 125,
-        nsTableCellFrame_id = 126,
-        nsTableColFrame_id = 127,
-        nsTableColGroupFrame_id = 128,
-        nsTableFrame_id = 129,
-        nsTableWrapperFrame_id = 130,
-        nsTableRowFrame_id = 131,
-        nsTableRowGroupFrame_id = 132,
-        nsTextBoxFrame_id = 133,
-        nsTextControlFrame_id = 134,
-        nsTextFrame_id = 135,
-        nsTitleBarFrame_id = 136,
-        nsTreeBodyFrame_id = 137,
-        nsTreeColFrame_id = 138,
-        nsVideoFrame_id = 139,
-        nsXULLabelFrame_id = 140,
-        nsXULScrollFrame_id = 141,
-        ViewportFrame_id = 142,
-        nsContainerFrame_id = 143,
-        nsFormControlFrame_id = 144,
-        nsIFrame_id = 145,
-        nsLeafFrame_id = 146,
-        nsMathMLContainerFrame_id = 147,
-        nsRubyContentFrame_id = 148,
-        nsSplittableFrame_id = 149,
-        nsSVGDisplayContainerFrame_id = 150,
-        nsSVGGradientFrame_id = 151,
-        nsSVGPaintServerFrame_id = 152,
-        nsIAnonymousContentCreator_id = 153,
-        nsIComboboxControlFrame_id = 154,
-        nsIFormControlFrame_id = 155,
-        nsIFrameFrame_id = 156,
-        nsIListControlFrame_id = 157,
-        nsIMathMLFrame_id = 158,
-        nsIMenuFrame_id = 159,
-        nsIObjectFrame_id = 160,
-        nsIPageSequenceFrame_id = 161,
-        nsIPercentBSizeObserver_id = 162,
-        nsIRootBox_id = 163,
-        nsIScrollableFrame_id = 164,
-        nsIScrollbarMediator_id = 165,
-        nsISelectControlFrame_id = 166,
-        nsISVGSVGFrame_id = 167,
-        nsIStatefulFrame_id = 168,
-        nsITableCellLayout_id = 169,
-        nsITableLayout_id = 170,
-        nsITextControlFrame_id = 171,
-        nsITreeBoxObject_id = 172,
-        nsSVGDisplayableFrame_id = 173,
-        NON_FRAME_MARKER = 174,
-    }
-    #[repr(u8)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsQueryFrame_ClassID {
-        BRFrame_id = 0,
-        DetailsFrame_id = 1,
-        nsAutoRepeatBoxFrame_id = 2,
-        nsBCTableCellFrame_id = 3,
-        nsBackdropFrame_id = 4,
-        nsBlockFrame_id = 5,
-        nsBox_id = 6,
-        nsBoxFrame_id = 7,
-        nsBulletFrame_id = 8,
-        nsButtonBoxFrame_id = 9,
-        nsCanvasFrame_id = 10,
-        nsColorControlFrame_id = 11,
-        nsColumnSetFrame_id = 12,
-        nsComboboxControlFrame_id = 13,
-        nsComboboxDisplayFrame_id = 14,
-        nsContinuingTextFrame_id = 15,
-        nsDateTimeControlFrame_id = 16,
-        nsDeckFrame_id = 17,
-        nsDocElementBoxFrame_id = 18,
-        nsFieldSetFrame_id = 19,
-        nsFileControlFrame_id = 20,
-        nsFirstLetterFrame_id = 21,
-        nsFirstLineFrame_id = 22,
-        nsFlexContainerFrame_id = 23,
-        nsFrame_id = 24,
-        nsGfxButtonControlFrame_id = 25,
-        nsGfxCheckboxControlFrame_id = 26,
-        nsGfxRadioControlFrame_id = 27,
-        nsGridContainerFrame_id = 28,
-        nsGridRowGroupFrame_id = 29,
-        nsGridRowLeafFrame_id = 30,
-        nsGroupBoxFrame_id = 31,
-        nsHTMLButtonControlFrame_id = 32,
-        nsHTMLCanvasFrame_id = 33,
-        nsHTMLFramesetBlankFrame_id = 34,
-        nsHTMLFramesetBorderFrame_id = 35,
-        nsHTMLFramesetFrame_id = 36,
-        nsHTMLScrollFrame_id = 37,
-        nsImageBoxFrame_id = 38,
-        nsImageControlFrame_id = 39,
-        nsImageFrame_id = 40,
-        nsInlineFrame_id = 41,
-        nsLeafBoxFrame_id = 42,
-        nsLegendFrame_id = 43,
-        nsListBoxBodyFrame_id = 44,
-        nsListControlFrame_id = 45,
-        nsListItemFrame_id = 46,
-        nsMathMLFrame_id = 47,
-        nsMathMLmactionFrame_id = 48,
-        nsMathMLmathBlockFrame_id = 49,
-        nsMathMLmathInlineFrame_id = 50,
-        nsMathMLmencloseFrame_id = 51,
-        nsMathMLmfencedFrame_id = 52,
-        nsMathMLmfracFrame_id = 53,
-        nsMathMLmmultiscriptsFrame_id = 54,
-        nsMathMLmoFrame_id = 55,
-        nsMathMLmpaddedFrame_id = 56,
-        nsMathMLmrootFrame_id = 57,
-        nsMathMLmrowFrame_id = 58,
-        nsMathMLmspaceFrame_id = 59,
-        nsMathMLmsqrtFrame_id = 60,
-        nsMathMLmtableFrame_id = 61,
-        nsMathMLmtableWrapperFrame_id = 62,
-        nsMathMLmtdFrame_id = 63,
-        nsMathMLmtdInnerFrame_id = 64,
-        nsMathMLmtrFrame_id = 65,
-        nsMathMLmunderoverFrame_id = 66,
-        nsMathMLsemanticsFrame_id = 67,
-        nsMathMLTokenFrame_id = 68,
-        nsMenuBarFrame_id = 69,
-        nsMenuFrame_id = 70,
-        nsMenuPopupFrame_id = 71,
-        nsMeterFrame_id = 72,
-        nsNumberControlFrame_id = 73,
-        nsPluginFrame_id = 74,
-        nsPageBreakFrame_id = 75,
-        nsPageContentFrame_id = 76,
-        nsPageFrame_id = 77,
-        nsPlaceholderFrame_id = 78,
-        nsPopupSetFrame_id = 79,
-        nsProgressFrame_id = 80,
-        nsProgressMeterFrame_id = 81,
-        nsRangeFrame_id = 82,
-        nsResizerFrame_id = 83,
-        nsRootBoxFrame_id = 84,
-        nsRubyBaseContainerFrame_id = 85,
-        nsRubyBaseFrame_id = 86,
-        nsRubyFrame_id = 87,
-        nsRubyTextContainerFrame_id = 88,
-        nsRubyTextFrame_id = 89,
-        nsScrollbarButtonFrame_id = 90,
-        nsScrollbarFrame_id = 91,
-        nsSelectsAreaFrame_id = 92,
-        nsSimplePageSequenceFrame_id = 93,
-        nsSliderFrame_id = 94,
-        nsSplitterFrame_id = 95,
-        nsStackFrame_id = 96,
-        nsSubDocumentFrame_id = 97,
-        nsSVGAFrame_id = 98,
-        nsSVGClipPathFrame_id = 99,
-        nsSVGContainerFrame_id = 100,
-        SVGFEContainerFrame_id = 101,
-        SVGFEImageFrame_id = 102,
-        SVGFELeafFrame_id = 103,
-        SVGFEUnstyledLeafFrame_id = 104,
-        nsSVGFilterFrame_id = 105,
-        nsSVGForeignObjectFrame_id = 106,
-        nsSVGGenericContainerFrame_id = 107,
-        nsSVGGFrame_id = 108,
-        nsSVGImageFrame_id = 109,
-        nsSVGInnerSVGFrame_id = 110,
-        nsSVGLinearGradientFrame_id = 111,
-        nsSVGMarkerFrame_id = 112,
-        nsSVGMarkerAnonChildFrame_id = 113,
-        nsSVGMaskFrame_id = 114,
-        nsSVGOuterSVGFrame_id = 115,
-        nsSVGOuterSVGAnonChildFrame_id = 116,
-        SVGGeometryFrame_id = 117,
-        nsSVGPatternFrame_id = 118,
-        nsSVGRadialGradientFrame_id = 119,
-        nsSVGStopFrame_id = 120,
-        nsSVGSwitchFrame_id = 121,
-        nsSVGSymbolFrame_id = 122,
-        SVGTextFrame_id = 123,
-        nsSVGUseFrame_id = 124,
-        SVGViewFrame_id = 125,
-        nsTableCellFrame_id = 126,
-        nsTableColFrame_id = 127,
-        nsTableColGroupFrame_id = 128,
-        nsTableFrame_id = 129,
-        nsTableWrapperFrame_id = 130,
-        nsTableRowFrame_id = 131,
-        nsTableRowGroupFrame_id = 132,
-        nsTextBoxFrame_id = 133,
-        nsTextControlFrame_id = 134,
-        nsTextFrame_id = 135,
-        nsTitleBarFrame_id = 136,
-        nsTreeBodyFrame_id = 137,
-        nsTreeColFrame_id = 138,
-        nsVideoFrame_id = 139,
-        nsXULLabelFrame_id = 140,
-        nsXULScrollFrame_id = 141,
-        ViewportFrame_id = 142,
-    }
-    #[test]
-    fn bindgen_test_layout_nsQueryFrame() {
-        assert_eq!(::std::mem::size_of::<nsQueryFrame>() , 8usize , concat ! (
-                   "Size of: " , stringify ! ( nsQueryFrame ) ));
-        assert_eq! (::std::mem::align_of::<nsQueryFrame>() , 8usize , concat !
-                    ( "Alignment of " , stringify ! ( nsQueryFrame ) ));
-    }
-    impl Clone for nsQueryFrame {
-        fn clone(&self) -> Self { *self }
-    }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsAString {
         pub _base: root::mozilla::detail::nsStringRepr,
     }
     pub type nsAString_self_type = root::nsAString;
     extern "C" {
         #[link_name = "_ZN9nsAString12kMaxCapacityE"]
@@ -13524,16 +9920,44 @@ pub mod root {
                     & ( * ( 0 as * const nsSubstringTuple ) ) . mFragB as *
                     const _ as usize } , 16usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsSubstringTuple )
                     , "::" , stringify ! ( mFragB ) ));
     }
     impl Clone for nsSubstringTuple {
         fn clone(&self) -> Self { *self }
     }
+    pub type nsString_self_type = ::nsstring::nsStringRepr;
+    #[repr(C)]
+    #[derive(Debug, Copy)]
+    pub struct nsString_Segment {
+        pub mBegin: u32,
+        pub mLength: u32,
+    }
+    #[test]
+    fn bindgen_test_layout_nsString_Segment() {
+        assert_eq!(::std::mem::size_of::<nsString_Segment>() , 8usize , concat
+                   ! ( "Size of: " , stringify ! ( nsString_Segment ) ));
+        assert_eq! (::std::mem::align_of::<nsString_Segment>() , 4usize ,
+                    concat ! (
+                    "Alignment of " , stringify ! ( nsString_Segment ) ));
+        assert_eq! (unsafe {
+                    & ( * ( 0 as * const nsString_Segment ) ) . mBegin as *
+                    const _ as usize } , 0usize , concat ! (
+                    "Alignment of field: " , stringify ! ( nsString_Segment )
+                    , "::" , stringify ! ( mBegin ) ));
+        assert_eq! (unsafe {
+                    & ( * ( 0 as * const nsString_Segment ) ) . mLength as *
+                    const _ as usize } , 4usize , concat ! (
+                    "Alignment of field: " , stringify ! ( nsString_Segment )
+                    , "::" , stringify ! ( mLength ) ));
+    }
+    impl Clone for nsString_Segment {
+        fn clone(&self) -> Self { *self }
+    }
     #[repr(C)]
     pub struct nsAutoString {
         pub _base: root::nsFixedString,
         pub mStorage: [root::mozilla::detail::nsStringRepr_char_type; 64usize],
     }
     pub type nsAutoString_self_type = root::nsAutoString;
     pub const nsAutoString_kDefaultStorageSize:
               root::nsAutoString__bindgen_ty_1 =
@@ -13549,31 +9973,16 @@ pub mod root {
                     ( "Alignment of " , stringify ! ( nsAutoString ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsAutoString ) ) . mStorage as *
                     const _ as usize } , 32usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsAutoString ) ,
                     "::" , stringify ! ( mStorage ) ));
     }
     #[repr(C)]
-    #[derive(Debug)]
-    pub struct nsDependentSubstring {
-        pub _base: root::nsAString,
-    }
-    pub type nsDependentSubstring_self_type = root::nsDependentSubstring;
-    #[test]
-    fn bindgen_test_layout_nsDependentSubstring() {
-        assert_eq!(::std::mem::size_of::<nsDependentSubstring>() , 16usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( nsDependentSubstring ) ));
-        assert_eq! (::std::mem::align_of::<nsDependentSubstring>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsDependentSubstring ) ));
-    }
-    #[repr(C)]
     pub struct nsStringComparator__bindgen_vtable(::std::os::raw::c_void);
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsStringComparator {
         pub vtable_: *const nsStringComparator__bindgen_vtable,
     }
     pub type nsStringComparator_char_type = u16;
     #[test]
@@ -13682,32 +10091,16 @@ pub mod root {
     #[test]
     fn bindgen_test_layout_nsCString() {
         assert_eq!(::std::mem::size_of::<nsCString>() , 16usize , concat ! (
                    "Size of: " , stringify ! ( nsCString ) ));
         assert_eq! (::std::mem::align_of::<nsCString>() , 8usize , concat ! (
                     "Alignment of " , stringify ! ( nsCString ) ));
     }
     #[repr(C)]
-    #[derive(Debug)]
-    pub struct nsDependentCSubstring {
-        pub _base: root::nsACString,
-    }
-    pub type nsDependentCSubstring_self_type = root::nsDependentCSubstring;
-    #[test]
-    fn bindgen_test_layout_nsDependentCSubstring() {
-        assert_eq!(::std::mem::size_of::<nsDependentCSubstring>() , 16usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( nsDependentCSubstring ) ));
-        assert_eq! (::std::mem::align_of::<nsDependentCSubstring>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsDependentCSubstring )
-                    ));
-    }
-    #[repr(C)]
     pub struct nsCStringComparator__bindgen_vtable(::std::os::raw::c_void);
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsCStringComparator {
         pub vtable_: *const nsCStringComparator__bindgen_vtable,
     }
     pub type nsCStringComparator_char_type = ::std::os::raw::c_char;
     #[test]
@@ -13719,22 +10112,20 @@ pub mod root {
                     concat ! (
                     "Alignment of " , stringify ! ( nsCStringComparator ) ));
     }
     impl Clone for nsCStringComparator {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
     pub struct nsISupports__bindgen_vtable(::std::os::raw::c_void);
-    /**
- * Basic component object model interface. Objects which implement
- * this interface support runtime interface discovery (QueryInterface)
- * and a reference counted memory model (AddRef/Release). This is
- * modelled after the win32 IUnknown API.
- */
+    /// Basic component object model interface. Objects which implement
+    /// this interface support runtime interface discovery (QueryInterface)
+    /// and a reference counted memory model (AddRef/Release). This is
+    /// modelled after the win32 IUnknown API.
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsISupports {
         pub vtable_: *const nsISupports__bindgen_vtable,
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsISupports_COMTypeInfo {
@@ -13747,19 +10138,17 @@ pub mod root {
         assert_eq! (::std::mem::align_of::<nsISupports>() , 8usize , concat !
                     ( "Alignment of " , stringify ! ( nsISupports ) ));
     }
     impl Clone for nsISupports {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
     pub struct nsCycleCollectionParticipant__bindgen_vtable(::std::os::raw::c_void);
-    /**
- * Participant implementation classes
- */
+    /// Participant implementation classes
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsCycleCollectionParticipant {
         pub vtable_: *const nsCycleCollectionParticipant__bindgen_vtable,
         pub mMightSkip: bool,
         pub mTraverseShouldTrace: bool,
     }
     #[test]
@@ -13815,204 +10204,58 @@ pub mod root {
     impl Clone for nsCycleCollectingAutoRefCnt {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsCharTraits {
         pub _address: u8,
     }
-    /**
- * @see nsTAString
- */
+    /// @see nsTAString
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsReadingIterator<CharT> {
         pub mStart: *mut CharT,
         pub mEnd: *mut CharT,
         pub mPosition: *mut CharT,
         pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<CharT>>,
     }
     pub type nsReadingIterator_self_type<CharT> =
         root::nsReadingIterator<CharT>;
     pub type nsReadingIterator_difference_type = isize;
     pub type nsReadingIterator_size_type = usize;
     pub type nsReadingIterator_value_type<CharT> = CharT;
     pub type nsReadingIterator_pointer<CharT> = *mut CharT;
     pub type nsReadingIterator_reference = u8;
-    /**
- * @see nsTAString
- */
+    /// @see nsTAString
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsWritingIterator<CharT> {
         pub mStart: *mut CharT,
         pub mEnd: *mut CharT,
         pub mPosition: *mut CharT,
         pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<CharT>>,
     }
     pub type nsWritingIterator_self_type<CharT> =
         root::nsWritingIterator<CharT>;
     pub type nsWritingIterator_difference_type = isize;
     pub type nsWritingIterator_size_type = usize;
     pub type nsWritingIterator_value_type<CharT> = CharT;
     pub type nsWritingIterator_pointer<CharT> = *mut CharT;
     pub type nsWritingIterator_reference = u8;
-    #[repr(C)]
-    pub struct nsSubstringSplitter {
-        pub mStr: *const root::nsAString,
-        pub mArray: u64,
-        pub mArraySize: root::nsSubstringSplitter_size_type,
-        pub mDelim: root::nsSubstringSplitter_char_type,
-    }
-    pub type nsSubstringSplitter_size_type =
-        root::mozilla::detail::nsStringRepr_size_type;
-    pub type nsSubstringSplitter_char_type =
-        root::mozilla::detail::nsStringRepr_char_type;
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsSubstringSplitter_nsTSubstringSplit_Iter {
-        pub mObj: *const root::nsSubstringSplitter,
-        pub mPos: root::nsSubstringSplitter_size_type,
-    }
-    #[test]
-    fn bindgen_test_layout_nsSubstringSplitter_nsTSubstringSplit_Iter() {
-        assert_eq!(::std::mem::size_of::<nsSubstringSplitter_nsTSubstringSplit_Iter>()
-                   , 16usize , concat ! (
-                   "Size of: " , stringify ! (
-                   nsSubstringSplitter_nsTSubstringSplit_Iter ) ));
-        assert_eq! (::std::mem::align_of::<nsSubstringSplitter_nsTSubstringSplit_Iter>()
-                    , 8usize , concat ! (
-                    "Alignment of " , stringify ! (
-                    nsSubstringSplitter_nsTSubstringSplit_Iter ) ));
-        assert_eq! (unsafe {
-                    & (
-                    * (
-                    0 as * const nsSubstringSplitter_nsTSubstringSplit_Iter )
-                    ) . mObj as * const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsSubstringSplitter_nsTSubstringSplit_Iter ) , "::" ,
-                    stringify ! ( mObj ) ));
-        assert_eq! (unsafe {
-                    & (
-                    * (
-                    0 as * const nsSubstringSplitter_nsTSubstringSplit_Iter )
-                    ) . mPos as * const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsSubstringSplitter_nsTSubstringSplit_Iter ) , "::" ,
-                    stringify ! ( mPos ) ));
-    }
-    impl Clone for nsSubstringSplitter_nsTSubstringSplit_Iter {
-        fn clone(&self) -> Self { *self }
-    }
-    #[test]
-    fn bindgen_test_layout_nsSubstringSplitter() {
-        assert_eq!(::std::mem::size_of::<nsSubstringSplitter>() , 24usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( nsSubstringSplitter ) ));
-        assert_eq! (::std::mem::align_of::<nsSubstringSplitter>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsSubstringSplitter ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsSubstringSplitter ) ) . mStr as *
-                    const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsSubstringSplitter
-                    ) , "::" , stringify ! ( mStr ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsSubstringSplitter ) ) . mArray as *
-                    const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsSubstringSplitter
-                    ) , "::" , stringify ! ( mArray ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsSubstringSplitter ) ) . mArraySize
-                    as * const _ as usize } , 16usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsSubstringSplitter
-                    ) , "::" , stringify ! ( mArraySize ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsSubstringSplitter ) ) . mDelim as *
-                    const _ as usize } , 20usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsSubstringSplitter
-                    ) , "::" , stringify ! ( mDelim ) ));
-    }
-    #[repr(C)]
-    pub struct nsCSubstringSplitter {
-        pub mStr: *const root::nsACString,
-        pub mArray: u64,
-        pub mArraySize: root::nsCSubstringSplitter_size_type,
-        pub mDelim: root::nsCSubstringSplitter_char_type,
-    }
-    pub type nsCSubstringSplitter_size_type =
-        root::mozilla::detail::nsCStringRepr_size_type;
-    pub type nsCSubstringSplitter_char_type =
-        root::mozilla::detail::nsCStringRepr_char_type;
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsCSubstringSplitter_nsTSubstringSplit_Iter {
-        pub mObj: *const root::nsCSubstringSplitter,
-        pub mPos: root::nsCSubstringSplitter_size_type,
-    }
-    #[test]
-    fn bindgen_test_layout_nsCSubstringSplitter_nsTSubstringSplit_Iter() {
-        assert_eq!(::std::mem::size_of::<nsCSubstringSplitter_nsTSubstringSplit_Iter>()
-                   , 16usize , concat ! (
-                   "Size of: " , stringify ! (
-                   nsCSubstringSplitter_nsTSubstringSplit_Iter ) ));
-        assert_eq! (::std::mem::align_of::<nsCSubstringSplitter_nsTSubstringSplit_Iter>()
-                    , 8usize , concat ! (
-                    "Alignment of " , stringify ! (
-                    nsCSubstringSplitter_nsTSubstringSplit_Iter ) ));
-        assert_eq! (unsafe {
-                    & (
-                    * (
-                    0 as * const nsCSubstringSplitter_nsTSubstringSplit_Iter )
-                    ) . mObj as * const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSubstringSplitter_nsTSubstringSplit_Iter ) , "::" ,
-                    stringify ! ( mObj ) ));
-        assert_eq! (unsafe {
-                    & (
-                    * (
-                    0 as * const nsCSubstringSplitter_nsTSubstringSplit_Iter )
-                    ) . mPos as * const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSubstringSplitter_nsTSubstringSplit_Iter ) , "::" ,
-                    stringify ! ( mPos ) ));
-    }
-    impl Clone for nsCSubstringSplitter_nsTSubstringSplit_Iter {
-        fn clone(&self) -> Self { *self }
-    }
-    #[test]
-    fn bindgen_test_layout_nsCSubstringSplitter() {
-        assert_eq!(::std::mem::size_of::<nsCSubstringSplitter>() , 24usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( nsCSubstringSplitter ) ));
-        assert_eq! (::std::mem::align_of::<nsCSubstringSplitter>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsCSubstringSplitter ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSubstringSplitter ) ) . mStr as *
-                    const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSubstringSplitter ) , "::" , stringify ! ( mStr ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSubstringSplitter ) ) . mArray as
-                    * const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSubstringSplitter ) , "::" , stringify ! ( mArray ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSubstringSplitter ) ) . mArraySize
-                    as * const _ as usize } , 16usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSubstringSplitter ) , "::" , stringify ! ( mArraySize )
-                    ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSubstringSplitter ) ) . mDelim as
-                    * const _ as usize } , 20usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSubstringSplitter ) , "::" , stringify ! ( mDelim ) ));
+    pub type AutoTArray_self_type = u8;
+    pub type AutoTArray_base_type<E> = root::nsTArray<E>;
+    pub type AutoTArray_Header<E> = root::AutoTArray_base_type<E>;
+    pub type AutoTArray_elem_type<E> = root::AutoTArray_base_type<E>;
+    #[repr(C)]
+    #[derive(Debug, Copy, Clone)]
+    pub struct AutoTArray__bindgen_ty_1 {
+        pub mAutoBuf: root::__BindgenUnionField<*mut ::std::os::raw::c_char>,
+        pub mAlign: root::__BindgenUnionField<u8>,
+        pub bindgen_union_field: u64,
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsFixedString {
         pub _base: ::nsstring::nsStringRepr,
         pub mFixedCapacity: root::mozilla::detail::nsStringRepr_size_type,
         pub mFixedBuf: *mut root::mozilla::detail::nsStringRepr_char_type,
     }
@@ -14031,28 +10274,22 @@ pub mod root {
                     "::" , stringify ! ( mFixedCapacity ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsFixedString ) ) . mFixedBuf as *
                     const _ as usize } , 24usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsFixedString ) ,
                     "::" , stringify ! ( mFixedBuf ) ));
     }
     pub type PRUint32 = ::std::os::raw::c_uint;
-    pub type PRInt32 = ::std::os::raw::c_int;
     pub type PRIntn = ::std::os::raw::c_int;
     pub type PRUintn = ::std::os::raw::c_uint;
-    /************************************************************************
-** TYPES:       PRSize
-** DESCRIPTION:
-**  A type for representing the size of objects.
-************************************************************************/
+    /// TYPES:       PRSize
+    /// DESCRIPTION:
+    /// A type for representing the size of objects.
     pub type PRSize = usize;
-    #[repr(i32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum PRStatus { PR_FAILURE = -1, PR_SUCCESS = 0, }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct PLHashEntry {
         pub next: *mut root::PLHashEntry,
         pub keyHash: root::PLHashNumber,
         pub key: *const ::std::os::raw::c_void,
         pub value: *mut ::std::os::raw::c_void,
     }
@@ -14211,42 +10448,16 @@ pub mod root {
                     "Alignment of field: " , stringify ! ( PLHashAllocOps ) ,
                     "::" , stringify ! ( freeEntry ) ));
     }
     impl Clone for PLHashAllocOps {
         fn clone(&self) -> Self { *self }
     }
     #[repr(u32)]
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsCSSTokenType {
-        eCSSToken_Whitespace = 0,
-        eCSSToken_Comment = 1,
-        eCSSToken_Ident = 2,
-        eCSSToken_Function = 3,
-        eCSSToken_AtKeyword = 4,
-        eCSSToken_ID = 5,
-        eCSSToken_Hash = 6,
-        eCSSToken_Number = 7,
-        eCSSToken_Dimension = 8,
-        eCSSToken_Percentage = 9,
-        eCSSToken_String = 10,
-        eCSSToken_Bad_String = 11,
-        eCSSToken_URL = 12,
-        eCSSToken_Bad_URL = 13,
-        eCSSToken_Symbol = 14,
-        eCSSToken_Includes = 15,
-        eCSSToken_Dashmatch = 16,
-        eCSSToken_Beginsmatch = 17,
-        eCSSToken_Endsmatch = 18,
-        eCSSToken_Containsmatch = 19,
-        eCSSToken_URange = 20,
-        eCSSToken_HTMLComment = 21,
-    }
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsCSSTokenSerializationType {
         eCSSTokenSerialization_Nothing = 0,
         eCSSTokenSerialization_Whitespace = 1,
         eCSSTokenSerialization_AtKeyword_or_Hash = 2,
         eCSSTokenSerialization_Number = 3,
         eCSSTokenSerialization_Dimension = 4,
         eCSSTokenSerialization_Percentage = 5,
         eCSSTokenSerialization_URange = 6,
@@ -14265,150 +10476,16 @@ pub mod root {
         eCSSTokenSerialization_Symbol_Assorted = 19,
         eCSSTokenSerialization_Symbol_Equals = 20,
         eCSSTokenSerialization_Symbol_Bar = 21,
         eCSSTokenSerialization_Symbol_Slash = 22,
         eCSSTokenSerialization_Symbol_Asterisk = 23,
         eCSSTokenSerialization_Other = 24,
     }
     #[repr(C)]
-    pub struct nsCSSToken {
-        pub mIdent: root::nsAutoString,
-        pub mNumber: f32,
-        pub mInteger: i32,
-        pub mInteger2: i32,
-        pub mType: root::nsCSSTokenType,
-        pub mSymbol: u16,
-        pub mIntegerValid: bool,
-        pub mHasSign: bool,
-    }
-    #[test]
-    fn bindgen_test_layout_nsCSSToken() {
-        assert_eq!(::std::mem::size_of::<nsCSSToken>() , 184usize , concat ! (
-                   "Size of: " , stringify ! ( nsCSSToken ) ));
-        assert_eq! (::std::mem::align_of::<nsCSSToken>() , 8usize , concat ! (
-                    "Alignment of " , stringify ! ( nsCSSToken ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSToken ) ) . mIdent as * const _
-                    as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsCSSToken ) , "::"
-                    , stringify ! ( mIdent ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSToken ) ) . mNumber as * const _
-                    as usize } , 160usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsCSSToken ) , "::"
-                    , stringify ! ( mNumber ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSToken ) ) . mInteger as * const
-                    _ as usize } , 164usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsCSSToken ) , "::"
-                    , stringify ! ( mInteger ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSToken ) ) . mInteger2 as * const
-                    _ as usize } , 168usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsCSSToken ) , "::"
-                    , stringify ! ( mInteger2 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSToken ) ) . mType as * const _
-                    as usize } , 172usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsCSSToken ) , "::"
-                    , stringify ! ( mType ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSToken ) ) . mSymbol as * const _
-                    as usize } , 176usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsCSSToken ) , "::"
-                    , stringify ! ( mSymbol ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSToken ) ) . mIntegerValid as *
-                    const _ as usize } , 178usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsCSSToken ) , "::"
-                    , stringify ! ( mIntegerValid ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSToken ) ) . mHasSign as * const
-                    _ as usize } , 179usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsCSSToken ) , "::"
-                    , stringify ! ( mHasSign ) ));
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsCSSScannerPosition {
-        pub mOffset: u32,
-        pub mLineNumber: u32,
-        pub mLineOffset: u32,
-        pub mTokenLineNumber: u32,
-        pub mTokenLineOffset: u32,
-        pub mTokenOffset: u32,
-        pub mInitialized: bool,
-    }
-    #[test]
-    fn bindgen_test_layout_nsCSSScannerPosition() {
-        assert_eq!(::std::mem::size_of::<nsCSSScannerPosition>() , 28usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( nsCSSScannerPosition ) ));
-        assert_eq! (::std::mem::align_of::<nsCSSScannerPosition>() , 4usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsCSSScannerPosition ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSScannerPosition ) ) . mOffset as
-                    * const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSSScannerPosition ) , "::" , stringify ! ( mOffset )
-                    ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSScannerPosition ) ) .
-                    mLineNumber as * const _ as usize } , 4usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSSScannerPosition ) , "::" , stringify ! ( mLineNumber
-                    ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSScannerPosition ) ) .
-                    mLineOffset as * const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSSScannerPosition ) , "::" , stringify ! ( mLineOffset
-                    ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSScannerPosition ) ) .
-                    mTokenLineNumber as * const _ as usize } , 12usize ,
-                    concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSSScannerPosition ) , "::" , stringify ! (
-                    mTokenLineNumber ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSScannerPosition ) ) .
-                    mTokenLineOffset as * const _ as usize } , 16usize ,
-                    concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCSSScannerPosition ) , "::" , stringify ! (
-                    mTokenLineOffset ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSScannerPosition ) ) .
-                    mTokenOffset as * const _ as usize } , 20usize , concat !
-                    (
-                    "Alignment of field: " , stringify ! (
-                    nsCSSScannerPosition ) , "::" , stringify ! ( mTokenOffset
-                    ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCSSScannerPosition ) ) .
-                    mInitialized as * const _ as usize } , 24usize , concat !
-                    (
-                    "Alignment of field: " , stringify ! (
-                    nsCSSScannerPosition ) , "::" , stringify ! ( mInitialized
-                    ) ));
-    }
-    impl Clone for nsCSSScannerPosition {
-        fn clone(&self) -> Self { *self }
-    }
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsCSSScannerExclude {
-        eCSSScannerExclude_None = 0,
-        eCSSScannerExclude_Comments = 1,
-        eCSSScannerExclude_WhitespaceAndComments = 2,
-    }
-    #[repr(C)]
     #[derive(Debug)]
     pub struct nsCSSScanner {
         pub mBuffer: *const u16,
         pub mOffset: u32,
         pub mCount: u32,
         pub mLineNumber: u32,
         pub mLineOffset: u32,
         pub mTokenLineNumber: u32,
@@ -14506,63 +10583,16 @@ pub mod root {
                     "::" , stringify ! ( mSeenBadToken ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsCSSScanner ) ) .
                     mSeenVariableReference as * const _ as usize } , 58usize ,
                     concat ! (
                     "Alignment of field: " , stringify ! ( nsCSSScanner ) ,
                     "::" , stringify ! ( mSeenVariableReference ) ));
     }
-    /**
- * A "unique identifier". This is modeled after OSF DCE UUIDs.
- */
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsID {
-        pub m0: u32,
-        pub m1: u16,
-        pub m2: u16,
-        pub m3: [u8; 8usize],
-    }
-    #[test]
-    fn bindgen_test_layout_nsID() {
-        assert_eq!(::std::mem::size_of::<nsID>() , 16usize , concat ! (
-                   "Size of: " , stringify ! ( nsID ) ));
-        assert_eq! (::std::mem::align_of::<nsID>() , 4usize , concat ! (
-                    "Alignment of " , stringify ! ( nsID ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsID ) ) . m0 as * const _ as usize }
-                    , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsID ) , "::" ,
-                    stringify ! ( m0 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsID ) ) . m1 as * const _ as usize }
-                    , 4usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsID ) , "::" ,
-                    stringify ! ( m1 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsID ) ) . m2 as * const _ as usize }
-                    , 6usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsID ) , "::" ,
-                    stringify ! ( m2 ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsID ) ) . m3 as * const _ as usize }
-                    , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsID ) , "::" ,
-                    stringify ! ( m3 ) ));
-    }
-    impl Clone for nsID {
-        fn clone(&self) -> Self { *self }
-    }
-    /**
- * An "interface id" which can be used to uniquely identify a given
- * interface.
- */
-    pub type nsIID = root::nsID;
-    pub type PRTime = i64;
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct PRThread {
         _unused: [u8; 0],
     }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsAutoOwningThread {
@@ -14601,39 +10631,16 @@ pub mod root {
                     & ( * ( 0 as * const nsAutoRefCnt ) ) . mValue as * const
                     _ as usize } , 0usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsAutoRefCnt ) ,
                     "::" , stringify ! ( mValue ) ));
     }
     impl Clone for nsAutoRefCnt {
         fn clone(&self) -> Self { *self }
     }
-    /**
- * already_AddRefed cooperates with reference counting smart pointers to enable
- * you to assign in a pointer _without_ |AddRef|ing it.  You might want to use
- * this as a return type from a function that returns an already |AddRef|ed
- * pointer.
- *
- * TODO Move already_AddRefed to namespace mozilla.  This has not yet been done
- * because of the sheer number of usages of already_AddRefed.
- *
- * When should you use already_AddRefed<>?
- * * Ensure a consumer takes ownership of a reference
- * * Pass ownership without calling AddRef/Release (sometimes required in
- *   off-main-thread code)
- * * The ref pointer type you're using doesn't support move construction
- *
- * Otherwise, use Move(RefPtr/nsCOMPtr/etc).
- */
-    #[repr(C)]
-    #[derive(Debug)]
-    pub struct already_AddRefed<T> {
-        pub mRawPtr: *mut T,
-        pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
-    }
     #[repr(C)]
     #[derive(Debug)]
     pub struct RefPtr<T> {
         pub mRawPtr: *mut T,
         pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
     }
     pub type RefPtr_element_type<T> = T;
     #[repr(C)]
@@ -14642,94 +10649,52 @@ pub mod root {
     }
     pub type RefPtr_Proxy_member_function = u8;
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct RefPtr_ConstRemovingRefPtrTraits {
         pub _address: u8,
     }
     #[repr(C)]
-    pub struct nsCycleCollectionTraversalCallback__bindgen_vtable(::std::os::raw::c_void);
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsCycleCollectionTraversalCallback {
-        pub vtable_: *const nsCycleCollectionTraversalCallback__bindgen_vtable,
-        pub mFlags: u32,
-    }
-    pub const nsCycleCollectionTraversalCallback_WANT_DEBUG_INFO:
-              root::nsCycleCollectionTraversalCallback__bindgen_ty_1 =
-        nsCycleCollectionTraversalCallback__bindgen_ty_1::WANT_DEBUG_INFO;
-    pub const nsCycleCollectionTraversalCallback_WANT_ALL_TRACES:
-              root::nsCycleCollectionTraversalCallback__bindgen_ty_1 =
-        nsCycleCollectionTraversalCallback__bindgen_ty_1::WANT_ALL_TRACES;
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsCycleCollectionTraversalCallback__bindgen_ty_1 {
-        WANT_DEBUG_INFO = 1,
-        WANT_ALL_TRACES = 2,
-    }
-    #[test]
-    fn bindgen_test_layout_nsCycleCollectionTraversalCallback() {
-        assert_eq!(::std::mem::size_of::<nsCycleCollectionTraversalCallback>()
-                   , 16usize , concat ! (
-                   "Size of: " , stringify ! (
-                   nsCycleCollectionTraversalCallback ) ));
-        assert_eq! (::std::mem::align_of::<nsCycleCollectionTraversalCallback>()
-                    , 8usize , concat ! (
-                    "Alignment of " , stringify ! (
-                    nsCycleCollectionTraversalCallback ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsCycleCollectionTraversalCallback )
-                    ) . mFlags as * const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsCycleCollectionTraversalCallback ) , "::" , stringify !
-                    ( mFlags ) ));
-    }
-    impl Clone for nsCycleCollectionTraversalCallback {
-        fn clone(&self) -> Self { *self }
-    }
-    #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct JSContext {
         _unused: [u8; 0],
     }
     pub mod JS {
         #[allow(unused_imports)]
         use self::super::super::root;
-        /**
- * JS::Value is the interface for a single JavaScript Engine value.  A few
- * general notes on JS::Value:
- *
- * - JS::Value has setX() and isX() members for X in
- *
- *     { Int32, Double, String, Symbol, Boolean, Undefined, Null, Object, Magic }
- *
- *   JS::Value also contains toX() for each of the non-singleton types.
- *
- * - Magic is a singleton type whose payload contains either a JSWhyMagic "reason" for
- *   the magic value or a uint32_t value. By providing JSWhyMagic values when
- *   creating and checking for magic values, it is possible to assert, at
- *   runtime, that only magic values with the expected reason flow through a
- *   particular value. For example, if cx->exception has a magic value, the
- *   reason must be JS_GENERATOR_CLOSING.
- *
- * - The JS::Value operations are preferred.  The JSVAL_* operations remain for
- *   compatibility; they may be removed at some point.  These operations mostly
- *   provide similar functionality.  But there are a few key differences.  One
- *   is that JS::Value gives null a separate type.
- *   Also, to help prevent mistakenly boxing a nullable JSObject* as an object,
- *   Value::setObject takes a JSObject&. (Conversely, Value::toObject returns a
- *   JSObject&.)  A convenience member Value::setObjectOrNull is provided.
- *
- * - JSVAL_VOID is the same as the singleton value of the Undefined type.
- *
- * - Note that JS::Value is 8 bytes on 32 and 64-bit architectures. Thus, on
- *   32-bit user code should avoid copying jsval/JS::Value as much as possible,
- *   preferring to pass by const Value&.
- */
+        /// JS::Value is the interface for a single JavaScript Engine value.  A few
+        /// general notes on JS::Value:
+        ///
+        /// - JS::Value has setX() and isX() members for X in
+        ///
+        /// { Int32, Double, String, Symbol, Boolean, Undefined, Null, Object, Magic }
+        ///
+        /// JS::Value also contains toX() for each of the non-singleton types.
+        ///
+        /// - Magic is a singleton type whose payload contains either a JSWhyMagic "reason" for
+        /// the magic value or a uint32_t value. By providing JSWhyMagic values when
+        /// creating and checking for magic values, it is possible to assert, at
+        /// runtime, that only magic values with the expected reason flow through a
+        /// particular value. For example, if cx->exception has a magic value, the
+        /// reason must be JS_GENERATOR_CLOSING.
+        ///
+        /// - The JS::Value operations are preferred.  The JSVAL_* operations remain for
+        /// compatibility; they may be removed at some point.  These operations mostly
+        /// provide similar functionality.  But there are a few key differences.  One
+        /// is that JS::Value gives null a separate type.
+        /// Also, to help prevent mistakenly boxing a nullable JSObject* as an object,
+        /// Value::setObject takes a JSObject&. (Conversely, Value::toObject returns a
+        /// JSObject&.)  A convenience member Value::setObjectOrNull is provided.
+        ///
+        /// - JSVAL_VOID is the same as the singleton value of the Undefined type.
+        ///
+        /// - Note that JS::Value is 8 bytes on 32 and 64-bit architectures. Thus, on
+        /// 32-bit user code should avoid copying jsval/JS::Value as much as possible,
+        /// preferring to pass by const Value&.
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct Value {
             pub data: root::JS::Value_layout,
         }
         pub type Value_PayloadType = u64;
         #[repr(C)]
         #[derive(Debug, Copy)]
@@ -14982,127 +10947,29 @@ pub mod root {
                         & ( * ( 0 as * const Value ) ) . data as * const _ as
                         usize } , 0usize , concat ! (
                         "Alignment of field: " , stringify ! ( Value ) , "::"
                         , stringify ! ( data ) ));
         }
         impl Clone for Value {
             fn clone(&self) -> Self { *self }
         }
-        /**
- * Reference to a T that has been rooted elsewhere. This is most useful
- * as a parameter type, which guarantees that the T lvalue is properly
- * rooted. See "Move GC Stack Rooting" above.
- *
- * If you want to add additional methods to Handle for a specific
- * specialization, define a HandleBase<T> specialization containing them.
- */
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct Handle<T> {
-            pub ptr: *mut T,
-            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
-        }
-        pub type Handle_ElementType<T> = T;
-        #[repr(i32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum Handle_Disambiguator {
-            DeliberatelyChoosingThisOverload = 0,
-        }
-        #[repr(i32)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum Handle_CallerIdentity {
-            ImUsingThisOnlyInFromFromMarkedLocation = 0,
-        }
-        /**
- * Similar to a handle, but the underlying storage can be changed. This is
- * useful for outparams.
- *
- * If you want to add additional methods to MutableHandle for a specific
- * specialization, define a MutableHandleBase<T> specialization containing
- * them.
- */
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct MutableHandle<T> {
-            pub ptr: *mut T,
-            pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
-        }
-        pub type MutableHandle_ElementType<T> = T;
-        /**
- * Local variable of type T whose value is always rooted. This is typically
- * used for local variables, or for non-rooted values being passed to a
- * function that requires a handle, e.g. Foo(Root<T>(cx, x)).
- *
- * If you want to add additional methods to Rooted for a specific
- * specialization, define a RootedBase<T> specialization containing them.
- */
+        /// Local variable of type T whose value is always rooted. This is typically
+        /// used for local variables, or for non-rooted values being passed to a
+        /// function that requires a handle, e.g. Foo(Root<T>(cx, x)).
+        ///
+        /// If you want to add additional methods to Rooted for a specific
+        /// specialization, define a RootedBase<T> specialization containing them.
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct Rooted {
         }
         pub type Rooted_ElementType<T> = T;
-        pub type HandleId = root::JS::Handle<root::jsid>;
-        pub type HandleObject = root::JS::Handle<*mut root::JSObject>;
-        pub type HandleValue = root::JS::Handle<root::JS::Value>;
-        pub type MutableHandleValue =
-            root::JS::MutableHandle<root::JS::Value>;
         pub type RootedObject = [u64; 3usize];
         #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct PropertyDescriptor {
-            pub obj: *mut root::JSObject,
-            pub attrs: ::std::os::raw::c_uint,
-            pub getter: root::JSGetterOp,
-            pub setter: root::JSSetterOp,
-            pub value: root::JS::Value,
-        }
-        #[test]
-        fn bindgen_test_layout_PropertyDescriptor() {
-            assert_eq!(::std::mem::size_of::<PropertyDescriptor>() , 40usize ,
-                       concat ! (
-                       "Size of: " , stringify ! ( PropertyDescriptor ) ));
-            assert_eq! (::std::mem::align_of::<PropertyDescriptor>() , 8usize
-                        , concat ! (
-                        "Alignment of " , stringify ! ( PropertyDescriptor )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const PropertyDescriptor ) ) . obj as *
-                        const _ as usize } , 0usize , concat ! (
-                        "Alignment of field: " , stringify ! (
-                        PropertyDescriptor ) , "::" , stringify ! ( obj ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const PropertyDescriptor ) ) . attrs as
-                        * const _ as usize } , 8usize , concat ! (
-                        "Alignment of field: " , stringify ! (
-                        PropertyDescriptor ) , "::" , stringify ! ( attrs )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const PropertyDescriptor ) ) . getter
-                        as * const _ as usize } , 16usize , concat ! (
-                        "Alignment of field: " , stringify ! (
-                        PropertyDescriptor ) , "::" , stringify ! ( getter )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const PropertyDescriptor ) ) . setter
-                        as * const _ as usize } , 24usize , concat ! (
-                        "Alignment of field: " , stringify ! (
-                        PropertyDescriptor ) , "::" , stringify ! ( setter )
-                        ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const PropertyDescriptor ) ) . value as
-                        * const _ as usize } , 32usize , concat ! (
-                        "Alignment of field: " , stringify ! (
-                        PropertyDescriptor ) , "::" , stringify ! ( value )
-                        ));
-        }
-        impl Clone for PropertyDescriptor {
-            fn clone(&self) -> Self { *self }
-        }
-        #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct DeletePolicy {
             pub _address: u8,
         }
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct FreePolicy {
             pub _address: u8,
@@ -15112,73 +10979,45 @@ pub mod root {
             assert_eq!(::std::mem::size_of::<FreePolicy>() , 1usize , concat !
                        ( "Size of: " , stringify ! ( FreePolicy ) ));
             assert_eq! (::std::mem::align_of::<FreePolicy>() , 1usize , concat
                         ! ( "Alignment of " , stringify ! ( FreePolicy ) ));
         }
         impl Clone for FreePolicy {
             fn clone(&self) -> Self { *self }
         }
-        /**
- * A GC pointer, tagged with the trace kind.
- *
- * In general, a GC pointer should be stored with an exact type. This class
- * is for use when that is not possible because a single pointer must point
- * to several kinds of GC thing.
- */
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct GCCellPtr {
-            pub ptr: usize,
-        }
-        #[test]
-        fn bindgen_test_layout_GCCellPtr() {
-            assert_eq!(::std::mem::size_of::<GCCellPtr>() , 8usize , concat !
-                       ( "Size of: " , stringify ! ( GCCellPtr ) ));
-            assert_eq! (::std::mem::align_of::<GCCellPtr>() , 8usize , concat
-                        ! ( "Alignment of " , stringify ! ( GCCellPtr ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const GCCellPtr ) ) . ptr as * const _
-                        as usize } , 0usize , concat ! (
-                        "Alignment of field: " , stringify ! ( GCCellPtr ) ,
-                        "::" , stringify ! ( ptr ) ));
-        }
-        impl Clone for GCCellPtr {
-            fn clone(&self) -> Self { *self }
-        }
-        /**
- * The Heap<T> class is a heap-stored reference to a JS GC thing. All members of
- * heap classes that refer to GC things should use Heap<T> (or possibly
- * TenuredHeap<T>, described below).
- *
- * Heap<T> is an abstraction that hides some of the complexity required to
- * maintain GC invariants for the contained reference. It uses operator
- * overloading to provide a normal pointer interface, but notifies the GC every
- * time the value it contains is updated. This is necessary for generational GC,
- * which keeps track of all pointers into the nursery.
- *
- * Heap<T> instances must be traced when their containing object is traced to
- * keep the pointed-to GC thing alive.
- *
- * Heap<T> objects should only be used on the heap. GC references stored on the
- * C/C++ stack must use Rooted/Handle/MutableHandle instead.
- *
- * Type T must be a public GC pointer type.
- */
+        /// The Heap<T> class is a heap-stored reference to a JS GC thing. All members of
+        /// heap classes that refer to GC things should use Heap<T> (or possibly
+        /// TenuredHeap<T>, described below).
+        ///
+        /// Heap<T> is an abstraction that hides some of the complexity required to
+        /// maintain GC invariants for the contained reference. It uses operator
+        /// overloading to provide a normal pointer interface, but notifies the GC every
+        /// time the value it contains is updated. This is necessary for generational GC,
+        /// which keeps track of all pointers into the nursery.
+        ///
+        /// Heap<T> instances must be traced when their containing object is traced to
+        /// keep the pointed-to GC thing alive.
+        ///
+        /// Heap<T> objects should only be used on the heap. GC references stored on the
+        /// C/C++ stack must use Rooted/Handle/MutableHandle instead.
+        ///
+        /// Type T must be a public GC pointer type.
         #[repr(C)]
         #[derive(Debug)]
         pub struct Heap<T> {
             pub ptr: T,
             pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
         }
         pub type Heap_ElementType<T> = T;
         pub mod dbg {
             #[allow(unused_imports)]
             use self::super::super::super::root;
             #[repr(C)]
+            #[derive(Debug)]
             pub struct GarbageCollectionEvent {
                 pub majorGCNumber_: u64,
                 pub reason: *const ::std::os::raw::c_char,
                 pub nonincrementalReason: *const ::std::os::raw::c_char,
                 pub collections: [u64; 5usize],
             }
             #[repr(C)]
             #[derive(Debug, Copy)]
@@ -15285,45 +11124,43 @@ pub mod root {
                             & ( * ( 0 as * const AutoEntryMonitor ) ) .
                             savedMonitor_ as * const _ as usize } , 16usize ,
                             concat ! (
                             "Alignment of field: " , stringify ! (
                             AutoEntryMonitor ) , "::" , stringify ! (
                             savedMonitor_ ) ));
             }
         }
-        /**
- * The TenuredHeap<T> class is similar to the Heap<T> class above in that it
- * encapsulates the GC concerns of an on-heap reference to a JS object. However,
- * it has two important differences:
- *
- *  1) Pointers which are statically known to only reference "tenured" objects
- *     can avoid the extra overhead of SpiderMonkey's write barriers.
- *
- *  2) Objects in the "tenured" heap have stronger alignment restrictions than
- *     those in the "nursery", so it is possible to store flags in the lower
- *     bits of pointers known to be tenured. TenuredHeap wraps a normal tagged
- *     pointer with a nice API for accessing the flag bits and adds various
- *     assertions to ensure that it is not mis-used.
- *
- * GC things are said to be "tenured" when they are located in the long-lived
- * heap: e.g. they have gained tenure as an object by surviving past at least
- * one GC. For performance, SpiderMonkey allocates some things which are known
- * to normally be long lived directly into the tenured generation; for example,
- * global objects. Additionally, SpiderMonkey does not visit individual objects
- * when deleting non-tenured objects, so object with finalizers are also always
- * tenured; for instance, this includes most DOM objects.
- *
- * The considerations to keep in mind when using a TenuredHeap<T> vs a normal
- * Heap<T> are:
- *
- *  - It is invalid for a TenuredHeap<T> to refer to a non-tenured thing.
- *  - It is however valid for a Heap<T> to refer to a tenured thing.
- *  - It is not possible to store flag bits in a Heap<T>.
- */
+        /// The TenuredHeap<T> class is similar to the Heap<T> class above in that it
+        /// encapsulates the GC concerns of an on-heap reference to a JS object. However,
+        /// it has two important differences:
+        ///
+        /// 1) Pointers which are statically known to only reference "tenured" objects
+        /// can avoid the extra overhead of SpiderMonkey's write barriers.
+        ///
+        /// 2) Objects in the "tenured" heap have stronger alignment restrictions than
+        /// those in the "nursery", so it is possible to store flags in the lower
+        /// bits of pointers known to be tenured. TenuredHeap wraps a normal tagged
+        /// pointer with a nice API for accessing the flag bits and adds various
+        /// assertions to ensure that it is not mis-used.
+        ///
+        /// GC things are said to be "tenured" when they are located in the long-lived
+        /// heap: e.g. they have gained tenure as an object by surviving past at least
+        /// one GC. For performance, SpiderMonkey allocates some things which are known
+        /// to normally be long lived directly into the tenured generation; for example,
+        /// global objects. Additionally, SpiderMonkey does not visit individual objects
+        /// when deleting non-tenured objects, so object with finalizers are also always
+        /// tenured; for instance, this includes most DOM objects.
+        ///
+        /// The considerations to keep in mind when using a TenuredHeap<T> vs a normal
+        /// Heap<T> are:
+        ///
+        /// - It is invalid for a TenuredHeap<T> to refer to a non-tenured thing.
+        /// - It is however valid for a Heap<T> to refer to a tenured thing.
+        /// - It is not possible to store flag bits in a Heap<T>.
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct TenuredHeap {
             pub bits: usize,
         }
         pub type TenuredHeap_ElementType<T> = T;
         pub const TenuredHeap_maskBits: root::JS::TenuredHeap__bindgen_ty_1 =
             TenuredHeap__bindgen_ty_1::maskBits;
@@ -15350,103 +11187,31 @@ pub mod root {
                         & ( * ( 0 as * const ConstUTF8CharsZ ) ) . data_ as *
                         const _ as usize } , 0usize , concat ! (
                         "Alignment of field: " , stringify ! ( ConstUTF8CharsZ
                         ) , "::" , stringify ! ( data_ ) ));
         }
         impl Clone for ConstUTF8CharsZ {
             fn clone(&self) -> Self { *self }
         }
-        /**
- * Per ES6, the [[DefineOwnProperty]] internal method has three different
- * possible outcomes:
- *
- * -   It can throw an exception (which we indicate by returning false).
- *
- * -   It can return true, indicating unvarnished success.
- *
- * -   It can return false, indicating "strict failure". The property could
- *     not be defined. It's an error, but no exception was thrown.
- *
- * It's not just [[DefineOwnProperty]]: all the mutating internal methods have
- * the same three outcomes. (The other affected internal methods are [[Set]],
- * [[Delete]], [[SetPrototypeOf]], and [[PreventExtensions]].)
- *
- * If you think this design is awful, you're not alone.  But as it's the
- * standard, we must represent these boolean "success" values somehow.
- * ObjectOpSuccess is the class for this. It's like a bool, but when it's false
- * it also stores an error code.
- *
- * Typical usage:
- *
- *     ObjectOpResult result;
- *     if (!DefineProperty(cx, obj, id, ..., result))
- *         return false;
- *     if (!result)
- *         return result.reportError(cx, obj, id);
- *
- * Users don't have to call `result.report()`; another possible ending is:
- *
- *     argv.rval().setBoolean(bool(result));
- *     return true;
- */
-        #[repr(C)]
-        #[derive(Debug, Copy)]
-        pub struct ObjectOpResult {
-            /**
-     * code_ is either one of the special codes OkCode or Uninitialized, or
-     * an error code. For now the error codes are private to the JS engine;
-     * they're defined in js/src/js.msg.
-     *
-     * code_ is uintptr_t (rather than uint32_t) for the convenience of the
-     * JITs, which would otherwise have to deal with either padding or stack
-     * alignment on 64-bit platforms.
-     */
-            pub code_: usize,
-        }
-        #[repr(u64)]
-        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-        pub enum ObjectOpResult_SpecialCodes {
-            OkCode = 0,
-            Uninitialized = 18446744073709551615,
-        }
-        #[test]
-        fn bindgen_test_layout_ObjectOpResult() {
-            assert_eq!(::std::mem::size_of::<ObjectOpResult>() , 8usize ,
-                       concat ! ( "Size of: " , stringify ! ( ObjectOpResult )
-                       ));
-            assert_eq! (::std::mem::align_of::<ObjectOpResult>() , 8usize ,
-                        concat ! (
-                        "Alignment of " , stringify ! ( ObjectOpResult ) ));
-            assert_eq! (unsafe {
-                        & ( * ( 0 as * const ObjectOpResult ) ) . code_ as *
-                        const _ as usize } , 0usize , concat ! (
-                        "Alignment of field: " , stringify ! ( ObjectOpResult
-                        ) , "::" , stringify ! ( code_ ) ));
-        }
-        impl Clone for ObjectOpResult {
-            fn clone(&self) -> Self { *self }
-        }
-        /**
- * This class can be used to store a pointer to the youngest frame of a saved
- * stack in the specified JSContext. This reference will be picked up by any new
- * calls performed until the class is destroyed, with the specified asyncCause,
- * that must not be empty.
- *
- * Any stack capture initiated during these new calls will go through the async
- * stack instead of the current stack.
- *
- * Capturing the stack before a new call is performed will not be affected.
- *
- * The provided chain of SavedFrame objects can live in any compartment,
- * although it will be copied to the compartment where the stack is captured.
- *
- * See also `js/src/doc/SavedFrame/SavedFrame.md` for documentation on async
- * stack frames.
- */
+        /// This class can be used to store a pointer to the youngest frame of a saved
+        /// stack in the specified JSContext. This reference will be picked up by any new
+        /// calls performed until the class is destroyed, with the specified asyncCause,
+        /// that must not be empty.
+        ///
+        /// Any stack capture initiated during these new calls will go through the async
+        /// stack instead of the current stack.
+        ///
+        /// Capturing the stack before a new call is performed will not be affected.
+        ///
+        /// The provided chain of SavedFrame objects can live in any compartment,
+        /// although it will be copied to the compartment where the stack is captured.
+        ///
+        /// See also `js/src/doc/SavedFrame/SavedFrame.md` for documentation on async
+        /// stack frames.
         #[repr(C)]
         #[derive(Debug)]
         pub struct AutoSetAsyncStackForNewCalls {
             pub cx: *mut root::JSContext,
             pub oldAsyncStack: root::JS::RootedObject,
             pub oldAsyncCause: *const ::std::os::raw::c_char,
             pub oldAsyncCallIsExplicit: bool,
         }
@@ -15522,70 +11287,26 @@ pub mod root {
                         8usize , concat ! (
                         "Alignment of field: " , stringify ! (
                         AutoHideScriptedCaller ) , "::" , stringify ! (
                         _mCheckNotUsedAsTemporary ) ));
         }
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
-    pub struct JSFunction {
-        _unused: [u8; 0],
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
     pub struct JSObject {
         _unused: [u8; 0],
     }
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct JSScript {
-        _unused: [u8; 0],
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct JSString {
-        _unused: [u8; 0],
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct jsid {
-        pub asBits: usize,
-    }
-    #[test]
-    fn bindgen_test_layout_jsid() {
-        assert_eq!(::std::mem::size_of::<jsid>() , 8usize , concat ! (
-                   "Size of: " , stringify ! ( jsid ) ));
-        assert_eq! (::std::mem::align_of::<jsid>() , 8usize , concat ! (
-                    "Alignment of " , stringify ! ( jsid ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const jsid ) ) . asBits as * const _ as
-                    usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( jsid ) , "::" ,
-                    stringify ! ( asBits ) ));
-    }
-    impl Clone for jsid {
-        fn clone(&self) -> Self { *self }
-    }
     pub mod js {
         #[allow(unused_imports)]
         use self::super::super::root;
         pub mod gc {
             #[allow(unused_imports)]
             use self::super::super::super::root;
         }
-        pub mod gcstats {
-            #[allow(unused_imports)]
-            use self::super::super::super::root;
-            #[repr(C)]
-            #[derive(Debug, Copy, Clone)]
-            pub struct Statistics {
-                _unused: [u8; 0],
-            }
-        }
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct SystemAllocPolicy {
             pub _address: u8,
         }
         #[test]
         fn bindgen_test_layout_SystemAllocPolicy() {
             assert_eq!(::std::mem::size_of::<SystemAllocPolicy>() , 1usize ,
@@ -15606,42 +11327,30 @@ pub mod root {
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
         pub struct MutableWrappedPtrOperations {
             pub _address: u8,
         }
         #[repr(C)]
         #[derive(Debug, Copy, Clone)]
-        pub struct HandleBase {
-            pub _address: u8,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
-        pub struct MutableHandleBase {
-            pub _address: u8,
-        }
-        #[repr(C)]
-        #[derive(Debug, Copy, Clone)]
         pub struct HeapBase {
             pub _address: u8,
         }
         #[repr(C)]
         pub struct SourceHook__bindgen_vtable(::std::os::raw::c_void);
-        /**
- * A class of objects that return source code on demand.
- *
- * When code is compiled with setSourceIsLazy(true), SpiderMonkey doesn't
- * retain the source code (and doesn't do lazy bytecode generation). If we ever
- * need the source code, say, in response to a call to Function.prototype.
- * toSource or Debugger.Source.prototype.text, then we call the 'load' member
- * function of the instance of this class that has hopefully been registered
- * with the runtime, passing the code's URL, and hope that it will be able to
- * find the source.
- */
+        /// A class of objects that return source code on demand.
+        ///
+        /// When code is compiled with setSourceIsLazy(true), SpiderMonkey doesn't
+        /// retain the source code (and doesn't do lazy bytecode generation). If we ever
+        /// need the source code, say, in response to a call to Function.prototype.
+        /// toSource or Debugger.Source.prototype.text, then we call the 'load' member
+        /// function of the instance of this class that has hopefully been registered
+        /// with the runtime, passing the code's URL, and hope that it will be able to
+        /// find the source.
         #[repr(C)]
         #[derive(Debug)]
         pub struct SourceHook {
             pub vtable_: *const SourceHook__bindgen_vtable,
         }
         #[test]
         fn bindgen_test_layout_SourceHook() {
             assert_eq!(::std::mem::size_of::<SourceHook>() , 8usize , concat !
@@ -15651,73 +11360,16 @@ pub mod root {
         }
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct JSCompartment {
         _unused: [u8; 0],
     }
     #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct JSRuntime {
-        _unused: [u8; 0],
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct JSTracer {
-        pub runtime_: *mut root::JSRuntime,
-        pub weakMapAction_: root::WeakMapTraceKind,
-        pub checkEdges_: bool,
-        pub tag_: root::JSTracer_TracerKindTag,
-        pub traceWeakEdges_: bool,
-    }
-    #[repr(i32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum JSTracer_TracerKindTag {
-        Marking = 0,
-        WeakMarking = 1,
-        Tenuring = 2,
-        Callback = 3,
-    }
-    #[test]
-    fn bindgen_test_layout_JSTracer() {
-        assert_eq!(::std::mem::size_of::<JSTracer>() , 24usize , concat ! (
-                   "Size of: " , stringify ! ( JSTracer ) ));
-        assert_eq! (::std::mem::align_of::<JSTracer>() , 8usize , concat ! (
-                    "Alignment of " , stringify ! ( JSTracer ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSTracer ) ) . runtime_ as * const _
-                    as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSTracer ) , "::" ,
-                    stringify ! ( runtime_ ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSTracer ) ) . weakMapAction_ as *
-                    const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSTracer ) , "::" ,
-                    stringify ! ( weakMapAction_ ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSTracer ) ) . checkEdges_ as * const
-                    _ as usize } , 12usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSTracer ) , "::" ,
-                    stringify ! ( checkEdges_ ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSTracer ) ) . tag_ as * const _ as
-                    usize } , 16usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSTracer ) , "::" ,
-                    stringify ! ( tag_ ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSTracer ) ) . traceWeakEdges_ as *
-                    const _ as usize } , 20usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSTracer ) , "::" ,
-                    stringify ! ( traceWeakEdges_ ) ));
-    }
-    impl Clone for JSTracer {
-        fn clone(&self) -> Self { *self }
-    }
-    #[repr(C)]
     #[derive(Debug)]
     pub struct nsCOMPtr<T> {
         pub mRawPtr: *mut T,
         pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
     }
     pub type nsCOMPtr_element_type<T> = T;
     #[repr(C)]
     #[derive(Debug)]
@@ -15734,16 +11386,17 @@ pub mod root {
     pub type nsAutoPtr_element_type<T> = T;
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsAutoPtr_Proxy {
     }
     pub type nsAutoPtr_Proxy_member_function = u8;
     pub type PLDHashNumber = u32;
     #[repr(C)]
+    #[derive(Debug)]
     pub struct PLDHashTable {
         pub mOps: *const root::PLDHashTableOps,
         pub mHashShift: i16,
         pub mEntrySize: u32,
         pub mEntryCount: u32,
         pub mRemovedCount: u32,
         pub mEntryStore: root::PLDHashTable_EntryStore,
         pub mChecker: root::Checker,
@@ -15954,16 +11607,17 @@ pub mod root {
                     const _ as usize } , 0usize , concat ! (
                     "Alignment of field: " , stringify ! ( PLDHashEntryHdr ) ,
                     "::" , stringify ! ( mKeyHash ) ));
     }
     impl Clone for PLDHashEntryHdr {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
+    #[derive(Debug, Copy)]
     pub struct Checker {
         pub mState: u32,
         pub mIsWritable: u32,
     }
     pub const Checker_kIdle: u32 = 0;
     pub const Checker_kRead1: u32 = 1;
     pub const Checker_kReadMax: u32 = 9999;
     pub const Checker_kWrite: u32 = 10000;
@@ -15979,16 +11633,19 @@ pub mod root {
                     "Alignment of field: " , stringify ! ( Checker ) , "::" ,
                     stringify ! ( mState ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const Checker ) ) . mIsWritable as * const
                     _ as usize } , 4usize , concat ! (
                     "Alignment of field: " , stringify ! ( Checker ) , "::" ,
                     stringify ! ( mIsWritable ) ));
     }
+    impl Clone for Checker {
+        fn clone(&self) -> Self { *self }
+    }
     pub type PLDHashHashKey =
         ::std::option::Option<unsafe extern "C" fn(aKey:
                                                        *const ::std::os::raw::c_void)
                                   -> root::PLDHashNumber>;
     pub type PLDHashMatchEntry =
         ::std::option::Option<unsafe extern "C" fn(aEntry:
                                                        *const root::PLDHashEntryHdr,
                                                    aKey:
@@ -16006,40 +11663,36 @@ pub mod root {
                                                        *mut root::PLDHashTable,
                                                    aEntry:
                                                        *mut root::PLDHashEntryHdr)>;
     pub type PLDHashInitEntry =
         ::std::option::Option<unsafe extern "C" fn(aEntry:
                                                        *mut root::PLDHashEntryHdr,
                                                    aKey:
                                                        *const ::std::os::raw::c_void)>;
-    /**
- * hashkey wrapper using T* KeyType
- *
- * @see nsTHashtable::EntryType for specification
- */
+    /// hashkey wrapper using T* KeyType
+    ///
+    /// @see nsTHashtable::EntryType for specification
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsPtrHashKey<T> {
         pub _base: root::PLDHashEntryHdr,
         pub mKey: *mut T,
         pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
     }
     pub type nsPtrHashKey_KeyType<T> = *mut T;
     pub type nsPtrHashKey_KeyTypePointer<T> = *mut T;
     pub const nsPtrHashKey_ALLOW_MEMMOVE: root::nsPtrHashKey__bindgen_ty_1 =
         nsPtrHashKey__bindgen_ty_1::ALLOW_MEMMOVE;
     #[repr(i32)]
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsPtrHashKey__bindgen_ty_1 { ALLOW_MEMMOVE = 0, }
-    /**
- * hashkey wrapper using nsAString KeyType
- *
- * @see nsTHashtable::EntryType for specification
- */
+    /// hashkey wrapper using nsAString KeyType
+    ///
+    /// @see nsTHashtable::EntryType for specification
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStringHashKey {
         pub _base: root::PLDHashEntryHdr,
         pub mStr: ::nsstring::nsStringRepr,
     }
     pub type nsStringHashKey_KeyType = *const root::nsAString;
     pub type nsStringHashKey_KeyTypePointer = *const root::nsAString;
@@ -16057,21 +11710,19 @@ pub mod root {
                     concat ! (
                     "Alignment of " , stringify ! ( nsStringHashKey ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStringHashKey ) ) . mStr as * const
                     _ as usize } , 8usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStringHashKey ) ,
                     "::" , stringify ! ( mStr ) ));
     }
-    /**
- * hashkey wrapper using nsACString KeyType
- *
- * @see nsTHashtable::EntryType for specification
- */
+    /// hashkey wrapper using nsACString KeyType
+    ///
+    /// @see nsTHashtable::EntryType for specification
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsCStringHashKey {
         pub _base: root::PLDHashEntryHdr,
         pub mStr: root::nsCString,
     }
     pub type nsCStringHashKey_KeyType = *const root::nsACString;
     pub type nsCStringHashKey_KeyTypePointer = *const root::nsACString;
@@ -16090,21 +11741,19 @@ pub mod root {
                     concat ! (
                     "Alignment of " , stringify ! ( nsCStringHashKey ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsCStringHashKey ) ) . mStr as *
                     const _ as usize } , 8usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsCStringHashKey )
                     , "::" , stringify ! ( mStr ) ));
     }
-    /**
- * hashkey wrapper using nsISupports* KeyType
- *
- * @see nsTHashtable::EntryType for specification
- */
+    /// hashkey wrapper using nsISupports* KeyType
+    ///
+    /// @see nsTHashtable::EntryType for specification
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsISupportsHashKey {
         pub _base: root::PLDHashEntryHdr,
         pub mSupports: root::nsCOMPtr<root::nsISupports>,
     }
     pub type nsISupportsHashKey_KeyType = *mut root::nsISupports;
     pub type nsISupportsHashKey_KeyTypePointer = *const root::nsISupports;
@@ -16123,118 +11772,108 @@ pub mod root {
                     concat ! (
                     "Alignment of " , stringify ! ( nsISupportsHashKey ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsISupportsHashKey ) ) . mSupports as
                     * const _ as usize } , 8usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsISupportsHashKey
                     ) , "::" , stringify ! ( mSupports ) ));
     }
-    /**
- * hashkey wrapper using refcounted * KeyType
- *
- * @see nsTHashtable::EntryType for specification
- */
+    /// hashkey wrapper using refcounted * KeyType
+    ///
+    /// @see nsTHashtable::EntryType for specification
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsRefPtrHashKey<T> {
         pub _base: root::PLDHashEntryHdr,
         pub mKey: root::RefPtr<T>,
         pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
     }
     pub type nsRefPtrHashKey_KeyType<T> = *mut T;
     pub type nsRefPtrHashKey_KeyTypePointer<T> = *mut T;
     pub const nsRefPtrHashKey_ALLOW_MEMMOVE:
               root::nsRefPtrHashKey__bindgen_ty_1 =
         nsRefPtrHashKey__bindgen_ty_1::ALLOW_MEMMOVE;
     #[repr(i32)]
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsRefPtrHashKey__bindgen_ty_1 { ALLOW_MEMMOVE = 0, }
-    /**
- * a base class for templated hashtables.
- *
- * Clients will rarely need to use this class directly. Check the derived
- * classes first, to see if they will meet your needs.
- *
- * @param EntryType  the templated entry-type class that is managed by the
- *   hashtable. <code>EntryType</code> must extend the following declaration,
- *   and <strong>must not declare any virtual functions or derive from classes
- *   with virtual functions.</strong>  Any vtable pointer would break the
- *   PLDHashTable code.
- *<pre>   class EntryType : public PLDHashEntryHdr
- *   {
- *   public: or friend nsTHashtable<EntryType>;
- *     // KeyType is what we use when Get()ing or Put()ing this entry
- *     // this should either be a simple datatype (uint32_t, nsISupports*) or
- *     // a const reference (const nsAString&)
- *     typedef something KeyType;
- *     // KeyTypePointer is the pointer-version of KeyType, because
- *     // PLDHashTable.h requires keys to cast to <code>const void*</code>
- *     typedef const something* KeyTypePointer;
- *
- *     EntryType(KeyTypePointer aKey);
- *
- *     // A copy or C++11 Move constructor must be defined, even if
- *     // AllowMemMove() == true, otherwise you will cause link errors.
- *     EntryType(const EntryType& aEnt);  // Either this...
- *     EntryType(EntryType&& aEnt);       // ...or this
- *
- *     // the destructor must be defined... or you will cause link errors!
- *     ~EntryType();
- *
- *     // KeyEquals(): does this entry match this key?
- *     bool KeyEquals(KeyTypePointer aKey) const;
- *
- *     // KeyToPointer(): Convert KeyType to KeyTypePointer
- *     static KeyTypePointer KeyToPointer(KeyType aKey);
- *
- *     // HashKey(): calculate the hash number
- *     static PLDHashNumber HashKey(KeyTypePointer aKey);
- *
- *     // ALLOW_MEMMOVE can we move this class with memmove(), or do we have
- *     // to use the copy constructor?
- *     enum { ALLOW_MEMMOVE = true/false };
- *   }</pre>
- *
- * @see nsInterfaceHashtable
- * @see nsDataHashtable
- * @see nsClassHashtable
- * @author "Benjamin Smedberg <bsmedberg@covad.net>"
- */
+    /// a base class for templated hashtables.
+    ///
+    /// Clients will rarely need to use this class directly. Check the derived
+    /// classes first, to see if they will meet your needs.
+    ///
+    /// @param EntryType  the templated entry-type class that is managed by the
+    /// hashtable. <code>EntryType</code> must extend the following declaration,
+    /// and <strong>must not declare any virtual functions or derive from classes
+    /// with virtual functions.</strong>  Any vtable pointer would break the
+    /// PLDHashTable code.
+    /// <pre>   class EntryType : public PLDHashEntryHdr
+    /// {
+    /// public: or friend nsTHashtable<EntryType>;
+    /// // KeyType is what we use when Get()ing or Put()ing this entry
+    /// // this should either be a simple datatype (uint32_t, nsISupports*) or
+    /// // a const reference (const nsAString&)
+    /// typedef something KeyType;
+    /// // KeyTypePointer is the pointer-version of KeyType, because
+    /// // PLDHashTable.h requires keys to cast to <code>const void*</code>
+    /// typedef const something* KeyTypePointer;
+    ///
+    /// EntryType(KeyTypePointer aKey);
+    ///
+    /// // A copy or C++11 Move constructor must be defined, even if
+    /// // AllowMemMove() == true, otherwise you will cause link errors.
+    /// EntryType(const EntryType& aEnt);  // Either this...
+    /// EntryType(EntryType&& aEnt);       // ...or this
+    ///
+    /// // the destructor must be defined... or you will cause link errors!
+    /// ~EntryType();
+    ///
+    /// // KeyEquals(): does this entry match this key?
+    /// bool KeyEquals(KeyTypePointer aKey) const;
+    ///
+    /// // KeyToPointer(): Convert KeyType to KeyTypePointer
+    /// static KeyTypePointer KeyToPointer(KeyType aKey);
+    ///
+    /// // HashKey(): calculate the hash number
+    /// static PLDHashNumber HashKey(KeyTypePointer aKey);
+    ///
+    /// // ALLOW_MEMMOVE can we move this class with memmove(), or do we have
+    /// // to use the copy constructor?
+    /// enum { ALLOW_MEMMOVE = true/false };
+    /// }</pre>
+    ///
+    /// @see nsInterfaceHashtable
+    /// @see nsDataHashtable
+    /// @see nsClassHashtable
+    /// @author "Benjamin Smedberg <bsmedberg@covad.net>"
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsTHashtable {
     }
     pub type nsTHashtable_fallible_t = root::mozilla::fallible_t;
-    /**
-   * KeyType is typedef'ed for ease of use.
-   */
+    /// KeyType is typedef'ed for ease of use.
     pub type nsTHashtable_KeyType = [u8; 0usize];
-    /**
-   * KeyTypePointer is typedef'ed for ease of use.
-   */
+    /// KeyTypePointer is typedef'ed for ease of use.
     pub type nsTHashtable_KeyTypePointer = [u8; 0usize];
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsTHashtable_Iterator {
         pub _base: root::PLDHashTable_Iterator,
     }
     pub type nsTHashtable_Iterator_Base = root::PLDHashTable_Iterator;
-    /**
- * templated hashtable for simple data types
- * This class manages simple data types that do not need construction or
- * destruction.
- *
- * @param KeyClass a wrapper-class for the hashtable key, see nsHashKeys.h
- *   for a complete specification.
- * @param DataType the datatype stored in the hashtable,
- *   for example, uint32_t or nsCOMPtr.  If UserDataType is not the same,
- *   DataType must implicitly cast to UserDataType
- * @param UserDataType the user sees, for example uint32_t or nsISupports*
- */
+    /// templated hashtable for simple data types
+    /// This class manages simple data types that do not need construction or
+    /// destruction.
+    ///
+    /// @param KeyClass a wrapper-class for the hashtable key, see nsHashKeys.h
+    /// for a complete specification.
+    /// @param DataType the datatype stored in the hashtable,
+    /// for example, uint32_t or nsCOMPtr.  If UserDataType is not the same,
+    /// DataType must implicitly cast to UserDataType
+    /// @param UserDataType the user sees, for example uint32_t or nsISupports*
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsBaseHashtable {
     }
     pub type nsBaseHashtable_fallible_t = root::mozilla::fallible_t;
     pub type nsBaseHashtable_KeyType = [u8; 0usize];
     pub type nsBaseHashtable_EntryType<KeyClass, DataType> =
         root::nsBaseHashtableET<KeyClass, DataType>;
@@ -16259,130 +11898,40 @@ pub mod root {
         pub _phantom_1: ::std::marker::PhantomData<::std::cell::UnsafeCell<DataType>>,
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsBaseHashtable_Iterator {
         pub _base: root::PLDHashTable_Iterator,
     }
     pub type nsBaseHashtable_Iterator_Base = root::PLDHashTable_Iterator;
-    /**
- * the private nsTHashtable::EntryType class used by nsBaseHashtable
- * @see nsTHashtable for the specification of this class
- * @see nsBaseHashtable for template parameters
- */
+    /// the private nsTHashtable::EntryType class used by nsBaseHashtable
+    /// @see nsTHashtable for the specification of this class
+    /// @see nsBaseHashtable for template parameters
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsBaseHashtableET<KeyClass, DataType> {
         pub _base: KeyClass,
         pub mData: DataType,
         pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<KeyClass>>,
         pub _phantom_1: ::std::marker::PhantomData<::std::cell::UnsafeCell<DataType>>,
     }
     pub type nsBaseHashtableET_KeyType = [u8; 0usize];
     pub type nsBaseHashtableET_KeyTypePointer = [u8; 0usize];
-    /**
- * templated hashtable class maps keys to simple datatypes.
- * See nsBaseHashtable for complete declaration
- * @param KeyClass a wrapper-class for the hashtable key, see nsHashKeys.h
- *   for a complete specification.
- * @param DataType the simple datatype being wrapped
- * @see nsInterfaceHashtable, nsClassHashtable
- */
+    /// templated hashtable class maps keys to simple datatypes.
+    /// See nsBaseHashtable for complete declaration
+    /// @param KeyClass a wrapper-class for the hashtable key, see nsHashKeys.h
+    /// for a complete specification.
+    /// @param DataType the simple datatype being wrapped
+    /// @see nsInterfaceHashtable, nsClassHashtable
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsDataHashtable {
     }
     pub type nsDataHashtable_BaseClass = u8;
-    pub type nsIntRegion = root::mozilla::gfx::IntRegion;
-    #[repr(C)]
-    #[derive(Debug)]
-    pub struct nsRegion {
-        pub mImpl: root::pixman_region32_t,
-    }
-    pub type nsRegion_RectType = root::nsRect;
-    pub type nsRegion_PointType = root::nsPoint;
-    pub type nsRegion_MarginType = root::nsMargin;
-    /**
-   * VisitEdges is a weird kind of function that we use for padding
-   * out surfaces to prevent texture filtering artifacts.
-   * It calls the visitFn callback for each of the exterior edges of
-   * the regions. The top and bottom edges will be expanded 1 pixel
-   * to the left and right if there's an outside corner. The order
-   * the edges are visited is not guaranteed.
-   *
-   * visitFn has a side parameter that can be TOP,BOTTOM,LEFT,RIGHT
-   * and specifies which kind of edge is being visited. x1, y1, x2, y2
-   * are the coordinates of the line. (x1 == x2) || (y1 == y2)
-   */
-    pub type nsRegion_visitFn =
-        ::std::option::Option<unsafe extern "C" fn(closure:
-                                                       *mut ::std::os::raw::c_void,
-                                                   side: root::VisitSide,
-                                                   x1: ::std::os::raw::c_int,
-                                                   y1: ::std::os::raw::c_int,
-                                                   x2: ::std::os::raw::c_int,
-                                                   y2:
-                                                       ::std::os::raw::c_int)>;
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsRegion_RectIterator {
-        pub mCurrent: ::std::os::raw::c_int,
-        pub mLimit: ::std::os::raw::c_int,
-        pub mTmp: root::nsRect,
-        pub mBoxes: *mut root::pixman_box32_t,
-    }
-    #[test]
-    fn bindgen_test_layout_nsRegion_RectIterator() {
-        assert_eq!(::std::mem::size_of::<nsRegion_RectIterator>() , 32usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( nsRegion_RectIterator ) ));
-        assert_eq! (::std::mem::align_of::<nsRegion_RectIterator>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsRegion_RectIterator )
-                    ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsRegion_RectIterator ) ) . mCurrent
-                    as * const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsRegion_RectIterator ) , "::" , stringify ! ( mCurrent )
-                    ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsRegion_RectIterator ) ) . mLimit as
-                    * const _ as usize } , 4usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsRegion_RectIterator ) , "::" , stringify ! ( mLimit )
-                    ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsRegion_RectIterator ) ) . mTmp as *
-                    const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsRegion_RectIterator ) , "::" , stringify ! ( mTmp ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsRegion_RectIterator ) ) . mBoxes as
-                    * const _ as usize } , 24usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsRegion_RectIterator ) , "::" , stringify ! ( mBoxes )
-                    ));
-    }
-    impl Clone for nsRegion_RectIterator {
-        fn clone(&self) -> Self { *self }
-    }
-    #[test]
-    fn bindgen_test_layout_nsRegion() {
-        assert_eq!(::std::mem::size_of::<nsRegion>() , 24usize , concat ! (
-                   "Size of: " , stringify ! ( nsRegion ) ));
-        assert_eq! (::std::mem::align_of::<nsRegion>() , 8usize , concat ! (
-                    "Alignment of " , stringify ! ( nsRegion ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsRegion ) ) . mImpl as * const _ as
-                    usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsRegion ) , "::" ,
-                    stringify ! ( mImpl ) ));
-    }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsTArrayHeader {
         pub mLength: u32,
         pub _bitfield_1: u32,
     }
     extern "C" {
         #[link_name = "_ZN14nsTArrayHeader9sEmptyHdrE"]
@@ -16488,18 +12037,16 @@ pub mod root {
                           (2147483647u64 as u32))
              } |
                  ((mIsAutoArray as u32 as u32) << 31usize) &
                      (2147483648u64 as u32))
         }
     }
     pub type nscoord = i32;
     pub type nscolor = u32;
-    pub type nsIntPoint = root::mozilla::gfx::IntPoint;
-    pub type nsIntMargin = root::mozilla::gfx::IntMargin;
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct gfxFontFeature {
         pub mTag: u32,
         pub mValue: u32,
     }
     #[test]
     fn bindgen_test_layout_gfxFontFeature() {
@@ -16733,21 +12280,16 @@ pub mod root {
                     & ( * ( 0 as * const gfxFontFeatureValueSet ) ) .
                     mFontFeatureValues as * const _ as usize } , 16usize ,
                     concat ! (
                     "Alignment of field: " , stringify ! (
                     gfxFontFeatureValueSet ) , "::" , stringify ! (
                     mFontFeatureValues ) ));
     }
     pub type gfxFontVariation = root::mozilla::gfx::FontVariation;
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct gfxFontStyle {
-        _unused: [u8; 0],
-    }
     pub const kGenericFont_NONE: u8 = 0;
     pub const kGenericFont_moz_variable: u8 = 0;
     pub const kGenericFont_moz_fixed: u8 = 1;
     pub const kGenericFont_serif: u8 = 2;
     pub const kGenericFont_sans_serif: u8 = 4;
     pub const kGenericFont_monospace: u8 = 8;
     pub const kGenericFont_cursive: u8 = 16;
     pub const kGenericFont_fantasy: u8 = 32;
@@ -16889,20 +12431,18 @@ pub mod root {
                     "Alignment of field: " , stringify ! ( nsFont ) , "::" ,
                     stringify ! ( fontVariationSettings ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsFont ) ) . languageOverride as *
                     const _ as usize } , 80usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsFont ) , "::" ,
                     stringify ! ( languageOverride ) ));
     }
-    /**
- * An array of objects, similar to AutoTArray<T,1> but which is memmovable. It
- * always has length >= 1.
- */
+    /// An array of objects, similar to AutoTArray<T,1> but which is memmovable. It
+    /// always has length >= 1.
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleAutoArray<T> {
         pub mFirstElement: T,
         pub mOtherElements: root::nsTArray<T>,
         pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
     }
     #[repr(i32)]
@@ -16959,25 +12499,24 @@ pub mod root {
                     & ( * ( 0 as * const nsStyleUnion ) ) . mPointer as *
                     const _ as usize } , 0usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleUnion ) ,
                     "::" , stringify ! ( mPointer ) ));
     }
     impl Clone for nsStyleUnion {
         fn clone(&self) -> Self { *self }
     }
-    /**
- * Class that hold a single size specification used by the style
- * system.  The size specification consists of two parts -- a number
- * and a unit.  The number is an integer, a floating point value, an
- * nscoord, or undefined, and the unit is an nsStyleUnit.  Checking
- * the unit is a must before asking for the value in any particular
- * form.
- */
- /** <div rustbindgen private accessor="unsafe"></div> */
+    /// Class that hold a single size specification used by the style
+    /// system.  The size specification consists of two parts -- a number
+    /// and a unit.  The number is an integer, a floating point value, an
+    /// nscoord, or undefined, and the unit is an nsStyleUnit.  Checking
+    /// the unit is a must before asking for the value in any particular
+    /// form.
+    /// /
+    /// /** <div rustbindgen private accessor="unsafe"></div>
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleCoord {
         mUnit: root::nsStyleUnit,
         mValue: root::nsStyleUnion,
     }
     #[repr(C)]
     #[derive(Debug, Copy)]
@@ -17069,22 +12608,21 @@ pub mod root {
         pub unsafe fn get_mValue(&self) -> &root::nsStyleUnion {
             &self.mValue
         }
         #[inline]
         pub unsafe fn get_mValue_mut(&mut self) -> &mut root::nsStyleUnion {
             &mut self.mValue
         }
     }
-    /**
- * Class that represents a set of top/right/bottom/left nsStyleCoords.
- * This is commonly used to hold the widths of the borders, margins,
- * or paddings of a box.
- */
- /** <div rustbindgen private accessor="unsafe"></div> */
+    /// Class that represents a set of top/right/bottom/left nsStyleCoords.
+    /// This is commonly used to hold the widths of the borders, margins,
+    /// or paddings of a box.
+    /// /
+    /// /** <div rustbindgen private accessor="unsafe"></div>
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleSides {
         mUnits: [root::nsStyleUnit; 4usize],
         mValues: [root::nsStyleUnion; 4usize],
     }
     #[test]
     fn bindgen_test_layout_nsStyleSides() {
@@ -17118,22 +12656,21 @@ pub mod root {
             &self.mValues
         }
         #[inline]
         pub unsafe fn get_mValues_mut(&mut self)
          -> &mut [root::nsStyleUnion; 4usize] {
             &mut self.mValues
         }
     }
-    /**
- * Class that represents a set of top-left/top-right/bottom-right/bottom-left
- * nsStyleCoord pairs.  This is used to hold the dimensions of the
- * corners of a box (for, e.g., border-radius and outline-radius).
- */
- /** <div rustbindgen private accessor="unsafe"></div> */
+    /// Class that represents a set of top-left/top-right/bottom-right/bottom-left
+    /// nsStyleCoord pairs.  This is used to hold the dimensions of the
+    /// corners of a box (for, e.g., border-radius and outline-radius).
+    /// /
+    /// /** <div rustbindgen private accessor="unsafe"></div>
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleCorners {
         mUnits: [root::nsStyleUnit; 8usize],
         mValues: [root::nsStyleUnion; 8usize],
     }
     #[test]
     fn bindgen_test_layout_nsStyleCorners() {
@@ -17345,47 +12882,34 @@ pub mod root {
     }
     impl ::std::ops::BitAndAssign for root::nsRestyleHint {
         #[inline]
         fn bitand_assign(&mut self, rhs: root::nsRestyleHint) {
             self.0 &= rhs.0;
         }
     }
     #[repr(C)]
-    /**
- * |nsRestyleHint| is a bitfield for the result of
- * |HasStateDependentStyle| and |HasAttributeDependentStyle|.  When no
- * restyling is necessary, use |nsRestyleHint(0)|.
- *
- * Without eRestyle_Force or eRestyle_ForceDescendants, the restyling process
- * can stop processing at a frame when it detects no style changes and it is
- * known that the styles of the subtree beneath it will not change, leaving
- * the old style context on the frame.  eRestyle_Force can be used to skip this
- * optimization on a frame, and to force its new style context to be used.
- *
- * Similarly, eRestyle_ForceDescendants will cause the frame and all of its
- * descendants to be traversed and for the new style contexts that are created
- * to be set on the frames.
- *
- * NOTE: When adding new restyle hints, please also add them to
- * RestyleManager::RestyleHintToString.
- */
+    /// |nsRestyleHint| is a bitfield for the result of
+    /// |HasStateDependentStyle| and |HasAttributeDependentStyle|.  When no
+    /// restyling is necessary, use |nsRestyleHint(0)|.
+    ///
+    /// Without eRestyle_Force or eRestyle_ForceDescendants, the restyling process
+    /// can stop processing at a frame when it detects no style changes and it is
+    /// known that the styles of the subtree beneath it will not change, leaving
+    /// the old style context on the frame.  eRestyle_Force can be used to skip this
+    /// optimization on a frame, and to force its new style context to be used.
+    ///
+    /// Similarly, eRestyle_ForceDescendants will cause the frame and all of its
+    /// descendants to be traversed and for the new style contexts that are created
+    /// to be set on the frames.
+    ///
+    /// NOTE: When adding new restyle hints, please also add them to
+    /// RestyleManager::RestyleHintToString.
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub struct nsRestyleHint(pub u32);
-    #[repr(u32)]
-    /**
- * Return status for event processors.
- */
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsEventStatus {
-        nsEventStatus_eIgnore = 0,
-        nsEventStatus_eConsumeNoDefault = 1,
-        nsEventStatus_eConsumeDoDefault = 2,
-        nsEventStatus_eSentinel = 3,
-    }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleFont {
         pub mFont: root::nsFont,
         pub mSize: root::nscoord,
         pub mGenericID: u8,
         pub mScriptLevel: i8,
         pub mMathVariant: u8,
@@ -17486,38 +13010,16 @@ pub mod root {
         assert_eq! (::std::mem::align_of::<nsStyleColor>() , 4usize , concat !
                     ( "Alignment of " , stringify ! ( nsStyleColor ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleColor ) ) . mColor as * const
                     _ as usize } , 0usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleColor ) ,
                     "::" , stringify ! ( mColor ) ));
     }
-    #[test]
-    fn __bindgen_test_layout_StaticRefPtr_instantiation_80() {
-        assert_eq!(::std::mem::size_of::<root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
-        assert_eq!(::std::mem::align_of::<root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_StaticRefPtr_instantiation_81() {
-        assert_eq!(::std::mem::size_of::<root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
-        assert_eq!(::std::mem::align_of::<root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
-    }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleList {
         pub mListStylePosition: u8,
         pub mListStyleImage: root::RefPtr<root::nsStyleImageRequest>,
         pub mCounterStyle: root::mozilla::CounterStylePtr,
         pub mQuotes: root::RefPtr<root::nsStyleQuoteValues>,
         pub mImageRegion: root::nsRect,
@@ -17560,16 +13062,38 @@ pub mod root {
                     "Alignment of field: " , stringify ! ( nsStyleList ) ,
                     "::" , stringify ! ( mQuotes ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleList ) ) . mImageRegion as *
                     const _ as usize } , 32usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleList ) ,
                     "::" , stringify ! ( mImageRegion ) ));
     }
+    #[test]
+    fn __bindgen_test_layout_StaticRefPtr_open0_nsStyleQuoteValues_close0_instantiation() {
+        assert_eq!(::std::mem::size_of::<root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
+        assert_eq!(::std::mem::align_of::<root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
+    }
+    #[test]
+    fn __bindgen_test_layout_StaticRefPtr_open0_nsStyleQuoteValues_close0_instantiation_1() {
+        assert_eq!(::std::mem::size_of::<root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
+        assert_eq!(::std::mem::align_of::<root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
+    }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleText {
         pub mTextAlign: u8,
         pub mTextAlignLast: u8,
         pub _bitfield_1: u8,
         pub mTextJustify: root::mozilla::StyleTextJustify,
         pub mTextTransform: u8,
@@ -19521,21 +15045,19 @@ pub mod root {
                     "Alignment of field: " , stringify ! ( nsStyleEffects ) ,
                     "::" , stringify ! ( mClipFlags ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleEffects ) ) . mMixBlendMode as
                     * const _ as usize } , 37usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleEffects ) ,
                     "::" , stringify ! ( mMixBlendMode ) ));
     }
-    /**
- * We want C++ to be able to read the style struct fields of ComputedValues
- * so we define this type on the C++ side and use the bindgenned version
- * on the Rust side.
- */
+    /// We want C++ to be able to read the style struct fields of ComputedValues
+    /// so we define this type on the C++ side and use the bindgenned version
+    /// on the Rust side.
     #[repr(C)]
     #[derive(Debug)]
     pub struct ServoComputedData {
         pub Font: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoFont>,
         pub Color: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoColor>,
         pub List: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoList>,
         pub Text: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoText>,
         pub Visibility: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoVisibility>,
@@ -19556,22 +15078,22 @@ pub mod root {
         pub XUL: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoXUL>,
         pub SVGReset: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoSVGReset>,
         pub Column: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoColumn>,
         pub Effects: ::gecko_bindings::structs::ServoRawOffsetArc<root::mozilla::GeckoEffects>,
         pub custom_properties: ::gecko_bindings::structs::ServoCustomPropertiesMap,
         pub writing_mode: ::gecko_bindings::structs::ServoWritingMode,
         pub flags: ::gecko_bindings::structs::ServoComputedValueFlags,
         /// The rule node representing the ordered list of rules matched for this
-  /// node.  Can be None for default values and text nodes.  This is
-  /// essentially an optimization to avoid referencing the root rule node.
+        /// /// node.  Can be None for default values and text nodes.  This is
+        /// /// essentially an optimization to avoid referencing the root rule node.
         pub rules: ::gecko_bindings::structs::ServoRuleNode,
         /// The element's computed values if visited, only computed if there's a
-  /// relevant link for this element. A element's "relevant link" is the
-  /// element being matched if it is a link or the nearest ancestor link.
+        /// /// relevant link for this element. A element's "relevant link" is the
+        /// /// element being matched if it is a link or the nearest ancestor link.
         pub visited_style: ::gecko_bindings::structs::ServoVisitedStyle,
         pub font_computation_data: ::gecko_bindings::structs::ServoFontComputationData,
     }
     #[test]
     fn bindgen_test_layout_ServoComputedData() {
         assert_eq!(::std::mem::size_of::<ServoComputedData>() , 224usize ,
                    concat ! ( "Size of: " , stringify ! ( ServoComputedData )
                    ));
@@ -19721,49 +15243,16 @@ pub mod root {
                     , "::" , stringify ! ( visited_style ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const ServoComputedData ) ) .
                     font_computation_data as * const _ as usize } , 216usize ,
                     concat ! (
                     "Alignment of field: " , stringify ! ( ServoComputedData )
                     , "::" , stringify ! ( font_computation_data ) ));
     }
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct ServoComputedDataForgotten {
-        pub mPtr: *const root::ServoComputedData,
-    }
-    #[test]
-    fn bindgen_test_layout_ServoComputedDataForgotten() {
-        assert_eq!(::std::mem::size_of::<ServoComputedDataForgotten>() ,
-                   8usize , concat ! (
-                   "Size of: " , stringify ! ( ServoComputedDataForgotten )
-                   ));
-        assert_eq! (::std::mem::align_of::<ServoComputedDataForgotten>() ,
-                    8usize , concat ! (
-                    "Alignment of " , stringify ! ( ServoComputedDataForgotten
-                    ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const ServoComputedDataForgotten ) ) . mPtr
-                    as * const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! (
-                    ServoComputedDataForgotten ) , "::" , stringify ! ( mPtr )
-                    ));
-    }
-    impl Clone for ServoComputedDataForgotten {
-        fn clone(&self) -> Self { *self }
-    }
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum WeakMapTraceKind {
-        DoNotTraceWeakMaps = 0,
-        ExpandWeakMaps = 1,
-        TraceWeakMapValues = 2,
-        TraceWeakMapKeysValues = 3,
-    }
     #[repr(u32)]
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum JSValueTag {
         JSVAL_TAG_MAX_DOUBLE = 131056,
         JSVAL_TAG_INT32 = 131057,
         JSVAL_TAG_UNDEFINED = 131058,
         JSVAL_TAG_NULL = 131059,
         JSVAL_TAG_BOOLEAN = 131060,
@@ -19790,25 +15279,23 @@ pub mod root {
         JS_HASH_KEY_EMPTY = 11,
         JS_ION_ERROR = 12,
         JS_ION_BAILOUT = 13,
         JS_OPTIMIZED_OUT = 14,
         JS_UNINITIALIZED_LEXICAL = 15,
         JS_GENERIC_MAGIC = 16,
         JS_WHY_MAGIC_COUNT = 17,
     }
-    /**
- * This structure precedes the string buffers "we" allocate.  It may be the
- * case that nsTAString::mData does not point to one of these special
- * buffers.  The mDataFlags member variable distinguishes the buffer type.
- *
- * When this header is in use, it enables reference counting, and capacity
- * tracking.  NOTE: A string buffer can be modified only if its reference
- * count is 1.
- */
+    /// This structure precedes the string buffers "we" allocate.  It may be the
+    /// case that nsTAString::mData does not point to one of these special
+    /// buffers.  The mDataFlags member variable distinguishes the buffer type.
+    ///
+    /// When this header is in use, it enables reference counting, and capacity
+    /// tracking.  NOTE: A string buffer can be modified only if its reference
+    /// count is 1.
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStringBuffer {
         pub mRefCount: u32,
         pub mStorageSize: u32,
     }
     #[test]
     fn bindgen_test_layout_nsStringBuffer() {
@@ -19828,21 +15315,19 @@ pub mod root {
                     "::" , stringify ! ( mStorageSize ) ));
     }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsIAtom {
         pub _base: root::nsISupports,
         pub _bitfield_1: u32,
         pub mHash: u32,
-        /**
-   * WARNING! There is an invisible constraint on |mString|: the chars it
-   * points to must belong to an nsStringBuffer. This is so that the
-   * nsStringBuffer::FromData() calls above are valid.
-   */
+        /// WARNING! There is an invisible constraint on |mString|: the chars it
+        /// points to must belong to an nsStringBuffer. This is so that the
+        /// nsStringBuffer::FromData() calls above are valid.
         pub mString: *mut u16,
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsIAtom_COMTypeInfo {
         pub _address: u8,
     }
     #[test]
@@ -19970,53 +15455,51 @@ pub mod root {
         assert_eq! (::std::mem::align_of::<nsIPrincipal>() , 8usize , concat !
                     ( "Alignment of " , stringify ! ( nsIPrincipal ) ));
     }
     impl Clone for nsIPrincipal {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
     pub struct nsWrapperCache__bindgen_vtable(::std::os::raw::c_void);
-    /**
- * Class to store the wrapper for an object. This can only be used with objects
- * that only have one non-security wrapper at a time (for an XPCWrappedNative
- * this is usually ensured by setting an explicit parent in the PreCreate hook
- * for the class).
- *
- * An instance of nsWrapperCache can be gotten from an object that implements
- * a wrapper cache by calling QueryInterface on it. Note that this breaks XPCOM
- * rules a bit (this object doesn't derive from nsISupports).
- *
- * The cache can store objects other than wrappers. We allow wrappers to use a
- * separate JSObject to store their state (mostly expandos). If the wrapper is
- * collected and we want to preserve this state we actually store the state
- * object in the cache.
- *
- * The cache can store 2 types of objects:
- *
- *  If WRAPPER_IS_NOT_DOM_BINDING is set (IsDOMBinding() returns false):
- *    - the JSObject of an XPCWrappedNative wrapper
- *
- *  If WRAPPER_IS_NOT_DOM_BINDING is not set (IsDOMBinding() returns true):
- *    - a DOM binding object (regular JS object or proxy)
- *
- * The finalizer for the wrapper clears the cache.
- *
- * A compacting GC can move the wrapper object. Pointers to moved objects are
- * usually found and updated by tracing the heap, however non-preserved wrappers
- * are weak references and are not traced, so another approach is
- * necessary. Instead a class hook (objectMovedOp) is provided that is called
- * when an object is moved and is responsible for ensuring pointers are
- * updated. It does this by calling UpdateWrapper() on the wrapper
- * cache. SetWrapper() asserts that the hook is implemented for any wrapper set.
- *
- * A number of the methods are implemented in nsWrapperCacheInlines.h because we
- * have to include some JS headers that don't play nicely with the rest of the
- * codebase. Include nsWrapperCacheInlines.h if you need to call those methods.
- */
+    /// Class to store the wrapper for an object. This can only be used with objects
+    /// that only have one non-security wrapper at a time (for an XPCWrappedNative
+    /// this is usually ensured by setting an explicit parent in the PreCreate hook
+    /// for the class).
+    ///
+    /// An instance of nsWrapperCache can be gotten from an object that implements
+    /// a wrapper cache by calling QueryInterface on it. Note that this breaks XPCOM
+    /// rules a bit (this object doesn't derive from nsISupports).
+    ///
+    /// The cache can store objects other than wrappers. We allow wrappers to use a
+    /// separate JSObject to store their state (mostly expandos). If the wrapper is
+    /// collected and we want to preserve this state we actually store the state
+    /// object in the cache.
+    ///
+    /// The cache can store 2 types of objects:
+    ///
+    /// If WRAPPER_IS_NOT_DOM_BINDING is set (IsDOMBinding() returns false):
+    /// - the JSObject of an XPCWrappedNative wrapper
+    ///
+    /// If WRAPPER_IS_NOT_DOM_BINDING is not set (IsDOMBinding() returns true):
+    /// - a DOM binding object (regular JS object or proxy)
+    ///
+    /// The finalizer for the wrapper clears the cache.
+    ///
+    /// A compacting GC can move the wrapper object. Pointers to moved objects are
+    /// usually found and updated by tracing the heap, however non-preserved wrappers
+    /// are weak references and are not traced, so another approach is
+    /// necessary. Instead a class hook (objectMovedOp) is provided that is called
+    /// when an object is moved and is responsible for ensuring pointers are
+    /// updated. It does this by calling UpdateWrapper() on the wrapper
+    /// cache. SetWrapper() asserts that the hook is implemented for any wrapper set.
+    ///
+    /// A number of the methods are implemented in nsWrapperCacheInlines.h because we
+    /// have to include some JS headers that don't play nicely with the rest of the
+    /// codebase. Include nsWrapperCacheInlines.h if you need to call those methods.
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsWrapperCache {
         pub vtable_: *const nsWrapperCache__bindgen_vtable,
         pub mWrapper: *mut root::JSObject,
         pub mFlags: root::nsWrapperCache_FlagsType,
         pub mBoolFlags: u32,
     }
@@ -20025,36 +15508,32 @@ pub mod root {
     pub struct nsWrapperCache_COMTypeInfo {
         pub _address: u8,
     }
     pub type nsWrapperCache_FlagsType = u32;
     pub const nsWrapperCache_WRAPPER_BIT_PRESERVED:
               root::nsWrapperCache__bindgen_ty_1 =
         nsWrapperCache__bindgen_ty_1::WRAPPER_BIT_PRESERVED;
     #[repr(u32)]
-    /**
-   * If this bit is set then we're preserving the wrapper, which in effect ties
-   * the lifetime of the JS object stored in the cache to the lifetime of the
-   * native object. We rely on the cycle collector to break the cycle that this
-   * causes between the native object and the JS object, so it is important that
-   * any native object that supports preserving of its wrapper
-   * traces/traverses/unlinks the cached JS object (see
-   * NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER and
-   * NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER).
-   */
+    /// If this bit is set then we're preserving the wrapper, which in effect ties
+    /// the lifetime of the JS object stored in the cache to the lifetime of the
+    /// native object. We rely on the cycle collector to break the cycle that this
+    /// causes between the native object and the JS object, so it is important that
+    /// any native object that supports preserving of its wrapper
+    /// traces/traverses/unlinks the cached JS object (see
+    /// NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER and
+    /// NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER).
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsWrapperCache__bindgen_ty_1 { WRAPPER_BIT_PRESERVED = 1, }
     pub const nsWrapperCache_WRAPPER_IS_NOT_DOM_BINDING:
               root::nsWrapperCache__bindgen_ty_2 =
         nsWrapperCache__bindgen_ty_2::WRAPPER_IS_NOT_DOM_BINDING;
     #[repr(u32)]
-    /**
-   * If this bit is set then the wrapper for the native object is not a DOM
-   * binding.
-   */
+    /// If this bit is set then the wrapper for the native object is not a DOM
+    /// binding.
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsWrapperCache__bindgen_ty_2 { WRAPPER_IS_NOT_DOM_BINDING = 2, }
     pub const nsWrapperCache_kWrapperFlagsMask:
               root::nsWrapperCache__bindgen_ty_3 =
         nsWrapperCache__bindgen_ty_3::kWrapperFlagsMask;
     #[repr(u32)]
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsWrapperCache__bindgen_ty_3 { kWrapperFlagsMask = 3, }
@@ -20274,28 +15753,21 @@ pub mod root {
         assert_eq!(::std::mem::size_of::<nsIDOMNode>() , 8usize , concat ! (
                    "Size of: " , stringify ! ( nsIDOMNode ) ));
         assert_eq! (::std::mem::align_of::<nsIDOMNode>() , 8usize , concat ! (
                     "Alignment of " , stringify ! ( nsIDOMNode ) ));
     }
     impl Clone for nsIDOMNode {
         fn clone(&self) -> Self { *self }
     }
-    pub type nsContentPolicyType = u32;
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct nsIDOMDocument {
-        _unused: [u8; 0],
-    }
-    /**
- * An internal interface that abstracts some DOMNode-related parts that both
- * nsIContent and nsIDocument share.  An instance of this interface has a list
- * of nsIContent children and provides access to them.
- */
-    #[repr(C)]
+    /// An internal interface that abstracts some DOMNode-related parts that both
+    /// nsIContent and nsIDocument share.  An instance of this interface has a list
+    /// of nsIContent children and provides access to them.
+    #[repr(C)]
+    #[derive(Debug)]
     pub struct nsINode {
         pub _base: root::mozilla::dom::EventTarget,
         pub mNodeInfo: root::RefPtr<root::mozilla::dom::NodeInfo>,
         pub mParent: *mut root::nsINode,
         pub mNextSibling: *mut root::nsIContent,
         pub mPreviousSibling: *mut root::nsIContent,
         pub mFirstChild: *mut root::nsIContent,
         pub __bindgen_anon_1: root::nsINode__bindgen_ty_1,
@@ -20340,19 +15812,17 @@ pub mod root {
         nsINode__bindgen_ty_2::eDATA_NODE;
     pub const nsINode_eMEDIA: root::nsINode__bindgen_ty_2 =
         nsINode__bindgen_ty_2::eMEDIA;
     pub const nsINode_eANIMATION: root::nsINode__bindgen_ty_2 =
         nsINode__bindgen_ty_2::eANIMATION;
     pub const nsINode_eFILTER: root::nsINode__bindgen_ty_2 =
         nsINode__bindgen_ty_2::eFILTER;
     #[repr(u32)]
-    /**
-   * Bit-flags to pass (or'ed together) to IsNodeOfType()
-   */
+    /// Bit-flags to pass (or'ed together) to IsNodeOfType()
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsINode__bindgen_ty_2 {
         eCONTENT = 1,
         eDOCUMENT = 2,
         eATTRIBUTE = 4,
         eTEXT = 8,
         ePROCESSING_INSTRUCTION = 16,
         eCOMMENT = 32,
@@ -20364,40 +15834,30 @@ pub mod root {
         eFILTER = 2048,
     }
     #[repr(C)]
     pub struct nsINode_nsSlots__bindgen_vtable(::std::os::raw::c_void);
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsINode_nsSlots {
         pub vtable_: *const nsINode_nsSlots__bindgen_vtable,
-        /**
-     * A list of mutation observers
-     */
+        /// A list of mutation observers
         pub mMutationObservers: [u64; 2usize],
-        /**
-     * An object implementing nsIDOMNodeList for this content (childNodes)
-     * @see nsIDOMNodeList
-     * @see nsGenericHTMLElement::GetChildNodes
-     */
+        /// An object implementing nsIDOMNodeList for this content (childNodes)
+        /// @see nsIDOMNodeList
+        /// @see nsGenericHTMLElement::GetChildNodes
         pub mChildNodes: root::RefPtr<root::nsChildContentList>,
-        /**
-     * Weak reference to this node.  This is cleared by the destructor of
-     * nsNodeWeakReference.
-     */
+        /// Weak reference to this node.  This is cleared by the destructor of
+        /// nsNodeWeakReference.
         pub mWeakReference: *mut root::nsNodeWeakReference,
-        /**
-     * A set of ranges in the common ancestor for the selection to which
-     * this node belongs to.
-     */
+        /// A set of ranges in the common ancestor for the selection to which
+        /// this node belongs to.
         pub mCommonAncestorRanges: u64,
-        /**
-     * Number of descendant nodes in the uncomposed document that have been
-     * explicitly set as editable.
-     */
+        /// Number of descendant nodes in the uncomposed document that have been
+        /// explicitly set as editable.
         pub mEditableDescendantCount: u32,
     }
     #[test]
     fn bindgen_test_layout_nsINode_nsSlots() {
         assert_eq!(::std::mem::size_of::<nsINode_nsSlots>() , 56usize , concat
                    ! ( "Size of: " , stringify ! ( nsINode_nsSlots ) ));
         assert_eq! (::std::mem::align_of::<nsINode_nsSlots>() , 8usize ,
                     concat ! (
@@ -20427,19 +15887,17 @@ pub mod root {
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsINode_nsSlots ) ) .
                     mEditableDescendantCount as * const _ as usize } , 48usize
                     , concat ! (
                     "Alignment of field: " , stringify ! ( nsINode_nsSlots ) ,
                     "::" , stringify ! ( mEditableDescendantCount ) ));
     }
     #[repr(u32)]
-    /**
-   * Boolean flags
-   */
+    /// Boolean flags
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsINode_BooleanFlag {
         NodeHasRenderingObservers = 0,
         IsInDocument = 1,
         ParentIsContent = 2,
         NodeIsElement = 3,
         ElementHasID = 4,
         ElementMayHaveClass = 5,
@@ -20540,96 +15998,16 @@ pub mod root {
                     "Alignment of field: " , stringify ! ( nsINode ) , "::" ,
                     stringify ! ( mSlots ) ));
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsIRedirectHistoryEntry {
         _unused: [u8; 0],
     }
-    /**
- * Get a property named by id in obj.  Note the jsid id type -- id may
- * be a string (Unicode property identifier) or an int (element index).  The
- * *vp out parameter, on success, is the new property value after the action.
- */
-    pub type JSGetterOp =
-        ::std::option::Option<unsafe extern "C" fn(cx: *mut root::JSContext,
-                                                   obj:
-                                                       root::JS::HandleObject,
-                                                   id: root::JS::HandleId,
-                                                   vp:
-                                                       root::JS::MutableHandleValue)
-                                  -> bool>;
-    /**
- * Set a property named by id in obj, treating the assignment as strict
- * mode code if strict is true. Note the jsid id type -- id may be a string
- * (Unicode property identifier) or an int (element index). The *vp out
- * parameter, on success, is the new property value after the
- * set.
- */
-    pub type JSSetterOp =
-        ::std::option::Option<unsafe extern "C" fn(cx: *mut root::JSContext,
-                                                   obj:
-                                                       root::JS::HandleObject,
-                                                   id: root::JS::HandleId,
-                                                   vp:
-                                                       root::JS::MutableHandleValue,
-                                                   result:
-                                                       *mut root::JS::ObjectOpResult)
-                                  -> bool>;
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct JSErrorFormatString {
-        /** The error message name in ASCII. */
-        pub name: *const ::std::os::raw::c_char,
-        /** The error format string in ASCII. */
-        pub format: *const ::std::os::raw::c_char,
-        /** The number of arguments to expand in the formatted error message. */
-        pub argCount: u16,
-        /** One of the JSExnType constants above. */
-        pub exnType: i16,
-    }
-    #[test]
-    fn bindgen_test_layout_JSErrorFormatString() {
-        assert_eq!(::std::mem::size_of::<JSErrorFormatString>() , 24usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( JSErrorFormatString ) ));
-        assert_eq! (::std::mem::align_of::<JSErrorFormatString>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( JSErrorFormatString ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSErrorFormatString ) ) . name as *
-                    const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSErrorFormatString
-                    ) , "::" , stringify ! ( name ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSErrorFormatString ) ) . format as *
-                    const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSErrorFormatString
-                    ) , "::" , stringify ! ( format ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSErrorFormatString ) ) . argCount as
-                    * const _ as usize } , 16usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSErrorFormatString
-                    ) , "::" , stringify ! ( argCount ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const JSErrorFormatString ) ) . exnType as
-                    * const _ as usize } , 18usize , concat ! (
-                    "Alignment of field: " , stringify ! ( JSErrorFormatString
-                    ) , "::" , stringify ! ( exnType ) ));
-    }
-    impl Clone for JSErrorFormatString {
-        fn clone(&self) -> Self { *self }
-    }
-    pub type JSErrorCallback =
-        ::std::option::Option<unsafe extern "C" fn(userRef:
-                                                       *mut ::std::os::raw::c_void,
-                                                   errorNumber:
-                                                       ::std::os::raw::c_uint)
-                                  -> *const root::JSErrorFormatString>;
     #[repr(C)]
     #[derive(Debug)]
     pub struct JSAutoRequest {
         pub mContext: *mut root::JSContext,
         pub _mCheckNotUsedAsTemporary: root::mozilla::detail::GuardObjectNotificationReceiver,
     }
     #[test]
     fn bindgen_test_layout_JSAutoRequest() {
@@ -20714,20 +16092,18 @@ pub mod root {
         assert_eq! (unsafe {
                     & ( * ( 0 as * const JSAutoNullableCompartment ) ) .
                     _mCheckNotUsedAsTemporary as * const _ as usize } ,
                     16usize , concat ! (
                     "Alignment of field: " , stringify ! (
                     JSAutoNullableCompartment ) , "::" , stringify ! (
                     _mCheckNotUsedAsTemporary ) ));
     }
-    /**
- * Base class that implements parts shared by JSErrorReport and
- * JSErrorNotes::Note.
- */
+    /// Base class that implements parts shared by JSErrorReport and
+    /// JSErrorNotes::Note.
     #[repr(C)]
     #[derive(Debug)]
     pub struct JSErrorBase {
         pub message_: root::JS::ConstUTF8CharsZ,
         pub filename: *const ::std::os::raw::c_char,
         pub lineno: ::std::os::raw::c_uint,
         pub column: ::std::os::raw::c_uint,
         pub errorNumber: ::std::os::raw::c_uint,
@@ -20805,20 +16181,19 @@ pub mod root {
                                                 ::std::mem::size_of::<u8>());
             }
         }
         #[inline]
         pub fn new_bitfield_1(ownsMessage_: bool) -> u8 {
             ({ 0 } | ((ownsMessage_ as u8 as u8) << 0usize) & (1u64 as u8))
         }
     }
-    /**
- * Notes associated with JSErrorReport.
- */
-    #[repr(C)]
+    /// Notes associated with JSErrorReport.
+    #[repr(C)]
+    #[derive(Debug)]
     pub struct JSErrorNotes {
         pub notes_: [u64; 6usize],
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct JSErrorNotes_Note {
         pub _base: root::JSErrorBase,
     }
@@ -20859,26 +16234,16 @@ pub mod root {
                     ( "Alignment of " , stringify ! ( JSErrorNotes ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const JSErrorNotes ) ) . notes_ as * const
                     _ as usize } , 0usize , concat ! (
                     "Alignment of field: " , stringify ! ( JSErrorNotes ) ,
                     "::" , stringify ! ( notes_ ) ));
     }
     #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct nsIObjectInputStream {
-        _unused: [u8; 0],
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct nsIObjectOutputStream {
-        _unused: [u8; 0],
-    }
-    #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsISerializable {
         pub _base: root::nsISupports,
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsISerializable_COMTypeInfo {
         pub _address: u8,
@@ -20890,21 +16255,16 @@ pub mod root {
         assert_eq! (::std::mem::align_of::<nsISerializable>() , 8usize ,
                     concat ! (
                     "Alignment of " , stringify ! ( nsISerializable ) ));
     }
     impl Clone for nsISerializable {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct nsIContentSecurityPolicy {
-        _unused: [u8; 0],
-    }
-    #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsIChannel {
         pub _base: root::nsIRequest,
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsIChannel_COMTypeInfo {
         pub _address: u8,
@@ -20966,159 +16326,16 @@ pub mod root {
                    "Size of: " , stringify ! ( nsIChannel ) ));
         assert_eq! (::std::mem::align_of::<nsIChannel>() , 8usize , concat ! (
                     "Alignment of " , stringify ! ( nsIChannel ) ));
     }
     impl Clone for nsIChannel {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct nsIDocShell {
-        _unused: [u8; 0],
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct nsILoadContext {
-        _unused: [u8; 0],
-    }
-    pub type nsSecurityFlags = u32;
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsILoadInfo {
-        pub _base: root::nsISupports,
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct nsILoadInfo_COMTypeInfo {
-        pub _address: u8,
-    }
-    pub const nsILoadInfo_SEC_NORMAL: root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_NORMAL;
-    pub const nsILoadInfo_SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS;
-    pub const nsILoadInfo_SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED;
-    pub const nsILoadInfo_SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS;
-    pub const nsILoadInfo_SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL;
-    pub const nsILoadInfo_SEC_REQUIRE_CORS_DATA_INHERITS:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_REQUIRE_CORS_DATA_INHERITS;
-    pub const nsILoadInfo_SEC_COOKIES_DEFAULT: root::nsILoadInfo__bindgen_ty_1
-              =
-        nsILoadInfo__bindgen_ty_1::SEC_NORMAL;
-    pub const nsILoadInfo_SEC_COOKIES_INCLUDE: root::nsILoadInfo__bindgen_ty_1
-              =
-        nsILoadInfo__bindgen_ty_1::SEC_COOKIES_INCLUDE;
-    pub const nsILoadInfo_SEC_COOKIES_SAME_ORIGIN:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_COOKIES_SAME_ORIGIN;
-    pub const nsILoadInfo_SEC_COOKIES_OMIT: root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_COOKIES_OMIT;
-    pub const nsILoadInfo_SEC_FORCE_INHERIT_PRINCIPAL:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_FORCE_INHERIT_PRINCIPAL;
-    pub const nsILoadInfo_SEC_SANDBOXED: root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_SANDBOXED;
-    pub const nsILoadInfo_SEC_ABOUT_BLANK_INHERITS:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_ABOUT_BLANK_INHERITS;
-    pub const nsILoadInfo_SEC_ALLOW_CHROME: root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_ALLOW_CHROME;
-    pub const nsILoadInfo_SEC_DISALLOW_SCRIPT: root::nsILoadInfo__bindgen_ty_1
-              =
-        nsILoadInfo__bindgen_ty_1::SEC_DISALLOW_SCRIPT;
-    pub const nsILoadInfo_SEC_DONT_FOLLOW_REDIRECTS:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_DONT_FOLLOW_REDIRECTS;
-    pub const nsILoadInfo_SEC_LOAD_ERROR_PAGE: root::nsILoadInfo__bindgen_ty_1
-              =
-        nsILoadInfo__bindgen_ty_1::SEC_LOAD_ERROR_PAGE;
-    pub const nsILoadInfo_SEC_FORCE_INHERIT_PRINCIPAL_OVERRULE_OWNER:
-              root::nsILoadInfo__bindgen_ty_1 =
-        nsILoadInfo__bindgen_ty_1::SEC_FORCE_INHERIT_PRINCIPAL_OVERRULE_OWNER;
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsILoadInfo__bindgen_ty_1 {
-        SEC_NORMAL = 0,
-        SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS = 1,
-        SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED = 2,
-        SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS = 4,
-        SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL = 8,
-        SEC_REQUIRE_CORS_DATA_INHERITS = 16,
-        SEC_COOKIES_INCLUDE = 32,
-        SEC_COOKIES_SAME_ORIGIN = 64,
-        SEC_COOKIES_OMIT = 96,
-        SEC_FORCE_INHERIT_PRINCIPAL = 128,
-        SEC_SANDBOXED = 256,
-        SEC_ABOUT_BLANK_INHERITS = 512,
-        SEC_ALLOW_CHROME = 1024,
-        SEC_DISALLOW_SCRIPT = 2048,
-        SEC_DONT_FOLLOW_REDIRECTS = 4096,
-        SEC_LOAD_ERROR_PAGE = 8192,
-        SEC_FORCE_INHERIT_PRINCIPAL_OVERRULE_OWNER = 16384,
-    }
-    pub const nsILoadInfo_TAINTING_BASIC: root::nsILoadInfo__bindgen_ty_2 =
-        nsILoadInfo__bindgen_ty_2::TAINTING_BASIC;
-    pub const nsILoadInfo_TAINTING_CORS: root::nsILoadInfo__bindgen_ty_2 =
-        nsILoadInfo__bindgen_ty_2::TAINTING_CORS;
-    pub const nsILoadInfo_TAINTING_OPAQUE: root::nsILoadInfo__bindgen_ty_2 =
-        nsILoadInfo__bindgen_ty_2::TAINTING_OPAQUE;
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsILoadInfo__bindgen_ty_2 {
-        TAINTING_BASIC = 0,
-        TAINTING_CORS = 1,
-        TAINTING_OPAQUE = 2,
-    }
-    #[test]
-    fn bindgen_test_layout_nsILoadInfo() {
-        assert_eq!(::std::mem::size_of::<nsILoadInfo>() , 8usize , concat ! (
-                   "Size of: " , stringify ! ( nsILoadInfo ) ));
-        assert_eq! (::std::mem::align_of::<nsILoadInfo>() , 8usize , concat !
-                    ( "Alignment of " , stringify ! ( nsILoadInfo ) ));
-    }
-    impl Clone for nsILoadInfo {
-        fn clone(&self) -> Self { *self }
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy)]
-    pub struct nsIInterfaceRequestor {
-        pub _base: root::nsISupports,
-    }
-    #[repr(C)]
-    #[derive(Debug, Copy, Clone)]
-    pub struct nsIInterfaceRequestor_COMTypeInfo {
-        pub _address: u8,
-    }
-    #[test]
-    fn bindgen_test_layout_nsIInterfaceRequestor() {
-        assert_eq!(::std::me