Changeset 106544 in webkit


Ignore:
Timestamp:
Feb 2, 2012 2:25:25 AM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Regions should ignore the saved currentRenderFlowThread during repainting
because if there are imbricated flow threads, it might end using the wrong one.

[CSSRegions] Assert failure in RenderView::computeRectForRepaint
https://bugs.webkit.org/show_bug.cgi?id=77430

Patch by Raul Hudea <rhudea@adobe.com> on 2012-02-02
Reviewed by David Hyatt.

Source/WebCore:

Test: fast/regions/imbricated-flow-threads-crash.html

  • rendering/RenderFlowThread.cpp:

(CurrentRenderFlowThreadDisabler):
(WebCore::CurrentRenderFlowThreadDisabler::CurrentRenderFlowThreadDisabler):
(WebCore::CurrentRenderFlowThreadDisabler::~CurrentRenderFlowThreadDisabler):
(WebCore):
(WebCore::RenderFlowThread::repaintRectangleInRegions):

LayoutTests:

  • fast/regions/imbricated-flow-threads-crash-expected.txt: Added.
  • fast/regions/imbricated-flow-threads-crash.html: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r106539 r106544  
     12012-02-02  Raul Hudea  <rhudea@adobe.com>
     2
     3        Regions should ignore the saved currentRenderFlowThread during repainting
     4        because if there are imbricated flow threads, it might end using the wrong one.
     5
     6        [CSSRegions] Assert failure in RenderView::computeRectForRepaint
     7        https://bugs.webkit.org/show_bug.cgi?id=77430
     8
     9        Reviewed by David Hyatt.
     10
     11        * fast/regions/imbricated-flow-threads-crash-expected.txt: Added.
     12        * fast/regions/imbricated-flow-threads-crash.html: Added.
     13
    1142012-02-02  Kentaro Hara  <haraken@chromium.org>
    215
  • trunk/Source/WebCore/ChangeLog

    r106542 r106544  
     12012-02-02  Raul Hudea  <rhudea@adobe.com>
     2
     3        Regions should ignore the saved currentRenderFlowThread during repainting
     4        because if there are imbricated flow threads, it might end using the wrong one.
     5
     6        [CSSRegions] Assert failure in RenderView::computeRectForRepaint
     7        https://bugs.webkit.org/show_bug.cgi?id=77430
     8
     9        Reviewed by David Hyatt.
     10
     11        Test: fast/regions/imbricated-flow-threads-crash.html
     12
     13        * rendering/RenderFlowThread.cpp:
     14        (CurrentRenderFlowThreadDisabler):
     15        (WebCore::CurrentRenderFlowThreadDisabler::CurrentRenderFlowThreadDisabler):
     16        (WebCore::CurrentRenderFlowThreadDisabler::~CurrentRenderFlowThreadDisabler):
     17        (WebCore):
     18        (WebCore::RenderFlowThread::repaintRectangleInRegions):
     19
    1202012-02-02  Kinuko Yasuda  <kinuko@chromium.org>
    221
  • trunk/Source/WebCore/rendering/RenderFlowThread.cpp

    r106281 r106544  
    300300};
    301301
     302class CurrentRenderFlowThreadDisabler {
     303    WTF_MAKE_NONCOPYABLE(CurrentRenderFlowThreadDisabler);
     304public:
     305    CurrentRenderFlowThreadDisabler(RenderView* view)
     306        : m_view(view)
     307        , m_renderFlowThread(0)
     308    {
     309        m_renderFlowThread = m_view->currentRenderFlowThread();
     310        if (m_renderFlowThread)
     311            view->setCurrentRenderFlowThread(0);
     312    }
     313    ~CurrentRenderFlowThreadDisabler()
     314    {
     315        if (m_renderFlowThread)
     316            m_view->setCurrentRenderFlowThread(m_renderFlowThread);
     317    }
     318private:
     319    RenderView* m_view;
     320    RenderFlowThread* m_renderFlowThread;
     321};
     322
    302323void RenderFlowThread::layout()
    303324{
     
    521542        region->flipForWritingMode(clippedRect);
    522543        LayoutStateDisabler layoutStateDisabler(view()); // We can't use layout state to repaint, since the region is somewhere else.
     544
     545        // Can't use currentFlowThread as it possible to have imbricated flow threads and the wrong one could be used,
     546        // so, we let each region figure out the proper enclosing flow thread
     547        CurrentRenderFlowThreadDisabler disabler(view());
    523548        region->repaintRectangle(clippedRect, immediate);
    524549    }
Note: See TracChangeset for help on using the changeset viewer.