Index: content/browser/renderer_host/pepper/pepper_tcp_socket.cc |
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket.cc b/content/browser/renderer_host/pepper/pepper_tcp_socket.cc |
index aeb0425e652f29825a23c721bf164c87320965ca..baa60e3081188f463be235c8ea7601beea5650aa 100644 |
--- a/content/browser/renderer_host/pepper/pepper_tcp_socket.cc |
+++ b/content/browser/renderer_host/pepper/pepper_tcp_socket.cc |
@@ -196,11 +196,33 @@ void PepperTCPSocket::Write(const std::string& data) { |
DoWrite(); |
} |
+void PepperTCPSocket::SetBoolOption(uint32_t name, bool value) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ DCHECK(socket_.get()); |
+ |
+ switch (name) { |
+ case PP_TCPSOCKETOPTION_NO_DELAY: |
+ if (!IsSsl()) { |
+ net::TCPClientSocket* tcp_socket = |
+ static_cast<net::TCPClientSocket*>(socket_.get()); |
+ SendSetBoolOptionACK(tcp_socket->SetNoDelay(value)); |
+ } else { |
+ SendSetBoolOptionACK(false); |
+ } |
+ return; |
+ default: |
+ break; |
+ } |
+ |
+ NOTREACHED(); |
+ SendSetBoolOptionACK(false); |
+} |
+ |
void PepperTCPSocket::StartConnect(const net::AddressList& addresses) { |
DCHECK(connection_state_ == CONNECT_IN_PROGRESS); |
- socket_.reset( |
- new net::TCPClientSocket(addresses, NULL, net::NetLog::Source())); |
+ socket_.reset(new net::TCPClientSocket(addresses, NULL, |
+ net::NetLog::Source())); |
int result = socket_->Connect( |
base::Bind(&PepperTCPSocket::OnConnectCompleted, |
base::Unretained(this))); |
@@ -303,6 +325,11 @@ void PepperTCPSocket::SendSSLHandshakeACK(bool succeeded) { |
certificate_fields)); |
} |
+void PepperTCPSocket::SendSetBoolOptionACK(bool succeeded) { |
+ manager_->Send(new PpapiMsg_PPBTCPSocket_SetBoolOptionACK( |
+ routing_id_, plugin_dispatcher_id_, socket_id_, succeeded)); |
+} |
+ |
void PepperTCPSocket::OnResolveCompleted(int result) { |
DCHECK(connection_state_ == CONNECT_IN_PROGRESS); |
@@ -405,6 +432,12 @@ bool PepperTCPSocket::IsConnected() const { |
return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED; |
} |
+bool PepperTCPSocket::IsSsl() const { |
+ return connection_state_ == SSL_HANDSHAKE_IN_PROGRESS || |
+ connection_state_ == SSL_CONNECTED || |
+ connection_state_ == SSL_HANDSHAKE_FAILED; |
+} |
+ |
void PepperTCPSocket::DoWrite() { |
DCHECK(write_buffer_base_.get()); |
DCHECK(write_buffer_.get()); |