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