Index: content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc |
diff --git a/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc b/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc |
index f0cefc40396d5e06c1b2a85fc9d06448ba8ef1f0..97e31738f00709cbbc20012fbec6064162dafd96 100644 |
--- a/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc |
+++ b/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc |
@@ -15,8 +15,10 @@ |
#include "content/browser/renderer_host/pepper/pepper_print_settings_manager.h" |
#include "content/browser/renderer_host/pepper/pepper_printing_host.h" |
#include "content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h" |
+#include "content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h" |
#include "content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h" |
#include "content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h" |
+#include "net/socket/stream_socket.h" |
#include "ppapi/host/message_filter_host.h" |
#include "ppapi/host/ppapi_host.h" |
#include "ppapi/host/resource_host.h" |
@@ -36,18 +38,17 @@ const size_t kMaxSocketsAllowed = 1024; |
bool CanCreateSocket() { |
return |
- PepperUDPSocketMessageFilter::GetNumInstances() + |
- PepperTCPServerSocketMessageFilter::GetNumInstances() < |
+ PepperTCPServerSocketMessageFilter::GetNumInstances() + |
+ PepperTCPSocketMessageFilter::GetNumInstances() + |
+ PepperUDPSocketMessageFilter::GetNumInstances() < |
kMaxSocketsAllowed; |
} |
} // namespace |
ContentBrowserPepperHostFactory::ContentBrowserPepperHostFactory( |
- BrowserPpapiHostImpl* host, |
- const scoped_refptr<PepperMessageFilter>& pepper_message_filter) |
- : host_(host), |
- pepper_message_filter_(pepper_message_filter) { |
+ BrowserPpapiHostImpl* host) |
+ : host_(host) { |
} |
ContentBrowserPepperHostFactory::~ContentBrowserPepperHostFactory() { |
@@ -102,6 +103,18 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost( |
return scoped_ptr<ResourceHost>(new PepperFileRefHost( |
host_, instance, params.pp_resource(), file_system, internal_path)); |
} |
+ case PpapiHostMsg_TCPSocket_Create::ID: { |
+ if (CanCreateSocket()) { |
+ scoped_refptr<ResourceMessageFilter> tcp_socket( |
+ new PepperTCPSocketMessageFilter(host_, |
+ instance, |
+ false)); |
+ return scoped_ptr<ResourceHost>(new MessageFilterHost( |
+ host_->GetPpapiHost(), instance, params.pp_resource(), tcp_socket)); |
+ } else { |
+ return scoped_ptr<ResourceHost>(); |
+ } |
+ } |
case PpapiHostMsg_UDPSocket_Create::ID: { |
if (CanCreateSocket()) { |
scoped_refptr<ResourceMessageFilter> udp_socket( |
@@ -155,8 +168,7 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost( |
if (message.type() == PpapiHostMsg_TCPServerSocket_CreatePrivate::ID) { |
if (CanCreateSocket()) { |
scoped_refptr<ResourceMessageFilter> tcp_server_socket( |
- new PepperTCPServerSocketMessageFilter(host_, instance, true, |
- pepper_message_filter_)); |
+ new PepperTCPServerSocketMessageFilter(this, host_, instance, true)); |
return scoped_ptr<ResourceHost>(new MessageFilterHost( |
host_->GetPpapiHost(), instance, params.pp_resource(), |
tcp_server_socket)); |
@@ -164,6 +176,18 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost( |
return scoped_ptr<ResourceHost>(); |
} |
} |
+ if (message.type() == PpapiHostMsg_TCPSocket_CreatePrivate::ID) { |
+ if (CanCreateSocket()) { |
+ scoped_refptr<ResourceMessageFilter> tcp_socket( |
+ new PepperTCPSocketMessageFilter(host_, |
+ instance, |
+ true)); |
+ return scoped_ptr<ResourceHost>(new MessageFilterHost( |
+ host_->GetPpapiHost(), instance, params.pp_resource(), tcp_socket)); |
+ } else { |
+ return scoped_ptr<ResourceHost>(); |
+ } |
+ } |
if (message.type() == PpapiHostMsg_UDPSocket_CreatePrivate::ID) { |
if (CanCreateSocket()) { |
scoped_refptr<ResourceMessageFilter> udp_socket( |
@@ -191,6 +215,24 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost( |
return scoped_ptr<ResourceHost>(); |
} |
+scoped_ptr<ppapi::host::ResourceHost> |
+ContentBrowserPepperHostFactory::CreateAcceptedTCPSocket( |
+ PP_Instance instance, |
+ bool private_api, |
+ net::StreamSocket* socket) { |
+ scoped_ptr<net::StreamSocket> s(socket); |
+ |
+ if (!CanCreateSocket()) |
+ return scoped_ptr<ResourceHost>(); |
+ scoped_refptr<ResourceMessageFilter> tcp_socket( |
+ new PepperTCPSocketMessageFilter(host_, |
+ instance, |
+ private_api, |
+ s.release())); |
+ return scoped_ptr<ResourceHost>(new MessageFilterHost( |
+ host_->GetPpapiHost(), instance, 0, tcp_socket)); |
+} |
+ |
const ppapi::PpapiPermissions& |
ContentBrowserPepperHostFactory::GetPermissions() const { |
return host_->GetPpapiHost()->permissions(); |