diff --git a/components/style/matching.rs b/components/style/matching.rs index c26ed839986..25349b5457f 100644 --- a/components/style/matching.rs +++ b/components/style/matching.rs @@ -13,8 +13,9 @@ use data::{ComputedStyle, ElementData, RestyleData}; use dom::{TElement, TNode}; use font_metrics::FontMetricsProvider; use log::LogLevel::Trace; +use properties::{ALLOW_SET_ROOT_FONT_SIZE, SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP}; use properties::{AnimationRules, CascadeFlags, ComputedValues}; -use properties::{SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP, VISITED_DEPENDENT_ONLY, cascade}; +use properties::{VISITED_DEPENDENT_ONLY, cascade}; use properties::longhands::display::computed_value as display; use restyle_hints::{RESTYLE_CSS_ANIMATIONS, RESTYLE_CSS_TRANSITIONS, RestyleReplacements}; use restyle_hints::{RESTYLE_STYLE_ATTRIBUTE, RESTYLE_SMIL}; @@ -256,6 +257,9 @@ trait PrivateMatchMethods: TElement { if cascade_visited.visited_dependent_only() { cascade_flags.insert(VISITED_DEPENDENT_ONLY); } + if !self.is_native_anonymous() { + cascade_flags.insert(ALLOW_SET_ROOT_FONT_SIZE); + } // Grab the inherited values. let parent_el; diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index 5036055d379..d2eab593f19 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -2483,6 +2483,15 @@ bitflags! { const SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP = 0x02, /// Whether to only cascade properties that are visited dependent. const VISITED_DEPENDENT_ONLY = 0x04, + /// Should we modify the device's root font size + /// when computing the root? + /// + /// Not set for native anonymous content since some NAC + /// form their own root, but share the device. + /// + /// ::backdrop and all NAC will resolve rem units against + /// the toplevel root element now. + const ALLOW_SET_ROOT_FONT_SIZE = 0x08, } } @@ -2773,7 +2782,7 @@ pub fn apply_declarations<'a, F, I>(device: &Device, % endif } - if is_root_element { + if is_root_element && flags.contains(ALLOW_SET_ROOT_FONT_SIZE) { let s = context.style.get_font().clone_font_size(); context.device.set_root_font_size(s); }