geckolib: Don't panic when attempting to restyle an element with newly applied XBL bindings.
draft
geckolib: Don't panic when attempting to restyle an element with newly applied XBL bindings.
MozReview-Commit-ID: 7oT67rjN6Va
--- a/servo/ports/geckolib/glue.rs
+++ b/servo/ports/geckolib/glue.rs
@@ -257,19 +257,21 @@ pub extern "C" fn Servo_TraverseSubtree(
use self::structs::TraversalRootBehavior as Root;
debug_assert!(!snapshots.is_null());
let element = GeckoElement(root);
debug!("Servo_TraverseSubtree: {:?}", element);
let traversal_flags = match (root_behavior, restyle_behavior) {
(Root::Normal, Restyle::Normal) |
+ (Root::Normal, Restyle::ForNewlyBoundElement) |
(Root::Normal, Restyle::ForAnimationOnly)
=> TraversalFlags::empty(),
(Root::UnstyledChildrenOnly, Restyle::Normal) |
+ (Root::UnstyledChildrenOnly, Restyle::ForNewlyBoundElement) |
(Root::UnstyledChildrenOnly, Restyle::ForAnimationOnly)
=> UNSTYLED_CHILDREN_ONLY,
(Root::Normal, Restyle::ForCSSRuleChanges) => FOR_CSS_RULE_CHANGES,
(Root::Normal, Restyle::ForReconstruct) => FOR_RECONSTRUCT,
_ => panic!("invalid combination of TraversalRootBehavior and TraversalRestyleBehavior"),
};
let needs_animation_only_restyle = element.has_animation_only_dirty_descendants() ||
@@ -285,17 +287,18 @@ pub extern "C" fn Servo_TraverseSubtree(
return needs_animation_only_restyle;
}
traverse_subtree(element,
raw_data,
traversal_flags,
unsafe { &*snapshots });
- element.has_dirty_descendants() || element.borrow_data().unwrap().has_restyle()
+ restyle_behavior != Restyle::ForNewlyBoundElement &&
+ (element.has_dirty_descendants() || element.borrow_data().unwrap().has_restyle())
}
#[no_mangle]
pub extern "C" fn Servo_AnimationValues_Interpolate(from: RawServoAnimationValueBorrowed,
to: RawServoAnimationValueBorrowed,
progress: f64)
-> RawServoAnimationValueStrong
{