1 // Copyright (c) 2011 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_PROXY_OBJECT_VAR_H_ 6 #define PPAPI_PROXY_PROXY_OBJECT_VAR_H_ 7 8 #include "base/compiler_specific.h" 9 #include "ppapi/proxy/ppapi_proxy_export.h" 10 #include "ppapi/shared_impl/var.h" 11 12 namespace ppapi { 13 14 namespace proxy { 15 class PluginDispatcher; 16 } // namespace proxy 17 18 // Tracks a reference to an object var in the plugin side of the proxy. This 19 // just stores the dispatcher and host var ID, and provides the interface for 20 // integrating this with PP_Var creation. 21 class PPAPI_PROXY_EXPORT ProxyObjectVar : public Var { 22 public: 23 ProxyObjectVar(proxy::PluginDispatcher* dispatcher, 24 int32 host_var_id); 25 26 virtual ~ProxyObjectVar(); 27 28 // Var overrides. 29 virtual ProxyObjectVar* AsProxyObjectVar() OVERRIDE; 30 virtual PP_VarType GetType() const OVERRIDE; 31 dispatcher()32 proxy::PluginDispatcher* dispatcher() const { return dispatcher_; } host_var_id()33 int32 host_var_id() const { return host_var_id_; } 34 user_data()35 void* user_data() const { return user_data_; } set_user_data(void * ud)36 void set_user_data(void* ud) { user_data_ = ud; } 37 38 // Expose AssignVarID on Var so the PluginResourceTracker can call us when 39 // it's creating IDs. 40 void AssignVarID(int32 id); 41 clear_dispatcher()42 void clear_dispatcher() { dispatcher_ = NULL; } 43 44 private: 45 proxy::PluginDispatcher* dispatcher_; 46 int32 host_var_id_; 47 48 // When this object is created as representing a var implemented by the 49 // plugin, this stores the user data so that we can look it up later. See 50 // PluginVarTracker. 51 void* user_data_; 52 53 DISALLOW_COPY_AND_ASSIGN(ProxyObjectVar); 54 }; 55 56 } // namespace ppapi 57 58 #endif // PPAPI_PROXY_PROXY_OBJECT_VAR_H_ 59