168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef CHROME_BROWSER_NET_CHROME_NETWORK_DATA_SAVING_METRICS_H_
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define CHROME_BROWSER_NET_CHROME_NETWORK_DATA_SAVING_METRICS_H_
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/time/time.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace net {
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class URLRequest;
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class PrefService;
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace chrome_browser_net {
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)enum DataReductionRequestType {
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  VIA_DATA_REDUCTION_PROXY,  // A request served by the data reduction proxy.
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Below are reasons why a request is not served by the enabled data
22d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  // reduction proxy. We don't count off-the-record profile data in all cases.
23d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  HTTPS,  // An https request.
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SHORT_BYPASS,  // The client is bypassed by the proxy for a short time.
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  LONG_BYPASS,  // The client is bypassed by the proxy for a long time (due
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                // to country bypass policy, for example).
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  UNKNOWN_TYPE,  // Any other reason not listed above.
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)};
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Returns DataReductionRequestType for |request|.
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)DataReductionRequestType GetDataReductionRequestType(
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const net::URLRequest* request);
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Returns |received_content_length| as adjusted original content length if
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// |original_content_length| has the invalid value (-1) or |data_reduction_type|
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// is not |VIA_DATA_REDUCTION_PROXY|.
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int64 GetAdjustedOriginalContentLength(
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    DataReductionRequestType data_reduction_type,
39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    int64 original_content_length,
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    int64 received_content_length);
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS)
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// This is only exposed for testing. It is normally called by
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// UpdateContentLengthPrefs.
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void UpdateContentLengthPrefsForDataReductionProxy(
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    int received_content_length,
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    int original_content_length,
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool with_data_reduction_proxy_enabled,
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    DataReductionRequestType data_reduction_type,
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::Time now, PrefService* prefs);
5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Records daily data savings statistics to prefs and reports data savings UMA.
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void UpdateContentLengthPrefs(
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    int received_content_length,
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    int original_content_length,
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    bool with_data_reduction_proxy_enabled,
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    DataReductionRequestType data_reduction_type,
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    PrefService* prefs);
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace chrome_browser_net
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif  // CHROME_BROWSER_NET_CHROME_NETWORK_DATA_SAVING_METRICS_H_
64