Changeset 155370 in webkit
- Timestamp:
- Sep 9, 2013, 12:21:53 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r155368 r155370 1 2013-09-09 Antti Koivisto <antti@apple.com> 2 3 Make RenderView anonymous 4 https://bugs.webkit.org/show_bug.cgi?id=121013 5 6 Reviewed by Darin Adler and Dave Hyatt. 7 8 RenderView is currently the only renderer that has an associated Node that is not either Element or Text. 9 By making it anonymous (not have associated node, RenderView::node() returns null) we will be able to 10 significantly tighten typing in both render and DOM trees. 11 12 * accessibility/AccessibilityRenderObject.cpp: 13 (WebCore::AccessibilityRenderObject::node): 14 15 We need to grab document() instead of node() in a few places for RenderViews to keep existing code 16 behaving like it did. 17 18 * inspector/InspectorLayerTreeAgent.cpp: 19 (WebCore::InspectorLayerTreeAgent::buildObjectForLayer): 20 21 Don't tell inspector that the root layer is anonymous for now to avoid changing behavior. 22 23 * rendering/RenderBlock.cpp: 24 (WebCore::RenderBlock::nodeForHitTest): 25 * rendering/RenderBox.cpp: 26 (WebCore::RenderBox::canBeProgramaticallyScrolled): 27 28 The old non-virtual RenderView test renderer->node == &renderer->document() does not work anymore. 29 Switch to isRenderView() which is now non-virtual in a number of places. 30 31 (WebCore::RenderBox::canAutoscroll): 32 (WebCore::RenderBox::findAutoscrollable): 33 (WebCore::RenderBox::computeReplacedLogicalHeightUsing): 34 * rendering/RenderBoxModelObject.cpp: 35 (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight): 36 * rendering/RenderLayerBacking.cpp: 37 (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): 38 * rendering/RenderObject.h: 39 (WebCore::RenderObject::isRenderReplaced): 40 (WebCore::RenderObject::isAnonymousBlock): 41 42 RenderView is anonymous but not a CSS anonymous block. 43 44 (WebCore::RenderObject::isText): 45 (WebCore::RenderObject::isRenderView): 46 47 Make isRenderView non-virtual since it is now hot. Reuse existing bits. 48 49 (WebCore::RenderObject::setIsText): 50 (WebCore::RenderObject::setIsRenderView): 51 (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields): 52 * rendering/RenderTreeAsText.cpp: 53 (WebCore::writeSelection): 54 * rendering/RenderView.cpp: 55 56 Make anonymous. 57 58 (WebCore::RenderView::RenderView): 59 * rendering/RenderView.h: 60 * rendering/svg/RenderSVGRoot.cpp: 61 (WebCore::RenderSVGRoot::computeReplacedLogicalHeight): 62 1 63 2013-09-09 Bem Jones-Bey <bjonesbe@adobe.com> 2 64 -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
r155366 r155370 672 672 673 673 Node* AccessibilityRenderObject::node() const 674 { 675 return m_renderer ? m_renderer->node() : 0; 674 { 675 if (!m_renderer) 676 return 0; 677 if (m_renderer->isRenderView()) 678 return &m_renderer->document(); 679 return m_renderer->node(); 676 680 } 677 681 678 682 String AccessibilityRenderObject::stringValue() const 679 683 { -
trunk/Source/WebCore/inspector/InspectorLayerTreeAgent.cpp
r154877 r155370 168 168 bool isAnonymous = renderer->isAnonymous(); 169 169 170 if (isReflection && isGenerated) 170 if (renderer->isRenderView()) 171 node = &renderer->document(); 172 else if (isReflection && isGenerated) 171 173 node = renderer->parent()->generatingNode(); 172 174 else if (isGenerated) … … 201 203 } 202 204 203 if (isAnonymous) { 205 // FIXME: RenderView is now really anonymous but don't tell about it to the frontend before making sure it can handle it. 206 if (isAnonymous && !renderer->isRenderView()) { 204 207 layerObject->setIsAnonymous(true); 205 208 if (RenderStyle* style = renderer->style()) { -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r155368 r155370 5166 5166 // continuation we're actually still inside the enclosing element 5167 5167 // that was split. Use the appropriate inner node. 5168 if (isRenderView()) 5169 return &document(); 5168 5170 return isAnonymousBlockContinuation() ? continuation()->node() : node(); 5169 5171 } -
trunk/Source/WebCore/rendering/RenderBox.cpp
r155366 r155370 802 802 bool RenderBox::canBeProgramaticallyScrolled() const 803 803 { 804 Node* node = this->node(); 805 if (node && node->isDocumentNode()) 804 if (isRenderView()) 806 805 return true; 807 806 … … 813 812 return true; 814 813 814 Node* node = this->node(); 815 815 return node && node->rendererIsEditable(); 816 816 } … … 830 830 bool RenderBox::canAutoscroll() const 831 831 { 832 if ( node() && node()->isDocumentNode())832 if (isRenderView()) 833 833 return view().frameView().isScrollable(); 834 834 … … 863 863 { 864 864 while (renderer && !(renderer->isBox() && toRenderBox(renderer)->canAutoscroll())) { 865 if ( !renderer->parent() && renderer->node() == &renderer->document() && renderer->document().ownerElement())865 if (renderer->isRenderView() && renderer->document().ownerElement()) 866 866 renderer = renderer->document().ownerElement()->renderer(); 867 867 else … … 2844 2844 { 2845 2845 RenderObject* cb = isOutOfFlowPositioned() ? container() : containingBlock(); 2846 while (cb->isAnonymous() ) {2846 while (cb->isAnonymous() && !cb->isRenderView()) { 2847 2847 cb = cb->containingBlock(); 2848 2848 toRenderBlock(cb)->addPercentHeightDescendant(const_cast<RenderBox*>(this)); -
trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp
r155318 r155370 229 229 // the closest non-anonymous ancestor box is used instead. 230 230 RenderBlock* cb = containingBlock(); 231 while (cb->isAnonymous() )231 while (cb->isAnonymous() && !cb->isRenderView()) 232 232 cb = cb->containingBlock(); 233 233 -
trunk/Source/WebCore/rendering/RenderLayerBacking.cpp
r155119 r155370 1569 1569 return false; 1570 1570 1571 if (renderer(). node() && renderer().node()->isDocumentNode()) {1571 if (renderer().isRenderView()) { 1572 1572 // Look to see if the root object has a non-simple background 1573 1573 RenderObject* rootObject = renderer().document().documentElement() ? renderer().document().documentElement()->renderer() : 0; -
trunk/Source/WebCore/rendering/RenderObject.h
r155366 r155370 359 359 virtual bool isRenderRegion() const { return false; } 360 360 virtual bool isRenderReplaced() const { return false; } 361 virtual bool isRenderView() const { return false; }362 361 virtual bool isReplica() const { return false; } 363 362 … … 522 521 // RenderBlock having a BLOCK or BOX display. Other classes such as RenderTextFragment 523 522 // are not RenderBlocks and will return false. See https://bugs.webkit.org/show_bug.cgi?id=56709. 524 return isAnonymous() && (style()->display() == BLOCK || style()->display() == BOX) && style()->styleType() == NOPSEUDO && isRenderBlock() && !isListMarker() && !isRenderFlowThread() 523 return isAnonymous() && (style()->display() == BLOCK || style()->display() == BOX) && style()->styleType() == NOPSEUDO && isRenderBlock() && !isListMarker() && !isRenderFlowThread() && !isRenderView() 525 524 #if ENABLE(FULLSCREEN_API) 526 525 && !isRenderFullScreen() … … 547 546 bool isPositioned() const { return m_bitfields.isPositioned(); } 548 547 549 bool isText() const { return m_bitfields.isText(); }548 bool isText() const { return !m_bitfields.isBox() && m_bitfields.isTextOrRenderView(); } 550 549 bool isBox() const { return m_bitfields.isBox(); } 550 bool isRenderView() const { return m_bitfields.isBox() && m_bitfields.isTextOrRenderView(); } 551 551 bool isInline() const { return m_bitfields.isInline(); } // inline object 552 552 bool isRunIn() const { return style()->display() == RUN_IN; } // run-in object … … 681 681 virtual bool computeBackgroundIsKnownToBeObscured() { return false; } 682 682 683 void setIsText() { m_bitfields.setIsText(true); }683 void setIsText() { ASSERT(!isBox()); m_bitfields.setIsTextOrRenderView(true); } 684 684 void setIsBox() { m_bitfields.setIsBox(true); } 685 void setIsRenderView() { ASSERT(isBox()); m_bitfields.setIsTextOrRenderView(true); } 685 686 void setReplaced(bool b = true) { m_bitfields.setIsReplaced(b); } 686 687 void setHorizontalWritingMode(bool b = true) { m_bitfields.setHorizontalWritingMode(b); } … … 1076 1077 , m_floating(false) 1077 1078 , m_isAnonymous(!node) 1078 , m_isText (false)1079 , m_isTextOrRenderView(false) 1079 1080 , m_isBox(false) 1080 1081 , m_isInline(true) … … 1107 1108 1108 1109 ADD_BOOLEAN_BITFIELD(isAnonymous, IsAnonymous); 1109 ADD_BOOLEAN_BITFIELD(isText , IsText);1110 ADD_BOOLEAN_BITFIELD(isTextOrRenderView, IsTextOrRenderView); 1110 1111 ADD_BOOLEAN_BITFIELD(isBox, IsBox); 1111 1112 ADD_BOOLEAN_BITFIELD(isInline, IsInline); -
trunk/Source/WebCore/rendering/RenderTreeAsText.cpp
r155109 r155370 836 836 } 837 837 838 static void writeSelection(TextStream& ts, const RenderObject* o) 839 { 840 Node* n = o->node(); 841 if (!n || !n->isDocumentNode()) 842 return; 843 844 Document* doc = toDocument(n); 845 Frame* frame = doc->frame(); 838 static void writeSelection(TextStream& ts, const RenderObject* renderer) 839 { 840 if (!renderer->isRenderView()) 841 return; 842 843 Frame* frame = renderer->document().frame(); 846 844 if (!frame) 847 845 return; -
trunk/Source/WebCore/rendering/RenderView.cpp
r155301 r155370 58 58 59 59 RenderView::RenderView(Document* document) 60 : RenderBlockFlow( document)60 : RenderBlockFlow(0) 61 61 , m_frameView(*document->view()) 62 62 , m_selectionStart(0) … … 76 76 #endif 77 77 { 78 setIsRenderView(); 79 setDocumentForAnonymous(document); 80 78 81 // FIXME: We should find a way to enforce this at compile time. 79 82 ASSERT(document->view()); -
trunk/Source/WebCore/rendering/RenderView.h
r155366 r155370 54 54 virtual const char* renderName() const OVERRIDE { return "RenderView"; } 55 55 56 virtual bool isRenderView() const OVERRIDE { return true; }57 58 56 virtual bool requiresLayer() const OVERRIDE { return true; } 59 57 -
trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp
r154580 r155370 186 186 RenderBlock* cb = containingBlock(); 187 187 ASSERT(cb); 188 while (cb->isAnonymous() ) {188 while (cb->isAnonymous() && !cb->isRenderView()) { 189 189 cb = cb->containingBlock(); 190 190 cb->addPercentHeightDescendant(const_cast<RenderSVGRoot*>(this));
Note:
See TracChangeset
for help on using the changeset viewer.