| Index: components/data_use_measurement/core/data_use_measurement.cc
|
| diff --git a/components/data_use_measurement/core/data_use_measurement.cc b/components/data_use_measurement/core/data_use_measurement.cc
|
| index 6508f99ade7c1e38116388d23aa7e36c89949ba4..3907ca8303cf10dc8c1a346a87090fc2a51dd7d6 100644
|
| --- a/components/data_use_measurement/core/data_use_measurement.cc
|
| +++ b/components/data_use_measurement/core/data_use_measurement.cc
|
| @@ -119,6 +119,17 @@ void DataUseMeasurement::OnBeforeRedirect(const net::URLRequest& request,
|
| ReportServicesMessageSizeUMA(request);
|
| }
|
|
|
| +void DataUseMeasurement::OnHeadersReceived(
|
| + net::URLRequest* request,
|
| + const net::HttpResponseHeaders* response_headers) {
|
| + DataUseUserData* data_use_user_data = reinterpret_cast<DataUseUserData*>(
|
| + request->GetUserData(DataUseUserData::kUserDataKey));
|
| + if (data_use_user_data) {
|
| + data_use_user_data->set_content_type(
|
| + url_request_classifier_->GetContentType(*request, *response_headers));
|
| + }
|
| +}
|
| +
|
| void DataUseMeasurement::OnNetworkBytesReceived(const net::URLRequest& request,
|
| int64_t bytes_received) {
|
| UMA_HISTOGRAM_COUNTS("DataUse.BytesReceived.Delegate", bytes_received);
|
| @@ -196,13 +207,22 @@ void DataUseMeasurement::ReportDataUseUMA(const net::URLRequest& request,
|
| }
|
| #endif
|
|
|
| + bool is_tab_visible = false;
|
| +
|
| if (is_user_traffic) {
|
| const DataUseRecorder* recorder = ascriber_->GetDataUseRecorder(request);
|
| if (recorder) {
|
| + is_tab_visible = recorder->is_visible();
|
| RecordTabStateHistogram(dir, new_app_state, recorder->is_visible(),
|
| bytes);
|
| }
|
| }
|
| + if (attached_service_data && dir == DOWNSTREAM &&
|
| + new_app_state != DataUseUserData::UNKNOWN) {
|
| + RecordContentTypeHistogram(attached_service_data->content_type(),
|
| + is_user_traffic, new_app_state, is_tab_visible,
|
| + bytes);
|
| + }
|
| }
|
|
|
| void DataUseMeasurement::UpdateDataUsePrefs(
|
| @@ -363,4 +383,38 @@ void DataUseMeasurement::RecordTabStateHistogram(
|
| RecordUMAHistogramCount(histogram_name, bytes);
|
| }
|
|
|
| +void DataUseMeasurement::RecordContentTypeHistogram(
|
| + DataUseUserData::DataUseContentType content_type,
|
| + bool is_user_traffic,
|
| + DataUseUserData::AppState app_state,
|
| + bool is_tab_visible,
|
| + int64_t bytes) {
|
| + if (content_type == DataUseUserData::AUDIO) {
|
| + content_type = app_state != DataUseUserData::FOREGROUND
|
| + ? DataUseUserData::AUDIO_APPBACKGROUND
|
| + : (!is_tab_visible ? DataUseUserData::AUDIO_TABBACKGROUND
|
| + : DataUseUserData::AUDIO);
|
| + } else if (content_type == DataUseUserData::VIDEO) {
|
| + content_type = app_state != DataUseUserData::FOREGROUND
|
| + ? DataUseUserData::VIDEO_APPBACKGROUND
|
| + : (!is_tab_visible ? DataUseUserData::VIDEO_TABBACKGROUND
|
| + : DataUseUserData::VIDEO);
|
| + }
|
| + if (is_user_traffic) {
|
| + STATIC_HISTOGRAM_POINTER_BLOCK(
|
| + "DataUse.ContentType.UserTraffic", AddCount(content_type, bytes),
|
| + base::LinearHistogram::FactoryGet(
|
| + "DataUse.ContentType.UserTraffic", 1, DataUseUserData::TYPE_MAX,
|
| + DataUseUserData::TYPE_MAX + 1,
|
| + base::HistogramBase::kUmaTargetedHistogramFlag));
|
| + } else {
|
| + STATIC_HISTOGRAM_POINTER_BLOCK(
|
| + "DataUse.ContentType.Services", AddCount(content_type, bytes),
|
| + base::LinearHistogram::FactoryGet(
|
| + "DataUse.ContentType.Services", 1, DataUseUserData::TYPE_MAX,
|
| + DataUseUserData::TYPE_MAX + 1,
|
| + base::HistogramBase::kUmaTargetedHistogramFlag));
|
| + }
|
| +}
|
| +
|
| } // namespace data_use_measurement
|
|
|