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_PLUGIN_VAR_SERIALIZATION_RULES_H_ 6 #define PPAPI_PROXY_PLUGIN_VAR_SERIALIZATION_RULES_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/weak_ptr.h" 10 #include "ppapi/proxy/var_serialization_rules.h" 11 12 namespace ppapi { 13 namespace proxy { 14 15 class PluginDispatcher; 16 class PluginVarTracker; 17 18 // Implementation of the VarSerializationRules interface for the plugin. 19 class PluginVarSerializationRules : public VarSerializationRules { 20 public: 21 // This class will use the given non-owning pointer to the var tracker to 22 // handle object refcounting and string conversion. 23 explicit PluginVarSerializationRules( 24 const base::WeakPtr<PluginDispatcher>& dispatcher); 25 ~PluginVarSerializationRules(); 26 27 // VarSerialization implementation. 28 virtual PP_Var SendCallerOwned(const PP_Var& var); 29 virtual PP_Var BeginReceiveCallerOwned(const PP_Var& var); 30 virtual void EndReceiveCallerOwned(const PP_Var& var); 31 virtual PP_Var ReceivePassRef(const PP_Var& var); 32 virtual PP_Var BeginSendPassRef(const PP_Var& var); 33 virtual void EndSendPassRef(const PP_Var& var); 34 virtual void ReleaseObjectRef(const PP_Var& var); 35 36 private: 37 PluginVarTracker* var_tracker_; 38 39 // In most cases, |dispatcher_| won't be NULL, but you should always check 40 // before using it. 41 // One scenario that it becomes NULL: A SerializedVar holds a ref to this 42 // object, and a sync message is issued. While waiting for the reply to the 43 // sync message, some incoming message causes the dispatcher to be destroyed. 44 // If that happens, we may leak references to object vars. Considering that 45 // scripting has been deprecated, this may not be a big issue. 46 base::WeakPtr<PluginDispatcher> dispatcher_; 47 48 DISALLOW_COPY_AND_ASSIGN(PluginVarSerializationRules); 49 }; 50 51 } // namespace proxy 52 } // namespace ppapi 53 54 #endif // PPAPI_PROXY_PLUGIN_VAR_SERIALIZATION_RULES_H_ 55