Index: content/browser/renderer_host/pepper_udp_socket.cc |
diff --git a/content/browser/renderer_host/pepper_udp_socket.cc b/content/browser/renderer_host/pepper_udp_socket.cc |
index 33f2c7f0c17199eef6e047f4680cc5ea250c975b..ad7b7457ee7c0be0cd27da943b9934fcb4399b86 100644 |
--- a/content/browser/renderer_host/pepper_udp_socket.cc |
+++ b/content/browser/renderer_host/pepper_udp_socket.cc |
@@ -27,7 +27,8 @@ PepperUDPSocket::PepperUDPSocket( |
: manager_(manager), |
routing_id_(routing_id), |
plugin_dispatcher_id_(plugin_dispatcher_id), |
- socket_id_(socket_id) { |
+ socket_id_(socket_id), |
+ bound_port_(0) { |
DCHECK(manager); |
} |
@@ -40,6 +41,9 @@ PepperUDPSocket::~PepperUDPSocket() { |
void PepperUDPSocket::Bind(const PP_NetAddress_Private& addr) { |
socket_.reset(new net::UDPServerSocket(NULL, net::NetLog::Source())); |
+ // Reset |bound_port_| to zero. |
+ bound_port_ = 0; |
+ |
net::IPEndPoint address; |
if (!socket_.get() || |
!NetAddressPrivateImpl::NetAddressToIPEndPoint(addr, &address)) { |
@@ -49,6 +53,13 @@ void PepperUDPSocket::Bind(const PP_NetAddress_Private& addr) { |
int result = socket_->Listen(address); |
+ // If we are successful, get the local port that we bound to. |
+ if (result == net::OK) { |
+ net::IPEndPoint current_address; |
+ socket_->GetLocalAddress(¤t_address); |
+ bound_port_ = current_address.port(); |
+ } |
+ |
SendBindACK(result == net::OK); |
} |
@@ -107,7 +118,7 @@ void PepperUDPSocket::SendSendToACKError() { |
void PepperUDPSocket::SendBindACK(bool result) { |
manager_->Send(new PpapiMsg_PPBUDPSocket_BindACK( |
- routing_id_, plugin_dispatcher_id_, socket_id_, result)); |
+ routing_id_, plugin_dispatcher_id_, socket_id_, result, bound_port_)); |
} |
void PepperUDPSocket::OnRecvFromCompleted(int result) { |