mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
style: Dishonor display: -moz-box if -webkit-box was specified before.
Bug: 1407701
This commit is contained in:
parent
25c303ee62
commit
6d694a4bcd
2 changed files with 46 additions and 0 deletions
|
@ -500,6 +500,25 @@ impl PropertyDeclarationBlock {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
DeclarationSource::Parsing => {
|
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
|
// NOTE(emilio): We could avoid this and just override for
|
||||||
// properties not affected by logical props, but it's not
|
// properties not affected by logical props, but it's not
|
||||||
// clear it's worth it given the `definitely_new` check.
|
// clear it's worth it given the `definitely_new` check.
|
||||||
|
|
|
@ -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
|
/// Returns whether this "display" value is one of the types for
|
||||||
/// ruby.
|
/// ruby.
|
||||||
#[cfg(feature = "gecko")]
|
#[cfg(feature = "gecko")]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue