[email protected] | d8f868a6 | 2012-02-04 16:44:37 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 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" | ||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 9 | #include "base/memory/weak_ptr.h" |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 10 | #include "ppapi/proxy/var_serialization_rules.h" |
11 | |||||
[email protected] | 4d2efd2 | 2011-08-18 21:58:02 | [diff] [blame] | 12 | namespace ppapi { |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 13 | namespace proxy { |
14 | |||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 15 | class PluginDispatcher; |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 16 | class PluginVarTracker; |
17 | |||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 18 | // Implementation of the VarSerializationRules interface for the plugin. |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 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. | ||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 23 | explicit PluginVarSerializationRules( |
24 | const base::WeakPtr<PluginDispatcher>& dispatcher); | ||||
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 25 | ~PluginVarSerializationRules(); |
26 | |||||
27 | // VarSerialization implementation. | ||||
[email protected] | 2d449b3 | 2012-02-07 05:38:00 | [diff] [blame] | 28 | virtual PP_Var SendCallerOwned(const PP_Var& var); |
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 29 | virtual PP_Var BeginReceiveCallerOwned(const PP_Var& var); |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 30 | virtual void EndReceiveCallerOwned(const PP_Var& var); |
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 31 | virtual PP_Var ReceivePassRef(const PP_Var& var); |
[email protected] | 2d449b3 | 2012-02-07 05:38:00 | [diff] [blame] | 32 | virtual PP_Var BeginSendPassRef(const PP_Var& var); |
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 33 | virtual void EndSendPassRef(const PP_Var& var); |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 34 | virtual void ReleaseObjectRef(const PP_Var& var); |
35 | |||||
36 | private: | ||||
37 | PluginVarTracker* var_tracker_; | ||||
38 | |||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 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 | |||||
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 48 | DISALLOW_COPY_AND_ASSIGN(PluginVarSerializationRules); |
49 | }; | ||||
50 | |||||
51 | } // namespace proxy | ||||
[email protected] | 4d2efd2 | 2011-08-18 21:58:02 | [diff] [blame] | 52 | } // namespace ppapi |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 53 | |
54 | #endif // PPAPI_PROXY_PLUGIN_VAR_SERIALIZATION_RULES_H_ |