Changeset 172409 in webkit
- Timestamp:
- Aug 11, 2014 1:42:16 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r172408 r172409 1 2014-08-11 Antti Koivisto <antti@apple.com> 2 3 Pass inherited style only when resolving tree style 4 https://bugs.webkit.org/show_bug.cgi?id=135799 5 6 Reviewed by Andreas Kling. 7 8 No need to pass around the style parent element. 9 10 * dom/ContainerNode.h: 11 (WebCore::ContainerNode::childShouldCreateRenderer): Deleted. 12 * dom/Element.cpp: 13 (WebCore::Element::childShouldCreateRenderer): 14 * dom/Element.h: 15 * style/StyleResolveTree.cpp: 16 (WebCore::Style::RenderTreePosition::parent): 17 (WebCore::Style::nextSiblingRenderer): 18 (WebCore::Style::RenderTreePosition::RenderTreePosition): 19 (WebCore::Style::RenderTreePosition::computeNextSibling): 20 (WebCore::Style::shouldCreateRenderer): 21 (WebCore::Style::styleForElement): 22 (WebCore::Style::createRendererIfNeeded): 23 (WebCore::Style::textRendererIsNeeded): 24 (WebCore::Style::createTextRendererIfNeeded): 25 (WebCore::Style::attachTextRenderer): 26 (WebCore::Style::updateTextRendererAfterContentChange): 27 (WebCore::Style::attachChildren): 28 (WebCore::Style::attachDistributedChildren): 29 (WebCore::Style::attachShadowRoot): 30 (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded): 31 (WebCore::Style::attachRenderTree): 32 (WebCore::Style::resolveLocal): 33 (WebCore::Style::resolveTextNode): 34 (WebCore::Style::resolveShadowTree): 35 (WebCore::Style::updateBeforeOrAfterPseudoElement): 36 (WebCore::Style::resolveTree): 37 * svg/SVGDocument.cpp: 38 (WebCore::SVGDocument::childShouldCreateRenderer): Deleted. 39 40 Implement this in SVGSVGElement::rendererIsNeeded instead. 41 42 * svg/SVGDocument.h: 43 * svg/SVGSVGElement.cpp: 44 (WebCore::SVGSVGElement::rendererIsNeeded): 45 1 46 2014-08-11 Yusuke Suzuki <utatane.tea@gmail.com> 2 47 -
trunk/Source/WebCore/dom/ContainerNode.h
r168386 r172409 122 122 void disconnectDescendantFrames(); 123 123 124 virtual bool childShouldCreateRenderer(const Node&) const { return true; }125 126 124 using Node::setAttributeEventListener; 127 125 void setAttributeEventListener(const AtomicString& eventType, const QualifiedName& attributeName, const AtomicString& value); -
trunk/Source/WebCore/dom/Element.cpp
r171941 r172409 2459 2459 return child.hasTagName(SVGNames::svgTag) && toSVGElement(child).isValid(); 2460 2460 } 2461 return ContainerNode::childShouldCreateRenderer(child);2461 return true; 2462 2462 } 2463 2463 -
trunk/Source/WebCore/dom/Element.h
r172259 r172409 489 489 virtual bool isDisabledFormControl() const { return false; } 490 490 491 virtual bool childShouldCreateRenderer(const Node&) const override;491 virtual bool childShouldCreateRenderer(const Node&) const; 492 492 493 493 bool hasPendingResources() const; -
trunk/Source/WebCore/style/StyleResolveTree.cpp
r170774 r172409 65 65 class RenderTreePosition { 66 66 public: 67 RenderTreePosition(RenderElement* parent); 67 explicit RenderTreePosition(RenderView&); 68 explicit RenderTreePosition(RenderElement* parent); 68 69 RenderTreePosition(RenderElement* parent, RenderObject* nextSibling); 69 70 70 71 RenderElement* parent() { return m_parent; } 72 const RenderElement* parent() const { return m_parent; } 71 73 72 74 void insert(RenderObject&); … … 74 76 bool canInsert(RenderText&) const; 75 77 76 void computeNextSibling(const Node& , ContainerNode& renderingParentNode);78 void computeNextSibling(const Node&); 77 79 void invalidateNextSibling(const RenderObject&); 78 80 … … 86 88 }; 87 89 88 static void attachRenderTree(Element&, ContainerNode& renderingParentNode, RenderTreePosition&, PassRefPtr<RenderStyle>);89 static void attachTextRenderer(Text&, ContainerNode& renderingParentNode,RenderTreePosition&);90 static void attachRenderTree(Element&, RenderStyle* inheritedStyle, RenderTreePosition&, PassRefPtr<RenderStyle>); 91 static void attachTextRenderer(Text&, RenderTreePosition&); 90 92 static void detachRenderTree(Element&, DetachType); 91 static void resolveTextNode(Text&, ContainerNode& renderingParentNode,RenderTreePosition&);92 static void resolveTree(Element&, ContainerNode& renderingParentNode, RenderTreePosition&, Change);93 static void resolveTextNode(Text&, RenderTreePosition&); 94 static void resolveTree(Element&, RenderStyle* inheritedStyle, RenderTreePosition&, Change); 93 95 94 96 Change determineChange(const RenderStyle* s1, const RenderStyle* s2) … … 153 155 } 154 156 155 static RenderObject* nextSiblingRenderer(const Node& node, const ContainerNode& renderingParentNode) 156 { 157 if (!renderingParentNode.isElementNode()) 158 return nullptr; 159 const Element& renderingParentElement = toElement(renderingParentNode); 160 // Avoid an O(N^2) problem with this function by not checking for 161 // nextRenderer() when the parent element hasn't attached yet. 162 // FIXME: Why would we get here anyway if parent is not attached? 163 if (!renderingParentElement.renderer()) 157 static RenderObject* nextSiblingRenderer(const Node& node, const RenderElement& parentRenderer) 158 { 159 if (!parentRenderer.element()) 164 160 return nullptr; 165 161 if (node.isAfterPseudoElement()) 166 162 return nullptr; 167 Node* sibling = node.isBeforePseudoElement() ? NodeRenderingTraversal::firstChild( &renderingParentNode) : NodeRenderingTraversal::nextSibling(&node);163 Node* sibling = node.isBeforePseudoElement() ? NodeRenderingTraversal::firstChild(parentRenderer.element()) : NodeRenderingTraversal::nextSibling(&node); 168 164 for (; sibling; sibling = NodeRenderingTraversal::nextSibling(sibling)) { 169 165 RenderObject* renderer = sibling->renderer(); … … 171 167 return renderer; 172 168 } 173 if (PseudoElement* after = renderingParentElement.afterPseudoElement())169 if (PseudoElement* after = parentRenderer.element()->afterPseudoElement()) 174 170 return after->renderer(); 175 171 return nullptr; 172 } 173 174 RenderTreePosition::RenderTreePosition(RenderView& root) 175 : m_parent(&root) 176 , m_nextSibling(nullptr) 177 , m_hasValidNextSibling(true) 178 #if !ASSERT_DISABLED 179 , m_assertionLimitCounter(0) 180 #endif 181 { 176 182 } 177 183 … … 217 223 } 218 224 219 void RenderTreePosition::computeNextSibling(const Node& node, ContainerNode& renderingParentNode) 220 { 225 void RenderTreePosition::computeNextSibling(const Node& node) 226 { 227 ASSERT(m_parent); 221 228 ASSERT(!node.renderer()); 222 229 if (m_hasValidNextSibling) { 223 230 // Stop validating at some point so the assert doesn't make us O(N^2) on debug builds. 224 ASSERT( ++m_assertionLimitCounter > 20 || nextSiblingRenderer(node, renderingParentNode) == m_nextSibling);225 return; 226 } 227 m_nextSibling = nextSiblingRenderer(node, renderingParentNode);231 ASSERT(m_parent->isRenderView() || ++m_assertionLimitCounter > 20 || nextSiblingRenderer(node, *m_parent) == m_nextSibling); 232 return; 233 } 234 m_nextSibling = nextSiblingRenderer(node, *m_parent); 228 235 m_hasValidNextSibling = true; 229 236 } … … 237 244 } 238 245 239 static bool shouldCreateRenderer(const Element& element, const ContainerNode& renderingParent)246 static bool shouldCreateRenderer(const Element& element, const RenderElement* parentRenderer) 240 247 { 241 248 if (!element.document().shouldCreateRenderers()) 242 249 return false; 243 RenderObject* parentRenderer = renderingParent.renderer();244 250 if (!parentRenderer) 245 251 return false; 246 252 if (!parentRenderer->canHaveChildren() && !(element.isPseudoElement() && parentRenderer->canHaveGeneratedChildren())) 247 253 return false; 248 if ( !renderingParent.childShouldCreateRenderer(element))254 if (parentRenderer->element() && !parentRenderer->element()->childShouldCreateRenderer(element)) 249 255 return false; 250 256 return true; 251 257 } 252 258 253 static PassRef<RenderStyle> styleForElement(Element& element, ContainerNode& renderingParentNode) 254 { 255 RenderStyle* parentStyle = renderingParentNode.renderStyle(); 256 if (element.hasCustomStyleResolveCallbacks() && parentStyle) { 257 if (RefPtr<RenderStyle> style = element.customStyleForRenderer(*parentStyle)) 259 static PassRef<RenderStyle> styleForElement(Element& element, RenderStyle* inheritedStyle) 260 { 261 if (element.hasCustomStyleResolveCallbacks() && inheritedStyle) { 262 if (RefPtr<RenderStyle> style = element.customStyleForRenderer(*inheritedStyle)) 258 263 return style.releaseNonNull(); 259 264 } 260 return element.document().ensureStyleResolver().styleForElement(&element, parentStyle);265 return element.document().ensureStyleResolver().styleForElement(&element, inheritedStyle); 261 266 } 262 267 … … 274 279 #endif 275 280 276 static void createRendererIfNeeded(Element& element, ContainerNode& renderingParentNode, RenderTreePosition& renderTreePosition, PassRefPtr<RenderStyle> resolvedStyle)281 static void createRendererIfNeeded(Element& element, RenderStyle* inheritedStyle, RenderTreePosition& renderTreePosition, PassRefPtr<RenderStyle> resolvedStyle) 277 282 { 278 283 ASSERT(!element.renderer()); … … 280 285 RefPtr<RenderStyle> style = resolvedStyle; 281 286 282 if (!shouldCreateRenderer(element, render ingParentNode))287 if (!shouldCreateRenderer(element, renderTreePosition.parent())) 283 288 return; 284 289 285 290 if (!style) 286 style = styleForElement(element, renderingParentNode);291 style = styleForElement(element, inheritedStyle); 287 292 288 293 RenderNamedFlowThread* parentFlowRenderer = 0; … … 294 299 return; 295 300 296 renderTreePosition.computeNextSibling(element , renderingParentNode);301 renderTreePosition.computeNextSibling(element); 297 302 298 303 RenderTreePosition insertionPosition = parentFlowRenderer … … 371 376 } 372 377 373 static bool textRendererIsNeeded(const Text& textNode, ContainerNode& renderingParentNode)374 { 375 if (!render ingParentNode.renderer())376 return false; 377 RenderElement& parentRenderer = *renderingParentNode.renderer();378 static bool textRendererIsNeeded(const Text& textNode, const RenderTreePosition& renderTreePosition) 379 { 380 if (!renderTreePosition.parent()) 381 return false; 382 const RenderElement& parentRenderer = *renderTreePosition.parent(); 378 383 if (!parentRenderer.canHaveChildren()) 379 384 return false; 380 if (!renderingParentNode.childShouldCreateRenderer(textNode)) 381 return false; 382 385 if (parentRenderer.element() && !parentRenderer.element()->childShouldCreateRenderer(textNode)) 386 return false; 383 387 if (textNode.isEditingText()) 384 388 return true; 385 389 if (!textNode.length()) 386 return false;387 if (parentRenderer.style().display() == NONE)388 390 return false; 389 391 if (!textNode.containsOnlyWhitespace()) … … 410 412 while (first && first->isFloatingOrOutOfFlowPositioned()) 411 413 first = first->nextSibling(); 412 RenderObject* nextRenderer = nextSiblingRenderer(textNode, *textNode.parentNode());414 RenderObject* nextRenderer = nextSiblingRenderer(textNode, parentRenderer); 413 415 if (!first || nextRenderer == first) { 414 416 // Whitespace at the start of a block just goes away. Don't even make a render object for this text. … … 419 421 } 420 422 421 static void createTextRendererIfNeeded(Text& textNode, ContainerNode& renderingParentNode,RenderTreePosition& renderTreePosition)423 static void createTextRendererIfNeeded(Text& textNode, RenderTreePosition& renderTreePosition) 422 424 { 423 425 ASSERT(!textNode.renderer()); 424 426 425 if (!textRendererIsNeeded(textNode, render ingParentNode))426 return; 427 428 auto newRenderer = textNode.createTextRenderer( *renderingParentNode.renderStyle());427 if (!textRendererIsNeeded(textNode, renderTreePosition)) 428 return; 429 430 auto newRenderer = textNode.createTextRenderer(renderTreePosition.parent()->style()); 429 431 ASSERT(newRenderer); 430 432 431 renderTreePosition.computeNextSibling(textNode , renderingParentNode);433 renderTreePosition.computeNextSibling(textNode); 432 434 433 435 if (!renderTreePosition.canInsert(*newRenderer)) … … 443 445 } 444 446 445 void attachTextRenderer(Text& textNode, ContainerNode& renderingParentNode,RenderTreePosition& renderTreePosition)446 { 447 createTextRendererIfNeeded(textNode, render ingParentNode, renderTreePosition);447 void attachTextRenderer(Text& textNode, RenderTreePosition& renderTreePosition) 448 { 449 createTextRendererIfNeeded(textNode, renderTreePosition); 448 450 449 451 textNode.clearNeedsStyleRecalc(); … … 460 462 { 461 463 ContainerNode* renderingParentNode = NodeRenderingTraversal::parent(&textNode); 462 if (!renderingParentNode )464 if (!renderingParentNode || !renderingParentNode->renderer()) 463 465 return; 464 466 … … 466 468 467 469 RenderTreePosition renderTreePosition(renderingParentNode->renderer()); 468 resolveTextNode(textNode, *renderingParentNode,renderTreePosition);470 resolveTextNode(textNode, renderTreePosition); 469 471 470 472 if (hadRenderer && textNode.renderer()) … … 472 474 } 473 475 474 static void attachChildren(ContainerNode& current, ContainerNode& renderingParentNode, RenderTreePosition& renderTreePosition)476 static void attachChildren(ContainerNode& current, RenderStyle* inheritedStyle, RenderTreePosition& renderTreePosition) 475 477 { 476 478 for (Node* child = current.firstChild(); child; child = child->nextSibling()) { … … 481 483 } 482 484 if (child->isTextNode()) { 483 attachTextRenderer(*toText(child), render ingParentNode, renderTreePosition);485 attachTextRenderer(*toText(child), renderTreePosition); 484 486 continue; 485 487 } 486 488 if (child->isElementNode()) 487 attachRenderTree(*toElement(child), renderingParentNode, renderTreePosition, nullptr);488 } 489 } 490 491 static void attachDistributedChildren(InsertionPoint& insertionPoint, ContainerNode& renderingParentNode, RenderTreePosition& renderTreePosition)489 attachRenderTree(*toElement(child), inheritedStyle, renderTreePosition, nullptr); 490 } 491 } 492 493 static void attachDistributedChildren(InsertionPoint& insertionPoint, RenderStyle* inheritedStyle, RenderTreePosition& renderTreePosition) 492 494 { 493 495 if (ShadowRoot* shadowRoot = insertionPoint.containingShadowRoot()) … … 500 502 if (current->renderer()) 501 503 continue; 502 attachTextRenderer(*toText(current), render ingParentNode, renderTreePosition);504 attachTextRenderer(*toText(current), renderTreePosition); 503 505 continue; 504 506 } … … 507 509 if (currentElement.renderer()) 508 510 detachRenderTree(currentElement); 509 attachRenderTree(currentElement, renderingParentNode, renderTreePosition, nullptr);511 attachRenderTree(currentElement, inheritedStyle, renderTreePosition, nullptr); 510 512 } 511 513 } 512 514 // Use actual children as fallback content. 513 515 if (!insertionPoint.hasDistribution()) 514 attachChildren(insertionPoint, renderingParentNode, renderTreePosition);516 attachChildren(insertionPoint, inheritedStyle, renderTreePosition); 515 517 } 516 518 … … 520 522 521 523 RenderTreePosition renderTreePosition(shadowRoot.hostElement()->renderer()); 522 attachChildren(shadowRoot, *shadowRoot.hostElement(), renderTreePosition);524 attachChildren(shadowRoot, shadowRoot.hostElement()->renderStyle(), renderTreePosition); 523 525 524 526 shadowRoot.clearNeedsStyleRecalc(); … … 573 575 RefPtr<PseudoElement> pseudoElement = PseudoElement::create(current, pseudoId); 574 576 setBeforeOrAfterPseudoElement(current, pseudoElement, pseudoId); 575 attachRenderTree(*pseudoElement, current , renderTreePosition, nullptr);576 } 577 578 static void attachRenderTree(Element& current, ContainerNode& renderingParentNode, RenderTreePosition& renderTreePosition, PassRefPtr<RenderStyle> resolvedStyle)577 attachRenderTree(*pseudoElement, current.renderStyle(), renderTreePosition, nullptr); 578 } 579 580 static void attachRenderTree(Element& current, RenderStyle* inheritedStyle, RenderTreePosition& renderTreePosition, PassRefPtr<RenderStyle> resolvedStyle) 579 581 { 580 582 PostResolutionCallbackDisabler callbackDisabler(current.document()); … … 584 586 current.willAttachRenderers(); 585 587 586 createRendererIfNeeded(current, renderingParentNode, renderTreePosition, resolvedStyle);588 createRendererIfNeeded(current, inheritedStyle, renderTreePosition, resolvedStyle); 587 589 588 590 if (current.parentElement() && current.parentElement()->isInCanvasSubtree()) … … 601 603 602 604 if (isInsertionPoint(current)) 603 attachDistributedChildren(toInsertionPoint(current), renderingParentNode, renderTreePosition);605 attachDistributedChildren(toInsertionPoint(current), inheritedStyle, renderTreePosition); 604 606 else 605 attachChildren(current, current , childRenderTreePosition);607 attachChildren(current, current.renderStyle(), childRenderTreePosition); 606 608 607 609 current.clearNeedsStyleRecalc(); … … 614 616 615 617 current.updateFocusAppearanceAfterAttachIfNeeded(); 616 618 617 619 if (current.hasCustomStyleResolveCallbacks()) 618 620 current.didAttachRenderers(); … … 713 715 } 714 716 715 static Change resolveLocal(Element& current, ContainerNode& renderingParentNode, RenderTreePosition& renderTreePosition, Change inheritedChange)717 static Change resolveLocal(Element& current, RenderStyle* inheritedStyle, RenderTreePosition& renderTreePosition, Change inheritedChange) 716 718 { 717 719 Change localChange = Detach; … … 721 723 Document& document = current.document(); 722 724 if (currentStyle && current.styleChangeType() != ReconstructRenderTree) { 723 newStyle = styleForElement(current, renderingParentNode);725 newStyle = styleForElement(current, inheritedStyle); 724 726 localChange = determineChange(currentStyle.get(), newStyle.get()); 725 727 } … … 727 729 if (current.renderer() || current.isNamedFlowContentNode()) 728 730 detachRenderTree(current, ReattachDetach); 729 attachRenderTree(current, renderingParentNode, renderTreePosition, newStyle.release());731 attachRenderTree(current, inheritedStyle, renderTreePosition, newStyle.release()); 730 732 invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded(current); 731 733 … … 759 761 } 760 762 761 void resolveTextNode(Text& text, ContainerNode& renderingParentNode,RenderTreePosition& renderTreePosition)763 void resolveTextNode(Text& text, RenderTreePosition& renderTreePosition) 762 764 { 763 765 text.clearNeedsStyleRecalc(); 764 766 765 767 bool hasRenderer = text.renderer(); 766 bool needsRenderer = textRendererIsNeeded(text, render ingParentNode);768 bool needsRenderer = textRendererIsNeeded(text, renderTreePosition); 767 769 if (hasRenderer) { 768 770 if (needsRenderer) … … 774 776 if (!needsRenderer) 775 777 return; 776 attachTextRenderer(text, render ingParentNode, renderTreePosition);778 attachTextRenderer(text, renderTreePosition); 777 779 invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded(text); 778 780 } … … 786 788 renderTreePosition.invalidateNextSibling(*child->renderer()); 787 789 if (child->isTextNode() && child->needsStyleRecalc()) { 788 resolveTextNode(*toText(child), host,renderTreePosition);790 resolveTextNode(*toText(child), renderTreePosition); 789 791 continue; 790 792 } 791 793 if (child->isElementNode()) 792 resolveTree(*toElement(child), host , renderTreePosition, change);794 resolveTree(*toElement(child), host.renderStyle(), renderTreePosition, change); 793 795 } 794 796 … … 804 806 805 807 if (needsPseudoElement(current, pseudoId)) 806 resolveTree(*existingPseudoElement, current , renderTreePosition, current.needsStyleRecalc() ? Force : change);808 resolveTree(*existingPseudoElement, current.renderStyle(), renderTreePosition, current.needsStyleRecalc() ? Force : change); 807 809 else 808 810 clearBeforeOrAfterPseudoElement(current, pseudoId); … … 864 866 #endif // PLATFORM(IOS) 865 867 866 void resolveTree(Element& current, ContainerNode& renderingParentNode, RenderTreePosition& renderTreePosition, Change change)868 void resolveTree(Element& current, RenderStyle* inheritedStyle, RenderTreePosition& renderTreePosition, Change change) 867 869 { 868 870 ASSERT(change != Detach); … … 873 875 } 874 876 875 bool hasParentStyle = renderingParentNode.renderStyle();876 877 bool hasDirectAdjacentRules = current.childrenAffectedByDirectAdjacentRules(); 877 878 bool hasIndirectAdjacentRules = current.childrenAffectedByForwardPositionalRules(); … … 884 885 current.resetComputedStyle(); 885 886 886 if ( hasParentStyle && (change >= Inherit || current.needsStyleRecalc()))887 change = resolveLocal(current, renderingParentNode, renderTreePosition, change);887 if (inheritedStyle && (change >= Inherit || current.needsStyleRecalc())) 888 change = resolveLocal(current, inheritedStyle, renderTreePosition, change); 888 889 889 890 if (change != Detach) { … … 909 910 childRenderTreePosition.invalidateNextSibling(*child->renderer()); 910 911 if (child->isTextNode() && child->needsStyleRecalc()) { 911 resolveTextNode(*toText(child), c urrent, childRenderTreePosition);912 resolveTextNode(*toText(child), childRenderTreePosition); 912 913 continue; 913 914 } … … 920 921 if (change >= Inherit || childElement->childNeedsStyleRecalc() || childElement->needsStyleRecalc()) { 921 922 parentPusher.push(); 922 resolveTree(*childElement, current , childRenderTreePosition, change);923 resolveTree(*childElement, current.renderStyle(), childRenderTreePosition, change); 923 924 } 924 925 forceCheckOfNextElementSibling = childRulesChanged && hasDirectAdjacentRules; … … 961 962 if (change < Inherit && !documentElement->childNeedsStyleRecalc() && !documentElement->needsStyleRecalc()) 962 963 return; 963 RenderTreePosition renderTreePosition( document.renderView());964 resolveTree(*documentElement, document , renderTreePosition, change);964 RenderTreePosition renderTreePosition(*document.renderView()); 965 resolveTree(*documentElement, document.renderStyle(), renderTreePosition, change); 965 966 } 966 967 -
trunk/Source/WebCore/svg/SVGAElement.cpp
r170774 r172409 249 249 if (child.hasTagName(SVGNames::aTag)) 250 250 return false; 251 if (parentNode() && parentNode()->isSVGElement()) 252 return parentNode()->childShouldCreateRenderer(child); 251 252 if (parentElement() && parentElement()->isSVGElement()) 253 return parentElement()->childShouldCreateRenderer(child); 253 254 254 255 return SVGElement::childShouldCreateRenderer(child); -
trunk/Source/WebCore/svg/SVGDocument.cpp
r167798 r172409 77 77 } 78 78 79 bool SVGDocument::childShouldCreateRenderer(const Node& child) const80 {81 if (isSVGSVGElement(child))82 return toSVGSVGElement(child).isValid();83 return true;84 }85 86 79 PassRefPtr<Document> SVGDocument::cloneDocumentWithoutChildren() const 87 80 { -
trunk/Source/WebCore/svg/SVGDocument.h
r167798 r172409 48 48 SVGDocument(Frame*, const URL&); 49 49 50 virtual bool childShouldCreateRenderer(const Node&) const override;51 52 50 virtual PassRefPtr<Document> cloneDocumentWithoutChildren() const override; 53 51 -
trunk/Source/WebCore/svg/SVGSVGElement.cpp
r171591 r172409 460 460 bool SVGSVGElement::rendererIsNeeded(const RenderStyle& style) 461 461 { 462 if (!isValid()) 463 return false; 462 464 // FIXME: We should respect display: none on the documentElement svg element 463 465 // but many things in FrameView and SVGImage depend on the RenderSVGRoot when
Note: See TracChangeset
for help on using the changeset viewer.