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

Unified Diff: content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc

Issue 690903002: Remove timing limitation of SetOption invocation for PPAPI sockets. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
index 38248f423413940c40078ddfecff6501071ebb09..df51021375efa793cdfc717cc9f714233befb29a 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
@@ -63,6 +63,7 @@ PepperTCPSocketMessageFilter::PepperTCPSocketMessageFilter(
state_(TCPSocketState::INITIAL),
end_of_file_reached_(false),
bind_input_addr_(NetAddressPrivateImpl::kInvalidNetAddress),
+ socket_options_(SOCKET_OPTION_NODELAY),
address_index_(0),
socket_(new net::TCPSocket(NULL, net::NetLog::Source())),
ssl_context_helper_(host->ssl_context_helper()),
@@ -90,6 +91,7 @@ PepperTCPSocketMessageFilter::PepperTCPSocketMessageFilter(
state_(TCPSocketState::CONNECTED),
end_of_file_reached_(false),
bind_input_addr_(NetAddressPrivateImpl::kInvalidNetAddress),
+ socket_options_(SOCKET_OPTION_NODELAY),
address_index_(0),
socket_(socket.Pass()),
ssl_context_helper_(host->ssl_context_helper()),
@@ -456,35 +458,46 @@ int32_t PepperTCPSocketMessageFilter::OnMsgSetOption(
switch (name) {
case PP_TCPSOCKET_OPTION_NO_DELAY: {
- if (state_.state() != TCPSocketState::CONNECTED)
- return PP_ERROR_FAILED;
-
bool boolean_value = false;
if (!value.GetBool(&boolean_value))
return PP_ERROR_BADARGUMENT;
- return socket_->SetNoDelay(boolean_value) ? PP_OK : PP_ERROR_FAILED;
+ if (state_.state() == TCPSocketState::CONNECTED)
+ return socket_->SetNoDelay(boolean_value) ? PP_OK : PP_ERROR_FAILED;
+
+ if (boolean_value) {
+ socket_options_ |= SOCKET_OPTION_NODELAY;
+ } else {
+ socket_options_ &= ~SOCKET_OPTION_NODELAY;
+ }
+ return PP_OK;
}
case PP_TCPSOCKET_OPTION_SEND_BUFFER_SIZE:
case PP_TCPSOCKET_OPTION_RECV_BUFFER_SIZE: {
- if (state_.state() != TCPSocketState::CONNECTED)
- return PP_ERROR_FAILED;
-
int32_t integer_value = 0;
if (!value.GetInt32(&integer_value) || integer_value <= 0)
return PP_ERROR_BADARGUMENT;
- int net_result = net::ERR_UNEXPECTED;
if (name == PP_TCPSOCKET_OPTION_SEND_BUFFER_SIZE) {
if (integer_value > TCPSocketResourceBase::kMaxSendBufferSize)
return PP_ERROR_BADARGUMENT;
- net_result = socket_->SetSendBufferSize(integer_value);
+ if (state_.state() == TCPSocketState::CONNECTED) {
+ return NetErrorToPepperError(
+ socket_->SetSendBufferSize(integer_value));
+ }
+ socket_options_ |= SOCKET_OPTION_SNDBUF_SIZE;
+ sndbuf_size_ = integer_value;
+ return PP_OK;
} else {
if (integer_value > TCPSocketResourceBase::kMaxReceiveBufferSize)
return PP_ERROR_BADARGUMENT;
- net_result = socket_->SetReceiveBufferSize(integer_value);
+ if (state_.state() == TCPSocketState::CONNECTED) {
+ return NetErrorToPepperError(
+ socket_->SetReceiveBufferSize(integer_value));
+ }
+ socket_options_ |= SOCKET_OPTION_RCVBUF_SIZE;
+ rcvbuf_size_ = integer_value;
+ return PP_OK;
}
- // TODO(wtc): Add error mapping code.
- return (net_result == net::OK) ? PP_OK : PP_ERROR_FAILED;
}
default: {
NOTREACHED();
@@ -749,6 +762,25 @@ void PepperTCPSocketMessageFilter::OnConnectCompleted(
}
socket_->SetDefaultOptionsForClient();
+ // NODELAY is set by SetDefaultOptionsForClient().
+ if (!(socket_options_ & SOCKET_OPTION_NODELAY)) {
+ pp_result = NetErrorToPepperError(socket_->SetNoDelay(false));
+ if (pp_result != PP_OK)
+ break;
+ }
+ if (socket_options_ & SOCKET_OPTION_RCVBUF_SIZE) {
+ pp_result = NetErrorToPepperError(
+ socket_->SetReceiveBufferSize(rcvbuf_size_));
+ if (pp_result != PP_OK)
+ break;
+ }
+ if (socket_options_ & SOCKET_OPTION_SNDBUF_SIZE) {
+ pp_result = NetErrorToPepperError(
+ socket_->SetSendBufferSize(sndbuf_size_));
+ if (pp_result != PP_OK)
+ break;
+ }
+ socket_options_ = SOCKET_OPTION_NODELAY;
SendConnectReply(context, PP_OK, local_addr, remote_addr);
state_.CompletePendingTransition(true);
return;

Powered by Google App Engine
This is Rietveld 408576698