Skip to content

Commit

Permalink
style: Dishonor display: -moz-box if -webkit-box was specified before.
Browse files Browse the repository at this point in the history
Bug: 1407701
  • Loading branch information
emilio committed Oct 14, 2017
1 parent 25c303e commit 6d694a4
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
19 changes: 19 additions & 0 deletions components/style/properties/declaration_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,25 @@ impl PropertyDeclarationBlock {
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;

let new_display = match declaration {
PropertyDeclaration::Display(new_display) => new_display,
_ => unreachable!("How could the declaration id be the same?"),
};

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.
Expand Down
27 changes: 27 additions & 0 deletions components/style/properties/longhand/box.mako.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,33 @@
)
}

/// Whether `new_display` should be ignored, given a previous
/// `old_display` value.
///
/// This is used to ignore `display: -moz-box` declarations after an
/// equivalent `display: -webkit-box` declaration, since the former
/// has a vastly different meaning. See bug 1107378 and bug 1407701.
///
/// FIXME(emilio): This is a pretty decent hack, we should try to
/// remove it.
pub fn should_ignore_parsed_value(
_old_display: Self,
_new_display: Self,
) -> bool {
#[cfg(feature = "gecko")]
{
match (_old_display, _new_display) {
(T::_webkit_box, T::_moz_box) |
(T::_webkit_inline_box, T::_moz_inline_box) => {
return true;
}
_ => {},
}
}

return false;
}

/// Returns whether this "display" value is one of the types for
/// ruby.
#[cfg(feature = "gecko")]
Expand Down

0 comments on commit 6d694a4

Please sign in to comment.