aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/gecko/generated/bindings.rs8
-rw-r--r--components/style/gecko/generated/structs_debug.rs57
-rw-r--r--components/style/gecko/generated/structs_release.rs57
-rw-r--r--components/style/gecko_bindings/sugar/ns_com_ptr.rs14
-rw-r--r--components/style/properties/gecko.mako.rs41
5 files changed, 154 insertions, 23 deletions
diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs
index 6a5dca5eab2..028b4678c3f 100644
--- a/components/style/gecko/generated/bindings.rs
+++ b/components/style/gecko/generated/bindings.rs
@@ -80,6 +80,9 @@ unsafe impl Sync for nsStyleContent {}
use gecko_bindings::structs::nsStyleContentData;
unsafe impl Send for nsStyleContentData {}
unsafe impl Sync for nsStyleContentData {}
+use gecko_bindings::structs::nsStyleContentData_CounterFunction;
+unsafe impl Send for nsStyleContentData_CounterFunction {}
+unsafe impl Sync for nsStyleContentData_CounterFunction {}
use gecko_bindings::structs::nsStyleContentType;
unsafe impl Send for nsStyleContentType {}
unsafe impl Sync for nsStyleContentType {}
@@ -919,8 +922,9 @@ extern "C" {
aImageValue: *mut ImageValue);
}
extern "C" {
- pub fn Gecko_SetContentDataArray(content_data: *mut nsStyleContentData,
- type_: nsStyleContentType, len: u32);
+ pub fn Gecko_SetCounterFunction(content_data: *mut nsStyleContentData,
+ type_: nsStyleContentType)
+ -> *mut nsStyleContentData_CounterFunction;
}
extern "C" {
pub fn Gecko_GetNodeFlags(node: RawGeckoNodeBorrowed) -> u32;
diff --git a/components/style/gecko/generated/structs_debug.rs b/components/style/gecko/generated/structs_debug.rs
index 8de6cba9c00..8b67bd48b74 100644
--- a/components/style/gecko/generated/structs_debug.rs
+++ b/components/style/gecko/generated/structs_debug.rs
@@ -32010,11 +32010,66 @@ pub mod root {
pub mContent: root::nsStyleContentData__bindgen_ty_1,
}
#[repr(C)]
+ #[derive(Debug)]
+ pub struct nsStyleContentData_CounterFunction {
+ pub mIdent: ::nsstring::nsStringRepr,
+ pub mSeparator: ::nsstring::nsStringRepr,
+ pub mCounterStyle: root::mozilla::CounterStylePtr,
+ pub mCounterStyleName: root::nsCOMPtr<root::nsIAtom>,
+ pub mRefCnt: root::mozilla::ThreadSafeAutoRefCnt,
+ }
+ pub type nsStyleContentData_CounterFunction_HasThreadSafeRefCnt =
+ root::mozilla::TrueType;
+ #[test]
+ fn bindgen_test_layout_nsStyleContentData_CounterFunction() {
+ assert_eq!(::std::mem::size_of::<nsStyleContentData_CounterFunction>()
+ , 56usize , concat ! (
+ "Size of: " , stringify ! (
+ nsStyleContentData_CounterFunction ) ));
+ assert_eq! (::std::mem::align_of::<nsStyleContentData_CounterFunction>()
+ , 8usize , concat ! (
+ "Alignment of " , stringify ! (
+ nsStyleContentData_CounterFunction ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mIdent as * const _ as usize } , 0usize , concat ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mIdent ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mSeparator as * const _ as usize } , 16usize , concat
+ ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mSeparator ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mCounterStyle as * const _ as usize } , 32usize ,
+ concat ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mCounterStyle ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mCounterStyleName as * const _ as usize } , 40usize ,
+ concat ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mCounterStyleName ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mRefCnt as * const _ as usize } , 48usize , concat ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mRefCnt ) ));
+ }
+ #[repr(C)]
#[derive(Debug, Copy)]
pub struct nsStyleContentData__bindgen_ty_1 {
pub mString: root::__BindgenUnionField<*mut u16>,
pub mImage: root::__BindgenUnionField<*mut root::nsStyleImageRequest>,
- pub mCounters: root::__BindgenUnionField<*mut root::nsCSSValue_Array>,
+ pub mCounters: root::__BindgenUnionField<*mut root::nsStyleContentData_CounterFunction>,
pub bindgen_union_field: u64,
}
#[test]
diff --git a/components/style/gecko/generated/structs_release.rs b/components/style/gecko/generated/structs_release.rs
index c8d937faa5b..df90efe3af6 100644
--- a/components/style/gecko/generated/structs_release.rs
+++ b/components/style/gecko/generated/structs_release.rs
@@ -31499,11 +31499,66 @@ pub mod root {
pub mContent: root::nsStyleContentData__bindgen_ty_1,
}
#[repr(C)]
+ #[derive(Debug)]
+ pub struct nsStyleContentData_CounterFunction {
+ pub mIdent: ::nsstring::nsStringRepr,
+ pub mSeparator: ::nsstring::nsStringRepr,
+ pub mCounterStyle: root::mozilla::CounterStylePtr,
+ pub mCounterStyleName: root::nsCOMPtr,
+ pub mRefCnt: root::mozilla::ThreadSafeAutoRefCnt,
+ }
+ pub type nsStyleContentData_CounterFunction_HasThreadSafeRefCnt =
+ root::mozilla::TrueType;
+ #[test]
+ fn bindgen_test_layout_nsStyleContentData_CounterFunction() {
+ assert_eq!(::std::mem::size_of::<nsStyleContentData_CounterFunction>()
+ , 56usize , concat ! (
+ "Size of: " , stringify ! (
+ nsStyleContentData_CounterFunction ) ));
+ assert_eq! (::std::mem::align_of::<nsStyleContentData_CounterFunction>()
+ , 8usize , concat ! (
+ "Alignment of " , stringify ! (
+ nsStyleContentData_CounterFunction ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mIdent as * const _ as usize } , 0usize , concat ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mIdent ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mSeparator as * const _ as usize } , 16usize , concat
+ ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mSeparator ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mCounterStyle as * const _ as usize } , 32usize ,
+ concat ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mCounterStyle ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mCounterStyleName as * const _ as usize } , 40usize ,
+ concat ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mCounterStyleName ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsStyleContentData_CounterFunction )
+ ) . mRefCnt as * const _ as usize } , 48usize , concat ! (
+ "Alignment of field: " , stringify ! (
+ nsStyleContentData_CounterFunction ) , "::" , stringify !
+ ( mRefCnt ) ));
+ }
+ #[repr(C)]
#[derive(Debug, Copy)]
pub struct nsStyleContentData__bindgen_ty_1 {
pub mString: root::__BindgenUnionField<*mut u16>,
pub mImage: root::__BindgenUnionField<*mut root::nsStyleImageRequest>,
- pub mCounters: root::__BindgenUnionField<*mut root::nsCSSValue_Array>,
+ pub mCounters: root::__BindgenUnionField<*mut root::nsStyleContentData_CounterFunction>,
pub bindgen_union_field: u64,
}
#[test]
diff --git a/components/style/gecko_bindings/sugar/ns_com_ptr.rs b/components/style/gecko_bindings/sugar/ns_com_ptr.rs
index 488dc862608..f50eda02c3d 100644
--- a/components/style/gecko_bindings/sugar/ns_com_ptr.rs
+++ b/components/style/gecko_bindings/sugar/ns_com_ptr.rs
@@ -13,6 +13,13 @@ impl<T> nsCOMPtr<T> {
pub fn raw<U>(&self) -> *mut T {
self.mRawPtr
}
+
+ /// Set this pointer from an addrefed raw pointer.
+ /// It leaks the old pointer.
+ #[inline]
+ pub unsafe fn set_raw_from_addrefed<U>(&mut self, ptr: *mut T) {
+ self.mRawPtr = ptr;
+ }
}
#[cfg(not(feature = "gecko_debug"))]
@@ -22,4 +29,11 @@ impl nsCOMPtr {
pub fn raw<T>(&self) -> *mut T {
self._base.mRawPtr as *mut _
}
+
+ /// Set this pointer from an addrefed raw pointer.
+ /// It leaks the old pointer.
+ #[inline]
+ pub unsafe fn set_raw_from_addrefed<T>(&mut self, ptr: *mut T) {
+ self._base.mRawPtr = ptr as *mut _;
+ }
}
diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs
index bd390fc4273..d5f96ad1bb1 100644
--- a/components/style/properties/gecko.mako.rs
+++ b/components/style/properties/gecko.mako.rs
@@ -4211,7 +4211,9 @@ clip-path
use properties::longhands::content::computed_value::T;
use properties::longhands::content::computed_value::ContentItem;
use values::generics::CounterStyleOrNone;
- use gecko_bindings::structs::nsCSSValue;
+ use gecko_bindings::structs::nsIAtom;
+ use gecko_bindings::structs::nsStyleContentData;
+ use gecko_bindings::structs::nsStyleContentType;
use gecko_bindings::structs::nsStyleContentType::*;
use gecko_bindings::bindings::Gecko_ClearAndResizeStyleContents;
@@ -4225,11 +4227,23 @@ clip-path
ptr
}
- fn set_counter_style(style: CounterStyleOrNone, dest: &mut nsCSSValue) {
- dest.set_atom_ident(match style {
+ fn set_counter_function(data: &mut nsStyleContentData,
+ content_type: nsStyleContentType,
+ name: &str, sep: &str, style: CounterStyleOrNone) {
+ debug_assert!(content_type == eStyleContentType_Counter ||
+ content_type == eStyleContentType_Counters);
+ let counter_func = unsafe {
+ bindings::Gecko_SetCounterFunction(data, content_type).as_mut().unwrap()
+ };
+ counter_func.mIdent.assign_utf8(name);
+ if content_type == eStyleContentType_Counters {
+ counter_func.mSeparator.assign_utf8(sep);
+ }
+ let ptr = match style {
CounterStyleOrNone::None_ => atom!("none"),
CounterStyleOrNone::Name(name) => name.0,
- });
+ }.into_addrefed();
+ unsafe { counter_func.mCounterStyleName.set_raw_from_addrefed::<nsIAtom>(ptr); }
}
match v {
@@ -4292,23 +4306,12 @@ clip-path
ContentItem::NoCloseQuote
=> self.gecko.mContents[i].mType = eStyleContentType_NoCloseQuote,
ContentItem::Counter(name, style) => {
- unsafe {
- bindings::Gecko_SetContentDataArray(&mut self.gecko.mContents[i],
- eStyleContentType_Counter, 2)
- }
- let mut array = unsafe { &mut **self.gecko.mContents[i].mContent.mCounters.as_mut() };
- array[0].set_string(&name);
- set_counter_style(style, &mut array[1]);
+ set_counter_function(&mut self.gecko.mContents[i],
+ eStyleContentType_Counter, &name, "", style);
}
ContentItem::Counters(name, sep, style) => {
- unsafe {
- bindings::Gecko_SetContentDataArray(&mut self.gecko.mContents[i],
- eStyleContentType_Counters, 3)
- }
- let mut array = unsafe { &mut **self.gecko.mContents[i].mContent.mCounters.as_mut() };
- array[0].set_string(&name);
- array[1].set_string(&sep);
- set_counter_style(style, &mut array[2]);
+ set_counter_function(&mut self.gecko.mContents[i],
+ eStyleContentType_Counters, &name, &sep, style);
}
ContentItem::Url(ref url) => {
unsafe {