| Index: ipc/ipc_forwarding_message_filter.cc
|
| diff --git a/ipc/ipc_forwarding_message_filter.cc b/ipc/ipc_forwarding_message_filter.cc
|
| index d886706cc423846b487714b418d1ee5cf1277be3..5acffc3240d54818a64ea53379eb2fb8bc0ad86d 100644
|
| --- a/ipc/ipc_forwarding_message_filter.cc
|
| +++ b/ipc/ipc_forwarding_message_filter.cc
|
| @@ -13,7 +13,8 @@ ForwardingMessageFilter::ForwardingMessageFilter(
|
| const uint32* message_ids_to_filter,
|
| size_t num_message_ids_to_filter,
|
| base::TaskRunner* target_task_runner)
|
| - : target_task_runner_(target_task_runner) {
|
| + : target_task_runner_(target_task_runner)
|
| + , id_callback_(base::Bind(&GetMessageRoutingID)) {
|
| DCHECK(target_task_runner_);
|
| for (size_t i = 0; i < num_message_ids_to_filter; i++)
|
| message_ids_to_filter_.insert(message_ids_to_filter[i]);
|
| @@ -30,19 +31,26 @@ void ForwardingMessageFilter::RemoveRoute(int routing_id) {
|
| handlers_.erase(routing_id);
|
| }
|
|
|
| +void ForwardingMessageFilter::SetIDCallback(const IDCallback& id_callback) {
|
| + base::AutoLock locked(handlers_lock_);
|
| + DCHECK(!id_callback.is_null());
|
| + id_callback_ = id_callback;
|
| +}
|
| +
|
| bool ForwardingMessageFilter::OnMessageReceived(const Message& message) {
|
| if (message_ids_to_filter_.find(message.type()) ==
|
| 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());
|
| + std::map<int, Handler>::iterator it =
|
| + handlers_.find(id_callback_.Run(message));
|
| if (it == handlers_.end())
|
| return false;
|
| +
|
| handler = it->second;
|
| }
|
|
|
|
|