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
3 // found in the LICENSE file.
5 #include "ipc/ipc_forwarding_message_filter.h"
8 #include "base/location.h"
12 ForwardingMessageFilter::ForwardingMessageFilter(
13 const uint32
* message_ids_to_filter
,
14 size_t num_message_ids_to_filter
,
15 base::TaskRunner
* target_task_runner
)
16 : target_task_runner_(target_task_runner
) {
17 DCHECK(target_task_runner_
.get());
18 for (size_t i
= 0; i
< num_message_ids_to_filter
; i
++)
19 message_ids_to_filter_
.insert(message_ids_to_filter
[i
]);
22 void ForwardingMessageFilter::AddRoute(int routing_id
, const Handler
& handler
) {
23 DCHECK(!handler
.is_null());
24 base::AutoLock
locked(handlers_lock_
);
25 handlers_
.insert(std::make_pair(routing_id
, handler
));
28 void ForwardingMessageFilter::RemoveRoute(int routing_id
) {
29 base::AutoLock
locked(handlers_lock_
);
30 handlers_
.erase(routing_id
);
33 bool ForwardingMessageFilter::OnMessageReceived(const Message
& message
) {
34 if (message_ids_to_filter_
.find(message
.type()) ==
35 message_ids_to_filter_
.end())
42 base::AutoLock
locked(handlers_lock_
);
43 std::map
<int, Handler
>::iterator it
= handlers_
.find(message
.routing_id());
44 if (it
== handlers_
.end())
49 target_task_runner_
->PostTask(FROM_HERE
, base::Bind(handler
, message
));
53 ForwardingMessageFilter::~ForwardingMessageFilter() {