| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/data_use_measurement/core/data_use_recorder.h" | 5 #include "components/data_use_measurement/core/data_use_recorder.h" |
| 6 | 6 |
| 7 #include "net/url_request/url_request.h" | 7 #include "net/url_request/url_request.h" |
| 8 | 8 |
| 9 namespace data_use_measurement { | 9 namespace data_use_measurement { |
| 10 | 10 |
| 11 DataUseRecorder::DataUseRecorder(DataUse::TrafficType traffic_type) | 11 DataUseRecorder::DataUseRecorder(DataUse::TrafficType traffic_type) |
| 12 : main_url_request_(nullptr), data_use_(traffic_type), is_visible_(false) {} | 12 : main_url_request_(nullptr), data_use_(traffic_type), is_visible_(false) {} |
| 13 | 13 |
| 14 DataUseRecorder::~DataUseRecorder() {} | 14 DataUseRecorder::~DataUseRecorder() {} |
| 15 | 15 |
| 16 bool DataUseRecorder::IsDataUseComplete() { | 16 bool DataUseRecorder::IsDataUseComplete() { |
| 17 return pending_url_requests_.empty() && pending_data_sources_.empty(); | 17 return pending_url_requests_.empty(); |
| 18 } | 18 } |
| 19 | 19 |
| 20 void DataUseRecorder::AddPendingURLRequest(net::URLRequest* request) { | 20 void DataUseRecorder::AddPendingURLRequest(net::URLRequest* request) { |
| 21 pending_url_requests_.insert(request); | 21 pending_url_requests_.emplace(std::piecewise_construct, |
| 22 std::forward_as_tuple(request), |
| 23 std::forward_as_tuple()); |
| 22 } | 24 } |
| 23 | 25 |
| 24 void DataUseRecorder::OnUrlRequestDestroyed(net::URLRequest* request) { | 26 void DataUseRecorder::OnUrlRequestDestroyed(net::URLRequest* request) { |
| 25 pending_url_requests_.erase(request); | 27 pending_url_requests_.erase(request); |
| 26 } | 28 } |
| 27 | 29 |
| 30 void DataUseRecorder::MovePendingURLRequest(DataUseRecorder* other, |
| 31 net::URLRequest* request) { |
| 32 auto request_it = pending_url_requests_.find(request); |
| 33 DCHECK(request_it != pending_url_requests_.end()); |
| 34 DCHECK(other->pending_url_requests_.find(request) == |
| 35 other->pending_url_requests_.end()); |
| 36 |
| 37 // Increment the bytes of the request in |other|, and decrement the bytes in |
| 38 // |this|. |
| 39 // TODO(rajendrant): Check if the moving the bytes in |data_use_| needs to be |
| 40 // propogated to observers, which could store per-request user data. |
| 41 other->AddPendingURLRequest(request); |
| 42 other->UpdateNetworkByteCounts(request, request_it->second.bytes_received, |
| 43 request_it->second.bytes_sent); |
| 44 data_use_.IncrementTotalBytes(-request_it->second.bytes_received, |
| 45 -request_it->second.bytes_sent); |
| 46 pending_url_requests_.erase(request_it); |
| 47 } |
| 48 |
| 28 void DataUseRecorder::RemoveAllPendingURLRequests() { | 49 void DataUseRecorder::RemoveAllPendingURLRequests() { |
| 29 pending_url_requests_.clear(); | 50 pending_url_requests_.clear(); |
| 30 } | 51 } |
| 31 | 52 |
| 32 void DataUseRecorder::OnBeforeUrlRequest(net::URLRequest* request) {} | 53 void DataUseRecorder::OnBeforeUrlRequest(net::URLRequest* request) {} |
| 33 | 54 |
| 34 void DataUseRecorder::OnNetworkBytesReceived(net::URLRequest* request, | 55 void DataUseRecorder::OnNetworkBytesReceived(net::URLRequest* request, |
| 35 int64_t bytes_received) { | 56 int64_t bytes_received) { |
| 36 data_use_.IncrementTotalBytes(bytes_received, 0); | 57 UpdateNetworkByteCounts(request, bytes_received, 0); |
| 37 } | 58 } |
| 38 | 59 |
| 39 void DataUseRecorder::OnNetworkBytesSent(net::URLRequest* request, | 60 void DataUseRecorder::OnNetworkBytesSent(net::URLRequest* request, |
| 40 int64_t bytes_sent) { | 61 int64_t bytes_sent) { |
| 41 data_use_.IncrementTotalBytes(0, bytes_sent); | 62 UpdateNetworkByteCounts(request, 0, bytes_sent); |
| 42 } | 63 } |
| 43 | 64 |
| 44 void DataUseRecorder::MergeFrom(DataUseRecorder* other) { | 65 void DataUseRecorder::UpdateNetworkByteCounts(net::URLRequest* request, |
| 45 data_use_.MergeFrom(other->data_use()); | 66 int64_t bytes_received, |
| 67 int64_t bytes_sent) { |
| 68 data_use_.IncrementTotalBytes(bytes_received, bytes_sent); |
| 69 auto request_it = pending_url_requests_.find(request); |
| 70 request_it->second.bytes_received += bytes_received; |
| 71 request_it->second.bytes_sent += bytes_sent; |
| 46 } | 72 } |
| 47 | 73 |
| 48 } // namespace data_use_measurement | 74 } // namespace data_use_measurement |
| OLD | NEW |