PPT: Closing tab that is hung or chewing 100% CPU leaves abandoned WebProcess.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 May 2013 00:07:02 +0000 (00:07 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 May 2013 00:07:02 +0000 (00:07 +0000)
commit05427587b136585a47d118e2e3f9fc0c2b15a310
treec699d708bfb8ab4bf53206941538dbe7316bf20f
parent0d113eb7791c9af9ddc70a2f17f59d9dd742f005
PPT: Closing tab that is hung or chewing 100% CPU leaves abandoned WebProcess.
<http://webkit.org/b/116464>
<rdar://problem/10103795>

Reviewed by Anders Carlsson.

Simplify the web process sacrifice ritual. Instead of murderizing the process when its last tab closes,
just shut down the CoreIPC connection from the UI process. The web process, upon noticing this,
will start a 10 second watchdog timer, and if it hasn't shut down by the time it fires, well, it'll shut down.

(WebKit::WebProcessProxy::removeWebPage):

    When the last page is removed from a WebProcessProxy, disconnect the process so that it'll die off
    eventually, even if the WebPage::Close message never gets properly handled.

* Shared/ChildProcessProxy.h:
* Shared/ChildProcessProxy.cpp:
(WebKit::ChildProcessProxy::abortProcessLaunchIfNeeded):

    Added a helper to abort any in-progress launch of a new web process. Otherwise we'll have a race
    where the exiting web process may get re-used for a new tab.

* UIProcess/WebProcessProxy.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::WebProcessProxy):
(WebKit::WebProcessProxy::enableSuddenTermination):
(WebKit::WebProcessProxy::disableSuddenTermination):

    Remove WebProcessProxy's sudden termination counter. The web process will do what it needs in
    response to the WebPage::Close message. We still forward these calls to NSProcessInfo on Mac though.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@150491 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/ChildProcessProxy.cpp
Source/WebKit2/Shared/ChildProcessProxy.h
Source/WebKit2/UIProcess/WebProcessProxy.cpp
Source/WebKit2/UIProcess/WebProcessProxy.h