diff options
author | Oriol Brufau <obrufau@igalia.com> | 2024-04-22 09:06:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-22 07:06:36 +0000 |
commit | f9e154af5543063e4a168b92948d1009c73f2bf3 (patch) | |
tree | 49b20dd980cb773dd79e2d3a7e247740ec34fb09 /components/script/dom/cssgroupingrule.rs | |
parent | 67f239d1bab9e866539ea4ef76a1d40bcbeb7d53 (diff) | |
download | servo-f9e154af5543063e4a168b92948d1009c73f2bf3.tar.gz servo-f9e154af5543063e4a168b92948d1009c73f2bf3.zip |
Fix InsertRule to use the right CssRuleTypes (#32125)
`CSSRule::Type()` returns an u16 for CSSOM. `InsertRule()` was
incorrectly using this to create a `CssRuleTypes`.
Instead of `CssRuleTypes::from_bits(rule_type)`, it should be something
like `CssRuleTypes::from_bits(1 << rule_type)`.
However, that would only work when `Type()` provides an actual value,
which per https://drafts.csswg.org/cssom/#dom-cssrule-type only happens
for old rule types. New rule types just return 0.
Therefore, this patch changes the signature of `SpecificCSSRule::ty()`
to return the actual `CssRuleType`, and then `CSSRule::Type()` can zero
it out when necessary.
The fix is only relevant for CSS Nesting, which is currently disabled on
Servo, so no test is necessary.
<!-- Please describe your changes on the following line: -->
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by
`[X]` when the step is complete, and replace `___` with appropriate
data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes do not require tests because the fix is only
relevant for CSS Nesting, which is currently disabled
<!-- Also, please make sure that "Allow edits from maintainers" checkbox
is checked, so that we can help you if you get stuck somewhere along the
way.-->
<!-- Pull requests that do not address these steps are welcome, but they
will require additional verification as part of the review process. -->
Diffstat (limited to 'components/script/dom/cssgroupingrule.rs')
-rw-r--r-- | components/script/dom/cssgroupingrule.rs | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/components/script/dom/cssgroupingrule.rs b/components/script/dom/cssgroupingrule.rs index a84208f7c45..eb542c6205c 100644 --- a/components/script/dom/cssgroupingrule.rs +++ b/components/script/dom/cssgroupingrule.rs @@ -8,7 +8,6 @@ use style::shared_lock::{Locked, SharedRwLock}; use style::stylesheets::{CssRuleTypes, CssRules as StyleCssRules}; use crate::dom::bindings::codegen::Bindings::CSSGroupingRuleBinding::CSSGroupingRuleMethods; -use crate::dom::bindings::codegen::Bindings::CSSRuleBinding::CSSRule_Binding::CSSRuleMethods; use crate::dom::bindings::error::{ErrorResult, Fallible}; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::reflector::DomObject; @@ -69,7 +68,8 @@ impl CSSGroupingRuleMethods for CSSGroupingRule { // https://drafts.csswg.org/cssom/#dom-cssgroupingrule-insertrule fn InsertRule(&self, rule: DOMString, index: u32) -> Fallible<u32> { // TODO: this should accumulate the rule types of all ancestors. - let containing_rule_types = CssRuleTypes::from_bits(self.cssrule.Type().into()); + let rule_type = self.cssrule.as_specific().ty(); + let containing_rule_types = CssRuleTypes::from(rule_type); self.rulelist() .insert_rule(&rule, index, containing_rule_types) } |