summaryrefslogtreecommitdiffstats
path: root/chrome/common/ipc_channel_proxy.h
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-01 00:29:29 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-01 00:29:29 +0000
commit36ecd4c22166a82091e86b6a295f86225fd022e0 (patch)
tree436c93fe646533483990be14dc4f802cd53c7309 /chrome/common/ipc_channel_proxy.h
parent19063d3d42bedf9be6197ec575ece628129afc64 (diff)
downloadchromium_src-36ecd4c22166a82091e86b6a295f86225fd022e0.zip
chromium_src-36ecd4c22166a82091e86b6a295f86225fd022e0.tar.gz
chromium_src-36ecd4c22166a82091e86b6a295f86225fd022e0.tar.bz2
POSIX: Don't allow onunload handlers to hang a renderer forever.
On POSIX one can install an unload handler which loops forever and leave behind a renderer process which eats 100% CPU forever. This is because the terminate signals (ViewMsg_ShouldClose and the error from the IPC channel) are routed to the main message loop but never processes (because that message loop is stuck in V8). One could make the browser SIGKILL the renderers, but that leaves open a large window where a browser failure (or a user, manually terminating the browser because "it's stuck") will leave behind a process eating all the CPU. On Windows we don't have this issue because all the processes are in a job so when the parent dies, all the children are killed too. http://codereview.chromium.org/100222 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15025 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/ipc_channel_proxy.h')
-rw-r--r--chrome/common/ipc_channel_proxy.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/chrome/common/ipc_channel_proxy.h b/chrome/common/ipc_channel_proxy.h
index 2263ea6..42cb865 100644
--- a/chrome/common/ipc_channel_proxy.h
+++ b/chrome/common/ipc_channel_proxy.h
@@ -64,6 +64,10 @@ class ChannelProxy : public Message::Sender {
// have received the internal Hello message from the peer.
virtual void OnChannelConnected(int32 peer_pid) {}
+ // Called when there is an error on the channel, typically that the channel
+ // has been closed.
+ virtual void OnChannelError() {}
+
// Called to inform the filter that the IPC channel will be destroyed.
// OnFilterRemoved is called immediately after this.
virtual void OnChannelClosing() {}