| 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..c4230c240305189552f98c4019a61ee98f8ddde8 100644
|
| --- a/components/data_use_measurement/core/data_use_recorder.cc
|
| +++ b/components/data_use_measurement/core/data_use_recorder.cc
|
| @@ -14,17 +14,38 @@ 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());
|
| +
|
| + // Increment the bytes of the request in |other|, and decrement the bytes in
|
| + // |this|.
|
| + // 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,
|
| + -request_it->second.bytes_sent);
|
| + pending_url_requests_.erase(request_it);
|
| +}
|
| +
|
| void DataUseRecorder::RemoveAllPendingURLRequests() {
|
| pending_url_requests_.clear();
|
| }
|
| @@ -33,16 +54,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
|
|
|