aboutsummaryrefslogtreecommitdiffstats
path: root/components/style/servo/selector_parser.rs
diff options
context:
space:
mode:
authorBoris Zbarsky <bzbarsky@mit.edu>2017-07-28 17:41:53 -0400
committerBoris Zbarsky <bzbarsky@mit.edu>2017-07-28 17:45:29 -0400
commit91d4956da58282f966a79ab685d288fdb908f45f (patch)
treefe5add7e1c17ebdf9bef01d5a722f7e901c94dbe /components/style/servo/selector_parser.rs
parent12a49dc0be8a8acd12440dd7191b349ca17de7c8 (diff)
downloadservo-91d4956da58282f966a79ab685d288fdb908f45f.tar.gz
servo-91d4956da58282f966a79ab685d288fdb908f45f.zip
Don't reconstruct the layout object when going from no pseudo to pseudo with no content for ::before and ::after.
Fixes Gecko bug 1376073. r=emilio
Diffstat (limited to 'components/style/servo/selector_parser.rs')
-rw-r--r--components/style/servo/selector_parser.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/components/style/servo/selector_parser.rs b/components/style/servo/selector_parser.rs
index ae47b993ebc..c88b4faa3ad 100644
--- a/components/style/servo/selector_parser.rs
+++ b/components/style/servo/selector_parser.rs
@@ -13,7 +13,9 @@ use dom::{OpaqueNode, TElement, TNode};
use element_state::ElementState;
use fnv::FnvHashMap;
use invalidation::element::element_wrapper::ElementSnapshot;
+use properties::ComputedValues;
use properties::PropertyFlags;
+use properties::longhands::display::computed_value as display;
use selector_parser::{AttrValue as SelectorAttrValue, ElementExt, PseudoElementCascadeType, SelectorParser};
use selectors::Element;
use selectors::attr::{AttrSelectorOperation, NamespaceConstraint, CaseSensitivity};
@@ -181,6 +183,21 @@ impl PseudoElement {
pub fn property_restriction(&self) -> Option<PropertyFlags> {
None
}
+
+ /// Whether this pseudo-element should actually exist if it has
+ /// the given styles.
+ pub fn should_exist(&self, style: &ComputedValues) -> bool
+ {
+ let display = style.get_box().clone_display();
+ if display == display::T::none {
+ return false;
+ }
+ if self.is_before_or_after() && style.ineffective_content_property() {
+ return false;
+ }
+
+ true
+ }
}
/// The type used for storing pseudo-class string arguments.