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

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

Issue 9053003: Convert ppapi/shared to use TrackedCallback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review comments Created 8 years, 12 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/udp_socket_private_impl.cc
diff --git a/ppapi/shared_impl/private/udp_socket_private_impl.cc b/ppapi/shared_impl/private/udp_socket_private_impl.cc
index 388d15922b54dfa1acaa0c111a75281a10dda472..23f125d0acf1fca4445284ef33bf72078e7cd2bf 100644
--- a/ppapi/shared_impl/private/udp_socket_private_impl.cc
+++ b/ppapi/shared_impl/private/udp_socket_private_impl.cc
@@ -17,14 +17,6 @@
namespace ppapi {
-namespace {
-
-void AbortCallback(PP_CompletionCallback callback) {
- PP_RunCompletionCallback(&callback, PP_ERROR_ABORTED);
-}
-
-} // namespace
-
const int32_t UDPSocketPrivateImpl::kMaxReadSize = 1024 * 1024;
const int32_t UDPSocketPrivateImpl::kMaxWriteSize = 1024 * 1024;
@@ -54,12 +46,12 @@ int32_t UDPSocketPrivateImpl::Bind(const PP_NetAddress_Private* addr,
return PP_ERROR_BADARGUMENT;
if (bound_ || closed_)
return PP_ERROR_FAILED;
- if (bind_callback_.func)
+ if (TrackedCallback::IsPending(bind_callback_))
return PP_ERROR_INPROGRESS;
// TODO(dmichael): use some other strategy for determining if an
// operation is in progress
- bind_callback_ = callback;
+ bind_callback_ = new TrackedCallback(this, callback);
// Send the request, the browser will call us back via BindACK.
SendBind(*addr);
@@ -73,12 +65,12 @@ int32_t UDPSocketPrivateImpl::RecvFrom(char* buffer,
return PP_ERROR_BADARGUMENT;
if (!bound_)
return PP_ERROR_FAILED;
- if (recvfrom_callback_.func)
+ if (TrackedCallback::IsPending(recvfrom_callback_))
return PP_ERROR_INPROGRESS;
read_buffer_ = buffer;
bytes_to_read_ = std::min(num_bytes, kMaxReadSize);
- recvfrom_callback_ = callback;
+ recvfrom_callback_ = new TrackedCallback(this, callback);
// Send the request, the browser will call us back via RecvFromACK.
SendRecvFrom(bytes_to_read_);
@@ -101,13 +93,13 @@ int32_t UDPSocketPrivateImpl::SendTo(const char* buffer,
return PP_ERROR_BADARGUMENT;
if (!bound_)
return PP_ERROR_FAILED;
- if (sendto_callback_.func)
+ if (TrackedCallback::IsPending(sendto_callback_))
return PP_ERROR_INPROGRESS;
if (num_bytes > kMaxWriteSize)
num_bytes = kMaxWriteSize;
- sendto_callback_ = callback;
+ sendto_callback_ = new TrackedCallback(this, callback);
// Send the request, the browser will call us back via SendToACK.
SendSendTo(std::string(buffer, num_bytes), *addr);
@@ -125,13 +117,13 @@ void UDPSocketPrivateImpl::Close() {
socket_id_ = 0;
- PostAbortAndClearIfNecessary(&bind_callback_);
- PostAbortAndClearIfNecessary(&recvfrom_callback_);
- PostAbortAndClearIfNecessary(&sendto_callback_);
+ PostAbortIfNecessary(&bind_callback_);
+ PostAbortIfNecessary(&recvfrom_callback_);
+ PostAbortIfNecessary(&sendto_callback_);
}
void UDPSocketPrivateImpl::OnBindCompleted(bool succeeded) {
- if (!bind_callback_.func) {
+ if (!TrackedCallback::IsPending(bind_callback_)) {
NOTREACHED();
return;
}
@@ -139,15 +131,15 @@ void UDPSocketPrivateImpl::OnBindCompleted(bool succeeded) {
if (succeeded)
bound_ = true;
- PP_RunAndClearCompletionCallback(&bind_callback_,
- succeeded ? PP_OK : PP_ERROR_FAILED);
+ TrackedCallback::ClearAndRun(&bind_callback_,
+ succeeded ? PP_OK : PP_ERROR_FAILED);
}
void UDPSocketPrivateImpl::OnRecvFromCompleted(
bool succeeded,
const std::string& data,
const PP_NetAddress_Private& addr) {
- if (!recvfrom_callback_.func || !read_buffer_) {
+ if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) {
NOTREACHED();
return;
}
@@ -161,21 +153,19 @@ void UDPSocketPrivateImpl::OnRecvFromCompleted(
bytes_to_read_ = -1;
recvfrom_addr_ = addr;
- PP_RunAndClearCompletionCallback(
- &recvfrom_callback_,
+ TrackedCallback::ClearAndRun(&recvfrom_callback_,
succeeded ? static_cast<int32_t>(data.size()) :
static_cast<int32_t>(PP_ERROR_FAILED));
}
void UDPSocketPrivateImpl::OnSendToCompleted(bool succeeded,
int32_t bytes_written) {
- if (!sendto_callback_.func) {
+ if (!TrackedCallback::IsPending(sendto_callback_)) {
NOTREACHED();
return;
}
- PP_RunAndClearCompletionCallback(
- &sendto_callback_,
+ TrackedCallback::ClearAndRun(&sendto_callback_,
succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED));
}
@@ -184,9 +174,6 @@ void UDPSocketPrivateImpl::Init(uint32 socket_id) {
socket_id_ = socket_id;
bound_ = false;
closed_ = false;
- bind_callback_ = PP_BlockUntilComplete();
- recvfrom_callback_ = PP_BlockUntilComplete();
- sendto_callback_ = PP_BlockUntilComplete();
read_buffer_ = NULL;
bytes_to_read_ = -1;
@@ -195,15 +182,10 @@ void UDPSocketPrivateImpl::Init(uint32 socket_id) {
arraysize(recvfrom_addr_.data) * sizeof(*recvfrom_addr_.data));
}
-void UDPSocketPrivateImpl::PostAbortAndClearIfNecessary(
- PP_CompletionCallback* callback) {
- DCHECK(callback);
-
- if (callback->func) {
- MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(&AbortCallback, *callback));
- *callback = PP_BlockUntilComplete();
- }
+void UDPSocketPrivateImpl::PostAbortIfNecessary(
viettrungluu 2012/01/04 01:15:14 "
+ scoped_refptr<TrackedCallback>* callback) {
+ if (callback->get())
+ (*callback)->PostAbort();
}
} // namespace ppapi

Powered by Google App Engine
This is Rietveld 408576698