| Index: ipc/ipc_forwarding_message_filter.cc
|
| diff --git a/ipc/ipc_forwarding_message_filter.cc b/ipc/ipc_forwarding_message_filter.cc
|
| index 9857bdf67dcde3b952b733dc46404162678244eb..60f56634e6e47ffddd0fdd2cc5a72df84959e600 100644
|
| --- a/ipc/ipc_forwarding_message_filter.cc
|
| +++ b/ipc/ipc_forwarding_message_filter.cc
|
| @@ -23,12 +23,20 @@ ForwardingMessageFilter::ForwardingMessageFilter(
|
| 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));
|
| + multi_handlers_.insert(std::make_pair(routing_id, handler));
|
| }
|
|
|
| -void ForwardingMessageFilter::RemoveRoute(int routing_id) {
|
| +void ForwardingMessageFilter::RemoveRoute(int routing_id,
|
| + const Handler& handler) {
|
| base::AutoLock locked(handlers_lock_);
|
| - handlers_.erase(routing_id);
|
| + auto handlers = multi_handlers_.equal_range(routing_id);
|
| + for (auto it = handlers.first; it != handlers.second; ++it) {
|
| + if (it->second.Equals(handler)) {
|
| + multi_handlers_.erase(it);
|
| + return;
|
| + }
|
| + }
|
| + NOTREACHED();
|
| }
|
|
|
| bool ForwardingMessageFilter::OnMessageReceived(const Message& message) {
|
| @@ -36,18 +44,16 @@ bool ForwardingMessageFilter::OnMessageReceived(const Message& message) {
|
| message_ids_to_filter_.end())
|
| return false;
|
|
|
| -
|
| - Handler handler;
|
| -
|
| {
|
| base::AutoLock locked(handlers_lock_);
|
| - std::map<int, Handler>::iterator it = handlers_.find(message.routing_id());
|
| - if (it == handlers_.end())
|
| + auto handlers = multi_handlers_.equal_range(message.routing_id());
|
| + if (handlers.first == handlers.second)
|
| return false;
|
| - handler = it->second;
|
| +
|
| + for (auto it = handlers.first; it != handlers.second; ++it)
|
| + target_task_runner_->PostTask(FROM_HERE, base::Bind(it->second, message));
|
| }
|
|
|
| - target_task_runner_->PostTask(FROM_HERE, base::Bind(handler, message));
|
| return true;
|
| }
|
|
|
|
|