Avi Drissman | db497b3 | 2022-09-15 19:47:28 | [diff] [blame] | 1 | // Copyright 2012 The Chromium Authors |
[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 | |||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 8 | #include "base/memory/weak_ptr.h" |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 9 | #include "ppapi/proxy/var_serialization_rules.h" |
10 | |||||
[email protected] | 4d2efd2 | 2011-08-18 21:58:02 | [diff] [blame] | 11 | namespace ppapi { |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 12 | namespace proxy { |
13 | |||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 14 | class PluginDispatcher; |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 15 | class PluginVarTracker; |
16 | |||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 17 | // Implementation of the VarSerializationRules interface for the plugin. |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 18 | class PluginVarSerializationRules : public VarSerializationRules { |
19 | public: | ||||
20 | // This class will use the given non-owning pointer to the var tracker to | ||||
21 | // handle object refcounting and string conversion. | ||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 22 | explicit PluginVarSerializationRules( |
23 | const base::WeakPtr<PluginDispatcher>& dispatcher); | ||||
Peter Boström | 3d5b3cb | 2021-09-23 21:35:45 | [diff] [blame] | 24 | |
25 | PluginVarSerializationRules(const PluginVarSerializationRules&) = delete; | ||||
26 | PluginVarSerializationRules& operator=(const PluginVarSerializationRules&) = | ||||
27 | delete; | ||||
28 | |||||
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 29 | ~PluginVarSerializationRules(); |
30 | |||||
31 | // VarSerialization implementation. | ||||
[email protected] | 2d449b3 | 2012-02-07 05:38:00 | [diff] [blame] | 32 | virtual PP_Var SendCallerOwned(const PP_Var& var); |
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 33 | virtual PP_Var BeginReceiveCallerOwned(const PP_Var& var); |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 34 | virtual void EndReceiveCallerOwned(const PP_Var& var); |
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 35 | virtual PP_Var ReceivePassRef(const PP_Var& var); |
[email protected] | 2d449b3 | 2012-02-07 05:38:00 | [diff] [blame] | 36 | virtual PP_Var BeginSendPassRef(const PP_Var& var); |
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 37 | virtual void EndSendPassRef(const PP_Var& var); |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 38 | virtual void ReleaseObjectRef(const PP_Var& var); |
39 | |||||
40 | private: | ||||
41 | PluginVarTracker* var_tracker_; | ||||
42 | |||||
[email protected] | 67600b9 | 2012-03-10 06:51:48 | [diff] [blame] | 43 | // In most cases, |dispatcher_| won't be NULL, but you should always check |
44 | // before using it. | ||||
45 | // One scenario that it becomes NULL: A SerializedVar holds a ref to this | ||||
46 | // object, and a sync message is issued. While waiting for the reply to the | ||||
47 | // sync message, some incoming message causes the dispatcher to be destroyed. | ||||
48 | // If that happens, we may leak references to object vars. Considering that | ||||
49 | // scripting has been deprecated, this may not be a big issue. | ||||
50 | base::WeakPtr<PluginDispatcher> dispatcher_; | ||||
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 51 | }; |
52 | |||||
53 | } // namespace proxy | ||||
[email protected] | 4d2efd2 | 2011-08-18 21:58:02 | [diff] [blame] | 54 | } // namespace ppapi |
[email protected] | 6608531 | 2010-11-05 22:14:25 | [diff] [blame] | 55 | |
56 | #endif // PPAPI_PROXY_PLUGIN_VAR_SERIALIZATION_RULES_H_ |