Bug 1365100 - stylo: Fix inheritance of multiple background images. r?Manishearth draft
authorMatt Brubeck <mbrubeck@mozilla.com>
Tue, 16 May 2017 10:39:05 -0700
changeset 578854 bd67cce1bac279e470953a51b6506754d0e2a90b
parent 578175 3e166b6838931b3933ca274331f9e0e115af5cc0
child 628860 d8d918297330b5d555ffa80468516e68fb548c0b
push id59088
push userbmo:mbrubeck@mozilla.com
push dateTue, 16 May 2017 17:59:42 +0000
reviewersManishearth
bugs1365100
milestone55.0a1
Bug 1365100 - stylo: Fix inheritance of multiple background images. r?Manishearth MozReview-Commit-ID: 3ru09WpyFzc
layout/reftests/backgrounds/reftest.list
servo/components/style/properties/gecko.mako.rs
--- a/layout/reftests/backgrounds/reftest.list
+++ b/layout/reftests/backgrounds/reftest.list
@@ -1,16 +1,16 @@
 include gradient/reftest.list
 include vector/reftest.list
 
 == layers-stacking-order.xhtml layers-stacking-order-ref.xhtml
 == layers-layer-count-cascade-1.xhtml layers-layer-count-1-ref.xhtml
 == layers-layer-count-inheritance-1.xhtml layers-layer-count-1-ref.xhtml
 == layers-layer-count-cascade-2.xhtml layers-layer-count-2-ref.xhtml
-fails-if(stylo) == layers-layer-count-inheritance-2.xhtml layers-layer-count-2-ref.xhtml
+== layers-layer-count-inheritance-2.xhtml layers-layer-count-2-ref.xhtml
 fuzzy-if(Android,9,600000) fuzzy-if(skiaContent,1,5000) == viewport-translucent-color-1.html viewport-translucent-color-ref.html
 fuzzy-if(skiaContent,1,5000) == viewport-translucent-color-2.html viewport-translucent-color-ref.html
 fuzzy-if(skiaContent,1,5000) == viewport-translucent-color-3.html viewport-translucent-color-ref.html
 != viewport-translucent-color-ref.html about:blank
 fuzzy-if(skiaContent,1,10000) == iframe-translucent-color-1.html iframe-translucent-color-ref.html
 fuzzy-if(skiaContent,1,1024) == translucent-color-1.html translucent-color-ref.html
 fuzzy-if(skiaContent,1,1024) == translucent-color-2.html translucent-color-ref.html
 fuzzy-if(skiaContent,1,1024) == translucent-color-3.html translucent-color-ref.html
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -2845,19 +2845,31 @@ fn static_assert() {
                     height: to_servo(layer.mSize.mHeight._base, layer.mSize.mHeightType),
                 })
             }).collect()
         )
     }
 
 
     pub fn copy_${shorthand}_image_from(&mut self, other: &Self) {
+        use gecko_bindings::structs::nsStyleImageLayers_LayerType as LayerType;
         unsafe {
-            Gecko_CopyImageValueFrom(&mut self.gecko.${image_layers_field}.mLayers.mFirstElement.mImage,
-                                     &other.gecko.${image_layers_field}.mLayers.mFirstElement.mImage);
+            let count = other.gecko.${image_layers_field}.mImageCount;
+            unsafe {
+                Gecko_EnsureImageLayersLength(&mut self.gecko.${image_layers_field},
+                                              count as usize,
+                                              LayerType::${shorthand.capitalize()});
+            }
+
+            for (layer, other) in self.gecko.${image_layers_field}.mLayers.iter_mut()
+                                      .zip(other.gecko.${image_layers_field}.mLayers.iter())
+                                      .take(count as usize) {
+                Gecko_CopyImageValueFrom(&mut layer.mImage, &other.mImage);
+            }
+            self.gecko.${image_layers_field}.mImageCount = count;
         }
     }
 
     #[allow(unused_variables)]
     pub fn set_${shorthand}_image<I>(&mut self, images: I, cacheable: &mut bool)
         where I: IntoIterator<Item = longhands::${shorthand}_image::computed_value::single_value::T>,
               I::IntoIter: ExactSizeIterator
     {