1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef PPAPI_PROXY_PPP_CLASS_PROXY_H_
6#define PPAPI_PROXY_PPP_CLASS_PROXY_H_
7
8#include <vector>
9
10#include "base/basictypes.h"
11#include "ppapi/c/pp_instance.h"
12#include "ppapi/c/pp_var.h"
13#include "ppapi/proxy/interface_proxy.h"
14
15struct PPB_Var_Deprecated;
16
17namespace ppapi {
18namespace proxy {
19
20class SerializedVar;
21class SerializedVarReceiveInput;
22class SerializedVarVectorReceiveInput;
23class SerializedVarOutParam;
24class SerializedVarReturnValue;
25
26class PPP_Class_Proxy : public InterfaceProxy {
27 public:
28  // PPP_Class isn't a normal interface that you can query for, so this
29  // constructor doesn't take an interface pointer.
30  explicit PPP_Class_Proxy(Dispatcher* dispatcher);
31  virtual ~PPP_Class_Proxy();
32
33  // Factory function used for registration (normal code can just use the
34  // constructor).
35  static InterfaceProxy* Create(Dispatcher* dispatcher);
36
37  // Creates a proxied object in the browser process. This takes the browser's
38  // PPB_Var_Deprecated interface to use to create the object. The class and
39  static PP_Var CreateProxiedObject(const PPB_Var_Deprecated* var,
40                                    Dispatcher* dispatcher,
41                                    PP_Instance instance_id,
42                                    int64 ppp_class,
43                                    int64 class_data);
44
45  static PP_Bool IsInstanceOf(const PPB_Var_Deprecated* ppb_var_impl,
46                              const PP_Var& var,
47                              int64 ppp_class,
48                              int64* ppp_class_data);
49
50  // InterfaceProxy implementation.
51  virtual bool OnMessageReceived(const IPC::Message& msg);
52
53 private:
54  // IPC message handlers.
55  void OnMsgHasProperty(int64 ppp_class, int64 object,
56                        SerializedVarReceiveInput property,
57                        SerializedVarOutParam exception,
58                        bool* result);
59  void OnMsgHasMethod(int64 ppp_class, int64 object,
60                      SerializedVarReceiveInput property,
61                      SerializedVarOutParam exception,
62                      bool* result);
63  void OnMsgGetProperty(int64 ppp_class, int64 object,
64                        SerializedVarReceiveInput property,
65                        SerializedVarOutParam exception,
66                        SerializedVarReturnValue result);
67  void OnMsgEnumerateProperties(
68      int64 ppp_class, int64 object,
69      std::vector<SerializedVar>* props,
70      SerializedVarOutParam exception);
71  void OnMsgSetProperty(int64 ppp_class, int64 object,
72                        SerializedVarReceiveInput property,
73                        SerializedVarReceiveInput value,
74                        SerializedVarOutParam exception);
75  void OnMsgRemoveProperty(int64 ppp_class, int64 object,
76                           SerializedVarReceiveInput property,
77                           SerializedVarOutParam exception);
78  void OnMsgCall(int64 ppp_class, int64 object,
79                 SerializedVarReceiveInput method_name,
80                 SerializedVarVectorReceiveInput arg_vector,
81                 SerializedVarOutParam exception,
82                 SerializedVarReturnValue result);
83  void OnMsgConstruct(int64 ppp_class, int64 object,
84                      SerializedVarVectorReceiveInput arg_vector,
85                      SerializedVarOutParam exception,
86                      SerializedVarReturnValue result);
87  void OnMsgDeallocate(int64 ppp_class, int64 object);
88
89  // Returns true if the given class/data points to a plugin-implemented
90  // object. On failure, the exception, if non-NULL, will also be set.
91  bool ValidateUserData(int64 ppp_class, int64 class_data,
92                        SerializedVarOutParam* exception);
93
94  DISALLOW_COPY_AND_ASSIGN(PPP_Class_Proxy);
95};
96
97}  // namespace proxy
98}  // namespace ppapi
99
100#endif  // PPAPI_PROXY_PPP_CLASS_PROXY_H_
101