binding uo draft
authorManish Goregaokar <manishearth@gmail.com>
Thu, 16 Mar 2017 15:14:27 -0700
changeset 500284 ba4b89328d72f39e9a95d0640e7a2638594fb92a
parent 500108 3945f2297b997d59662bdb8ac20e092363eea532
child 500285 05e7de4e82a4e6278b2f32a93cef77f8e34e8607
child 501204 a159e31af7018774d4aef650d25a24297598086c
child 501337 67118b2fda60aa05dc3a19bb9b59dad1ceab90fc
child 501391 3dfdb1bec4ed1c6be4c22375bed6c25172203a43
child 501728 8c81a7eb329139571b8a94f0a63824eeed584303
child 503178 e447f4774a1544bab99a515f2bee99af489e0f1f
child 503493 7491e4cf82d992dd31ebf516df7f9b584216db59
push id49673
push userbmo:manishearth@gmail.com
push dateFri, 17 Mar 2017 00:03:54 +0000
milestone55.0a1
binding uo MozReview-Commit-ID: 4kWIM9TvrZE
servo/components/style/gecko_bindings/bindings.rs
servo/components/style/gecko_bindings/structs_debug.rs
servo/components/style/gecko_bindings/structs_release.rs
--- a/servo/components/style/gecko_bindings/bindings.rs
+++ b/servo/components/style/gecko_bindings/bindings.rs
@@ -1,19 +1,14 @@
 /* automatically generated by rust-bindgen */
 
 pub use nsstring::{nsACString, nsAString, nsString};
 type nsACString_internal = nsACString;
 type nsAString_internal = nsAString;
 use gecko_bindings::structs::mozilla::css::URLValue;
-pub type RawServoNamespaceRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoNamespaceRule>;
-pub type RawServoNamespaceRuleBorrowedOrNull<'a> = Option<&'a RawServoNamespaceRule>;
-pub type RawServoNamespaceRuleBorrowed<'a> = &'a RawServoNamespaceRule;
-enum RawServoNamespaceRuleVoid{ }
-pub struct RawServoNamespaceRule(RawServoNamespaceRuleVoid);
 use gecko_bindings::structs::RawGeckoDocument;
 use gecko_bindings::structs::RawGeckoElement;
 use gecko_bindings::structs::RawGeckoKeyframeList;
 use gecko_bindings::structs::RawGeckoComputedKeyframeValuesList;
 use gecko_bindings::structs::RawGeckoNode;
 use gecko_bindings::structs::RawGeckoAnimationValueList;
 use gecko_bindings::structs::RawServoAnimationValue;
 use gecko_bindings::structs::RawServoDeclarationBlock;
@@ -217,16 +212,21 @@ pub type RawServoMediaListBorrowed<'a> =
 pub type RawServoMediaListBorrowedOrNull<'a> = Option<&'a RawServoMediaList>;
 enum RawServoMediaListVoid { }
 pub struct RawServoMediaList(RawServoMediaListVoid);
 pub type RawServoMediaRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoMediaRule>;
 pub type RawServoMediaRuleBorrowed<'a> = &'a RawServoMediaRule;
 pub type RawServoMediaRuleBorrowedOrNull<'a> = Option<&'a RawServoMediaRule>;
 enum RawServoMediaRuleVoid { }
 pub struct RawServoMediaRule(RawServoMediaRuleVoid);
+pub type RawServoNamespaceRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoNamespaceRule>;
+pub type RawServoNamespaceRuleBorrowed<'a> = &'a RawServoNamespaceRule;
+pub type RawServoNamespaceRuleBorrowedOrNull<'a> = Option<&'a RawServoNamespaceRule>;
+enum RawServoNamespaceRuleVoid { }
+pub struct RawServoNamespaceRule(RawServoNamespaceRuleVoid);
 pub type RawServoStyleSetOwned = ::gecko_bindings::sugar::ownership::Owned<RawServoStyleSet>;
 pub type RawServoStyleSetOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<RawServoStyleSet>;
 pub type RawServoStyleSetBorrowed<'a> = &'a RawServoStyleSet;
 pub type RawServoStyleSetBorrowedOrNull<'a> = Option<&'a RawServoStyleSet>;
 pub type RawServoStyleSetBorrowedMut<'a> = &'a mut RawServoStyleSet;
 pub type RawServoStyleSetBorrowedMutOrNull<'a> = Option<&'a mut RawServoStyleSet>;
 enum RawServoStyleSetVoid { }
 pub struct RawServoStyleSet(RawServoStyleSetVoid);
@@ -333,16 +333,22 @@ extern "C" {
 }
 extern "C" {
     pub fn Servo_MediaRule_AddRef(ptr: RawServoMediaRuleBorrowed);
 }
 extern "C" {
     pub fn Servo_MediaRule_Release(ptr: RawServoMediaRuleBorrowed);
 }
 extern "C" {
+    pub fn Servo_NamespaceRule_AddRef(ptr: RawServoNamespaceRuleBorrowed);
+}
+extern "C" {
+    pub fn Servo_NamespaceRule_Release(ptr: RawServoNamespaceRuleBorrowed);
+}
+extern "C" {
     pub fn Servo_StyleSet_Drop(ptr: RawServoStyleSetOwned);
 }
 extern "C" {
     pub fn Gecko_AddRefPrincipalArbitraryThread(aPtr:
                                                     *mut ThreadSafePrincipalHolder);
 }
 extern "C" {
     pub fn Gecko_ReleasePrincipalArbitraryThread(aPtr:
@@ -1291,37 +1297,36 @@ extern "C" {
 extern "C" {
     pub fn Servo_StyleSheet_Empty(parsing_mode: SheetParsingMode)
      -> RawServoStyleSheetStrong;
 }
 extern "C" {
     pub fn Servo_StyleSheet_FromUTF8Bytes(loader: *mut Loader,
                                           gecko_stylesheet:
                                               *mut ServoStyleSheet,
-                                          data: *const nsACString_internal,
+                                          data: *const nsACString,
                                           parsing_mode: SheetParsingMode,
-                                          base_url:
-                                              *const nsACString_internal,
+                                          base_url: *const nsACString,
                                           base: *mut ThreadSafeURIHolder,
                                           referrer: *mut ThreadSafeURIHolder,
                                           principal:
                                               *mut ThreadSafePrincipalHolder)
      -> RawServoStyleSheetStrong;
 }
 extern "C" {
     pub fn Servo_ImportRule_GetSheet(import_rule: RawServoImportRuleBorrowed)
      -> RawServoStyleSheetStrong;
 }
 extern "C" {
     pub fn Servo_StyleSheet_ClearAndUpdate(stylesheet:
                                                RawServoStyleSheetBorrowed,
                                            loader: *mut Loader,
                                            gecko_stylesheet:
                                                *mut ServoStyleSheet,
-                                           data: *const nsACString_internal,
+                                           data: *const nsACString,
                                            base: *mut ThreadSafeURIHolder,
                                            referrer: *mut ThreadSafeURIHolder,
                                            principal:
                                                *mut ThreadSafePrincipalHolder);
 }
 extern "C" {
     pub fn Servo_StyleSheet_HasRules(sheet: RawServoStyleSheetBorrowed)
      -> bool;
@@ -1365,105 +1370,112 @@ extern "C" {
     pub fn Servo_StyleSet_FlushStyleSheets(set: RawServoStyleSetBorrowed);
 }
 extern "C" {
     pub fn Servo_StyleSet_NoteStyleSheetsChanged(set:
                                                      RawServoStyleSetBorrowed);
 }
 extern "C" {
     pub fn Servo_StyleSet_FillKeyframesForName(set: RawServoStyleSetBorrowed,
-                                               property:
-                                                   *const nsACString_internal,
+                                               property: *const nsACString,
                                                timing_function:
                                                    *const nsTimingFunction,
                                                computed_values:
                                                    ServoComputedValuesBorrowed,
                                                keyframe_list:
                                                    RawGeckoKeyframeListBorrowedMut)
      -> bool;
 }
 extern "C" {
     pub fn Servo_CssRules_ListTypes(rules: ServoCssRulesBorrowed,
                                     result: nsTArrayBorrowed_uintptr_t);
 }
 extern "C" {
+    pub fn Servo_CssRules_InsertRule(rules: ServoCssRulesBorrowed,
+                                     sheet: RawServoStyleSheetBorrowed,
+                                     rule: *const nsACString, index: u32,
+                                     nested: bool, rule_type: *mut u16)
+     -> nsresult;
+}
+extern "C" {
+    pub fn Servo_CssRules_DeleteRule(rules: ServoCssRulesBorrowed, index: u32)
+     -> nsresult;
+}
+extern "C" {
     pub fn Servo_CssRules_GetStyleRuleAt(rules: ServoCssRulesBorrowed,
                                          index: u32)
      -> RawServoStyleRuleStrong;
 }
 extern "C" {
+    pub fn Servo_StyleRule_Debug(rule: RawServoStyleRuleBorrowed,
+                                 result: *mut nsACString);
+}
+extern "C" {
+    pub fn Servo_StyleRule_GetCssText(rule: RawServoStyleRuleBorrowed,
+                                      result: *mut nsAString);
+}
+extern "C" {
     pub fn Servo_CssRules_GetMediaRuleAt(rules: ServoCssRulesBorrowed,
                                          index: u32)
      -> RawServoMediaRuleStrong;
 }
 extern "C" {
+    pub fn Servo_MediaRule_Debug(rule: RawServoMediaRuleBorrowed,
+                                 result: *mut nsACString);
+}
+extern "C" {
+    pub fn Servo_MediaRule_GetCssText(rule: RawServoMediaRuleBorrowed,
+                                      result: *mut nsAString);
+}
+extern "C" {
     pub fn Servo_CssRules_GetNamespaceRuleAt(rules: ServoCssRulesBorrowed,
                                              index: u32)
      -> RawServoNamespaceRuleStrong;
 }
 extern "C" {
-    pub fn Servo_CssRules_InsertRule(rules: ServoCssRulesBorrowed,
-                                     sheet: RawServoStyleSheetBorrowed,
-                                     rule: *const nsACString_internal,
-                                     index: u32, nested: bool,
-                                     rule_type: *mut u16) -> nsresult;
+    pub fn Servo_NamespaceRule_Debug(rule: RawServoNamespaceRuleBorrowed,
+                                     result: *mut nsACString);
 }
 extern "C" {
-    pub fn Servo_CssRules_DeleteRule(rules: ServoCssRulesBorrowed, index: u32)
-     -> nsresult;
-}
-extern "C" {
-    pub fn Servo_StyleRule_Debug(rule: RawServoStyleRuleBorrowed,
-                                 result: *mut nsACString_internal);
+    pub fn Servo_NamespaceRule_GetCssText(rule: RawServoNamespaceRuleBorrowed,
+                                          result: *mut nsAString);
 }
 extern "C" {
     pub fn Servo_StyleRule_GetStyle(rule: RawServoStyleRuleBorrowed)
      -> RawServoDeclarationBlockStrong;
 }
 extern "C" {
     pub fn Servo_StyleRule_SetStyle(rule: RawServoStyleRuleBorrowed,
                                     declarations:
                                         RawServoDeclarationBlockBorrowed);
 }
 extern "C" {
-    pub fn Servo_StyleRule_GetCssText(rule: RawServoStyleRuleBorrowed,
-                                      result: *mut nsAString_internal);
-}
-extern "C" {
     pub fn Servo_StyleRule_GetSelectorText(rule: RawServoStyleRuleBorrowed,
-                                           result: *mut nsAString_internal);
-}
-extern "C" {
-    pub fn Servo_MediaRule_Debug(rule: RawServoMediaRuleBorrowed,
-                                 result: *mut nsACString_internal);
+                                           result: *mut nsAString);
 }
 extern "C" {
     pub fn Servo_MediaRule_GetMedia(rule: RawServoMediaRuleBorrowed)
      -> RawServoMediaListStrong;
 }
 extern "C" {
     pub fn Servo_MediaRule_GetRules(rule: RawServoMediaRuleBorrowed)
      -> ServoCssRulesStrong;
 }
 extern "C" {
-    pub fn Servo_MediaRule_GetCssText(rule: RawServoMediaRuleBorrowed,
-                                      result: *mut nsAString_internal);
-}
-extern "C" {
-    pub fn Servo_NamespaceRule_Debug(rule: RawServoNamespaceRuleBorrowed,
-                                     result: *mut nsACString_internal);
+    pub fn Servo_NamespaceRule_GetPrefix(rule: RawServoNamespaceRuleBorrowed)
+     -> *mut nsIAtom;
 }
 extern "C" {
-    pub fn Servo_NamespaceRule_GetCssText(rule: RawServoNamespaceRuleBorrowed,
-                                          result: *mut nsAString_internal);
+    pub fn Servo_NamespaceRule_GetURI(rule: RawServoNamespaceRuleBorrowed)
+     -> *mut nsIAtom;
 }
 extern "C" {
-    pub fn Servo_ParseProperty(property: *const nsACString_internal,
-                               value: *const nsACString_internal,
-                               base: *const nsACString_internal,
+    pub fn Servo_ParseProperty(property: *const nsACString,
+                               value: *const nsACString,
+                               base: *const nsACString,
                                data: *const GeckoParserExtraData)
      -> RawServoDeclarationBlockStrong;
 }
 extern "C" {
     pub fn Servo_GetComputedKeyframeValues(keyframes:
                                                RawGeckoKeyframeListBorrowed,
                                            style: ServoComputedValuesBorrowed,
                                            parent_style:
@@ -1484,17 +1496,17 @@ extern "C" {
     pub fn Servo_AnimationValues_Uncompute(value:
                                                RawServoAnimationValueBorrowedListBorrowed)
      -> RawServoDeclarationBlockStrong;
 }
 extern "C" {
     pub fn Servo_AnimationValue_Serialize(value:
                                               RawServoAnimationValueBorrowed,
                                           property: nsCSSPropertyID,
-                                          buffer: *mut nsAString_internal);
+                                          buffer: *mut nsAString);
 }
 extern "C" {
     pub fn Servo_AnimationValue_GetOpacity(value:
                                                RawServoAnimationValueBorrowed)
      -> f32;
 }
 extern "C" {
     pub fn Servo_AnimationValue_GetTransform(value:
@@ -1505,18 +1517,18 @@ extern "C" {
 extern "C" {
     pub fn Servo_AnimationValue_DeepEqual(arg1:
                                               RawServoAnimationValueBorrowed,
                                           arg2:
                                               RawServoAnimationValueBorrowed)
      -> bool;
 }
 extern "C" {
-    pub fn Servo_ParseStyleAttribute(data: *const nsACString_internal,
-                                     base: *const nsACString_internal,
+    pub fn Servo_ParseStyleAttribute(data: *const nsACString,
+                                     base: *const nsACString,
                                      extraData: *const GeckoParserExtraData)
      -> RawServoDeclarationBlockStrong;
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_CreateEmpty()
      -> RawServoDeclarationBlockStrong;
 }
 extern "C" {
@@ -1527,93 +1539,83 @@ extern "C" {
 extern "C" {
     pub fn Servo_DeclarationBlock_Equals(a: RawServoDeclarationBlockBorrowed,
                                          b: RawServoDeclarationBlockBorrowed)
      -> bool;
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_GetCssText(declarations:
                                                  RawServoDeclarationBlockBorrowed,
-                                             result: *mut nsAString_internal);
+                                             result: *mut nsAString);
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_SerializeOneValue(declarations:
                                                         RawServoDeclarationBlockBorrowed,
                                                     property: nsCSSPropertyID,
-                                                    buffer:
-                                                        *mut nsAString_internal);
+                                                    buffer: *mut nsAString);
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_Count(declarations:
                                             RawServoDeclarationBlockBorrowed)
      -> u32;
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_GetNthProperty(declarations:
                                                      RawServoDeclarationBlockBorrowed,
                                                  index: u32,
-                                                 result:
-                                                     *mut nsAString_internal)
+                                                 result: *mut nsAString)
      -> bool;
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_GetPropertyValue(declarations:
                                                        RawServoDeclarationBlockBorrowed,
                                                    property:
-                                                       *const nsACString_internal,
-                                                   value:
-                                                       *mut nsAString_internal);
+                                                       *const nsACString,
+                                                   value: *mut nsAString);
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_GetPropertyValueById(declarations:
                                                            RawServoDeclarationBlockBorrowed,
                                                        property:
                                                            nsCSSPropertyID,
-                                                       value:
-                                                           *mut nsAString_internal);
+                                                       value: *mut nsAString);
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_GetPropertyIsImportant(declarations:
                                                              RawServoDeclarationBlockBorrowed,
                                                          property:
-                                                             *const nsACString_internal)
+                                                             *const nsACString)
      -> bool;
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_SetProperty(declarations:
                                                   RawServoDeclarationBlockBorrowed,
-                                              property:
-                                                  *const nsACString_internal,
-                                              value:
-                                                  *const nsACString_internal,
+                                              property: *const nsACString,
+                                              value: *const nsACString,
                                               is_important: bool,
-                                              base:
-                                                  *const nsACString_internal,
+                                              base: *const nsACString,
                                               data:
                                                   *const GeckoParserExtraData)
      -> bool;
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_SetPropertyById(declarations:
                                                       RawServoDeclarationBlockBorrowed,
                                                   property: nsCSSPropertyID,
-                                                  value:
-                                                      *const nsACString_internal,
+                                                  value: *const nsACString,
                                                   is_important: bool,
-                                                  base:
-                                                      *const nsACString_internal,
+                                                  base: *const nsACString,
                                                   data:
                                                       *const GeckoParserExtraData)
      -> bool;
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_RemoveProperty(declarations:
                                                      RawServoDeclarationBlockBorrowed,
-                                                 property:
-                                                     *const nsACString_internal);
+                                                 property: *const nsACString);
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_RemovePropertyById(declarations:
                                                          RawServoDeclarationBlockBorrowed,
                                                      property:
                                                          nsCSSPropertyID);
 }
 extern "C" {
@@ -1667,57 +1669,53 @@ extern "C" {
     pub fn Servo_DeclarationBlock_SetColorValue(declarations:
                                                     RawServoDeclarationBlockBorrowed,
                                                 property: nsCSSPropertyID,
                                                 value: nscolor);
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_SetFontFamily(declarations:
                                                     RawServoDeclarationBlockBorrowed,
-                                                value:
-                                                    *const nsAString_internal);
+                                                value: *const nsAString);
 }
 extern "C" {
     pub fn Servo_DeclarationBlock_SetTextDecorationColorOverride(declarations:
                                                                      RawServoDeclarationBlockBorrowed);
 }
 extern "C" {
     pub fn Servo_MediaList_GetText(list: RawServoMediaListBorrowed,
-                                   result: *mut nsAString_internal);
+                                   result: *mut nsAString);
 }
 extern "C" {
     pub fn Servo_MediaList_SetText(list: RawServoMediaListBorrowed,
-                                   text: *const nsACString_internal);
+                                   text: *const nsACString);
 }
 extern "C" {
     pub fn Servo_MediaList_GetLength(list: RawServoMediaListBorrowed) -> u32;
 }
 extern "C" {
     pub fn Servo_MediaList_GetMediumAt(list: RawServoMediaListBorrowed,
-                                       index: u32,
-                                       result: *mut nsAString_internal)
+                                       index: u32, result: *mut nsAString)
      -> bool;
 }
 extern "C" {
     pub fn Servo_MediaList_AppendMedium(list: RawServoMediaListBorrowed,
-                                        new_medium:
-                                            *const nsACString_internal);
+                                        new_medium: *const nsACString);
 }
 extern "C" {
     pub fn Servo_MediaList_DeleteMedium(list: RawServoMediaListBorrowed,
-                                        old_medium:
-                                            *const nsACString_internal)
+                                        old_medium: *const nsACString)
      -> bool;
 }
 extern "C" {
-    pub fn Servo_CSSSupports2(name: *const nsACString_internal,
-                              value: *const nsACString_internal) -> bool;
+    pub fn Servo_CSSSupports2(name: *const nsACString,
+                              value: *const nsACString) -> bool;
 }
 extern "C" {
-    pub fn Servo_CSSSupports(cond: *const nsACString_internal) -> bool;
+    pub fn Servo_CSSSupports(cond: *const nsACString) -> bool;
 }
 extern "C" {
     pub fn Servo_ComputedValues_GetForAnonymousBox(parent_style_or_null:
                                                        ServoComputedValuesBorrowedOrNull,
                                                    pseudoTag: *mut nsIAtom,
                                                    skip_display_fixup: bool,
                                                    set:
                                                        RawServoStyleSetBorrowed)
--- a/servo/components/style/gecko_bindings/structs_debug.rs
+++ b/servo/components/style/gecko_bindings/structs_debug.rs
@@ -1439,16 +1439,202 @@ pub mod root {
             pub struct LinkedListElementTraits<T> {
                 pub _address: u8,
                 pub _phantom_0: ::std::marker::PhantomData<T>,
             }
             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, Copy)]
+            pub struct nsStringRepr {
+                pub mData: *mut root::mozilla::detail::nsStringRepr_char_type,
+                pub mLength: root::mozilla::detail::nsStringRepr_size_type,
+                pub mFlags: u32,
+            }
+            pub type nsStringRepr_fallible_t = root::mozilla::fallible_t;
+            pub type nsStringRepr_char_type = u16;
+            pub type nsStringRepr_self_type =
+                root::mozilla::detail::nsStringRepr;
+            pub type nsStringRepr_base_string_type =
+                root::mozilla::detail::nsStringRepr_self_type;
+            pub type nsStringRepr_substring_type = root::nsAString;
+            pub type nsStringRepr_substring_tuple_type =
+                root::nsSubstringTuple;
+            pub type nsStringRepr_string_type = ::nsstring::nsStringRepr;
+            pub type nsStringRepr_const_iterator =
+                root::nsReadingIterator<u16>;
+            pub type nsStringRepr_iterator = root::nsWritingIterator<u16>;
+            pub type nsStringRepr_comparator_type = root::nsStringComparator;
+            pub type nsStringRepr_char_iterator =
+                *mut root::mozilla::detail::nsStringRepr_char_type;
+            pub type nsStringRepr_const_char_iterator =
+                *const root::mozilla::detail::nsStringRepr_char_type;
+            pub type nsStringRepr_index_type = u32;
+            pub type nsStringRepr_size_type = u32;
+            pub const nsStringRepr_F_NONE:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_NONE;
+            pub const nsStringRepr_F_TERMINATED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_TERMINATED;
+            pub const nsStringRepr_F_VOIDED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_VOIDED;
+            pub const nsStringRepr_F_SHARED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_SHARED;
+            pub const nsStringRepr_F_OWNED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_OWNED;
+            pub const nsStringRepr_F_FIXED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_FIXED;
+            pub const nsStringRepr_F_LITERAL:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_LITERAL;
+            pub const nsStringRepr_F_CLASS_FIXED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_CLASS_FIXED;
+            #[repr(u32)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum nsStringRepr__bindgen_ty_1 {
+                F_NONE = 0,
+                F_TERMINATED = 1,
+                F_VOIDED = 2,
+                F_SHARED = 4,
+                F_OWNED = 8,
+                F_FIXED = 16,
+                F_LITERAL = 32,
+                F_CLASS_FIXED = 65536,
+            }
+            #[test]
+            fn bindgen_test_layout_nsStringRepr() {
+                assert_eq!(::std::mem::size_of::<nsStringRepr>() , 16usize ,
+                           concat ! (
+                           "Size of: " , stringify ! ( nsStringRepr ) ));
+                assert_eq! (::std::mem::align_of::<nsStringRepr>() , 8usize ,
+                            concat ! (
+                            "Alignment of " , stringify ! ( nsStringRepr ) ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsStringRepr ) ) . mData as *
+                            const _ as usize } , 0usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsStringRepr ) , "::" , stringify ! ( mData ) ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsStringRepr ) ) . mLength as
+                            * const _ as usize } , 8usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsStringRepr ) , "::" , stringify ! ( mLength )
+                            ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsStringRepr ) ) . mFlags as
+                            * const _ as usize } , 12usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsStringRepr ) , "::" , stringify ! ( mFlags ) ));
+            }
+            impl Clone for nsStringRepr {
+                fn clone(&self) -> Self { *self }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct nsCStringRepr {
+                pub mData: *mut root::mozilla::detail::nsCStringRepr_char_type,
+                pub mLength: root::mozilla::detail::nsCStringRepr_size_type,
+                pub mFlags: u32,
+            }
+            pub type nsCStringRepr_fallible_t = root::mozilla::fallible_t;
+            pub type nsCStringRepr_char_type = ::std::os::raw::c_char;
+            pub type nsCStringRepr_self_type =
+                root::mozilla::detail::nsCStringRepr;
+            pub type nsCStringRepr_base_string_type =
+                root::mozilla::detail::nsCStringRepr_self_type;
+            pub type nsCStringRepr_substring_type = root::nsACString;
+            pub type nsCStringRepr_substring_tuple_type =
+                root::nsCSubstringTuple;
+            pub type nsCStringRepr_string_type = root::nsCString;
+            pub type nsCStringRepr_const_iterator =
+                root::nsReadingIterator<::std::os::raw::c_char>;
+            pub type nsCStringRepr_iterator =
+                root::nsWritingIterator<::std::os::raw::c_char>;
+            pub type nsCStringRepr_comparator_type =
+                root::nsCStringComparator;
+            pub type nsCStringRepr_char_iterator =
+                *mut root::mozilla::detail::nsCStringRepr_char_type;
+            pub type nsCStringRepr_const_char_iterator =
+                *const root::mozilla::detail::nsCStringRepr_char_type;
+            pub type nsCStringRepr_index_type = u32;
+            pub type nsCStringRepr_size_type = u32;
+            pub const nsCStringRepr_F_NONE:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_NONE;
+            pub const nsCStringRepr_F_TERMINATED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_TERMINATED;
+            pub const nsCStringRepr_F_VOIDED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_VOIDED;
+            pub const nsCStringRepr_F_SHARED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_SHARED;
+            pub const nsCStringRepr_F_OWNED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_OWNED;
+            pub const nsCStringRepr_F_FIXED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_FIXED;
+            pub const nsCStringRepr_F_LITERAL:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_LITERAL;
+            pub const nsCStringRepr_F_CLASS_FIXED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_CLASS_FIXED;
+            #[repr(u32)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum nsCStringRepr__bindgen_ty_1 {
+                F_NONE = 0,
+                F_TERMINATED = 1,
+                F_VOIDED = 2,
+                F_SHARED = 4,
+                F_OWNED = 8,
+                F_FIXED = 16,
+                F_LITERAL = 32,
+                F_CLASS_FIXED = 65536,
+            }
+            #[test]
+            fn bindgen_test_layout_nsCStringRepr() {
+                assert_eq!(::std::mem::size_of::<nsCStringRepr>() , 16usize ,
+                           concat ! (
+                           "Size of: " , stringify ! ( nsCStringRepr ) ));
+                assert_eq! (::std::mem::align_of::<nsCStringRepr>() , 8usize ,
+                            concat ! (
+                            "Alignment of " , stringify ! ( nsCStringRepr )
+                            ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsCStringRepr ) ) . mData as
+                            * const _ as usize } , 0usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsCStringRepr ) , "::" , stringify ! ( mData ) ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsCStringRepr ) ) . mLength
+                            as * const _ as usize } , 8usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsCStringRepr ) , "::" , stringify ! ( mLength )
+                            ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsCStringRepr ) ) . mFlags as
+                            * const _ as usize } , 12usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsCStringRepr ) , "::" , stringify ! ( mFlags )
+                            ));
+            }
+            impl Clone for nsCStringRepr {
+                fn clone(&self) -> Self { *self }
+            }
         }
         pub type MallocSizeOf =
             ::std::option::Option<unsafe extern "C" fn(p:
                                                            *const ::std::os::raw::c_void)
                                       -> ::std::os::raw::c_ulong>;
         #[repr(C)]
         #[derive(Debug)]
         pub struct OwningNonNull<T> {
@@ -1986,20 +2172,20 @@ pub mod root {
                                ));
                     assert_eq! (::std::mem::align_of::<FastErrorResult>() ,
                                 8usize , concat ! (
                                 "Alignment of " , stringify ! (
                                 FastErrorResult ) ));
                 }
                 #[repr(C)]
                 pub struct FakeString {
-                    pub mData: *mut root::nsAString_internal_char_type,
-                    pub mLength: root::nsAString_internal_size_type,
+                    pub mData: *mut root::mozilla::detail::nsStringRepr_char_type,
+                    pub mLength: root::mozilla::detail::nsStringRepr_size_type,
                     pub mFlags: u32,
-                    pub mInlineStorage: [root::nsAString_internal_char_type; 64usize],
+                    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() {
@@ -2944,17 +3130,17 @@ pub mod root {
             }
             #[repr(C)]
             #[derive(Debug)]
             pub struct NodeInfo_NodeInfoInner {
                 pub mName: root::nsCOMPtr<root::nsIAtom>,
                 pub mPrefix: root::nsCOMPtr<root::nsIAtom>,
                 pub mNamespaceID: i32,
                 pub mNodeType: u16,
-                pub mNameString: *const root::nsAString_internal,
+                pub mNameString: *const root::nsAString,
                 pub mExtraName: root::nsCOMPtr<root::nsIAtom>,
             }
             #[test]
             fn bindgen_test_layout_NodeInfo_NodeInfoInner() {
                 assert_eq!(::std::mem::size_of::<NodeInfo_NodeInfoInner>() ,
                            40usize , concat ! (
                            "Size of: " , stringify ! ( NodeInfo_NodeInfoInner
                            ) ));
@@ -4108,16 +4294,17 @@ pub mod root {
                 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>,
                 pub mBoundingClientRect: root::RefPtr<root::mozilla::dom::DOMRect>,
                 pub mIntersectionRect: root::RefPtr<root::mozilla::dom::DOMRect>,
+                pub mIsIntersecting: bool,
                 pub mTarget: root::RefPtr<root::mozilla::dom::Element>,
                 pub mIntersectionRatio: f64,
             }
             pub type DOMIntersectionObserverEntry_HasThreadSafeRefCnt =
                 root::mozilla::FalseType;
             #[repr(C)]
             #[derive(Debug, Copy)]
             pub struct DOMIntersectionObserverEntry_cycleCollection {
@@ -4142,17 +4329,17 @@ pub mod root {
                       "_ZN7mozilla3dom28DOMIntersectionObserverEntry21_cycleCollectorGlobalE"]
                 pub static mut
                            DOMIntersectionObserverEntry__cycleCollectorGlobal:
                            root::mozilla::dom::DOMIntersectionObserverEntry_cycleCollection;
             }
             #[test]
             fn bindgen_test_layout_DOMIntersectionObserverEntry() {
                 assert_eq!(::std::mem::size_of::<DOMIntersectionObserverEntry>()
-                           , 104usize , concat ! (
+                           , 112usize , concat ! (
                            "Size of: " , stringify ! (
                            DOMIntersectionObserverEntry ) ));
                 assert_eq! (::std::mem::align_of::<DOMIntersectionObserverEntry>()
                             , 8usize , concat ! (
                             "Alignment of " , stringify ! (
                             DOMIntersectionObserverEntry ) ));
             }
             #[repr(C)]
@@ -9798,114 +9985,43 @@ 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,
     }
-    #[repr(C)]
-    #[derive(Debug)]
-    pub struct nsAString_internal {
-        pub mData: *mut root::nsAString_internal_char_type,
-        pub mLength: root::nsAString_internal_size_type,
-        pub mFlags: u32,
-    }
-    pub type nsAString_internal_fallible_t = root::mozilla::fallible_t;
-    pub type nsAString_internal_char_type = u16;
-    pub type nsAString_internal_self_type = root::nsAString_internal;
-    pub type nsAString_internal_abstract_string_type =
-        root::nsAString_internal_self_type;
-    pub type nsAString_internal_base_string_type =
-        root::nsAString_internal_self_type;
-    pub type nsAString_internal_substring_type =
-        root::nsAString_internal_self_type;
-    pub type nsAString_internal_substring_tuple_type = root::nsSubstringTuple;
-    pub type nsAString_internal_string_type = ::nsstring::nsStringRepr;
-    pub type nsAString_internal_const_iterator = root::nsReadingIterator<u16>;
-    pub type nsAString_internal_iterator = root::nsWritingIterator<u16>;
-    pub type nsAString_internal_comparator_type = root::nsStringComparator;
-    pub type nsAString_internal_char_iterator =
-        *mut root::nsAString_internal_char_type;
-    pub type nsAString_internal_const_char_iterator =
-        *const root::nsAString_internal_char_type;
-    pub type nsAString_internal_size_type = u32;
-    pub type nsAString_internal_index_type = u32;
-    pub const nsAString_internal_F_NONE:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_NONE;
-    pub const nsAString_internal_F_TERMINATED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_TERMINATED;
-    pub const nsAString_internal_F_VOIDED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_VOIDED;
-    pub const nsAString_internal_F_SHARED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_SHARED;
-    pub const nsAString_internal_F_OWNED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_OWNED;
-    pub const nsAString_internal_F_FIXED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_FIXED;
-    pub const nsAString_internal_F_LITERAL:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_LITERAL;
-    pub const nsAString_internal_F_CLASS_FIXED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_CLASS_FIXED;
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsAString_internal__bindgen_ty_1 {
-        F_NONE = 0,
-        F_TERMINATED = 1,
-        F_VOIDED = 2,
-        F_SHARED = 4,
-        F_OWNED = 8,
-        F_FIXED = 16,
-        F_LITERAL = 32,
-        F_CLASS_FIXED = 65536,
-    }
-    #[test]
-    fn bindgen_test_layout_nsAString_internal() {
-        assert_eq!(::std::mem::size_of::<nsAString_internal>() , 16usize ,
-                   concat ! ( "Size of: " , stringify ! ( nsAString_internal )
-                   ));
-        assert_eq! (::std::mem::align_of::<nsAString_internal>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsAString_internal ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsAString_internal ) ) . mData as *
-                    const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsAString_internal
-                    ) , "::" , stringify ! ( mData ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsAString_internal ) ) . mLength as *
-                    const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsAString_internal
-                    ) , "::" , stringify ! ( mLength ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsAString_internal ) ) . mFlags as *
-                    const _ as usize } , 12usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsAString_internal
-                    ) , "::" , stringify ! ( mFlags ) ));
+    /**
+ * double-byte (char16_t) string types
+ */
+    #[repr(C)]
+    #[derive(Debug)]
+    pub struct nsAString {
+        pub _base: root::mozilla::detail::nsStringRepr,
+    }
+    pub type nsAString_self_type = root::nsAString;
+    #[test]
+    fn bindgen_test_layout_nsAString() {
+        assert_eq!(::std::mem::size_of::<nsAString>() , 16usize , concat ! (
+                   "Size of: " , stringify ! ( nsAString ) ));
+        assert_eq! (::std::mem::align_of::<nsAString>() , 8usize , concat ! (
+                    "Alignment of " , stringify ! ( nsAString ) ));
     }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsSubstringTuple {
         pub mHead: *const root::nsSubstringTuple_self_type,
         pub mFragA: *const root::nsSubstringTuple_base_string_type,
         pub mFragB: *const root::nsSubstringTuple_base_string_type,
     }
     pub type nsSubstringTuple_char_type = u16;
     pub type nsSubstringTuple_self_type = root::nsSubstringTuple;
-    pub type nsSubstringTuple_substring_type = root::nsAString_internal;
-    pub type nsSubstringTuple_base_string_type = root::nsAString_internal;
+    pub type nsSubstringTuple_base_string_type =
+        root::mozilla::detail::nsStringRepr;
     pub type nsSubstringTuple_size_type = u32;
     #[test]
     fn bindgen_test_layout_nsSubstringTuple() {
         assert_eq!(::std::mem::size_of::<nsSubstringTuple>() , 24usize ,
                    concat ! ( "Size of: " , stringify ! ( nsSubstringTuple )
                    ));
         assert_eq! (::std::mem::align_of::<nsSubstringTuple>() , 8usize ,
                     concat ! (
@@ -9927,17 +10043,17 @@ pub mod root {
                     , "::" , stringify ! ( mFragB ) ));
     }
     impl Clone for nsSubstringTuple {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
     pub struct nsAutoString {
         pub _base: root::nsFixedString,
-        pub mStorage: [root::nsAString_internal_char_type; 64usize],
+        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 =
         nsAutoString__bindgen_ty_1::kDefaultStorageSize;
     #[repr(u32)]
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsAutoString__bindgen_ty_1 { kDefaultStorageSize = 64, }
@@ -9951,17 +10067,17 @@ pub mod root {
                     & ( * ( 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_internal,
+        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 ,
@@ -9984,117 +10100,43 @@ pub mod root {
                    ));
         assert_eq! (::std::mem::align_of::<nsStringComparator>() , 8usize ,
                     concat ! (
                     "Alignment of " , stringify ! ( nsStringComparator ) ));
     }
     impl Clone for nsStringComparator {
         fn clone(&self) -> Self { *self }
     }
-    #[repr(C)]
-    #[derive(Debug)]
-    pub struct nsACString_internal {
-        pub mData: *mut root::nsACString_internal_char_type,
-        pub mLength: root::nsACString_internal_size_type,
-        pub mFlags: u32,
-    }
-    pub type nsACString_internal_fallible_t = root::mozilla::fallible_t;
-    pub type nsACString_internal_char_type = ::std::os::raw::c_char;
-    pub type nsACString_internal_self_type = root::nsACString_internal;
-    pub type nsACString_internal_abstract_string_type =
-        root::nsACString_internal_self_type;
-    pub type nsACString_internal_base_string_type =
-        root::nsACString_internal_self_type;
-    pub type nsACString_internal_substring_type =
-        root::nsACString_internal_self_type;
-    pub type nsACString_internal_substring_tuple_type =
-        root::nsCSubstringTuple;
-    pub type nsACString_internal_string_type = root::nsCString;
-    pub type nsACString_internal_const_iterator =
-        root::nsReadingIterator<::std::os::raw::c_char>;
-    pub type nsACString_internal_iterator =
-        root::nsWritingIterator<::std::os::raw::c_char>;
-    pub type nsACString_internal_comparator_type = root::nsCStringComparator;
-    pub type nsACString_internal_char_iterator =
-        *mut root::nsACString_internal_char_type;
-    pub type nsACString_internal_const_char_iterator =
-        *const root::nsACString_internal_char_type;
-    pub type nsACString_internal_size_type = u32;
-    pub type nsACString_internal_index_type = u32;
-    pub const nsACString_internal_F_NONE:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_NONE;
-    pub const nsACString_internal_F_TERMINATED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_TERMINATED;
-    pub const nsACString_internal_F_VOIDED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_VOIDED;
-    pub const nsACString_internal_F_SHARED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_SHARED;
-    pub const nsACString_internal_F_OWNED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_OWNED;
-    pub const nsACString_internal_F_FIXED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_FIXED;
-    pub const nsACString_internal_F_LITERAL:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_LITERAL;
-    pub const nsACString_internal_F_CLASS_FIXED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_CLASS_FIXED;
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsACString_internal__bindgen_ty_1 {
-        F_NONE = 0,
-        F_TERMINATED = 1,
-        F_VOIDED = 2,
-        F_SHARED = 4,
-        F_OWNED = 8,
-        F_FIXED = 16,
-        F_LITERAL = 32,
-        F_CLASS_FIXED = 65536,
-    }
-    #[test]
-    fn bindgen_test_layout_nsACString_internal() {
-        assert_eq!(::std::mem::size_of::<nsACString_internal>() , 16usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( nsACString_internal ) ));
-        assert_eq! (::std::mem::align_of::<nsACString_internal>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsACString_internal ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsACString_internal ) ) . mData as *
-                    const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsACString_internal
-                    ) , "::" , stringify ! ( mData ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsACString_internal ) ) . mLength as
-                    * const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsACString_internal
-                    ) , "::" , stringify ! ( mLength ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsACString_internal ) ) . mFlags as *
-                    const _ as usize } , 12usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsACString_internal
-                    ) , "::" , stringify ! ( mFlags ) ));
+    /**
+ * single-byte (char) string types
+ */
+    #[repr(C)]
+    #[derive(Debug)]
+    pub struct nsACString {
+        pub _base: root::mozilla::detail::nsCStringRepr,
+    }
+    pub type nsACString_self_type = root::nsACString;
+    #[test]
+    fn bindgen_test_layout_nsACString() {
+        assert_eq!(::std::mem::size_of::<nsACString>() , 16usize , concat ! (
+                   "Size of: " , stringify ! ( nsACString ) ));
+        assert_eq! (::std::mem::align_of::<nsACString>() , 8usize , concat ! (
+                    "Alignment of " , stringify ! ( nsACString ) ));
     }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsCSubstringTuple {
         pub mHead: *const root::nsCSubstringTuple_self_type,
         pub mFragA: *const root::nsCSubstringTuple_base_string_type,
         pub mFragB: *const root::nsCSubstringTuple_base_string_type,
     }
     pub type nsCSubstringTuple_char_type = ::std::os::raw::c_char;
     pub type nsCSubstringTuple_self_type = root::nsCSubstringTuple;
-    pub type nsCSubstringTuple_substring_type = root::nsACString_internal;
-    pub type nsCSubstringTuple_base_string_type = root::nsACString_internal;
+    pub type nsCSubstringTuple_base_string_type =
+        root::mozilla::detail::nsCStringRepr;
     pub type nsCSubstringTuple_size_type = u32;
     #[test]
     fn bindgen_test_layout_nsCSubstringTuple() {
         assert_eq!(::std::mem::size_of::<nsCSubstringTuple>() , 24usize ,
                    concat ! ( "Size of: " , stringify ! ( nsCSubstringTuple )
                    ));
         assert_eq! (::std::mem::align_of::<nsCSubstringTuple>() , 8usize ,
                     concat ! (
@@ -10116,17 +10158,17 @@ pub mod root {
                     , "::" , stringify ! ( mFragB ) ));
     }
     impl Clone for nsCSubstringTuple {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsCString {
-        pub _base: root::nsACString_internal,
+        pub _base: root::nsACString,
     }
     pub type nsCString_self_type = root::nsCString;
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsCString_Segment {
         pub mBegin: u32,
         pub mLength: u32,
     }
@@ -10157,17 +10199,17 @@ pub mod root {
         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_internal,
+        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 ,
@@ -10194,17 +10236,17 @@ pub mod root {
                     "Alignment of " , stringify ! ( nsCStringComparator ) ));
     }
     impl Clone for nsCStringComparator {
         fn clone(&self) -> Self { *self }
     }
     /**
  * typedefs for backwards compatibility
  */
-    pub type nsSubstring = root::nsAString_internal;
+    pub type nsSubstring = root::nsAString;
     pub type nsAFlatCString = root::nsCString;
     #[repr(C)]
     pub struct nsISupports__bindgen_vtable {
     }
     /**
  * 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
@@ -10330,26 +10372,26 @@ pub mod root {
     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; 0usize];
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsSubstringSplitter {
-        pub mStr: *const root::nsAString_internal,
+        pub mStr: *const root::nsAString,
         pub mArray: root::mozilla::UniquePtr<[root::nsDependentSubstring; 0usize],
                                              root::mozilla::DefaultDelete<[root::nsDependentSubstring; 0usize]>>,
         pub mArraySize: root::nsSubstringSplitter_size_type,
         pub mDelim: root::nsSubstringSplitter_char_type,
     }
     pub type nsSubstringSplitter_size_type =
-        root::nsAString_internal_size_type;
+        root::mozilla::detail::nsStringRepr_size_type;
     pub type nsSubstringSplitter_char_type =
-        root::nsAString_internal_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() {
@@ -10408,26 +10450,26 @@ pub mod root {
                     & ( * ( 0 as * const nsSubstringSplitter ) ) . mDelim as *
                     const _ as usize } , 20usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsSubstringSplitter
                     ) , "::" , stringify ! ( mDelim ) ));
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsCSubstringSplitter {
-        pub mStr: *const root::nsACString_internal,
+        pub mStr: *const root::nsACString,
         pub mArray: root::mozilla::UniquePtr<[root::nsDependentCSubstring; 0usize],
                                              root::mozilla::DefaultDelete<[root::nsDependentCSubstring; 0usize]>>,
         pub mArraySize: root::nsCSubstringSplitter_size_type,
         pub mDelim: root::nsCSubstringSplitter_char_type,
     }
     pub type nsCSubstringSplitter_size_type =
-        root::nsACString_internal_size_type;
+        root::mozilla::detail::nsCStringRepr_size_type;
     pub type nsCSubstringSplitter_char_type =
-        root::nsACString_internal_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() {
@@ -10488,18 +10530,18 @@ pub mod root {
                     * const _ as usize } , 20usize , concat ! (
                     "Alignment of field: " , stringify ! (
                     nsCSubstringSplitter ) , "::" , stringify ! ( mDelim ) ));
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsFixedString {
         pub _base: ::nsstring::nsStringRepr,
-        pub mFixedCapacity: root::nsAString_internal_size_type,
-        pub mFixedBuf: *mut root::nsAString_internal_char_type,
+        pub mFixedCapacity: root::mozilla::detail::nsStringRepr_size_type,
+        pub mFixedBuf: *mut root::mozilla::detail::nsStringRepr_char_type,
     }
     pub type nsFixedString_self_type = root::nsFixedString;
     pub type nsFixedString_fixed_string_type = root::nsFixedString;
     #[test]
     fn bindgen_test_layout_nsFixedString() {
         assert_eq!(::std::mem::size_of::<nsFixedString>() , 32usize , concat !
                    ( "Size of: " , stringify ! ( nsFixedString ) ));
         assert_eq! (::std::mem::align_of::<nsFixedString>() , 8usize , concat
--- a/servo/components/style/gecko_bindings/structs_release.rs
+++ b/servo/components/style/gecko_bindings/structs_release.rs
@@ -1439,16 +1439,202 @@ pub mod root {
             pub struct LinkedListElementTraits<T> {
                 pub _address: u8,
                 pub _phantom_0: ::std::marker::PhantomData<T>,
             }
             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, Copy)]
+            pub struct nsStringRepr {
+                pub mData: *mut root::mozilla::detail::nsStringRepr_char_type,
+                pub mLength: root::mozilla::detail::nsStringRepr_size_type,
+                pub mFlags: u32,
+            }
+            pub type nsStringRepr_fallible_t = root::mozilla::fallible_t;
+            pub type nsStringRepr_char_type = u16;
+            pub type nsStringRepr_self_type =
+                root::mozilla::detail::nsStringRepr;
+            pub type nsStringRepr_base_string_type =
+                root::mozilla::detail::nsStringRepr_self_type;
+            pub type nsStringRepr_substring_type = root::nsAString;
+            pub type nsStringRepr_substring_tuple_type =
+                root::nsSubstringTuple;
+            pub type nsStringRepr_string_type = ::nsstring::nsStringRepr;
+            pub type nsStringRepr_const_iterator =
+                root::nsReadingIterator<u16>;
+            pub type nsStringRepr_iterator = root::nsWritingIterator<u16>;
+            pub type nsStringRepr_comparator_type = root::nsStringComparator;
+            pub type nsStringRepr_char_iterator =
+                *mut root::mozilla::detail::nsStringRepr_char_type;
+            pub type nsStringRepr_const_char_iterator =
+                *const root::mozilla::detail::nsStringRepr_char_type;
+            pub type nsStringRepr_index_type = u32;
+            pub type nsStringRepr_size_type = u32;
+            pub const nsStringRepr_F_NONE:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_NONE;
+            pub const nsStringRepr_F_TERMINATED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_TERMINATED;
+            pub const nsStringRepr_F_VOIDED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_VOIDED;
+            pub const nsStringRepr_F_SHARED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_SHARED;
+            pub const nsStringRepr_F_OWNED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_OWNED;
+            pub const nsStringRepr_F_FIXED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_FIXED;
+            pub const nsStringRepr_F_LITERAL:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_LITERAL;
+            pub const nsStringRepr_F_CLASS_FIXED:
+                      root::mozilla::detail::nsStringRepr__bindgen_ty_1 =
+                nsStringRepr__bindgen_ty_1::F_CLASS_FIXED;
+            #[repr(u32)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum nsStringRepr__bindgen_ty_1 {
+                F_NONE = 0,
+                F_TERMINATED = 1,
+                F_VOIDED = 2,
+                F_SHARED = 4,
+                F_OWNED = 8,
+                F_FIXED = 16,
+                F_LITERAL = 32,
+                F_CLASS_FIXED = 65536,
+            }
+            #[test]
+            fn bindgen_test_layout_nsStringRepr() {
+                assert_eq!(::std::mem::size_of::<nsStringRepr>() , 16usize ,
+                           concat ! (
+                           "Size of: " , stringify ! ( nsStringRepr ) ));
+                assert_eq! (::std::mem::align_of::<nsStringRepr>() , 8usize ,
+                            concat ! (
+                            "Alignment of " , stringify ! ( nsStringRepr ) ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsStringRepr ) ) . mData as *
+                            const _ as usize } , 0usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsStringRepr ) , "::" , stringify ! ( mData ) ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsStringRepr ) ) . mLength as
+                            * const _ as usize } , 8usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsStringRepr ) , "::" , stringify ! ( mLength )
+                            ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsStringRepr ) ) . mFlags as
+                            * const _ as usize } , 12usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsStringRepr ) , "::" , stringify ! ( mFlags ) ));
+            }
+            impl Clone for nsStringRepr {
+                fn clone(&self) -> Self { *self }
+            }
+            #[repr(C)]
+            #[derive(Debug, Copy)]
+            pub struct nsCStringRepr {
+                pub mData: *mut root::mozilla::detail::nsCStringRepr_char_type,
+                pub mLength: root::mozilla::detail::nsCStringRepr_size_type,
+                pub mFlags: u32,
+            }
+            pub type nsCStringRepr_fallible_t = root::mozilla::fallible_t;
+            pub type nsCStringRepr_char_type = ::std::os::raw::c_char;
+            pub type nsCStringRepr_self_type =
+                root::mozilla::detail::nsCStringRepr;
+            pub type nsCStringRepr_base_string_type =
+                root::mozilla::detail::nsCStringRepr_self_type;
+            pub type nsCStringRepr_substring_type = root::nsACString;
+            pub type nsCStringRepr_substring_tuple_type =
+                root::nsCSubstringTuple;
+            pub type nsCStringRepr_string_type = root::nsCString;
+            pub type nsCStringRepr_const_iterator =
+                root::nsReadingIterator<::std::os::raw::c_char>;
+            pub type nsCStringRepr_iterator =
+                root::nsWritingIterator<::std::os::raw::c_char>;
+            pub type nsCStringRepr_comparator_type =
+                root::nsCStringComparator;
+            pub type nsCStringRepr_char_iterator =
+                *mut root::mozilla::detail::nsCStringRepr_char_type;
+            pub type nsCStringRepr_const_char_iterator =
+                *const root::mozilla::detail::nsCStringRepr_char_type;
+            pub type nsCStringRepr_index_type = u32;
+            pub type nsCStringRepr_size_type = u32;
+            pub const nsCStringRepr_F_NONE:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_NONE;
+            pub const nsCStringRepr_F_TERMINATED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_TERMINATED;
+            pub const nsCStringRepr_F_VOIDED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_VOIDED;
+            pub const nsCStringRepr_F_SHARED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_SHARED;
+            pub const nsCStringRepr_F_OWNED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_OWNED;
+            pub const nsCStringRepr_F_FIXED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_FIXED;
+            pub const nsCStringRepr_F_LITERAL:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_LITERAL;
+            pub const nsCStringRepr_F_CLASS_FIXED:
+                      root::mozilla::detail::nsCStringRepr__bindgen_ty_1 =
+                nsCStringRepr__bindgen_ty_1::F_CLASS_FIXED;
+            #[repr(u32)]
+            #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+            pub enum nsCStringRepr__bindgen_ty_1 {
+                F_NONE = 0,
+                F_TERMINATED = 1,
+                F_VOIDED = 2,
+                F_SHARED = 4,
+                F_OWNED = 8,
+                F_FIXED = 16,
+                F_LITERAL = 32,
+                F_CLASS_FIXED = 65536,
+            }
+            #[test]
+            fn bindgen_test_layout_nsCStringRepr() {
+                assert_eq!(::std::mem::size_of::<nsCStringRepr>() , 16usize ,
+                           concat ! (
+                           "Size of: " , stringify ! ( nsCStringRepr ) ));
+                assert_eq! (::std::mem::align_of::<nsCStringRepr>() , 8usize ,
+                            concat ! (
+                            "Alignment of " , stringify ! ( nsCStringRepr )
+                            ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsCStringRepr ) ) . mData as
+                            * const _ as usize } , 0usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsCStringRepr ) , "::" , stringify ! ( mData ) ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsCStringRepr ) ) . mLength
+                            as * const _ as usize } , 8usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsCStringRepr ) , "::" , stringify ! ( mLength )
+                            ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const nsCStringRepr ) ) . mFlags as
+                            * const _ as usize } , 12usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            nsCStringRepr ) , "::" , stringify ! ( mFlags )
+                            ));
+            }
+            impl Clone for nsCStringRepr {
+                fn clone(&self) -> Self { *self }
+            }
         }
         pub type MallocSizeOf =
             ::std::option::Option<unsafe extern "C" fn(p:
                                                            *const ::std::os::raw::c_void)
                                       -> ::std::os::raw::c_ulong>;
         #[repr(C)]
         #[derive(Debug)]
         pub struct OwningNonNull<T> {
@@ -1985,20 +2171,20 @@ pub mod root {
                                ));
                     assert_eq! (::std::mem::align_of::<FastErrorResult>() ,
                                 8usize , concat ! (
                                 "Alignment of " , stringify ! (
                                 FastErrorResult ) ));
                 }
                 #[repr(C)]
                 pub struct FakeString {
-                    pub mData: *mut root::nsAString_internal_char_type,
-                    pub mLength: root::nsAString_internal_size_type,
+                    pub mData: *mut root::mozilla::detail::nsStringRepr_char_type,
+                    pub mLength: root::mozilla::detail::nsStringRepr_size_type,
                     pub mFlags: u32,
-                    pub mInlineStorage: [root::nsAString_internal_char_type; 64usize],
+                    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() {
@@ -2933,17 +3119,17 @@ pub mod root {
             }
             #[repr(C)]
             #[derive(Debug)]
             pub struct NodeInfo_NodeInfoInner {
                 pub mName: root::nsCOMPtr<root::nsIAtom>,
                 pub mPrefix: root::nsCOMPtr<root::nsIAtom>,
                 pub mNamespaceID: i32,
                 pub mNodeType: u16,
-                pub mNameString: *const root::nsAString_internal,
+                pub mNameString: *const root::nsAString,
                 pub mExtraName: root::nsCOMPtr<root::nsIAtom>,
             }
             #[test]
             fn bindgen_test_layout_NodeInfo_NodeInfoInner() {
                 assert_eq!(::std::mem::size_of::<NodeInfo_NodeInfoInner>() ,
                            40usize , concat ! (
                            "Size of: " , stringify ! ( NodeInfo_NodeInfoInner
                            ) ));
@@ -4079,16 +4265,17 @@ pub mod root {
                 pub _base: root::nsISupports,
                 pub _base_1: root::nsWrapperCache,
                 pub mRefCnt: root::nsCycleCollectingAutoRefCnt,
                 pub mOwner: root::nsCOMPtr<root::nsISupports>,
                 pub mTime: root::DOMHighResTimeStamp,
                 pub mRootBounds: root::RefPtr<root::mozilla::dom::DOMRect>,
                 pub mBoundingClientRect: root::RefPtr<root::mozilla::dom::DOMRect>,
                 pub mIntersectionRect: root::RefPtr<root::mozilla::dom::DOMRect>,
+                pub mIsIntersecting: bool,
                 pub mTarget: root::RefPtr<root::mozilla::dom::Element>,
                 pub mIntersectionRatio: f64,
             }
             pub type DOMIntersectionObserverEntry_HasThreadSafeRefCnt =
                 root::mozilla::FalseType;
             #[repr(C)]
             #[derive(Debug, Copy)]
             pub struct DOMIntersectionObserverEntry_cycleCollection {
@@ -4113,17 +4300,17 @@ pub mod root {
                       "_ZN7mozilla3dom28DOMIntersectionObserverEntry21_cycleCollectorGlobalE"]
                 pub static mut
                            DOMIntersectionObserverEntry__cycleCollectorGlobal:
                            root::mozilla::dom::DOMIntersectionObserverEntry_cycleCollection;
             }
             #[test]
             fn bindgen_test_layout_DOMIntersectionObserverEntry() {
                 assert_eq!(::std::mem::size_of::<DOMIntersectionObserverEntry>()
-                           , 96usize , concat ! (
+                           , 104usize , concat ! (
                            "Size of: " , stringify ! (
                            DOMIntersectionObserverEntry ) ));
                 assert_eq! (::std::mem::align_of::<DOMIntersectionObserverEntry>()
                             , 8usize , concat ! (
                             "Alignment of " , stringify ! (
                             DOMIntersectionObserverEntry ) ));
             }
             #[repr(C)]
@@ -9417,114 +9604,43 @@ 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,
     }
-    #[repr(C)]
-    #[derive(Debug)]
-    pub struct nsAString_internal {
-        pub mData: *mut root::nsAString_internal_char_type,
-        pub mLength: root::nsAString_internal_size_type,
-        pub mFlags: u32,
-    }
-    pub type nsAString_internal_fallible_t = root::mozilla::fallible_t;
-    pub type nsAString_internal_char_type = u16;
-    pub type nsAString_internal_self_type = root::nsAString_internal;
-    pub type nsAString_internal_abstract_string_type =
-        root::nsAString_internal_self_type;
-    pub type nsAString_internal_base_string_type =
-        root::nsAString_internal_self_type;
-    pub type nsAString_internal_substring_type =
-        root::nsAString_internal_self_type;
-    pub type nsAString_internal_substring_tuple_type = root::nsSubstringTuple;
-    pub type nsAString_internal_string_type = ::nsstring::nsStringRepr;
-    pub type nsAString_internal_const_iterator = root::nsReadingIterator<u16>;
-    pub type nsAString_internal_iterator = root::nsWritingIterator<u16>;
-    pub type nsAString_internal_comparator_type = root::nsStringComparator;
-    pub type nsAString_internal_char_iterator =
-        *mut root::nsAString_internal_char_type;
-    pub type nsAString_internal_const_char_iterator =
-        *const root::nsAString_internal_char_type;
-    pub type nsAString_internal_size_type = u32;
-    pub type nsAString_internal_index_type = u32;
-    pub const nsAString_internal_F_NONE:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_NONE;
-    pub const nsAString_internal_F_TERMINATED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_TERMINATED;
-    pub const nsAString_internal_F_VOIDED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_VOIDED;
-    pub const nsAString_internal_F_SHARED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_SHARED;
-    pub const nsAString_internal_F_OWNED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_OWNED;
-    pub const nsAString_internal_F_FIXED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_FIXED;
-    pub const nsAString_internal_F_LITERAL:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_LITERAL;
-    pub const nsAString_internal_F_CLASS_FIXED:
-              root::nsAString_internal__bindgen_ty_1 =
-        nsAString_internal__bindgen_ty_1::F_CLASS_FIXED;
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsAString_internal__bindgen_ty_1 {
-        F_NONE = 0,
-        F_TERMINATED = 1,
-        F_VOIDED = 2,
-        F_SHARED = 4,
-        F_OWNED = 8,
-        F_FIXED = 16,
-        F_LITERAL = 32,
-        F_CLASS_FIXED = 65536,
-    }
-    #[test]
-    fn bindgen_test_layout_nsAString_internal() {
-        assert_eq!(::std::mem::size_of::<nsAString_internal>() , 16usize ,
-                   concat ! ( "Size of: " , stringify ! ( nsAString_internal )
-                   ));
-        assert_eq! (::std::mem::align_of::<nsAString_internal>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsAString_internal ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsAString_internal ) ) . mData as *
-                    const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsAString_internal
-                    ) , "::" , stringify ! ( mData ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsAString_internal ) ) . mLength as *
-                    const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsAString_internal
-                    ) , "::" , stringify ! ( mLength ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsAString_internal ) ) . mFlags as *
-                    const _ as usize } , 12usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsAString_internal
-                    ) , "::" , stringify ! ( mFlags ) ));
+    /**
+ * double-byte (char16_t) string types
+ */
+    #[repr(C)]
+    #[derive(Debug)]
+    pub struct nsAString {
+        pub _base: root::mozilla::detail::nsStringRepr,
+    }
+    pub type nsAString_self_type = root::nsAString;
+    #[test]
+    fn bindgen_test_layout_nsAString() {
+        assert_eq!(::std::mem::size_of::<nsAString>() , 16usize , concat ! (
+                   "Size of: " , stringify ! ( nsAString ) ));
+        assert_eq! (::std::mem::align_of::<nsAString>() , 8usize , concat ! (
+                    "Alignment of " , stringify ! ( nsAString ) ));
     }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsSubstringTuple {
         pub mHead: *const root::nsSubstringTuple_self_type,
         pub mFragA: *const root::nsSubstringTuple_base_string_type,
         pub mFragB: *const root::nsSubstringTuple_base_string_type,
     }
     pub type nsSubstringTuple_char_type = u16;
     pub type nsSubstringTuple_self_type = root::nsSubstringTuple;
-    pub type nsSubstringTuple_substring_type = root::nsAString_internal;
-    pub type nsSubstringTuple_base_string_type = root::nsAString_internal;
+    pub type nsSubstringTuple_base_string_type =
+        root::mozilla::detail::nsStringRepr;
     pub type nsSubstringTuple_size_type = u32;
     #[test]
     fn bindgen_test_layout_nsSubstringTuple() {
         assert_eq!(::std::mem::size_of::<nsSubstringTuple>() , 24usize ,
                    concat ! ( "Size of: " , stringify ! ( nsSubstringTuple )
                    ));
         assert_eq! (::std::mem::align_of::<nsSubstringTuple>() , 8usize ,
                     concat ! (
@@ -9546,17 +9662,17 @@ pub mod root {
                     , "::" , stringify ! ( mFragB ) ));
     }
     impl Clone for nsSubstringTuple {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
     pub struct nsAutoString {
         pub _base: root::nsFixedString,
-        pub mStorage: [root::nsAString_internal_char_type; 64usize],
+        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 =
         nsAutoString__bindgen_ty_1::kDefaultStorageSize;
     #[repr(u32)]
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsAutoString__bindgen_ty_1 { kDefaultStorageSize = 64, }
@@ -9570,17 +9686,17 @@ pub mod root {
                     & ( * ( 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_internal,
+        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 ,
@@ -9603,117 +9719,43 @@ pub mod root {
                    ));
         assert_eq! (::std::mem::align_of::<nsStringComparator>() , 8usize ,
                     concat ! (
                     "Alignment of " , stringify ! ( nsStringComparator ) ));
     }
     impl Clone for nsStringComparator {
         fn clone(&self) -> Self { *self }
     }
-    #[repr(C)]
-    #[derive(Debug)]
-    pub struct nsACString_internal {
-        pub mData: *mut root::nsACString_internal_char_type,
-        pub mLength: root::nsACString_internal_size_type,
-        pub mFlags: u32,
-    }
-    pub type nsACString_internal_fallible_t = root::mozilla::fallible_t;
-    pub type nsACString_internal_char_type = ::std::os::raw::c_char;
-    pub type nsACString_internal_self_type = root::nsACString_internal;
-    pub type nsACString_internal_abstract_string_type =
-        root::nsACString_internal_self_type;
-    pub type nsACString_internal_base_string_type =
-        root::nsACString_internal_self_type;
-    pub type nsACString_internal_substring_type =
-        root::nsACString_internal_self_type;
-    pub type nsACString_internal_substring_tuple_type =
-        root::nsCSubstringTuple;
-    pub type nsACString_internal_string_type = root::nsCString;
-    pub type nsACString_internal_const_iterator =
-        root::nsReadingIterator<::std::os::raw::c_char>;
-    pub type nsACString_internal_iterator =
-        root::nsWritingIterator<::std::os::raw::c_char>;
-    pub type nsACString_internal_comparator_type = root::nsCStringComparator;
-    pub type nsACString_internal_char_iterator =
-        *mut root::nsACString_internal_char_type;
-    pub type nsACString_internal_const_char_iterator =
-        *const root::nsACString_internal_char_type;
-    pub type nsACString_internal_size_type = u32;
-    pub type nsACString_internal_index_type = u32;
-    pub const nsACString_internal_F_NONE:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_NONE;
-    pub const nsACString_internal_F_TERMINATED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_TERMINATED;
-    pub const nsACString_internal_F_VOIDED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_VOIDED;
-    pub const nsACString_internal_F_SHARED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_SHARED;
-    pub const nsACString_internal_F_OWNED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_OWNED;
-    pub const nsACString_internal_F_FIXED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_FIXED;
-    pub const nsACString_internal_F_LITERAL:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_LITERAL;
-    pub const nsACString_internal_F_CLASS_FIXED:
-              root::nsACString_internal__bindgen_ty_1 =
-        nsACString_internal__bindgen_ty_1::F_CLASS_FIXED;
-    #[repr(u32)]
-    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-    pub enum nsACString_internal__bindgen_ty_1 {
-        F_NONE = 0,
-        F_TERMINATED = 1,
-        F_VOIDED = 2,
-        F_SHARED = 4,
-        F_OWNED = 8,
-        F_FIXED = 16,
-        F_LITERAL = 32,
-        F_CLASS_FIXED = 65536,
-    }
-    #[test]
-    fn bindgen_test_layout_nsACString_internal() {
-        assert_eq!(::std::mem::size_of::<nsACString_internal>() , 16usize ,
-                   concat ! (
-                   "Size of: " , stringify ! ( nsACString_internal ) ));
-        assert_eq! (::std::mem::align_of::<nsACString_internal>() , 8usize ,
-                    concat ! (
-                    "Alignment of " , stringify ! ( nsACString_internal ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsACString_internal ) ) . mData as *
-                    const _ as usize } , 0usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsACString_internal
-                    ) , "::" , stringify ! ( mData ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsACString_internal ) ) . mLength as
-                    * const _ as usize } , 8usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsACString_internal
-                    ) , "::" , stringify ! ( mLength ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsACString_internal ) ) . mFlags as *
-                    const _ as usize } , 12usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsACString_internal
-                    ) , "::" , stringify ! ( mFlags ) ));
+    /**
+ * single-byte (char) string types
+ */
+    #[repr(C)]
+    #[derive(Debug)]
+    pub struct nsACString {
+        pub _base: root::mozilla::detail::nsCStringRepr,
+    }
+    pub type nsACString_self_type = root::nsACString;
+    #[test]
+    fn bindgen_test_layout_nsACString() {
+        assert_eq!(::std::mem::size_of::<nsACString>() , 16usize , concat ! (
+                   "Size of: " , stringify ! ( nsACString ) ));
+        assert_eq! (::std::mem::align_of::<nsACString>() , 8usize , concat ! (
+                    "Alignment of " , stringify ! ( nsACString ) ));
     }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsCSubstringTuple {
         pub mHead: *const root::nsCSubstringTuple_self_type,
         pub mFragA: *const root::nsCSubstringTuple_base_string_type,
         pub mFragB: *const root::nsCSubstringTuple_base_string_type,
     }
     pub type nsCSubstringTuple_char_type = ::std::os::raw::c_char;
     pub type nsCSubstringTuple_self_type = root::nsCSubstringTuple;
-    pub type nsCSubstringTuple_substring_type = root::nsACString_internal;
-    pub type nsCSubstringTuple_base_string_type = root::nsACString_internal;
+    pub type nsCSubstringTuple_base_string_type =
+        root::mozilla::detail::nsCStringRepr;
     pub type nsCSubstringTuple_size_type = u32;
     #[test]
     fn bindgen_test_layout_nsCSubstringTuple() {
         assert_eq!(::std::mem::size_of::<nsCSubstringTuple>() , 24usize ,
                    concat ! ( "Size of: " , stringify ! ( nsCSubstringTuple )
                    ));
         assert_eq! (::std::mem::align_of::<nsCSubstringTuple>() , 8usize ,
                     concat ! (
@@ -9735,17 +9777,17 @@ pub mod root {
                     , "::" , stringify ! ( mFragB ) ));
     }
     impl Clone for nsCSubstringTuple {
         fn clone(&self) -> Self { *self }
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsCString {
-        pub _base: root::nsACString_internal,
+        pub _base: root::nsACString,
     }
     pub type nsCString_self_type = root::nsCString;
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsCString_Segment {
         pub mBegin: u32,
         pub mLength: u32,
     }
@@ -9776,17 +9818,17 @@ pub mod root {
         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_internal,
+        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 ,
@@ -9813,17 +9855,17 @@ pub mod root {
                     "Alignment of " , stringify ! ( nsCStringComparator ) ));
     }
     impl Clone for nsCStringComparator {
         fn clone(&self) -> Self { *self }
     }
     /**
  * typedefs for backwards compatibility
  */
-    pub type nsSubstring = root::nsAString_internal;
+    pub type nsSubstring = root::nsAString;
     pub type nsAFlatCString = root::nsCString;
     #[repr(C)]
     pub struct nsISupports__bindgen_vtable {
     }
     /**
  * 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
@@ -9949,26 +9991,26 @@ pub mod root {
     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; 0usize];
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsSubstringSplitter {
-        pub mStr: *const root::nsAString_internal,
+        pub mStr: *const root::nsAString,
         pub mArray: root::mozilla::UniquePtr<[root::nsDependentSubstring; 0usize],
                                              root::mozilla::DefaultDelete<[root::nsDependentSubstring; 0usize]>>,
         pub mArraySize: root::nsSubstringSplitter_size_type,
         pub mDelim: root::nsSubstringSplitter_char_type,
     }
     pub type nsSubstringSplitter_size_type =
-        root::nsAString_internal_size_type;
+        root::mozilla::detail::nsStringRepr_size_type;
     pub type nsSubstringSplitter_char_type =
-        root::nsAString_internal_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() {
@@ -10027,26 +10069,26 @@ pub mod root {
                     & ( * ( 0 as * const nsSubstringSplitter ) ) . mDelim as *
                     const _ as usize } , 20usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsSubstringSplitter
                     ) , "::" , stringify ! ( mDelim ) ));
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsCSubstringSplitter {
-        pub mStr: *const root::nsACString_internal,
+        pub mStr: *const root::nsACString,
         pub mArray: root::mozilla::UniquePtr<[root::nsDependentCSubstring; 0usize],
                                              root::mozilla::DefaultDelete<[root::nsDependentCSubstring; 0usize]>>,
         pub mArraySize: root::nsCSubstringSplitter_size_type,
         pub mDelim: root::nsCSubstringSplitter_char_type,
     }
     pub type nsCSubstringSplitter_size_type =
-        root::nsACString_internal_size_type;
+        root::mozilla::detail::nsCStringRepr_size_type;
     pub type nsCSubstringSplitter_char_type =
-        root::nsACString_internal_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() {
@@ -10107,18 +10149,18 @@ pub mod root {
                     * const _ as usize } , 20usize , concat ! (
                     "Alignment of field: " , stringify ! (
                     nsCSubstringSplitter ) , "::" , stringify ! ( mDelim ) ));
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsFixedString {
         pub _base: ::nsstring::nsStringRepr,
-        pub mFixedCapacity: root::nsAString_internal_size_type,
-        pub mFixedBuf: *mut root::nsAString_internal_char_type,
+        pub mFixedCapacity: root::mozilla::detail::nsStringRepr_size_type,
+        pub mFixedBuf: *mut root::mozilla::detail::nsStringRepr_char_type,
     }
     pub type nsFixedString_self_type = root::nsFixedString;
     pub type nsFixedString_fixed_string_type = root::nsFixedString;
     #[test]
     fn bindgen_test_layout_nsFixedString() {
         assert_eq!(::std::mem::size_of::<nsFixedString>() , 32usize , concat !
                    ( "Size of: " , stringify ! ( nsFixedString ) ));
         assert_eq! (::std::mem::align_of::<nsFixedString>() , 8usize , concat