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