| Index: ppapi/proxy/udp_socket_resource_base.cc
|
| diff --git a/ppapi/proxy/udp_socket_resource_base.cc b/ppapi/proxy/udp_socket_resource_base.cc
|
| index 521a6e2f4e284220d649e8d49934f503b6245127..6f9b5c8cf291d32e60ebf86234c24a3f3ea279ec 100644
|
| --- a/ppapi/proxy/udp_socket_resource_base.cc
|
| +++ b/ppapi/proxy/udp_socket_resource_base.cc
|
| @@ -34,6 +34,7 @@ UDPSocketResourceBase::UDPSocketResourceBase(Connection connection,
|
| bool private_api)
|
| : PluginResource(connection, instance),
|
| private_api_(private_api),
|
| + bind_called_(false),
|
| bound_(false),
|
| closed_(false),
|
| read_buffer_(NULL),
|
| @@ -61,6 +62,7 @@ UDPSocketResourceBase::~UDPSocketResourceBase() {
|
| int32_t UDPSocketResourceBase::SetOptionImpl(
|
| PP_UDPSocket_Option name,
|
| const PP_Var& value,
|
| + bool check_bind_state,
|
| scoped_refptr<TrackedCallback> callback) {
|
| if (closed_)
|
| return PP_ERROR_FAILED;
|
| @@ -69,8 +71,11 @@ int32_t UDPSocketResourceBase::SetOptionImpl(
|
| switch (name) {
|
| case PP_UDPSOCKET_OPTION_ADDRESS_REUSE:
|
| case PP_UDPSOCKET_OPTION_BROADCAST: {
|
| - if (bound_)
|
| + // On version 1.0 or earlier (private), these option can be set only
|
| + // before calling Bind().
|
| + if (check_bind_state && bind_called_)
|
| return PP_ERROR_FAILED;
|
| +
|
| if (value.type != PP_VARTYPE_BOOL)
|
| return PP_ERROR_BADARGUMENT;
|
| option_data.SetBool(PP_ToBool(value.value.as_bool));
|
| @@ -78,8 +83,11 @@ int32_t UDPSocketResourceBase::SetOptionImpl(
|
| }
|
| case PP_UDPSOCKET_OPTION_SEND_BUFFER_SIZE:
|
| case PP_UDPSOCKET_OPTION_RECV_BUFFER_SIZE: {
|
| - if (!bound_)
|
| + // On version 1.0 or earlier (private), these option can be set only
|
| + // after Bind() is successfully done.
|
| + if (check_bind_state && !bound_)
|
| return PP_ERROR_FAILED;
|
| +
|
| if (value.type != PP_VARTYPE_INT32)
|
| return PP_ERROR_BADARGUMENT;
|
| option_data.SetInt32(value.value.as_int);
|
| @@ -111,6 +119,7 @@ int32_t UDPSocketResourceBase::BindImpl(
|
| if (TrackedCallback::IsPending(bind_callback_))
|
| return PP_ERROR_INPROGRESS;
|
|
|
| + bind_called_ = true;
|
| bind_callback_ = callback;
|
|
|
| // Send the request, the browser will call us back via BindReply.
|
|
|