| 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..d886706cc423846b487714b418d1ee5cf1277be3 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) {
|
| @@ -37,24 +35,22 @@ bool ForwardingMessageFilter::OnMessageReceived(const Message& message) {
|
| message_ids_to_filter_.end())
|
| return false;
|
|
|
| +
|
| + Handler handler;
|
| +
|
| {
|
| - base::AutoLock locked(routes_lock_);
|
| - if (routes_.find(message.routing_id()) == routes_.end())
|
| + base::AutoLock locked(handlers_lock_);
|
| + std::map<int, Handler>::iterator it = handlers_.find(message.routing_id());
|
| + if (it == handlers_.end())
|
| return false;
|
| + handler = it->second;
|
| }
|
|
|
| - target_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ForwardingMessageFilter::ForwardToHandler, this, message));
|
| + target_task_runner_->PostTask(FROM_HERE, base::Bind(handler, message));
|
| return true;
|
| }
|
|
|
| ForwardingMessageFilter::~ForwardingMessageFilter() {
|
| }
|
|
|
| -void ForwardingMessageFilter::ForwardToHandler(const Message& message) {
|
| - DCHECK(target_task_runner_->RunsTasksOnCurrentThread());
|
| - handler_.Run(message);
|
| -}
|
| -
|
| } // namespace IPC
|
|
|