| Index: content/common/gpu/client/gpu_channel_host.cc
|
| diff --git a/content/common/gpu/client/gpu_channel_host.cc b/content/common/gpu/client/gpu_channel_host.cc
|
| index ade330d9a9cebc90ec79e7a6ae511083361ca85b..31108b84d4118bd4b390b42c842f87de7e36f71c 100644
|
| --- a/content/common/gpu/client/gpu_channel_host.cc
|
| +++ b/content/common/gpu/client/gpu_channel_host.cc
|
| @@ -52,7 +52,7 @@ void GpuChannelHost::Connect(
|
|
|
| channel_->AddFilter(sync_filter_.get());
|
|
|
| - channel_filter_ = new MessageFilter(this);
|
| + channel_filter_ = new MessageFilter(AsWeakPtr(), factory_);
|
|
|
| // Install the filter last, because we intercept all leftover
|
| // messages.
|
| @@ -316,8 +316,11 @@ int32 GpuChannelHost::ReserveTransferBufferId() {
|
| GpuChannelHost::~GpuChannelHost() {}
|
|
|
|
|
| -GpuChannelHost::MessageFilter::MessageFilter(GpuChannelHost* parent)
|
| - : parent_(parent) {
|
| +GpuChannelHost::MessageFilter::MessageFilter(
|
| + base::WeakPtr<GpuChannelHost> parent,
|
| + GpuChannelHostFactory* factory)
|
| + : parent_(parent),
|
| + factory_(factory) {
|
| }
|
|
|
| GpuChannelHost::MessageFilter::~MessageFilter() {}
|
| @@ -326,7 +329,7 @@ void GpuChannelHost::MessageFilter::AddRoute(
|
| int route_id,
|
| base::WeakPtr<IPC::Listener> listener,
|
| scoped_refptr<MessageLoopProxy> loop) {
|
| - DCHECK(parent_->factory_->IsIOThread());
|
| + DCHECK(factory_->IsIOThread());
|
| DCHECK(listeners_.find(route_id) == listeners_.end());
|
| GpuListenerInfo info;
|
| info.listener = listener;
|
| @@ -335,7 +338,7 @@ void GpuChannelHost::MessageFilter::AddRoute(
|
| }
|
|
|
| void GpuChannelHost::MessageFilter::RemoveRoute(int route_id) {
|
| - DCHECK(parent_->factory_->IsIOThread());
|
| + DCHECK(factory_->IsIOThread());
|
| ListenerMap::iterator it = listeners_.find(route_id);
|
| if (it != listeners_.end())
|
| listeners_.erase(it);
|
| @@ -343,14 +346,14 @@ void GpuChannelHost::MessageFilter::RemoveRoute(int route_id) {
|
|
|
| bool GpuChannelHost::MessageFilter::OnMessageReceived(
|
| const IPC::Message& message) {
|
| - DCHECK(parent_->factory_->IsIOThread());
|
| + DCHECK(factory_->IsIOThread());
|
|
|
| // Never handle sync message replies or we will deadlock here.
|
| if (message.is_reply())
|
| return false;
|
|
|
| if (message.routing_id() == MSG_ROUTING_CONTROL) {
|
| - MessageLoop* main_loop = parent_->factory_->GetMainLoop();
|
| + MessageLoop* main_loop = factory_->GetMainLoop();
|
| main_loop->PostTask(FROM_HERE,
|
| base::Bind(&GpuChannelHost::OnMessageReceived,
|
| parent_,
|
| @@ -374,12 +377,12 @@ bool GpuChannelHost::MessageFilter::OnMessageReceived(
|
| }
|
|
|
| void GpuChannelHost::MessageFilter::OnChannelError() {
|
| - DCHECK(parent_->factory_->IsIOThread());
|
| + DCHECK(factory_->IsIOThread());
|
|
|
| // Post the task to signal the GpuChannelHost before the proxies. That way, if
|
| // they themselves post a task to recreate the context, they will not try to
|
| // re-use this channel host before it has a chance to mark itself lost.
|
| - MessageLoop* main_loop = parent_->factory_->GetMainLoop();
|
| + MessageLoop* main_loop = factory_->GetMainLoop();
|
| main_loop->PostTask(FROM_HERE,
|
| base::Bind(&GpuChannelHost::OnChannelError, parent_));
|
| // Inform all the proxies that an error has occurred. This will be reported
|
|
|