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

Side by Side Diff: components/data_use_measurement/core/data_use_measurement.cc

Issue 2462983003: Move data use measurement to DataUseNetworkDelegate (Closed)
Patch Set: Addressed comments Created 4 years, 1 month 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/content/data_use_measurement.h" 5 #include "components/data_use_measurement/core/data_use_measurement.h"
6 6
7 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
8 #include "base/metrics/sparse_histogram.h" 8 #include "base/metrics/sparse_histogram.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
11 #include "components/data_use_measurement/core/data_use_user_data.h" 11 #include "components/data_use_measurement/core/data_use_user_data.h"
12 #include "content/public/browser/resource_request_info.h" 12 #include "components/data_use_measurement/core/url_request_classifier.h"
13 #include "net/base/network_change_notifier.h" 13 #include "net/base/network_change_notifier.h"
14 #include "net/base/upload_data_stream.h" 14 #include "net/base/upload_data_stream.h"
15 #include "net/http/http_response_headers.h" 15 #include "net/http/http_response_headers.h"
16 #include "net/url_request/url_request.h" 16 #include "net/url_request/url_request.h"
17 17
18 #if defined(OS_ANDROID) 18 #if defined(OS_ANDROID)
19 #include "net/android/traffic_stats.h" 19 #include "net/android/traffic_stats.h"
20 #endif 20 #endif
21 21
22 namespace data_use_measurement { 22 namespace data_use_measurement {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 base::TimeDelta::FromHours(1), // Maximum sample 57 base::TimeDelta::FromHours(1), // Maximum sample
58 50, // Bucket count. 58 50, // Bucket count.
59 base::HistogramBase::kUmaTargetedHistogramFlag); 59 base::HistogramBase::kUmaTargetedHistogramFlag);
60 histogram_pointer->AddCount(latency.InMilliseconds(), count); 60 histogram_pointer->AddCount(latency.InMilliseconds(), count);
61 } 61 }
62 #endif 62 #endif
63 63
64 } // namespace 64 } // namespace
65 65
66 DataUseMeasurement::DataUseMeasurement( 66 DataUseMeasurement::DataUseMeasurement(
67 std::unique_ptr<URLRequestClassifier> url_request_classifier,
67 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder) 68 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder)
68 : metrics_data_use_forwarder_(metrics_data_use_forwarder) 69 : url_request_classifier_(std::move(url_request_classifier)),
70 metrics_data_use_forwarder_(metrics_data_use_forwarder)
69 #if defined(OS_ANDROID) 71 #if defined(OS_ANDROID)
70 , 72 ,
71 app_state_(base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES), 73 app_state_(base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES),
72 app_listener_(new base::android::ApplicationStatusListener( 74 app_listener_(new base::android::ApplicationStatusListener(
73 base::Bind(&DataUseMeasurement::OnApplicationStateChange, 75 base::Bind(&DataUseMeasurement::OnApplicationStateChange,
74 base::Unretained(this)))), 76 base::Unretained(this)))),
75 rx_bytes_os_(0), 77 rx_bytes_os_(0),
76 tx_bytes_os_(0), 78 tx_bytes_os_(0),
77 bytes_transferred_since_last_traffic_stats_query_(0), 79 bytes_transferred_since_last_traffic_stats_query_(0),
78 no_reads_since_background_(false) 80 no_reads_since_background_(false)
79 #endif 81 #endif
80 { 82 {
83 DCHECK(url_request_classifier_);
81 } 84 }
82 85
83 DataUseMeasurement::~DataUseMeasurement(){}; 86 DataUseMeasurement::~DataUseMeasurement(){};
84 87
85 void DataUseMeasurement::OnBeforeURLRequest(net::URLRequest* request) { 88 void DataUseMeasurement::OnBeforeURLRequest(net::URLRequest* request) {
86 DataUseUserData* data_use_user_data = reinterpret_cast<DataUseUserData*>( 89 DataUseUserData* data_use_user_data = reinterpret_cast<DataUseUserData*>(
87 request->GetUserData(DataUseUserData::kUserDataKey)); 90 request->GetUserData(DataUseUserData::kUserDataKey));
88 if (!data_use_user_data) { 91 if (!data_use_user_data) {
89 data_use_user_data = new DataUseUserData( 92 data_use_user_data = new DataUseUserData(
90 DataUseUserData::ServiceName::NOT_TAGGED, CurrentAppState()); 93 DataUseUserData::ServiceName::NOT_TAGGED, CurrentAppState());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 // of redirected requests. 126 // of redirected requests.
124 UpdateDataUsePrefs(request); 127 UpdateDataUsePrefs(request);
125 #if defined(OS_ANDROID) 128 #if defined(OS_ANDROID)
126 MaybeRecordNetworkBytesOS(); 129 MaybeRecordNetworkBytesOS();
127 #endif 130 #endif
128 } 131 }
129 132
130 void DataUseMeasurement::ReportDataUseUMA(const net::URLRequest& request, 133 void DataUseMeasurement::ReportDataUseUMA(const net::URLRequest& request,
131 TrafficDirection dir, 134 TrafficDirection dir,
132 int64_t bytes) { 135 int64_t bytes) {
133 bool is_user_traffic = IsUserInitiatedRequest(request); 136 bool is_user_traffic =
137 url_request_classifier_->IsUserInitiatedRequest(request);
134 bool is_connection_cellular = 138 bool is_connection_cellular =
135 net::NetworkChangeNotifier::IsConnectionCellular( 139 net::NetworkChangeNotifier::IsConnectionCellular(
136 net::NetworkChangeNotifier::GetConnectionType()); 140 net::NetworkChangeNotifier::GetConnectionType());
137 141
138 DataUseUserData* attached_service_data = static_cast<DataUseUserData*>( 142 DataUseUserData* attached_service_data = static_cast<DataUseUserData*>(
139 request.GetUserData(DataUseUserData::kUserDataKey)); 143 request.GetUserData(DataUseUserData::kUserDataKey));
140 DataUseUserData::ServiceName service_name = DataUseUserData::NOT_TAGGED; 144 DataUseUserData::ServiceName service_name = DataUseUserData::NOT_TAGGED;
141 DataUseUserData::AppState old_app_state = DataUseUserData::FOREGROUND; 145 DataUseUserData::AppState old_app_state = DataUseUserData::FOREGROUND;
142 DataUseUserData::AppState new_app_state = DataUseUserData::UNKNOWN; 146 DataUseUserData::AppState new_app_state = DataUseUserData::UNKNOWN;
143 147
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 200
197 // Update data use prefs for cellular connections. 201 // Update data use prefs for cellular connections.
198 if (!metrics_data_use_forwarder_.is_null()) { 202 if (!metrics_data_use_forwarder_.is_null()) {
199 metrics_data_use_forwarder_.Run( 203 metrics_data_use_forwarder_.Run(
200 DataUseUserData::GetServiceNameAsString(service_name), 204 DataUseUserData::GetServiceNameAsString(service_name),
201 request.GetTotalSentBytes() + request.GetTotalReceivedBytes(), 205 request.GetTotalSentBytes() + request.GetTotalReceivedBytes(),
202 is_connection_cellular); 206 is_connection_cellular);
203 } 207 }
204 } 208 }
205 209
206 // static
207 bool DataUseMeasurement::IsUserInitiatedRequest(
208 const net::URLRequest& request) {
209 // Having ResourceRequestInfo in the URL request is a sign that the request is
210 // for a web content from user. For now we could add a condition to check
211 // ProcessType in info is content::PROCESS_TYPE_RENDERER, but it won't be
212 // compatible with upcoming PlzNavigate architecture. So just existence of
213 // ResourceRequestInfo is verified, and the current check should be compatible
214 // with upcoming changes in PlzNavigate.
215 // TODO(rajendrant): Verify this condition for different use cases. See
216 // crbug.com/626063.
217 return content::ResourceRequestInfo::ForRequest(&request) != nullptr;
218 }
219
220 #if defined(OS_ANDROID) 210 #if defined(OS_ANDROID)
221 void DataUseMeasurement::OnApplicationStateChangeForTesting( 211 void DataUseMeasurement::OnApplicationStateChangeForTesting(
222 base::android::ApplicationState application_state) { 212 base::android::ApplicationState application_state) {
223 OnApplicationStateChange(application_state); 213 OnApplicationStateChange(application_state);
224 } 214 }
225 #endif 215 #endif
226 216
227 DataUseUserData::AppState DataUseMeasurement::CurrentAppState() const { 217 DataUseUserData::AppState DataUseMeasurement::CurrentAppState() const {
228 #if defined(OS_ANDROID) 218 #if defined(OS_ANDROID)
229 if (app_state_ != base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) 219 if (app_state_ != base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES)
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 message_size); 294 message_size);
305 if (message_size > 0) { 295 if (message_size > 0) {
306 IncreaseSparseHistogramByValue( 296 IncreaseSparseHistogramByValue(
307 GetHistogramName("DataUse.MessageSize.AllServices", dir, app_state, 297 GetHistogramName("DataUse.MessageSize.AllServices", dir, app_state,
308 is_connection_cellular), 298 is_connection_cellular),
309 service, message_size); 299 service, message_size);
310 } 300 }
311 } 301 }
312 302
313 } // namespace data_use_measurement 303 } // namespace data_use_measurement
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698