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/content_renderer_pepper_host_factory.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/common/content_client.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/renderer/content_renderer_client.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/pepper_audio_input_host.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/renderer/pepper/pepper_compositor_host.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/pepper_file_chooser_host.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/renderer/pepper/pepper_file_ref_renderer_host.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/renderer/pepper/pepper_file_system_host.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/pepper/pepper_graphics_2d_host.h" 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/renderer/pepper/pepper_media_stream_video_track_host.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/renderer/pepper/pepper_plugin_instance_impl.h" 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/renderer/pepper/pepper_url_loader_host.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/pepper/pepper_video_capture_host.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/renderer/pepper/pepper_video_decoder_host.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/renderer/pepper/pepper_video_destination_host.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/renderer/pepper/pepper_video_source_host.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/pepper_websocket_host.h" 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/renderer/pepper/ppb_image_data_impl.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/renderer_ppapi_host_impl.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/resource_host.h" 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/ppapi_message_utils.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/serialized_structs.h" 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ppapi/shared_impl/ppb_image_data_shared.h" 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/platform/WebURL.h" 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/web/WebDocument.h" 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/web/WebElement.h" 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/web/WebPluginContainer.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::host::ResourceHost; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using ppapi::UnpackMessage; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content { 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace { 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_WEBRTC) 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool CanUseMediaStreamAPI(const RendererPpapiHost* host, PP_Instance instance) { 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPluginContainer* container = 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->GetContainerForInstance(instance); 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!container) 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL document_url = container->element().document().url(); 5258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch ContentRendererClient* content_renderer_client = 5358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch GetContentClient()->renderer(); 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return content_renderer_client->AllowPepperMediaStreamAPI(document_url); 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // defined(ENABLE_WEBRTC) 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool CanUseCompositorAPI(const RendererPpapiHost* host, PP_Instance instance) { 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebPluginContainer* container = 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch host->GetContainerForInstance(instance); 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!container) 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GURL document_url = container->element().document().url(); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentRendererClient* content_renderer_client = 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetContentClient()->renderer(); 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return content_renderer_client->IsPluginAllowedToUseCompositorAPI( 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch document_url); 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool CanUseVideoDecodeAPI(const RendererPpapiHost* host, PP_Instance instance) { 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebPluginContainer* container = 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch host->GetContainerForInstance(instance); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!container) 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GURL document_url = container->element().document().url(); 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentRendererClient* content_renderer_client = 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetContentClient()->renderer(); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return content_renderer_client->IsPluginAllowedToUseVideoDecodeAPI( 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch document_url); 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentRendererPepperHostFactory::ContentRendererPepperHostFactory( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererPpapiHostImpl* host) 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch : host_(host) {} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 90a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochContentRendererPepperHostFactory::~ContentRendererPepperHostFactory() {} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_ptr<ResourceHost> ContentRendererPepperHostFactory::CreateResourceHost( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::host::PpapiHost* host, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::proxy::ResourceMessageCallParams& params, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& message) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(host == host_->GetPpapiHost()); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the plugin is giving us a valid instance for this resource. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!host_->IsValidInstance(instance)) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PepperPluginInstanceImpl* instance_impl = 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host_->GetPluginInstanceImpl(instance); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!instance_impl->render_frame()) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Public interfaces. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (message.type()) { 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case PpapiHostMsg_Compositor_Create::ID: { 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!CanUseCompositorAPI(host_, instance)) 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scoped_ptr<ResourceHost>(); 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scoped_ptr<ResourceHost>( 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new PepperCompositorHost(host_, instance, params.pp_resource())); 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 116a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch case PpapiHostMsg_FileRef_CreateForFileAPI::ID: { 117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) PP_Resource file_system; 118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::string internal_path; 119a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!UnpackMessage<PpapiHostMsg_FileRef_CreateForFileAPI>( 120a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message, &file_system, &internal_path)) { 121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NOTREACHED(); 122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return scoped_ptr<ResourceHost>(); 123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return scoped_ptr<ResourceHost>(new PepperFileRefRendererHost( 125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) host_, instance, params.pp_resource(), file_system, internal_path)); 126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case PpapiHostMsg_FileSystem_Create::ID: { 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_FileSystemType file_system_type; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!UnpackMessage<PpapiHostMsg_FileSystem_Create>(message, 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &file_system_type)) { 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return scoped_ptr<ResourceHost>(); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return scoped_ptr<ResourceHost>(new PepperFileSystemHost( 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host_, instance, params.pp_resource(), file_system_type)); 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case PpapiHostMsg_Graphics2D_Create::ID: { 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Size size; 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Bool is_always_opaque; 140a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!UnpackMessage<PpapiHostMsg_Graphics2D_Create>( 141a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message, &size, &is_always_opaque)) { 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<ResourceHost>(); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<PPB_ImageData_Impl> image_data(new PPB_ImageData_Impl( 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) instance, ppapi::PPB_ImageData_Shared::PLATFORM)); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<ResourceHost>( 148a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch PepperGraphics2DHost::Create(host_, 149a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 150a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch params.pp_resource(), 151a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch size, 152a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch is_always_opaque, 153a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch image_data)); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case PpapiHostMsg_URLLoader_Create::ID: 15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return scoped_ptr<ResourceHost>(new PepperURLLoaderHost( 15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host_, false, instance, params.pp_resource())); 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case PpapiHostMsg_VideoDecoder_Create::ID: { 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!CanUseVideoDecodeAPI(host_, instance)) 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return scoped_ptr<ResourceHost>(); 16146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return scoped_ptr<ResourceHost>( 16246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) new PepperVideoDecoderHost(host_, instance, params.pp_resource())); 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PpapiHostMsg_WebSocket_Create::ID: 165a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 166a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperWebSocketHost(host_, instance, params.pp_resource())); 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(ENABLE_WEBRTC) 168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case PpapiHostMsg_MediaStreamVideoTrack_Create::ID: 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return scoped_ptr<ResourceHost>(new PepperMediaStreamVideoTrackHost( 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) host_, instance, params.pp_resource())); 171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // These private MediaStream interfaces are exposed as if they were public 172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // so they can be used by NaCl plugins. However, they are available only 173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // for whitelisted apps. 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PpapiHostMsg_VideoDestination_Create::ID: 175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (CanUseMediaStreamAPI(host_, instance)) 176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return scoped_ptr<ResourceHost>(new PepperVideoDestinationHost( 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_, instance, params.pp_resource())); 178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PpapiHostMsg_VideoSource_Create::ID: 179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (CanUseMediaStreamAPI(host_, instance)) 180a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 181a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperVideoSourceHost(host_, instance, params.pp_resource())); 182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // defined(ENABLE_WEBRTC) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Dev interfaces. 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (GetPermissions().HasPermission(ppapi::PERMISSION_DEV)) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (message.type()) { 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PpapiHostMsg_AudioInput_Create::ID: 189a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 190a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperAudioInputHost(host_, instance, params.pp_resource())); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PpapiHostMsg_FileChooser_Create::ID: 192a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 193a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperFileChooserHost(host_, instance, params.pp_resource())); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case PpapiHostMsg_VideoCapture_Create::ID: { 195a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch PepperVideoCaptureHost* host = 196a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperVideoCaptureHost(host_, instance, params.pp_resource()); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!host->Init()) { 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete host; 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<ResourceHost>(); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<ResourceHost>(host); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ppapi::PpapiPermissions& 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentRendererPepperHostFactory::GetPermissions() const { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host_->GetPpapiHost()->permissions(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 215