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/ppb_flash_proxy.h" | 5 #include "ppapi/proxy/ppb_flash_proxy.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "ppapi/c/dev/ppb_font_dev.h" | 10 #include "ppapi/c/dev/ppb_font_dev.h" |
11 #include "ppapi/c/dev/ppb_var_deprecated.h" | 11 #include "ppapi/c/dev/ppb_var_deprecated.h" |
12 #include "ppapi/c/pp_errors.h" | 12 #include "ppapi/c/pp_errors.h" |
13 #include "ppapi/c/pp_resource.h" | 13 #include "ppapi/c/pp_resource.h" |
14 #include "ppapi/c/private/ppb_flash.h" | 14 #include "ppapi/c/private/ppb_flash.h" |
15 #include "ppapi/proxy/host_dispatcher.h" | 15 #include "ppapi/proxy/host_dispatcher.h" |
16 #include "ppapi/proxy/plugin_dispatcher.h" | 16 #include "ppapi/proxy/plugin_dispatcher.h" |
17 #include "ppapi/proxy/plugin_resource_tracker.h" | 17 #include "ppapi/proxy/plugin_resource_tracker.h" |
18 #include "ppapi/proxy/ppapi_messages.h" | 18 #include "ppapi/proxy/ppapi_messages.h" |
19 #include "ppapi/proxy/proxy_module.h" | 19 #include "ppapi/proxy/proxy_module.h" |
20 #include "ppapi/proxy/serialized_var.h" | 20 #include "ppapi/proxy/serialized_var.h" |
21 #include "ppapi/shared_impl/resource.h" | 21 #include "ppapi/shared_impl/resource.h" |
22 #include "ppapi/shared_impl/scoped_pp_resource.h" | 22 #include "ppapi/shared_impl/scoped_pp_resource.h" |
| 23 #include "ppapi/shared_impl/var.h" |
23 #include "ppapi/thunk/enter.h" | 24 #include "ppapi/thunk/enter.h" |
24 #include "ppapi/thunk/ppb_url_request_info_api.h" | 25 #include "ppapi/thunk/ppb_url_request_info_api.h" |
25 #include "ppapi/thunk/resource_creation_api.h" | 26 #include "ppapi/thunk/resource_creation_api.h" |
26 | 27 |
27 namespace ppapi { | 28 namespace ppapi { |
28 namespace proxy { | 29 namespace proxy { |
29 | 30 |
30 namespace { | 31 namespace { |
31 | 32 |
32 void SetInstanceAlwaysOnTop(PP_Instance pp_instance, PP_Bool on_top) { | 33 void SetInstanceAlwaysOnTop(PP_Instance pp_instance, PP_Bool on_top) { |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 // | 146 // |
146 // On Linux, it would be better to go directly to the browser process for | 147 // On Linux, it would be better to go directly to the browser process for |
147 // this message rather than proxy it through some instance in a renderer. | 148 // this message rather than proxy it through some instance in a renderer. |
148 double result = 0; | 149 double result = 0; |
149 dispatcher->Send(new PpapiHostMsg_PPBFlash_GetLocalTimeZoneOffset( | 150 dispatcher->Send(new PpapiHostMsg_PPBFlash_GetLocalTimeZoneOffset( |
150 INTERFACE_ID_PPB_FLASH, instance, t, &result)); | 151 INTERFACE_ID_PPB_FLASH, instance, t, &result)); |
151 return result; | 152 return result; |
152 } | 153 } |
153 | 154 |
154 PP_Var GetCommandLineArgs(PP_Module pp_module) { | 155 PP_Var GetCommandLineArgs(PP_Module pp_module) { |
155 const PPB_Var_Deprecated* var_deprecated = | |
156 static_cast<const PPB_Var_Deprecated*>( | |
157 PluginDispatcher::GetInterfaceFromDispatcher( | |
158 PPB_VAR_DEPRECATED_INTERFACE)); | |
159 std::string args = ProxyModule::GetInstance()->GetFlashCommandLineArgs(); | 156 std::string args = ProxyModule::GetInstance()->GetFlashCommandLineArgs(); |
160 return var_deprecated->VarFromUtf8(pp_module, args.data(), args.length()); | 157 return StringVar::StringToPPVar(pp_module, args); |
161 } | 158 } |
162 | 159 |
163 const PPB_Flash flash_interface = { | 160 const PPB_Flash flash_interface = { |
164 &SetInstanceAlwaysOnTop, | 161 &SetInstanceAlwaysOnTop, |
165 &DrawGlyphs, | 162 &DrawGlyphs, |
166 &GetProxyForURL, | 163 &GetProxyForURL, |
167 &Navigate, | 164 &Navigate, |
168 &RunMessageLoop, | 165 &RunMessageLoop, |
169 &QuitMessageLoop, | 166 &QuitMessageLoop, |
170 &GetLocalTimeZoneOffset, | 167 &GetLocalTimeZoneOffset, |
171 &GetCommandLineArgs | 168 &GetCommandLineArgs |
172 }; | 169 }; |
173 | 170 |
174 InterfaceProxy* CreateFlashProxy(Dispatcher* dispatcher, | 171 InterfaceProxy* CreateFlashProxy(Dispatcher* dispatcher) { |
175 const void* target_interface) { | 172 return new PPB_Flash_Proxy(dispatcher); |
176 return new PPB_Flash_Proxy(dispatcher, target_interface); | |
177 } | 173 } |
178 | 174 |
179 } // namespace | 175 } // namespace |
180 | 176 |
181 PPB_Flash_Proxy::PPB_Flash_Proxy(Dispatcher* dispatcher, | 177 PPB_Flash_Proxy::PPB_Flash_Proxy(Dispatcher* dispatcher) |
182 const void* target_interface) | 178 : InterfaceProxy(dispatcher), |
183 : InterfaceProxy(dispatcher, target_interface) { | 179 ppb_flash_impl_(NULL) { |
| 180 if (!dispatcher->IsPlugin()) |
| 181 ppb_flash_impl_ = static_cast<const PPB_Flash*>( |
| 182 dispatcher->local_get_interface()(PPB_FLASH_INTERFACE)); |
184 } | 183 } |
185 | 184 |
186 PPB_Flash_Proxy::~PPB_Flash_Proxy() { | 185 PPB_Flash_Proxy::~PPB_Flash_Proxy() { |
187 } | 186 } |
188 | 187 |
189 // static | 188 // static |
190 const InterfaceProxy::Info* PPB_Flash_Proxy::GetInfo() { | 189 const InterfaceProxy::Info* PPB_Flash_Proxy::GetInfo() { |
191 static const Info info = { | 190 static const Info info = { |
192 &flash_interface, | 191 &flash_interface, |
193 PPB_FLASH_INTERFACE, | 192 PPB_FLASH_INTERFACE, |
(...skipping 27 matching lines...) Expand all Loading... |
221 OnMsgGetLocalTimeZoneOffset) | 220 OnMsgGetLocalTimeZoneOffset) |
222 IPC_MESSAGE_UNHANDLED(handled = false) | 221 IPC_MESSAGE_UNHANDLED(handled = false) |
223 IPC_END_MESSAGE_MAP() | 222 IPC_END_MESSAGE_MAP() |
224 // TODO(brettw) handle bad messages! | 223 // TODO(brettw) handle bad messages! |
225 return handled; | 224 return handled; |
226 } | 225 } |
227 | 226 |
228 void PPB_Flash_Proxy::OnMsgSetInstanceAlwaysOnTop( | 227 void PPB_Flash_Proxy::OnMsgSetInstanceAlwaysOnTop( |
229 PP_Instance instance, | 228 PP_Instance instance, |
230 PP_Bool on_top) { | 229 PP_Bool on_top) { |
231 ppb_flash_target()->SetInstanceAlwaysOnTop(instance, on_top); | 230 ppb_flash_impl_->SetInstanceAlwaysOnTop(instance, on_top); |
232 } | 231 } |
233 | 232 |
234 void PPB_Flash_Proxy::OnMsgDrawGlyphs(const PPBFlash_DrawGlyphs_Params& params, | 233 void PPB_Flash_Proxy::OnMsgDrawGlyphs(const PPBFlash_DrawGlyphs_Params& params, |
235 PP_Bool* result) { | 234 PP_Bool* result) { |
236 *result = PP_FALSE; | 235 *result = PP_FALSE; |
237 | 236 |
238 PP_FontDescription_Dev font_desc; | 237 PP_FontDescription_Dev font_desc; |
239 params.font_desc.SetToPPFontDescription(dispatcher(), &font_desc, false); | 238 params.font_desc.SetToPPFontDescription(dispatcher(), &font_desc, false); |
240 | 239 |
241 if (params.glyph_indices.size() != params.glyph_advances.size() || | 240 if (params.glyph_indices.size() != params.glyph_advances.size() || |
242 params.glyph_indices.empty()) | 241 params.glyph_indices.empty()) |
243 return; | 242 return; |
244 | 243 |
245 *result = ppb_flash_target()->DrawGlyphs( | 244 *result = ppb_flash_impl_->DrawGlyphs( |
246 0, // Unused instance param. | 245 0, // Unused instance param. |
247 params.image_data.host_resource(), &font_desc, | 246 params.image_data.host_resource(), &font_desc, |
248 params.color, params.position, params.clip, | 247 params.color, params.position, params.clip, |
249 const_cast<float(*)[3]>(params.transformation), | 248 const_cast<float(*)[3]>(params.transformation), |
250 static_cast<uint32_t>(params.glyph_indices.size()), | 249 static_cast<uint32_t>(params.glyph_indices.size()), |
251 const_cast<uint16_t*>(¶ms.glyph_indices[0]), | 250 const_cast<uint16_t*>(¶ms.glyph_indices[0]), |
252 const_cast<PP_Point*>(¶ms.glyph_advances[0])); | 251 const_cast<PP_Point*>(¶ms.glyph_advances[0])); |
253 } | 252 } |
254 | 253 |
255 void PPB_Flash_Proxy::OnMsgGetProxyForURL(PP_Instance instance, | 254 void PPB_Flash_Proxy::OnMsgGetProxyForURL(PP_Instance instance, |
256 const std::string& url, | 255 const std::string& url, |
257 SerializedVarReturnValue result) { | 256 SerializedVarReturnValue result) { |
258 result.Return(dispatcher(), ppb_flash_target()->GetProxyForURL( | 257 result.Return(dispatcher(), ppb_flash_impl_->GetProxyForURL( |
259 instance, url.c_str())); | 258 instance, url.c_str())); |
260 } | 259 } |
261 | 260 |
262 void PPB_Flash_Proxy::OnMsgNavigate(PP_Instance instance, | 261 void PPB_Flash_Proxy::OnMsgNavigate(PP_Instance instance, |
263 const PPB_URLRequestInfo_Data& data, | 262 const PPB_URLRequestInfo_Data& data, |
264 const std::string& target, | 263 const std::string& target, |
265 bool from_user_action, | 264 bool from_user_action, |
266 int32_t* result) { | 265 int32_t* result) { |
267 DCHECK(!dispatcher()->IsPlugin()); | 266 DCHECK(!dispatcher()->IsPlugin()); |
268 | 267 |
(...skipping 16 matching lines...) Expand all Loading... |
285 // Make a temporary request resource. | 284 // Make a temporary request resource. |
286 thunk::EnterFunctionNoLock<thunk::ResourceCreationAPI> enter(instance, true); | 285 thunk::EnterFunctionNoLock<thunk::ResourceCreationAPI> enter(instance, true); |
287 if (enter.failed()) { | 286 if (enter.failed()) { |
288 *result = PP_ERROR_FAILED; | 287 *result = PP_ERROR_FAILED; |
289 return; | 288 return; |
290 } | 289 } |
291 ScopedPPResource request_resource( | 290 ScopedPPResource request_resource( |
292 ScopedPPResource::PassRef(), | 291 ScopedPPResource::PassRef(), |
293 enter.functions()->CreateURLRequestInfo(instance, data)); | 292 enter.functions()->CreateURLRequestInfo(instance, data)); |
294 | 293 |
295 *result = ppb_flash_target()->Navigate(request_resource, | 294 *result = ppb_flash_impl_->Navigate(request_resource, |
296 target.c_str(), | 295 target.c_str(), |
297 from_user_action); | 296 from_user_action); |
298 } | 297 } |
299 | 298 |
300 void PPB_Flash_Proxy::OnMsgRunMessageLoop(PP_Instance instance) { | 299 void PPB_Flash_Proxy::OnMsgRunMessageLoop(PP_Instance instance) { |
301 ppb_flash_target()->RunMessageLoop(instance); | 300 ppb_flash_impl_->RunMessageLoop(instance); |
302 } | 301 } |
303 | 302 |
304 void PPB_Flash_Proxy::OnMsgQuitMessageLoop(PP_Instance instance) { | 303 void PPB_Flash_Proxy::OnMsgQuitMessageLoop(PP_Instance instance) { |
305 ppb_flash_target()->QuitMessageLoop(instance); | 304 ppb_flash_impl_->QuitMessageLoop(instance); |
306 } | 305 } |
307 | 306 |
308 void PPB_Flash_Proxy::OnMsgGetLocalTimeZoneOffset(PP_Instance instance, | 307 void PPB_Flash_Proxy::OnMsgGetLocalTimeZoneOffset(PP_Instance instance, |
309 PP_Time t, | 308 PP_Time t, |
310 double* result) { | 309 double* result) { |
311 *result = ppb_flash_target()->GetLocalTimeZoneOffset(instance, t); | 310 *result = ppb_flash_impl_->GetLocalTimeZoneOffset(instance, t); |
312 } | 311 } |
313 | 312 |
314 } // namespace proxy | 313 } // namespace proxy |
315 } // namespace ppapi | 314 } // namespace ppapi |
OLD | NEW |