diff options
Diffstat (limited to 'content/browser/message_port_service.h')
-rw-r--r-- | content/browser/message_port_service.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/content/browser/message_port_service.h b/content/browser/message_port_service.h new file mode 100644 index 0000000..55e536c --- /dev/null +++ b/content/browser/message_port_service.h @@ -0,0 +1,78 @@ +// Copyright 2013 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_BROWSER_MESSAGE_PORT_SERVICE_H_ +#define CONTENT_BROWSER_MESSAGE_PORT_SERVICE_H_ + +#include <map> +#include <utility> +#include <vector> + +#include "base/basictypes.h" +#include "base/memory/singleton.h" +#include "base/strings/string16.h" +#include "ipc/ipc_message.h" + +namespace content { +class MessagePortMessageFilter; + +class MessagePortService { + public: + typedef std::vector<std::pair<string16, std::vector<int> > > QueuedMessages; + + // Returns the MessagePortService singleton. + static MessagePortService* GetInstance(); + + // These methods correspond to the message port related IPCs. + void Create(int route_id, + MessagePortMessageFilter* filter, + int* message_port_id); + void Destroy(int message_port_id); + void Entangle(int local_message_port_id, int remote_message_port_id); + void PostMessage(int sender_message_port_id, + const string16& message, + const std::vector<int>& sent_message_port_ids); + void QueueMessages(int message_port_id); + void SendQueuedMessages(int message_port_id, + const QueuedMessages& queued_messages); + + // Updates the information needed to reach a message port when it's sent to a + // (possibly different) process. + void UpdateMessagePort( + int message_port_id, + MessagePortMessageFilter* filter, + int routing_id); + + void OnMessagePortMessageFilterClosing(MessagePortMessageFilter* filter); + + // Attempts to send the queued messages for a message port. + void SendQueuedMessagesIfPossible(int message_port_id); + + private: + friend struct DefaultSingletonTraits<MessagePortService>; + + MessagePortService(); + ~MessagePortService(); + + void PostMessageTo(int message_port_id, + const string16& message, + const std::vector<int>& sent_message_port_ids); + + // Handles the details of removing a message port id. Before calling this, + // verify that the message port id exists. + void Erase(int message_port_id); + + struct MessagePort; + typedef std::map<int, MessagePort> MessagePorts; + MessagePorts message_ports_; + + // We need globally unique identifiers for each message port. + int next_message_port_id_; + + DISALLOW_COPY_AND_ASSIGN(MessagePortService); +}; + +} // namespace content + +#endif // CONTENT_BROWSER_MESSAGE_PORT_SERVICE_H_ |