• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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