style: Don't apply containing shadow-host rules to NAC.

This is a regression from bug 1487856.

Differential Revision: https://phabricator.services.mozilla.com/D6700
This commit is contained in:
Emilio Cobos Álvarez 2018-09-24 22:41:39 +02:00
parent 426683cd4b
commit 2751df808b
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C

View file

@ -1134,7 +1134,7 @@ impl Stylist {
let rule_hash_target = element.rule_hash_target(); let rule_hash_target = element.rule_hash_target();
let matches_user_rules = rule_hash_target.matches_user_and_author_rules(); let matches_user_and_author_rules = rule_hash_target.matches_user_and_author_rules();
// Normal user-agent rules. // Normal user-agent rules.
if let Some(map) = self if let Some(map) = self
@ -1162,7 +1162,7 @@ impl Stylist {
// rule_hash_target.matches_user_and_author_rules()) // rule_hash_target.matches_user_and_author_rules())
// //
// Which may be more what you would probably expect. // Which may be more what you would probably expect.
if matches_user_rules { if matches_user_and_author_rules {
// User normal rules. // User normal rules.
if let Some(map) = self.cascade_data.user.normal_rules(pseudo_element) { if let Some(map) = self.cascade_data.user.normal_rules(pseudo_element) {
map.get_all_matching_rules( map.get_all_matching_rules(
@ -1204,11 +1204,15 @@ impl Stylist {
return; return;
} }
let mut match_document_author_rules = matches_user_rules; let mut match_document_author_rules = matches_user_and_author_rules;
let mut shadow_cascade_order = 0; let mut shadow_cascade_order = 0;
// XBL / Shadow DOM rules, which are author rules too. // XBL / Shadow DOM rules, which are author rules too.
if let Some(shadow) = rule_hash_target.shadow_root() { if let Some(shadow) = rule_hash_target.shadow_root() {
debug_assert!(
matches_user_and_author_rules,
"NAC should not be a shadow host"
);
if let Some(map) = shadow if let Some(map) = shadow
.style_data() .style_data()
.and_then(|data| data.host_rules(pseudo_element)) .and_then(|data| data.host_rules(pseudo_element))
@ -1233,6 +1237,10 @@ impl Stylist {
let mut slots = SmallVec::<[_; 3]>::new(); let mut slots = SmallVec::<[_; 3]>::new();
let mut current = rule_hash_target.assigned_slot(); let mut current = rule_hash_target.assigned_slot();
while let Some(slot) = current { while let Some(slot) = current {
debug_assert!(
matches_user_and_author_rules,
"We should not slot NAC anywhere"
);
slots.push(slot); slots.push(slot);
current = slot.assigned_slot(); current = slot.assigned_slot();
} }
@ -1258,6 +1266,7 @@ impl Stylist {
} }
} }
if matches_user_and_author_rules {
let mut current_containing_shadow = rule_hash_target.containing_shadow(); let mut current_containing_shadow = rule_hash_target.containing_shadow();
while let Some(containing_shadow) = current_containing_shadow { while let Some(containing_shadow) = current_containing_shadow {
let cascade_data = containing_shadow.style_data(); let cascade_data = containing_shadow.style_data();
@ -1308,6 +1317,7 @@ impl Stylist {
current_containing_shadow = host.containing_shadow(); current_containing_shadow = host.containing_shadow();
match_document_author_rules = current_containing_shadow.is_none(); match_document_author_rules = current_containing_shadow.is_none();
} }
}
let cut_xbl_binding_inheritance = let cut_xbl_binding_inheritance =
element.each_xbl_cascade_data(|cascade_data, quirks_mode| { element.each_xbl_cascade_data(|cascade_data, quirks_mode| {