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

Side by Side Diff: Source/core/dom/Element.cpp

Issue 208933003: Remove SiblingRuleHelper (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Tighten types to ContainerNode Created 6 years, 9 months 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/Element.h ('k') | Source/core/dom/ElementRareData.h » ('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 Peter Kelly (pmk@post.com) 4 * (C) 2001 Peter Kelly (pmk@post.com)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * (C) 2007 David Smith (catfish.man@gmail.com) 6 * (C) 2007 David Smith (catfish.man@gmail.com)
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved.
8 * (C) 2007 Eric Seidel (eric@webkit.org) 8 * (C) 2007 Eric Seidel (eric@webkit.org)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 #include "core/dom/MutationObserverInterestGroup.h" 56 #include "core/dom/MutationObserverInterestGroup.h"
57 #include "core/dom/MutationRecord.h" 57 #include "core/dom/MutationRecord.h"
58 #include "core/dom/NamedNodeMap.h" 58 #include "core/dom/NamedNodeMap.h"
59 #include "core/dom/NodeRenderStyle.h" 59 #include "core/dom/NodeRenderStyle.h"
60 #include "core/dom/PostAttachCallbacks.h" 60 #include "core/dom/PostAttachCallbacks.h"
61 #include "core/dom/PresentationAttributeStyle.h" 61 #include "core/dom/PresentationAttributeStyle.h"
62 #include "core/dom/PseudoElement.h" 62 #include "core/dom/PseudoElement.h"
63 #include "core/dom/RenderTreeBuilder.h" 63 #include "core/dom/RenderTreeBuilder.h"
64 #include "core/dom/ScriptableDocumentParser.h" 64 #include "core/dom/ScriptableDocumentParser.h"
65 #include "core/dom/SelectorQuery.h" 65 #include "core/dom/SelectorQuery.h"
66 #include "core/dom/SiblingRuleHelper.h"
67 #include "core/dom/Text.h" 66 #include "core/dom/Text.h"
68 #include "core/dom/custom/CustomElement.h" 67 #include "core/dom/custom/CustomElement.h"
69 #include "core/dom/custom/CustomElementRegistrationContext.h" 68 #include "core/dom/custom/CustomElementRegistrationContext.h"
70 #include "core/dom/shadow/InsertionPoint.h" 69 #include "core/dom/shadow/InsertionPoint.h"
71 #include "core/dom/shadow/ShadowRoot.h" 70 #include "core/dom/shadow/ShadowRoot.h"
72 #include "core/editing/FrameSelection.h" 71 #include "core/editing/FrameSelection.h"
73 #include "core/editing/TextIterator.h" 72 #include "core/editing/TextIterator.h"
74 #include "core/editing/htmlediting.h" 73 #include "core/editing/htmlediting.h"
75 #include "core/editing/markup.h" 74 #include "core/editing/markup.h"
76 #include "core/events/EventDispatcher.h" 75 #include "core/events/EventDispatcher.h"
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 return static_cast<ElementRareData*>(rareData()); 222 return static_cast<ElementRareData*>(rareData());
224 } 223 }
225 224
226 inline ElementRareData& Element::ensureElementRareData() 225 inline ElementRareData& Element::ensureElementRareData()
227 { 226 {
228 return static_cast<ElementRareData&>(ensureRareData()); 227 return static_cast<ElementRareData&>(ensureRareData());
229 } 228 }
230 229
231 bool Element::hasElementFlagInternal(ElementFlags mask) const 230 bool Element::hasElementFlagInternal(ElementFlags mask) const
232 { 231 {
233 ASSERT(hasRareData()); 232 return elementRareData()->hasElementFlag(mask);
234 return elementRareData()->hasFlag(mask);
235 } 233 }
236 234
237 void Element::setElementFlag(ElementFlags mask, bool value) 235 void Element::setElementFlag(ElementFlags mask, bool value)
238 { 236 {
239 if (!hasRareData() && !value) 237 if (!hasRareData() && !value)
240 return; 238 return;
241 ensureElementRareData().setFlag(mask, value); 239 ensureElementRareData().setElementFlag(mask, value);
242 } 240 }
243 241
244 void Element::clearElementFlag(ElementFlags mask) 242 void Element::clearElementFlag(ElementFlags mask)
245 { 243 {
246 if (!hasRareData()) 244 if (!hasRareData())
247 return; 245 return;
248 elementRareData()->clearFlag(mask); 246 elementRareData()->clearElementFlag(mask);
249 } 247 }
250 248
251 void Element::clearTabIndexExplicitlyIfNeeded() 249 void Element::clearTabIndexExplicitlyIfNeeded()
252 { 250 {
253 if (hasRareData()) 251 if (hasRareData())
254 elementRareData()->clearTabIndexExplicitly(); 252 elementRareData()->clearTabIndexExplicitly();
255 } 253 }
256 254
257 void Element::setTabIndexExplicitly(short tabIndex) 255 void Element::setTabIndexExplicitly(short tabIndex)
258 { 256 {
(...skipping 1157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1416 { 1414 {
1417 ASSERT(document().inStyleRecalc()); 1415 ASSERT(document().inStyleRecalc());
1418 1416
1419 StyleResolverParentPusher parentPusher(*this); 1417 StyleResolverParentPusher parentPusher(*this);
1420 1418
1421 // We've already been through detach when doing an attach, but we might 1419 // We've already been through detach when doing an attach, but we might
1422 // need to clear any state that's been added since then. 1420 // need to clear any state that's been added since then.
1423 if (hasRareData() && styleChangeType() == NeedsReattachStyleChange) { 1421 if (hasRareData() && styleChangeType() == NeedsReattachStyleChange) {
1424 ElementRareData* data = elementRareData(); 1422 ElementRareData* data = elementRareData();
1425 data->clearComputedStyle(); 1423 data->clearComputedStyle();
1426 data->resetDynamicRestyleObservations(); 1424 data->clearRestyleFlags();
1427 // Only clear the style state if we're not going to reuse the style from recalcStyle. 1425 // Only clear the style state if we're not going to reuse the style from recalcStyle.
1428 if (!context.resolvedStyle) 1426 if (!context.resolvedStyle)
1429 data->resetStyleState(); 1427 data->resetStyleState();
1430 } 1428 }
1431 1429
1432 RenderTreeBuilder(this, context.resolvedStyle).createRendererForElementIfNee ded(); 1430 RenderTreeBuilder(this, context.resolvedStyle).createRendererForElementIfNee ded();
1433 1431
1434 addCallbackSelectors(); 1432 addCallbackSelectors();
1435 1433
1436 createPseudoElementIfNeeded(BEFORE); 1434 createPseudoElementIfNeeded(BEFORE);
1437 1435
1438 // When a shadow root exists, it does the work of attaching the children. 1436 // When a shadow root exists, it does the work of attaching the children.
1439 if (ElementShadow* shadow = this->shadow()) { 1437 if (ElementShadow* shadow = this->shadow()) {
1440 parentPusher.push(); 1438 parentPusher.push();
1441 shadow->attach(context); 1439 shadow->attach(context);
1442 } else if (firstChild()) { 1440 } else if (firstChild()) {
1443 parentPusher.push(); 1441 parentPusher.push();
1444 } 1442 }
1445 1443
1446 ContainerNode::attach(context); 1444 ContainerNode::attach(context);
1447 1445
1448 createPseudoElementIfNeeded(AFTER); 1446 createPseudoElementIfNeeded(AFTER);
1449 createPseudoElementIfNeeded(BACKDROP); 1447 createPseudoElementIfNeeded(BACKDROP);
1450 1448
1451 if (hasRareData()) { 1449 if (hasRareData()) {
1452 ElementRareData* data = elementRareData(); 1450 ElementRareData* data = elementRareData();
1453 if (data->hasFlag(NeedsFocusAppearanceUpdateSoonAfterAttach)) { 1451 if (data->hasElementFlag(NeedsFocusAppearanceUpdateSoonAfterAttach)) {
1454 if (isFocusable() && document().focusedElement() == this) 1452 if (isFocusable() && document().focusedElement() == this)
1455 document().updateFocusAppearanceSoon(false /* don't restore sele ction */); 1453 document().updateFocusAppearanceSoon(false /* don't restore sele ction */);
1456 data->clearFlag(NeedsFocusAppearanceUpdateSoonAfterAttach); 1454 data->clearElementFlag(NeedsFocusAppearanceUpdateSoonAfterAttach);
1457 } 1455 }
1458 if (!renderer()) { 1456 if (!renderer()) {
1459 if (ActiveAnimations* activeAnimations = data->activeAnimations()) { 1457 if (ActiveAnimations* activeAnimations = data->activeAnimations()) {
1460 activeAnimations->cssAnimations().cancel(); 1458 activeAnimations->cssAnimations().cancel();
1461 activeAnimations->setAnimationStyleChange(false); 1459 activeAnimations->setAnimationStyleChange(false);
1462 } 1460 }
1463 } 1461 }
1464 } 1462 }
1465 1463
1466 InspectorInstrumentation::didRecalculateStyleForElement(this); 1464 InspectorInstrumentation::didRecalculateStyleForElement(this);
1467 } 1465 }
1468 1466
1469 void Element::detach(const AttachContext& context) 1467 void Element::detach(const AttachContext& context)
1470 { 1468 {
1471 RenderWidget::UpdateSuspendScope suspendWidgetHierarchyUpdates; 1469 RenderWidget::UpdateSuspendScope suspendWidgetHierarchyUpdates;
1472 cancelFocusAppearanceUpdate(); 1470 cancelFocusAppearanceUpdate();
1473 removeCallbackSelectors(); 1471 removeCallbackSelectors();
1474 if (hasRareData()) { 1472 if (hasRareData()) {
1475 ElementRareData* data = elementRareData(); 1473 ElementRareData* data = elementRareData();
1476 data->clearPseudoElements(); 1474 data->clearPseudoElements();
1477 1475
1478 // attach() will perform the below steps for us when inside recalcStyle. 1476 // attach() will perform the below steps for us when inside recalcStyle.
1479 if (!document().inStyleRecalc()) { 1477 if (!document().inStyleRecalc()) {
1480 data->resetStyleState(); 1478 data->resetStyleState();
1481 data->clearComputedStyle(); 1479 data->clearComputedStyle();
1482 data->resetDynamicRestyleObservations(); 1480 data->clearRestyleFlags();
1483 } 1481 }
1484 1482
1485 if (ActiveAnimations* activeAnimations = data->activeAnimations()) { 1483 if (ActiveAnimations* activeAnimations = data->activeAnimations()) {
1486 if (context.performingReattach) { 1484 if (context.performingReattach) {
1487 // FIXME: We call detach from withing style recalc, so compositi ngState is not up to date. 1485 // FIXME: We call detach from withing style recalc, so compositi ngState is not up to date.
1488 // https://code.google.com/p/chromium/issues/detail?id=339847 1486 // https://code.google.com/p/chromium/issues/detail?id=339847
1489 DisableCompositingQueryAsserts disabler; 1487 DisableCompositingQueryAsserts disabler;
1490 1488
1491 // FIXME: restart compositor animations rather than pull back to the main thread 1489 // FIXME: restart compositor animations rather than pull back to the main thread
1492 activeAnimations->cancelAnimationOnCompositor(); 1490 activeAnimations->cancelAnimationOnCompositor();
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 if (root->shouldCallRecalcStyle(change)) { 1672 if (root->shouldCallRecalcStyle(change)) {
1675 parentPusher.push(); 1673 parentPusher.push();
1676 root->recalcStyle(change); 1674 root->recalcStyle(change);
1677 } 1675 }
1678 } 1676 }
1679 } 1677 }
1680 1678
1681 updatePseudoElement(BEFORE, change); 1679 updatePseudoElement(BEFORE, change);
1682 1680
1683 if (change < Force && hasRareData() && childNeedsStyleRecalc()) 1681 if (change < Force && hasRareData() && childNeedsStyleRecalc())
1684 SiblingRuleHelper(this).checkForChildrenAdjacentRuleChanges(); 1682 checkForChildrenAdjacentRuleChanges();
1685 1683
1686 if (change > UpdatePseudoElements || childNeedsStyleRecalc()) { 1684 if (change > UpdatePseudoElements || childNeedsStyleRecalc()) {
1687 // This loop is deliberately backwards because we use insertBefore in th e rendering tree, and want to avoid 1685 // This loop is deliberately backwards because we use insertBefore in th e rendering tree, and want to avoid
1688 // a potentially n^2 loop to find the insertion point while resolving st yle. Having us start from the last 1686 // a potentially n^2 loop to find the insertion point while resolving st yle. Having us start from the last
1689 // child and work our way back means in the common case, we'll find the insertion point in O(1) time. 1687 // child and work our way back means in the common case, we'll find the insertion point in O(1) time.
1690 // See crbug.com/288225 1688 // See crbug.com/288225
1691 StyleResolver& styleResolver = document().ensureStyleResolver(); 1689 StyleResolver& styleResolver = document().ensureStyleResolver();
1692 Text* lastTextNode = 0; 1690 Text* lastTextNode = 0;
1693 for (Node* child = lastChild(); child; child = child->previousSibling()) { 1691 for (Node* child = lastChild(); child; child = child->previousSibling()) {
1694 if (child->isTextNode()) { 1692 if (child->isTextNode()) {
(...skipping 1726 matching lines...) Expand 10 before | Expand all | Expand 10 after
3421 // Before doing so, we need to resolve issues in HTMLSelectElement::recalcLi stItems 3419 // Before doing so, we need to resolve issues in HTMLSelectElement::recalcLi stItems
3422 // and RenderMenuList::setText. See also https://bugs.webkit.org/show_bug.cg i?id=88405 3420 // and RenderMenuList::setText. See also https://bugs.webkit.org/show_bug.cg i?id=88405
3423 if (isHTMLOptionElement(*this) || isHTMLOptGroupElement(*this)) 3421 if (isHTMLOptionElement(*this) || isHTMLOptGroupElement(*this))
3424 return false; 3422 return false;
3425 if (FullscreenElementStack::isActiveFullScreenElement(this)) 3423 if (FullscreenElementStack::isActiveFullScreenElement(this))
3426 return false; 3424 return false;
3427 return true; 3425 return true;
3428 } 3426 }
3429 3427
3430 } // namespace WebCore 3428 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/dom/Element.h ('k') | Source/core/dom/ElementRareData.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698