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

Unified Diff: ppapi/shared_impl/private/tcp_socket_private_impl.cc

Issue 10081020: PPAPI: Make blocking completion callbacks work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: export AssertLockHeld Created 8 years, 6 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: ppapi/shared_impl/private/tcp_socket_private_impl.cc
diff --git a/ppapi/shared_impl/private/tcp_socket_private_impl.cc b/ppapi/shared_impl/private/tcp_socket_private_impl.cc
index a23066c44fbfb05f7859f45ed6761a6e45cdc490..c4a9a17bf829c05db6c119b9e375c435a80cd3c1 100644
--- a/ppapi/shared_impl/private/tcp_socket_private_impl.cc
+++ b/ppapi/shared_impl/private/tcp_socket_private_impl.cc
@@ -50,17 +50,15 @@ TCPSocketPrivateImpl::AsPPB_TCPSocket_Private_API() {
int32_t TCPSocketPrivateImpl::Connect(const char* host,
uint16_t port,
- PP_CompletionCallback callback) {
+ scoped_refptr<TrackedCallback> callback) {
if (!host)
return PP_ERROR_BADARGUMENT;
- if (!callback.func)
- return PP_ERROR_BLOCKS_MAIN_THREAD;
if (connection_state_ != BEFORE_CONNECT)
return PP_ERROR_FAILED;
if (TrackedCallback::IsPending(connect_callback_))
return PP_ERROR_INPROGRESS; // Can only have one pending request.
- connect_callback_ = new TrackedCallback(this, callback);
+ connect_callback_ = callback;
// Send the request, the browser will call us back via ConnectACK.
SendConnect(host, port);
return PP_OK_COMPLETIONPENDING;
@@ -68,17 +66,15 @@ int32_t TCPSocketPrivateImpl::Connect(const char* host,
int32_t TCPSocketPrivateImpl::ConnectWithNetAddress(
const PP_NetAddress_Private* addr,
- PP_CompletionCallback callback) {
+ scoped_refptr<TrackedCallback> callback) {
if (!addr)
return PP_ERROR_BADARGUMENT;
- if (!callback.func)
- return PP_ERROR_BLOCKS_MAIN_THREAD;
if (connection_state_ != BEFORE_CONNECT)
return PP_ERROR_FAILED;
if (TrackedCallback::IsPending(connect_callback_))
return PP_ERROR_INPROGRESS; // Can only have one pending request.
- connect_callback_ = new TrackedCallback(this, callback);
+ connect_callback_ = callback;
// Send the request, the browser will call us back via ConnectACK.
SendConnectWithNetAddress(*addr);
return PP_OK_COMPLETIONPENDING;
@@ -102,13 +98,12 @@ PP_Bool TCPSocketPrivateImpl::GetRemoteAddress(
return PP_TRUE;
}
-int32_t TCPSocketPrivateImpl::SSLHandshake(const char* server_name,
- uint16_t server_port,
- PP_CompletionCallback callback) {
+int32_t TCPSocketPrivateImpl::SSLHandshake(
+ const char* server_name,
+ uint16_t server_port,
+ scoped_refptr<TrackedCallback> callback) {
if (!server_name)
return PP_ERROR_BADARGUMENT;
- if (!callback.func)
- return PP_ERROR_BLOCKS_MAIN_THREAD;
if (connection_state_ != CONNECTED)
return PP_ERROR_FAILED;
@@ -117,7 +112,7 @@ int32_t TCPSocketPrivateImpl::SSLHandshake(const char* server_name,
TrackedCallback::IsPending(write_callback_))
return PP_ERROR_INPROGRESS;
- ssl_handshake_callback_ = new TrackedCallback(this, callback);
+ ssl_handshake_callback_ = callback;
// Send the request, the browser will call us back via SSLHandshakeACK.
SendSSLHandshake(server_name, server_port, trusted_certificates_,
@@ -164,22 +159,18 @@ PP_Bool TCPSocketPrivateImpl::AddChainBuildingCertificate(
int32_t TCPSocketPrivateImpl::Read(char* buffer,
int32_t bytes_to_read,
- PP_CompletionCallback callback) {
+ scoped_refptr<TrackedCallback> callback) {
if (!buffer || bytes_to_read <= 0)
return PP_ERROR_BADARGUMENT;
- if (!callback.func)
- return PP_ERROR_BLOCKS_MAIN_THREAD;
if (!IsConnected())
return PP_ERROR_FAILED;
if (TrackedCallback::IsPending(read_callback_) ||
TrackedCallback::IsPending(ssl_handshake_callback_))
return PP_ERROR_INPROGRESS;
- // TODO(dmichael): use some other strategy for determining if an
- // operation is in progress
read_buffer_ = buffer;
bytes_to_read_ = std::min(bytes_to_read, kMaxReadSize);
- read_callback_ = new TrackedCallback(this, callback);
+ read_callback_ = callback;
// Send the request, the browser will call us back via ReadACK.
SendRead(bytes_to_read_);
@@ -188,11 +179,9 @@ int32_t TCPSocketPrivateImpl::Read(char* buffer,
int32_t TCPSocketPrivateImpl::Write(const char* buffer,
int32_t bytes_to_write,
- PP_CompletionCallback callback) {
+ scoped_refptr<TrackedCallback> callback) {
if (!buffer || bytes_to_write <= 0)
return PP_ERROR_BADARGUMENT;
- if (!callback.func)
- return PP_ERROR_BLOCKS_MAIN_THREAD;
if (!IsConnected())
return PP_ERROR_FAILED;
@@ -203,7 +192,7 @@ int32_t TCPSocketPrivateImpl::Write(const char* buffer,
if (bytes_to_write > kMaxWriteSize)
bytes_to_write = kMaxWriteSize;
- write_callback_ = new TrackedCallback(this, callback);
+ write_callback_ = callback;
// Send the request, the browser will call us back via WriteACK.
SendWrite(std::string(buffer, bytes_to_write));
« no previous file with comments | « ppapi/shared_impl/private/tcp_socket_private_impl.h ('k') | ppapi/shared_impl/private/udp_socket_private_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698