Changeset 65832 in webkit


Ignore:
Timestamp:
Aug 23, 2010 2:31:11 PM (14 years ago)
Author:
commit-queue@webkit.org
Message:

2010-08-23 Mihai Parparita <mihaip@chromium.org>

Reviewed by David Hyatt.

Assertion failure in FrameView::layout when modifying the DOM during
pagehide with PageCache enabled
https://bugs.webkit.org/show_bug.cgi?id=43152

Always unschedule any pending relayouts when changing the view, not just
when we're not using the page cache. Otherwise touching the DOM during
the pagehide handler can lead to layouts that will be done by the time
the view has changed, which triggers an assert.

  • fast/loader/resources/unschedule-relayout-after-unload-target.html: Added.
  • fast/loader/unschedule-relayout-after-unload-expected.txt: Added.
  • fast/loader/unschedule-relayout-after-unload.html: Added.

2010-08-23 Mihai Parparita <mihaip@chromium.org>

Reviewed by David Hyatt.

Assertion failure in FrameView::layout when modifying the DOM during
pagehide with PageCache enabled
https://bugs.webkit.org/show_bug.cgi?id=43152

Always unschedule any pending relayouts when changing the view, not just
when we're not using the page cache. Otherwise touching the DOM during
the pagehide handler can lead to layouts that will be done by the time
the view has changed, which triggers an assert.

Test: fast/loader/unschedule-relayout-after-unload.html

  • page/Frame.cpp: (WebCore::Frame::setView): move unscheduleRelayout outside page cache check.
  • page/FrameView.cpp: (WebCore::FrameView::layout): remove early return now that assert should be correct (and the referenced rdar:// got fixed).
Location:
trunk
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r65830 r65832  
     12010-08-23  Mihai Parparita  <mihaip@chromium.org>
     2
     3        Reviewed by David Hyatt.
     4
     5        Assertion failure in FrameView::layout when modifying the DOM during
     6        pagehide with PageCache enabled
     7        https://bugs.webkit.org/show_bug.cgi?id=43152
     8
     9        Always unschedule any pending relayouts when changing the view, not just
     10        when we're not using the page cache. Otherwise touching the DOM during
     11        the pagehide handler can lead to layouts that will be done by the time
     12        the view has changed, which triggers an assert.
     13
     14        * fast/loader/resources/unschedule-relayout-after-unload-target.html: Added.
     15        * fast/loader/unschedule-relayout-after-unload-expected.txt: Added.
     16        * fast/loader/unschedule-relayout-after-unload.html: Added.
     17
    1182010-08-20  Jon Honeycutt  <jhoneycutt@apple.com>
    219
  • trunk/WebCore/ChangeLog

    r65827 r65832  
     12010-08-23  Mihai Parparita  <mihaip@chromium.org>
     2
     3        Reviewed by David Hyatt.
     4
     5        Assertion failure in FrameView::layout when modifying the DOM during
     6        pagehide with PageCache enabled
     7        https://bugs.webkit.org/show_bug.cgi?id=43152
     8
     9        Always unschedule any pending relayouts when changing the view, not just
     10        when we're not using the page cache. Otherwise touching the DOM during
     11        the pagehide handler can lead to layouts that will be done by the time
     12        the view has changed, which triggers an assert.
     13
     14        Test: fast/loader/unschedule-relayout-after-unload.html
     15
     16        * page/Frame.cpp:
     17        (WebCore::Frame::setView): move unscheduleRelayout outside page cache
     18        check.
     19        * page/FrameView.cpp:
     20        (WebCore::FrameView::layout): remove early return now that assert
     21        should be correct (and the referenced rdar:// got fixed).
     22
    1232010-08-23  Abhishek Arya  <inferno@chromium.org>
    224
  • trunk/WebCore/page/Frame.cpp

    r65787 r65832  
    238238        // FIXME: We don't call willRemove here. Why is that OK?
    239239        m_doc->detach();
    240         if (m_view)
    241             m_view->unscheduleRelayout();
    242     }
     240    }
     241   
     242    if (m_view)
     243        m_view->unscheduleRelayout();
     244   
    243245    eventHandler()->clear();
    244246
  • trunk/WebCore/page/FrameView.cpp

    r65787 r65832  
    634634
    635635    ASSERT(m_frame->view() == this);
    636     // This early return should be removed when rdar://5598072 is resolved. In the meantime, there is a
    637     // gigantic CrashTracer because of this issue, and the early return will hopefully cause graceful
    638     // failure instead. 
    639     if (m_frame->view() != this)
    640         return;
    641636
    642637    Document* document = m_frame->document();
Note: See TracChangeset for help on using the changeset viewer.