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_PROXY_PPP_CLASS_PROXY_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_PROXY_PPP_CLASS_PROXY_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_var.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/interface_proxy.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PPB_Var_Deprecated;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace proxy {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SerializedVar;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SerializedVarReceiveInput;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SerializedVarVectorReceiveInput;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SerializedVarOutParam;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SerializedVarReturnValue;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PPP_Class_Proxy : public InterfaceProxy {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PPP_Class isn't a normal interface that you can query for, so this
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // constructor doesn't take an interface pointer.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit PPP_Class_Proxy(Dispatcher* dispatcher);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PPP_Class_Proxy();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Factory function used for registration (normal code can just use the
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // constructor).
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static InterfaceProxy* Create(Dispatcher* dispatcher);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a proxied object in the browser process. This takes the browser's
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PPB_Var_Deprecated interface to use to create the object. The class and
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static PP_Var CreateProxiedObject(const PPB_Var_Deprecated* var,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    Dispatcher* dispatcher,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    PP_Instance instance_id,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int64 ppp_class,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int64 class_data);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static PP_Bool IsInstanceOf(const PPB_Var_Deprecated* ppb_var_impl,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const PP_Var& var,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              int64 ppp_class,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              int64* ppp_class_data);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InterfaceProxy implementation.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& msg);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IPC message handlers.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgHasProperty(int64 ppp_class, int64 object,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarReceiveInput property,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarOutParam exception,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        bool* result);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgHasMethod(int64 ppp_class, int64 object,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      SerializedVarReceiveInput property,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      SerializedVarOutParam exception,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      bool* result);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgGetProperty(int64 ppp_class, int64 object,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarReceiveInput property,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarOutParam exception,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarReturnValue result);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgEnumerateProperties(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 ppp_class, int64 object,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::vector<SerializedVar>* props,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SerializedVarOutParam exception);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgSetProperty(int64 ppp_class, int64 object,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarReceiveInput property,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarReceiveInput value,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarOutParam exception);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgRemoveProperty(int64 ppp_class, int64 object,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           SerializedVarReceiveInput property,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           SerializedVarOutParam exception);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgCall(int64 ppp_class, int64 object,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 SerializedVarReceiveInput method_name,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 SerializedVarVectorReceiveInput arg_vector,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 SerializedVarOutParam exception,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 SerializedVarReturnValue result);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgConstruct(int64 ppp_class, int64 object,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      SerializedVarVectorReceiveInput arg_vector,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      SerializedVarOutParam exception,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      SerializedVarReturnValue result);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMsgDeallocate(int64 ppp_class, int64 object);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the given class/data points to a plugin-implemented
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // object. On failure, the exception, if non-NULL, will also be set.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ValidateUserData(int64 ppp_class, int64 class_data,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SerializedVarOutParam* exception);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PPP_Class_Proxy);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace proxy
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ppapi
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // PPAPI_PROXY_PPP_CLASS_PROXY_H_
101