OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "components/cronet/host_cache_persistence_manager.h" | |
6 | |
7 #include <memory> | |
8 | |
9 #include "base/memory/ptr_util.h" | |
10 #include "base/values.h" | |
11 #include "components/prefs/pref_service.h" | |
12 | |
13 namespace cronet { | |
14 | |
15 HostCachePersistenceManager::HostCachePersistenceManager( | |
16 net::HostCache* cache, | |
17 PrefService* pref_service, | |
18 std::string pref_name, | |
19 base::TimeDelta delay) | |
20 : cache_(cache), | |
21 pref_service_(pref_service), | |
22 pref_name_(pref_name), | |
23 delay_(delay), | |
24 weak_factory_(this) { | |
25 DCHECK(cache_); | |
26 DCHECK(pref_service_); | |
27 | |
28 // Get the initial value of the pref if it's already initialized. | |
29 if (pref_service_->HasPrefPath(pref_name_)) | |
30 ReadFromDisk(); | |
31 | |
32 registrar_.Init(pref_service_); | |
33 registrar_.Add(pref_name_, | |
34 base::Bind(&HostCachePersistenceManager::ReadFromDisk, | |
35 weak_factory_.GetWeakPtr())); | |
36 cache_->set_persistence_delegate(this); | |
37 } | |
38 | |
39 HostCachePersistenceManager::~HostCachePersistenceManager() { | |
40 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | |
41 | |
42 timer_.Stop(); | |
43 registrar_.RemoveAll(); | |
44 cache_->set_persistence_delegate(nullptr); | |
45 } | |
46 | |
47 void HostCachePersistenceManager::ReadFromDisk() { | |
48 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | |
49 | |
50 if (writing_pref_) | |
51 return; | |
52 | |
53 const base::ListValue* pref_value = pref_service_->GetList(pref_name_); | |
54 cache_->RestoreFromListValue(*pref_value); | |
55 } | |
56 | |
57 void HostCachePersistenceManager::ScheduleWrite() { | |
58 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | |
59 | |
60 if (timer_.IsRunning()) | |
61 return; | |
62 | |
63 timer_.Start(FROM_HERE, delay_, | |
64 base::Bind(&HostCachePersistenceManager::WriteToDisk, | |
65 weak_factory_.GetWeakPtr())); | |
66 } | |
67 | |
68 void HostCachePersistenceManager::WriteToDisk() { | |
69 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | |
70 | |
71 std::unique_ptr<base::ListValue> value = cache_->GetAsListValue(false); | |
pauljensen
2017/06/23 14:10:31
I'd prefer if GetAsListValue() took a ListValue* r
mgersh
2017/06/23 16:02:06
Done.
| |
72 writing_pref_ = true; | |
73 pref_service_->Set(pref_name_, *value); | |
74 writing_pref_ = false; | |
75 } | |
76 | |
77 } // namespace cronet | |
OLD | NEW |