summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authormpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-23 18:37:08 +0000
committermpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-23 18:37:08 +0000
commit1706d76540b092bda26d7101709cf3906e22de91 (patch)
tree59bda7db915e049b7a5f77e63a355e8f4b0ff52e /chrome/browser/renderer_host
parentdd07d60bc0f068a4749c91b481ccc948e1b00483 (diff)
downloadchromium_src-1706d76540b092bda26d7101709cf3906e22de91.zip
chromium_src-1706d76540b092bda26d7101709cf3906e22de91.tar.gz
chromium_src-1706d76540b092bda26d7101709cf3906e22de91.tar.bz2
Arrange so ExtensionMessageService::RendererReady is called on the IO thread.
This fixes a bug where it wouldn't notice when a renderer died because it was observing the notification on the wrong thread. This also simplifies some logic in ExtensionMessageService. Review URL: http://codereview.chromium.org/88002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14336 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r--chrome/browser/renderer_host/resource_message_filter.cc14
1 files changed, 12 insertions, 2 deletions
diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc
index 71ae0d8..b528819 100644
--- a/chrome/browser/renderer_host/resource_message_filter.cc
+++ b/chrome/browser/renderer_host/resource_message_filter.cc
@@ -161,8 +161,6 @@ void ResourceMessageFilter::Init(int render_process_id) {
render_process_id_ = render_process_id;
render_widget_helper_->Init(render_process_id, resource_dispatcher_host_);
app_cache_dispatcher_host_->Initialize(this);
- ExtensionMessageService::GetInstance(request_context_.get())->
- RendererReady(this);
}
// Called on the IPC thread:
@@ -184,9 +182,21 @@ void ResourceMessageFilter::OnChannelConnected(int32 peer_pid) {
NOTREACHED();
}
set_handle(peer_handle);
+
+ // Set the process ID if Init hasn't been called yet. This doesn't work in
+ // single-process mode since peer_pid won't be the special fake PID we use
+ // for RenderProcessHost in that mode, so we just have to hope that Init
+ // is called first in that case.
+ if (render_process_id_ == -1)
+ render_process_id_ = peer_pid;
+
// Hook AudioRendererHost to this object after channel is connected so it can
// this object for sending messages.
audio_renderer_host_->IPCChannelConnected(render_process_id_, handle(), this);
+
+ // Ditto for the ExtensionMessageService.
+ ExtensionMessageService::GetInstance(request_context_.get())->
+ RendererReady(this);
}
// Called on the IPC thread: