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

Side by Side Diff: ppapi/shared_impl/private/udp_socket_private_impl.cc

Issue 10909244: PPAPI: Get TrackedCallback ready for running on non-main threads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged. Created 8 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/shared_impl/private/udp_socket_private_impl.h" 5 #include "ppapi/shared_impl/private/udp_socket_private_impl.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 if (!TrackedCallback::IsPending(bind_callback_)) { 155 if (!TrackedCallback::IsPending(bind_callback_)) {
156 NOTREACHED(); 156 NOTREACHED();
157 return; 157 return;
158 } 158 }
159 159
160 if (succeeded) 160 if (succeeded)
161 bound_ = true; 161 bound_ = true;
162 162
163 bound_addr_ = addr; 163 bound_addr_ = addr;
164 164
165 TrackedCallback::ClearAndRun(&bind_callback_, 165 bind_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED);
166 succeeded ? PP_OK : PP_ERROR_FAILED);
167 } 166 }
168 167
169 void UDPSocketPrivateImpl::OnRecvFromCompleted( 168 void UDPSocketPrivateImpl::OnRecvFromCompleted(
170 bool succeeded, 169 bool succeeded,
171 const std::string& data, 170 const std::string& data,
172 const PP_NetAddress_Private& addr) { 171 const PP_NetAddress_Private& addr) {
173 if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) { 172 if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) {
174 NOTREACHED(); 173 NOTREACHED();
175 return; 174 return;
176 } 175 }
177 176
178 if (succeeded) { 177 if (succeeded) {
179 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); 178 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_);
180 if (!data.empty()) 179 if (!data.empty())
181 memcpy(read_buffer_, data.c_str(), data.size()); 180 memcpy(read_buffer_, data.c_str(), data.size());
182 } 181 }
183 read_buffer_ = NULL; 182 read_buffer_ = NULL;
184 bytes_to_read_ = -1; 183 bytes_to_read_ = -1;
185 recvfrom_addr_ = addr; 184 recvfrom_addr_ = addr;
186 185
187 TrackedCallback::ClearAndRun(&recvfrom_callback_, 186 recvfrom_callback_->Run(succeeded ? static_cast<int32_t>(data.size()) :
188 succeeded ? static_cast<int32_t>(data.size()) :
189 static_cast<int32_t>(PP_ERROR_FAILED)); 187 static_cast<int32_t>(PP_ERROR_FAILED));
190 } 188 }
191 189
192 void UDPSocketPrivateImpl::OnSendToCompleted(bool succeeded, 190 void UDPSocketPrivateImpl::OnSendToCompleted(bool succeeded,
193 int32_t bytes_written) { 191 int32_t bytes_written) {
194 if (!TrackedCallback::IsPending(sendto_callback_)) { 192 if (!TrackedCallback::IsPending(sendto_callback_)) {
195 NOTREACHED(); 193 NOTREACHED();
196 return; 194 return;
197 } 195 }
198 196
199 TrackedCallback::ClearAndRun(&sendto_callback_, 197 sendto_callback_->Run(
200 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); 198 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED));
201 } 199 }
202 200
203 void UDPSocketPrivateImpl::Init(uint32 socket_id) { 201 void UDPSocketPrivateImpl::Init(uint32 socket_id) {
204 DCHECK(socket_id != 0); 202 DCHECK(socket_id != 0);
205 socket_id_ = socket_id; 203 socket_id_ = socket_id;
206 bound_ = false; 204 bound_ = false;
207 closed_ = false; 205 closed_ = false;
208 read_buffer_ = NULL; 206 read_buffer_ = NULL;
209 bytes_to_read_ = -1; 207 bytes_to_read_ = -1;
210 208
211 recvfrom_addr_.size = 0; 209 recvfrom_addr_.size = 0;
212 memset(recvfrom_addr_.data, 0, 210 memset(recvfrom_addr_.data, 0,
213 arraysize(recvfrom_addr_.data) * sizeof(*recvfrom_addr_.data)); 211 arraysize(recvfrom_addr_.data) * sizeof(*recvfrom_addr_.data));
214 bound_addr_.size = 0; 212 bound_addr_.size = 0;
215 memset(bound_addr_.data, 0, 213 memset(bound_addr_.data, 0,
216 arraysize(bound_addr_.data) * sizeof(*bound_addr_.data)); 214 arraysize(bound_addr_.data) * sizeof(*bound_addr_.data));
217 } 215 }
218 216
219 void UDPSocketPrivateImpl::PostAbortIfNecessary( 217 void UDPSocketPrivateImpl::PostAbortIfNecessary(
220 scoped_refptr<TrackedCallback>* callback) { 218 scoped_refptr<TrackedCallback>* callback) {
221 if (callback->get()) 219 if (TrackedCallback::IsPending(*callback))
222 (*callback)->PostAbort(); 220 (*callback)->PostAbort();
223 } 221 }
224 222
225 } // namespace ppapi 223 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/shared_impl/private/tcp_socket_private_impl.cc ('k') | ppapi/shared_impl/tracked_callback.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698