diff options
author | Emilio Cobos Álvarez <emilio@crisal.io> | 2017-05-12 17:51:32 +0200 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2017-05-16 02:49:34 +0200 |
commit | 737c7f1f6347ec5a68d59a791de43d8897014227 (patch) | |
tree | 9473f4301ca275902d8dd730cab64bf26ddbf2e1 /ports/geckolib | |
parent | 84f5a906680784bee2cb1e12da9861ad089b4df7 (diff) | |
download | servo-737c7f1f6347ec5a68d59a791de43d8897014227.tar.gz servo-737c7f1f6347ec5a68d59a791de43d8897014227.zip |
Bug 1364412: Simplify Servo_HasAuthorSpecifiedRules looking at the pseudo style. r=bholley
MozReview-Commit-ID: HpV92ttZGJz
Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
Diffstat (limited to 'ports/geckolib')
-rw-r--r-- | ports/geckolib/glue.rs | 78 |
1 files changed, 12 insertions, 66 deletions
diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 1d1c5f9c404..439f4d82bb1 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -33,7 +33,6 @@ use style::gecko_bindings::bindings::{RawServoMediaList, RawServoMediaListBorrow use style::gecko_bindings::bindings::{RawServoMediaRule, RawServoMediaRuleBorrowed}; use style::gecko_bindings::bindings::{RawServoNamespaceRule, RawServoNamespaceRuleBorrowed}; use style::gecko_bindings::bindings::{RawServoPageRule, RawServoPageRuleBorrowed}; -use style::gecko_bindings::bindings::{RawServoRuleNodeBorrowed, RawServoRuleNodeStrong}; use style::gecko_bindings::bindings::{RawServoStyleSetBorrowed, RawServoStyleSetOwned}; use style::gecko_bindings::bindings::{RawServoStyleSheetBorrowed, ServoComputedValuesBorrowed}; use style::gecko_bindings::bindings::{RawServoStyleSheetStrong, ServoComputedValuesStrong}; @@ -84,7 +83,7 @@ use style::properties::SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP; use style::properties::animated_properties::{Animatable, AnimationValue, TransitionProperty}; use style::properties::parse_one_declaration; use style::restyle_hints::{self, RestyleHint}; -use style::rule_tree::{StrongRuleNode, StyleSource}; +use style::rule_tree::StyleSource; use style::selector_parser::PseudoElementCascadeType; use style::sequential; use style::shared_lock::{SharedRwLock, SharedRwLockReadGuard, StylesheetGuards, ToCssWithGuard, Locked}; @@ -990,42 +989,10 @@ pub extern "C" fn Servo_ComputedValues_GetForAnonymousBox(parent_style_or_null: .into_strong() } -// FIXME(emilio): Don't use pseudo_tag here, and pass the pseudo-element -// directly. -#[no_mangle] -pub extern "C" fn Servo_ResolveRuleNode(element: RawGeckoElementBorrowed, - pseudo_tag: *mut nsIAtom, - raw_data: RawServoStyleSetBorrowed) - -> RawServoRuleNodeStrong -{ - let element = GeckoElement(element); - let doc_data = PerDocumentStyleData::from_ffi(raw_data); - let guard = (*GLOBAL_STYLE_DATA).shared_lock.read(); - - let data = element.mutate_data().unwrap(); - let styles = match data.get_styles() { - Some(styles) => styles, - None => { - warn!("Calling Servo_ResolveRuleNode on unstyled element"); - return Strong::null() - } - }; - - let maybe_rules = if pseudo_tag.is_null() { - Some(styles.primary.rules.clone()) - } else { - get_pseudo_rule_node(&guard, element, pseudo_tag, styles, doc_data) - }; - - match maybe_rules { - Some(rule_node) => rule_node.into_strong(), - None => Strong::null(), - } -} - #[no_mangle] pub extern "C" fn Servo_ResolvePseudoStyle(element: RawGeckoElementBorrowed, - pseudo_tag: *mut nsIAtom, is_probe: bool, + pseudo_tag: *mut nsIAtom, + is_probe: bool, raw_data: RawServoStyleSetBorrowed) -> ServoComputedValuesStrong { @@ -1055,44 +1022,23 @@ pub extern "C" fn Servo_ResolvePseudoStyle(element: RawGeckoElementBorrowed, } #[no_mangle] -pub extern "C" fn Servo_HasAuthorSpecifiedRules(rule_node: RawServoRuleNodeBorrowed, - element: RawGeckoElementBorrowed, +pub extern "C" fn Servo_HasAuthorSpecifiedRules(element: RawGeckoElementBorrowed, rule_type_mask: u32, author_colors_allowed: bool) -> bool { let element = GeckoElement(element); - let guard = (*GLOBAL_STYLE_DATA).shared_lock.read(); - let guards = StylesheetGuards::same(&guard); - StrongRuleNode::from_ffi(&rule_node).has_author_specified_rules(element, - &guards, - rule_type_mask, - author_colors_allowed) -} + let data = element.borrow_data().unwrap(); + let primary_style = &data.styles().primary; -fn get_pseudo_rule_node(guard: &SharedRwLockReadGuard, - element: GeckoElement, - pseudo_tag: *mut nsIAtom, - styles: &ElementStyles, - doc_data: &PerDocumentStyleData) - -> Option<StrongRuleNode> -{ - let pseudo = PseudoElement::from_atom_unchecked(Atom::from(pseudo_tag), false); - match pseudo.cascade_type() { - PseudoElementCascadeType::Eager => styles.pseudos.get(&pseudo).map(|s| s.rules.clone()), - PseudoElementCascadeType::Precomputed => unreachable!("No anonymous boxes"), - PseudoElementCascadeType::Lazy => { - let d = doc_data.borrow_mut(); - let guards = StylesheetGuards::same(guard); + let guard = (*GLOBAL_STYLE_DATA).shared_lock.read(); + let guards = StylesheetGuards::same(&guard); - // FIXME(emilio): We should get the pseudo state here! - d.stylist.lazy_pseudo_rules(&guards, - &element, - &pseudo, - ElementState::empty()) - }, - } + primary_style.rules.has_author_specified_rules(element, + &guards, + rule_type_mask, + author_colors_allowed) } fn get_pseudo_style(guard: &SharedRwLockReadGuard, |