Auto merge of #17639 - emilio:gdcs-rem, r=heycam

style: Avoid overriding the root font size from a getDefaultComputedStyle call

<!-- 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/17639)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2017-07-08 10:28:10 -07:00 committed by GitHub
commit 7a17de4fd0
2 changed files with 14 additions and 13 deletions

View file

@ -341,7 +341,6 @@ trait PrivateMatchMethods: TElement {
if self.is_native_anonymous() || cascade_target == CascadeTarget::EagerPseudo {
cascade_flags.insert(PROHIBIT_DISPLAY_CONTENTS);
} else if self.is_root() {
debug_assert!(self.owner_doc_matches_for_testing(shared_context.stylist.device()));
cascade_flags.insert(IS_ROOT_ELEMENT);
}
@ -554,18 +553,26 @@ trait PrivateMatchMethods: TElement {
None);
// Handle root font-size changes.
if self.is_root() && !self.is_native_anonymous() {
// The new root font-size has already been updated on the Device
// in properties::apply_declarations.
//
// TODO(emilio): This should arguably be outside of the path for
// getComputedStyle/getDefaultComputedStyle, but it's unclear how to
// do it without duplicating a bunch of code.
if self.is_root() && !self.is_native_anonymous() &&
!context.shared.traversal_flags.for_default_styles() {
let device = context.shared.stylist.device();
let new_font_size = new_values.get_font().clone_font_size();
// If the root font-size changed since last time, and something
// in the document did use rem units, ensure we recascade the
// entire tree.
if old_values.map_or(false, |v| v.get_font().clone_font_size() != new_font_size) &&
device.used_root_font_size() {
child_cascade_requirement = ChildCascadeRequirement::MustCascadeDescendants;
if old_values.map_or(true, |v| v.get_font().clone_font_size() != new_font_size) {
// FIXME(emilio): This can fire when called from a document
// from the bfcache (bug 1376897).
debug_assert!(self.owner_doc_matches_for_testing(device));
device.set_root_font_size(new_font_size);
if device.used_root_font_size() {
child_cascade_requirement = ChildCascadeRequirement::MustCascadeDescendants;
}
}
}
}

View file

@ -2901,11 +2901,6 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
error_reporter);
% endif
}
if context.is_root_element {
let s = context.style.get_font().clone_font_size();
context.device.set_root_font_size(s);
}
% endif
% endfor
@ -2938,7 +2933,6 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
style.build()
}
/// See StyleAdjuster::adjust_for_border_width.
pub fn adjust_border_width(style: &mut StyleBuilder) {
% for side in ["top", "right", "bottom", "left"]: