1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/renderer/pepper/pepper_in_process_resource_creation.h" 6 7 #include "base/bind.h" 8 #include "base/logging.h" 9 #include "base/memory/weak_ptr.h" 10 #include "base/message_loop/message_loop.h" 11 #include "content/child/browser_font_resource_trusted.h" 12 #include "content/renderer/pepper/pepper_in_process_router.h" 13 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 14 #include "content/renderer/pepper/ppapi_preferences_builder.h" 15 #include "content/renderer/pepper/renderer_ppapi_host_impl.h" 16 #include "content/renderer/render_view_impl.h" 17 #include "ipc/ipc_message.h" 18 #include "ipc/ipc_message_macros.h" 19 #include "ppapi/host/ppapi_host.h" 20 #include "ppapi/proxy/file_chooser_resource.h" 21 #include "ppapi/proxy/file_io_resource.h" 22 #include "ppapi/proxy/file_ref_resource.h" 23 #include "ppapi/proxy/file_system_resource.h" 24 #include "ppapi/proxy/graphics_2d_resource.h" 25 #include "ppapi/proxy/ppapi_messages.h" 26 #include "ppapi/proxy/printing_resource.h" 27 #include "ppapi/proxy/url_loader_resource.h" 28 #include "ppapi/proxy/url_request_info_resource.h" 29 #include "ppapi/proxy/url_response_info_resource.h" 30 #include "ppapi/proxy/websocket_resource.h" 31 #include "ppapi/shared_impl/ppapi_globals.h" 32 #include "ppapi/shared_impl/ppapi_permissions.h" 33 #include "ppapi/shared_impl/resource_tracker.h" 34 #include "ppapi/shared_impl/var.h" 35 36 // Note that the code in the creation functions in this file should generally 37 // be the same as that in ppapi/proxy/resource_creation_proxy.cc. See 38 // pepper_in_process_resource_creation.h for what this file is for. 39 40 namespace content { 41 42 // PepperInProcessResourceCreation -------------------------------------------- 43 44 PepperInProcessResourceCreation::PepperInProcessResourceCreation( 45 RendererPpapiHostImpl* host_impl, 46 PepperPluginInstanceImpl* instance) 47 : ResourceCreationImpl(instance), host_impl_(host_impl) {} 48 49 PepperInProcessResourceCreation::~PepperInProcessResourceCreation() {} 50 51 PP_Resource PepperInProcessResourceCreation::CreateBrowserFont( 52 PP_Instance instance, 53 const PP_BrowserFont_Trusted_Description* description) { 54 if (!BrowserFontResource_Trusted::IsPPFontDescriptionValid(*description)) 55 return 0; 56 ppapi::Preferences prefs(PpapiPreferencesBuilder::Build( 57 host_impl_->GetRenderViewForInstance(instance)->GetWebkitPreferences())); 58 return (new BrowserFontResource_Trusted( 59 host_impl_->in_process_router()->GetPluginConnection(instance), 60 instance, 61 *description, 62 prefs))->GetReference(); 63 } 64 65 PP_Resource PepperInProcessResourceCreation::CreateFileChooser( 66 PP_Instance instance, 67 PP_FileChooserMode_Dev mode, 68 const PP_Var& accept_types) { 69 scoped_refptr<ppapi::StringVar> string_var = 70 ppapi::StringVar::FromPPVar(accept_types); 71 std::string str = string_var.get() ? string_var->value() : std::string(); 72 return (new ppapi::proxy::FileChooserResource( 73 host_impl_->in_process_router()->GetPluginConnection(instance), 74 instance, 75 mode, 76 str.c_str()))->GetReference(); 77 } 78 79 PP_Resource PepperInProcessResourceCreation::CreateFileIO( 80 PP_Instance instance) { 81 return (new ppapi::proxy::FileIOResource( 82 host_impl_->in_process_router()->GetPluginConnection(instance), 83 instance))->GetReference(); 84 } 85 86 PP_Resource PepperInProcessResourceCreation::CreateFileRef( 87 PP_Instance instance, 88 const ppapi::FileRefCreateInfo& create_info) { 89 return ppapi::proxy::FileRefResource::CreateFileRef( 90 host_impl_->in_process_router()->GetPluginConnection(instance), 91 instance, 92 create_info); 93 } 94 95 PP_Resource PepperInProcessResourceCreation::CreateFileSystem( 96 PP_Instance instance, 97 PP_FileSystemType type) { 98 return (new ppapi::proxy::FileSystemResource( 99 host_impl_->in_process_router()->GetPluginConnection(instance), 100 instance, 101 type))->GetReference(); 102 } 103 104 PP_Resource PepperInProcessResourceCreation::CreateGraphics2D( 105 PP_Instance instance, 106 const PP_Size* size, 107 PP_Bool is_always_opaque) { 108 return (new ppapi::proxy::Graphics2DResource( 109 host_impl_->in_process_router()->GetPluginConnection(instance), 110 instance, 111 *size, 112 is_always_opaque))->GetReference(); 113 } 114 115 PP_Resource PepperInProcessResourceCreation::CreatePrinting( 116 PP_Instance instance) { 117 return (new ppapi::proxy::PrintingResource( 118 host_impl_->in_process_router()->GetPluginConnection(instance), 119 instance))->GetReference(); 120 } 121 122 PP_Resource PepperInProcessResourceCreation::CreateTrueTypeFont( 123 PP_Instance instance, 124 const PP_TrueTypeFontDesc_Dev* desc) { 125 NOTIMPLEMENTED(); 126 return 0; 127 } 128 129 PP_Resource PepperInProcessResourceCreation::CreateURLLoader( 130 PP_Instance instance) { 131 return (new ppapi::proxy::URLLoaderResource( 132 host_impl_->in_process_router()->GetPluginConnection(instance), 133 instance))->GetReference(); 134 } 135 136 PP_Resource PepperInProcessResourceCreation::CreateURLRequestInfo( 137 PP_Instance instance) { 138 return (new ppapi::proxy::URLRequestInfoResource( 139 host_impl_->in_process_router()->GetPluginConnection(instance), 140 instance, 141 ppapi::URLRequestInfoData()))->GetReference(); 142 } 143 144 PP_Resource PepperInProcessResourceCreation::CreateWebSocket( 145 PP_Instance instance) { 146 return (new ppapi::proxy::WebSocketResource( 147 host_impl_->in_process_router()->GetPluginConnection(instance), 148 instance))->GetReference(); 149 } 150 151 } // namespace content 152