| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "webkit/plugins/ppapi/resource_creation_impl.h" |
| |
| #include "ppapi/c/pp_size.h" |
| #include "ppapi/shared_impl/ppb_audio_config_shared.h" |
| #include "ppapi/shared_impl/private/ppb_browser_font_trusted_shared.h" |
| #include "ppapi/shared_impl/ppb_input_event_shared.h" |
| #include "ppapi/shared_impl/ppb_resource_array_shared.h" |
| #include "ppapi/shared_impl/var.h" |
| #include "webkit/plugins/ppapi/common.h" |
| #include "webkit/plugins/ppapi/ppb_audio_impl.h" |
| #include "webkit/plugins/ppapi/ppb_audio_input_impl.h" |
| #include "webkit/plugins/ppapi/ppb_broker_impl.h" |
| #include "webkit/plugins/ppapi/ppb_buffer_impl.h" |
| #include "webkit/plugins/ppapi/ppb_directory_reader_impl.h" |
| #include "webkit/plugins/ppapi/ppb_file_chooser_impl.h" |
| #include "webkit/plugins/ppapi/ppb_file_io_impl.h" |
| #include "webkit/plugins/ppapi/ppb_file_ref_impl.h" |
| #include "webkit/plugins/ppapi/ppb_file_system_impl.h" |
| #include "webkit/plugins/ppapi/ppb_flash_menu_impl.h" |
| #include "webkit/plugins/ppapi/ppb_flash_message_loop_impl.h" |
| #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" |
| #include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h" |
| #include "webkit/plugins/ppapi/ppb_host_resolver_private_impl.h" |
| #include "webkit/plugins/ppapi/ppb_image_data_impl.h" |
| #include "webkit/plugins/ppapi/ppb_network_monitor_private_impl.h" |
| #include "webkit/plugins/ppapi/ppb_scrollbar_impl.h" |
| #include "webkit/plugins/ppapi/ppb_tcp_server_socket_private_impl.h" |
| #include "webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h" |
| #include "webkit/plugins/ppapi/ppb_udp_socket_private_impl.h" |
| #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" |
| #include "webkit/plugins/ppapi/ppb_url_request_info_impl.h" |
| #include "webkit/plugins/ppapi/ppb_video_capture_impl.h" |
| #include "webkit/plugins/ppapi/ppb_video_decoder_impl.h" |
| #include "webkit/plugins/ppapi/ppb_video_layer_impl.h" |
| #include "webkit/plugins/ppapi/ppb_websocket_impl.h" |
| #include "webkit/plugins/ppapi/ppb_x509_certificate_private_impl.h" |
| #include "webkit/plugins/ppapi/resource_helper.h" |
| |
| using ppapi::InputEventData; |
| using ppapi::PPB_InputEvent_Shared; |
| using ppapi::PPB_ResourceArray_Shared; |
| using ppapi::StringVar; |
| |
| namespace webkit { |
| namespace ppapi { |
| |
| ResourceCreationImpl::ResourceCreationImpl(PluginInstance* instance) { |
| } |
| |
| ResourceCreationImpl::~ResourceCreationImpl() { |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateAudio( |
| PP_Instance instance, |
| PP_Resource config_id, |
| PPB_Audio_Callback audio_callback, |
| void* user_data) { |
| return PPB_Audio_Impl::Create(instance, config_id, audio_callback, |
| user_data); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateAudioConfig( |
| PP_Instance instance, |
| PP_AudioSampleRate sample_rate, |
| uint32_t sample_frame_count) { |
| return ::ppapi::PPB_AudioConfig_Shared::Create( |
| ::ppapi::OBJECT_IS_IMPL, instance, sample_rate, sample_frame_count); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateAudioTrusted( |
| PP_Instance instance) { |
| return (new PPB_Audio_Impl(instance))->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateAudioInput0_1( |
| PP_Instance instance, |
| PP_Resource config_id, |
| PPB_AudioInput_Callback audio_input_callback, |
| void* user_data) { |
| return PPB_AudioInput_Impl::Create0_1(instance, config_id, |
| audio_input_callback, user_data); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateAudioInput(PP_Instance instance) { |
| return (new PPB_AudioInput_Impl(instance))->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateBroker(PP_Instance instance) { |
| return (new PPB_Broker_Impl(instance))->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateBrowserFont( |
| PP_Instance instance, |
| const PP_BrowserFont_Trusted_Description* description) { |
| PluginInstance* plugin_instance = |
| ResourceHelper::PPInstanceToPluginInstance(instance); |
| if (!plugin_instance) |
| return 0; |
| return ::ppapi::PPB_BrowserFont_Trusted_Shared::Create( |
| ::ppapi::OBJECT_IS_IMPL, instance, *description, |
| plugin_instance->delegate()->GetPreferences()); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateBuffer(PP_Instance instance, |
| uint32_t size) { |
| return PPB_Buffer_Impl::Create(instance, size); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateDirectoryReader( |
| PP_Resource directory_ref) { |
| return PPB_DirectoryReader_Impl::Create(directory_ref); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateFileChooser( |
| PP_Instance instance, |
| PP_FileChooserMode_Dev mode, |
| const char* accept_types) { |
| return PPB_FileChooser_Impl::Create(instance, mode, accept_types); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateFileIO(PP_Instance instance) { |
| return (new PPB_FileIO_Impl(instance))->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateFileRef(PP_Resource file_system, |
| const char* path) { |
| PPB_FileRef_Impl* res = PPB_FileRef_Impl::CreateInternal(file_system, path); |
| return res ? res->GetReference() : 0; |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateFileSystem( |
| PP_Instance instance, |
| PP_FileSystemType type) { |
| return PPB_FileSystem_Impl::Create(instance, type); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateFlashDeviceID(PP_Instance instance) { |
| return 0; // Not supported in-process. |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateFlashMenu( |
| PP_Instance instance, |
| const PP_Flash_Menu* menu_data) { |
| return PPB_Flash_Menu_Impl::Create(instance, menu_data); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateFlashMessageLoop(PP_Instance instance) { |
| return PPB_Flash_MessageLoop_Impl::Create(instance); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateGraphics2D( |
| PP_Instance instance, |
| const PP_Size& size, |
| PP_Bool is_always_opaque) { |
| return PPB_Graphics2D_Impl::Create(instance, size, is_always_opaque); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateGraphics3D( |
| PP_Instance instance, |
| PP_Resource share_context, |
| const int32_t* attrib_list) { |
| return PPB_Graphics3D_Impl::Create(instance, share_context, attrib_list); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateGraphics3DRaw( |
| PP_Instance instance, |
| PP_Resource share_context, |
| const int32_t* attrib_list) { |
| return PPB_Graphics3D_Impl::CreateRaw(instance, share_context, attrib_list); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateHostResolverPrivate( |
| PP_Instance instance) { |
| return (new PPB_HostResolver_Private_Impl(instance))->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateImageData(PP_Instance instance, |
| PP_ImageDataFormat format, |
| const PP_Size& size, |
| PP_Bool init_to_zero) { |
| return PPB_ImageData_Impl::Create(instance, format, size, init_to_zero); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateIMEInputEvent( |
| PP_Instance instance, |
| PP_InputEvent_Type type, |
| PP_TimeTicks time_stamp, |
| struct PP_Var text, |
| uint32_t segment_number, |
| const uint32_t* segment_offsets, |
| int32_t target_segment, |
| uint32_t selection_start, |
| uint32_t selection_end) { |
| return PPB_InputEvent_Shared::CreateIMEInputEvent( |
| ::ppapi::OBJECT_IS_IMPL, instance, type, time_stamp, text, segment_number, |
| segment_offsets, target_segment, selection_start, selection_end); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateKeyboardInputEvent( |
| PP_Instance instance, |
| PP_InputEvent_Type type, |
| PP_TimeTicks time_stamp, |
| uint32_t modifiers, |
| uint32_t key_code, |
| struct PP_Var character_text) { |
| return PPB_InputEvent_Shared::CreateKeyboardInputEvent( |
| ::ppapi::OBJECT_IS_IMPL, instance, type, time_stamp, modifiers, key_code, |
| character_text); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateMouseInputEvent( |
| PP_Instance instance, |
| PP_InputEvent_Type type, |
| PP_TimeTicks time_stamp, |
| uint32_t modifiers, |
| PP_InputEvent_MouseButton mouse_button, |
| const PP_Point* mouse_position, |
| int32_t click_count, |
| const PP_Point* mouse_movement) { |
| return PPB_InputEvent_Shared::CreateMouseInputEvent( |
| ::ppapi::OBJECT_IS_IMPL, instance, type, time_stamp, modifiers, |
| mouse_button, mouse_position, click_count, mouse_movement); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateNetworkMonitor( |
| PP_Instance instance, |
| PPB_NetworkMonitor_Callback callback, |
| void* user_data) { |
| return PPB_NetworkMonitor_Private_Impl::Create(instance, callback, user_data); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateScrollbar(PP_Instance instance, |
| PP_Bool vertical) { |
| return PPB_Scrollbar_Impl::Create(instance, PP_ToBool(vertical)); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateTalk(PP_Instance /* instance */) { |
| // Not implemented in-process. |
| return 0; |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateResourceArray( |
| PP_Instance instance, |
| const PP_Resource elements[], |
| uint32_t size) { |
| PPB_ResourceArray_Shared* object = new PPB_ResourceArray_Shared( |
| ::ppapi::OBJECT_IS_IMPL, instance, elements, size); |
| return object->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateTCPServerSocketPrivate( |
| PP_Instance instance) { |
| return PPB_TCPServerSocket_Private_Impl::CreateResource(instance); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateTCPSocketPrivate(PP_Instance instance) { |
| return PPB_TCPSocket_Private_Impl::CreateResource(instance); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateUDPSocketPrivate(PP_Instance instance) { |
| return PPB_UDPSocket_Private_Impl::CreateResource(instance); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateURLLoader(PP_Instance instance) { |
| return (new PPB_URLLoader_Impl(instance, false))->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateURLRequestInfo( |
| PP_Instance instance, |
| const ::ppapi::PPB_URLRequestInfo_Data& data) { |
| return (new PPB_URLRequestInfo_Impl(instance, data))->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateVideoCapture(PP_Instance instance) { |
| scoped_refptr<PPB_VideoCapture_Impl> video_capture = |
| new PPB_VideoCapture_Impl(instance); |
| if (!video_capture->Init()) |
| return 0; |
| return video_capture->GetReference(); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateVideoDecoder( |
| PP_Instance instance, |
| PP_Resource graphics3d_id, |
| PP_VideoDecoder_Profile profile) { |
| return PPB_VideoDecoder_Impl::Create(instance, graphics3d_id, profile); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateVideoLayer(PP_Instance instance, |
| PP_VideoLayerMode_Dev mode) { |
| return PPB_VideoLayer_Impl::Create(instance, mode); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateWebSocket(PP_Instance instance) { |
| return PPB_WebSocket_Impl::Create(instance); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateWheelInputEvent( |
| PP_Instance instance, |
| PP_TimeTicks time_stamp, |
| uint32_t modifiers, |
| const PP_FloatPoint* wheel_delta, |
| const PP_FloatPoint* wheel_ticks, |
| PP_Bool scroll_by_page) { |
| return PPB_InputEvent_Shared::CreateWheelInputEvent( |
| ::ppapi::OBJECT_IS_IMPL, instance, time_stamp, modifiers, |
| wheel_delta, wheel_ticks, scroll_by_page); |
| } |
| |
| PP_Resource ResourceCreationImpl::CreateX509CertificatePrivate( |
| PP_Instance instance) { |
| return PPB_X509Certificate_Private_Impl::CreateResource(instance); |
| } |
| |
| } // namespace ppapi |
| } // namespace webkit |