Chromium Code Reviews| Index: components/data_use_measurement/core/data_use_recorder.cc |
| diff --git a/components/data_use_measurement/core/data_use_recorder.cc b/components/data_use_measurement/core/data_use_recorder.cc |
| index 0967f358b3a0621747526b651e22b1969a43d072..aada49123a97054eb4327f3fbbe201c186fa8297 100644 |
| --- a/components/data_use_measurement/core/data_use_recorder.cc |
| +++ b/components/data_use_measurement/core/data_use_recorder.cc |
| @@ -14,17 +14,37 @@ DataUseRecorder::DataUseRecorder(DataUse::TrafficType traffic_type) |
| DataUseRecorder::~DataUseRecorder() {} |
| bool DataUseRecorder::IsDataUseComplete() { |
| - return pending_url_requests_.empty() && pending_data_sources_.empty(); |
| + return pending_url_requests_.empty(); |
| } |
| void DataUseRecorder::AddPendingURLRequest(net::URLRequest* request) { |
| - pending_url_requests_.insert(request); |
| + pending_url_requests_.emplace(std::piecewise_construct, |
| + std::forward_as_tuple(request), |
| + std::forward_as_tuple()); |
| } |
| void DataUseRecorder::OnUrlRequestDestroyed(net::URLRequest* request) { |
| pending_url_requests_.erase(request); |
| } |
| +void DataUseRecorder::MovePendingURLRequest(DataUseRecorder* other, |
| + net::URLRequest* request) { |
| + auto request_it = pending_url_requests_.find(request); |
| + DCHECK(request_it != pending_url_requests_.end()); |
| + DCHECK(other->pending_url_requests_.find(request) == |
| + other->pending_url_requests_.end()); |
| + |
| + // Move the bytes of the request from |this| to |other|. |
| + // TODO(rajendrant): Check if the moving the bytes in |data_use_| needs to be |
| + // propogated to observers, which could store per-request user data. |
| + other->AddPendingURLRequest(request); |
| + other->UpdateNetworkByteCounts(request, request_it->second.bytes_received, |
| + request_it->second.bytes_sent); |
| + data_use_.IncrementTotalBytes(-request_it->second.bytes_received, |
|
tbansal1
2017/06/26 21:44:28
nit: Add a comment on why this is negative.
Raj
2017/06/27 02:30:04
Done
|
| + -request_it->second.bytes_sent); |
| + pending_url_requests_.erase(request_it); |
| +} |
| + |
| void DataUseRecorder::RemoveAllPendingURLRequests() { |
| pending_url_requests_.clear(); |
| } |
| @@ -33,16 +53,21 @@ void DataUseRecorder::OnBeforeUrlRequest(net::URLRequest* request) {} |
| void DataUseRecorder::OnNetworkBytesReceived(net::URLRequest* request, |
| int64_t bytes_received) { |
| - data_use_.IncrementTotalBytes(bytes_received, 0); |
| + UpdateNetworkByteCounts(request, bytes_received, 0); |
| } |
| void DataUseRecorder::OnNetworkBytesSent(net::URLRequest* request, |
| int64_t bytes_sent) { |
| - data_use_.IncrementTotalBytes(0, bytes_sent); |
| + UpdateNetworkByteCounts(request, 0, bytes_sent); |
| } |
| -void DataUseRecorder::MergeFrom(DataUseRecorder* other) { |
| - data_use_.MergeFrom(other->data_use()); |
| +void DataUseRecorder::UpdateNetworkByteCounts(net::URLRequest* request, |
| + int64_t bytes_received, |
| + int64_t bytes_sent) { |
| + data_use_.IncrementTotalBytes(bytes_received, bytes_sent); |
| + auto request_it = pending_url_requests_.find(request); |
| + request_it->second.bytes_received += bytes_received; |
| + request_it->second.bytes_sent += bytes_sent; |
| } |
| } // namespace data_use_measurement |