| OLD | NEW |
| 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 #ifndef COMPONENTS_DATA_USE_MEASUREMENT_CONTENT_DATA_USE_MEASUREMENT_H_ | 5 #ifndef COMPONENTS_DATA_USE_MEASUREMENT_CONTENT_DATA_USE_MEASUREMENT_H_ |
| 6 #define COMPONENTS_DATA_USE_MEASUREMENT_CONTENT_DATA_USE_MEASUREMENT_H_ | 6 #define COMPONENTS_DATA_USE_MEASUREMENT_CONTENT_DATA_USE_MEASUREMENT_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #endif | 22 #endif |
| 23 | 23 |
| 24 class GURL; | 24 class GURL; |
| 25 | 25 |
| 26 namespace net { | 26 namespace net { |
| 27 class URLRequest; | 27 class URLRequest; |
| 28 } | 28 } |
| 29 | 29 |
| 30 namespace data_use_measurement { | 30 namespace data_use_measurement { |
| 31 | 31 |
| 32 class DataUseAscriber; |
| 32 class URLRequestClassifier; | 33 class URLRequestClassifier; |
| 33 | 34 |
| 34 // Records the data use of user traffic and various services in UMA histograms. | 35 // Records the data use of user traffic and various services in UMA histograms. |
| 35 // The UMA is broken down by network technology used (Wi-Fi vs cellular). On | 36 // The UMA is broken down by network technology used (Wi-Fi vs cellular). On |
| 36 // Android, the UMA is further broken down by whether the application was in the | 37 // Android, the UMA is further broken down by whether the application was in the |
| 37 // background or foreground during the request. | 38 // background or foreground during the request. |
| 38 // TODO(amohammadkhan): Complete the layered architecture. | 39 // TODO(amohammadkhan): Complete the layered architecture. |
| 39 // http://crbug.com/527460 | 40 // http://crbug.com/527460 |
| 40 class DataUseMeasurement { | 41 class DataUseMeasurement { |
| 41 public: | 42 public: |
| 42 DataUseMeasurement( | 43 DataUseMeasurement( |
| 43 std::unique_ptr<URLRequestClassifier> url_request_classifier, | 44 std::unique_ptr<URLRequestClassifier> url_request_classifier, |
| 44 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder); | 45 const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder, |
| 46 DataUseAscriber* ascriber); |
| 45 ~DataUseMeasurement(); | 47 ~DataUseMeasurement(); |
| 46 | 48 |
| 47 // Called before a request is sent. | 49 // Called before a request is sent. |
| 48 void OnBeforeURLRequest(net::URLRequest* request); | 50 void OnBeforeURLRequest(net::URLRequest* request); |
| 49 | 51 |
| 50 // Called right after a redirect response code was received for |request|. | 52 // Called right after a redirect response code was received for |request|. |
| 51 void OnBeforeRedirect(const net::URLRequest& request, | 53 void OnBeforeRedirect(const net::URLRequest& request, |
| 52 const GURL& new_location); | 54 const GURL& new_location); |
| 53 | 55 |
| 54 // Called when data is received or sent on the network, respectively. | 56 // Called when data is received or sent on the network, respectively. |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 void ReportDataUseUMA(const net::URLRequest& request, | 110 void ReportDataUseUMA(const net::URLRequest& request, |
| 109 TrafficDirection dir, | 111 TrafficDirection dir, |
| 110 int64_t bytes); | 112 int64_t bytes); |
| 111 | 113 |
| 112 // Updates the data use of the |request|, thus |request| must be non-null. | 114 // Updates the data use of the |request|, thus |request| must be non-null. |
| 113 void UpdateDataUsePrefs(const net::URLRequest& request) const; | 115 void UpdateDataUsePrefs(const net::URLRequest& request) const; |
| 114 | 116 |
| 115 // Reports the message size of the service requests. | 117 // Reports the message size of the service requests. |
| 116 void ReportServicesMessageSizeUMA(const net::URLRequest& request); | 118 void ReportServicesMessageSizeUMA(const net::URLRequest& request); |
| 117 | 119 |
| 118 // A helper function used to record data use of services. It gets the size of | 120 // Records data use histograms of services. It gets the size of exchanged |
| 119 // exchanged message, its direction (which is upstream or downstream) and | 121 // message, its direction (which is upstream or downstream) and reports to two |
| 120 // reports to two histogram groups. DataUse.MessageSize.ServiceName and | 122 // histogram groups. DataUse.MessageSize.ServiceName and |
| 121 // DataUse.Services.{Dimensions}. In the second one, services are buckets. | 123 // DataUse.Services.{Dimensions}. In the second one, services are buckets. |
| 122 // |app_state| indicates the app state which can be foreground, background, or | 124 // |app_state| indicates the app state which can be foreground, background, or |
| 123 // unknown. | 125 // unknown. |
| 124 void ReportDataUsageServices( | 126 void ReportDataUsageServices( |
| 125 data_use_measurement::DataUseUserData::ServiceName service, | 127 data_use_measurement::DataUseUserData::ServiceName service, |
| 126 TrafficDirection dir, | 128 TrafficDirection dir, |
| 127 DataUseUserData::AppState app_state, | 129 DataUseUserData::AppState app_state, |
| 128 bool is_connection_cellular, | 130 bool is_connection_cellular, |
| 129 int64_t message_size) const; | 131 int64_t message_size) const; |
| 130 | 132 |
| 133 // Records data use histograms split on TrafficDirection, AppState and |
| 134 // TabState. |
| 135 void RecordTabStateHistogram(TrafficDirection dir, |
| 136 DataUseUserData::AppState app_state, |
| 137 bool is_tab_visible, |
| 138 int64_t bytes); |
| 139 |
| 131 // Classifier for identifying if an URL request is user initiated. | 140 // Classifier for identifying if an URL request is user initiated. |
| 132 std::unique_ptr<URLRequestClassifier> url_request_classifier_; | 141 std::unique_ptr<URLRequestClassifier> url_request_classifier_; |
| 133 | 142 |
| 134 // Callback for updating data use prefs. | 143 // Callback for updating data use prefs. |
| 135 // TODO(rajendrant): If a similar mechanism would need be used for components | 144 // TODO(rajendrant): If a similar mechanism would need be used for components |
| 136 // other than metrics, then the better approach would be to refactor this | 145 // other than metrics, then the better approach would be to refactor this |
| 137 // class to support registering arbitrary observers. crbug.com/601185 | 146 // class to support registering arbitrary observers. crbug.com/601185 |
| 138 metrics::UpdateUsagePrefCallbackType metrics_data_use_forwarder_; | 147 metrics::UpdateUsagePrefCallbackType metrics_data_use_forwarder_; |
| 139 | 148 |
| 149 // DataUseAscriber used to get the attributes of data use. |
| 150 DataUseAscriber* ascriber_; |
| 151 |
| 140 #if defined(OS_ANDROID) | 152 #if defined(OS_ANDROID) |
| 141 // Application listener store the last known state of the application in this | 153 // Application listener store the last known state of the application in this |
| 142 // field. | 154 // field. |
| 143 base::android::ApplicationState app_state_; | 155 base::android::ApplicationState app_state_; |
| 144 | 156 |
| 145 // ApplicationStatusListener used to monitor whether the application is in the | 157 // ApplicationStatusListener used to monitor whether the application is in the |
| 146 // foreground or in the background. It is owned by DataUseMeasurement. | 158 // foreground or in the background. It is owned by DataUseMeasurement. |
| 147 std::unique_ptr<base::android::ApplicationStatusListener> app_listener_; | 159 std::unique_ptr<base::android::ApplicationStatusListener> app_listener_; |
| 148 | 160 |
| 149 // Number of bytes received and sent by Chromium as reported by the operating | 161 // Number of bytes received and sent by Chromium as reported by the operating |
| (...skipping 14 matching lines...) Expand all Loading... |
| 164 // True if app is in background and first network read has not yet happened. | 176 // True if app is in background and first network read has not yet happened. |
| 165 bool no_reads_since_background_; | 177 bool no_reads_since_background_; |
| 166 #endif | 178 #endif |
| 167 | 179 |
| 168 DISALLOW_COPY_AND_ASSIGN(DataUseMeasurement); | 180 DISALLOW_COPY_AND_ASSIGN(DataUseMeasurement); |
| 169 }; | 181 }; |
| 170 | 182 |
| 171 } // namespace data_use_measurement | 183 } // namespace data_use_measurement |
| 172 | 184 |
| 173 #endif // COMPONENTS_DATA_USE_MEASUREMENT_CONTENT_DATA_USE_MEASUREMENT_H_ | 185 #endif // COMPONENTS_DATA_USE_MEASUREMENT_CONTENT_DATA_USE_MEASUREMENT_H_ |
| OLD | NEW |