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

Side by Side Diff: device/serial/data_sink_receiver.cc

Issue 2080083002: Revert of Deletes mojo::Callback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 unified diff | Download patch
« no previous file with comments | « device/serial/data_sink_receiver.h ('k') | device/serial/serial_connection.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "device/serial/data_sink_receiver.h" 5 #include "device/serial/data_sink_receiver.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 bool cancelled_; 43 bool cancelled_;
44 44
45 // If |cancelled_|, contains the cancellation error to report. 45 // If |cancelled_|, contains the cancellation error to report.
46 int32_t cancellation_error_; 46 int32_t cancellation_error_;
47 }; 47 };
48 48
49 // A frame of data received from the client. 49 // A frame of data received from the client.
50 class DataSinkReceiver::DataFrame { 50 class DataSinkReceiver::DataFrame {
51 public: 51 public:
52 explicit DataFrame(mojo::Array<uint8_t> data, 52 explicit DataFrame(mojo::Array<uint8_t> data,
53 const serial::DataSink::OnDataCallback& callback); 53 const mojo::Callback<void(uint32_t, int32_t)>& callback);
54 54
55 // Returns the number of unconsumed bytes remaining of this data frame. 55 // Returns the number of unconsumed bytes remaining of this data frame.
56 uint32_t GetRemainingBytes(); 56 uint32_t GetRemainingBytes();
57 57
58 // Returns a pointer to the remaining data to be consumed. 58 // Returns a pointer to the remaining data to be consumed.
59 const char* GetData(); 59 const char* GetData();
60 60
61 // Reports that |bytes_read| bytes have been consumed. 61 // Reports that |bytes_read| bytes have been consumed.
62 void OnDataConsumed(uint32_t bytes_read); 62 void OnDataConsumed(uint32_t bytes_read);
63 63
64 // Reports that an error occurred. 64 // Reports that an error occurred.
65 void ReportError(uint32_t bytes_read, int32_t error); 65 void ReportError(uint32_t bytes_read, int32_t error);
66 66
67 private: 67 private:
68 mojo::Array<uint8_t> data_; 68 mojo::Array<uint8_t> data_;
69 uint32_t offset_; 69 uint32_t offset_;
70 const serial::DataSink::OnDataCallback callback_; 70 const mojo::Callback<void(uint32_t, int32_t)> callback_;
71 }; 71 };
72 72
73 DataSinkReceiver::DataSinkReceiver( 73 DataSinkReceiver::DataSinkReceiver(
74 mojo::InterfaceRequest<serial::DataSink> request, 74 mojo::InterfaceRequest<serial::DataSink> request,
75 const ReadyCallback& ready_callback, 75 const ReadyCallback& ready_callback,
76 const CancelCallback& cancel_callback, 76 const CancelCallback& cancel_callback,
77 const ErrorCallback& error_callback) 77 const ErrorCallback& error_callback)
78 : binding_(this, std::move(request)), 78 : binding_(this, std::move(request)),
79 ready_callback_(ready_callback), 79 ready_callback_(ready_callback),
80 cancel_callback_(cancel_callback), 80 cancel_callback_(cancel_callback),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 buffer_in_use_->Cancel(error); 114 buffer_in_use_->Cancel(error);
115 if (!cancel_callback_.is_null()) 115 if (!cancel_callback_.is_null())
116 cancel_callback_.Run(error); 116 cancel_callback_.Run(error);
117 return; 117 return;
118 } 118 }
119 ReportError(0, error); 119 ReportError(0, error);
120 } 120 }
121 121
122 void DataSinkReceiver::OnData( 122 void DataSinkReceiver::OnData(
123 mojo::Array<uint8_t> data, 123 mojo::Array<uint8_t> data,
124 const serial::DataSink::OnDataCallback& callback) { 124 const mojo::Callback<void(uint32_t, int32_t)>& callback) {
125 if (current_error_) { 125 if (current_error_) {
126 callback.Run(0, current_error_); 126 callback.Run(0, current_error_);
127 return; 127 return;
128 } 128 }
129 pending_data_buffers_.push( 129 pending_data_buffers_.push(
130 linked_ptr<DataFrame>(new DataFrame(std::move(data), callback))); 130 linked_ptr<DataFrame>(new DataFrame(std::move(data), callback)));
131 if (!buffer_in_use_) 131 if (!buffer_in_use_)
132 RunReadyCallback(); 132 RunReadyCallback();
133 } 133 }
134 134
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 int32_t error) { 249 int32_t error) {
250 scoped_refptr<DataSinkReceiver> receiver = receiver_; 250 scoped_refptr<DataSinkReceiver> receiver = receiver_;
251 receiver_ = nullptr; 251 receiver_ = nullptr;
252 receiver->DoneWithError(bytes_read, error); 252 receiver->DoneWithError(bytes_read, error);
253 buffer_ = NULL; 253 buffer_ = NULL;
254 buffer_size_ = 0; 254 buffer_size_ = 0;
255 } 255 }
256 256
257 DataSinkReceiver::DataFrame::DataFrame( 257 DataSinkReceiver::DataFrame::DataFrame(
258 mojo::Array<uint8_t> data, 258 mojo::Array<uint8_t> data,
259 const serial::DataSink::OnDataCallback& callback) 259 const mojo::Callback<void(uint32_t, int32_t)>& callback)
260 : data_(std::move(data)), offset_(0), callback_(callback) { 260 : data_(std::move(data)), offset_(0), callback_(callback) {
261 DCHECK_LT(0u, data_.size()); 261 DCHECK_LT(0u, data_.size());
262 } 262 }
263 263
264 // Returns the number of uncomsumed bytes remaining of this data frame. 264 // Returns the number of uncomsumed bytes remaining of this data frame.
265 uint32_t DataSinkReceiver::DataFrame::GetRemainingBytes() { 265 uint32_t DataSinkReceiver::DataFrame::GetRemainingBytes() {
266 return static_cast<uint32_t>(data_.size() - offset_); 266 return static_cast<uint32_t>(data_.size() - offset_);
267 } 267 }
268 268
269 // Returns a pointer to the remaining data to be consumed. 269 // Returns a pointer to the remaining data to be consumed.
270 const char* DataSinkReceiver::DataFrame::GetData() { 270 const char* DataSinkReceiver::DataFrame::GetData() {
271 DCHECK_LT(offset_, data_.size()); 271 DCHECK_LT(offset_, data_.size());
272 return reinterpret_cast<const char*>(&data_[0]) + offset_; 272 return reinterpret_cast<const char*>(&data_[0]) + offset_;
273 } 273 }
274 274
275 void DataSinkReceiver::DataFrame::OnDataConsumed(uint32_t bytes_read) { 275 void DataSinkReceiver::DataFrame::OnDataConsumed(uint32_t bytes_read) {
276 offset_ += bytes_read; 276 offset_ += bytes_read;
277 DCHECK_LE(offset_, data_.size()); 277 DCHECK_LE(offset_, data_.size());
278 if (offset_ == data_.size()) 278 if (offset_ == data_.size())
279 callback_.Run(offset_, 0); 279 callback_.Run(offset_, 0);
280 } 280 }
281 void DataSinkReceiver::DataFrame::ReportError(uint32_t bytes_read, 281 void DataSinkReceiver::DataFrame::ReportError(uint32_t bytes_read,
282 int32_t error) { 282 int32_t error) {
283 offset_ += bytes_read; 283 offset_ += bytes_read;
284 DCHECK_LE(offset_, data_.size()); 284 DCHECK_LE(offset_, data_.size());
285 callback_.Run(offset_, error); 285 callback_.Run(offset_, error);
286 } 286 }
287 287
288 } // namespace device 288 } // namespace device
OLDNEW
« no previous file with comments | « device/serial/data_sink_receiver.h ('k') | device/serial/serial_connection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698