Changeset 141982 in webkit


Ignore:
Timestamp:
Feb 6, 2013 3:32:16 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:
[CSSRegions] Assertion failure in Node::detach (!renderer
renderer->inRenderFlowThread())

https://bugs.webkit.org/show_bug.cgi?id=104517

Patch by Mihai Maerean <Mihai Maerean> on 2013-02-06
Reviewed by Julien Chaffraix.

Source/WebCore:

The RenderObject::inRenderFlowThread bit could have become disconnected from the fact that the RenderObject
has (or not) an enclosing RenderFlowThread.
The cause of this was that, when setting or removing the parent of a RenderObject, the inRenderFlowThread flags
wasn't being set/reset for the children too.
This is now fixed by calling the new setInRenderFlowThreadIncludingDescendants.

The ASSERT was hit for anonymous blocks when detaching the document.

Test: fast/regions/detaching-regions-with-anonymous-blocks.html

  • rendering/RenderObject.cpp:

(WebCore::RenderObject::setInRenderFlowThreadRecursive):
(WebCore):

  • rendering/RenderObject.h:

(WebCore::RenderObject::setParent):
(RenderObject):

LayoutTests:

The test adds an anonymous block in a region and detaches the body of document. The ASSERT is not hit anymore.

  • fast/regions/detaching-regions-with-anonymous-blocks-expected.txt: Added.
  • fast/regions/detaching-regions-with-anonymous-blocks.html: Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r141981 r141982  
     12013-02-06  Mihai Maerean  <mmaerean@adobe.com>
     2
     3        [CSSRegions] Assertion failure in Node::detach (!renderer || renderer->inRenderFlowThread())
     4        https://bugs.webkit.org/show_bug.cgi?id=104517
     5
     6        Reviewed by Julien Chaffraix.
     7
     8        The test adds an anonymous block in a region and detaches the body of document. The ASSERT is not hit anymore.
     9
     10        * fast/regions/detaching-regions-with-anonymous-blocks-expected.txt: Added.
     11        * fast/regions/detaching-regions-with-anonymous-blocks.html: Added.
     12
    1132013-02-06  Marja Hölttä  <marja@chromium.org>
    214
  • trunk/Source/WebCore/ChangeLog

    r141981 r141982  
     12013-02-06  Mihai Maerean  <mmaerean@adobe.com>
     2
     3        [CSSRegions] Assertion failure in Node::detach (!renderer || renderer->inRenderFlowThread())
     4        https://bugs.webkit.org/show_bug.cgi?id=104517
     5
     6        Reviewed by Julien Chaffraix.
     7
     8        The RenderObject::inRenderFlowThread bit could have become disconnected from the fact that the RenderObject
     9        has (or not) an enclosing RenderFlowThread.
     10        The cause of this was that, when setting or removing the parent of a RenderObject, the inRenderFlowThread flags
     11        wasn't being set/reset for the children too.
     12        This is now fixed by calling the new setInRenderFlowThreadIncludingDescendants.
     13
     14        The ASSERT was hit for anonymous blocks when detaching the document.
     15
     16        Test: fast/regions/detaching-regions-with-anonymous-blocks.html
     17
     18        * rendering/RenderObject.cpp:
     19        (WebCore::RenderObject::setInRenderFlowThreadRecursive):
     20        (WebCore):
     21        * rendering/RenderObject.h:
     22        (WebCore::RenderObject::setParent):
     23        (RenderObject):
     24
    1252013-02-06  Marja Hölttä  <marja@chromium.org>
    226
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r141570 r141982  
    277277{
    278278    return node() && node()->renderer() == this && node()->hasTagName(marqueeTag);
     279}
     280
     281void RenderObject::setInRenderFlowThreadIncludingDescendants(bool b)
     282{
     283    setInRenderFlowThread(b);
     284
     285    for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
     286        ASSERT(b != child->inRenderFlowThread());
     287        child->setInRenderFlowThreadIncludingDescendants(b);
     288    }
    279289}
    280290
  • trunk/Source/WebCore/rendering/RenderObject.h

    r141524 r141982  
    271271    {
    272272        m_parent = parent;
    273         if (parent && parent->inRenderFlowThread())
    274             setInRenderFlowThread(true);
     273        if (parent && parent->inRenderFlowThread() && !inRenderFlowThread())
     274            setInRenderFlowThreadIncludingDescendants(true);
    275275        else if (!parent && inRenderFlowThread())
    276             setInRenderFlowThread(false);
     276            setInRenderFlowThreadIncludingDescendants(false);
    277277    }
    278278    //////////////////////////////////////////
     
    434434    bool inRenderFlowThread() const { return m_bitfields.inRenderFlowThread(); }
    435435    void setInRenderFlowThread(bool b = true) { m_bitfields.setInRenderFlowThread(b); }
     436
     437    void setInRenderFlowThreadIncludingDescendants(bool = true);
    436438
    437439    virtual bool requiresForcedStyleRecalcPropagation() const { return false; }
Note: See TracChangeset for help on using the changeset viewer.