
Required for the SubscribeUniform WebGL extension. BUG=422978 Review URL: https://codereview.chromium.org/634313002 Cr-Commit-Position: refs/heads/master@{#306555}
69 lines
2.5 KiB
C++
69 lines
2.5 KiB
C++
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef CONTENT_COMMON_MESSAGE_ROUTER_H_
|
|
#define CONTENT_COMMON_MESSAGE_ROUTER_H_
|
|
|
|
#include "base/id_map.h"
|
|
#include "content/common/content_export.h"
|
|
#include "ipc/ipc_listener.h"
|
|
#include "ipc/ipc_sender.h"
|
|
|
|
// The MessageRouter handles all incoming messages sent to it by routing them
|
|
// to the correct listener. Routing is based on the Message's routing ID.
|
|
// Since routing IDs are typically assigned asynchronously by the browser
|
|
// process, the MessageRouter has the notion of pending IDs for listeners that
|
|
// have not yet been assigned a routing ID.
|
|
//
|
|
// When a message arrives, the routing ID is used to index the set of routes to
|
|
// find a listener. If a listener is found, then the message is passed to it.
|
|
// Otherwise, the message is ignored if its routing ID is not equal to
|
|
// MSG_ROUTING_CONTROL.
|
|
//
|
|
// The MessageRouter supports the IPC::Sender interface for outgoing messages,
|
|
// but does not define a meaningful implementation of it. The subclass of
|
|
// MessageRouter is intended to provide that if appropriate.
|
|
//
|
|
// The MessageRouter can be used as a concrete class provided its Send method
|
|
// is not called and it does not receive any control messages.
|
|
|
|
namespace content {
|
|
|
|
class CONTENT_EXPORT MessageRouter : public IPC::Listener, public IPC::Sender {
|
|
public:
|
|
MessageRouter();
|
|
~MessageRouter() override;
|
|
|
|
// Implemented by subclasses to handle control messages
|
|
virtual bool OnControlMessageReceived(const IPC::Message& msg);
|
|
|
|
// IPC::Listener implementation:
|
|
bool OnMessageReceived(const IPC::Message& msg) override;
|
|
|
|
// Like OnMessageReceived, except it only handles routed messages. Returns
|
|
// true if the message was dispatched, or false if there was no listener for
|
|
// that route id.
|
|
virtual bool RouteMessage(const IPC::Message& msg);
|
|
|
|
// IPC::Sender implementation:
|
|
bool Send(IPC::Message* msg) override;
|
|
|
|
// Called to add a listener for a particular message routing ID.
|
|
// Returns true if succeeded.
|
|
bool AddRoute(int32 routing_id, IPC::Listener* listener);
|
|
|
|
// Called to remove a listener for a particular message routing ID.
|
|
void RemoveRoute(int32 routing_id);
|
|
|
|
private:
|
|
// A list of all listeners with assigned routing IDs.
|
|
IDMap<IPC::Listener> routes_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(MessageRouter);
|
|
};
|
|
|
|
} // namespace content
|
|
|
|
#endif // CONTENT_COMMON_MESSAGE_ROUTER_H_
|