Changeset 154903 in webkit
- Timestamp:
- Aug 30, 2013, 11:43:29 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r154901 r154903 1 2013-08-30 Antti Koivisto <antti@apple.com> 2 3 Use Element& in StyleResolveTree 4 https://bugs.webkit.org/show_bug.cgi?id=120540 5 6 Reviewed by Andreas Kling. 7 8 * dom/ContainerNode.cpp: 9 (WebCore::attachChild): 10 (WebCore::detachChild): 11 * dom/Document.cpp: 12 (WebCore::Document::recalcStyle): 13 (WebCore::Document::createRenderTree): 14 (WebCore::Document::detach): 15 * dom/Element.cpp: 16 (WebCore::Element::lazyReattach): 17 (WebCore::Element::updateExistingPseudoElement): 18 (WebCore::Element::createPseudoElementIfNeeded): 19 (WebCore::disconnectPseudoElement): 20 * dom/ShadowRoot.cpp: 21 (WebCore::ShadowRoot::setResetStyleInheritance): 22 * html/HTMLDetailsElement.cpp: 23 (WebCore::HTMLDetailsElement::parseAttribute): 24 * html/HTMLInputElement.cpp: 25 (WebCore::HTMLInputElement::updateType): 26 (WebCore::HTMLInputElement::parseAttribute): 27 * html/HTMLObjectElement.cpp: 28 (WebCore::HTMLObjectElement::renderFallbackContent): 29 * html/HTMLPlugInImageElement.cpp: 30 (WebCore::HTMLPlugInImageElement::willRecalcStyle): 31 (WebCore::HTMLPlugInImageElement::documentWillSuspendForPageCache): 32 (WebCore::HTMLPlugInImageElement::documentDidResumeFromPageCache): 33 (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn): 34 * html/HTMLSelectElement.cpp: 35 (WebCore::HTMLSelectElement::parseAttribute): 36 (WebCore::HTMLSelectElement::parseMultipleAttribute): 37 * html/HTMLViewSourceDocument.cpp: 38 (WebCore::HTMLViewSourceDocument::createContainingTable): 39 (WebCore::HTMLViewSourceDocument::addSpanWithClassName): 40 (WebCore::HTMLViewSourceDocument::addLine): 41 (WebCore::HTMLViewSourceDocument::finishLine): 42 (WebCore::HTMLViewSourceDocument::addBase): 43 (WebCore::HTMLViewSourceDocument::addLink): 44 * html/parser/HTMLConstructionSite.cpp: 45 (WebCore::executeTask): 46 * html/parser/HTMLTreeBuilder.cpp: 47 (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): 48 * html/shadow/InsertionPoint.cpp: 49 (WebCore::InsertionPoint::willAttachRenderers): 50 (WebCore::InsertionPoint::willDetachRenderers): 51 * loader/PlaceholderDocument.cpp: 52 (WebCore::PlaceholderDocument::createRenderTree): 53 * style/StyleResolveTree.cpp: 54 (WebCore::Style::attachChildren): 55 (WebCore::Style::attachRenderTree): 56 (WebCore::Style::detachChildren): 57 (WebCore::Style::detachRenderTree): 58 (WebCore::Style::resolveLocal): 59 (WebCore::Style::updateTextStyle): 60 (WebCore::Style::resolveShadowTree): 61 (WebCore::Style::resolveTree): 62 63 Documents only ever have one child element. Remove the loop. 64 65 (WebCore::Style::detachRenderTreeInReattachMode): 66 (WebCore::Style::reattachRenderTree): 67 * style/StyleResolveTree.h: 68 * svg/SVGTests.cpp: 69 (WebCore::SVGTests::handleAttributeChange): 70 * xml/XMLErrors.cpp: 71 (WebCore::XMLErrors::insertErrorMessageBlock): 72 * xml/parser/XMLDocumentParserLibxml2.cpp: 73 (WebCore::XMLDocumentParser::startElementNs): 74 1 75 2013-08-30 Andreas Kling <akling@apple.com> 2 76 -
trunk/Source/WebCore/dom/ContainerNode.cpp
r154877 r154903 109 109 { 110 110 if (child->isElementNode()) 111 Style::attachRenderTree( toElement(child));111 Style::attachRenderTree(*toElement(child)); 112 112 else if (child->isTextNode()) 113 113 Style::attachTextRenderer(*toText(child)); … … 117 117 { 118 118 if (child->isElementNode()) 119 Style::detachRenderTree( toElement(child));119 Style::detachRenderTree(*toElement(child)); 120 120 else if (child->isTextNode()) 121 121 Style::detachTextRenderer(*toText(child)); -
trunk/Source/WebCore/dom/Document.cpp
r154901 r154903 1992 1992 1993 1993 if (m_documentElement) 1994 Style::attachRenderTree( m_documentElement.get());1994 Style::attachRenderTree(*m_documentElement); 1995 1995 1996 1996 setAttached(true); … … 2092 2092 2093 2093 if (m_documentElement) 2094 Style::detachRenderTree( m_documentElement.get());2094 Style::detachRenderTree(*m_documentElement); 2095 2095 2096 2096 clearChildNeedsStyleRecalc(); -
trunk/Source/WebCore/dom/Element.cpp
r154881 r154903 1370 1370 { 1371 1371 if (attached()) 1372 Style::detachRenderTreeInReattachMode( this);1372 Style::detachRenderTreeInReattachMode(*this); 1373 1373 lazyAttach(shouldSetAttached); 1374 1374 } … … 2301 2301 // PseudoElement styles hang off their parent element's style so if we needed 2302 2302 // a style recalc we should Force one on the pseudo. 2303 Style::resolveTree( existingPseudoElement, needsStyleRecalc() ? Style::Force : change);2303 Style::resolveTree(*existingPseudoElement, needsStyleRecalc() ? Style::Force : change); 2304 2304 2305 2305 // FIXME: This is silly. … … 2322 2322 return 0; 2323 2323 RefPtr<PseudoElement> pseudoElement = PseudoElement::create(this, pseudoId); 2324 Style::attachRenderTree( pseudoElement.get());2324 Style::attachRenderTree(*pseudoElement); 2325 2325 return pseudoElement.release(); 2326 2326 } … … 2375 2375 return; 2376 2376 if (pseudoElement->attached()) 2377 Style::detachRenderTree( pseudoElement);2377 Style::detachRenderTree(*pseudoElement); 2378 2378 ASSERT(pseudoElement->hostElement()); 2379 2379 pseudoElement->clearHostElement(); -
trunk/Source/WebCore/dom/ShadowRoot.cpp
r154257 r154903 145 145 m_resetStyleInheritance = value; 146 146 if (attached() && hostElement()) 147 Style::resolveTree( hostElement(), Style::Force);147 Style::resolveTree(*hostElement(), Style::Force); 148 148 } 149 149 } -
trunk/Source/WebCore/html/HTMLDetailsElement.cpp
r154877 r154903 139 139 m_isOpen = !value.isNull(); 140 140 if (oldValue != m_isOpen && attached()) 141 Style::reattachRenderTree( this);141 Style::reattachRenderTree(*this); 142 142 } else 143 143 HTMLElement::parseAttribute(name, value); -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r154877 r154903 480 480 bool wasAttached = attached(); 481 481 if (wasAttached) 482 Style::detachRenderTree( this);482 Style::detachRenderTree(*this); 483 483 484 484 m_inputType = newType.release(); … … 531 531 532 532 if (wasAttached) { 533 Style::attachRenderTree( this);533 Style::attachRenderTree(*this); 534 534 if (document().focusedElement() == this) 535 535 updateFocusAppearance(true); … … 696 696 // time to relayout for this change. 697 697 if (m_maxResults != oldResults && (m_maxResults <= 0 || oldResults <= 0) && attached()) 698 Style::reattachRenderTree( this);698 Style::reattachRenderTree(*this); 699 699 setNeedsStyleRecalc(); 700 700 FeatureObserver::observe(&document(), FeatureObserver::ResultsAttribute); -
trunk/Source/WebCore/html/HTMLObjectElement.cpp
r154877 r154903 379 379 // If we don't think we have an image type anymore, then clear the image from the loader. 380 380 m_imageLoader->setImage(0); 381 Style::reattachRenderTree( this);381 Style::reattachRenderTree(*this); 382 382 return; 383 383 } … … 387 387 388 388 // FIXME: Style gets recalculated which is suboptimal. 389 Style::reattachRenderTree( this);389 Style::reattachRenderTree(*this); 390 390 } 391 391 -
trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp
r154877 r154903 227 227 // FIXME: Why is this necessary? Manual re-attach is almost always wrong. 228 228 if (!useFallbackContent() && needsWidgetUpdate() && renderer() && !isImageType() && (displayState() != DisplayingSnapshot)) 229 Style::reattachRenderTree( this);229 Style::reattachRenderTree(*this); 230 230 return true; 231 231 } … … 298 298 m_customStyleForPageCache = RenderStyle::clone(renderStyle); 299 299 m_customStyleForPageCache->setDisplay(NONE); 300 Style::resolveTree( this, Style::Force);300 Style::resolveTree(*this, Style::Force); 301 301 } 302 302 … … 308 308 if (m_customStyleForPageCache) { 309 309 m_customStyleForPageCache = 0; 310 Style::resolveTree( this, Style::Force);310 Style::resolveTree(*this, Style::Force); 311 311 } 312 312 … … 516 516 517 517 setDisplayState(Restarting); 518 Style::reattachRenderTree( this);518 Style::reattachRenderTree(*this); 519 519 } 520 520 -
trunk/Source/WebCore/html/HTMLSelectElement.cpp
r154877 r154903 307 307 setNeedsValidityCheck(); 308 308 if (m_size != oldSize && attached()) { 309 Style::reattachRenderTree( this);309 Style::reattachRenderTree(*this); 310 310 setRecalcListItems(); 311 311 } … … 1012 1012 setNeedsValidityCheck(); 1013 1013 if (oldUsesMenuList != usesMenuList() && attached()) 1014 Style::reattachRenderTree( this);1014 Style::reattachRenderTree(*this); 1015 1015 } 1016 1016 -
trunk/Source/WebCore/html/HTMLViewSourceDocument.cpp
r154738 r154903 87 87 m_current = m_tbody; 88 88 89 Style::attachRenderTree( html.get());89 Style::attachRenderTree(*html); 90 90 } 91 91 … … 185 185 span->setAttribute(classAttr, className); 186 186 m_current->parserAppendChild(span); 187 Style::attachRenderTree( span.get());187 Style::attachRenderTree(*span); 188 188 return span.release(); 189 189 } … … 194 194 RefPtr<HTMLTableRowElement> trow = HTMLTableRowElement::create(this); 195 195 m_tbody->parserAppendChild(trow); 196 Style::reattachRenderTree( trow.get());196 Style::reattachRenderTree(*trow); 197 197 198 198 // Create a cell that will hold the line number (it is generated in the stylesheet using counters). … … 200 200 td->setAttribute(classAttr, "webkit-line-number"); 201 201 trow->parserAppendChild(td); 202 Style::attachRenderTree( td.get());202 Style::attachRenderTree(*td); 203 203 204 204 // Create a second cell for the line contents … … 206 206 td->setAttribute(classAttr, "webkit-line-content"); 207 207 trow->parserAppendChild(td); 208 Style::attachRenderTree( td.get());208 Style::attachRenderTree(*td); 209 209 m_current = m_td = td; 210 210 … … 228 228 RefPtr<HTMLBRElement> br = HTMLBRElement::create(this); 229 229 m_current->parserAppendChild(br); 230 Style::attachRenderTree( br.get());230 Style::attachRenderTree(*br); 231 231 } 232 232 m_current = m_tbody; … … 284 284 base->setAttribute(hrefAttr, href); 285 285 m_current->parserAppendChild(base); 286 Style::attachRenderTree( base.get());286 Style::attachRenderTree(*base); 287 287 return base.release(); 288 288 } … … 304 304 anchor->setAttribute(hrefAttr, url); 305 305 m_current->parserAppendChild(anchor); 306 Style::attachRenderTree( anchor.get());306 Style::attachRenderTree(*anchor); 307 307 return anchor.release(); 308 308 } -
trunk/Source/WebCore/html/parser/HTMLConstructionSite.cpp
r154877 r154903 102 102 if (task.child->parentNode() && task.parent->attached() && !task.child->attached()) { 103 103 if (task.child->isElementNode()) 104 Style::attachRenderTree( toElement(task.child.get()));104 Style::attachRenderTree(*toElement(task.child.get())); 105 105 else if (task.child->isTextNode()) 106 106 Style::attachTextRenderer(*toText(task.child.get())); -
trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp
r154801 r154903 1626 1626 // Notice that newItem->element() might already be attached if, for example, one of the reparented 1627 1627 // children is a style element, which attaches itself automatically. 1628 Style::attachRenderTree( newItem->element());1628 Style::attachRenderTree(*newItem->element()); 1629 1629 } 1630 1630 // 14. -
trunk/Source/WebCore/html/shadow/InsertionPoint.cpp
r154738 r154903 65 65 } 66 66 if (current->isElementNode()) 67 Style::attachRenderTree( toElement(current));67 Style::attachRenderTree(*toElement(current)); 68 68 } 69 69 } … … 80 80 } 81 81 if (current->isElementNode()) 82 Style::detachRenderTree( toElement(current));82 Style::detachRenderTree(*toElement(current)); 83 83 } 84 84 } -
trunk/Source/WebCore/loader/PlaceholderDocument.cpp
r154573 r154903 27 27 #include "PlaceholderDocument.h" 28 28 29 #include " ElementTraversal.h"29 #include "ChildIterator.h" 30 30 31 31 namespace WebCore { … … 35 35 ASSERT(!attached()); 36 36 37 for (Element* child = ElementTraversal::firstWithin(this); child; child = ElementTraversal::nextSibling(child)) 38 Style::attachRenderTree(child); 37 auto children = elementChildren(this); 38 for (auto child = children.begin(), end = children.end(); child != end; ++child) 39 Style::attachRenderTree(*child); 39 40 40 41 setAttached(true); -
trunk/Source/WebCore/style/StyleResolveTree.cpp
r154901 r154903 28 28 29 29 #include "AXObjectCache.h" 30 #include "ChildIterator.h" 30 31 #include "Element.h" 31 32 #include "ElementRareData.h" … … 57 58 enum DetachType { NormalDetach, ReattachDetach }; 58 59 59 static void attachRenderTree(Element *, RenderStyle* resolvedStyle);60 static void detachRenderTree(Element *, DetachType);60 static void attachRenderTree(Element&, RenderStyle* resolvedStyle); 61 static void detachRenderTree(Element&, DetachType); 61 62 62 63 Change determineChange(const RenderStyle* s1, const RenderStyle* s2, Settings* settings) … … 448 449 } 449 450 if (child->isElementNode()) 450 attachRenderTree( toElement(child), nullptr);451 attachRenderTree(*toElement(child), nullptr); 451 452 } 452 453 } … … 467 468 } 468 469 469 static void attachRenderTree(Element *current, RenderStyle* resolvedStyle)470 { 471 PostAttachCallbackDisabler callbackDisabler( current);470 static void attachRenderTree(Element& current, RenderStyle* resolvedStyle) 471 { 472 PostAttachCallbackDisabler callbackDisabler(¤t); 472 473 WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates; 473 474 474 if (current ->hasCustomStyleResolveCallbacks())475 current ->willAttachRenderers();476 477 createRendererIfNeeded( *current, resolvedStyle);478 479 if (current ->parentElement() && current->parentElement()->isInCanvasSubtree())480 current ->setIsInCanvasSubtree(true);481 482 current ->updateBeforePseudoElement(NoChange);483 484 StyleResolverParentPusher parentPusher( current);475 if (current.hasCustomStyleResolveCallbacks()) 476 current.willAttachRenderers(); 477 478 createRendererIfNeeded(current, resolvedStyle); 479 480 if (current.parentElement() && current.parentElement()->isInCanvasSubtree()) 481 current.setIsInCanvasSubtree(true); 482 483 current.updateBeforePseudoElement(NoChange); 484 485 StyleResolverParentPusher parentPusher(¤t); 485 486 486 487 // When a shadow root exists, it does the work of attaching the children. 487 if (ShadowRoot* shadowRoot = current ->shadowRoot()) {488 if (ShadowRoot* shadowRoot = current.shadowRoot()) { 488 489 parentPusher.push(); 489 490 attachShadowRoot(*shadowRoot); 490 } else if (current ->firstChild())491 } else if (current.firstChild()) 491 492 parentPusher.push(); 492 493 493 attachChildren( *current);494 495 Node* sibling = current ->nextSibling();496 if (current ->renderer() && sibling && !sibling->renderer() && sibling->attached())494 attachChildren(current); 495 496 Node* sibling = current.nextSibling(); 497 if (current.renderer() && sibling && !sibling->renderer() && sibling->attached()) 497 498 createTextRenderersForSiblingsAfterAttachIfNeeded(sibling); 498 499 499 current ->setAttached(true);500 current ->clearNeedsStyleRecalc();501 502 if (AXObjectCache* cache = current ->document().axObjectCache())503 cache->updateCacheAfterNodeIsAttached( current);504 505 current ->updateAfterPseudoElement(NoChange);506 507 current ->updateFocusAppearanceAfterAttachIfNeeded();500 current.setAttached(true); 501 current.clearNeedsStyleRecalc(); 502 503 if (AXObjectCache* cache = current.document().axObjectCache()) 504 cache->updateCacheAfterNodeIsAttached(¤t); 505 506 current.updateAfterPseudoElement(NoChange); 507 508 current.updateFocusAppearanceAfterAttachIfNeeded(); 508 509 509 if (current ->hasCustomStyleResolveCallbacks())510 current ->didAttachRenderers();510 if (current.hasCustomStyleResolveCallbacks()) 511 current.didAttachRenderers(); 511 512 } 512 513 … … 519 520 } 520 521 if (child->isElementNode()) 521 detachRenderTree( toElement(child), detachType);522 detachRenderTree(*toElement(child), detachType); 522 523 } 523 524 current.clearChildNeedsStyleRecalc(); … … 533 534 } 534 535 535 static void detachRenderTree(Element *current, DetachType detachType)536 static void detachRenderTree(Element& current, DetachType detachType) 536 537 { 537 538 WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates; 538 539 539 if (current ->hasCustomStyleResolveCallbacks())540 current ->willDetachRenderers();541 542 current ->clearStyleDerivedDataBeforeDetachingRenderer();540 if (current.hasCustomStyleResolveCallbacks()) 541 current.willDetachRenderers(); 542 543 current.clearStyleDerivedDataBeforeDetachingRenderer(); 543 544 544 545 // Do not remove the element's hovered and active status 545 546 // if performing a reattach. 546 547 if (detachType != ReattachDetach) 547 current ->clearHoverAndActiveStatusBeforeDetachingRenderer();548 549 if (ShadowRoot* shadowRoot = current ->shadowRoot())548 current.clearHoverAndActiveStatusBeforeDetachingRenderer(); 549 550 if (ShadowRoot* shadowRoot = current.shadowRoot()) 550 551 detachShadowRoot(*shadowRoot, detachType); 551 552 552 detachChildren( *current, detachType);553 554 if (current ->renderer())555 current ->renderer()->destroyAndCleanupAnonymousWrappers();556 current ->setRenderer(0);557 558 current ->setAttached(false);559 560 if (current ->hasCustomStyleResolveCallbacks())561 current ->didDetachRenderers();553 detachChildren(current, detachType); 554 555 if (current.renderer()) 556 current.renderer()->destroyAndCleanupAnonymousWrappers(); 557 current.setRenderer(0); 558 559 current.setAttached(false); 560 561 if (current.hasCustomStyleResolveCallbacks()) 562 current.didDetachRenderers(); 562 563 } 563 564 … … 596 597 } 597 598 598 static Change resolveLocal(Element *current, Change inheritedChange)599 static Change resolveLocal(Element& current, Change inheritedChange) 599 600 { 600 601 Change localChange = Detach; 601 602 RefPtr<RenderStyle> newStyle; 602 RefPtr<RenderStyle> currentStyle = current ->renderStyle();603 604 Document& document = current ->document();603 RefPtr<RenderStyle> currentStyle = current.renderStyle(); 604 605 Document& document = current.document(); 605 606 if (currentStyle) { 606 newStyle = current ->styleForRenderer();607 newStyle = current.styleForRenderer(); 607 608 localChange = determineChange(currentStyle.get(), newStyle.get(), document.settings()); 608 609 } 609 610 if (localChange == Detach) { 610 if (current ->attached())611 if (current.attached()) 611 612 detachRenderTree(current, ReattachDetach); 612 613 attachRenderTree(current, newStyle.get()); … … 614 615 } 615 616 616 if (RenderObject* renderer = current ->renderer()) {617 if (localChange != NoChange || pseudoStyleCacheIsInvalid(renderer, newStyle.get()) || (inheritedChange == Force && renderer->requiresForcedStyleRecalcPropagation()) || current ->styleChangeType() == SyntheticStyleChange)617 if (RenderObject* renderer = current.renderer()) { 618 if (localChange != NoChange || pseudoStyleCacheIsInvalid(renderer, newStyle.get()) || (inheritedChange == Force && renderer->requiresForcedStyleRecalcPropagation()) || current.styleChangeType() == SyntheticStyleChange) 618 619 renderer->setAnimatableStyle(newStyle.get()); 619 else if (current ->needsStyleRecalc()) {620 else if (current.needsStyleRecalc()) { 620 621 // Although no change occurred, we use the new style so that the cousin style sharing code won't get 621 622 // fooled into believing this style is the same. … … 626 627 // If "rem" units are used anywhere in the document, and if the document element's font size changes, then go ahead and force font updating 627 628 // all the way down the tree. This is simpler than having to maintain a cache of objects (and such font size changes should be rare anyway). 628 if (document.styleSheetCollection()->usesRemUnits() && document.documentElement() == current && localChange != NoChange && currentStyle && newStyle && currentStyle->fontSize() != newStyle->fontSize()) {629 if (document.styleSheetCollection()->usesRemUnits() && document.documentElement() == ¤t && localChange != NoChange && currentStyle && newStyle && currentStyle->fontSize() != newStyle->fontSize()) { 629 630 // Cached RenderStyles may depend on the re units. 630 631 if (StyleResolver* styleResolver = document.styleResolverIfExists()) … … 634 635 if (inheritedChange == Force) 635 636 return Force; 636 if (current ->styleChangeType() >= FullStyleChange)637 if (current.styleChangeType() >= FullStyleChange) 637 638 return Force; 638 639 … … 640 641 } 641 642 642 static void updateTextStyle(Text *text, RenderStyle* parentElementStyle, Style::Change change)643 { 644 RenderText* renderer = toRenderText(text ->renderer());643 static void updateTextStyle(Text& text, RenderStyle* parentElementStyle, Style::Change change) 644 { 645 RenderText* renderer = toRenderText(text.renderer()); 645 646 646 647 if (change != Style::NoChange && renderer) 647 648 renderer->setStyle(parentElementStyle); 648 649 649 if (!text ->needsStyleRecalc())650 if (!text.needsStyleRecalc()) 650 651 return; 651 652 if (renderer) 652 renderer->setText(text ->dataImpl());653 renderer->setText(text.dataImpl()); 653 654 else 654 attachTextRenderer( *text);655 text ->clearNeedsStyleRecalc();655 attachTextRenderer(text); 656 text.clearNeedsStyleRecalc(); 656 657 } 657 658 … … 666 667 if (child->isTextNode()) { 667 668 // Current user agent ShadowRoots don't have immediate text children so this branch is never actually taken. 668 updateTextStyle( toText(child), parentElementStyle, change);669 updateTextStyle(*toText(child), parentElementStyle, change); 669 670 continue; 670 671 } 671 resolveTree( toElement(child), change);672 resolveTree(*toElement(child), change); 672 673 } 673 674 … … 731 732 #endif // PLATFORM(IOS) 732 733 733 void resolveTree(Element *current, Change change)734 void resolveTree(Element& current, Change change) 734 735 { 735 736 ASSERT(change != Detach); 736 737 737 if (current ->hasCustomStyleResolveCallbacks()) {738 if (!current ->willRecalcStyle(change))738 if (current.hasCustomStyleResolveCallbacks()) { 739 if (!current.willRecalcStyle(change)) 739 740 return; 740 741 } 741 742 742 ContainerNode* renderingParentNode = NodeRenderingTraversal::parent( current);743 ContainerNode* renderingParentNode = NodeRenderingTraversal::parent(¤t); 743 744 bool hasParentStyle = renderingParentNode && renderingParentNode->renderStyle(); 744 bool hasDirectAdjacentRules = current ->childrenAffectedByDirectAdjacentRules();745 bool hasIndirectAdjacentRules = current ->childrenAffectedByForwardPositionalRules();745 bool hasDirectAdjacentRules = current.childrenAffectedByDirectAdjacentRules(); 746 bool hasIndirectAdjacentRules = current.childrenAffectedByForwardPositionalRules(); 746 747 747 748 #if PLATFORM(IOS) … … 749 750 #endif 750 751 751 if (change > NoChange || current ->needsStyleRecalc())752 current ->resetComputedStyle();753 754 if (hasParentStyle && (change >= Inherit || current ->needsStyleRecalc()))752 if (change > NoChange || current.needsStyleRecalc()) 753 current.resetComputedStyle(); 754 755 if (hasParentStyle && (change >= Inherit || current.needsStyleRecalc())) 755 756 change = resolveLocal(current, change); 756 757 757 758 if (change != Detach) { 758 StyleResolverParentPusher parentPusher( current);759 760 RenderStyle* currentStyle = current ->renderStyle();761 762 if (ShadowRoot* shadowRoot = current ->shadowRoot()) {759 StyleResolverParentPusher parentPusher(¤t); 760 761 RenderStyle* currentStyle = current.renderStyle(); 762 763 if (ShadowRoot* shadowRoot = current.shadowRoot()) { 763 764 if (change >= Inherit || shadowRoot->childNeedsStyleRecalc() || shadowRoot->needsStyleRecalc()) { 764 765 parentPusher.push(); … … 767 768 } 768 769 769 current ->updateBeforePseudoElement(change);770 current.updateBeforePseudoElement(change); 770 771 771 772 // FIXME: This check is good enough for :hover + foo, but it is not good enough for :hover + foo + bar. … … 774 775 bool forceCheckOfNextElementSibling = false; 775 776 bool forceCheckOfAnyElementSibling = false; 776 for (Node* child = current ->firstChild(); child; child = child->nextSibling()) {777 for (Node* child = current.firstChild(); child; child = child->nextSibling()) { 777 778 if (child->isTextNode()) { 778 updateTextStyle( toText(child), currentStyle, change);779 updateTextStyle(*toText(child), currentStyle, change); 779 780 continue; 780 781 } … … 787 788 if (change >= Inherit || childElement->childNeedsStyleRecalc() || childElement->needsStyleRecalc()) { 788 789 parentPusher.push(); 789 resolveTree( childElement, change);790 resolveTree(*childElement, change); 790 791 } 791 792 forceCheckOfNextElementSibling = childRulesChanged && hasDirectAdjacentRules; … … 793 794 } 794 795 795 current ->updateAfterPseudoElement(change);796 } 797 798 current ->clearNeedsStyleRecalc();799 current ->clearChildNeedsStyleRecalc();796 current.updateAfterPseudoElement(change); 797 } 798 799 current.clearNeedsStyleRecalc(); 800 current.clearChildNeedsStyleRecalc(); 800 801 801 if (current ->hasCustomStyleResolveCallbacks())802 current ->didRecalcStyle(change);802 if (current.hasCustomStyleResolveCallbacks()) 803 current.didRecalcStyle(change); 803 804 } 804 805 … … 824 825 } 825 826 826 for (Element* child = ElementTraversal::firstWithin(&document); child; child = ElementTraversal::nextSibling(child)) { 827 if (change < Inherit && !child->childNeedsStyleRecalc() && !child->needsStyleRecalc()) 828 continue; 829 resolveTree(child, change); 830 } 831 } 832 833 void attachRenderTree(Element* element) 827 Element* documentElement = document.documentElement(); 828 if (!documentElement) 829 return; 830 if (change < Inherit && !documentElement->childNeedsStyleRecalc() && !documentElement->needsStyleRecalc()) 831 return; 832 resolveTree(*documentElement, change); 833 } 834 835 void attachRenderTree(Element& element) 834 836 { 835 837 attachRenderTree(element, nullptr); 836 838 } 837 839 838 void detachRenderTree(Element *element)840 void detachRenderTree(Element& element) 839 841 { 840 842 detachRenderTree(element, NormalDetach); 841 843 } 842 844 843 void detachRenderTreeInReattachMode(Element *element)845 void detachRenderTreeInReattachMode(Element& element) 844 846 { 845 847 detachRenderTree(element, ReattachDetach); 846 848 } 847 849 848 void reattachRenderTree(Element *current)849 { 850 if (current ->attached())850 void reattachRenderTree(Element& current) 851 { 852 if (current.attached()) 851 853 detachRenderTree(current, ReattachDetach); 852 854 attachRenderTree(current, nullptr); -
trunk/Source/WebCore/style/StyleResolveTree.h
r154901 r154903 39 39 enum Change { NoChange, NoInherit, Inherit, Detach, Force }; 40 40 41 void resolveTree(Element *, Change);41 void resolveTree(Element&, Change); 42 42 void resolveTree(Document&, Change); 43 43 44 void attachRenderTree(Element *);45 void detachRenderTree(Element *);46 void reattachRenderTree(Element *);44 void attachRenderTree(Element&); 45 void detachRenderTree(Element&); 46 void reattachRenderTree(Element&); 47 47 // FIXME: This is only used for "lazy reattach" for shadow trees. 48 void detachRenderTreeInReattachMode(Element *);48 void detachRenderTreeInReattachMode(Element&); 49 49 50 50 void attachTextRenderer(Text&); -
trunk/Source/WebCore/svg/SVGTests.cpp
r154257 r154903 160 160 bool attached = targetElement->attached(); 161 161 if (valid && !attached && targetElement->parentNode()->attached()) 162 Style::attachRenderTree( targetElement);162 Style::attachRenderTree(*targetElement); 163 163 else if (!valid && attached) 164 Style::detachRenderTree( targetElement);164 Style::detachRenderTree(*targetElement); 165 165 166 166 return true; -
trunk/Source/WebCore/xml/XMLErrors.cpp
r154323 r154903 129 129 m_document->parserAppendChild(rootElement); 130 130 if (m_document->attached() && !rootElement->attached()) 131 Style::attachRenderTree( rootElement.get());131 Style::attachRenderTree(*rootElement); 132 132 documentElement = body.get(); 133 133 } … … 140 140 documentElement->parentNode()->parserRemoveChild(documentElement.get()); 141 141 if (documentElement->attached()) 142 Style::detachRenderTree( documentElement.get());142 Style::detachRenderTree(*documentElement); 143 143 144 144 body->parserAppendChild(documentElement); … … 148 148 // In general, rootElement shouldn't be attached right now, but it will be if there is a style element 149 149 // in the SVG content. 150 Style::reattachRenderTree( rootElement.get());150 Style::reattachRenderTree(*rootElement); 151 151 152 152 documentElement = body.get(); … … 175 175 176 176 if (documentElement->attached() && !reportElement->attached()) 177 Style::attachRenderTree( reportElement.get());177 Style::attachRenderTree(*reportElement); 178 178 179 179 m_document->updateStyleIfNeeded(); -
trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp
r154877 r154903 863 863 864 864 if (m_view && currentNode->attached() && !newElement->attached()) 865 Style::attachRenderTree( newElement.get());865 Style::attachRenderTree(*newElement); 866 866 867 867 if (newElement->hasTagName(HTMLNames::htmlTag))
Note:
See TracChangeset
for help on using the changeset viewer.