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/browser/renderer_host/pepper/content_browser_pepper_host_factory.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.h" 90f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_file_io_host.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_file_ref_host.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_file_system_browser_host.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_flash_file_message_filter.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_gamepad_host.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h" 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_network_monitor_host.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/renderer_host/pepper/pepper_network_proxy_host.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_print_settings_manager.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_printing_host.h" 192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h" 20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/host/message_filter_host.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/host/ppapi_host.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/resource_host.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/shared_impl/ppapi_permissions.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ppapi::host::MessageFilterHost; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::host::ResourceHost; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ppapi::host::ResourceMessageFilter; 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using ppapi::UnpackMessage; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochnamespace { 372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst size_t kMaxSocketsAllowed = 1024; 392385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochbool CanCreateSocket() { 41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return PepperTCPServerSocketMessageFilter::GetNumInstances() + 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch PepperTCPSocketMessageFilter::GetNumInstances() + 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch PepperUDPSocketMessageFilter::GetNumInstances() < 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kMaxSocketsAllowed; 452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} // namespace 482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentBrowserPepperHostFactory::ContentBrowserPepperHostFactory( 50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) BrowserPpapiHostImpl* host) 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch : host_(host) {} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochContentBrowserPepperHostFactory::~ContentBrowserPepperHostFactory() {} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::host::PpapiHost* host, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::proxy::ResourceMessageCallParams& params, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& message) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(host == host_->GetPpapiHost()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the plugin is giving us a valid instance for this resource. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!host_->IsValidInstance(instance)) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Public interfaces. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (message.type()) { 680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) case PpapiHostMsg_FileIO_Create::ID: { 69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperFileIOHost(host_, instance, params.pp_resource())); 710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case PpapiHostMsg_FileSystem_Create::ID: { 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_FileSystemType file_system_type; 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!ppapi::UnpackMessage<PpapiHostMsg_FileSystem_Create>( 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message, &file_system_type)) { 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NOTREACHED(); 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return scoped_ptr<ResourceHost>(new PepperFileSystemBrowserHost( 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) host_, instance, params.pp_resource(), file_system_type)); 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PpapiHostMsg_Gamepad_Create::ID: { 83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperGamepadHost(host_, instance, params.pp_resource())); 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PpapiHostMsg_NetworkProxy_Create::ID: { 87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperNetworkProxyHost(host_, instance, params.pp_resource())); 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PpapiHostMsg_HostResolver_Create::ID: { 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<ResourceMessageFilter> host_resolver( 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new PepperHostResolverMessageFilter(host_, instance, false)); 93a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 94a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new MessageFilterHost(host_->GetPpapiHost(), 95a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 96a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch params.pp_resource(), 97a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_resolver)); 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 99a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch case PpapiHostMsg_FileRef_CreateForFileAPI::ID: { 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Resource file_system; 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string internal_path; 102a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!UnpackMessage<PpapiHostMsg_FileRef_CreateForFileAPI>( 103a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message, &file_system, &internal_path)) { 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NOTREACHED(); 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return scoped_ptr<ResourceHost>(new PepperFileRefHost( 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) host_, instance, params.pp_resource(), file_system, internal_path)); 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case PpapiHostMsg_TCPSocket_Create::ID: { 11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ppapi::TCPSocketVersion version; 11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!UnpackMessage<PpapiHostMsg_TCPSocket_Create>(message, &version) || 11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) version == ppapi::TCP_SOCKET_VERSION_PRIVATE) { 114424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 115424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return CreateNewTCPSocket(instance, params.pp_resource(), version); 118424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case PpapiHostMsg_UDPSocket_Create::ID: { 1202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (CanCreateSocket()) { 1212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch scoped_refptr<ResourceMessageFilter> udp_socket( 1222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch new PepperUDPSocketMessageFilter(host_, instance, false)); 1232385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return scoped_ptr<ResourceHost>(new MessageFilterHost( 1242385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch host_->GetPpapiHost(), instance, params.pp_resource(), udp_socket)); 1252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } else { 1262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return scoped_ptr<ResourceHost>(); 1272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Dev interfaces. 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (GetPermissions().HasPermission(ppapi::PERMISSION_DEV)) { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (message.type()) { 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case PpapiHostMsg_Printing_Create::ID: { 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<PepperPrintSettingsManager> manager( 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new PepperPrintSettingsManagerImpl()); 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperPrintingHost(host_->GetPpapiHost(), 139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 140a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch params.pp_resource(), 141a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch manager.Pass())); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case PpapiHostMsg_TrueTypeFontSingleton_Create::ID: { 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<ResourceHost>(new PepperTrueTypeFontListHost( 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_, instance, params.pp_resource())); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Private interfaces. 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (GetPermissions().HasPermission(ppapi::PERMISSION_PRIVATE)) { 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (message.type()) { 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case PpapiHostMsg_BrowserFontSingleton_Create::ID: 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<ResourceHost>(new PepperBrowserFontSingletonHost( 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_, instance, params.pp_resource())); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Permissions for the following interfaces will be checked at the 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // time of the corresponding instance's methods calls (because 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // permission check can be performed only on the UI 162868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // thread). Currently these interfaces are available only for 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // whitelisted apps which may not have access to the other private 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // interfaces. 165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (message.type() == PpapiHostMsg_HostResolver_CreatePrivate::ID) { 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<ResourceMessageFilter> host_resolver( 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new PepperHostResolverMessageFilter(host_, instance, true)); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<ResourceHost>(new MessageFilterHost( 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_->GetPpapiHost(), instance, params.pp_resource(), host_resolver)); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (message.type() == PpapiHostMsg_TCPServerSocket_CreatePrivate::ID) { 1722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (CanCreateSocket()) { 1732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch scoped_refptr<ResourceMessageFilter> tcp_server_socket( 174424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new PepperTCPServerSocketMessageFilter(this, host_, instance, true)); 175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 176a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new MessageFilterHost(host_->GetPpapiHost(), 177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 178a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch params.pp_resource(), 179a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch tcp_server_socket)); 1802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } else { 1812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return scoped_ptr<ResourceHost>(); 1822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 1832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (message.type() == PpapiHostMsg_TCPSocket_CreatePrivate::ID) { 185a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return CreateNewTCPSocket( 186a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, params.pp_resource(), ppapi::TCP_SOCKET_VERSION_PRIVATE); 187424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (message.type() == PpapiHostMsg_UDPSocket_CreatePrivate::ID) { 1892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (CanCreateSocket()) { 1902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch scoped_refptr<ResourceMessageFilter> udp_socket( 1912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch new PepperUDPSocketMessageFilter(host_, instance, true)); 1922385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return scoped_ptr<ResourceHost>(new MessageFilterHost( 1932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch host_->GetPpapiHost(), instance, params.pp_resource(), udp_socket)); 1942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } else { 1952385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return scoped_ptr<ResourceHost>(); 1962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 198d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (message.type() == PpapiHostMsg_NetworkMonitor_Create::ID) { 199d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return scoped_ptr<ResourceHost>( 200d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) new PepperNetworkMonitorHost(host_, instance, params.pp_resource())); 201d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Flash interfaces. 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (GetPermissions().HasPermission(ppapi::PERMISSION_FLASH)) { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (message.type()) { 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case PpapiHostMsg_FlashFile_Create::ID: { 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<ResourceMessageFilter> file_filter( 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new PepperFlashFileMessageFilter(instance, host_)); 209a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 210a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new MessageFilterHost(host_->GetPpapiHost(), 211a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch instance, 212a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch params.pp_resource(), 213a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch file_filter)); 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 221424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)scoped_ptr<ppapi::host::ResourceHost> 222424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)ContentBrowserPepperHostFactory::CreateAcceptedTCPSocket( 223424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PP_Instance instance, 22468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ppapi::TCPSocketVersion version, 22568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scoped_ptr<net::TCPSocket> socket) { 226424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!CanCreateSocket()) 227424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 228424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_refptr<ResourceMessageFilter> tcp_socket( 229a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new PepperTCPSocketMessageFilter( 230a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch host_, instance, version, socket.Pass())); 231a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<ResourceHost>( 232a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new MessageFilterHost(host_->GetPpapiHost(), instance, 0, tcp_socket)); 233424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 234424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 23568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)scoped_ptr<ppapi::host::ResourceHost> 23668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ContentBrowserPepperHostFactory::CreateNewTCPSocket( 23768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PP_Instance instance, 23868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PP_Resource resource, 23968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ppapi::TCPSocketVersion version) { 24068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!CanCreateSocket()) 24168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 24268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 24368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scoped_refptr<ResourceMessageFilter> tcp_socket( 24468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) new PepperTCPSocketMessageFilter(this, host_, instance, version)); 24568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!tcp_socket) 24668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return scoped_ptr<ResourceHost>(); 24768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 24868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return scoped_ptr<ResourceHost>(new MessageFilterHost( 24968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) host_->GetPpapiHost(), instance, resource, tcp_socket)); 25068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 25168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 252a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst ppapi::PpapiPermissions& ContentBrowserPepperHostFactory::GetPermissions() 253a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const { 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return host_->GetPpapiHost()->permissions(); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 258