| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef PPAPI_PROXY_HOST_DISPATCHER_H_ | 5 #ifndef PPAPI_PROXY_HOST_DISPATCHER_H_ |
| 6 #define PPAPI_PROXY_HOST_DISPATCHER_H_ | 6 #define PPAPI_PROXY_HOST_DISPATCHER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/process.h" | 13 #include "base/process.h" |
| 14 #include "ppapi/c/pp_instance.h" | 14 #include "ppapi/c/pp_instance.h" |
| 15 #include "ppapi/proxy/dispatcher.h" | 15 #include "ppapi/proxy/dispatcher.h" |
| 16 #include "ppapi/shared_impl/function_group_base.h" | 16 #include "ppapi/shared_impl/function_group_base.h" |
| 17 | 17 |
| 18 struct PPB_Proxy_Private; | 18 struct PPB_Proxy_Private; |
| 19 struct PPB_Var_Deprecated; | 19 struct PPB_Var_Deprecated; |
| 20 | 20 |
| 21 namespace base { | 21 namespace base { |
| 22 class WaitableEvent; | 22 class WaitableEvent; |
| 23 } | 23 } |
| 24 | 24 |
| 25 namespace IPC { | 25 namespace IPC { |
| 26 class SyncChannel; | 26 class SyncChannel; |
| 27 } | 27 } |
| 28 | 28 |
| 29 namespace ppapi { | 29 namespace ppapi { |
| 30 |
| 30 struct Preferences; | 31 struct Preferences; |
| 31 } | |
| 32 | 32 |
| 33 namespace pp { | |
| 34 namespace proxy { | 33 namespace proxy { |
| 35 | 34 |
| 36 class InterfaceProxy; | 35 class InterfaceProxy; |
| 37 class VarSerialization; | 36 class VarSerialization; |
| 38 | 37 |
| 39 class HostDispatcher : public Dispatcher { | 38 class HostDispatcher : public Dispatcher { |
| 40 public: | 39 public: |
| 41 // Constructor for the renderer side. | 40 // Constructor for the renderer side. |
| 42 // | 41 // |
| 43 // You must call InitHostWithChannel after the constructor. | 42 // You must call InitHostWithChannel after the constructor. |
| 44 HostDispatcher(base::ProcessHandle host_process_handle, | 43 HostDispatcher(base::ProcessHandle host_process_handle, |
| 45 PP_Module module, | 44 PP_Module module, |
| 46 GetInterfaceFunc local_get_interface); | 45 GetInterfaceFunc local_get_interface); |
| 47 ~HostDispatcher(); | 46 ~HostDispatcher(); |
| 48 | 47 |
| 49 // You must call this function before anything else. Returns true on success. | 48 // You must call this function before anything else. Returns true on success. |
| 50 // The delegate pointer must outlive this class, ownership is not | 49 // The delegate pointer must outlive this class, ownership is not |
| 51 // transferred. | 50 // transferred. |
| 52 virtual bool InitHostWithChannel(Delegate* delegate, | 51 virtual bool InitHostWithChannel(Delegate* delegate, |
| 53 const IPC::ChannelHandle& channel_handle, | 52 const IPC::ChannelHandle& channel_handle, |
| 54 bool is_client, | 53 bool is_client, |
| 55 const ppapi::Preferences& preferences); | 54 const Preferences& preferences); |
| 56 | 55 |
| 57 // The host side maintains a mapping from PP_Instance to Dispatcher so | 56 // The host side maintains a mapping from PP_Instance to Dispatcher so |
| 58 // that we can send the messages to the right channel. | 57 // that we can send the messages to the right channel. |
| 59 static HostDispatcher* GetForInstance(PP_Instance instance); | 58 static HostDispatcher* GetForInstance(PP_Instance instance); |
| 60 static void SetForInstance(PP_Instance instance, | 59 static void SetForInstance(PP_Instance instance, |
| 61 HostDispatcher* dispatcher); | 60 HostDispatcher* dispatcher); |
| 62 static void RemoveForInstance(PP_Instance instance); | 61 static void RemoveForInstance(PP_Instance instance); |
| 63 | 62 |
| 64 // Returns the host's notion of our PP_Module. This will be different than | 63 // Returns the host's notion of our PP_Module. This will be different than |
| 65 // the plugin's notion of its PP_Module because the plugin process may be | 64 // the plugin's notion of its PP_Module because the plugin process may be |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 // name is not in the map, that implies that we haven't queried for it yet. | 113 // name is not in the map, that implies that we haven't queried for it yet. |
| 115 std::map<std::string, bool> plugin_if_supported_; | 114 std::map<std::string, bool> plugin_if_supported_; |
| 116 | 115 |
| 117 // All target proxies currently created. These are ones that receive | 116 // All target proxies currently created. These are ones that receive |
| 118 // messages. They are created on demand when we receive messages. | 117 // messages. They are created on demand when we receive messages. |
| 119 scoped_ptr<InterfaceProxy> target_proxies_[INTERFACE_ID_COUNT]; | 118 scoped_ptr<InterfaceProxy> target_proxies_[INTERFACE_ID_COUNT]; |
| 120 | 119 |
| 121 // Function proxies created for "new-style" FunctionGroups. | 120 // Function proxies created for "new-style" FunctionGroups. |
| 122 // TODO(brettw) this is in progress. It should be merged with the target | 121 // TODO(brettw) this is in progress. It should be merged with the target |
| 123 // proxies so there is one list to consult. | 122 // proxies so there is one list to consult. |
| 124 scoped_ptr< ::ppapi::FunctionGroupBase > | 123 scoped_ptr<FunctionGroupBase > |
| 125 function_proxies_[INTERFACE_ID_COUNT]; | 124 function_proxies_[INTERFACE_ID_COUNT]; |
| 126 | 125 |
| 127 // Guaranteed non-NULL. | 126 // Guaranteed non-NULL. |
| 128 const PPB_Proxy_Private* ppb_proxy_; | 127 const PPB_Proxy_Private* ppb_proxy_; |
| 129 | 128 |
| 130 // Set to true when the plugin is in a state that it can be reentered by a | 129 // Set to true when the plugin is in a state that it can be reentered by a |
| 131 // sync message from the host. We allow reentrancy only when we're processing | 130 // sync message from the host. We allow reentrancy only when we're processing |
| 132 // a sync message from the renderer that is a scripting command. When the | 131 // a sync message from the renderer that is a scripting command. When the |
| 133 // plugin is in this state, it needs to accept reentrancy since scripting may | 132 // plugin is in this state, it needs to accept reentrancy since scripting may |
| 134 // ultimately call back into the plugin. | 133 // ultimately call back into the plugin. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 148 ScopedModuleReference(Dispatcher* dispatcher); | 147 ScopedModuleReference(Dispatcher* dispatcher); |
| 149 ~ScopedModuleReference(); | 148 ~ScopedModuleReference(); |
| 150 | 149 |
| 151 private: | 150 private: |
| 152 HostDispatcher* dispatcher_; | 151 HostDispatcher* dispatcher_; |
| 153 | 152 |
| 154 DISALLOW_COPY_AND_ASSIGN(ScopedModuleReference); | 153 DISALLOW_COPY_AND_ASSIGN(ScopedModuleReference); |
| 155 }; | 154 }; |
| 156 | 155 |
| 157 } // namespace proxy | 156 } // namespace proxy |
| 158 } // namespace pp | 157 } // namespace ppapi |
| 159 | 158 |
| 160 #endif // PPAPI_PROXY_HOST_DISPATCHER_H_ | 159 #endif // PPAPI_PROXY_HOST_DISPATCHER_H_ |
| OLD | NEW |