11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_STATISTICS_PREFS_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_STATISTICS_PREFS_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <map> 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/containers/scoped_ptr_hash_map.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/macros.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/weak_ptr.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/time/time.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/data_reduction_proxy/common/data_reduction_proxy_pref_names.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass PrefService; 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace base { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ListValue; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SequencedTaskRunner; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace data_reduction_proxy { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Data reduction proxy delayed pref service reduces the number calls to pref 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// service by storing prefs in memory and writing to the given PrefService after 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// |delay| amount of time. If |delay| is zero, the delayed pref service writes 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// directly to the PrefService and does not store the prefs in memory. All 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// prefs must be stored and read on the UI thread. 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DataReductionProxyStatisticsPrefs { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic: 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Constructs a data reduction proxy delayed pref service object using 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |pref_service|. Writes prefs to |pref_service| after |delay| 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // and stores them in |pref_map_| and |list_pref_map| between writes. 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If |delay| is zero, writes directly to the PrefService and does not store 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // in the maps. 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DataReductionProxyStatisticsPrefs( 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefService* pref_service, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::SequencedTaskRunner> task_runner, 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::TimeDelta& delay); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~DataReductionProxyStatisticsPrefs(); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Loads all data_reduction_proxy::prefs into the |pref_map_| and 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |list_pref_map_|. 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Init(); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Gets the int64 pref at |pref_path| from the |DataReductionProxyPrefMap|. 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int64 GetInt64(const char* pref_path); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Updates the pref value in the |DataReductionProxyPrefMap| map. 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The pref is later written to |pref service_|. 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetInt64(const char* pref_path, int64 pref_value); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Gets the pref list at |pref_path| from the |DataReductionProxyPrefMap|. 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue* GetList(const char* pref_path); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Writes the prefs stored in |DataReductionProxyPrefMap| and 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |DataReductionProxyListPrefMap| to |pref_service|. 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void WritePrefs(); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciprivate: 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef std::map<const char*, int64> DataReductionProxyPrefMap; 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef base::ScopedPtrHashMap<const char*, base::ListValue> 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DataReductionProxyListPrefMap; 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Gets the value of |pref| from the pref service and adds it to the 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |pref_map|. 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void InitInt64Pref(const char* pref); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Gets the value of |pref| from the pref service and adds it to the 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |list_pref_map|. 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void InitListPref(const char* pref); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Writes the stored prefs to |pref_service| and then posts another a delayed 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // task to write prefs again in |kMinutesBetweenWrites|. 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void DelayedWritePrefs(); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Copies the values at each index of |from_list| to the same index in 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |to_list|. 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void TransferList(const base::ListValue& from_list, 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue* to_list); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Gets an int64, stored as a string, in a ListPref at the specified 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // index. 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int64 GetListPrefInt64Value(const base::ListValue& list_update, size_t index); 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefService* pref_service_; 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::SequencedTaskRunner> task_runner_; 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtrFactory<DataReductionProxyStatisticsPrefs> weak_factory_; 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::TimeDelta delay_; 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool delayed_task_posted_; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DataReductionProxyPrefMap pref_map_; 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DataReductionProxyListPrefMap list_pref_map_; 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(DataReductionProxyStatisticsPrefs); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace data_reduction_proxy 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_STATISTICS_PREFS_H_ 102