15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/pepper_in_process_resource_creation.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 1158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/child/browser_font_resource_trusted.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/pepper_in_process_router.h" 1358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/renderer/pepper/pepper_plugin_instance_impl.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/renderer_ppapi_host_impl.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/render_view_impl.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message_macros.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/ppapi_host.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/file_chooser_resource.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/file_io_resource.h" 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/proxy/file_ref_resource.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/file_system_resource.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/graphics_2d_resource.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/printing_resource.h" 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/proxy/url_loader_resource.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/url_request_info_resource.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/url_response_info_resource.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/websocket_resource.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_globals.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_permissions.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/resource_tracker.h" 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/shared_impl/var.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note that the code in the creation functions in this file should generally 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be the same as that in ppapi/proxy/resource_creation_proxy.cc. See 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// pepper_in_process_resource_creation.h for what this file is for. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PepperInProcessResourceCreation -------------------------------------------- 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperInProcessResourceCreation::PepperInProcessResourceCreation( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererPpapiHostImpl* host_impl, 4558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch PepperPluginInstanceImpl* instance) 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch : ResourceCreationImpl(instance), host_impl_(host_impl) {} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochPepperInProcessResourceCreation::~PepperInProcessResourceCreation() {} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateBrowserFont( 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Instance instance, 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_BrowserFont_Trusted_Description* description) { 5358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch if (!BrowserFontResource_Trusted::IsPPFontDescriptionValid(*description)) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ppapi::Preferences prefs( 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_impl_->GetRenderViewForInstance(instance)->GetWebkitPreferences()); 5758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch return (new BrowserFontResource_Trusted( 58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch *description, 61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch prefs))->GetReference(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateFileChooser( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FileChooserMode_Dev mode, 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PP_Var& accept_types) { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<ppapi::StringVar> string_var = 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ppapi::StringVar::FromPPVar(accept_types); 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string str = string_var.get() ? string_var->value() : std::string(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (new ppapi::proxy::FileChooserResource( 72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch mode, 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch str.c_str()))->GetReference(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateFileIO( 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Instance instance) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return (new ppapi::proxy::FileIOResource( 81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance))->GetReference(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateFileRef( 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) PP_Instance instance, 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const ppapi::FileRefCreateInfo& create_info) { 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return ppapi::proxy::FileRefResource::CreateFileRef( 89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) host_impl_->in_process_router()->GetPluginConnection(instance), 90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) instance, 91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) create_info); 92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateFileSystem( 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Instance instance, 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_FileSystemType type) { 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return (new ppapi::proxy::FileSystemResource( 98a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 99a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 100a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch type))->GetReference(); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateGraphics2D( 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Instance instance, 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PP_Size* size, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Bool is_always_opaque) { 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return (new ppapi::proxy::Graphics2DResource( 108a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 109a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 110a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch *size, 111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch is_always_opaque))->GetReference(); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreatePrinting( 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (new ppapi::proxy::PrintingResource( 117a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 118a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance))->GetReference(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateTrueTypeFont( 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Instance instance, 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PP_TrueTypeFontDesc_Dev* desc) { 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTIMPLEMENTED(); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateURLLoader( 12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PP_Instance instance) { 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return (new ppapi::proxy::URLLoaderResource( 131a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance))->GetReference(); 13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateURLRequestInfo( 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Instance instance) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (new ppapi::proxy::URLRequestInfoResource( 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 140a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ppapi::URLRequestInfoData()))->GetReference(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateWebSocket( 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (new ppapi::proxy::WebSocketResource( 146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_impl_->in_process_router()->GetPluginConnection(instance), 147a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance))->GetReference(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 151