Changeset 143077 in webkit


Ignore:
Timestamp:
Feb 15, 2013 5:42:13 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

[Qt][WK2] Crash on window resize if WebProcess is closed/crashed
https://bugs.webkit.org/show_bug.cgi?id=109216

Patch by Adenilson Cavalcanti <cavalcantii@gmail.com> on 2013-02-15
Reviewed by Benjamin Poulain.

Only make calls into DrawingAreaProxy pointer after checking its state.

When the WebProcess was closed or crashed, WebKit::WebPageProxy will set
its DrawingAreaProxy pointer to null. Resize events on UIProcess/client will
try to access the object to update the geometry and forward this information
into the WebProcess. This would create a crash scenario that is fixed by this patch.

  • UIProcess/API/qt/qquickwebview.cpp:

(QQuickWebViewPrivate::didRelaunchProcess):
(QQuickWebViewLegacyPrivate::updateViewportSize):

Location:
trunk/Source/WebKit2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r143071 r143077  
     12013-02-15  Adenilson Cavalcanti  <cavalcantii@gmail.com>
     2
     3        [Qt][WK2] Crash on window resize if WebProcess is closed/crashed
     4        https://bugs.webkit.org/show_bug.cgi?id=109216
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Only make calls into DrawingAreaProxy pointer after checking its state.
     9
     10        When the WebProcess was closed or crashed, WebKit::WebPageProxy will set
     11        its DrawingAreaProxy pointer to null. Resize events on UIProcess/client will
     12        try to access the object to update the geometry and forward this information
     13        into the WebProcess. This would create a crash scenario that is fixed by this patch.
     14
     15        * UIProcess/API/qt/qquickwebview.cpp:
     16        (QQuickWebViewPrivate::didRelaunchProcess):
     17        (QQuickWebViewLegacyPrivate::updateViewportSize):
     18
    1192013-02-15  Anders Carlsson  <andersca@apple.com>
    220
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp

    r142997 r143077  
    586586    qWarning("WARNING: The web process has been successfully restarted.");
    587587
    588     webPageProxy->drawingArea()->setSize(viewSize(), IntSize());
    589 
    590     updateViewportSize();
    591     updateUserScripts();
    592     updateSchemeDelegates();
     588    if (DrawingAreaProxy *drawingArea = webPageProxy->drawingArea()) {
     589        drawingArea->setSize(viewSize(), IntSize());
     590
     591        updateViewportSize();
     592        updateUserScripts();
     593        updateSchemeDelegates();
     594    }
    593595}
    594596
     
    939941    pageView->setContentsSize(viewportSize);
    940942
    941     // The fixed layout is handled by the FrameView and the drawing area doesn't behave differently
    942     // whether its fixed or not. We still need to tell the drawing area which part of it
    943     // has to be rendered on tiles, and in desktop mode it's all of it.
    944     webPageProxy->drawingArea()->setSize(viewportSize.toSize(), IntSize());
    945     // The backing store scale factor should already be set to the device pixel ratio
    946     // of the underlying window, thus we set the effective scale to 1 here.
    947     webPageProxy->drawingArea()->setVisibleContentsRect(FloatRect(FloatPoint(), FloatSize(viewportSize)), FloatPoint());
     943    if (DrawingAreaProxy *drawingArea = webPageProxy->drawingArea()) {
     944        // The fixed layout is handled by the FrameView and the drawing area doesn't behave differently
     945        // whether its fixed or not. We still need to tell the drawing area which part of it
     946        // has to be rendered on tiles, and in desktop mode it's all of it.
     947        drawingArea->setSize(viewportSize.toSize(), IntSize());
     948        // The backing store scale factor should already be set to the device pixel ratio
     949        // of the underlying window, thus we set the effective scale to 1 here.
     950        drawingArea->setVisibleContentsRect(FloatRect(FloatPoint(), FloatSize(viewportSize)), FloatPoint());
     951    }
    948952}
    949953
Note: See TracChangeset for help on using the changeset viewer.