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

Side by Side Diff: mojo/services/network/public/cpp/udp_socket_wrapper.cc

Issue 1539863002: Convert Pass()→std::move() in mojo/services/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix missing forward declare that was masked by pre-existing incorrect #include ordering. Created 5 years 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "network/public/cpp/udp_socket_wrapper.h"
6
7 #include <assert.h> 5 #include <assert.h>
6 #include <utility>
8 7
9 #include "mojo/public/cpp/environment/logging.h" 8 #include "mojo/public/cpp/environment/logging.h"
9 #include "network/public/cpp/udp_socket_wrapper.h"
10 10
11 namespace mojo { 11 namespace mojo {
12 namespace { 12 namespace {
13 13
14 const uint32_t kDefaultReceiveQueueSlots = 32; 14 const uint32_t kDefaultReceiveQueueSlots = 32;
15 15
16 } // namespace 16 } // namespace
17 17
18 UDPSocketWrapper::NegotiateCallbackHandler::NegotiateCallbackHandler( 18 UDPSocketWrapper::NegotiateCallbackHandler::NegotiateCallbackHandler(
19 UDPSocketWrapper* delegate) 19 UDPSocketWrapper* delegate)
(...skipping 10 matching lines...) Expand all
30 UDPSocketWrapper::SendCallbackHandler::SendCallbackHandler( 30 UDPSocketWrapper::SendCallbackHandler::SendCallbackHandler(
31 UDPSocketWrapper* delegate, 31 UDPSocketWrapper* delegate,
32 const ErrorCallback& forward_callback) 32 const ErrorCallback& forward_callback)
33 : delegate_(delegate), 33 : delegate_(delegate),
34 forward_callback_(forward_callback) { 34 forward_callback_(forward_callback) {
35 } 35 }
36 36
37 UDPSocketWrapper::SendCallbackHandler::~SendCallbackHandler() {} 37 UDPSocketWrapper::SendCallbackHandler::~SendCallbackHandler() {}
38 38
39 void UDPSocketWrapper::SendCallbackHandler::Run(NetworkErrorPtr result) const { 39 void UDPSocketWrapper::SendCallbackHandler::Run(NetworkErrorPtr result) const {
40 delegate_->OnSendToCompleted(result.Pass(), forward_callback_); 40 delegate_->OnSendToCompleted(std::move(result), forward_callback_);
41 } 41 }
42 42
43 UDPSocketWrapper::ReceiverBindingCallback::ReceiverBindingCallback( 43 UDPSocketWrapper::ReceiverBindingCallback::ReceiverBindingCallback(
44 UDPSocketWrapper* delegate, 44 UDPSocketWrapper* delegate,
45 const Callback<void(NetworkErrorPtr, NetAddressPtr)>& wrapper_callback) 45 const Callback<void(NetworkErrorPtr, NetAddressPtr)>& wrapper_callback)
46 : delegate_(delegate), wrapper_callback_(wrapper_callback) { 46 : delegate_(delegate), wrapper_callback_(wrapper_callback) {
47 } 47 }
48 48
49 UDPSocketWrapper::ReceiverBindingCallback::~ReceiverBindingCallback() { 49 UDPSocketWrapper::ReceiverBindingCallback::~ReceiverBindingCallback() {
50 } 50 }
51 51
52 void UDPSocketWrapper::ReceiverBindingCallback::Run( 52 void UDPSocketWrapper::ReceiverBindingCallback::Run(
53 NetworkErrorPtr result, 53 NetworkErrorPtr result,
54 NetAddressPtr addr, 54 NetAddressPtr addr,
55 InterfaceRequest<UDPSocketReceiver> request) const { 55 InterfaceRequest<UDPSocketReceiver> request) const {
56 delegate_->StartReceivingData(request.Pass()); 56 delegate_->StartReceivingData(std::move(request));
57 wrapper_callback_.Run(result.Pass(), addr.Pass()); 57 wrapper_callback_.Run(std::move(result), std::move(addr));
58 } 58 }
59 59
60 UDPSocketWrapper::ReceivedData::ReceivedData() {} 60 UDPSocketWrapper::ReceivedData::ReceivedData() {}
61 UDPSocketWrapper::ReceivedData::~ReceivedData() {} 61 UDPSocketWrapper::ReceivedData::~ReceivedData() {}
62 62
63 UDPSocketWrapper::SendRequest::SendRequest() {} 63 UDPSocketWrapper::SendRequest::SendRequest() {}
64 UDPSocketWrapper::SendRequest::~SendRequest() {} 64 UDPSocketWrapper::SendRequest::~SendRequest() {}
65 65
66 UDPSocketWrapper::UDPSocketWrapper(UDPSocketPtr socket) 66 UDPSocketWrapper::UDPSocketWrapper(UDPSocketPtr socket)
67 : binding_(this), 67 : binding_(this),
68 socket_(socket.Pass()), 68 socket_(std::move(socket)),
69 max_receive_queue_size_(kDefaultReceiveQueueSlots), 69 max_receive_queue_size_(kDefaultReceiveQueueSlots),
70 max_pending_sends_(1), 70 max_pending_sends_(1),
71 current_pending_sends_(0) { 71 current_pending_sends_(0) {
72 Initialize(0); 72 Initialize(0);
73 } 73 }
74 74
75 UDPSocketWrapper::UDPSocketWrapper(UDPSocketPtr socket, 75 UDPSocketWrapper::UDPSocketWrapper(UDPSocketPtr socket,
76 uint32_t receive_queue_slots, 76 uint32_t receive_queue_slots,
77 uint32_t requested_max_pending_sends) 77 uint32_t requested_max_pending_sends)
78 : binding_(this), 78 : binding_(this),
79 socket_(socket.Pass()), 79 socket_(std::move(socket)),
80 max_receive_queue_size_(receive_queue_slots), 80 max_receive_queue_size_(receive_queue_slots),
81 max_pending_sends_(1), 81 max_pending_sends_(1),
82 current_pending_sends_(0) { 82 current_pending_sends_(0) {
83 Initialize(requested_max_pending_sends); 83 Initialize(requested_max_pending_sends);
84 } 84 }
85 85
86 UDPSocketWrapper::~UDPSocketWrapper() { 86 UDPSocketWrapper::~UDPSocketWrapper() {
87 while (!receive_queue_.empty()) { 87 while (!receive_queue_.empty()) {
88 delete receive_queue_.front(); 88 delete receive_queue_.front();
89 receive_queue_.pop(); 89 receive_queue_.pop();
90 } 90 }
91 while (!send_requests_.empty()) { 91 while (!send_requests_.empty()) {
92 delete send_requests_.front(); 92 delete send_requests_.front();
93 send_requests_.pop(); 93 send_requests_.pop();
94 } 94 }
95 } 95 }
96 96
97 void UDPSocketWrapper::AllowAddressReuse(const ErrorCallback& callback) { 97 void UDPSocketWrapper::AllowAddressReuse(const ErrorCallback& callback) {
98 socket_->AllowAddressReuse(callback); 98 socket_->AllowAddressReuse(callback);
99 } 99 }
100 100
101 void UDPSocketWrapper::Bind( 101 void UDPSocketWrapper::Bind(
102 NetAddressPtr addr, 102 NetAddressPtr addr,
103 const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) { 103 const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) {
104 socket_->Bind( 104 socket_->Bind(
105 addr.Pass(), 105 std::move(addr),
106 BindOrConnectCallback(static_cast<BindOrConnectCallback::Runnable*>( 106 BindOrConnectCallback(static_cast<BindOrConnectCallback::Runnable*>(
107 new ReceiverBindingCallback(this, callback)))); 107 new ReceiverBindingCallback(this, callback))));
108 } 108 }
109 109
110 void UDPSocketWrapper::Connect( 110 void UDPSocketWrapper::Connect(
111 NetAddressPtr remote_addr, 111 NetAddressPtr remote_addr,
112 const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) { 112 const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) {
113 socket_->Connect( 113 socket_->Connect(
114 remote_addr.Pass(), 114 std::move(remote_addr),
115 BindOrConnectCallback(static_cast<BindOrConnectCallback::Runnable*>( 115 BindOrConnectCallback(static_cast<BindOrConnectCallback::Runnable*>(
116 new ReceiverBindingCallback(this, callback)))); 116 new ReceiverBindingCallback(this, callback))));
117 } 117 }
118 118
119 void UDPSocketWrapper::SetSendBufferSize(uint32_t size, 119 void UDPSocketWrapper::SetSendBufferSize(uint32_t size,
120 const ErrorCallback& callback) { 120 const ErrorCallback& callback) {
121 socket_->SetSendBufferSize(size, callback); 121 socket_->SetSendBufferSize(size, callback);
122 } 122 }
123 123
124 void UDPSocketWrapper::SetReceiveBufferSize(uint32_t size, 124 void UDPSocketWrapper::SetReceiveBufferSize(uint32_t size,
125 const ErrorCallback& callback) { 125 const ErrorCallback& callback) {
126 socket_->SetReceiveBufferSize(size, callback); 126 socket_->SetReceiveBufferSize(size, callback);
127 } 127 }
128 128
129 bool UDPSocketWrapper::ReceiveFrom(const ReceiveCallback& callback) { 129 bool UDPSocketWrapper::ReceiveFrom(const ReceiveCallback& callback) {
130 if (receive_queue_.empty()) { 130 if (receive_queue_.empty()) {
131 receive_requests_.push(callback); 131 receive_requests_.push(callback);
132 return false; 132 return false;
133 } 133 }
134 134
135 ReceivedData* data = receive_queue_.front(); 135 ReceivedData* data = receive_queue_.front();
136 receive_queue_.pop(); 136 receive_queue_.pop();
137 socket_->ReceiveMore(1); 137 socket_->ReceiveMore(1);
138 callback.Run(data->result.Pass(), data->src_addr.Pass(), data->data.Pass()); 138 callback.Run(std::move(data->result), std::move(data->src_addr),
139 std::move(data->data));
139 delete data; 140 delete data;
140 return true; 141 return true;
141 } 142 }
142 143
143 void UDPSocketWrapper::SendTo(NetAddressPtr dest_addr, 144 void UDPSocketWrapper::SendTo(NetAddressPtr dest_addr,
144 Array<uint8_t> data, 145 Array<uint8_t> data,
145 const ErrorCallback& callback) { 146 const ErrorCallback& callback) {
146 if (current_pending_sends_ >= max_pending_sends_) { 147 if (current_pending_sends_ >= max_pending_sends_) {
147 SendRequest* request = new SendRequest(); 148 SendRequest* request = new SendRequest();
148 request->dest_addr = dest_addr.Pass(); 149 request->dest_addr = std::move(dest_addr);
149 request->data = data.Pass(); 150 request->data = std::move(data);
150 request->callback = callback; 151 request->callback = callback;
151 send_requests_.push(request); 152 send_requests_.push(request);
152 return; 153 return;
153 } 154 }
154 155
155 MOJO_DCHECK(send_requests_.empty()); 156 MOJO_DCHECK(send_requests_.empty());
156 current_pending_sends_++; 157 current_pending_sends_++;
157 socket_->SendTo(dest_addr.Pass(), data.Pass(), 158 socket_->SendTo(std::move(dest_addr), std::move(data),
158 ErrorCallback(static_cast<ErrorCallback::Runnable*>( 159 ErrorCallback(static_cast<ErrorCallback::Runnable*>(
159 new SendCallbackHandler(this, callback)))); 160 new SendCallbackHandler(this, callback))));
160 } 161 }
161 162
162 void UDPSocketWrapper::OnReceived(NetworkErrorPtr result, 163 void UDPSocketWrapper::OnReceived(NetworkErrorPtr result,
163 NetAddressPtr src_addr, 164 NetAddressPtr src_addr,
164 Array<uint8_t> data) { 165 Array<uint8_t> data) {
165 if (!receive_requests_.empty()) { 166 if (!receive_requests_.empty()) {
166 // The cache should be empty if there are user requests waiting for data. 167 // The cache should be empty if there are user requests waiting for data.
167 MOJO_DCHECK(receive_queue_.empty()); 168 MOJO_DCHECK(receive_queue_.empty());
168 169
169 socket_->ReceiveMore(1); 170 socket_->ReceiveMore(1);
170 171
171 ReceiveCallback callback = receive_requests_.front(); 172 ReceiveCallback callback = receive_requests_.front();
172 receive_requests_.pop(); 173 receive_requests_.pop();
173 174
174 callback.Run(result.Pass(), src_addr.Pass(), data.Pass()); 175 callback.Run(std::move(result), std::move(src_addr), std::move(data));
175 return; 176 return;
176 } 177 }
177 178
178 MOJO_DCHECK(receive_queue_.size() < max_receive_queue_size_); 179 MOJO_DCHECK(receive_queue_.size() < max_receive_queue_size_);
179 ReceivedData* received_data = new ReceivedData(); 180 ReceivedData* received_data = new ReceivedData();
180 received_data->result = result.Pass(); 181 received_data->result = std::move(result);
181 received_data->src_addr = src_addr.Pass(); 182 received_data->src_addr = std::move(src_addr);
182 received_data->data = data.Pass(); 183 received_data->data = std::move(data);
183 receive_queue_.push(received_data); 184 receive_queue_.push(received_data);
184 } 185 }
185 186
186 void UDPSocketWrapper::Initialize(uint32_t requested_max_pending_sends) { 187 void UDPSocketWrapper::Initialize(uint32_t requested_max_pending_sends) {
187 socket_->NegotiateMaxPendingSendRequests( 188 socket_->NegotiateMaxPendingSendRequests(
188 requested_max_pending_sends, 189 requested_max_pending_sends,
189 Callback<void(uint32_t)>( 190 Callback<void(uint32_t)>(
190 static_cast< Callback<void(uint32_t)>::Runnable*>( 191 static_cast< Callback<void(uint32_t)>::Runnable*>(
191 new NegotiateCallbackHandler(this)))); 192 new NegotiateCallbackHandler(this))));
192 } 193 }
(...skipping 11 matching lines...) Expand all
204 205
205 while (ProcessNextSendRequest()); 206 while (ProcessNextSendRequest());
206 } 207 }
207 208
208 void UDPSocketWrapper::OnSendToCompleted( 209 void UDPSocketWrapper::OnSendToCompleted(
209 NetworkErrorPtr result, 210 NetworkErrorPtr result,
210 const ErrorCallback& forward_callback) { 211 const ErrorCallback& forward_callback) {
211 current_pending_sends_--; 212 current_pending_sends_--;
212 ProcessNextSendRequest(); 213 ProcessNextSendRequest();
213 214
214 forward_callback.Run(result.Pass()); 215 forward_callback.Run(std::move(result));
215 } 216 }
216 217
217 bool UDPSocketWrapper::ProcessNextSendRequest() { 218 bool UDPSocketWrapper::ProcessNextSendRequest() {
218 if (current_pending_sends_ >= max_pending_sends_ || send_requests_.empty()) 219 if (current_pending_sends_ >= max_pending_sends_ || send_requests_.empty())
219 return false; 220 return false;
220 221
221 SendRequest* request = send_requests_.front(); 222 SendRequest* request = send_requests_.front();
222 send_requests_.pop(); 223 send_requests_.pop();
223 224
224 current_pending_sends_++; 225 current_pending_sends_++;
225 226
226 socket_->SendTo( 227 socket_->SendTo(std::move(request->dest_addr), std::move(request->data),
227 request->dest_addr.Pass(), request->data.Pass(), 228 ErrorCallback(static_cast<ErrorCallback::Runnable*>(
228 ErrorCallback(static_cast<ErrorCallback::Runnable*>( 229 new SendCallbackHandler(this, request->callback))));
229 new SendCallbackHandler(this, request->callback))));
230 230
231 delete request; 231 delete request;
232 232
233 return true; 233 return true;
234 } 234 }
235 235
236 void UDPSocketWrapper::StartReceivingData( 236 void UDPSocketWrapper::StartReceivingData(
237 InterfaceRequest<UDPSocketReceiver> request) { 237 InterfaceRequest<UDPSocketReceiver> request) {
238 binding_.Bind(request.Pass()); 238 binding_.Bind(std::move(request));
239 socket_->ReceiveMore(max_receive_queue_size_); 239 socket_->ReceiveMore(max_receive_queue_size_);
240 } 240 }
241 241
242 } // namespace mojo 242 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/network/network_service_impl.cc ('k') | mojo/services/network/tcp_bound_socket_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698