OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 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/data_reduction_proxy/browser/data_reduction_proxy_delayed_p ref_service.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "base/location.h" | |
9 #include "base/prefs/pref_service.h" | |
10 #include "base/prefs/scoped_user_pref_update.h" | |
11 #include "base/sequenced_task_runner.h" | |
12 #include "base/strings/string_number_conversions.h" | |
13 #include "base/time/time.h" | |
14 #include "base/values.h" | |
15 | |
16 namespace data_reduction_proxy { | |
17 | |
18 DataReductionProxyDelayedPrefService::DataReductionProxyDelayedPrefService( | |
19 PrefService* prefs, | |
20 scoped_refptr<base::SequencedTaskRunner> task_runner, | |
21 base::TimeDelta delay) | |
22 : pref_service_(prefs), | |
23 task_runner_(task_runner), | |
24 delay_(delay), | |
25 delayed_task_posted_(false) { | |
26 DCHECK(prefs); | |
bengr
2014/08/14 17:39:42
Also, DCHECK that delay is non-negative
megjablon
2014/08/26 19:28:40
Done.
| |
27 if (delay_ <= base::TimeDelta()) { | |
bengr
2014/08/14 17:39:42
Don't you mean >=?. Also, afaict, these don't need
megjablon
2014/08/26 19:28:41
Done.
| |
28 pref_map_ = new DataReductionProxyPrefMap(); | |
29 list_pref_map_ = new DataReductionProxyListPrefMap(); | |
30 } | |
31 } | |
32 | |
33 DataReductionProxyDelayedPrefService::~DataReductionProxyDelayedPrefService() { | |
34 WritePrefs(); | |
35 } | |
36 | |
37 int64 DataReductionProxyDelayedPrefService::GetInt64(const char* pref_path) { | |
38 if (!(delay_ <= base::TimeDelta())) { | |
bengr
2014/08/14 17:39:41
if (delay_ == base::TimeDelta())
return pref_ser
megjablon
2014/08/26 19:28:41
Done.
| |
39 return pref_service_->GetInt64(pref_path); | |
40 } | |
41 | |
42 DataReductionProxyPrefMap::iterator iter = pref_map_->find(pref_path); | |
43 if (iter == pref_map_->end()) { | |
44 int64 pref_value = pref_service_->GetInt64(pref_path); | |
45 pref_map_->insert(std::pair<const char*, int64>(pref_path, pref_value)); | |
bengr
2014/08/14 17:39:42
You can do pref_map_[pref_path] = pref_value, I th
megjablon
2014/08/26 19:28:40
Done.
| |
46 return pref_value; | |
47 } | |
48 return iter->second; | |
49 } | |
50 | |
51 void DataReductionProxyDelayedPrefService::SetInt64(const char* pref_path, | |
52 int64 pref_value) { | |
53 if (!(delay_ <= base::TimeDelta())) { | |
bengr
2014/08/14 17:39:41
if (delay_ == base::TimeDelta())
...
megjablon
2014/08/26 19:28:41
Done.
| |
54 pref_service_->SetInt64(pref_path, pref_value); | |
55 return; | |
56 } | |
57 | |
58 if (!delayed_task_posted_) | |
59 WritePrefsAndPost(); | |
60 DataReductionProxyPrefMap::iterator iter = pref_map_->find(pref_path); | |
bengr
2014/08/14 17:39:42
Can you factor out the initialization of the maps?
megjablon
2014/08/26 19:28:40
Done.
| |
61 if (iter == pref_map_->end()) { | |
62 int64 pref_value = pref_service_->GetInt64(pref_path); | |
63 pref_map_->insert(std::pair<const char*, int64>(pref_path, pref_value)); | |
bengr
2014/08/14 17:39:41
again, use []
megjablon
2014/08/26 19:28:40
Done.
| |
64 } | |
65 (*pref_map_)[pref_path] = pref_value; | |
66 } | |
67 | |
68 base::ListValue* DataReductionProxyDelayedPrefService::GetList( | |
69 const char* pref_path) { | |
70 if (!(delay_ <= base::TimeDelta())) { | |
71 return ListPrefUpdate(pref_service_, pref_path).Get(); | |
72 } | |
73 | |
74 if (!delayed_task_posted_) | |
75 WritePrefsAndPost(); | |
76 DataReductionProxyListPrefMap::iterator iter = | |
77 list_pref_map_->find(pref_path); | |
78 if (iter == list_pref_map_->end()) { | |
79 base::ListValue* pref_value = pref_service_->GetList(pref_path)->DeepCopy(); | |
bengr
2014/08/14 17:39:41
This looks like a memory leak. Where do you deallo
megjablon
2014/08/26 19:28:40
Using a ScopedPtrHashMap
megjablon
2014/08/26 19:28:40
Done.
| |
80 list_pref_map_->insert(std::pair<const char*, base::ListValue*> | |
81 (pref_path, pref_value)); | |
82 return pref_value; | |
83 } | |
84 return iter->second; | |
85 } | |
86 | |
87 void DataReductionProxyDelayedPrefService::WritePrefs() { | |
88 for(DataReductionProxyPrefMap::iterator iter = pref_map_->begin(); | |
bengr
2014/08/14 17:39:41
for (
megjablon
2014/08/26 19:28:41
Done.
| |
89 iter != pref_map_->end(); ++iter) { | |
90 pref_service_->SetInt64(iter->first, iter->second); | |
91 } | |
92 | |
93 for (DataReductionProxyListPrefMap::iterator iter = list_pref_map_->begin(); | |
94 iter != list_pref_map_->end(); ++iter) { | |
bengr
2014/08/14 17:39:41
indent one more
megjablon
2014/08/26 19:28:40
Done.
| |
95 TransferList(*(iter->second), | |
96 ListPrefUpdate(pref_service_, iter->first).Get()); | |
97 } | |
98 } | |
99 | |
100 void DataReductionProxyDelayedPrefService::WritePrefsAndPost() { | |
101 // Only write after the first time posting the task | |
102 if (!delayed_task_posted_) { | |
103 delayed_task_posted_ = true; | |
104 } else { | |
105 WritePrefs(); | |
106 } | |
107 task_runner_->PostDelayedTask( | |
108 FROM_HERE, | |
109 base::Bind(&DataReductionProxyDelayedPrefService::WritePrefsAndPost, | |
110 base::Unretained(this)), | |
bengr
2014/08/14 17:39:41
What happens after this is destroyed? I think you
bengr
2014/08/14 23:09:49
Ignore that. I think you can just pass a WeakPtr i
megjablon
2014/08/26 19:28:40
Done.
| |
111 delay_); | |
112 } | |
113 | |
114 void DataReductionProxyDelayedPrefService::TransferList( | |
115 const base::ListValue& from_list, | |
116 base::ListValue* to_list) { | |
117 to_list->Clear(); | |
118 for (size_t i = 0; i < from_list.GetSize(); ++i) { | |
119 int64 value = GetListPrefInt64Value(from_list, i); | |
120 to_list->Set(i, new base::StringValue(base::Int64ToString(value))); | |
bengr
2014/08/14 17:39:41
you can combine this line with the previous.
megjablon
2014/08/26 19:28:41
Done.
| |
121 } | |
122 } | |
123 | |
124 int64 DataReductionProxyDelayedPrefService::GetListPrefInt64Value( | |
125 const base::ListValue& list, | |
126 size_t index) { | |
127 std::string string_value; | |
128 if (!list.GetString(index, &string_value)) { | |
129 NOTREACHED(); | |
130 return 0; | |
131 } | |
132 | |
133 int64 value = 0; | |
134 bool rv = base::StringToInt64(string_value, &value); | |
135 DCHECK(rv); | |
136 return value; | |
137 } | |
138 | |
139 } // namespace data_reduction_proxy | |
OLD | NEW |