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