OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/proxy/udp_socket_filter.h" | 5 #include "ppapi/proxy/udp_socket_filter.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstring> | 8 #include <cstring> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 if (TrackedCallback::IsPending(recvfrom_callback_)) | 146 if (TrackedCallback::IsPending(recvfrom_callback_)) |
147 recvfrom_callback_->PostAbort(); | 147 recvfrom_callback_->PostAbort(); |
148 } | 148 } |
149 | 149 |
150 void UDPSocketFilter::RecvQueue::DataReceivedOnIOThread( | 150 void UDPSocketFilter::RecvQueue::DataReceivedOnIOThread( |
151 int32_t result, | 151 int32_t result, |
152 const std::string& data, | 152 const std::string& data, |
153 const PP_NetAddress_Private& addr) { | 153 const PP_NetAddress_Private& addr) { |
154 DCHECK(PluginGlobals::Get()->ipc_task_runner()->RunsTasksOnCurrentThread()); | 154 DCHECK(PluginGlobals::Get()->ipc_task_runner()->RunsTasksOnCurrentThread()); |
155 DCHECK_LT(recv_buffers_.size(), | 155 DCHECK_LT(recv_buffers_.size(), |
156 UDPSocketResourceConstants::kPluginReceiveBufferSlots); | 156 static_cast<size_t>( |
| 157 UDPSocketResourceConstants::kPluginReceiveBufferSlots)); |
157 | 158 |
158 if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) { | 159 if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) { |
159 recv_buffers_.push(RecvBuffer()); | 160 recv_buffers_.push(RecvBuffer()); |
160 RecvBuffer& back = recv_buffers_.back(); | 161 RecvBuffer& back = recv_buffers_.back(); |
161 back.result = result; | 162 back.result = result; |
162 back.data = data; | 163 back.data = data; |
163 back.addr = addr; | 164 back.addr = addr; |
164 return; | 165 return; |
165 } | 166 } |
166 DCHECK_EQ(recv_buffers_.size(), 0u); | 167 DCHECK_EQ(recv_buffers_.size(), 0u); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 PP_Resource* addr_out, | 207 PP_Resource* addr_out, |
207 const scoped_refptr<TrackedCallback>& callback) { | 208 const scoped_refptr<TrackedCallback>& callback) { |
208 ProxyLock::AssertAcquired(); | 209 ProxyLock::AssertAcquired(); |
209 if (!buffer_out || num_bytes <= 0) | 210 if (!buffer_out || num_bytes <= 0) |
210 return PP_ERROR_BADARGUMENT; | 211 return PP_ERROR_BADARGUMENT; |
211 if (TrackedCallback::IsPending(recvfrom_callback_)) | 212 if (TrackedCallback::IsPending(recvfrom_callback_)) |
212 return PP_ERROR_INPROGRESS; | 213 return PP_ERROR_INPROGRESS; |
213 | 214 |
214 if (recv_buffers_.empty()) { | 215 if (recv_buffers_.empty()) { |
215 read_buffer_ = buffer_out; | 216 read_buffer_ = buffer_out; |
216 bytes_to_read_ = | 217 bytes_to_read_ = std::min( |
217 std::min(num_bytes, UDPSocketResourceConstants::kMaxReadSize); | 218 num_bytes, |
| 219 static_cast<int32_t>(UDPSocketResourceConstants::kMaxReadSize)); |
218 recvfrom_addr_resource_ = addr_out; | 220 recvfrom_addr_resource_ = addr_out; |
219 recvfrom_callback_ = callback; | 221 recvfrom_callback_ = callback; |
220 return PP_OK_COMPLETIONPENDING; | 222 return PP_OK_COMPLETIONPENDING; |
221 } else { | 223 } else { |
222 RecvBuffer& front = recv_buffers_.front(); | 224 RecvBuffer& front = recv_buffers_.front(); |
223 | 225 |
224 if (static_cast<size_t>(num_bytes) < front.data.size()) | 226 if (static_cast<size_t>(num_bytes) < front.data.size()) |
225 return PP_ERROR_MESSAGE_TOO_BIG; | 227 return PP_ERROR_MESSAGE_TOO_BIG; |
226 | 228 |
227 int32_t result = static_cast<int32_t>(front.data.size()); | 229 int32_t result = static_cast<int32_t>(front.data.size()); |
228 std::unique_ptr<std::string> data_to_pass(new std::string); | 230 std::unique_ptr<std::string> data_to_pass(new std::string); |
229 data_to_pass->swap(front.data); | 231 data_to_pass->swap(front.data); |
230 SetRecvFromOutput(pp_instance_, std::move(data_to_pass), front.addr, | 232 SetRecvFromOutput(pp_instance_, std::move(data_to_pass), front.addr, |
231 buffer_out, num_bytes, addr_out, PP_OK); | 233 buffer_out, num_bytes, addr_out, PP_OK); |
232 last_recvfrom_addr_ = front.addr; | 234 last_recvfrom_addr_ = front.addr; |
233 recv_buffers_.pop(); | 235 recv_buffers_.pop(); |
234 slot_available_callback_.Run(); | 236 slot_available_callback_.Run(); |
235 | 237 |
236 return result; | 238 return result; |
237 } | 239 } |
238 } | 240 } |
239 | 241 |
240 PP_NetAddress_Private UDPSocketFilter::RecvQueue::GetLastAddrPrivate() const { | 242 PP_NetAddress_Private UDPSocketFilter::RecvQueue::GetLastAddrPrivate() const { |
241 CHECK(private_api_); | 243 CHECK(private_api_); |
242 return last_recvfrom_addr_; | 244 return last_recvfrom_addr_; |
243 } | 245 } |
244 | 246 |
245 } // namespace proxy | 247 } // namespace proxy |
246 } // namespace ppapi | 248 } // namespace ppapi |
OLD | NEW |