Chromium Code Reviews| Index: content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc |
| diff --git a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc |
| index 0d37776841951678e24a0cf1108f2350c5cccfa6..fe63ce8adf32e73bf916c3f55c81c6c27742560f 100644 |
| --- a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc |
| +++ b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc |
| @@ -33,6 +33,10 @@ |
| #include "ppapi/shared_impl/private/net_address_private_impl.h" |
| #include "ppapi/shared_impl/socket_option_data.h" |
| +#if defined(OS_CHROMEOS) |
| +#include "chromeos/network/firewall_hole.h" |
| +#endif // defined(OS_CHROMEOS) |
| + |
| using ppapi::NetAddressPrivateImpl; |
| using ppapi::host::NetErrorToPepperError; |
| using ppapi::proxy::UDPSocketFilter; |
| @@ -490,12 +494,52 @@ void PepperUDPSocketMessageFilter::DoBind( |
| return; |
| } |
|
bbudge
2015/07/09 19:55:17
Have chromeos-specific code here to make it cleare
avallee
2015/07/13 18:29:10
Done.
|
| + base::Closure bind_complete = base::Bind( |
|
bbudge
2015/07/09 19:55:17
Do this inline, since there is only one consumer o
avallee
2015/07/13 18:29:10
Done.
|
| + &PepperUDPSocketMessageFilter::OnBindComplete, base::Unretained(this), |
| + base::Passed(&socket), context, net_address); |
| + MaybeOpenFirewallHole(bound_address, bind_complete); |
| +} |
| + |
| +void PepperUDPSocketMessageFilter::OnBindComplete( |
| + scoped_ptr<net::UDPSocket> socket, |
| + const ppapi::host::ReplyMessageContext& context, |
| + const PP_NetAddress_Private& net_address) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| socket_.swap(socket); |
| SendBindReply(context, PP_OK, net_address); |
| DoRecvFrom(); |
| } |
| +void PepperUDPSocketMessageFilter::MaybeOpenFirewallHole( |
| + const net::IPEndPoint& local_address, |
| + base::Closure bind_complete) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| +#if defined(OS_CHROMEOS) |
| + pepper_socket_utils::FirewallHoleOpenCallback callback = |
| + base::Bind(&PepperUDPSocketMessageFilter::OnFirewallHoleOpened, |
| + base::Unretained(this), bind_complete); |
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| + base::Bind(&pepper_socket_utils::OpenUDPFirewallHole, |
| + local_address, callback)); |
| +#else |
| + bind_complete.Run(); |
| +#endif // defined(OS_CHROMEOS) |
| +} |
| + |
| +#if defined(OS_CHROMEOS) |
| +void PepperUDPSocketMessageFilter::OnFirewallHoleOpened( |
| + base::Closure bind_complete, |
| + scoped_ptr<chromeos::FirewallHole> hole) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + |
| + LOG_IF(WARNING, !hole.get()) << "Firewall hole could not be opened."; |
| + firewall_hole_.reset(hole.release()); |
| + |
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, bind_complete); |
| +} |
| +#endif // defined(OS_CHROMEOS) |
| + |
| void PepperUDPSocketMessageFilter::DoRecvFrom() { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| DCHECK(!closed_); |