Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc

Issue 22923014: TCPSockets are switched to the new Pepper proxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/pepper/content_browser_pepper_host_facto ry.h" 5 #include "content/browser/renderer_host/pepper/content_browser_pepper_host_facto ry.h"
6 6
7 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h" 7 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
8 #include "content/browser/renderer_host/pepper/pepper_browser_font_singleton_hos t.h" 8 #include "content/browser/renderer_host/pepper/pepper_browser_font_singleton_hos t.h"
9 #include "content/browser/renderer_host/pepper/pepper_file_ref_host.h" 9 #include "content/browser/renderer_host/pepper/pepper_file_ref_host.h"
10 #include "content/browser/renderer_host/pepper/pepper_file_system_browser_host.h " 10 #include "content/browser/renderer_host/pepper/pepper_file_system_browser_host.h "
11 #include "content/browser/renderer_host/pepper/pepper_flash_file_message_filter. h" 11 #include "content/browser/renderer_host/pepper/pepper_flash_file_message_filter. h"
12 #include "content/browser/renderer_host/pepper/pepper_gamepad_host.h" 12 #include "content/browser/renderer_host/pepper/pepper_gamepad_host.h"
13 #include "content/browser/renderer_host/pepper/pepper_host_resolver_message_filt er.h" 13 #include "content/browser/renderer_host/pepper/pepper_host_resolver_message_filt er.h"
14 #include "content/browser/renderer_host/pepper/pepper_network_proxy_host.h" 14 #include "content/browser/renderer_host/pepper/pepper_network_proxy_host.h"
15 #include "content/browser/renderer_host/pepper/pepper_print_settings_manager.h" 15 #include "content/browser/renderer_host/pepper/pepper_print_settings_manager.h"
16 #include "content/browser/renderer_host/pepper/pepper_printing_host.h" 16 #include "content/browser/renderer_host/pepper/pepper_printing_host.h"
17 #include "content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_ filter.h" 17 #include "content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_ filter.h"
18 #include "content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter. h"
18 #include "content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h" 19 #include "content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h"
19 #include "content/browser/renderer_host/pepper/pepper_udp_socket_message_filter. h" 20 #include "content/browser/renderer_host/pepper/pepper_udp_socket_message_filter. h"
21 #include "net/socket/stream_socket.h"
20 #include "ppapi/host/message_filter_host.h" 22 #include "ppapi/host/message_filter_host.h"
21 #include "ppapi/host/ppapi_host.h" 23 #include "ppapi/host/ppapi_host.h"
22 #include "ppapi/host/resource_host.h" 24 #include "ppapi/host/resource_host.h"
23 #include "ppapi/proxy/ppapi_messages.h" 25 #include "ppapi/proxy/ppapi_messages.h"
24 #include "ppapi/shared_impl/ppapi_permissions.h" 26 #include "ppapi/shared_impl/ppapi_permissions.h"
25 27
26 using ppapi::host::MessageFilterHost; 28 using ppapi::host::MessageFilterHost;
27 using ppapi::host::ResourceHost; 29 using ppapi::host::ResourceHost;
28 using ppapi::host::ResourceMessageFilter; 30 using ppapi::host::ResourceMessageFilter;
29 using ppapi::UnpackMessage; 31 using ppapi::UnpackMessage;
30 32
31 namespace content { 33 namespace content {
32 34
33 namespace { 35 namespace {
34 36
35 const size_t kMaxSocketsAllowed = 1024; 37 const size_t kMaxSocketsAllowed = 1024;
36 38
37 bool CanCreateSocket() { 39 bool CanCreateSocket() {
38 return 40 return
39 PepperUDPSocketMessageFilter::GetNumInstances() + 41 PepperTCPServerSocketMessageFilter::GetNumInstances() +
40 PepperTCPServerSocketMessageFilter::GetNumInstances() < 42 PepperTCPSocketMessageFilter::GetNumInstances() +
43 PepperUDPSocketMessageFilter::GetNumInstances() <
41 kMaxSocketsAllowed; 44 kMaxSocketsAllowed;
42 } 45 }
43 46
44 } // namespace 47 } // namespace
45 48
46 ContentBrowserPepperHostFactory::ContentBrowserPepperHostFactory( 49 ContentBrowserPepperHostFactory::ContentBrowserPepperHostFactory(
47 BrowserPpapiHostImpl* host, 50 BrowserPpapiHostImpl* host)
48 const scoped_refptr<PepperMessageFilter>& pepper_message_filter) 51 : host_(host),
49 : host_(host), 52 ssl_context_helper_(new SSLContextHelper()) {
50 pepper_message_filter_(pepper_message_filter) {
51 } 53 }
52 54
53 ContentBrowserPepperHostFactory::~ContentBrowserPepperHostFactory() { 55 ContentBrowserPepperHostFactory::~ContentBrowserPepperHostFactory() {
54 } 56 }
55 57
56 scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost( 58 scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost(
57 ppapi::host::PpapiHost* host, 59 ppapi::host::PpapiHost* host,
58 const ppapi::proxy::ResourceMessageCallParams& params, 60 const ppapi::proxy::ResourceMessageCallParams& params,
59 PP_Instance instance, 61 PP_Instance instance,
60 const IPC::Message& message) { 62 const IPC::Message& message) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 PP_Resource file_system; 97 PP_Resource file_system;
96 std::string internal_path; 98 std::string internal_path;
97 if (!UnpackMessage<PpapiHostMsg_FileRef_CreateInternal>( 99 if (!UnpackMessage<PpapiHostMsg_FileRef_CreateInternal>(
98 message, &file_system, &internal_path)) { 100 message, &file_system, &internal_path)) {
99 NOTREACHED(); 101 NOTREACHED();
100 return scoped_ptr<ResourceHost>(); 102 return scoped_ptr<ResourceHost>();
101 } 103 }
102 return scoped_ptr<ResourceHost>(new PepperFileRefHost( 104 return scoped_ptr<ResourceHost>(new PepperFileRefHost(
103 host_, instance, params.pp_resource(), file_system, internal_path)); 105 host_, instance, params.pp_resource(), file_system, internal_path));
104 } 106 }
107 case PpapiHostMsg_TCPSocket_Create::ID: {
108 if (CanCreateSocket()) {
109 scoped_refptr<ResourceMessageFilter> tcp_socket(
110 new PepperTCPSocketMessageFilter(host_,
111 instance,
112 false,
113 ssl_context_helper_));
114 return scoped_ptr<ResourceHost>(new MessageFilterHost(
115 host_->GetPpapiHost(), instance, params.pp_resource(), tcp_socket));
116 } else {
117 return scoped_ptr<ResourceHost>();
118 }
119 }
105 case PpapiHostMsg_UDPSocket_Create::ID: { 120 case PpapiHostMsg_UDPSocket_Create::ID: {
106 if (CanCreateSocket()) { 121 if (CanCreateSocket()) {
107 scoped_refptr<ResourceMessageFilter> udp_socket( 122 scoped_refptr<ResourceMessageFilter> udp_socket(
108 new PepperUDPSocketMessageFilter(host_, instance, false)); 123 new PepperUDPSocketMessageFilter(host_, instance, false));
109 return scoped_ptr<ResourceHost>(new MessageFilterHost( 124 return scoped_ptr<ResourceHost>(new MessageFilterHost(
110 host_->GetPpapiHost(), instance, params.pp_resource(), udp_socket)); 125 host_->GetPpapiHost(), instance, params.pp_resource(), udp_socket));
111 } else { 126 } else {
112 return scoped_ptr<ResourceHost>(); 127 return scoped_ptr<ResourceHost>();
113 } 128 }
114 } 129 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 // interfaces. 163 // interfaces.
149 if (message.type() == PpapiHostMsg_HostResolver_CreatePrivate::ID) { 164 if (message.type() == PpapiHostMsg_HostResolver_CreatePrivate::ID) {
150 scoped_refptr<ResourceMessageFilter> host_resolver( 165 scoped_refptr<ResourceMessageFilter> host_resolver(
151 new PepperHostResolverMessageFilter(host_, instance, true)); 166 new PepperHostResolverMessageFilter(host_, instance, true));
152 return scoped_ptr<ResourceHost>(new MessageFilterHost( 167 return scoped_ptr<ResourceHost>(new MessageFilterHost(
153 host_->GetPpapiHost(), instance, params.pp_resource(), host_resolver)); 168 host_->GetPpapiHost(), instance, params.pp_resource(), host_resolver));
154 } 169 }
155 if (message.type() == PpapiHostMsg_TCPServerSocket_CreatePrivate::ID) { 170 if (message.type() == PpapiHostMsg_TCPServerSocket_CreatePrivate::ID) {
156 if (CanCreateSocket()) { 171 if (CanCreateSocket()) {
157 scoped_refptr<ResourceMessageFilter> tcp_server_socket( 172 scoped_refptr<ResourceMessageFilter> tcp_server_socket(
158 new PepperTCPServerSocketMessageFilter(host_, instance, true, 173 new PepperTCPServerSocketMessageFilter(this, host_, instance, true));
159 pepper_message_filter_));
160 return scoped_ptr<ResourceHost>(new MessageFilterHost( 174 return scoped_ptr<ResourceHost>(new MessageFilterHost(
161 host_->GetPpapiHost(), instance, params.pp_resource(), 175 host_->GetPpapiHost(), instance, params.pp_resource(),
162 tcp_server_socket)); 176 tcp_server_socket));
163 } else { 177 } else {
164 return scoped_ptr<ResourceHost>(); 178 return scoped_ptr<ResourceHost>();
165 } 179 }
166 } 180 }
181 if (message.type() == PpapiHostMsg_TCPSocket_CreatePrivate::ID) {
182 if (CanCreateSocket()) {
183 scoped_refptr<ResourceMessageFilter> tcp_socket(
184 new PepperTCPSocketMessageFilter(host_,
185 instance,
186 true,
187 ssl_context_helper_));
188 return scoped_ptr<ResourceHost>(new MessageFilterHost(
189 host_->GetPpapiHost(), instance, params.pp_resource(), tcp_socket));
190 } else {
191 return scoped_ptr<ResourceHost>();
192 }
193 }
167 if (message.type() == PpapiHostMsg_UDPSocket_CreatePrivate::ID) { 194 if (message.type() == PpapiHostMsg_UDPSocket_CreatePrivate::ID) {
168 if (CanCreateSocket()) { 195 if (CanCreateSocket()) {
169 scoped_refptr<ResourceMessageFilter> udp_socket( 196 scoped_refptr<ResourceMessageFilter> udp_socket(
170 new PepperUDPSocketMessageFilter(host_, instance, true)); 197 new PepperUDPSocketMessageFilter(host_, instance, true));
171 return scoped_ptr<ResourceHost>(new MessageFilterHost( 198 return scoped_ptr<ResourceHost>(new MessageFilterHost(
172 host_->GetPpapiHost(), instance, params.pp_resource(), udp_socket)); 199 host_->GetPpapiHost(), instance, params.pp_resource(), udp_socket));
173 } else { 200 } else {
174 return scoped_ptr<ResourceHost>(); 201 return scoped_ptr<ResourceHost>();
175 } 202 }
176 } 203 }
177 204
178 // Flash interfaces. 205 // Flash interfaces.
179 if (GetPermissions().HasPermission(ppapi::PERMISSION_FLASH)) { 206 if (GetPermissions().HasPermission(ppapi::PERMISSION_FLASH)) {
180 switch (message.type()) { 207 switch (message.type()) {
181 case PpapiHostMsg_FlashFile_Create::ID: { 208 case PpapiHostMsg_FlashFile_Create::ID: {
182 scoped_refptr<ResourceMessageFilter> file_filter( 209 scoped_refptr<ResourceMessageFilter> file_filter(
183 new PepperFlashFileMessageFilter(instance, host_)); 210 new PepperFlashFileMessageFilter(instance, host_));
184 return scoped_ptr<ResourceHost>(new MessageFilterHost( 211 return scoped_ptr<ResourceHost>(new MessageFilterHost(
185 host_->GetPpapiHost(), instance, params.pp_resource(), 212 host_->GetPpapiHost(), instance, params.pp_resource(),
186 file_filter)); 213 file_filter));
187 } 214 }
188 } 215 }
189 } 216 }
190 217
191 return scoped_ptr<ResourceHost>(); 218 return scoped_ptr<ResourceHost>();
192 } 219 }
193 220
221 int ContentBrowserPepperHostFactory::AddAcceptedTCPSocket(
222 PP_Instance instance,
223 bool private_api,
224 net::StreamSocket* socket) {
225 scoped_ptr<net::StreamSocket> s(socket);
226
227 if (!CanCreateSocket())
228 return 0;
229 scoped_refptr<ResourceMessageFilter> tcp_socket(
230 new PepperTCPSocketMessageFilter(host_,
231 instance,
232 private_api,
233 ssl_context_helper_,
234 s.release()));
235 scoped_ptr<ResourceHost> resource_host(new MessageFilterHost(
236 host_->GetPpapiHost(), instance, 0, tcp_socket));
237 return host_->GetPpapiHost()->AddPendingResourceHost(resource_host.Pass());
238 }
239
194 const ppapi::PpapiPermissions& 240 const ppapi::PpapiPermissions&
195 ContentBrowserPepperHostFactory::GetPermissions() const { 241 ContentBrowserPepperHostFactory::GetPermissions() const {
196 return host_->GetPpapiHost()->permissions(); 242 return host_->GetPpapiHost()->permissions();
197 } 243 }
198 244
199 } // namespace content 245 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698