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/resource_creation_proxy.h" | 5 #include "ppapi/proxy/resource_creation_proxy.h" |
6 | 6 |
7 #include "ppapi/c/pp_errors.h" | 7 #include "ppapi/c/pp_errors.h" |
8 #include "ppapi/c/pp_size.h" | 8 #include "ppapi/c/pp_size.h" |
9 #include "ppapi/c/trusted/ppb_image_data_trusted.h" | 9 #include "ppapi/c/trusted/ppb_image_data_trusted.h" |
10 #include "ppapi/proxy/plugin_dispatcher.h" | 10 #include "ppapi/proxy/plugin_dispatcher.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "ppapi/proxy/ppb_font_proxy.h" | 22 #include "ppapi/proxy/ppb_font_proxy.h" |
23 #include "ppapi/proxy/ppb_graphics_2d_proxy.h" | 23 #include "ppapi/proxy/ppb_graphics_2d_proxy.h" |
24 #include "ppapi/proxy/ppb_graphics_3d_proxy.h" | 24 #include "ppapi/proxy/ppb_graphics_3d_proxy.h" |
25 #include "ppapi/proxy/ppb_image_data_proxy.h" | 25 #include "ppapi/proxy/ppb_image_data_proxy.h" |
26 #include "ppapi/proxy/ppb_tcp_socket_private_proxy.h" | 26 #include "ppapi/proxy/ppb_tcp_socket_private_proxy.h" |
27 #include "ppapi/proxy/ppb_udp_socket_private_proxy.h" | 27 #include "ppapi/proxy/ppb_udp_socket_private_proxy.h" |
28 #include "ppapi/proxy/ppb_url_loader_proxy.h" | 28 #include "ppapi/proxy/ppb_url_loader_proxy.h" |
29 #include "ppapi/proxy/ppb_video_capture_proxy.h" | 29 #include "ppapi/proxy/ppb_video_capture_proxy.h" |
30 #include "ppapi/proxy/ppb_video_decoder_proxy.h" | 30 #include "ppapi/proxy/ppb_video_decoder_proxy.h" |
31 #include "ppapi/shared_impl/api_id.h" | 31 #include "ppapi/shared_impl/api_id.h" |
32 #include "ppapi/shared_impl/audio_config_impl.h" | |
33 #include "ppapi/shared_impl/font_impl.h" | |
34 #include "ppapi/shared_impl/function_group_base.h" | 32 #include "ppapi/shared_impl/function_group_base.h" |
35 #include "ppapi/shared_impl/host_resource.h" | 33 #include "ppapi/shared_impl/host_resource.h" |
36 #include "ppapi/shared_impl/input_event_impl.h" | 34 #include "ppapi/shared_impl/ppb_audio_config_shared.h" |
37 #include "ppapi/shared_impl/url_request_info_impl.h" | 35 #include "ppapi/shared_impl/ppb_font_shared.h" |
| 36 #include "ppapi/shared_impl/ppb_input_event_shared.h" |
| 37 #include "ppapi/shared_impl/ppb_url_request_info_shared.h" |
38 #include "ppapi/shared_impl/var.h" | 38 #include "ppapi/shared_impl/var.h" |
39 #include "ppapi/thunk/enter.h" | 39 #include "ppapi/thunk/enter.h" |
40 #include "ppapi/thunk/ppb_image_data_api.h" | 40 #include "ppapi/thunk/ppb_image_data_api.h" |
41 | 41 |
42 using ppapi::thunk::ResourceCreationAPI; | 42 using ppapi::thunk::ResourceCreationAPI; |
43 | 43 |
44 namespace ppapi { | 44 namespace ppapi { |
45 namespace proxy { | 45 namespace proxy { |
46 | 46 |
47 ResourceCreationProxy::ResourceCreationProxy(Dispatcher* dispatcher) | 47 ResourceCreationProxy::ResourceCreationProxy(Dispatcher* dispatcher) |
(...skipping 18 matching lines...) Expand all Loading... |
66 PPB_Audio_Callback audio_callback, | 66 PPB_Audio_Callback audio_callback, |
67 void* user_data) { | 67 void* user_data) { |
68 return PPB_Audio_Proxy::CreateProxyResource(instance, config_id, | 68 return PPB_Audio_Proxy::CreateProxyResource(instance, config_id, |
69 audio_callback, user_data); | 69 audio_callback, user_data); |
70 } | 70 } |
71 | 71 |
72 PP_Resource ResourceCreationProxy::CreateAudioConfig( | 72 PP_Resource ResourceCreationProxy::CreateAudioConfig( |
73 PP_Instance instance, | 73 PP_Instance instance, |
74 PP_AudioSampleRate sample_rate, | 74 PP_AudioSampleRate sample_rate, |
75 uint32_t sample_frame_count) { | 75 uint32_t sample_frame_count) { |
76 return AudioConfigImpl::CreateAsProxy( | 76 return PPB_AudioConfig_Shared::CreateAsProxy( |
77 instance, sample_rate, sample_frame_count); | 77 instance, sample_rate, sample_frame_count); |
78 } | 78 } |
79 | 79 |
80 PP_Resource ResourceCreationProxy::CreateAudioTrusted(PP_Instance instance) { | 80 PP_Resource ResourceCreationProxy::CreateAudioTrusted(PP_Instance instance) { |
81 // Proxied plugins can't created trusted audio devices. | 81 // Proxied plugins can't created trusted audio devices. |
82 return 0; | 82 return 0; |
83 } | 83 } |
84 | 84 |
85 PP_Resource ResourceCreationProxy::CreateAudioInput( | 85 PP_Resource ResourceCreationProxy::CreateAudioInput( |
86 PP_Instance instance, | 86 PP_Instance instance, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 } | 144 } |
145 | 145 |
146 PP_Resource ResourceCreationProxy::CreateFlashNetConnector( | 146 PP_Resource ResourceCreationProxy::CreateFlashNetConnector( |
147 PP_Instance instance) { | 147 PP_Instance instance) { |
148 return PPB_Flash_NetConnector_Proxy::CreateProxyResource(instance); | 148 return PPB_Flash_NetConnector_Proxy::CreateProxyResource(instance); |
149 } | 149 } |
150 | 150 |
151 PP_Resource ResourceCreationProxy::CreateFontObject( | 151 PP_Resource ResourceCreationProxy::CreateFontObject( |
152 PP_Instance instance, | 152 PP_Instance instance, |
153 const PP_FontDescription_Dev* description) { | 153 const PP_FontDescription_Dev* description) { |
154 if (!ppapi::FontImpl::IsPPFontDescriptionValid(*description)) | 154 if (!PPB_Font_Shared::IsPPFontDescriptionValid(*description)) |
155 return 0; | 155 return 0; |
156 return (new Font(HostResource::MakeInstanceOnly(instance), *description))-> | 156 return (new Font(HostResource::MakeInstanceOnly(instance), *description))-> |
157 GetReference(); | 157 GetReference(); |
158 } | 158 } |
159 | 159 |
160 PP_Resource ResourceCreationProxy::CreateGraphics2D(PP_Instance instance, | 160 PP_Resource ResourceCreationProxy::CreateGraphics2D(PP_Instance instance, |
161 const PP_Size& size, | 161 const PP_Size& size, |
162 PP_Bool is_always_opaque) { | 162 PP_Bool is_always_opaque) { |
163 return PPB_Graphics2D_Proxy::CreateProxyResource(instance, size, | 163 return PPB_Graphics2D_Proxy::CreateProxyResource(instance, size, |
164 is_always_opaque); | 164 is_always_opaque); |
(...skipping 29 matching lines...) Expand all Loading... |
194 PP_InputEvent_Type type, | 194 PP_InputEvent_Type type, |
195 PP_TimeTicks time_stamp, | 195 PP_TimeTicks time_stamp, |
196 uint32_t modifiers, | 196 uint32_t modifiers, |
197 uint32_t key_code, | 197 uint32_t key_code, |
198 struct PP_Var character_text) { | 198 struct PP_Var character_text) { |
199 if (type != PP_INPUTEVENT_TYPE_RAWKEYDOWN && | 199 if (type != PP_INPUTEVENT_TYPE_RAWKEYDOWN && |
200 type != PP_INPUTEVENT_TYPE_KEYDOWN && | 200 type != PP_INPUTEVENT_TYPE_KEYDOWN && |
201 type != PP_INPUTEVENT_TYPE_KEYUP && | 201 type != PP_INPUTEVENT_TYPE_KEYUP && |
202 type != PP_INPUTEVENT_TYPE_CHAR) | 202 type != PP_INPUTEVENT_TYPE_CHAR) |
203 return 0; | 203 return 0; |
204 ppapi::InputEventData data; | 204 InputEventData data; |
205 data.event_type = type; | 205 data.event_type = type; |
206 data.event_time_stamp = time_stamp; | 206 data.event_time_stamp = time_stamp; |
207 data.event_modifiers = modifiers; | 207 data.event_modifiers = modifiers; |
208 data.key_code = key_code; | 208 data.key_code = key_code; |
209 if (character_text.type == PP_VARTYPE_STRING) { | 209 if (character_text.type == PP_VARTYPE_STRING) { |
210 StringVar* text_str = StringVar::FromPPVar(character_text); | 210 StringVar* text_str = StringVar::FromPPVar(character_text); |
211 if (!text_str) | 211 if (!text_str) |
212 return 0; | 212 return 0; |
213 data.character_text = text_str->value(); | 213 data.character_text = text_str->value(); |
214 } | 214 } |
215 | 215 |
216 return (new InputEventImpl(InputEventImpl::InitAsProxy(), | 216 return (new PPB_InputEvent_Shared(PPB_InputEvent_Shared::InitAsProxy(), |
217 instance, data))->GetReference(); | 217 instance, data))->GetReference(); |
218 } | 218 } |
219 | 219 |
220 PP_Resource ResourceCreationProxy::CreateMouseInputEvent( | 220 PP_Resource ResourceCreationProxy::CreateMouseInputEvent( |
221 PP_Instance instance, | 221 PP_Instance instance, |
222 PP_InputEvent_Type type, | 222 PP_InputEvent_Type type, |
223 PP_TimeTicks time_stamp, | 223 PP_TimeTicks time_stamp, |
224 uint32_t modifiers, | 224 uint32_t modifiers, |
225 PP_InputEvent_MouseButton mouse_button, | 225 PP_InputEvent_MouseButton mouse_button, |
226 const PP_Point* mouse_position, | 226 const PP_Point* mouse_position, |
227 int32_t click_count, | 227 int32_t click_count, |
228 const PP_Point* mouse_movement) { | 228 const PP_Point* mouse_movement) { |
229 if (type != PP_INPUTEVENT_TYPE_MOUSEDOWN && | 229 if (type != PP_INPUTEVENT_TYPE_MOUSEDOWN && |
230 type != PP_INPUTEVENT_TYPE_MOUSEUP && | 230 type != PP_INPUTEVENT_TYPE_MOUSEUP && |
231 type != PP_INPUTEVENT_TYPE_MOUSEMOVE && | 231 type != PP_INPUTEVENT_TYPE_MOUSEMOVE && |
232 type != PP_INPUTEVENT_TYPE_MOUSEENTER && | 232 type != PP_INPUTEVENT_TYPE_MOUSEENTER && |
233 type != PP_INPUTEVENT_TYPE_MOUSELEAVE) | 233 type != PP_INPUTEVENT_TYPE_MOUSELEAVE) |
234 return 0; | 234 return 0; |
235 | 235 |
236 ppapi::InputEventData data; | 236 InputEventData data; |
237 data.event_type = type; | 237 data.event_type = type; |
238 data.event_time_stamp = time_stamp; | 238 data.event_time_stamp = time_stamp; |
239 data.event_modifiers = modifiers; | 239 data.event_modifiers = modifiers; |
240 data.mouse_button = mouse_button; | 240 data.mouse_button = mouse_button; |
241 data.mouse_position = *mouse_position; | 241 data.mouse_position = *mouse_position; |
242 data.mouse_click_count = click_count; | 242 data.mouse_click_count = click_count; |
243 data.mouse_movement = *mouse_movement; | 243 data.mouse_movement = *mouse_movement; |
244 | 244 |
245 return (new InputEventImpl(InputEventImpl::InitAsProxy(), | 245 return (new PPB_InputEvent_Shared(PPB_InputEvent_Shared::InitAsProxy(), |
246 instance, data))->GetReference(); | 246 instance, data))->GetReference(); |
247 } | 247 } |
248 | 248 |
249 PP_Resource ResourceCreationProxy::CreateGraphics3D( | 249 PP_Resource ResourceCreationProxy::CreateGraphics3D( |
250 PP_Instance instance, | 250 PP_Instance instance, |
251 PP_Resource share_context, | 251 PP_Resource share_context, |
252 const int32_t* attrib_list) { | 252 const int32_t* attrib_list) { |
253 return PPB_Graphics3D_Proxy::CreateProxyResource( | 253 return PPB_Graphics3D_Proxy::CreateProxyResource( |
254 instance, share_context, attrib_list); | 254 instance, share_context, attrib_list); |
255 } | 255 } |
256 | 256 |
(...skipping 29 matching lines...) Expand all Loading... |
286 return PPB_UDPSocket_Private_Proxy::CreateProxyResource(instance); | 286 return PPB_UDPSocket_Private_Proxy::CreateProxyResource(instance); |
287 } | 287 } |
288 | 288 |
289 PP_Resource ResourceCreationProxy::CreateURLLoader(PP_Instance instance) { | 289 PP_Resource ResourceCreationProxy::CreateURLLoader(PP_Instance instance) { |
290 return PPB_URLLoader_Proxy::CreateProxyResource(instance); | 290 return PPB_URLLoader_Proxy::CreateProxyResource(instance); |
291 } | 291 } |
292 | 292 |
293 PP_Resource ResourceCreationProxy::CreateURLRequestInfo( | 293 PP_Resource ResourceCreationProxy::CreateURLRequestInfo( |
294 PP_Instance instance, | 294 PP_Instance instance, |
295 const PPB_URLRequestInfo_Data& data) { | 295 const PPB_URLRequestInfo_Data& data) { |
296 return (new URLRequestInfoImpl( | 296 return (new PPB_URLRequestInfo_Shared( |
297 HostResource::MakeInstanceOnly(instance), data))->GetReference(); | 297 HostResource::MakeInstanceOnly(instance), data))->GetReference(); |
298 } | 298 } |
299 | 299 |
300 PP_Resource ResourceCreationProxy::CreateVideoCapture(PP_Instance instance) { | 300 PP_Resource ResourceCreationProxy::CreateVideoCapture(PP_Instance instance) { |
301 return PPB_VideoCapture_Proxy::CreateProxyResource(instance); | 301 return PPB_VideoCapture_Proxy::CreateProxyResource(instance); |
302 } | 302 } |
303 | 303 |
304 PP_Resource ResourceCreationProxy::CreateVideoDecoder( | 304 PP_Resource ResourceCreationProxy::CreateVideoDecoder( |
305 PP_Instance instance, | 305 PP_Instance instance, |
306 PP_Resource context3d_id, | 306 PP_Resource context3d_id, |
(...skipping 14 matching lines...) Expand all Loading... |
321 return 0; | 321 return 0; |
322 } | 322 } |
323 | 323 |
324 PP_Resource ResourceCreationProxy::CreateWheelInputEvent( | 324 PP_Resource ResourceCreationProxy::CreateWheelInputEvent( |
325 PP_Instance instance, | 325 PP_Instance instance, |
326 PP_TimeTicks time_stamp, | 326 PP_TimeTicks time_stamp, |
327 uint32_t modifiers, | 327 uint32_t modifiers, |
328 const PP_FloatPoint* wheel_delta, | 328 const PP_FloatPoint* wheel_delta, |
329 const PP_FloatPoint* wheel_ticks, | 329 const PP_FloatPoint* wheel_ticks, |
330 PP_Bool scroll_by_page) { | 330 PP_Bool scroll_by_page) { |
331 ppapi::InputEventData data; | 331 InputEventData data; |
332 data.event_type = PP_INPUTEVENT_TYPE_WHEEL; | 332 data.event_type = PP_INPUTEVENT_TYPE_WHEEL; |
333 data.event_time_stamp = time_stamp; | 333 data.event_time_stamp = time_stamp; |
334 data.event_modifiers = modifiers; | 334 data.event_modifiers = modifiers; |
335 data.wheel_delta = *wheel_delta; | 335 data.wheel_delta = *wheel_delta; |
336 data.wheel_ticks = *wheel_ticks; | 336 data.wheel_ticks = *wheel_ticks; |
337 data.wheel_scroll_by_page = PP_ToBool(scroll_by_page); | 337 data.wheel_scroll_by_page = PP_ToBool(scroll_by_page); |
338 | 338 |
339 return (new InputEventImpl(InputEventImpl::InitAsProxy(), | 339 return (new PPB_InputEvent_Shared(PPB_InputEvent_Shared::InitAsProxy(), |
340 instance, data))->GetReference(); | 340 instance, data))->GetReference(); |
341 } | 341 } |
342 | 342 |
343 bool ResourceCreationProxy::Send(IPC::Message* msg) { | 343 bool ResourceCreationProxy::Send(IPC::Message* msg) { |
344 return dispatcher()->Send(msg); | 344 return dispatcher()->Send(msg); |
345 } | 345 } |
346 | 346 |
347 bool ResourceCreationProxy::OnMessageReceived(const IPC::Message& msg) { | 347 bool ResourceCreationProxy::OnMessageReceived(const IPC::Message& msg) { |
348 bool handled = true; | 348 bool handled = true; |
349 IPC_BEGIN_MESSAGE_MAP(ResourceCreationProxy, msg) | 349 IPC_BEGIN_MESSAGE_MAP(ResourceCreationProxy, msg) |
350 IPC_MESSAGE_HANDLER(PpapiHostMsg_ResourceCreation_Graphics2D, | 350 IPC_MESSAGE_HANDLER(PpapiHostMsg_ResourceCreation_Graphics2D, |
351 OnMsgCreateGraphics2D) | 351 OnMsgCreateGraphics2D) |
352 IPC_MESSAGE_HANDLER(PpapiHostMsg_ResourceCreation_ImageData, | 352 IPC_MESSAGE_HANDLER(PpapiHostMsg_ResourceCreation_ImageData, |
353 OnMsgCreateImageData) | 353 OnMsgCreateImageData) |
354 IPC_MESSAGE_UNHANDLED(handled = false) | 354 IPC_MESSAGE_UNHANDLED(handled = false) |
355 IPC_END_MESSAGE_MAP() | 355 IPC_END_MESSAGE_MAP() |
356 return handled; | 356 return handled; |
357 } | 357 } |
358 | 358 |
359 void ResourceCreationProxy::OnMsgCreateGraphics2D(PP_Instance instance, | 359 void ResourceCreationProxy::OnMsgCreateGraphics2D(PP_Instance instance, |
360 const PP_Size& size, | 360 const PP_Size& size, |
361 PP_Bool is_always_opaque, | 361 PP_Bool is_always_opaque, |
362 HostResource* result) { | 362 HostResource* result) { |
363 ppapi::thunk::EnterFunction<ResourceCreationAPI> enter(instance, false); | 363 thunk::EnterFunction<ResourceCreationAPI> enter(instance, false); |
364 if (enter.succeeded()) { | 364 if (enter.succeeded()) { |
365 result->SetHostResource(instance, enter.functions()->CreateGraphics2D( | 365 result->SetHostResource(instance, enter.functions()->CreateGraphics2D( |
366 instance, size, is_always_opaque)); | 366 instance, size, is_always_opaque)); |
367 } | 367 } |
368 } | 368 } |
369 | 369 |
370 void ResourceCreationProxy::OnMsgCreateImageData( | 370 void ResourceCreationProxy::OnMsgCreateImageData( |
371 PP_Instance instance, | 371 PP_Instance instance, |
372 int32_t format, | 372 int32_t format, |
373 const PP_Size& size, | 373 const PP_Size& size, |
374 PP_Bool init_to_zero, | 374 PP_Bool init_to_zero, |
375 HostResource* result, | 375 HostResource* result, |
376 std::string* image_data_desc, | 376 std::string* image_data_desc, |
377 ImageHandle* result_image_handle) { | 377 ImageHandle* result_image_handle) { |
378 *result_image_handle = ImageData::NullHandle; | 378 *result_image_handle = ImageData::NullHandle; |
379 | 379 |
380 ppapi::thunk::EnterFunction<ResourceCreationAPI> enter(instance, false); | 380 thunk::EnterFunction<ResourceCreationAPI> enter(instance, false); |
381 if (enter.failed()) | 381 if (enter.failed()) |
382 return; | 382 return; |
383 | 383 |
384 PP_Resource resource = enter.functions()->CreateImageData( | 384 PP_Resource resource = enter.functions()->CreateImageData( |
385 instance, static_cast<PP_ImageDataFormat>(format), size, init_to_zero); | 385 instance, static_cast<PP_ImageDataFormat>(format), size, init_to_zero); |
386 if (!resource) | 386 if (!resource) |
387 return; | 387 return; |
388 result->SetHostResource(instance, resource); | 388 result->SetHostResource(instance, resource); |
389 | 389 |
390 // Get the description, it's just serialized as a string. | 390 // Get the description, it's just serialized as a string. |
391 ppapi::thunk::EnterResourceNoLock<ppapi::thunk::PPB_ImageData_API> | 391 thunk::EnterResourceNoLock<thunk::PPB_ImageData_API> enter_resource( |
392 enter_resource(resource, false); | 392 resource, false); |
393 PP_ImageDataDesc desc; | 393 PP_ImageDataDesc desc; |
394 if (enter_resource.object()->Describe(&desc) == PP_TRUE) { | 394 if (enter_resource.object()->Describe(&desc) == PP_TRUE) { |
395 image_data_desc->resize(sizeof(PP_ImageDataDesc)); | 395 image_data_desc->resize(sizeof(PP_ImageDataDesc)); |
396 memcpy(&(*image_data_desc)[0], &desc, sizeof(PP_ImageDataDesc)); | 396 memcpy(&(*image_data_desc)[0], &desc, sizeof(PP_ImageDataDesc)); |
397 } | 397 } |
398 | 398 |
399 // Get the shared memory handle. | 399 // Get the shared memory handle. |
400 const PPB_ImageDataTrusted* trusted = | 400 const PPB_ImageDataTrusted* trusted = |
401 reinterpret_cast<const PPB_ImageDataTrusted*>( | 401 reinterpret_cast<const PPB_ImageDataTrusted*>( |
402 dispatcher()->local_get_interface()(PPB_IMAGEDATA_TRUSTED_INTERFACE)); | 402 dispatcher()->local_get_interface()(PPB_IMAGEDATA_TRUSTED_INTERFACE)); |
403 uint32_t byte_count = 0; | 403 uint32_t byte_count = 0; |
404 if (trusted) { | 404 if (trusted) { |
405 int32_t handle; | 405 int32_t handle; |
406 if (trusted->GetSharedMemory(resource, &handle, &byte_count) == PP_OK) { | 406 if (trusted->GetSharedMemory(resource, &handle, &byte_count) == PP_OK) { |
407 #if defined(OS_WIN) | 407 #if defined(OS_WIN) |
408 ImageHandle ih = ImageData::HandleFromInt(handle); | 408 ImageHandle ih = ImageData::HandleFromInt(handle); |
409 *result_image_handle = dispatcher()->ShareHandleWithRemote(ih, false); | 409 *result_image_handle = dispatcher()->ShareHandleWithRemote(ih, false); |
410 #else | 410 #else |
411 *result_image_handle = ImageData::HandleFromInt(handle); | 411 *result_image_handle = ImageData::HandleFromInt(handle); |
412 #endif | 412 #endif |
413 } | 413 } |
414 } | 414 } |
415 } | 415 } |
416 | 416 |
417 } // namespace proxy | 417 } // namespace proxy |
418 } // namespace ppapi | 418 } // namespace ppapi |
OLD | NEW |