diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-08 23:35:47 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-08 23:35:47 +0000 |
commit | 0d7e79fa8ce1bef5ca6d413c908c267c35f5867a (patch) | |
tree | 5509297bccd2e1b4c8abd0680090547c4b707f18 /ipc/ipc_channel_proxy.cc | |
parent | f94151690a90af7029a1ab6ddb0f7679af3a9c7d (diff) | |
download | chromium_src-0d7e79fa8ce1bef5ca6d413c908c267c35f5867a.zip chromium_src-0d7e79fa8ce1bef5ca6d413c908c267c35f5867a.tar.gz chromium_src-0d7e79fa8ce1bef5ca6d413c908c267c35f5867a.tar.bz2 |
Revert 61899 for breaking cookes on file:// URLs.
BUG=58553
=================================================
Fix instances of passing raw pointers to RefCounted objects in tasks.
Some of these manually handled it correctly by using AddRef()/Release() pairs. I switched them to make_scoped_refptr() to be more consistent. This also makes them cleanup properly on MessageLoop shutdown if we start deleting tasks.
BUG=28083
TEST=builds
Review URL: http://codereview.chromium.org/3581008
TBR=willchan@chromium.org
Review URL: http://codereview.chromium.org/3654001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62043 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_channel_proxy.cc')
-rw-r--r-- | ipc/ipc_channel_proxy.cc | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/ipc/ipc_channel_proxy.cc b/ipc/ipc_channel_proxy.cc index feca4eb..9785216 100644 --- a/ipc/ipc_channel_proxy.cc +++ b/ipc/ipc_channel_proxy.cc @@ -196,6 +196,9 @@ void ChannelProxy::Context::OnAddFilter(MessageFilter* filter) { // so that the filter gets access to the Channel. if (channel_) filter->OnFilterAdded(channel_); + + // Balances the AddRef in ChannelProxy::AddFilter. + filter->Release(); } // Called on the IPC::Channel thread @@ -314,20 +317,16 @@ bool ChannelProxy::Send(Message* message) { } void ChannelProxy::AddFilter(MessageFilter* filter) { - context_->ipc_message_loop()->PostTask( - FROM_HERE, - NewRunnableMethod( - context_.get(), - &Context::OnAddFilter, - make_scoped_refptr(filter))); + // We want to addref the filter to prevent it from + // being destroyed before the OnAddFilter call is invoked. + filter->AddRef(); + context_->ipc_message_loop()->PostTask(FROM_HERE, NewRunnableMethod( + context_.get(), &Context::OnAddFilter, filter)); } void ChannelProxy::RemoveFilter(MessageFilter* filter) { - context_->ipc_message_loop()->PostTask( - FROM_HERE, NewRunnableMethod( - context_.get(), - &Context::OnRemoveFilter, - make_scoped_refptr(filter))); + context_->ipc_message_loop()->PostTask(FROM_HERE, NewRunnableMethod( + context_.get(), &Context::OnRemoveFilter, filter)); } void ChannelProxy::ClearIPCMessageLoop() { |