summaryrefslogtreecommitdiffstats
path: root/ppapi/shared_impl
diff options
context:
space:
mode:
authorwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-22 11:17:08 +0000
committerwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-22 11:17:08 +0000
commit466a583aa3b19736c510b0c10d481eb3787a6c8c (patch)
tree9f9951426645a7e60fc1153bb78bdd32ba6ab45a /ppapi/shared_impl
parent6601b6d4374c6d7e3ef93ff7ab79eb040ae71c02 (diff)
downloadchromium_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.cc32
-rw-r--r--ppapi/shared_impl/private/tcp_socket_private_impl.h7
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_;