Bug 1382136 - Part 3: address for peudo element. r?hiro draft
authorDaisuke Akatsuka <dakatsuka@mozilla.com>
Thu, 27 Jul 2017 15:29:53 +0900
changeset 616599 5c4b38332915e95363ec7c9f125589367571896a
parent 616598 c950d5072ca41e4cb3408a2849b6a77149e920cd
child 616600 3b1098dba7327d5b55dd5da3b8fa166be203770f
push id70730
push userbmo:dakatsuka@mozilla.com
push dateThu, 27 Jul 2017 06:30:34 +0000
reviewershiro
bugs1382136
milestone56.0a1
Bug 1382136 - Part 3: address for peudo element. r?hiro For pseudo element, although we could get computed value correctly during animation by patch part 1, 2, displaying was not animated. We should resolve it. MozReview-Commit-ID: GwPk0MKI58H
servo/components/style/matching.rs
--- a/servo/components/style/matching.rs
+++ b/servo/components/style/matching.rs
@@ -504,16 +504,30 @@ pub trait MatchMethods : TElement {
         }
 
         // Also, don't do anything if there was no style.
         let old_primary_style = match old_styles.primary {
             Some(s) => s,
             None => return ChildCascadeRequirement::MustCascadeChildren,
         };
 
+        // If pseudo element's 'content' propety was changed, we need to update pseudo style
+        // of parent since we construct a new frame for the psudo element by parent's style.
+        if let Some(pseudo) = self.implemented_pseudo_element() {
+            if pseudo.is_before_or_after() &&
+               new_primary_style.get_counters().clone_content() !=
+               old_primary_style.get_counters().clone_content() {
+                   let parent_element =
+                       self.inheritance_parent().expect("Faild to get parent");
+                   let mut parent_data = unsafe { parent_element.ensure_data() };
+                   parent_data.styles.pseudos.set(&pseudo, new_primary_style.clone());
+                   parent_data.restyle.damage |= RestyleDamage::reconstruct();
+               }
+        }
+
         cascade_requirement = cmp::max(
             cascade_requirement,
             self.accumulate_damage_for(
                 context.shared,
                 &mut data.restyle,
                 &old_primary_style,
                 new_primary_style,
                 None,