refactor: add CanGc as argument to methods in CSSGroupingRule, CSSKeyframesRule, Crypto (#35743)

Signed-off-by: Yerkebulan Tulibergenov <yerkebulan@gmail.com>
This commit is contained in:
Yerkebulan Tulibergenov 2025-03-01 23:16:06 -08:00 committed by GitHub
parent 27970e1847
commit 67bd557f30
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 33 additions and 21 deletions

View file

@ -44,9 +44,9 @@ impl Crypto {
impl CryptoMethods<crate::DomTypeHolder> for Crypto { impl CryptoMethods<crate::DomTypeHolder> for Crypto {
/// <https://w3c.github.io/webcrypto/#dfn-Crypto-attribute-subtle> /// <https://w3c.github.io/webcrypto/#dfn-Crypto-attribute-subtle>
fn Subtle(&self) -> DomRoot<SubtleCrypto> { fn Subtle(&self, can_gc: CanGc) -> DomRoot<SubtleCrypto> {
self.subtle self.subtle
.or_init(|| SubtleCrypto::new(&self.global(), CanGc::note())) .or_init(|| SubtleCrypto::new(&self.global(), can_gc))
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]

View file

@ -39,14 +39,14 @@ impl CSSGroupingRule {
} }
} }
fn rulelist(&self) -> DomRoot<CSSRuleList> { fn rulelist(&self, can_gc: CanGc) -> DomRoot<CSSRuleList> {
let parent_stylesheet = self.upcast::<CSSRule>().parent_stylesheet(); let parent_stylesheet = self.upcast::<CSSRule>().parent_stylesheet();
self.rulelist.or_init(|| { self.rulelist.or_init(|| {
CSSRuleList::new( CSSRuleList::new(
self.global().as_window(), self.global().as_window(),
parent_stylesheet, parent_stylesheet,
RulesSource::Rules(self.rules.clone()), RulesSource::Rules(self.rules.clone()),
CanGc::note(), can_gc,
) )
}) })
} }
@ -62,13 +62,13 @@ impl CSSGroupingRule {
impl CSSGroupingRuleMethods<crate::DomTypeHolder> for CSSGroupingRule { impl CSSGroupingRuleMethods<crate::DomTypeHolder> for CSSGroupingRule {
// https://drafts.csswg.org/cssom/#dom-cssgroupingrule-cssrules // https://drafts.csswg.org/cssom/#dom-cssgroupingrule-cssrules
fn CssRules(&self) -> DomRoot<CSSRuleList> { fn CssRules(&self, can_gc: CanGc) -> DomRoot<CSSRuleList> {
// XXXManishearth check origin clean flag // XXXManishearth check origin clean flag
self.rulelist() self.rulelist(can_gc)
} }
// https://drafts.csswg.org/cssom/#dom-cssgroupingrule-insertrule // https://drafts.csswg.org/cssom/#dom-cssgroupingrule-insertrule
fn InsertRule(&self, rule: DOMString, index: u32) -> Fallible<u32> { fn InsertRule(&self, rule: DOMString, index: u32, can_gc: CanGc) -> Fallible<u32> {
// TODO: this should accumulate the rule types of all ancestors. // TODO: this should accumulate the rule types of all ancestors.
let rule_type = self.cssrule.as_specific().ty(); let rule_type = self.cssrule.as_specific().ty();
let containing_rule_types = CssRuleTypes::from(rule_type); let containing_rule_types = CssRuleTypes::from(rule_type);
@ -76,17 +76,17 @@ impl CSSGroupingRuleMethods<crate::DomTypeHolder> for CSSGroupingRule {
CssRuleType::Style | CssRuleType::Scope => Some(rule_type), CssRuleType::Style | CssRuleType::Scope => Some(rule_type),
_ => None, _ => None,
}; };
self.rulelist().insert_rule( self.rulelist(can_gc).insert_rule(
&rule, &rule,
index, index,
containing_rule_types, containing_rule_types,
parse_relative_rule_type, parse_relative_rule_type,
CanGc::note(), can_gc,
) )
} }
// https://drafts.csswg.org/cssom/#dom-cssgroupingrule-deleterule // https://drafts.csswg.org/cssom/#dom-cssgroupingrule-deleterule
fn DeleteRule(&self, index: u32) -> ErrorResult { fn DeleteRule(&self, index: u32, can_gc: CanGc) -> ErrorResult {
self.rulelist().remove_rule(index) self.rulelist(can_gc).remove_rule(index)
} }
} }

View file

@ -61,14 +61,14 @@ impl CSSKeyframesRule {
) )
} }
fn rulelist(&self) -> DomRoot<CSSRuleList> { fn rulelist(&self, can_gc: CanGc) -> DomRoot<CSSRuleList> {
self.rulelist.or_init(|| { self.rulelist.or_init(|| {
let parent_stylesheet = &self.upcast::<CSSRule>().parent_stylesheet(); let parent_stylesheet = &self.upcast::<CSSRule>().parent_stylesheet();
CSSRuleList::new( CSSRuleList::new(
self.global().as_window(), self.global().as_window(),
parent_stylesheet, parent_stylesheet,
RulesSource::Keyframes(self.keyframesrule.clone()), RulesSource::Keyframes(self.keyframesrule.clone()),
CanGc::note(), can_gc,
) )
}) })
} }
@ -94,12 +94,12 @@ impl CSSKeyframesRule {
impl CSSKeyframesRuleMethods<crate::DomTypeHolder> for CSSKeyframesRule { impl CSSKeyframesRuleMethods<crate::DomTypeHolder> for CSSKeyframesRule {
// https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules // https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules
fn CssRules(&self) -> DomRoot<CSSRuleList> { fn CssRules(&self, can_gc: CanGc) -> DomRoot<CSSRuleList> {
self.rulelist() self.rulelist(can_gc)
} }
// https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule // https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule
fn AppendRule(&self, rule: DOMString) { fn AppendRule(&self, rule: DOMString, can_gc: CanGc) {
let style_stylesheet = self.cssrule.parent_stylesheet().style_stylesheet(); let style_stylesheet = self.cssrule.parent_stylesheet().style_stylesheet();
let rule = Keyframe::parse( let rule = Keyframe::parse(
&rule, &rule,
@ -113,21 +113,21 @@ impl CSSKeyframesRuleMethods<crate::DomTypeHolder> for CSSKeyframesRule {
.write_with(&mut guard) .write_with(&mut guard)
.keyframes .keyframes
.push(rule); .push(rule);
self.rulelist().append_lazy_dom_rule(); self.rulelist(can_gc).append_lazy_dom_rule();
} }
} }
// https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule // https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule
fn DeleteRule(&self, selector: DOMString) { fn DeleteRule(&self, selector: DOMString, can_gc: CanGc) {
if let Some(idx) = self.find_rule(&selector) { if let Some(idx) = self.find_rule(&selector) {
let _ = self.rulelist().remove_rule(idx as u32); let _ = self.rulelist(can_gc).remove_rule(idx as u32);
} }
} }
// https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule // https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule
fn FindRule(&self, selector: DOMString) -> Option<DomRoot<CSSKeyframeRule>> { fn FindRule(&self, selector: DOMString, can_gc: CanGc) -> Option<DomRoot<CSSKeyframeRule>> {
self.find_rule(&selector) self.find_rule(&selector)
.and_then(|idx| self.rulelist().item(idx as u32)) .and_then(|idx| self.rulelist(can_gc).item(idx as u32))
.and_then(DomRoot::downcast) .and_then(DomRoot::downcast)
} }

View file

@ -87,6 +87,18 @@ DOMInterfaces = {
'canGc': ['GetSize'], 'canGc': ['GetSize'],
}, },
'CSSGroupingRule': {
'canGc': ['CssRules', 'DeleteRule', 'InsertRule'],
},
'CSSKeyframesRule': {
'canGc': ['AppendRule', 'CssRules', 'DeleteRule', 'FindRule'],
},
'Crypto': {
'canGc': ['Subtle'],
},
'CSSStyleDeclaration': { 'CSSStyleDeclaration': {
'canGc': ['RemoveProperty', 'SetCssText', 'GetPropertyValue', 'SetProperty', 'CssFloat', 'SetCssFloat'] 'canGc': ['RemoveProperty', 'SetCssText', 'GetPropertyValue', 'SetProperty', 'CssFloat', 'SetCssFloat']
}, },