1// Copyright (c) 2011 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.
4
5#include "content/common/message_router.h"
6
7#include "ipc/ipc_message.h"
8
9namespace content {
10
11MessageRouter::MessageRouter() {
12}
13
14MessageRouter::~MessageRouter() {
15}
16
17bool MessageRouter::OnControlMessageReceived(const IPC::Message& msg) {
18  NOTREACHED() <<
19      "should override in subclass if you care about control messages";
20  return false;
21}
22
23bool MessageRouter::Send(IPC::Message* msg) {
24  NOTREACHED() <<
25      "should override in subclass if you care about sending messages";
26  return false;
27}
28
29void MessageRouter::AddRoute(int32 routing_id, IPC::Listener* listener) {
30  routes_.AddWithID(listener, routing_id);
31}
32
33void MessageRouter::RemoveRoute(int32 routing_id) {
34  routes_.Remove(routing_id);
35}
36
37bool MessageRouter::OnMessageReceived(const IPC::Message& msg) {
38  if (msg.routing_id() == MSG_ROUTING_CONTROL)
39    return OnControlMessageReceived(msg);
40
41  return RouteMessage(msg);
42}
43
44bool MessageRouter::RouteMessage(const IPC::Message& msg) {
45  IPC::Listener* listener = routes_.Lookup(msg.routing_id());
46  if (!listener)
47    return false;
48
49  listener->OnMessageReceived(msg);
50  return true;
51}
52
53}  // namespace content
54