15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_HOST_HOST_MESSAGE_CONTEXT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_HOST_HOST_MESSAGE_CONTEXT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/ppapi_host_export.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/resource_message_params.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace host { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This context structure provides information about outgoing resource message 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// replies. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PPAPI_HOST_EXPORT ReplyMessageContext { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReplyMessageContext(); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReplyMessageContext( 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::proxy::ResourceMessageReplyParams& cp, 21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) IPC::Message* sync_reply_msg, 22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int routing_id); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ReplyMessageContext(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Returns a value indicating whether this context is valid or "null". 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool is_valid() const { return params.pp_resource() != 0; } 27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The "reply params" struct with the same resource and sequence number 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as the original resource message call. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::proxy::ResourceMessageReplyParams params; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this context is generated from a sync message, this will be set to the 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incoming sync message. Otherwise, it will be NULL. The plugin controls 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // whether or not the resource call is synchronous or asynchronous so a 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ResoureHost cannot make any assumptions about whether or not this is NULL. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* sync_reply_msg; 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Routing ID to be used when sending a reply message. This is only useful 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // when the plugin is in-process. Otherwise, the value will be 40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // MSG_ROUTING_NONE. 41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int routing_id; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This context structure provides information about incoming resource message 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// call requests when passed to resources. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PPAPI_HOST_EXPORT HostMessageContext { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit HostMessageContext( 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::proxy::ResourceMessageCallParams& cp); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostMessageContext( 50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int routing_id, 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const ppapi::proxy::ResourceMessageCallParams& cp); 52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) HostMessageContext( 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::proxy::ResourceMessageCallParams& cp, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* sync_reply_msg); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~HostMessageContext(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a reply message context struct which includes the reply params. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReplyMessageContext MakeReplyMessageContext() const; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The original call parameters passed to the resource message call. This 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // cannot be a reference because this object may be passed to another thread. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ppapi::proxy::ResourceMessageCallParams params; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The reply message. If the params has the callback flag set, this message 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will be sent in reply. It is initialized to the empty message. If the 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handler wants to send something else, it should just assign the message 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it wants to this value. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message reply_msg; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this context is generated from a sync message, this will be set to the 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incoming sync message. Otherwise, it will be NULL. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* sync_reply_msg; 73a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 74a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Routing ID to be used when sending a reply message. This is only useful 75a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // when the plugin is in-process. Otherwise, the value will be 76a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // MSG_ROUTING_NONE. 77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int routing_id; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace host 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ppapi 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // PPAPI_HOST_HOST_MESSAGE_CONTEXT_H_ 84