aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/properties/declaration_block.rs86
1 files changed, 44 insertions, 42 deletions
diff --git a/components/style/properties/declaration_block.rs b/components/style/properties/declaration_block.rs
index 20bcb70f1dd..213d1df5431 100644
--- a/components/style/properties/declaration_block.rs
+++ b/components/style/properties/declaration_block.rs
@@ -470,54 +470,56 @@ impl PropertyDeclarationBlock {
if !definitely_new {
let mut index_to_remove = None;
for (i, slot) in self.declarations.iter_mut().enumerate() {
- if slot.id() == declaration.id() {
- let important = self.declarations_importance.get(i as u32);
- match (important, importance.important()) {
- (false, true) => {}
-
- (true, false) => {
- // For declarations set from the OM, less-important
- // declarations are overridden.
- if !matches!(source, DeclarationSource::CssOm) {
- return false
- }
- }
- _ => if *slot == declaration {
- return false;
+ if slot.id() != declaration.id() {
+ continue;
+ }
+
+ let important = self.declarations_importance.get(i as u32);
+ match (important, importance.important()) {
+ (false, true) => {}
+
+ (true, false) => {
+ // For declarations set from the OM, more-important
+ // declarations are overridden.
+ if !matches!(source, DeclarationSource::CssOm) {
+ return false
}
}
+ _ => if *slot == declaration {
+ return false;
+ }
+ }
- match source {
- // CSSOM preserves the declaration position, and
- // overrides importance.
- DeclarationSource::CssOm => {
- *slot = declaration;
- self.declarations_importance.set(i as u32, importance.important());
- return true;
- }
- DeclarationSource::Parsing => {
- // As a compatibility hack, specially on Android,
- // don't allow to override a prefixed webkit display
- // value with an unprefixed version from parsing
- // code.
- //
- // TODO(emilio): Unship.
- if let PropertyDeclaration::Display(old_display) = *slot {
- use properties::longhands::display::computed_value::T as display;
-
- if let PropertyDeclaration::Display(new_display) = declaration {
- if display::should_ignore_parsed_value(old_display, new_display) {
- return false;
- }
+ match source {
+ // CSSOM preserves the declaration position, and
+ // overrides importance.
+ DeclarationSource::CssOm => {
+ *slot = declaration;
+ self.declarations_importance.set(i as u32, importance.important());
+ return true;
+ }
+ DeclarationSource::Parsing => {
+ // As a compatibility hack, specially on Android,
+ // don't allow to override a prefixed webkit display
+ // value with an unprefixed version from parsing
+ // code.
+ //
+ // TODO(emilio): Unship.
+ if let PropertyDeclaration::Display(old_display) = *slot {
+ use properties::longhands::display::computed_value::T as display;
+
+ if let PropertyDeclaration::Display(new_display) = declaration {
+ if display::should_ignore_parsed_value(old_display, new_display) {
+ return false;
}
}
-
- // NOTE(emilio): We could avoid this and just override for
- // properties not affected by logical props, but it's not
- // clear it's worth it given the `definitely_new` check.
- index_to_remove = Some(i);
- break;
}
+
+ // NOTE(emilio): We could avoid this and just override for
+ // properties not affected by logical props, but it's not
+ // clear it's worth it given the `definitely_new` check.
+ index_to_remove = Some(i);
+ break;
}
}
}