aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-09-20 10:01:07 -0500
committerGitHub <noreply@github.com>2017-09-20 10:01:07 -0500
commiteefd59e9332ea054908548eaba63ac12ff4bf46c (patch)
tree80b4407bab822b484d77beacc0a91ac4b96e9faf
parent98e3bb3cddb1c2e91b1f265269668e11843758fa (diff)
parent7bcd57d3c6f395f870c0c432d95d0f05ed01239b (diff)
downloadservo-eefd59e9332ea054908548eaba63ac12ff4bf46c.tar.gz
servo-eefd59e9332ea054908548eaba63ac12ff4bf46c.zip
Auto merge of #18577 - moz-servo-sync:gecko-backout, r=moz-servo-sync
Backed out changeset 5b56ebe80e22 (bug 1400438) for heap write hazard. r=backout Backed out changeset 5b56ebe80e22 (bug 1400438) for heap write hazard. r=backout Backs out https://github.com/servo/servo/pull/18574 <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18577) <!-- Reviewable:end -->
-rw-r--r--components/style/gecko/generated/bindings.rs13
-rw-r--r--components/style/gecko/generated/structs_debug.rs97
-rw-r--r--components/style/gecko/generated/structs_release.rs97
-rw-r--r--components/style/properties/gecko.mako.rs71
4 files changed, 102 insertions, 176 deletions
diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs
index 5a5a624b160..59c97a0658e 100644
--- a/components/style/gecko/generated/bindings.rs
+++ b/components/style/gecko/generated/bindings.rs
@@ -71,6 +71,7 @@ use gecko_bindings::structs::StyleBasicShapeType;
use gecko_bindings::structs::StyleShapeSource;
use gecko_bindings::structs::StyleTransition;
use gecko_bindings::structs::gfxFontFeatureValueSet;
+use gecko_bindings::structs::nsBorderColors;
use gecko_bindings::structs::nsCSSCounterStyleRule;
use gecko_bindings::structs::nsCSSFontFaceRule;
use gecko_bindings::structs::nsCSSKeyword;
@@ -876,10 +877,22 @@ extern "C" {
pub fn Gecko_EnsureMozBorderColors(aBorder: *mut nsStyleBorder);
}
extern "C" {
+ pub fn Gecko_ClearMozBorderColors(aBorder: *mut nsStyleBorder,
+ aSide: Side);
+}
+extern "C" {
+ pub fn Gecko_AppendMozBorderColors(aBorder: *mut nsStyleBorder,
+ aSide: Side, aColor: nscolor);
+}
+extern "C" {
pub fn Gecko_CopyMozBorderColors(aDest: *mut nsStyleBorder,
aSrc: *const nsStyleBorder, aSide: Side);
}
extern "C" {
+ pub fn Gecko_GetMozBorderColors(aBorder: *const nsStyleBorder,
+ aSide: Side) -> *const nsBorderColors;
+}
+extern "C" {
pub fn Gecko_FontFamilyList_Clear(aList: *mut FontFamilyList);
}
extern "C" {
diff --git a/components/style/gecko/generated/structs_debug.rs b/components/style/gecko/generated/structs_debug.rs
index 5f4e696f5ea..59807d919eb 100644
--- a/components/style/gecko/generated/structs_debug.rs
+++ b/components/style/gecko/generated/structs_debug.rs
@@ -14284,7 +14284,7 @@ pub mod root {
#[repr(C)]
#[derive(Debug)]
pub struct nsStyleBorder {
- pub mBorderColors: root::mozilla::UniquePtr<root::nsBorderColors>,
+ pub mBorderColors: *mut *mut root::nsBorderColors,
pub mBorderRadius: root::nsStyleCorners,
pub mBorderImageSource: root::nsStyleImage,
pub mBorderImageSlice: root::nsStyleSides,
@@ -30544,6 +30544,29 @@ pub mod root {
}
#[repr(C)]
#[derive(Debug)]
+ pub struct nsBorderColors {
+ pub mNext: *mut root::nsBorderColors,
+ pub mColor: root::nscolor,
+ }
+ #[test]
+ fn bindgen_test_layout_nsBorderColors() {
+ assert_eq!(::std::mem::size_of::<nsBorderColors>() , 16usize , concat
+ ! ( "Size of: " , stringify ! ( nsBorderColors ) ));
+ assert_eq! (::std::mem::align_of::<nsBorderColors>() , 8usize , concat
+ ! ( "Alignment of " , stringify ! ( nsBorderColors ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsBorderColors ) ) . mNext as * const
+ _ as usize } , 0usize , concat ! (
+ "Alignment of field: " , stringify ! ( nsBorderColors ) ,
+ "::" , stringify ! ( mNext ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsBorderColors ) ) . mColor as *
+ const _ as usize } , 8usize , concat ! (
+ "Alignment of field: " , stringify ! ( nsBorderColors ) ,
+ "::" , stringify ! ( mColor ) ));
+ }
+ #[repr(C)]
+ #[derive(Debug)]
pub struct nsCSSShadowItem {
pub mXOffset: root::nscoord,
pub mYOffset: root::nscoord,
@@ -30628,23 +30651,6 @@ pub mod root {
"Alignment of field: " , stringify ! ( nsCSSShadowArray )
, "::" , stringify ! ( mArray ) ));
}
- #[repr(C)]
- #[derive(Debug)]
- pub struct nsBorderColors {
- pub mColors: [root::nsTArray<::std::os::raw::c_uint>; 4usize],
- }
- #[test]
- fn bindgen_test_layout_nsBorderColors() {
- assert_eq!(::std::mem::size_of::<nsBorderColors>() , 32usize , concat
- ! ( "Size of: " , stringify ! ( nsBorderColors ) ));
- assert_eq! (::std::mem::align_of::<nsBorderColors>() , 8usize , concat
- ! ( "Alignment of " , stringify ! ( nsBorderColors ) ));
- assert_eq! (unsafe {
- & ( * ( 0 as * const nsBorderColors ) ) . mColors as *
- const _ as usize } , 0usize , concat ! (
- "Alignment of field: " , stringify ! ( nsBorderColors ) ,
- "::" , stringify ! ( mColors ) ));
- }
/// An object that allows sharing of arrays that store 'quotes' property
/// values. This is particularly important for inheritance, where we want
/// to share the same 'quotes' value with a parent style context.
@@ -33513,28 +33519,6 @@ pub mod root {
root::RefPtr<root::nsCSSValueSharedList> ) ));
}
#[test]
- fn __bindgen_test_layout_UniquePtr_open0_nsBorderColors_DefaultDelete_open1_nsBorderColors_close1_close0_instantiation() {
- assert_eq!(::std::mem::size_of::<root::mozilla::UniquePtr<root::nsBorderColors>>()
- , 8usize , concat ! (
- "Size of template specialization: " , stringify ! (
- root::mozilla::UniquePtr<root::nsBorderColors> ) ));
- assert_eq!(::std::mem::align_of::<root::mozilla::UniquePtr<root::nsBorderColors>>()
- , 8usize , concat ! (
- "Alignment of template specialization: " , stringify ! (
- root::mozilla::UniquePtr<root::nsBorderColors> ) ));
- }
- #[test]
- fn __bindgen_test_layout_DefaultDelete_open0_nsBorderColors_close0_instantiation() {
- assert_eq!(::std::mem::size_of::<root::mozilla::DefaultDelete>() ,
- 1usize , concat ! (
- "Size of template specialization: " , stringify ! (
- root::mozilla::DefaultDelete ) ));
- assert_eq!(::std::mem::align_of::<root::mozilla::DefaultDelete>() ,
- 1usize , concat ! (
- "Alignment of template specialization: " , stringify ! (
- root::mozilla::DefaultDelete ) ));
- }
- #[test]
fn __bindgen_test_layout_nsTArray_open0_nsStyleFilter_close0_instantiation() {
assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsStyleFilter>>()
, 8usize , concat ! (
@@ -33590,17 +33574,6 @@ pub mod root {
root::nsTArray<::nsstring::nsStringRepr> ) ));
}
#[test]
- fn __bindgen_test_layout_nsTString_open0_char16_t_close0_instantiation_2() {
- assert_eq!(::std::mem::size_of::<::nsstring::nsStringRepr>() , 16usize ,
- concat ! (
- "Size of template specialization: " , stringify ! (
- ::nsstring::nsStringRepr ) ));
- assert_eq!(::std::mem::align_of::<::nsstring::nsStringRepr>() , 8usize ,
- concat ! (
- "Alignment of template specialization: " , stringify ! (
- ::nsstring::nsStringRepr ) ));
- }
- #[test]
fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_202536_close0_instantiation() {
assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::StyleSheet>>()
, 8usize , concat ! (
@@ -34833,17 +34806,6 @@ pub mod root {
root::nsTArray<::nsstring::nsStringRepr> ) ));
}
#[test]
- fn __bindgen_test_layout_nsTString_open0_char16_t_close0_instantiation_3() {
- assert_eq!(::std::mem::size_of::<::nsstring::nsStringRepr>() , 16usize ,
- concat ! (
- "Size of template specialization: " , stringify ! (
- ::nsstring::nsStringRepr ) ));
- assert_eq!(::std::mem::align_of::<::nsstring::nsStringRepr>() , 8usize ,
- concat ! (
- "Alignment of template specialization: " , stringify ! (
- ::nsstring::nsStringRepr ) ));
- }
- #[test]
fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213307_close0_instantiation() {
assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::StyleSheet>>()
, 8usize , concat ! (
@@ -36742,17 +36704,6 @@ pub mod root {
));
}
#[test]
- fn __bindgen_test_layout_nsTArray_open0_unsigned_int_close0_instantiation_5() {
- assert_eq!(::std::mem::size_of::<root::nsTArray<::std::os::raw::c_uint>>()
- , 8usize , concat ! (
- "Size of template specialization: " , stringify ! (
- root::nsTArray<::std::os::raw::c_uint> ) ));
- assert_eq!(::std::mem::align_of::<root::nsTArray<::std::os::raw::c_uint>>()
- , 8usize , concat ! (
- "Alignment of template specialization: " , stringify ! (
- root::nsTArray<::std::os::raw::c_uint> ) ));
- }
- #[test]
fn __bindgen_test_layout_nsTArray_open0_pair_open1_nsString_nsString_close1_close0_instantiation() {
assert_eq!(::std::mem::size_of::<root::nsTArray<root::std::pair<::nsstring::nsStringRepr,
::nsstring::nsStringRepr>>>()
diff --git a/components/style/gecko/generated/structs_release.rs b/components/style/gecko/generated/structs_release.rs
index faf3924a299..dd1e0f487bd 100644
--- a/components/style/gecko/generated/structs_release.rs
+++ b/components/style/gecko/generated/structs_release.rs
@@ -14131,7 +14131,7 @@ pub mod root {
#[repr(C)]
#[derive(Debug)]
pub struct nsStyleBorder {
- pub mBorderColors: root::mozilla::UniquePtr<root::nsBorderColors>,
+ pub mBorderColors: *mut *mut root::nsBorderColors,
pub mBorderRadius: root::nsStyleCorners,
pub mBorderImageSource: root::nsStyleImage,
pub mBorderImageSlice: root::nsStyleSides,
@@ -30130,6 +30130,29 @@ pub mod root {
}
#[repr(C)]
#[derive(Debug)]
+ pub struct nsBorderColors {
+ pub mNext: *mut root::nsBorderColors,
+ pub mColor: root::nscolor,
+ }
+ #[test]
+ fn bindgen_test_layout_nsBorderColors() {
+ assert_eq!(::std::mem::size_of::<nsBorderColors>() , 16usize , concat
+ ! ( "Size of: " , stringify ! ( nsBorderColors ) ));
+ assert_eq! (::std::mem::align_of::<nsBorderColors>() , 8usize , concat
+ ! ( "Alignment of " , stringify ! ( nsBorderColors ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsBorderColors ) ) . mNext as * const
+ _ as usize } , 0usize , concat ! (
+ "Alignment of field: " , stringify ! ( nsBorderColors ) ,
+ "::" , stringify ! ( mNext ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const nsBorderColors ) ) . mColor as *
+ const _ as usize } , 8usize , concat ! (
+ "Alignment of field: " , stringify ! ( nsBorderColors ) ,
+ "::" , stringify ! ( mColor ) ));
+ }
+ #[repr(C)]
+ #[derive(Debug)]
pub struct nsCSSShadowItem {
pub mXOffset: root::nscoord,
pub mYOffset: root::nscoord,
@@ -30214,23 +30237,6 @@ pub mod root {
"Alignment of field: " , stringify ! ( nsCSSShadowArray )
, "::" , stringify ! ( mArray ) ));
}
- #[repr(C)]
- #[derive(Debug)]
- pub struct nsBorderColors {
- pub mColors: [root::nsTArray<::std::os::raw::c_uint>; 4usize],
- }
- #[test]
- fn bindgen_test_layout_nsBorderColors() {
- assert_eq!(::std::mem::size_of::<nsBorderColors>() , 32usize , concat
- ! ( "Size of: " , stringify ! ( nsBorderColors ) ));
- assert_eq! (::std::mem::align_of::<nsBorderColors>() , 8usize , concat
- ! ( "Alignment of " , stringify ! ( nsBorderColors ) ));
- assert_eq! (unsafe {
- & ( * ( 0 as * const nsBorderColors ) ) . mColors as *
- const _ as usize } , 0usize , concat ! (
- "Alignment of field: " , stringify ! ( nsBorderColors ) ,
- "::" , stringify ! ( mColors ) ));
- }
/// An object that allows sharing of arrays that store 'quotes' property
/// values. This is particularly important for inheritance, where we want
/// to share the same 'quotes' value with a parent style context.
@@ -33099,28 +33105,6 @@ pub mod root {
root::RefPtr<root::nsCSSValueSharedList> ) ));
}
#[test]
- fn __bindgen_test_layout_UniquePtr_open0_nsBorderColors_DefaultDelete_open1_nsBorderColors_close1_close0_instantiation() {
- assert_eq!(::std::mem::size_of::<root::mozilla::UniquePtr<root::nsBorderColors>>()
- , 8usize , concat ! (
- "Size of template specialization: " , stringify ! (
- root::mozilla::UniquePtr<root::nsBorderColors> ) ));
- assert_eq!(::std::mem::align_of::<root::mozilla::UniquePtr<root::nsBorderColors>>()
- , 8usize , concat ! (
- "Alignment of template specialization: " , stringify ! (
- root::mozilla::UniquePtr<root::nsBorderColors> ) ));
- }
- #[test]
- fn __bindgen_test_layout_DefaultDelete_open0_nsBorderColors_close0_instantiation() {
- assert_eq!(::std::mem::size_of::<root::mozilla::DefaultDelete>() ,
- 1usize , concat ! (
- "Size of template specialization: " , stringify ! (
- root::mozilla::DefaultDelete ) ));
- assert_eq!(::std::mem::align_of::<root::mozilla::DefaultDelete>() ,
- 1usize , concat ! (
- "Alignment of template specialization: " , stringify ! (
- root::mozilla::DefaultDelete ) ));
- }
- #[test]
fn __bindgen_test_layout_nsTArray_open0_nsStyleFilter_close0_instantiation() {
assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsStyleFilter>>()
, 8usize , concat ! (
@@ -33176,17 +33160,6 @@ pub mod root {
root::nsTArray<::nsstring::nsStringRepr> ) ));
}
#[test]
- fn __bindgen_test_layout_nsTString_open0_char16_t_close0_instantiation_2() {
- assert_eq!(::std::mem::size_of::<::nsstring::nsStringRepr>() , 16usize ,
- concat ! (
- "Size of template specialization: " , stringify ! (
- ::nsstring::nsStringRepr ) ));
- assert_eq!(::std::mem::align_of::<::nsstring::nsStringRepr>() , 8usize ,
- concat ! (
- "Alignment of template specialization: " , stringify ! (
- ::nsstring::nsStringRepr ) ));
- }
- #[test]
fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_200130_close0_instantiation() {
assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::StyleSheet>>()
, 8usize , concat ! (
@@ -34419,17 +34392,6 @@ pub mod root {
root::nsTArray<::nsstring::nsStringRepr> ) ));
}
#[test]
- fn __bindgen_test_layout_nsTString_open0_char16_t_close0_instantiation_3() {
- assert_eq!(::std::mem::size_of::<::nsstring::nsStringRepr>() , 16usize ,
- concat ! (
- "Size of template specialization: " , stringify ! (
- ::nsstring::nsStringRepr ) ));
- assert_eq!(::std::mem::align_of::<::nsstring::nsStringRepr>() , 8usize ,
- concat ! (
- "Alignment of template specialization: " , stringify ! (
- ::nsstring::nsStringRepr ) ));
- }
- #[test]
fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210857_close0_instantiation() {
assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::StyleSheet>>()
, 8usize , concat ! (
@@ -36315,17 +36277,6 @@ pub mod root {
));
}
#[test]
- fn __bindgen_test_layout_nsTArray_open0_unsigned_int_close0_instantiation_5() {
- assert_eq!(::std::mem::size_of::<root::nsTArray<::std::os::raw::c_uint>>()
- , 8usize , concat ! (
- "Size of template specialization: " , stringify ! (
- root::nsTArray<::std::os::raw::c_uint> ) ));
- assert_eq!(::std::mem::align_of::<root::nsTArray<::std::os::raw::c_uint>>()
- , 8usize , concat ! (
- "Alignment of template specialization: " , stringify ! (
- root::nsTArray<::std::os::raw::c_uint> ) ));
- }
- #[test]
fn __bindgen_test_layout_nsTArray_open0_pair_open1_nsString_nsString_close1_close0_instantiation() {
assert_eq!(::std::mem::size_of::<root::nsTArray<root::std::pair<::nsstring::nsStringRepr,
::nsstring::nsStringRepr>>>()
diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs
index 19add7085f4..1d8ff1bf08d 100644
--- a/components/style/properties/gecko.mako.rs
+++ b/components/style/properties/gecko.mako.rs
@@ -1272,34 +1272,6 @@ fn static_assert() {
border-image-repeat border-image-width border-image-slice
${skip_moz_border_color_longhands}">
- fn set_moz_border_colors(&mut self, side: structs::Side, v: Option<Vec<::cssparser::RGBA>>) {
- match v {
- None => {
- let ptr = self.gecko.mBorderColors.mPtr;
- if let Some(colors) = unsafe { ptr.as_mut() } {
- unsafe { colors.mColors[side as usize].clear() };
- }
- }
- Some(ref colors) => {
- unsafe { bindings::Gecko_EnsureMozBorderColors(&mut self.gecko) };
- let border_colors = unsafe { self.gecko.mBorderColors.mPtr.as_mut().unwrap() };
- let dest_colors = &mut border_colors.mColors[side as usize];
- unsafe { dest_colors.set_len_pod(colors.len() as u32) };
- for (dst, src) in dest_colors.iter_mut().zip(colors.into_iter()) {
- *dst = convert_rgba_to_nscolor(src);
- }
- }
- }
- }
-
- fn clone_moz_border_colors(&self, side: structs::Side) -> Option<Vec<::cssparser::RGBA>> {
- unsafe { self.gecko.mBorderColors.mPtr.as_ref() }.map(|colors| {
- colors.mColors[side as usize].iter()
- .map(|color| convert_nscolor_to_rgba(*color))
- .collect()
- })
- }
-
% for side in SIDES:
<% impl_keyword("border_%s_style" % side.ident,
"mBorderStyle[%s]" % side.index,
@@ -1350,7 +1322,29 @@ fn static_assert() {
#[allow(non_snake_case)]
pub fn set__moz_border_${side.ident}_colors(&mut self,
v: longhands::_moz_border_${side.ident}_colors::computed_value::T) {
- self.set_moz_border_colors(structs::Side::eSide${to_camel_case(side.ident)}, v.0);
+ match v.0 {
+ None => {
+ unsafe {
+ bindings::Gecko_ClearMozBorderColors(&mut self.gecko,
+ structs::Side::eSide${to_camel_case(side.ident)});
+ }
+ },
+ Some(ref colors) => {
+ unsafe {
+ bindings::Gecko_EnsureMozBorderColors(&mut self.gecko);
+ bindings::Gecko_ClearMozBorderColors(&mut self.gecko,
+ structs::Side::eSide${to_camel_case(side.ident)});
+ }
+ for color in colors {
+ let c = convert_rgba_to_nscolor(color);
+ unsafe {
+ bindings::Gecko_AppendMozBorderColors(&mut self.gecko,
+ structs::Side::eSide${to_camel_case(side.ident)},
+ c);
+ }
+ }
+ }
+ }
}
#[allow(non_snake_case)]
@@ -1370,7 +1364,24 @@ fn static_assert() {
pub fn clone__moz_border_${side.ident}_colors(&self)
-> longhands::_moz_border_${side.ident}_colors::computed_value::T {
use self::longhands::_moz_border_${side.ident}_colors::computed_value::T;
- T(self.clone_moz_border_colors(structs::Side::eSide${to_camel_case(side.ident)}))
+
+ let mut gecko_colors =
+ unsafe { bindings::Gecko_GetMozBorderColors(&self.gecko,
+ structs::Side::eSide${to_camel_case(side.ident)}) };
+
+ if gecko_colors.is_null() {
+ return T(None);
+ }
+
+ let mut colors = Vec::new();
+ loop {
+ unsafe {
+ colors.push(convert_nscolor_to_rgba((*gecko_colors).mColor));
+ if (*gecko_colors).mNext.is_null() { break; }
+ gecko_colors = (*gecko_colors).mNext;
+ }
+ }
+ T(Some(colors))
}
% endfor