Skip to content
  • benjamin@webkit.org's avatar
    21e7432e
    [WK2] WebPageProxy loadURL() won't work when called just after terminateProcess() · 21e7432e
    benjamin@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=110743
    
    Patch by Adenilson Cavalcanti <cavalcantii@gmail.com> on 2013-04-12
    Reviewed by Benjamin Poulain.
    
    Source/WebKit2: 
    
    A call to loadURL() just after terminating WebProcess will fail thanks to
    WebPageProxy being in an undefined state since it is in the middle of its own
    cleanup after process termination.
    
    To properly fix this, not only WebPageProxy cleanup should be made
    at WebProcess termination request, but also WebProcessProxy needs
    to only return to its caller after terminating the process and
    closing connections. Otherwise, WebPageProxy can even be able to
    detect that WebProcess is no longer running, but a call to respawn
    the process will fail.
    
    To fix these issues, this patch moves the cleanup code to a shared private function
    that is used for both the cases i.e. user termination and real crash. WebProcess
    shutdown is done using a new method that ensures that all cleanup was done before
    returning.
    
    A last change introduced in this patch is that for user requested termination,
    clients are no longer notified of a crash (since it is not a crash).
    
    * UIProcess/WebPageProxy.cpp:
    (WebKit::WebPageProxy::terminateProcess):
    (WebKit::WebPageProxy::processDidCrash):
    (WebKit):
    (WebKit::WebPageProxy::resetStateAfterProcessExited):
    * UIProcess/WebPageProxy.h:
    (WebPageProxy):
    * UIProcess/WebProcessProxy.cpp:
    (WebKit::WebProcessProxy::userRequestedTerminate):
    (WebKit):
    * UIProcess/WebProcessProxy.h:
    (WebProcessProxy):
    
    Tools: 
    
    Adding a new test file to check if loading a page just after WebProcess
    has crashed (or was terminated) works. The test executes the
    following steps (Load, Crash, Load), thus stressing WebProcess
    reattach and process termination code path.
    
    * TestWebKitAPI/GNUmakefile.am:
    * TestWebKitAPI/PlatformEfl.cmake:
    * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
    * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
    (TestWebKitAPI::setPageLoaderClient):
    (TestWebKitAPI::TEST):
    * TestWebKitAPI/Tests/WebKit2/LoadPageOnCrash.cpp: Added.
    (TestWebKitAPI):
    (WebKit2CrashLoader):
    (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
    (TestWebKitAPI::WebKit2CrashLoader::loadUrl):
    (TestWebKitAPI::WebKit2CrashLoader::crashWebProcess):
    (TestWebKitAPI::didFinishLoad):
    (TestWebKitAPI::TEST):
    * TestWebKitAPI/Tests/WebKit2/WebKit2.pro:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148312 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    21e7432e
    [WK2] WebPageProxy loadURL() won't work when called just after terminateProcess()
    benjamin@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=110743
    
    Patch by Adenilson Cavalcanti <cavalcantii@gmail.com> on 2013-04-12
    Reviewed by Benjamin Poulain.
    
    Source/WebKit2: 
    
    A call to loadURL() just after terminating WebProcess will fail thanks to
    WebPageProxy being in an undefined state since it is in the middle of its own
    cleanup after process termination.
    
    To properly fix this, not only WebPageProxy cleanup should be made
    at WebProcess termination request, but also WebProcessProxy needs
    to only return to its caller after terminating the process and
    closing connections. Otherwise, WebPageProxy can even be able to
    detect that WebProcess is no longer running, but a call to respawn
    the process will fail.
    
    To fix these issues, this patch moves the cleanup code to a shared private function
    that is used for both the cases i.e. user termination and real crash. WebProcess
    shutdown is done using a new method that ensures that all cleanup was done before
    returning.
    
    A last change introduced in this patch is that for user requested termination,
    clients are no longer notified of a crash (since it is not a crash).
    
    * UIProcess/WebPageProxy.cpp:
    (WebKit::WebPageProxy::terminateProcess):
    (WebKit::WebPageProxy::processDidCrash):
    (WebKit):
    (WebKit::WebPageProxy::resetStateAfterProcessExited):
    * UIProcess/WebPageProxy.h:
    (WebPageProxy):
    * UIProcess/WebProcessProxy.cpp:
    (WebKit::WebProcessProxy::userRequestedTerminate):
    (WebKit):
    * UIProcess/WebProcessProxy.h:
    (WebProcessProxy):
    
    Tools: 
    
    Adding a new test file to check if loading a page just after WebProcess
    has crashed (or was terminated) works. The test executes the
    following steps (Load, Crash, Load), thus stressing WebProcess
    reattach and process termination code path.
    
    * TestWebKitAPI/GNUmakefile.am:
    * TestWebKitAPI/PlatformEfl.cmake:
    * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
    * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
    (TestWebKitAPI::setPageLoaderClient):
    (TestWebKitAPI::TEST):
    * TestWebKitAPI/Tests/WebKit2/LoadPageOnCrash.cpp: Added.
    (TestWebKitAPI):
    (WebKit2CrashLoader):
    (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
    (TestWebKitAPI::WebKit2CrashLoader::loadUrl):
    (TestWebKitAPI::WebKit2CrashLoader::crashWebProcess):
    (TestWebKitAPI::didFinishLoad):
    (TestWebKitAPI::TEST):
    * TestWebKitAPI/Tests/WebKit2/WebKit2.pro:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148312 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Loading