Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1422)

Unified Diff: components/cronet/host_cache_persistence_manager.h

Issue 2953483003: Add HostCachePersistenceManager for Cronet (Closed)
Patch Set: address comments Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/cronet/host_cache_persistence_manager.h
diff --git a/components/cronet/host_cache_persistence_manager.h b/components/cronet/host_cache_persistence_manager.h
new file mode 100644
index 0000000000000000000000000000000000000000..1d2bd1854a3c97f4404c3bbc5d564a81883aa868
--- /dev/null
+++ b/components/cronet/host_cache_persistence_manager.h
@@ -0,0 +1,72 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_CRONET_HOST_CACHE_PERSISTENCE_MANAGER_H_
+#define COMPONENTS_CRONET_HOST_CACHE_PERSISTENCE_MANAGER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequence_checker.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "components/prefs/pref_change_registrar.h"
+#include "net/dns/host_cache.h"
+
+class PrefService;
+
+namespace cronet {
+// Handles the interaction between HostCache and prefs for persistence.
+// On write, starts a timer, or ignores if the timer is already running. When
pauljensen 2017/06/23 14:10:31 I'm a little confused by "On write", perhaps "Upon
mgersh 2017/06/23 16:02:06 Done.
+// that timer expires, writes the current state of the HostCache to prefs.
+//
+// Can be used with synchronous or asynchronous prefs loading. Not appropriate
+// for use outside of Cronet because its network and prefs operations run on
+// the same sequence. Must be created after and destroyed before the HostCache
+// and PrefService.
+class HostCachePersistenceManager : public net::HostCache::PersistenceDelegate {
+ public:
+ // |cache| is the HostCache whose contents will be persisted. It must be
+ // non-null and must outlive the HostCachePersistenceManager.
+ // |pref_service| is the PrefService that will be used to persist the cache
+ // contents. It must outlive the HostCachePersistenceManager.
+ // |pref_name| is the name of the pref to read and write.
+ // |delay| is the maximum time between a change in the cache and writing that
+ // change to prefs.
+ HostCachePersistenceManager(net::HostCache* cache,
+ PrefService* pref_service,
+ std::string pref_name,
+ base::TimeDelta delay);
+ ~HostCachePersistenceManager();
pauljensen 2017/06/23 14:10:31 should be virtual. "If your class has virtual meth
mgersh 2017/06/23 16:02:06 Done.
+
+ // HostCache::PersistenceDelegate implementation
pauljensen 2017/06/23 14:10:31 nit: add "net::"
mgersh 2017/06/23 16:02:06 Done.
+ void ScheduleWrite() override;
+
+ private:
+ // Gets the serialized HostCache and writes it to prefs.
+ void WriteToDisk();
+ // On initial prefs read, passes the serialized entries to the HostCache.
+ void ReadFromDisk();
+
+ net::HostCache* const cache_;
+
+ PrefChangeRegistrar registrar_;
+ PrefService* const pref_service_;
+ const std::string pref_name_;
+ bool writing_pref_;
+
+ const base::TimeDelta delay_;
+ base::OneShotTimer timer_;
+
+ SEQUENCE_CHECKER(sequence_checker_);
+ base::WeakPtrFactory<HostCachePersistenceManager> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(HostCachePersistenceManager);
+};
+
+} // namespace cronet
+
+#endif // COMPONENTS_CRONET_HOST_CACHE_PERSISTENCE_MANAGER_H_

Powered by Google App Engine
This is Rietveld 408576698