| Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc | 
| diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc | 
| index b49659f308081a3a96063a8eddefc4a55313e6ba..64817ad36a5d8c2b9ba9957a2d173b244578137e 100644 | 
| --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc | 
| +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc | 
| @@ -31,6 +31,18 @@ namespace data_reduction_proxy { | 
|  | 
| namespace { | 
|  | 
| +#define CONCAT(a, b) a##b | 
| +// CONCAT1 provides extra level of indirection so that __LINE__ macro expands. | 
| +#define CONCAT1(a, b) CONCAT(a, b) | 
| +#define UNIQUE_VARNAME CONCAT1(var_, __LINE__) | 
| +// We need to use a macro instead of a method because UMA_HISTOGRAM_COUNTS | 
| +// requires its first argument to be an inline string and not a variable. | 
| +#define RECORD_INT64PREF_TO_HISTOGRAM(pref, uma)     \ | 
| +  int64 UNIQUE_VARNAME = GetInt64(pref);             \ | 
| +  if (UNIQUE_VARNAME > 0) {                          \ | 
| +    UMA_HISTOGRAM_COUNTS(uma, UNIQUE_VARNAME >> 10); \ | 
| +  } | 
| + | 
| // Returns the value at |index| of |list_value| as an int64. | 
| int64 GetInt64PrefValue(const base::ListValue& list_value, size_t index) { | 
| int64 val = 0; | 
| @@ -101,8 +113,7 @@ void RecordDailyContentLengthHistograms( | 
| int64 https_length_with_data_reduction_enabled, | 
| int64 short_bypass_length_with_data_reduction_enabled, | 
| int64 long_bypass_length_with_data_reduction_enabled, | 
| -    int64 unknown_length_with_data_reduction_enabled, | 
| -    const std::string& mime_type) { | 
| +    int64 unknown_length_with_data_reduction_enabled) { | 
| // Report daily UMA only for days having received content. | 
| if (original_length <= 0 || received_length <= 0) | 
| return; | 
| @@ -113,24 +124,6 @@ void RecordDailyContentLengthHistograms( | 
| UMA_HISTOGRAM_COUNTS( | 
| "Net.DailyContentLength", received_length >> 10); | 
|  | 
| -  bool is_application = net::MatchesMimeType("application/*", mime_type); | 
| -  bool is_video = net::MatchesMimeType("video/*", mime_type); | 
| -  bool is_mime_type_empty = mime_type.empty(); | 
| -  if (is_application) { | 
| -    UMA_HISTOGRAM_COUNTS("Net.DailyOriginalContentLength_Application", | 
| -                         original_length >> 10); | 
| -    UMA_HISTOGRAM_COUNTS("Net.DailyContentLength_Application", | 
| -                         received_length >> 10); | 
| -  } else if (is_video) { | 
| -    UMA_HISTOGRAM_COUNTS("Net.DailyOriginalContentLength_Video", | 
| -                         original_length >> 10); | 
| -    UMA_HISTOGRAM_COUNTS("Net.DailyContentLength_Video", received_length >> 10); | 
| -  } else if (is_mime_type_empty) { | 
| -    UMA_HISTOGRAM_COUNTS("Net.DailyOriginalContentLength_UnknownMime", | 
| -                         original_length >> 10); | 
| -    UMA_HISTOGRAM_COUNTS("Net.DailyContentLength_UnknownMime", | 
| -                         received_length >> 10); | 
| -  } | 
| int percent = 0; | 
| // UMA percentage cannot be negative. | 
| if (original_length > received_length) { | 
| @@ -150,29 +143,6 @@ void RecordDailyContentLengthHistograms( | 
| "Net.DailyContentLength_DataReductionProxyEnabled", | 
| received_length_with_data_reduction_enabled >> 10); | 
|  | 
| -  if (is_application) { | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyOriginalContentLength_DataReductionProxyEnabled_Application", | 
| -        original_length_with_data_reduction_enabled >> 10); | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyContentLength_DataReductionProxyEnabled_Application", | 
| -        received_length_with_data_reduction_enabled >> 10); | 
| -  } else if (is_video) { | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyOriginalContentLength_DataReductionProxyEnabled_Video", | 
| -        original_length_with_data_reduction_enabled >> 10); | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyContentLength_DataReductionProxyEnabled_Video", | 
| -        received_length_with_data_reduction_enabled >> 10); | 
| -  } else if (is_mime_type_empty) { | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyOriginalContentLength_DataReductionProxyEnabled_UnknownMime", | 
| -        original_length_with_data_reduction_enabled >> 10); | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyContentLength_DataReductionProxyEnabled_UnknownMime", | 
| -        received_length_with_data_reduction_enabled >> 10); | 
| -  } | 
| - | 
| int percent_data_reduction_proxy_enabled = 0; | 
| // UMA percentage cannot be negative. | 
| if (original_length_with_data_reduction_enabled > | 
| @@ -234,28 +204,6 @@ void RecordDailyContentLengthHistograms( | 
| "Net.DailyContentLength_ViaDataReductionProxy", | 
| received_length_via_data_reduction_proxy >> 10); | 
|  | 
| -  if (is_application) { | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyOriginalContentLength_ViaDataReductionProxy_Application", | 
| -        original_length_via_data_reduction_proxy >> 10); | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyContentLength_ViaDataReductionProxy_Application", | 
| -        received_length_via_data_reduction_proxy >> 10); | 
| -  } else if (is_video) { | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyOriginalContentLength_ViaDataReductionProxy_Video", | 
| -        original_length_via_data_reduction_proxy >> 10); | 
| -    UMA_HISTOGRAM_COUNTS("Net.DailyContentLength_ViaDataReductionProxy_Video", | 
| -                         received_length_via_data_reduction_proxy >> 10); | 
| -  } else if (is_mime_type_empty) { | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyOriginalContentLength_ViaDataReductionProxy_UnknownMime", | 
| -        original_length_via_data_reduction_proxy >> 10); | 
| -    UMA_HISTOGRAM_COUNTS( | 
| -        "Net.DailyContentLength_ViaDataReductionProxy_UnknownMime", | 
| -        received_length_via_data_reduction_proxy >> 10); | 
| -  } | 
| - | 
| int percent_via_data_reduction_proxy = 0; | 
| if (original_length_via_data_reduction_proxy > | 
| received_length_via_data_reduction_proxy) { | 
| @@ -448,6 +396,33 @@ void DataReductionProxyCompressionStats::Init() { | 
| InitInt64Pref(prefs::kHttpReceivedContentLength); | 
| InitInt64Pref(prefs::kHttpOriginalContentLength); | 
|  | 
| +  InitInt64Pref(prefs::kDailyHttpOriginalContentLengthApplication); | 
| +  InitInt64Pref(prefs::kDailyHttpOriginalContentLengthVideo); | 
| +  InitInt64Pref(prefs::kDailyHttpOriginalContentLengthUnknown); | 
| +  InitInt64Pref(prefs::kDailyHttpReceivedContentLengthApplication); | 
| +  InitInt64Pref(prefs::kDailyHttpReceivedContentLengthVideo); | 
| +  InitInt64Pref(prefs::kDailyHttpReceivedContentLengthUnknown); | 
| + | 
| +  InitInt64Pref( | 
| +      prefs::kDailyOriginalContentLengthViaDataReductionProxyApplication); | 
| +  InitInt64Pref(prefs::kDailyOriginalContentLengthViaDataReductionProxyVideo); | 
| +  InitInt64Pref(prefs::kDailyOriginalContentLengthViaDataReductionProxyUnknown); | 
| +  InitInt64Pref(prefs::kDailyContentLengthViaDataReductionProxyApplication); | 
| +  InitInt64Pref(prefs::kDailyContentLengthViaDataReductionProxyVideo); | 
| +  InitInt64Pref(prefs::kDailyContentLengthViaDataReductionProxyUnknown); | 
| + | 
| +  InitInt64Pref( | 
| +      prefs:: | 
| +          kDailyOriginalContentLengthWithDataReductionProxyEnabledApplication); | 
| +  InitInt64Pref( | 
| +      prefs::kDailyOriginalContentLengthWithDataReductionProxyEnabledVideo); | 
| +  InitInt64Pref( | 
| +      prefs::kDailyOriginalContentLengthWithDataReductionProxyEnabledUnknown); | 
| +  InitInt64Pref( | 
| +      prefs::kDailyContentLengthWithDataReductionProxyEnabledApplication); | 
| +  InitInt64Pref(prefs::kDailyContentLengthWithDataReductionProxyEnabledVideo); | 
| +  InitInt64Pref(prefs::kDailyContentLengthWithDataReductionProxyEnabledUnknown); | 
| + | 
| // Init all list prefs. | 
| InitListPref(prefs::kDailyContentLengthHttpsWithDataReductionProxyEnabled); | 
| InitListPref( | 
| @@ -538,6 +513,12 @@ void DataReductionProxyCompressionStats::SetInt64(const char* pref_path, | 
| pref_map_[pref_path] = pref_value; | 
| } | 
|  | 
| +void DataReductionProxyCompressionStats::IncrementInt64Pref( | 
| +    const char* pref_path, | 
| +    int64_t pref_increment) { | 
| +  SetInt64(pref_path, GetInt64(pref_path) + pref_increment); | 
| +} | 
| + | 
| base::ListValue* DataReductionProxyCompressionStats::GetList( | 
| const char* pref_path) { | 
| if (delay_ == base::TimeDelta()) | 
| @@ -768,50 +749,219 @@ void DataReductionProxyCompressionStats::RecordRequestSizePrefs( | 
| } | 
| base::Time midnight = now.LocalMidnight(); | 
|  | 
| -  int days_since_last_update = (midnight - then_midnight).InDays(); | 
| - | 
| -  // Each day, we calculate the total number of bytes received and the total | 
| -  // size of all corresponding resources before any data-reducing recompression | 
| -  // is applied. These values are used to compute the data savings realized | 
| -  // by applying our compression techniques. Totals for the last | 
| -  // |kNumDaysInHistory| days are maintained. | 
| DailyDataSavingUpdate total( | 
| GetList(data_reduction_proxy::prefs::kDailyHttpOriginalContentLength), | 
| GetList(data_reduction_proxy::prefs::kDailyHttpReceivedContentLength)); | 
| -  total.UpdateForDataChange(days_since_last_update); | 
|  | 
| DailyDataSavingUpdate proxy_enabled( | 
| GetList(data_reduction_proxy::prefs:: | 
| kDailyOriginalContentLengthWithDataReductionProxyEnabled), | 
| GetList(data_reduction_proxy::prefs:: | 
| kDailyContentLengthWithDataReductionProxyEnabled)); | 
| -  proxy_enabled.UpdateForDataChange(days_since_last_update); | 
|  | 
| DailyDataSavingUpdate via_proxy( | 
| GetList(data_reduction_proxy::prefs:: | 
| -          kDailyOriginalContentLengthViaDataReductionProxy), | 
| +                  kDailyOriginalContentLengthViaDataReductionProxy), | 
| GetList(data_reduction_proxy::prefs:: | 
| -          kDailyContentLengthViaDataReductionProxy)); | 
| -  via_proxy.UpdateForDataChange(days_since_last_update); | 
| +                  kDailyContentLengthViaDataReductionProxy)); | 
|  | 
| DailyContentLengthUpdate https( | 
| GetList(data_reduction_proxy::prefs:: | 
| -          kDailyContentLengthHttpsWithDataReductionProxyEnabled)); | 
| -  https.UpdateForDataChange(days_since_last_update); | 
| +                  kDailyContentLengthHttpsWithDataReductionProxyEnabled)); | 
|  | 
| DailyContentLengthUpdate short_bypass( | 
| GetList(data_reduction_proxy::prefs:: | 
| -          kDailyContentLengthShortBypassWithDataReductionProxyEnabled)); | 
| -  short_bypass.UpdateForDataChange(days_since_last_update); | 
| +                  kDailyContentLengthShortBypassWithDataReductionProxyEnabled)); | 
|  | 
| DailyContentLengthUpdate long_bypass( | 
| GetList(data_reduction_proxy::prefs:: | 
| -          kDailyContentLengthLongBypassWithDataReductionProxyEnabled)); | 
| -  long_bypass.UpdateForDataChange(days_since_last_update); | 
| +                  kDailyContentLengthLongBypassWithDataReductionProxyEnabled)); | 
|  | 
| DailyContentLengthUpdate unknown( | 
| GetList(data_reduction_proxy::prefs:: | 
| -          kDailyContentLengthUnknownWithDataReductionProxyEnabled)); | 
| +                  kDailyContentLengthUnknownWithDataReductionProxyEnabled)); | 
| + | 
| +  int days_since_last_update = (midnight - then_midnight).InDays(); | 
| +  if (days_since_last_update) { | 
| +    // Record the last update time in microseconds in UTC. | 
| +    SetInt64(data_reduction_proxy::prefs::kDailyHttpContentLengthLastUpdateDate, | 
| +             midnight.ToInternalValue()); | 
| + | 
| +    // A new day. Report the previous day's data if exists. We'll lose usage | 
| +    // data if the last time Chrome was run was more than a day ago. | 
| +    // Here, we prefer collecting less data but the collected data is | 
| +    // associated with an accurate date. | 
| +    if (days_since_last_update == 1) { | 
| +      RecordDailyContentLengthHistograms( | 
| +          total.GetOriginalListPrefValue(kNumDaysInHistory - 1), | 
| +          total.GetReceivedListPrefValue(kNumDaysInHistory - 1), | 
| +          proxy_enabled.GetOriginalListPrefValue(kNumDaysInHistory - 1), | 
| +          proxy_enabled.GetReceivedListPrefValue(kNumDaysInHistory - 1), | 
| +          via_proxy.GetOriginalListPrefValue(kNumDaysInHistory - 1), | 
| +          via_proxy.GetReceivedListPrefValue(kNumDaysInHistory - 1), | 
| +          https.GetListPrefValue(kNumDaysInHistory - 1), | 
| +          short_bypass.GetListPrefValue(kNumDaysInHistory - 1), | 
| +          long_bypass.GetListPrefValue(kNumDaysInHistory - 1), | 
| +          unknown.GetListPrefValue(kNumDaysInHistory - 1)); | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyHttpOriginalContentLengthApplication, | 
| +          "Net.DailyOriginalContentLength_Application"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyHttpReceivedContentLengthApplication, | 
| +          "Net.DailyReceivedContentLength_Application"); | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs::kDailyHttpOriginalContentLengthVideo, | 
| +          "Net.DailyOriginalContentLength_Video"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs::kDailyHttpReceivedContentLengthVideo, | 
| +          "Net.DailyContentLength_Video"); | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs::kDailyHttpOriginalContentLengthUnknown, | 
| +          "Net.DailyOriginalContentLength_UnknownMime"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs::kDailyHttpReceivedContentLengthUnknown, | 
| +          "Net.DailyContentLength_UnknownMime"); | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthWithDataReductionProxyEnabledApplication, | 
| +          "Net.DailyOriginalContentLength_DataReductionProxyEnabled_" | 
| +          "Application"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyContentLengthWithDataReductionProxyEnabledApplication, | 
| +          "Net.DailyContentLength_DataReductionProxyEnabled_Application"); | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthWithDataReductionProxyEnabledVideo, | 
| +          "Net.DailyOriginalContentLength_DataReductionProxyEnabled_Video"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyContentLengthWithDataReductionProxyEnabledVideo, | 
| +          "Net.DailyContentLength_DataReductionProxyEnabled_Video"); | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthWithDataReductionProxyEnabledUnknown, | 
| +          "Net.DailyOriginalContentLength_DataReductionProxyEnabled_" | 
| +          "UnknownMime"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyContentLengthWithDataReductionProxyEnabledUnknown, | 
| +          "Net.DailyContentLength_DataReductionProxyEnabled_UnknownMime") | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthViaDataReductionProxyApplication, | 
| +          "Net.DailyOriginalContentLength_ViaDataReductionProxy_Application"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyContentLengthViaDataReductionProxyApplication, | 
| +          "Net.DailyContentLength_ViaDataReductionProxy_Application"); | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthViaDataReductionProxyVideo, | 
| +          "Net.DailyOriginalContentLength_ViaDataReductionProxy_Video"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyContentLengthViaDataReductionProxyVideo, | 
| +          "Net.DailyContentLength_ViaDataReductionProxy_Video"); | 
| + | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthViaDataReductionProxyUnknown, | 
| +          "Net.DailyOriginalContentLength_ViaDataReductionProxy_UnknownMime"); | 
| +      RECORD_INT64PREF_TO_HISTOGRAM( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyContentLengthViaDataReductionProxyUnknown, | 
| +          "Net.DailyContentLength_ViaDataReductionProxy_UnknownMime"); | 
| +    } | 
| + | 
| +    // The system may go backwards in time by up to a day for legitimate | 
| +    // reasons, such as with changes to the time zone. In such cases, we | 
| +    // keep adding to the current day which is why we check for | 
| +    // |days_since_last_update != -1|. | 
| +    // Note: we accept the fact that some reported data is shifted to | 
| +    // the adjacent day if users travel back and forth across time zones. | 
| +    if (days_since_last_update && (days_since_last_update != -1)) { | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyHttpOriginalContentLengthApplication, | 
| +               0); | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyHttpReceivedContentLengthApplication, | 
| +               0); | 
| + | 
| +      SetInt64( | 
| +          data_reduction_proxy::prefs::kDailyHttpOriginalContentLengthVideo, 0); | 
| +      SetInt64( | 
| +          data_reduction_proxy::prefs::kDailyHttpReceivedContentLengthVideo, 0); | 
| + | 
| +      SetInt64( | 
| +          data_reduction_proxy::prefs::kDailyHttpOriginalContentLengthUnknown, | 
| +          0); | 
| +      SetInt64( | 
| +          data_reduction_proxy::prefs::kDailyHttpReceivedContentLengthUnknown, | 
| +          0); | 
| + | 
| +      SetInt64( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthWithDataReductionProxyEnabledApplication, | 
| +          0); | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyContentLengthWithDataReductionProxyEnabledApplication, | 
| +               0); | 
| + | 
| +      SetInt64( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthWithDataReductionProxyEnabledVideo, | 
| +          0); | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyContentLengthWithDataReductionProxyEnabledVideo, | 
| +               0); | 
| + | 
| +      SetInt64( | 
| +          data_reduction_proxy::prefs:: | 
| +              kDailyOriginalContentLengthWithDataReductionProxyEnabledUnknown, | 
| +          0); | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyContentLengthWithDataReductionProxyEnabledUnknown, | 
| +               0); | 
| + | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyOriginalContentLengthViaDataReductionProxyApplication, | 
| +               0); | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyContentLengthViaDataReductionProxyApplication, | 
| +               0); | 
| + | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyOriginalContentLengthViaDataReductionProxyVideo, | 
| +               0); | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyContentLengthViaDataReductionProxyVideo, | 
| +               0); | 
| + | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyOriginalContentLengthViaDataReductionProxyUnknown, | 
| +               0); | 
| +      SetInt64(data_reduction_proxy::prefs:: | 
| +                   kDailyContentLengthViaDataReductionProxyUnknown, | 
| +               0); | 
| +    } | 
| +  } | 
| +  total.UpdateForDataChange(days_since_last_update); | 
| +  proxy_enabled.UpdateForDataChange(days_since_last_update); | 
| +  via_proxy.UpdateForDataChange(days_since_last_update); | 
| +  https.UpdateForDataChange(days_since_last_update); | 
| +  short_bypass.UpdateForDataChange(days_since_last_update); | 
| +  long_bypass.UpdateForDataChange(days_since_last_update); | 
| unknown.UpdateForDataChange(days_since_last_update); | 
|  | 
| total.Add(original_size, data_used); | 
| @@ -840,32 +990,80 @@ void DataReductionProxyCompressionStats::RecordRequestSizePrefs( | 
| } | 
| } | 
|  | 
| -  if (days_since_last_update) { | 
| -    // Record the last update time in microseconds in UTC. | 
| -    SetInt64( | 
| -        data_reduction_proxy::prefs::kDailyHttpContentLengthLastUpdateDate, | 
| -        midnight.ToInternalValue()); | 
| +  bool via_data_reduction_proxy = request_type == VIA_DATA_REDUCTION_PROXY; | 
| +  bool is_application = net::MatchesMimeType("application/*", mime_type); | 
| +  bool is_video = net::MatchesMimeType("video/*", mime_type); | 
| +  bool is_mime_type_empty = mime_type.empty(); | 
| +  if (is_application) { | 
| +    IncrementDailyUmaPrefs( | 
| +        original_size, data_used, | 
| +        data_reduction_proxy::prefs::kDailyHttpOriginalContentLengthApplication, | 
| +        data_reduction_proxy::prefs::kDailyHttpReceivedContentLengthApplication, | 
| +        with_data_reduction_proxy_enabled, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyOriginalContentLengthWithDataReductionProxyEnabledApplication, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyContentLengthWithDataReductionProxyEnabledApplication, | 
| +        via_data_reduction_proxy, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyOriginalContentLengthViaDataReductionProxyApplication, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyContentLengthViaDataReductionProxyApplication); | 
| +  } else if (is_video) { | 
| +    IncrementDailyUmaPrefs( | 
| +        original_size, data_used, | 
| +        data_reduction_proxy::prefs::kDailyHttpOriginalContentLengthVideo, | 
| +        data_reduction_proxy::prefs::kDailyHttpReceivedContentLengthVideo, | 
| +        with_data_reduction_proxy_enabled, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyOriginalContentLengthWithDataReductionProxyEnabledVideo, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyContentLengthWithDataReductionProxyEnabledVideo, | 
| +        via_data_reduction_proxy, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyOriginalContentLengthViaDataReductionProxyVideo, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyContentLengthViaDataReductionProxyVideo); | 
| +  } else if (is_mime_type_empty) { | 
| +    IncrementDailyUmaPrefs( | 
| +        original_size, data_used, | 
| +        data_reduction_proxy::prefs::kDailyHttpOriginalContentLengthUnknown, | 
| +        data_reduction_proxy::prefs::kDailyHttpReceivedContentLengthUnknown, | 
| +        with_data_reduction_proxy_enabled, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyOriginalContentLengthWithDataReductionProxyEnabledUnknown, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyContentLengthWithDataReductionProxyEnabledUnknown, | 
| +        via_data_reduction_proxy, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyOriginalContentLengthViaDataReductionProxyUnknown, | 
| +        data_reduction_proxy::prefs:: | 
| +            kDailyContentLengthViaDataReductionProxyUnknown); | 
| +  } | 
| +} | 
|  | 
| -    // A new day. Report the previous day's data if exists. We'll lose usage | 
| -    // data if the last time Chrome was run was more than a day ago. | 
| -    // Here, we prefer collecting less data but the collected data is | 
| -    // associated with an accurate date. | 
| -    if (days_since_last_update == 1) { | 
| -      RecordUserVisibleDataSavings(); | 
| -      // The previous day's data point is the second one from the tail. | 
| -      // Therefore (kNumDaysInHistory - 2) below. | 
| -      RecordDailyContentLengthHistograms( | 
| -          total.GetOriginalListPrefValue(kNumDaysInHistory - 2), | 
| -          total.GetReceivedListPrefValue(kNumDaysInHistory - 2), | 
| -          proxy_enabled.GetOriginalListPrefValue(kNumDaysInHistory - 2), | 
| -          proxy_enabled.GetReceivedListPrefValue(kNumDaysInHistory - 2), | 
| -          via_proxy.GetOriginalListPrefValue(kNumDaysInHistory - 2), | 
| -          via_proxy.GetReceivedListPrefValue(kNumDaysInHistory - 2), | 
| -          https.GetListPrefValue(kNumDaysInHistory - 2), | 
| -          short_bypass.GetListPrefValue(kNumDaysInHistory - 2), | 
| -          long_bypass.GetListPrefValue(kNumDaysInHistory - 2), | 
| -          unknown.GetListPrefValue(kNumDaysInHistory - 2), mime_type); | 
| -    } | 
| +void DataReductionProxyCompressionStats::IncrementDailyUmaPrefs( | 
| +    int64_t original_size, | 
| +    int64_t received_size, | 
| +    const char* original_size_pref, | 
| +    const char* received_size_pref, | 
| +    bool data_reduction_proxy_enabled, | 
| +    const char* original_size_with_proxy_enabled_pref, | 
| +    const char* recevied_size_with_proxy_enabled_pref, | 
| +    bool via_data_reduction_proxy, | 
| +    const char* original_size_via_proxy_pref, | 
| +    const char* received_size_via_proxy_pref) { | 
| +  IncrementInt64Pref(original_size_pref, original_size); | 
| +  IncrementInt64Pref(received_size_pref, received_size); | 
| + | 
| +  if (data_reduction_proxy_enabled) { | 
| +    IncrementInt64Pref(original_size_with_proxy_enabled_pref, original_size); | 
| +    IncrementInt64Pref(recevied_size_with_proxy_enabled_pref, received_size); | 
| +  } | 
| + | 
| +  if (via_data_reduction_proxy) { | 
| +    IncrementInt64Pref(original_size_via_proxy_pref, original_size); | 
| +    IncrementInt64Pref(received_size_via_proxy_pref, received_size); | 
| } | 
| } | 
|  | 
|  |