14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Defines messages between the browser and worker process, as well as between 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// the renderer and worker process. 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Multiply-included message file, hence no include guard. 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <string> 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <utility> 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <vector> 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/basictypes.h" 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/strings/string16.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/common/content_export.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ipc/ipc_message_macros.h" 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ipc/ipc_message_utils.h" 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#undef IPC_MESSAGE_EXPORT 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define IPC_MESSAGE_EXPORT CONTENT_EXPORT 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define IPC_MESSAGE_START MessagePortMsgStart 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Singly-included section, not converted. 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef CONTENT_COMMON_MESSAGE_PORT_MESSAGES_H_ 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define CONTENT_COMMON_MESSAGE_PORT_MESSAGES_H_ 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)typedef std::pair<base::string16, std::vector<int> > QueuedMessage; 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // CONTENT_COMMON_MESSAGE_PORT_MESSAGES_H_ 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)//----------------------------------------------------------------------------- 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// MessagePort messages 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// These are messages sent from the browser to child processes. 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Sends a message to a message port. 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IPC_MESSAGE_ROUTED3(MessagePortMsg_Message, 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 /* message */, 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<int> /* sent_message_port_ids */, 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<int> /* new_routing_ids */) 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Tells the Message Port Channel object that there are no more in-flight 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// messages arriving. 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IPC_MESSAGE_ROUTED0(MessagePortMsg_MessagesQueued) 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)//----------------------------------------------------------------------------- 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// MessagePortHost messages 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// These are messages sent from child processes to the browser. 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Creates a new Message Port Channel object. The first paramaeter is the 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// message port channel's routing id in this process. The second parameter 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// is the process-wide-unique identifier for that port. 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IPC_SYNC_MESSAGE_CONTROL0_2(MessagePortHostMsg_CreateMessagePort, 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int /* route_id */, 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int /* message_port_id */) 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Sent when a Message Port Channel object is destroyed. 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IPC_MESSAGE_CONTROL1(MessagePortHostMsg_DestroyMessagePort, 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int /* message_port_id */) 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Sends a message to a message port. Optionally sends a message port as 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// as well if sent_message_port_id != MSG_ROUTING_NONE. 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IPC_MESSAGE_CONTROL3(MessagePortHostMsg_PostMessage, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int /* sender_message_port_id */, 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 /* message */, 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<int> /* sent_message_port_ids */) 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Causes messages sent to the remote port to be delivered to this local port. 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IPC_MESSAGE_CONTROL2(MessagePortHostMsg_Entangle, 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int /* local_message_port_id */, 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int /* remote_message_port_id */) 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Causes the browser to queue messages sent to this port until the the port 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// has made sure that all in-flight messages were routed to the new 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// destination. 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IPC_MESSAGE_CONTROL1(MessagePortHostMsg_QueueMessages, 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int /* message_port_id */) 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Sends the browser all the queued messages that arrived at this message port 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// after it was sent in a postMessage call. 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// NOTE: MSVS can't compile the macro if std::vector<std::pair<string16, int> > 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// is used, so we typedef it in worker_messages.h. 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IPC_MESSAGE_CONTROL2(MessagePortHostMsg_SendQueuedMessages, 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int /* message_port_id */, 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<QueuedMessage> /* queued_messages */) 86