Home | History | Annotate | Download | only in proxy
      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