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
12namespace ppapi {
13namespace proxy {
14
15class PluginDispatcher;
16class PluginVarTracker;
17
18// Implementation of the VarSerializationRules interface for the plugin.
19class 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