-
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
benjamin@webkit.org authoredhttps://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