// 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 PPAPI_HOST_HOST_MESSAGE_CONTEXT_H_ #define PPAPI_HOST_HOST_MESSAGE_CONTEXT_H_ #include "ipc/ipc_message.h" #include "ppapi/host/ppapi_host_export.h" #include "ppapi/proxy/resource_message_params.h" namespace ppapi { namespace host { // This context structure provides information about outgoing resource message // replies. struct PPAPI_HOST_EXPORT ReplyMessageContext { ReplyMessageContext(); ReplyMessageContext( const ppapi::proxy::ResourceMessageReplyParams& cp, IPC::Message* sync_reply_msg, int routing_id); ~ReplyMessageContext(); // Returns a value indicating whether this context is valid or "null". bool is_valid() const { return params.pp_resource() != 0; } // The "reply params" struct with the same resource and sequence number // as the original resource message call. ppapi::proxy::ResourceMessageReplyParams params; // If this context is generated from a sync message, this will be set to the // incoming sync message. Otherwise, it will be NULL. The plugin controls // whether or not the resource call is synchronous or asynchronous so a // ResoureHost cannot make any assumptions about whether or not this is NULL. IPC::Message* sync_reply_msg; // Routing ID to be used when sending a reply message. This is only useful // when the plugin is in-process. Otherwise, the value will be // MSG_ROUTING_NONE. int routing_id; }; // This context structure provides information about incoming resource message // call requests when passed to resources. struct PPAPI_HOST_EXPORT HostMessageContext { explicit HostMessageContext( const ppapi::proxy::ResourceMessageCallParams& cp); HostMessageContext( int routing_id, const ppapi::proxy::ResourceMessageCallParams& cp); HostMessageContext( const ppapi::proxy::ResourceMessageCallParams& cp, IPC::Message* sync_reply_msg); ~HostMessageContext(); // Returns a reply message context struct which includes the reply params. ReplyMessageContext MakeReplyMessageContext() const; // The original call parameters passed to the resource message call. This // cannot be a reference because this object may be passed to another thread. ppapi::proxy::ResourceMessageCallParams params; // The reply message. If the params has the callback flag set, this message // will be sent in reply. It is initialized to the empty message. If the // handler wants to send something else, it should just assign the message // it wants to this value. IPC::Message reply_msg; // If this context is generated from a sync message, this will be set to the // incoming sync message. Otherwise, it will be NULL. IPC::Message* sync_reply_msg; // Routing ID to be used when sending a reply message. This is only useful // when the plugin is in-process. Otherwise, the value will be // MSG_ROUTING_NONE. int routing_id; }; } // namespace host } // namespace ppapi #endif // PPAPI_HOST_HOST_MESSAGE_CONTEXT_H_