Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: ipc/ipc_channel_proxy.cc

Issue 324143002: Decouple IPC::MessageFilter from IPC::Channel (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing compilation errors Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ipc/ipc_channel_proxy.h" 5 #include "ipc/ipc_channel_proxy.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 OnAddFilter(); 104 OnAddFilter();
105 105
106 // See above comment about using listener_task_runner_ here. 106 // See above comment about using listener_task_runner_ here.
107 listener_task_runner_->PostTask( 107 listener_task_runner_->PostTask(
108 FROM_HERE, base::Bind(&Context::OnDispatchConnected, this)); 108 FROM_HERE, base::Bind(&Context::OnDispatchConnected, this));
109 } 109 }
110 110
111 // Called on the IPC::Channel thread 111 // Called on the IPC::Channel thread
112 void ChannelProxy::Context::OnChannelError() { 112 void ChannelProxy::Context::OnChannelError() {
113 for (size_t i = 0; i < filters_.size(); ++i) 113 for (size_t i = 0; i < filters_.size(); ++i)
114 filters_[i]->OnChannelError(); 114 filters_[i]->OnSenderError();
115 115
116 // See above comment about using listener_task_runner_ here. 116 // See above comment about using listener_task_runner_ here.
117 listener_task_runner_->PostTask( 117 listener_task_runner_->PostTask(
118 FROM_HERE, base::Bind(&Context::OnDispatchError, this)); 118 FROM_HERE, base::Bind(&Context::OnDispatchError, this));
119 } 119 }
120 120
121 // Called on the IPC::Channel thread 121 // Called on the IPC::Channel thread
122 void ChannelProxy::Context::OnChannelOpened() { 122 void ChannelProxy::Context::OnChannelOpened() {
123 DCHECK(channel_ != NULL); 123 DCHECK(channel_ != NULL);
124 124
(...skipping 11 matching lines...) Expand all
136 } 136 }
137 137
138 // Called on the IPC::Channel thread 138 // Called on the IPC::Channel thread
139 void ChannelProxy::Context::OnChannelClosed() { 139 void ChannelProxy::Context::OnChannelClosed() {
140 // It's okay for IPC::ChannelProxy::Close to be called more than once, which 140 // It's okay for IPC::ChannelProxy::Close to be called more than once, which
141 // would result in this branch being taken. 141 // would result in this branch being taken.
142 if (!channel_) 142 if (!channel_)
143 return; 143 return;
144 144
145 for (size_t i = 0; i < filters_.size(); ++i) { 145 for (size_t i = 0; i < filters_.size(); ++i) {
146 filters_[i]->OnChannelClosing(); 146 filters_[i]->OnSenderClosing();
147 filters_[i]->OnFilterRemoved(); 147 filters_[i]->OnFilterRemoved();
148 } 148 }
149 149
150 // We don't need the filters anymore. 150 // We don't need the filters anymore.
151 message_filter_router_->Clear(); 151 message_filter_router_->Clear();
152 filters_.clear(); 152 filters_.clear();
153 // We don't need the lock, because at this point, the listener thread can't 153 // We don't need the lock, because at this point, the listener thread can't
154 // access it any more. 154 // access it any more.
155 pending_filters_.clear(); 155 pending_filters_.clear();
156 156
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 } 192 }
193 193
194 for (size_t i = 0; i < new_filters.size(); ++i) { 194 for (size_t i = 0; i < new_filters.size(); ++i) {
195 filters_.push_back(new_filters[i]); 195 filters_.push_back(new_filters[i]);
196 196
197 message_filter_router_->AddFilter(new_filters[i].get()); 197 message_filter_router_->AddFilter(new_filters[i].get());
198 198
199 // The channel has already been created and connected, so we need to 199 // The channel has already been created and connected, so we need to
200 // inform the filters right now. 200 // inform the filters right now.
201 new_filters[i]->OnFilterAdded(channel_.get()); 201 new_filters[i]->OnFilterAdded(channel_.get());
202 new_filters[i]->OnChannelConnected(peer_pid_); 202 new_filters[i]->OnSenderConnected();
203 } 203 }
204 } 204 }
205 205
206 // Called on the IPC::Channel thread 206 // Called on the IPC::Channel thread
207 void ChannelProxy::Context::OnRemoveFilter(MessageFilter* filter) { 207 void ChannelProxy::Context::OnRemoveFilter(MessageFilter* filter) {
208 if (peer_pid_ == base::kNullProcessId) { 208 if (peer_pid_ == base::kNullProcessId) {
209 // The channel is not yet connected, so any filters are still pending. 209 // The channel is not yet connected, so any filters are still pending.
210 base::AutoLock auto_lock(pending_filters_lock_); 210 base::AutoLock auto_lock(pending_filters_lock_);
211 for (size_t i = 0; i < pending_filters_.size(); ++i) { 211 for (size_t i = 0; i < pending_filters_.size(); ++i) {
212 if (pending_filters_[i].get() == filter) { 212 if (pending_filters_[i].get() == filter) {
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 Channel* channel = context_.get()->channel_.get(); 434 Channel* channel = context_.get()->channel_.get();
435 // Channel must have been created first. 435 // Channel must have been created first.
436 DCHECK(channel) << context_.get()->channel_id_; 436 DCHECK(channel) << context_.get()->channel_id_;
437 return channel->TakeClientFileDescriptor(); 437 return channel->TakeClientFileDescriptor();
438 } 438 }
439 #endif 439 #endif
440 440
441 //----------------------------------------------------------------------------- 441 //-----------------------------------------------------------------------------
442 442
443 } // namespace IPC 443 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698