| Index: ipc/ipc_forwarding_message_filter.cc
|
| diff --git a/ipc/ipc_forwarding_message_filter.cc b/ipc/ipc_forwarding_message_filter.cc
|
| index 48f6e5ff810dbd14fa9afe2f98901098bbb3b986..4ca296206abad3f6cbf21ae110b6068004a94420 100644
|
| --- a/ipc/ipc_forwarding_message_filter.cc
|
| +++ b/ipc/ipc_forwarding_message_filter.cc
|
| @@ -12,24 +12,22 @@ namespace IPC {
|
| ForwardingMessageFilter::ForwardingMessageFilter(
|
| const uint32* message_ids_to_filter,
|
| size_t num_message_ids_to_filter,
|
| - base::TaskRunner* target_task_runner,
|
| - const Handler& handler)
|
| - : target_task_runner_(target_task_runner),
|
| - handler_(handler) {
|
| + base::TaskRunner* target_task_runner)
|
| + : target_task_runner_(target_task_runner) {
|
| DCHECK(target_task_runner_);
|
| - DCHECK(!handler_.is_null());
|
| for (size_t i = 0; i < num_message_ids_to_filter; i++)
|
| message_ids_to_filter_.insert(message_ids_to_filter[i]);
|
| }
|
|
|
| -void ForwardingMessageFilter::AddRoute(int routing_id) {
|
| - base::AutoLock locked(routes_lock_);
|
| - routes_.insert(routing_id);
|
| +void ForwardingMessageFilter::AddRoute(int routing_id, const Handler& handler) {
|
| + DCHECK(!handler.is_null());
|
| + base::AutoLock locked(handlers_lock_);
|
| + handlers_.insert(std::make_pair(routing_id, handler));
|
| }
|
|
|
| void ForwardingMessageFilter::RemoveRoute(int routing_id) {
|
| - base::AutoLock locked(routes_lock_);
|
| - routes_.erase(routing_id);
|
| + base::AutoLock locked(handlers_lock_);
|
| + handlers_.erase(routing_id);
|
| }
|
|
|
| bool ForwardingMessageFilter::OnMessageReceived(const Message& message) {
|
| @@ -38,8 +36,8 @@ bool ForwardingMessageFilter::OnMessageReceived(const Message& message) {
|
| return false;
|
|
|
| {
|
| - base::AutoLock locked(routes_lock_);
|
| - if (routes_.find(message.routing_id()) == routes_.end())
|
| + base::AutoLock locked(handlers_lock_);
|
| + if (handlers_.find(message.routing_id()) == handlers_.end())
|
| return false;
|
| }
|
|
|
| @@ -54,7 +52,16 @@ ForwardingMessageFilter::~ForwardingMessageFilter() {
|
|
|
| void ForwardingMessageFilter::ForwardToHandler(const Message& message) {
|
| DCHECK(target_task_runner_->RunsTasksOnCurrentThread());
|
| - handler_.Run(message);
|
| + std::map<int, Handler>::iterator it;
|
| +
|
| + {
|
| + base::AutoLock locked(handlers_lock_);
|
| + it = handlers_.find(message.routing_id());
|
| + if (it == handlers_.end())
|
| + return;
|
| + }
|
| +
|
| + it->second.Run(message);
|
| }
|
|
|
| } // namespace IPC
|
|
|