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