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

Side by Side Diff: Source/WebCore/rendering/RenderObject.cpp

Issue 10765005: Merge 120761 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1132/
Patch Set: Created 8 years, 5 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
« no previous file with comments | « LayoutTests/fast/block/positioning/insert-positioned-in-anonymous-crash-expected.txt ('k') | no next file » | 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) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2009 Google Inc. All rights reserved. 7 * Copyright (C) 2009 Google Inc. All rights reserved.
8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
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 692 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 void RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout() 703 void RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout()
704 { 704 {
705 ASSERT(hasLayer()); 705 ASSERT(hasLayer());
706 toRenderBoxModelObject(this)->layer()->setRepaintStatus(NeedsFullRepaintForP ositionedMovementLayout); 706 toRenderBoxModelObject(this)->layer()->setRepaintStatus(NeedsFullRepaintForP ositionedMovementLayout);
707 } 707 }
708 708
709 RenderBlock* RenderObject::containingBlock() const 709 RenderBlock* RenderObject::containingBlock() const
710 { 710 {
711 RenderObject* o = parent(); 711 RenderObject* o = parent();
712 if (!isText() && m_style->position() == FixedPosition) { 712 if (!isText() && m_style->position() == FixedPosition) {
713 while (o && !o->isRenderView() && !(o->hasTransform() && o->isRenderBloc k())) { 713 while (o) {
714 if (o->isRenderView())
715 break;
716 if (o->hasTransform() && o->isRenderBlock())
717 break;
714 #if ENABLE(SVG) 718 #if ENABLE(SVG)
715 // foreignObject is the containing block for its contents. 719 // foreignObject is the containing block for its contents.
716 if (o->isSVGForeignObject()) 720 if (o->isSVGForeignObject())
717 break; 721 break;
718 #endif 722 #endif
719 o = o->parent(); 723 o = o->parent();
720 } 724 }
725 ASSERT(!o->isAnonymousBlock());
721 } else if (!isText() && m_style->position() == AbsolutePosition) { 726 } else if (!isText() && m_style->position() == AbsolutePosition) {
722 while (o && (o->style()->position() == StaticPosition || (o->isInline() && !o->isReplaced())) && !o->isRenderView() && !(o->hasTransform() && o->isRende rBlock())) { 727 while (o) {
723 // For relpositioned inlines, we return the nearest non-anonymous en closing block. We don't try 728 // For relpositioned inlines, we return the nearest non-anonymous en closing block. We don't try
724 // to return the inline itself. This allows us to avoid having a po sitioned objects 729 // to return the inline itself. This allows us to avoid having a po sitioned objects
725 // list in all RenderInlines and lets us return a strongly-typed Ren derBlock* result 730 // list in all RenderInlines and lets us return a strongly-typed Ren derBlock* result
726 // from this method. The container() method can actually be used to obtain the 731 // from this method. The container() method can actually be used to obtain the
727 // inline directly. 732 // inline directly.
733 if (!o->style()->position() == StaticPosition && !(o->isInline() && !o->isReplaced()))
734 break;
735 if (o->isRenderView())
736 break;
737 if (o->hasTransform() && o->isRenderBlock())
738 break;
739
728 if (o->style()->position() == RelativePosition && o->isInline() && ! o->isReplaced()) { 740 if (o->style()->position() == RelativePosition && o->isInline() && ! o->isReplaced()) {
729 RenderBlock* relPositionedInlineContainingBlock = o->containingB lock(); 741 o = o->containingBlock();
730 while (relPositionedInlineContainingBlock->isAnonymousBlock()) 742 break;
731 relPositionedInlineContainingBlock = relPositionedInlineCont ainingBlock->containingBlock();
732 return relPositionedInlineContainingBlock;
733 } 743 }
734 #if ENABLE(SVG) 744 #if ENABLE(SVG)
735 if (o->isSVGForeignObject()) //foreignObject is the containing block for contents inside it 745 if (o->isSVGForeignObject()) //foreignObject is the containing block for contents inside it
736 break; 746 break;
737 #endif 747 #endif
738 748
739 o = o->parent(); 749 o = o->parent();
740 } 750 }
751
752 while (o && o->isAnonymousBlock())
753 o = o->containingBlock();
741 } else { 754 } else {
742 while (o && ((o->isInline() && !o->isReplaced()) || !o->isRenderBlock()) ) 755 while (o && ((o->isInline() && !o->isReplaced()) || !o->isRenderBlock()) )
743 o = o->parent(); 756 o = o->parent();
744 } 757 }
745 758
746 if (!o || !o->isRenderBlock()) 759 if (!o || !o->isRenderBlock())
747 return 0; // This can still happen in case of an orphaned tree 760 return 0; // This can still happen in case of an orphaned tree
748 761
749 return toRenderBlock(o); 762 return toRenderBlock(o);
750 } 763 }
(...skipping 2223 matching lines...) Expand 10 before | Expand all | Expand 10 after
2974 { 2987 {
2975 if (object1) { 2988 if (object1) {
2976 const WebCore::RenderObject* root = object1; 2989 const WebCore::RenderObject* root = object1;
2977 while (root->parent()) 2990 while (root->parent())
2978 root = root->parent(); 2991 root = root->parent();
2979 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); 2992 root->showRenderTreeAndMark(object1, "*", object2, "-", 0);
2980 } 2993 }
2981 } 2994 }
2982 2995
2983 #endif 2996 #endif
OLDNEW
« no previous file with comments | « LayoutTests/fast/block/positioning/insert-positioned-in-anonymous-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698