Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(371)

Side by Side Diff: third_party/WebKit/Source/core/dom/ContainerNode.cpp

Issue 1503993002: Don't early return on SubtreeStyleChange for scheduling invalidations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove-clear-invalidation-set-20151207
Patch Set: Rebased Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/dom/Element.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 1072
1073 // This is used by FrameSelection to denote when the active-state of the page ha s changed 1073 // This is used by FrameSelection to denote when the active-state of the page ha s changed
1074 // independent of the focused element changing. 1074 // independent of the focused element changing.
1075 void ContainerNode::focusStateChanged() 1075 void ContainerNode::focusStateChanged()
1076 { 1076 {
1077 // If we're just changing the window's active state and the focused node has no 1077 // If we're just changing the window's active state and the focused node has no
1078 // layoutObject we can just ignore the state change. 1078 // layoutObject we can just ignore the state change.
1079 if (!layoutObject()) 1079 if (!layoutObject())
1080 return; 1080 return;
1081 1081
1082 if (styleChangeType() < SubtreeStyleChange) { 1082 if (computedStyle()->affectedByFocus() && computedStyle()->hasPseudoStyle(FI RST_LETTER))
1083 if (computedStyle()->affectedByFocus() && computedStyle()->hasPseudoStyl e(FIRST_LETTER)) 1083 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::cre ateWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Focus));
1084 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing: :createWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Focus )); 1084 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedByFoc us())
1085 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedB yFocus()) 1085 toElement(this)->pseudoStateChanged(CSSSelector::PseudoFocus);
1086 toElement(this)->pseudoStateChanged(CSSSelector::PseudoFocus); 1086 else if (computedStyle()->affectedByFocus())
1087 else if (computedStyle()->affectedByFocus()) 1087 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::creat eWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Focus));
1088 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::c reateWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Focus)) ;
1089 }
1090 1088
1091 LayoutTheme::theme().controlStateChanged(*layoutObject(), FocusControlState) ; 1089 LayoutTheme::theme().controlStateChanged(*layoutObject(), FocusControlState) ;
1092 } 1090 }
1093 1091
1094 void ContainerNode::setFocus(bool received) 1092 void ContainerNode::setFocus(bool received)
1095 { 1093 {
1096 // Recurse up author shadow trees to mark shadow hosts if it matches :focus. 1094 // Recurse up author shadow trees to mark shadow hosts if it matches :focus.
1097 // TODO(kochi): Handle UA shadows which marks multiple nodes as focused such as 1095 // TODO(kochi): Handle UA shadows which marks multiple nodes as focused such as
1098 // <input type="date"> the same way as author shadow. 1096 // <input type="date"> the same way as author shadow.
1099 if (ShadowRoot* root = containingShadowRoot()) { 1097 if (ShadowRoot* root = containingShadowRoot()) {
(...skipping 27 matching lines...) Expand all
1127 1125
1128 void ContainerNode::setActive(bool down) 1126 void ContainerNode::setActive(bool down)
1129 { 1127 {
1130 if (down == active()) 1128 if (down == active())
1131 return; 1129 return;
1132 1130
1133 Node::setActive(down); 1131 Node::setActive(down);
1134 1132
1135 // FIXME: Why does this not need to handle the display: none transition like :hover does? 1133 // FIXME: Why does this not need to handle the display: none transition like :hover does?
1136 if (layoutObject()) { 1134 if (layoutObject()) {
1137 if (styleChangeType() < SubtreeStyleChange) { 1135 if (computedStyle()->affectedByActive() && computedStyle()->hasPseudoSty le(FIRST_LETTER))
1138 if (computedStyle()->affectedByActive() && computedStyle()->hasPseud oStyle(FIRST_LETTER)) 1136 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing: :createWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Activ e));
1139 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTrac ing::createWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::A ctive)); 1137 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedB yActive())
1140 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffec tedByActive()) 1138 toElement(this)->pseudoStateChanged(CSSSelector::PseudoActive);
1141 toElement(this)->pseudoStateChanged(CSSSelector::PseudoActive); 1139 else if (computedStyle()->affectedByActive())
1142 else if (computedStyle()->affectedByActive()) 1140 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::c reateWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Active) );
1143 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracin g::createWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Act ive));
1144 }
1145 1141
1146 LayoutTheme::theme().controlStateChanged(*layoutObject(), PressedControl State); 1142 LayoutTheme::theme().controlStateChanged(*layoutObject(), PressedControl State);
1147 } 1143 }
1148 } 1144 }
1149 1145
1150 void ContainerNode::setHovered(bool over) 1146 void ContainerNode::setHovered(bool over)
1151 { 1147 {
1152 if (over == hovered()) 1148 if (over == hovered())
1153 return; 1149 return;
1154 1150
1155 Node::setHovered(over); 1151 Node::setHovered(over);
1156 1152
1157 // If :hover sets display: none we lose our hover but still need to recalc o ur style. 1153 // If :hover sets display: none we lose our hover but still need to recalc o ur style.
1158 if (!layoutObject()) { 1154 if (!layoutObject()) {
1159 if (over) 1155 if (over)
1160 return; 1156 return;
1161 if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedByHove r()) 1157 if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedByHove r())
1162 toElement(this)->pseudoStateChanged(CSSSelector::PseudoHover); 1158 toElement(this)->pseudoStateChanged(CSSSelector::PseudoHover);
1163 else 1159 else
1164 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::c reateWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Hover)) ; 1160 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::c reateWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Hover)) ;
1165 return; 1161 return;
1166 } 1162 }
1167 1163
1168 if (styleChangeType() < SubtreeStyleChange) { 1164 if (computedStyle()->affectedByHover() && computedStyle()->hasPseudoStyle(FI RST_LETTER))
1169 if (computedStyle()->affectedByHover() && computedStyle()->hasPseudoStyl e(FIRST_LETTER)) 1165 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::cre ateWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Hover));
1170 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing: :createWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Hover )); 1166 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedByHov er())
1171 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedB yHover()) 1167 toElement(this)->pseudoStateChanged(CSSSelector::PseudoHover);
1172 toElement(this)->pseudoStateChanged(CSSSelector::PseudoHover); 1168 else if (computedStyle()->affectedByHover())
1173 else if (computedStyle()->affectedByHover()) 1169 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::creat eWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Hover));
1174 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::c reateWithExtraData(StyleChangeReason::PseudoClass, StyleChangeExtraData::Hover)) ;
1175 }
1176 1170
1177 LayoutTheme::theme().controlStateChanged(*layoutObject(), HoverControlState) ; 1171 LayoutTheme::theme().controlStateChanged(*layoutObject(), HoverControlState) ;
1178 } 1172 }
1179 1173
1180 PassRefPtrWillBeRawPtr<HTMLCollection> ContainerNode::children() 1174 PassRefPtrWillBeRawPtr<HTMLCollection> ContainerNode::children()
1181 { 1175 {
1182 return ensureCachedCollection<HTMLCollection>(NodeChildren); 1176 return ensureCachedCollection<HTMLCollection>(NodeChildren);
1183 } 1177 }
1184 1178
1185 unsigned ContainerNode::countChildren() const 1179 unsigned ContainerNode::countChildren() const
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 return true; 1522 return true;
1529 1523
1530 if (node->isElementNode() && toElement(node)->shadow()) 1524 if (node->isElementNode() && toElement(node)->shadow())
1531 return true; 1525 return true;
1532 1526
1533 return false; 1527 return false;
1534 } 1528 }
1535 #endif 1529 #endif
1536 1530
1537 } // namespace blink 1531 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/dom/Element.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698