diff options
Diffstat (limited to 'components/script/dom/csskeyframesrule.rs')
-rw-r--r-- | components/script/dom/csskeyframesrule.rs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/components/script/dom/csskeyframesrule.rs b/components/script/dom/csskeyframesrule.rs index 330b1be3627..d17eeeb51b5 100644 --- a/components/script/dom/csskeyframesrule.rs +++ b/components/script/dom/csskeyframesrule.rs @@ -16,24 +16,23 @@ use dom::cssrulelist::{CSSRuleList, RulesSource}; use dom::cssstylesheet::CSSStyleSheet; use dom::window::Window; use dom_struct::dom_struct; -use parking_lot::RwLock; use servo_atoms::Atom; use std::sync::Arc; use style::keyframes::{Keyframe, KeyframeSelector}; use style::parser::ParserContextExtraData; -use style::shared_lock::ToCssWithGuard; +use style::shared_lock::{Locked, ToCssWithGuard}; use style::stylesheets::KeyframesRule; #[dom_struct] pub struct CSSKeyframesRule { cssrule: CSSRule, #[ignore_heap_size_of = "Arc"] - keyframesrule: Arc<RwLock<KeyframesRule>>, + keyframesrule: Arc<Locked<KeyframesRule>>, rulelist: MutNullableJS<CSSRuleList>, } impl CSSKeyframesRule { - fn new_inherited(parent_stylesheet: &CSSStyleSheet, keyframesrule: Arc<RwLock<KeyframesRule>>) + fn new_inherited(parent_stylesheet: &CSSStyleSheet, keyframesrule: Arc<Locked<KeyframesRule>>) -> CSSKeyframesRule { CSSKeyframesRule { cssrule: CSSRule::new_inherited(parent_stylesheet), @@ -44,7 +43,7 @@ impl CSSKeyframesRule { #[allow(unrooted_must_root)] pub fn new(window: &Window, parent_stylesheet: &CSSStyleSheet, - keyframesrule: Arc<RwLock<KeyframesRule>>) -> Root<CSSKeyframesRule> { + keyframesrule: Arc<Locked<KeyframesRule>>) -> Root<CSSKeyframesRule> { reflect_dom_object(box CSSKeyframesRule::new_inherited(parent_stylesheet, keyframesrule), window, CSSKeyframesRuleBinding::Wrap) @@ -63,9 +62,10 @@ impl CSSKeyframesRule { fn find_rule(&self, selector: &str) -> Option<usize> { let mut input = Parser::new(selector); if let Ok(sel) = KeyframeSelector::parse(&mut input) { + let guard = self.cssrule.shared_lock().read(); // This finds the *last* element matching a selector // because that's the rule that applies. Thus, rposition - self.keyframesrule.read() + self.keyframesrule.read_with(&guard) .keyframes.iter().rposition(|frame| { frame.read().selector == sel }) @@ -86,7 +86,8 @@ impl CSSKeyframesRuleMethods for CSSKeyframesRule { let rule = Keyframe::parse(&rule, self.cssrule.parent_stylesheet().style_stylesheet(), ParserContextExtraData::default()); if let Ok(rule) = rule { - self.keyframesrule.write().keyframes.push(rule); + let mut guard = self.cssrule.shared_lock().write(); + self.keyframesrule.write_with(&mut guard).keyframes.push(rule); self.rulelist().append_lazy_dom_rule(); } } @@ -107,7 +108,8 @@ impl CSSKeyframesRuleMethods for CSSKeyframesRule { // https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name fn Name(&self) -> DOMString { - DOMString::from(&*self.keyframesrule.read().name) + let guard = self.cssrule.shared_lock().read(); + DOMString::from(&*self.keyframesrule.read_with(&guard).name) } // https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name @@ -122,7 +124,8 @@ impl CSSKeyframesRuleMethods for CSSKeyframesRule { "none" => return Err(Error::Syntax), _ => () } - self.keyframesrule.write().name = Atom::from(value); + let mut guard = self.cssrule.shared_lock().write(); + self.keyframesrule.write_with(&mut guard).name = Atom::from(value); Ok(()) } } @@ -135,7 +138,7 @@ impl SpecificCSSRule for CSSKeyframesRule { fn get_css(&self) -> DOMString { let guard = self.cssrule.shared_lock().read(); - self.keyframesrule.read().to_css_string(&guard).into() + self.keyframesrule.read_with(&guard).to_css_string(&guard).into() } fn deparent_children(&self) { |