Changeset 74134 in webkit


Ignore:
Timestamp:
Dec 15, 2010 12:15:38 PM (13 years ago)
Author:
andersca@apple.com
Message:

2010-12-15 Anders Carlsson <andersca@apple.com>

Reviewed by Maciej Stachowiak.

Semi-reproducible crash in ChunkedUpdateDrawingArea::paintIntoUpdateChunk closing a particular yahoo page
https://bugs.webkit.org/show_bug.cgi?id=51126
<rdar://problem/8771219>

Laying out the web page can cause the drawing area to change so we need to protect against this.

  • WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp: (WebKit::ChunkedUpdateDrawingArea::display):
  • WebProcess/WebPage/LayerBackedDrawingArea.cpp: (WebKit::LayerBackedDrawingArea::display):
  • WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm: (WebKit::LayerBackedDrawingArea::updateLayoutRunLoopObserverFired):
Location:
trunk/WebKit2
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit2/ChangeLog

    r74131 r74134  
     12010-12-15  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        Semi-reproducible crash in ChunkedUpdateDrawingArea::paintIntoUpdateChunk closing a particular yahoo page
     6        https://bugs.webkit.org/show_bug.cgi?id=51126
     7        <rdar://problem/8771219>
     8
     9        Laying out the web page can cause the drawing area to change so we need to protect against this.
     10
     11        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
     12        (WebKit::ChunkedUpdateDrawingArea::display):
     13        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
     14        (WebKit::LayerBackedDrawingArea::display):
     15        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
     16        (WebKit::LayerBackedDrawingArea::updateLayoutRunLoopObserverFired):
     17
    1182010-12-15  Brian Weinstein  <bweinstein@apple.com>
    219
  • trunk/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp

    r73036 r74134  
    8888        return;
    8989
     90    // Laying out the page can cause the drawing area to change so we keep an extra reference.
     91    RefPtr<ChunkedUpdateDrawingArea> protect(this);
     92
    9093    // Layout if necessary.
    9194    m_webPage->layoutIfNeeded();
    9295 
     96    if (m_webPage->drawingArea() != this)
     97        return;
     98   
    9399    IntRect dirtyRect = m_dirtyRect;
    94100    m_dirtyRect = IntRect();
     
    134140    m_webPage->layoutIfNeeded();
    135141
    136     if (m_webPage->drawingArea() != this) {
    137         // The drawing area changed, return early.
    138         return;
    139     }
     142    if (m_webPage->drawingArea() != this)
     143        return;
    140144
    141145    if (m_paintingIsSuspended) {
  • trunk/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp

    r73073 r74134  
    8989void LayerBackedDrawingArea::display()
    9090{
     91    // Laying out the page can cause the drawing area to change so we keep an extra reference.
     92    RefPtr<LayerBackedDrawingArea> protect(this);
     93
    9194    // Layout if necessary.
    9295    m_webPage->layoutIfNeeded();
     96
     97    if (m_webPage->drawingArea() != this)
     98        return;
    9399}
    94100
     
    111117    m_webPage->layoutIfNeeded();
    112118
    113     if (m_webPage->drawingArea() != this) {
    114         // The drawing area changed, return early.
    115         return;
    116     }
     119    if (m_webPage->drawingArea() != this)
     120        return;
    117121   
    118122    WebProcess::shared().connection()->send(DrawingAreaProxyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(viewSize));
  • trunk/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm

    r73058 r74134  
    164164void LayerBackedDrawingArea::updateLayoutRunLoopObserverFired()
    165165{
     166    // Laying out the page can cause the drawing area to change so we keep an extra reference.
     167    RefPtr<LayerBackedDrawingArea> protect(this);
     168
    166169    m_webPage->layoutIfNeeded();
     170
     171    if (m_webPage->drawingArea() != this)
     172        return;
    167173   
    168174    if (m_attached)
Note: See TracChangeset for help on using the changeset viewer.