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

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

Issue 10993078: Use extensions socket permission for TCP/UDP socket APIs in Pepper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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/pepper_message_filter.h" 5 #include "content/browser/renderer_host/pepper/pepper_message_filter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 26 matching lines...) Expand all
37 #include "net/base/cert_verifier.h" 37 #include "net/base/cert_verifier.h"
38 #include "net/base/host_port_pair.h" 38 #include "net/base/host_port_pair.h"
39 #include "net/base/sys_addrinfo.h" 39 #include "net/base/sys_addrinfo.h"
40 #include "ppapi/c/pp_errors.h" 40 #include "ppapi/c/pp_errors.h"
41 #include "ppapi/c/private/ppb_host_resolver_private.h" 41 #include "ppapi/c/private/ppb_host_resolver_private.h"
42 #include "ppapi/c/private/ppb_net_address_private.h" 42 #include "ppapi/c/private/ppb_net_address_private.h"
43 #include "ppapi/proxy/ppapi_messages.h" 43 #include "ppapi/proxy/ppapi_messages.h"
44 #include "ppapi/shared_impl/api_id.h" 44 #include "ppapi/shared_impl/api_id.h"
45 #include "ppapi/shared_impl/private/net_address_private_impl.h" 45 #include "ppapi/shared_impl/private/net_address_private_impl.h"
46 #include "ppapi/shared_impl/private/ppb_host_resolver_shared.h" 46 #include "ppapi/shared_impl/private/ppb_host_resolver_shared.h"
47 #include "ppapi/cpp/private/net_address_private.h"
ygorshenin1 2012/09/28 14:43:34 nit: sort, please.
Dmitry Polukhin 2012/10/01 11:00:24 Done.
47 48
48 #ifdef OS_WIN 49 #ifdef OS_WIN
49 #include <windows.h> 50 #include <windows.h>
50 #elif defined(OS_MACOSX) 51 #elif defined(OS_MACOSX)
51 #include <CoreServices/CoreServices.h> 52 #include <CoreServices/CoreServices.h>
52 #endif 53 #endif
53 54
54 using content::BrowserThread; 55 using content::BrowserThread;
55 using content::RenderViewHostImpl; 56 using content::RenderViewHostImpl;
56 using ppapi::NetAddressPrivateImpl; 57 using ppapi::NetAddressPrivateImpl;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 DCHECK(type == PLUGIN); 115 DCHECK(type == PLUGIN);
115 DCHECK(host_resolver); 116 DCHECK(host_resolver);
116 } 117 }
117 118
118 void PepperMessageFilter::OverrideThreadForMessage( 119 void PepperMessageFilter::OverrideThreadForMessage(
119 const IPC::Message& message, 120 const IPC::Message& message,
120 BrowserThread::ID* thread) { 121 BrowserThread::ID* thread) {
121 if (message.type() == PpapiHostMsg_PPBTCPSocket_Connect::ID || 122 if (message.type() == PpapiHostMsg_PPBTCPSocket_Connect::ID ||
122 message.type() == PpapiHostMsg_PPBTCPSocket_ConnectWithNetAddress::ID || 123 message.type() == PpapiHostMsg_PPBTCPSocket_ConnectWithNetAddress::ID ||
123 message.type() == PpapiHostMsg_PPBUDPSocket_Bind::ID || 124 message.type() == PpapiHostMsg_PPBUDPSocket_Bind::ID ||
124 message.type() == PpapiHostMsg_PPBTCPServerSocket_Listen::ID || 125 message.type() == PpapiHostMsg_PPBUDPSocket_SendTo::ID ||
125 message.type() == PpapiHostMsg_PPBHostResolver_Resolve::ID) { 126 message.type() == PpapiHostMsg_PPBTCPServerSocket_Listen::ID) {
ygorshenin1 2012/09/28 14:43:34 nit: message ID's could be sorted here, for better
Dmitry Polukhin 2012/10/01 11:00:24 Done.
126 *thread = BrowserThread::UI; 127 *thread = BrowserThread::UI;
127 } else if (message.type() == PepperMsg_GetDeviceID::ID) { 128 } else if (message.type() == PepperMsg_GetDeviceID::ID) {
128 *thread = BrowserThread::FILE; 129 *thread = BrowserThread::FILE;
129 } 130 }
130 } 131 }
131 132
132 bool PepperMessageFilter::OnMessageReceived(const IPC::Message& msg, 133 bool PepperMessageFilter::OnMessageReceived(const IPC::Message& msg,
133 bool* message_was_ok) { 134 bool* message_was_ok) {
134 bool handled = true; 135 bool handled = true;
135 IPC_BEGIN_MESSAGE_MAP_EX(PepperMessageFilter, msg, *message_was_ok) 136 IPC_BEGIN_MESSAGE_MAP_EX(PepperMessageFilter, msg, *message_was_ok)
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 280
280 tcp_sockets_[*socket_id] = linked_ptr<PepperTCPSocket>( 281 tcp_sockets_[*socket_id] = linked_ptr<PepperTCPSocket>(
281 new PepperTCPSocket(this, routing_id, plugin_dispatcher_id, *socket_id)); 282 new PepperTCPSocket(this, routing_id, plugin_dispatcher_id, *socket_id));
282 } 283 }
283 284
284 void PepperMessageFilter::OnTCPConnect(int32 routing_id, 285 void PepperMessageFilter::OnTCPConnect(int32 routing_id,
285 uint32 socket_id, 286 uint32 socket_id,
286 const std::string& host, 287 const std::string& host,
287 uint16_t port) { 288 uint16_t port) {
288 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
290 content::ContentBrowserClient::SocketPermissionParam params(
291 content::ContentBrowserClient::SocketPermissionParam::TCP_CONNECT,
292 host, port);
293 bool allowed = CanUseSocketAPIs(routing_id, params);
289 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 294 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
290 base::Bind(&PepperMessageFilter::DoTCPConnect, this, 295 base::Bind(&PepperMessageFilter::DoTCPConnect, this,
291 CanUseSocketAPIs(routing_id), routing_id, socket_id, host, port)); 296 allowed, routing_id, socket_id, host, port));
292 } 297 }
293 298
294 void PepperMessageFilter::DoTCPConnect(bool allowed, 299 void PepperMessageFilter::DoTCPConnect(bool allowed,
295 int32 routing_id, 300 int32 routing_id,
296 uint32 socket_id, 301 uint32 socket_id,
297 const std::string& host, 302 const std::string& host,
298 uint16_t port) { 303 uint16_t port) {
299 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 304 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
300 TCPSocketMap::iterator iter = tcp_sockets_.find(socket_id); 305 TCPSocketMap::iterator iter = tcp_sockets_.find(socket_id);
301 if (iter == tcp_sockets_.end()) { 306 if (iter == tcp_sockets_.end()) {
302 NOTREACHED(); 307 NOTREACHED();
303 return; 308 return;
304 } 309 }
305 310
306 if (routing_id == iter->second->routing_id() && allowed) 311 if (routing_id == iter->second->routing_id() && allowed)
307 iter->second->Connect(host, port); 312 iter->second->Connect(host, port);
308 else 313 else
309 iter->second->SendConnectACKError(); 314 iter->second->SendConnectACKError();
310 } 315 }
311 316
312 void PepperMessageFilter::OnTCPConnectWithNetAddress( 317 void PepperMessageFilter::OnTCPConnectWithNetAddress(
313 int32 routing_id, 318 int32 routing_id,
314 uint32 socket_id, 319 uint32 socket_id,
315 const PP_NetAddress_Private& net_addr) { 320 const PP_NetAddress_Private& net_addr) {
316 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 321 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
322 bool allowed = CanUseSocketAPIs(routing_id, CreateSocketPermissionParam(
323 content::ContentBrowserClient::SocketPermissionParam::TCP_CONNECT,
324 net_addr));
317 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 325 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
318 base::Bind(&PepperMessageFilter::DoTCPConnectWithNetAddress, this, 326 base::Bind(&PepperMessageFilter::DoTCPConnectWithNetAddress, this,
319 CanUseSocketAPIs(routing_id), routing_id, socket_id, net_addr)); 327 allowed, routing_id, socket_id, net_addr));
320 } 328 }
321 329
322 void PepperMessageFilter::DoTCPConnectWithNetAddress( 330 void PepperMessageFilter::DoTCPConnectWithNetAddress(
323 bool allowed, 331 bool allowed,
324 int32 routing_id, 332 int32 routing_id,
325 uint32 socket_id, 333 uint32 socket_id,
326 const PP_NetAddress_Private& net_addr) { 334 const PP_NetAddress_Private& net_addr) {
327 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 335 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
328 TCPSocketMap::iterator iter = tcp_sockets_.find(socket_id); 336 TCPSocketMap::iterator iter = tcp_sockets_.find(socket_id);
329 if (iter == tcp_sockets_.end()) { 337 if (iter == tcp_sockets_.end()) {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 default: 433 default:
426 NOTREACHED(); 434 NOTREACHED();
427 break; 435 break;
428 } 436 }
429 } 437 }
430 438
431 void PepperMessageFilter::OnUDPBind(int32 routing_id, 439 void PepperMessageFilter::OnUDPBind(int32 routing_id,
432 uint32 socket_id, 440 uint32 socket_id,
433 const PP_NetAddress_Private& addr) { 441 const PP_NetAddress_Private& addr) {
434 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 442 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
443 bool allowed = CanUseSocketAPIs(routing_id, CreateSocketPermissionParam(
444 content::ContentBrowserClient::SocketPermissionParam::UDP_BIND,
445 addr));
435 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 446 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
436 base::Bind(&PepperMessageFilter::DoUDPBind, this, 447 base::Bind(&PepperMessageFilter::DoUDPBind, this,
437 CanUseSocketAPIs(routing_id), routing_id, socket_id, addr)); 448 allowed, routing_id, socket_id, addr));
438 } 449 }
439 450
440 void PepperMessageFilter::DoUDPBind(bool allowed, 451 void PepperMessageFilter::DoUDPBind(bool allowed,
441 int32 routing_id, 452 int32 routing_id,
442 uint32 socket_id, 453 uint32 socket_id,
443 const PP_NetAddress_Private& addr) { 454 const PP_NetAddress_Private& addr) {
444 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 455 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
445 UDPSocketMap::iterator iter = udp_sockets_.find(socket_id); 456 UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
446 if (iter == udp_sockets_.end()) { 457 if (iter == udp_sockets_.end()) {
447 NOTREACHED(); 458 NOTREACHED();
448 return; 459 return;
449 } 460 }
450 461
451 if (routing_id == iter->second->routing_id() && allowed) 462 if (routing_id == iter->second->routing_id() && allowed)
452 iter->second->Bind(addr); 463 iter->second->Bind(addr);
453 else 464 else
454 iter->second->SendBindACKError(); 465 iter->second->SendBindACKError();
455 } 466 }
456 467
457 void PepperMessageFilter::OnUDPRecvFrom(uint32 socket_id, int32_t num_bytes) { 468 void PepperMessageFilter::OnUDPRecvFrom(uint32 socket_id, int32_t num_bytes) {
458 UDPSocketMap::iterator iter = udp_sockets_.find(socket_id); 469 UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
459 if (iter == udp_sockets_.end()) { 470 if (iter == udp_sockets_.end()) {
460 NOTREACHED(); 471 NOTREACHED();
461 return; 472 return;
462 } 473 }
463 474
464 iter->second->RecvFrom(num_bytes); 475 iter->second->RecvFrom(num_bytes);
465 } 476 }
466 477
467 void PepperMessageFilter::OnUDPSendTo(uint32 socket_id, 478 void PepperMessageFilter::OnUDPSendTo(int32 routing_id,
479 uint32 socket_id,
468 const std::string& data, 480 const std::string& data,
469 const PP_NetAddress_Private& addr) { 481 const PP_NetAddress_Private& addr) {
482 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
483 bool allowed = CanUseSocketAPIs(routing_id, CreateSocketPermissionParam(
484 content::ContentBrowserClient::SocketPermissionParam::UDP_SEND_TO,
485 addr));
486 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
487 base::Bind(&PepperMessageFilter::DoUDPSendTo, this,
488 allowed, routing_id, socket_id, data, addr));
489
490 }
491
492 void PepperMessageFilter::DoUDPSendTo(bool allowed,
493 int32 routing_id,
494 uint32 socket_id,
495 const std::string& data,
496 const PP_NetAddress_Private& addr) {
497 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
470 UDPSocketMap::iterator iter = udp_sockets_.find(socket_id); 498 UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
471 if (iter == udp_sockets_.end()) { 499 if (iter == udp_sockets_.end()) {
472 NOTREACHED(); 500 NOTREACHED();
473 return; 501 return;
474 } 502 }
475 503
476 iter->second->SendTo(data, addr); 504 if (routing_id == iter->second->routing_id() && allowed)
ygorshenin1 2012/09/28 14:43:34 nit: delete single space before "allowed".
505 iter->second->SendTo(data, addr);
506 else
507 iter->second->SendSendToACKError();
477 } 508 }
478 509
479 void PepperMessageFilter::OnUDPClose(uint32 socket_id) { 510 void PepperMessageFilter::OnUDPClose(uint32 socket_id) {
480 UDPSocketMap::iterator iter = udp_sockets_.find(socket_id); 511 UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
481 if (iter == udp_sockets_.end()) { 512 if (iter == udp_sockets_.end()) {
482 NOTREACHED(); 513 NOTREACHED();
483 return; 514 return;
484 } 515 }
485 516
486 // Destroy the UDPSocket instance will cancel any pending completion 517 // Destroy the UDPSocket instance will cancel any pending completion
487 // callback. From this point on, there won't be any messages associated with 518 // callback. From this point on, there won't be any messages associated with
488 // this socket sent to the plugin side. 519 // this socket sent to the plugin side.
489 udp_sockets_.erase(iter); 520 udp_sockets_.erase(iter);
490 } 521 }
491 522
492 void PepperMessageFilter::OnTCPServerListen(int32 routing_id, 523 void PepperMessageFilter::OnTCPServerListen(int32 routing_id,
493 uint32 plugin_dispatcher_id, 524 uint32 plugin_dispatcher_id,
494 PP_Resource socket_resource, 525 PP_Resource socket_resource,
495 const PP_NetAddress_Private& addr, 526 const PP_NetAddress_Private& addr,
496 int32_t backlog) { 527 int32_t backlog) {
497 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 528 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
529 bool allowed = CanUseSocketAPIs(routing_id, CreateSocketPermissionParam(
530 content::ContentBrowserClient::SocketPermissionParam::TCP_LISTEN,
531 addr));
498 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 532 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
499 base::Bind(&PepperMessageFilter::DoTCPServerListen, 533 base::Bind(&PepperMessageFilter::DoTCPServerListen,
500 this, 534 this,
501 CanUseSocketAPIs(routing_id), 535 allowed,
502 routing_id, 536 routing_id,
503 plugin_dispatcher_id, 537 plugin_dispatcher_id,
504 socket_resource, 538 socket_resource,
505 addr, 539 addr,
506 backlog)); 540 backlog));
507 } 541 }
508 542
509 void PepperMessageFilter::DoTCPServerListen(bool allowed, 543 void PepperMessageFilter::DoTCPServerListen(bool allowed,
510 int32 routing_id, 544 int32 routing_id,
511 uint32 plugin_dispatcher_id, 545 uint32 plugin_dispatcher_id,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 } 580 }
547 iter->second->Accept(tcp_client_socket_routing_id); 581 iter->second->Accept(tcp_client_socket_routing_id);
548 } 582 }
549 583
550 void PepperMessageFilter::OnHostResolverResolve( 584 void PepperMessageFilter::OnHostResolverResolve(
551 int32 routing_id, 585 int32 routing_id,
552 uint32 plugin_dispatcher_id, 586 uint32 plugin_dispatcher_id,
553 uint32 host_resolver_id, 587 uint32 host_resolver_id,
554 const ppapi::HostPortPair& host_port, 588 const ppapi::HostPortPair& host_port,
555 const PP_HostResolver_Private_Hint& hint) { 589 const PP_HostResolver_Private_Hint& hint) {
556 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
557 BrowserThread::PostTask(
558 BrowserThread::IO, FROM_HERE,
559 base::Bind(&PepperMessageFilter::DoHostResolverResolve, this,
560 CanUseSocketAPIs(routing_id),
561 routing_id,
562 plugin_dispatcher_id,
563 host_resolver_id,
564 host_port,
565 hint));
566 }
567
568 void PepperMessageFilter::DoHostResolverResolve(
569 bool allowed,
570 int32 routing_id,
571 uint32 plugin_dispatcher_id,
572 uint32 host_resolver_id,
573 const ppapi::HostPortPair& host_port,
574 const PP_HostResolver_Private_Hint& hint) {
575 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 590 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
576 if (!allowed) {
577 SendHostResolverResolveACKError(routing_id,
578 plugin_dispatcher_id,
579 host_resolver_id);
580 return;
581 }
582
583 net::HostResolver::RequestInfo request_info( 591 net::HostResolver::RequestInfo request_info(
584 net::HostPortPair(host_port.host, host_port.port)); 592 net::HostPortPair(host_port.host, host_port.port));
585 593
586 net::AddressFamily address_family; 594 net::AddressFamily address_family;
587 switch (hint.family) { 595 switch (hint.family) {
588 case PP_NETADDRESSFAMILY_IPV4: 596 case PP_NETADDRESSFAMILY_IPV4:
589 address_family = net::ADDRESS_FAMILY_IPV4; 597 address_family = net::ADDRESS_FAMILY_IPV4;
590 break; 598 break;
591 case PP_NETADDRESSFAMILY_IPV6: 599 case PP_NETADDRESSFAMILY_IPV6:
592 address_family = net::ADDRESS_FAMILY_IPV6; 600 address_family = net::ADDRESS_FAMILY_IPV6;
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 // the counter overflows. 812 // the counter overflows.
805 socket_id = next_socket_id_++; 813 socket_id = next_socket_id_++;
806 } while (socket_id == kInvalidSocketID || 814 } while (socket_id == kInvalidSocketID ||
807 tcp_sockets_.find(socket_id) != tcp_sockets_.end() || 815 tcp_sockets_.find(socket_id) != tcp_sockets_.end() ||
808 udp_sockets_.find(socket_id) != udp_sockets_.end() || 816 udp_sockets_.find(socket_id) != udp_sockets_.end() ||
809 tcp_server_sockets_.find(socket_id) != tcp_server_sockets_.end()); 817 tcp_server_sockets_.find(socket_id) != tcp_server_sockets_.end());
810 818
811 return socket_id; 819 return socket_id;
812 } 820 }
813 821
814 bool PepperMessageFilter::CanUseSocketAPIs(int32 render_id) { 822 bool PepperMessageFilter::CanUseSocketAPIs(int32 render_id,
823 const content::ContentBrowserClient::SocketPermissionParam& params) {
815 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 824 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
816 if (process_type_ == PLUGIN) { 825 if (process_type_ == PLUGIN) {
817 // Always allow socket APIs for out-process plugins. 826 // Always allow socket APIs for out-process plugins.
818 return true; 827 return true;
819 } 828 }
820 829
821 RenderViewHostImpl* render_view_host = 830 RenderViewHostImpl* render_view_host =
822 RenderViewHostImpl::FromID(process_id_, render_id); 831 RenderViewHostImpl::FromID(process_id_, render_id);
823 if (!render_view_host) 832 if (!render_view_host)
824 return false; 833 return false;
825 834
826 content::SiteInstance* site_instance = render_view_host->GetSiteInstance(); 835 content::SiteInstance* site_instance = render_view_host->GetSiteInstance();
827 if (!site_instance) 836 if (!site_instance)
828 return false; 837 return false;
829 838
830 if (!content::GetContentClient()->browser()->AllowPepperSocketAPI( 839 if (!content::GetContentClient()->browser()->AllowPepperSocketAPI(
831 site_instance->GetBrowserContext(), 840 site_instance->GetBrowserContext(),
832 site_instance->GetSite())) { 841 site_instance->GetSite(),
842 params)) {
833 LOG(ERROR) << "Host " << site_instance->GetSite().host() 843 LOG(ERROR) << "Host " << site_instance->GetSite().host()
834 << " cannot use socket API"; 844 << " cannot use socket API or destination is not allowed";
835 return false; 845 return false;
836 } 846 }
837 847
838 return true; 848 return true;
839 } 849 }
840 850
851 content::ContentBrowserClient::SocketPermissionParam
852 PepperMessageFilter::CreateSocketPermissionParam(
853 content::ContentBrowserClient::SocketPermissionParam::OperationType type,
854 const PP_NetAddress_Private& net_addr) {
855 std::string host = NetAddressPrivateImpl::DescribeNetAddress(net_addr, false);
856 int port = 0;
857 std::vector<unsigned char> address;
858 NetAddressPrivateImpl::NetAddressToIPEndPoint(net_addr, &address, &port);
859 return content::ContentBrowserClient::SocketPermissionParam(type, host, port);
860 }
861
841 void PepperMessageFilter::GetAndSendNetworkList() { 862 void PepperMessageFilter::GetAndSendNetworkList() {
842 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 863 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
843 864
844 BrowserThread::PostBlockingPoolTask( 865 BrowserThread::PostBlockingPoolTask(
845 FROM_HERE, base::Bind(&PepperMessageFilter::DoGetNetworkList, this)); 866 FROM_HERE, base::Bind(&PepperMessageFilter::DoGetNetworkList, this));
846 } 867 }
847 868
848 void PepperMessageFilter::DoGetNetworkList() { 869 void PepperMessageFilter::DoGetNetworkList() {
849 scoped_ptr<net::NetworkInterfaceList> list(new net::NetworkInterfaceList()); 870 scoped_ptr<net::NetworkInterfaceList> list(new net::NetworkInterfaceList());
850 net::GetNetworkList(list.get()); 871 net::GetNetworkList(list.get());
(...skipping 26 matching lines...) Expand all
877 network_copy.state = PP_NETWORKLIST_UP; 898 network_copy.state = PP_NETWORKLIST_UP;
878 network_copy.display_name = network.name; 899 network_copy.display_name = network.name;
879 network_copy.mtu = 0; 900 network_copy.mtu = 0;
880 } 901 }
881 for (NetworkMonitorIdSet::iterator it = network_monitor_ids_.begin(); 902 for (NetworkMonitorIdSet::iterator it = network_monitor_ids_.begin();
882 it != network_monitor_ids_.end(); ++it) { 903 it != network_monitor_ids_.end(); ++it) {
883 Send(new PpapiMsg_PPBNetworkMonitor_NetworkList( 904 Send(new PpapiMsg_PPBNetworkMonitor_NetworkList(
884 ppapi::API_ID_PPB_NETWORKMANAGER_PRIVATE, *it, *list_copy)); 905 ppapi::API_ID_PPB_NETWORKMANAGER_PRIVATE, *it, *list_copy));
885 } 906 }
886 } 907 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698