mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
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. -->
This commit is contained in:
parent
67f239d1ba
commit
f9e154af55
12 changed files with 42 additions and 41 deletions
|
@ -6,7 +6,7 @@ use std::cell::Cell;
|
|||
|
||||
use dom_struct::dom_struct;
|
||||
use style::shared_lock::SharedRwLock;
|
||||
use style::stylesheets::CssRule as StyleCssRule;
|
||||
use style::stylesheets::{CssRule as StyleCssRule, CssRuleType};
|
||||
|
||||
use crate::dom::bindings::codegen::Bindings::CSSRuleBinding::CSSRuleMethods;
|
||||
use crate::dom::bindings::inheritance::Castable;
|
||||
|
@ -147,7 +147,14 @@ impl CSSRule {
|
|||
impl CSSRuleMethods for CSSRule {
|
||||
// https://drafts.csswg.org/cssom/#dom-cssrule-type
|
||||
fn Type(&self) -> u16 {
|
||||
self.as_specific().ty()
|
||||
let rule_type = self.as_specific().ty() as u16;
|
||||
// Per https://drafts.csswg.org/cssom/#dom-cssrule-type for constants > 15
|
||||
// we return 0.
|
||||
if rule_type > 15 {
|
||||
0
|
||||
} else {
|
||||
rule_type
|
||||
}
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom/#dom-cssrule-parentstylesheet
|
||||
|
@ -171,7 +178,7 @@ impl CSSRuleMethods for CSSRule {
|
|||
}
|
||||
|
||||
pub trait SpecificCSSRule {
|
||||
fn ty(&self) -> u16;
|
||||
fn ty(&self) -> CssRuleType;
|
||||
fn get_css(&self) -> DOMString;
|
||||
/// Remove parentStylesheet from all transitive children
|
||||
fn deparent_children(&self) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue