1 // Copyright 2017 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_CRONET_CRONET_PREFS_MANAGER_H_ 6 #define COMPONENTS_CRONET_CRONET_PREFS_MANAGER_H_ 7 8 #include <string> 9 10 #include "base/memory/ref_counted.h" 11 #include "base/threading/thread_checker.h" 12 13 class JsonPrefStore; 14 class NetLog; 15 class PrefService; 16 17 namespace base { 18 class SingleThreadTaskRunner; 19 class SequencedTaskRunner; 20 } // namespace base 21 22 namespace net { 23 class HostCache; 24 class NetLog; 25 class NetworkQualitiesPrefsManager; 26 class NetworkQualityEstimator; 27 class URLRequestContextBuilder; 28 } // namespace net 29 30 namespace cronet { 31 class HostCachePersistenceManager; 32 33 // Manages the PrefService, JsonPrefStore and all associated persistence 34 // managers used by Cronet such as NetworkQualityPrefsManager, 35 // HostCachePersistenceManager, etc. The constructor, destructor and all 36 // other methods of this class should be called on the network thread. 37 class CronetPrefsManager { 38 public: 39 CronetPrefsManager( 40 const std::string& storage_path, 41 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, 42 scoped_refptr<base::SequencedTaskRunner> file_task_runner, 43 bool enable_network_quality_estimator, 44 bool enable_host_cache_persistence, 45 net::NetLog* net_log, 46 net::URLRequestContextBuilder* context_builder); 47 48 CronetPrefsManager(const CronetPrefsManager&) = delete; 49 CronetPrefsManager& operator=(const CronetPrefsManager&) = delete; 50 51 virtual ~CronetPrefsManager(); 52 53 void SetupNqePersistence(net::NetworkQualityEstimator* nqe); 54 55 void SetupHostCachePersistence(net::HostCache* host_cache, 56 int host_cache_persistence_delay_ms, 57 net::NetLog* net_log); 58 59 // Prepares |this| for shutdown. 60 void PrepareForShutdown(); 61 62 private: 63 // |pref_service_| should outlive the HttpServerPropertiesManager owned by 64 // |host_cache_persistence_manager_|. 65 std::unique_ptr<PrefService> pref_service_; 66 scoped_refptr<JsonPrefStore> json_pref_store_; 67 68 // Manages the writing and reading of the network quality prefs. 69 std::unique_ptr<net::NetworkQualitiesPrefsManager> 70 network_qualities_prefs_manager_; 71 72 // Manages reading and writing the HostCache pref when persistence is enabled. 73 // Must be destroyed before |context_| owned by CronetUrlContextAdapter 74 // (because it owns the HostResolverImpl, 75 // which owns the HostCache) and |pref_service_|. 76 std::unique_ptr<HostCachePersistenceManager> host_cache_persistence_manager_; 77 78 // Checks that all methods are called on the network thread. 79 THREAD_CHECKER(thread_checker_); 80 81 }; // class CronetPrefsManager 82 83 } // namespace cronet 84 85 #endif // COMPONENTS_CRONET_CRONET_PREFS_MANAGER_H_ 86