diff options
author | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-22 11:17:08 +0000 |
---|---|---|
committer | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-22 11:17:08 +0000 |
commit | 466a583aa3b19736c510b0c10d481eb3787a6c8c (patch) | |
tree | 9f9951426645a7e60fc1153bb78bdd32ba6ab45a /ppapi/shared_impl | |
parent | 6601b6d4374c6d7e3ef93ff7ab79eb040ae71c02 (diff) | |
download | chromium_src-466a583aa3b19736c510b0c10d481eb3787a6c8c.zip chromium_src-466a583aa3b19736c510b0c10d481eb3787a6c8c.tar.gz chromium_src-466a583aa3b19736c510b0c10d481eb3787a6c8c.tar.bz2 |
Provide a way to disable Nagle's algorithm on Pepper TCP sockets.
This CL adds a SetSocketFeature() API to PPB_TCPSocket_Private, supporting one
option, to control Nagle's algorithim on the underlying socket.
BUG=170248
Review URL: https://chromiumcodereview.appspot.com/12220050
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@184087 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/shared_impl')
-rw-r--r-- | ppapi/shared_impl/private/tcp_socket_private_impl.cc | 32 | ||||
-rw-r--r-- | ppapi/shared_impl/private/tcp_socket_private_impl.h | 7 |
2 files changed, 39 insertions, 0 deletions
diff --git a/ppapi/shared_impl/private/tcp_socket_private_impl.cc b/ppapi/shared_impl/private/tcp_socket_private_impl.cc index e2c645f0..87cc600 100644 --- a/ppapi/shared_impl/private/tcp_socket_private_impl.cc +++ b/ppapi/shared_impl/private/tcp_socket_private_impl.cc @@ -212,11 +212,34 @@ void TCPSocketPrivateImpl::Disconnect() { PostAbortIfNecessary(&ssl_handshake_callback_); PostAbortIfNecessary(&read_callback_); PostAbortIfNecessary(&write_callback_); + PostAbortIfNecessary(&set_option_callback_); read_buffer_ = NULL; bytes_to_read_ = -1; server_certificate_ = NULL; } +int32_t TCPSocketPrivateImpl::SetOption( + PP_TCPSocketOption_Private name, + const PP_Var& value, + scoped_refptr<TrackedCallback> callback) { + if (!IsConnected()) + return PP_ERROR_FAILED; + if (TrackedCallback::IsPending(set_option_callback_)) + return PP_ERROR_INPROGRESS; + + set_option_callback_ = callback; + + switch (name) { + case PP_TCPSOCKETOPTION_NO_DELAY: + if (value.type != PP_VARTYPE_BOOL) + return PP_ERROR_BADARGUMENT; + SendSetBoolOption(name, PP_ToBool(value.value.as_bool)); + return PP_OK_COMPLETIONPENDING; + default: + return PP_ERROR_BADARGUMENT; + } +} + void TCPSocketPrivateImpl::OnConnectCompleted( bool succeeded, const PP_NetAddress_Private& local_addr, @@ -293,6 +316,15 @@ void TCPSocketPrivateImpl::OnWriteCompleted(bool succeeded, succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); } +void TCPSocketPrivateImpl::OnSetOptionCompleted(bool succeeded) { + if (!TrackedCallback::IsPending(set_option_callback_)) { + NOTREACHED(); + return; + } + + set_option_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED); +} + void TCPSocketPrivateImpl::Init(uint32 socket_id) { DCHECK(socket_id != 0); socket_id_ = socket_id; diff --git a/ppapi/shared_impl/private/tcp_socket_private_impl.h b/ppapi/shared_impl/private/tcp_socket_private_impl.h index 2792102..95057e7 100644 --- a/ppapi/shared_impl/private/tcp_socket_private_impl.h +++ b/ppapi/shared_impl/private/tcp_socket_private_impl.h @@ -66,6 +66,9 @@ class PPAPI_SHARED_EXPORT TCPSocketPrivateImpl int32_t bytes_to_write, scoped_refptr<TrackedCallback> callback) OVERRIDE; virtual void Disconnect() OVERRIDE; + virtual int32_t SetOption(PP_TCPSocketOption_Private name, + const PP_Var& value, + scoped_refptr<TrackedCallback> callback) OVERRIDE; // Notifications on operations completion. void OnConnectCompleted(bool succeeded, @@ -76,6 +79,7 @@ class PPAPI_SHARED_EXPORT TCPSocketPrivateImpl const PPB_X509Certificate_Fields& certificate_fields); void OnReadCompleted(bool succeeded, const std::string& data); void OnWriteCompleted(bool succeeded, int32_t bytes_written); + void OnSetOptionCompleted(bool succeeded); // Send functions that need to be implemented differently for the // proxied and non-proxied derived classes. @@ -89,6 +93,8 @@ class PPAPI_SHARED_EXPORT TCPSocketPrivateImpl virtual void SendRead(int32_t bytes_to_read) = 0; virtual void SendWrite(const std::string& buffer) = 0; virtual void SendDisconnect() = 0; + virtual void SendSetBoolOption(PP_TCPSocketOption_Private name, + bool value) = 0; protected: enum ConnectionState { @@ -117,6 +123,7 @@ class PPAPI_SHARED_EXPORT TCPSocketPrivateImpl scoped_refptr<TrackedCallback> ssl_handshake_callback_; scoped_refptr<TrackedCallback> read_callback_; scoped_refptr<TrackedCallback> write_callback_; + scoped_refptr<TrackedCallback> set_option_callback_; char* read_buffer_; int32_t bytes_to_read_; |