1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_METRICS_DATA_USE_TRACKER_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_DATA_USE_TRACKER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <string> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/gtest_prod_util.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h" 13*6777b538SAndroid Build Coastguard Worker #include "base/sequence_checker.h" 14*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 15*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_registry_simple.h" 16*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_service.h" 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker namespace metrics { 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker // Records the data use of user traffic and UMA traffic in user prefs. Taking 21*6777b538SAndroid Build Coastguard Worker // into account those prefs it can verify whether certain UMA log upload is 22*6777b538SAndroid Build Coastguard Worker // allowed. 23*6777b538SAndroid Build Coastguard Worker class DataUseTracker { 24*6777b538SAndroid Build Coastguard Worker public: 25*6777b538SAndroid Build Coastguard Worker explicit DataUseTracker(PrefService* local_state); 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker DataUseTracker(const DataUseTracker&) = delete; 28*6777b538SAndroid Build Coastguard Worker DataUseTracker& operator=(const DataUseTracker&) = delete; 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker virtual ~DataUseTracker(); 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker // Returns an instance of |DataUseTracker| with provided |local_state| if 33*6777b538SAndroid Build Coastguard Worker // users data use should be tracked and null pointer otherwise. 34*6777b538SAndroid Build Coastguard Worker static std::unique_ptr<DataUseTracker> Create(PrefService* local_state); 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Registers data use prefs using provided |registry|. 37*6777b538SAndroid Build Coastguard Worker static void RegisterPrefs(PrefRegistrySimple* registry); 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker // Updates data usage tracking prefs with the specified values. 40*6777b538SAndroid Build Coastguard Worker static void UpdateMetricsUsagePrefs(int message_size, 41*6777b538SAndroid Build Coastguard Worker bool is_cellular, 42*6777b538SAndroid Build Coastguard Worker bool is_metrics_service_usage, 43*6777b538SAndroid Build Coastguard Worker PrefService* local_state); 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker // Returns whether a log with provided |log_bytes| can be uploaded according 46*6777b538SAndroid Build Coastguard Worker // to data use ratio and UMA quota provided by variations. 47*6777b538SAndroid Build Coastguard Worker bool ShouldUploadLogOnCellular(int log_bytes); 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker private: 50*6777b538SAndroid Build Coastguard Worker FRIEND_TEST_ALL_PREFIXES(DataUseTrackerTest, CheckUpdateUsagePref); 51*6777b538SAndroid Build Coastguard Worker FRIEND_TEST_ALL_PREFIXES(DataUseTrackerTest, CheckRemoveExpiredEntries); 52*6777b538SAndroid Build Coastguard Worker FRIEND_TEST_ALL_PREFIXES(DataUseTrackerTest, CheckComputeTotalDataUse); 53*6777b538SAndroid Build Coastguard Worker FRIEND_TEST_ALL_PREFIXES(DataUseTrackerTest, CheckCanUploadUMALog); 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker // Updates data usage tracking prefs with the specified values. 56*6777b538SAndroid Build Coastguard Worker void UpdateMetricsUsagePrefsInternal(int message_size, 57*6777b538SAndroid Build Coastguard Worker bool is_cellular, 58*6777b538SAndroid Build Coastguard Worker bool is_metrics_service_usage); 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker // Updates provided |pref_name| for a current date with the given message 61*6777b538SAndroid Build Coastguard Worker // size. 62*6777b538SAndroid Build Coastguard Worker void UpdateUsagePref(const std::string& pref_name, int message_size); 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard Worker // Removes entries from the all data use prefs. 65*6777b538SAndroid Build Coastguard Worker void RemoveExpiredEntries(); 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard Worker // Removes entries from the given |pref_name| if they are more than 7 days 68*6777b538SAndroid Build Coastguard Worker // old. 69*6777b538SAndroid Build Coastguard Worker void RemoveExpiredEntriesForPref(const std::string& pref_name); 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker // Computes data usage according to all the entries in the given dictionary 72*6777b538SAndroid Build Coastguard Worker // pref. 73*6777b538SAndroid Build Coastguard Worker int ComputeTotalDataUse(const std::string& pref_name); 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker // Returns the current date for measurement. 76*6777b538SAndroid Build Coastguard Worker virtual base::Time GetCurrentMeasurementDate() const; 77*6777b538SAndroid Build Coastguard Worker 78*6777b538SAndroid Build Coastguard Worker // Returns the current date as a string with a proper formatting. 79*6777b538SAndroid Build Coastguard Worker virtual std::string GetCurrentMeasurementDateAsString() const; 80*6777b538SAndroid Build Coastguard Worker 81*6777b538SAndroid Build Coastguard Worker raw_ptr<PrefService> local_state_; 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Worker SEQUENCE_CHECKER(sequence_checker_); 84*6777b538SAndroid Build Coastguard Worker }; 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard Worker } // namespace metrics 87*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_METRICS_DATA_USE_TRACKER_H_ 88