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 #include "ppapi/proxy/dispatcher.h" | 5 #include "ppapi/proxy/dispatcher.h" |
6 | 6 |
7 #include <string.h> // For memset. | 7 #include <string.h> // For memset. |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 | 10 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 | 97 |
98 typedef std::map<std::string, const InterfaceProxy::Info*> NameToInfo; | 98 typedef std::map<std::string, const InterfaceProxy::Info*> NameToInfo; |
99 NameToInfo name_to_plugin_info_; | 99 NameToInfo name_to_plugin_info_; |
100 NameToInfo name_to_browser_info_; | 100 NameToInfo name_to_browser_info_; |
101 | 101 |
102 // Note that there can be multiple interface names mapping to the same ID. | 102 // Note that there can be multiple interface names mapping to the same ID. |
103 // In this case, the ID will map to one of them. This is temporary while | 103 // In this case, the ID will map to one of them. This is temporary while |
104 // we're converting to the thunk system, when that is complete, we need to | 104 // we're converting to the thunk system, when that is complete, we need to |
105 // have a better way of handling multiple interface implemented by one | 105 // have a better way of handling multiple interface implemented by one |
106 // proxy object. | 106 // proxy object. |
107 const InterfaceProxy::Info* id_to_plugin_info_[INTERFACE_ID_COUNT]; | |
108 const InterfaceProxy::Info* id_to_browser_info_[INTERFACE_ID_COUNT]; | 107 const InterfaceProxy::Info* id_to_browser_info_[INTERFACE_ID_COUNT]; |
109 }; | 108 }; |
110 | 109 |
111 InterfaceList::InterfaceList() { | 110 InterfaceList::InterfaceList() { |
112 memset(id_to_plugin_info_, 0, sizeof(id_to_plugin_info_)); | |
113 memset(id_to_browser_info_, 0, sizeof(id_to_browser_info_)); | 111 memset(id_to_browser_info_, 0, sizeof(id_to_browser_info_)); |
114 | 112 |
115 // PPB (browser) interfaces. | 113 // PPB (browser) interfaces. |
116 AddPPB(PPB_AudioConfig_Proxy::GetInfo()); | 114 AddPPB(PPB_AudioConfig_Proxy::GetInfo()); |
117 AddPPB(PPB_Audio_Proxy::GetInfo()); | 115 AddPPB(PPB_Audio_Proxy::GetInfo()); |
118 AddPPB(PPB_Broker_Proxy::GetInfo()); | 116 AddPPB(PPB_Broker_Proxy::GetInfo()); |
119 AddPPB(PPB_Buffer_Proxy::GetInfo()); | 117 AddPPB(PPB_Buffer_Proxy::GetInfo()); |
120 AddPPB(PPB_CharSet_Proxy::GetInfo()); | 118 AddPPB(PPB_CharSet_Proxy::GetInfo()); |
121 AddPPB(PPB_Console_Proxy::GetInfo()); | 119 AddPPB(PPB_Console_Proxy::GetInfo()); |
122 AddPPB(PPB_Context3D_Proxy::GetInfo()); | 120 AddPPB(PPB_Context3D_Proxy::GetInfo()); |
(...skipping 28 matching lines...) Expand all Loading... |
151 AddPPB(PPB_Var_Deprecated_Proxy::GetInfo()); | 149 AddPPB(PPB_Var_Deprecated_Proxy::GetInfo()); |
152 AddPPB(PPB_Var_Proxy::GetInfo()); | 150 AddPPB(PPB_Var_Proxy::GetInfo()); |
153 | 151 |
154 #ifdef ENABLE_FLAPPER_HACKS | 152 #ifdef ENABLE_FLAPPER_HACKS |
155 AddPPB(PPB_Flash_NetConnector_Proxy::GetInfo()); | 153 AddPPB(PPB_Flash_NetConnector_Proxy::GetInfo()); |
156 #endif | 154 #endif |
157 | 155 |
158 // PPP (plugin) interfaces. | 156 // PPP (plugin) interfaces. |
159 AddPPP(PPP_Graphics3D_Proxy::GetInfo()); | 157 AddPPP(PPP_Graphics3D_Proxy::GetInfo()); |
160 AddPPP(PPP_Instance_Private_Proxy::GetInfo()); | 158 AddPPP(PPP_Instance_Private_Proxy::GetInfo()); |
161 AddPPP(PPP_Instance_Proxy::GetInfo()); | 159 AddPPP(PPP_Instance_Proxy::GetInfo0_4()); |
| 160 AddPPP(PPP_Instance_Proxy::GetInfo0_5()); |
162 } | 161 } |
163 | 162 |
164 void InterfaceList::AddPPP(const InterfaceProxy::Info* info) { | 163 void InterfaceList::AddPPP(const InterfaceProxy::Info* info) { |
165 DCHECK(name_to_plugin_info_.find(info->name) == | 164 DCHECK(name_to_plugin_info_.find(info->name) == |
166 name_to_plugin_info_.end()); | 165 name_to_plugin_info_.end()); |
167 DCHECK(info->id >= INTERFACE_ID_NONE && info->id < INTERFACE_ID_COUNT); | 166 DCHECK(info->id >= INTERFACE_ID_NONE && info->id < INTERFACE_ID_COUNT); |
168 DCHECK(info->id == INTERFACE_ID_NONE || id_to_plugin_info_[info->id] == NULL); | |
169 | 167 |
170 name_to_plugin_info_[info->name] = info; | 168 name_to_plugin_info_[info->name] = info; |
171 if (info->id != INTERFACE_ID_NONE) | |
172 id_to_plugin_info_[info->id] = info; | |
173 } | 169 } |
174 | 170 |
175 void InterfaceList::AddPPB(const InterfaceProxy::Info* info) { | 171 void InterfaceList::AddPPB(const InterfaceProxy::Info* info) { |
176 DCHECK(name_to_browser_info_.find(info->name) == | 172 DCHECK(name_to_browser_info_.find(info->name) == |
177 name_to_browser_info_.end()); | 173 name_to_browser_info_.end()); |
178 DCHECK(info->id >= INTERFACE_ID_NONE && info->id < INTERFACE_ID_COUNT); | 174 DCHECK(info->id >= INTERFACE_ID_NONE && info->id < INTERFACE_ID_COUNT); |
179 DCHECK(info->id == INTERFACE_ID_NONE || | 175 DCHECK(info->id == INTERFACE_ID_NONE || |
180 id_to_browser_info_[info->id] == NULL); | 176 id_to_browser_info_[info->id] == NULL); |
181 | 177 |
182 name_to_browser_info_[std::string(info->name)] = info; | 178 name_to_browser_info_[std::string(info->name)] = info; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 const InterfaceProxy::Info* Dispatcher::GetPPPInterfaceInfo( | 235 const InterfaceProxy::Info* Dispatcher::GetPPPInterfaceInfo( |
240 const std::string& name) { | 236 const std::string& name) { |
241 const InterfaceList* list = InterfaceList::GetInstance(); | 237 const InterfaceList* list = InterfaceList::GetInstance(); |
242 InterfaceList::NameToInfo::const_iterator found = | 238 InterfaceList::NameToInfo::const_iterator found = |
243 list->name_to_plugin_info_.find(name); | 239 list->name_to_plugin_info_.find(name); |
244 if (found == list->name_to_plugin_info_.end()) | 240 if (found == list->name_to_plugin_info_.end()) |
245 return NULL; | 241 return NULL; |
246 return found->second; | 242 return found->second; |
247 } | 243 } |
248 | 244 |
249 // static | |
250 const InterfaceProxy::Info* Dispatcher::GetPPPInterfaceInfo(InterfaceID id) { | |
251 if (id <= 0 || id >= INTERFACE_ID_COUNT) | |
252 return NULL; | |
253 const InterfaceList* list = InterfaceList::GetInstance(); | |
254 return list->id_to_plugin_info_[id]; | |
255 } | |
256 | |
257 void Dispatcher::SetSerializationRules( | 245 void Dispatcher::SetSerializationRules( |
258 VarSerializationRules* var_serialization_rules) { | 246 VarSerializationRules* var_serialization_rules) { |
259 serialization_rules_.reset(var_serialization_rules); | 247 serialization_rules_.reset(var_serialization_rules); |
260 } | 248 } |
261 | 249 |
262 const void* Dispatcher::GetLocalInterface(const char* interface_name) { | 250 const void* Dispatcher::GetLocalInterface(const char* interface_name) { |
263 return local_get_interface_(interface_name); | 251 return local_get_interface_(interface_name); |
264 } | 252 } |
265 | 253 |
266 base::MessageLoopProxy* Dispatcher::GetIPCMessageLoop() { | 254 base::MessageLoopProxy* Dispatcher::GetIPCMessageLoop() { |
267 return delegate()->GetIPCMessageLoop(); | 255 return delegate()->GetIPCMessageLoop(); |
268 } | 256 } |
269 | 257 |
270 void Dispatcher::AddIOThreadMessageFilter( | 258 void Dispatcher::AddIOThreadMessageFilter( |
271 IPC::ChannelProxy::MessageFilter* filter) { | 259 IPC::ChannelProxy::MessageFilter* filter) { |
272 channel()->AddFilter(filter); | 260 channel()->AddFilter(filter); |
273 } | 261 } |
274 | 262 |
275 } // namespace proxy | 263 } // namespace proxy |
276 } // namespace pp | 264 } // namespace pp |
OLD | NEW |