OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/test/integration/preferences_helper.h" | 5 #include "chrome/browser/sync/test/integration/preferences_helper.h" |
6 | 6 |
7 #include "base/prefs/pref_change_registrar.h" | |
7 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
8 #include "base/prefs/scoped_user_pref_update.h" | 9 #include "base/prefs/scoped_user_pref_update.h" |
9 #include "base/values.h" | 10 #include "base/strings/stringprintf.h" |
10 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
11 #include "chrome/browser/sync/test/integration/multi_client_status_change_checke r.h" | 12 #include "chrome/browser/sync/test/integration/multi_client_status_change_checke r.h" |
12 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" | 13 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" |
13 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" | 14 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" |
14 #include "chrome/browser/sync/test/integration/sync_test.h" | 15 #include "chrome/browser/sync/test/integration/sync_test.h" |
15 | 16 |
16 using sync_datatype_helper::test; | 17 using sync_datatype_helper::test; |
17 | 18 |
18 namespace preferences_helper { | 19 namespace preferences_helper { |
19 | 20 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
100 | 101 |
101 bool BooleanPrefMatches(const char* pref_name) { | 102 bool BooleanPrefMatches(const char* pref_name) { |
102 bool reference_value; | 103 bool reference_value; |
103 if (test()->use_verifier()) { | 104 if (test()->use_verifier()) { |
104 reference_value = GetVerifierPrefs()->GetBoolean(pref_name); | 105 reference_value = GetVerifierPrefs()->GetBoolean(pref_name); |
105 } else { | 106 } else { |
106 reference_value = GetPrefs(0)->GetBoolean(pref_name); | 107 reference_value = GetPrefs(0)->GetBoolean(pref_name); |
107 } | 108 } |
108 for (int i = 0; i < test()->num_clients(); ++i) { | 109 for (int i = 0; i < test()->num_clients(); ++i) { |
109 if (reference_value != GetPrefs(i)->GetBoolean(pref_name)) { | 110 if (reference_value != GetPrefs(i)->GetBoolean(pref_name)) { |
110 LOG(ERROR) << "Boolean preference " << pref_name << " mismatched in" | 111 DVLOG(1) << "Boolean preference " << pref_name << " mismatched in" |
111 << " profile " << i << "."; | 112 << " profile " << i << "."; |
112 return false; | 113 return false; |
113 } | 114 } |
114 } | 115 } |
115 return true; | 116 return true; |
116 } | 117 } |
117 | 118 |
118 bool IntegerPrefMatches(const char* pref_name) { | 119 bool IntegerPrefMatches(const char* pref_name) { |
119 int reference_value; | 120 int reference_value; |
120 if (test()->use_verifier()) { | 121 if (test()->use_verifier()) { |
121 reference_value = GetVerifierPrefs()->GetInteger(pref_name); | 122 reference_value = GetVerifierPrefs()->GetInteger(pref_name); |
122 } else { | 123 } else { |
123 reference_value = GetPrefs(0)->GetInteger(pref_name); | 124 reference_value = GetPrefs(0)->GetInteger(pref_name); |
124 } | 125 } |
125 for (int i = 0; i < test()->num_clients(); ++i) { | 126 for (int i = 0; i < test()->num_clients(); ++i) { |
126 if (reference_value != GetPrefs(i)->GetInteger(pref_name)) { | 127 if (reference_value != GetPrefs(i)->GetInteger(pref_name)) { |
127 LOG(ERROR) << "Integer preference " << pref_name << " mismatched in" | 128 DVLOG(1) << "Integer preference " << pref_name << " mismatched in" |
128 << " profile " << i << "."; | 129 << " profile " << i << "."; |
129 return false; | 130 return false; |
130 } | 131 } |
131 } | 132 } |
132 return true; | 133 return true; |
133 } | 134 } |
134 | 135 |
135 bool Int64PrefMatches(const char* pref_name) { | 136 bool Int64PrefMatches(const char* pref_name) { |
136 int64 reference_value; | 137 int64 reference_value; |
137 if (test()->use_verifier()) { | 138 if (test()->use_verifier()) { |
138 reference_value = GetVerifierPrefs()->GetInt64(pref_name); | 139 reference_value = GetVerifierPrefs()->GetInt64(pref_name); |
139 } else { | 140 } else { |
140 reference_value = GetPrefs(0)->GetInt64(pref_name); | 141 reference_value = GetPrefs(0)->GetInt64(pref_name); |
141 } | 142 } |
142 for (int i = 0; i < test()->num_clients(); ++i) { | 143 for (int i = 0; i < test()->num_clients(); ++i) { |
143 if (reference_value != GetPrefs(i)->GetInt64(pref_name)) { | 144 if (reference_value != GetPrefs(i)->GetInt64(pref_name)) { |
144 LOG(ERROR) << "Integer preference " << pref_name << " mismatched in" | 145 DVLOG(1) << "Integer preference " << pref_name << " mismatched in" |
145 << " profile " << i << "."; | 146 << " profile " << i << "."; |
146 return false; | 147 return false; |
147 } | 148 } |
148 } | 149 } |
149 return true; | 150 return true; |
150 } | 151 } |
151 | 152 |
152 bool DoublePrefMatches(const char* pref_name) { | 153 bool DoublePrefMatches(const char* pref_name) { |
153 double reference_value; | 154 double reference_value; |
154 if (test()->use_verifier()) { | 155 if (test()->use_verifier()) { |
155 reference_value = GetVerifierPrefs()->GetDouble(pref_name); | 156 reference_value = GetVerifierPrefs()->GetDouble(pref_name); |
156 } else { | 157 } else { |
157 reference_value = GetPrefs(0)->GetDouble(pref_name); | 158 reference_value = GetPrefs(0)->GetDouble(pref_name); |
158 } | 159 } |
159 for (int i = 0; i < test()->num_clients(); ++i) { | 160 for (int i = 0; i < test()->num_clients(); ++i) { |
160 if (reference_value != GetPrefs(i)->GetDouble(pref_name)) { | 161 if (reference_value != GetPrefs(i)->GetDouble(pref_name)) { |
161 LOG(ERROR) << "Double preference " << pref_name << " mismatched in" | 162 DVLOG(1) << "Double preference " << pref_name << " mismatched in" |
162 << " profile " << i << "."; | 163 << " profile " << i << "."; |
163 return false; | 164 return false; |
164 } | 165 } |
165 } | 166 } |
166 return true; | 167 return true; |
167 } | 168 } |
168 | 169 |
169 bool StringPrefMatches(const char* pref_name) { | 170 bool StringPrefMatches(const char* pref_name) { |
170 std::string reference_value; | 171 std::string reference_value; |
171 if (test()->use_verifier()) { | 172 if (test()->use_verifier()) { |
172 reference_value = GetVerifierPrefs()->GetString(pref_name); | 173 reference_value = GetVerifierPrefs()->GetString(pref_name); |
173 } else { | 174 } else { |
174 reference_value = GetPrefs(0)->GetString(pref_name); | 175 reference_value = GetPrefs(0)->GetString(pref_name); |
175 } | 176 } |
176 for (int i = 0; i < test()->num_clients(); ++i) { | 177 for (int i = 0; i < test()->num_clients(); ++i) { |
177 if (reference_value != GetPrefs(i)->GetString(pref_name)) { | 178 if (reference_value != GetPrefs(i)->GetString(pref_name)) { |
178 LOG(ERROR) << "String preference " << pref_name << " mismatched in" | 179 DVLOG(1) << "String preference " << pref_name << " mismatched in" |
179 << " profile " << i << "."; | 180 << " profile " << i << "."; |
180 return false; | 181 return false; |
181 } | 182 } |
182 } | 183 } |
183 return true; | 184 return true; |
184 } | 185 } |
185 | 186 |
186 bool FilePathPrefMatches(const char* pref_name) { | 187 bool FilePathPrefMatches(const char* pref_name) { |
187 base::FilePath reference_value; | 188 base::FilePath reference_value; |
188 if (test()->use_verifier()) { | 189 if (test()->use_verifier()) { |
189 reference_value = GetVerifierPrefs()->GetFilePath(pref_name); | 190 reference_value = GetVerifierPrefs()->GetFilePath(pref_name); |
190 } else { | 191 } else { |
191 reference_value = GetPrefs(0)->GetFilePath(pref_name); | 192 reference_value = GetPrefs(0)->GetFilePath(pref_name); |
192 } | 193 } |
193 for (int i = 0; i < test()->num_clients(); ++i) { | 194 for (int i = 0; i < test()->num_clients(); ++i) { |
194 if (reference_value != GetPrefs(i)->GetFilePath(pref_name)) { | 195 if (reference_value != GetPrefs(i)->GetFilePath(pref_name)) { |
195 LOG(ERROR) << "base::FilePath preference " << pref_name | 196 DVLOG(1) << "base::FilePath preference " << pref_name << " mismatched in" |
196 << " mismatched in" << " profile " << i << "."; | 197 << " profile " << i << "."; |
197 return false; | 198 return false; |
198 } | 199 } |
199 } | 200 } |
200 return true; | 201 return true; |
201 } | 202 } |
202 | 203 |
203 bool ListPrefMatches(const char* pref_name) { | 204 bool ListPrefMatches(const char* pref_name) { |
204 const base::ListValue* reference_value; | 205 const base::ListValue* reference_value; |
205 if (test()->use_verifier()) { | 206 if (test()->use_verifier()) { |
206 reference_value = GetVerifierPrefs()->GetList(pref_name); | 207 reference_value = GetVerifierPrefs()->GetList(pref_name); |
207 } else { | 208 } else { |
208 reference_value = GetPrefs(0)->GetList(pref_name); | 209 reference_value = GetPrefs(0)->GetList(pref_name); |
209 } | 210 } |
210 for (int i = 0; i < test()->num_clients(); ++i) { | 211 for (int i = 0; i < test()->num_clients(); ++i) { |
211 if (!reference_value->Equals(GetPrefs(i)->GetList(pref_name))) { | 212 if (!reference_value->Equals(GetPrefs(i)->GetList(pref_name))) { |
212 LOG(ERROR) << "List preference " << pref_name << " mismatched in" | 213 DVLOG(1) << "List preference " << pref_name << " mismatched in" |
213 << " profile " << i << "."; | 214 << " profile " << i << "."; |
214 return false; | 215 return false; |
215 } | 216 } |
216 } | 217 } |
217 return true; | 218 return true; |
218 } | 219 } |
219 | 220 |
220 | 221 |
221 namespace { | 222 namespace { |
222 | 223 |
223 // Helper class used in the implementation of AwaitListPrefMatches. | 224 class PrefMatchChecker : public StatusChangeChecker { |
224 class ListPrefMatchStatusChecker : public MultiClientStatusChangeChecker { | |
225 public: | 225 public: |
226 explicit ListPrefMatchStatusChecker(const char* pref_name); | 226 PrefMatchChecker(const char* path); |
227 virtual ~ListPrefMatchStatusChecker(); | 227 virtual ~PrefMatchChecker(); |
228 | 228 |
229 virtual bool IsExitConditionSatisfied() OVERRIDE; | 229 // StatusChangeChecker implementation. |
230 virtual bool IsExitConditionSatisfied() = 0; | |
230 virtual std::string GetDebugMessage() const OVERRIDE; | 231 virtual std::string GetDebugMessage() const OVERRIDE; |
232 | |
233 // Wait for condition to become true. | |
234 void Wait(); | |
235 | |
236 protected: | |
237 const char* GetPath() const; | |
238 | |
231 private: | 239 private: |
232 const char* pref_name_; | 240 void RegisterPrefListener(PrefService* pref_service); |
241 | |
242 ScopedVector<PrefChangeRegistrar> pref_change_registrars_; | |
243 const char* path_; | |
233 }; | 244 }; |
234 | 245 |
235 ListPrefMatchStatusChecker::ListPrefMatchStatusChecker(const char* pref_name) | 246 PrefMatchChecker::PrefMatchChecker(const char* path) : path_(path) { |
236 : MultiClientStatusChangeChecker( | |
237 sync_datatype_helper::test()->GetSyncServices()), | |
238 pref_name_(pref_name) {} | |
239 | |
240 ListPrefMatchStatusChecker::~ListPrefMatchStatusChecker() {} | |
241 | |
242 bool ListPrefMatchStatusChecker::IsExitConditionSatisfied() { | |
243 return ListPrefMatches(pref_name_); | |
244 } | 247 } |
245 | 248 |
246 std::string ListPrefMatchStatusChecker::GetDebugMessage() const { | 249 PrefMatchChecker::~PrefMatchChecker() { |
247 return "Waiting for matching preferences"; | 250 } |
251 | |
252 std::string PrefMatchChecker::GetDebugMessage() const { | |
253 return base::StringPrintf("Waiting for pref '%s' to match", GetPath()); | |
254 } | |
255 | |
256 void PrefMatchChecker::Wait() { | |
257 if (test()->use_verifier()) { | |
258 RegisterPrefListener(GetVerifierPrefs()); | |
259 } | |
260 | |
261 for (int i = 0; i < test()->num_clients(); ++i) { | |
262 RegisterPrefListener(GetPrefs(i)); | |
263 } | |
264 } | |
265 | |
266 const char* PrefMatchChecker::GetPath() const { | |
267 return path_; | |
268 } | |
269 | |
270 void PrefMatchChecker::RegisterPrefListener(PrefService* pref_service) { | |
271 scoped_ptr<PrefChangeRegistrar> registrar(new PrefChangeRegistrar()); | |
272 registrar->Init(pref_service); | |
273 registrar->Add(path_, | |
274 base::Bind(&PrefMatchChecker::CheckExitCondition, | |
275 base::Unretained(this))); | |
276 pref_change_registrars_.push_back(registrar.release()); | |
277 } | |
pval...(no longer on Chromium)
2014/06/04 18:06:31
add blank line after this one
rlarocque
2014/06/04 18:24:40
Done.
| |
278 // Helper class used in the implementation of AwaitListPrefMatches. | |
279 class ListPrefMatchChecker : public PrefMatchChecker { | |
280 public: | |
281 explicit ListPrefMatchChecker(const char* path); | |
282 virtual ~ListPrefMatchChecker(); | |
283 | |
284 // Implementation of PrefMatchChecker. | |
285 virtual bool IsExitConditionSatisfied() OVERRIDE; | |
286 }; | |
287 | |
288 ListPrefMatchChecker::ListPrefMatchChecker(const char* path) | |
289 : PrefMatchChecker(path) { | |
290 } | |
291 | |
292 ListPrefMatchChecker::~ListPrefMatchChecker() { | |
293 } | |
294 | |
295 bool ListPrefMatchChecker::IsExitConditionSatisfied() { | |
296 return ListPrefMatches(GetPath()); | |
297 } | |
298 | |
299 // Helper class used in the implementation of AwaitBooleanPrefMatches. | |
300 class BooleanPrefMatchChecker : public PrefMatchChecker { | |
301 public: | |
302 BooleanPrefMatchChecker(const char* path); | |
303 virtual ~BooleanPrefMatchChecker(); | |
304 | |
305 // Implementation of PrefMatchChecker. | |
306 virtual bool IsExitConditionSatisfied() OVERRIDE; | |
307 }; | |
308 | |
309 BooleanPrefMatchChecker::BooleanPrefMatchChecker(const char* path) | |
310 : PrefMatchChecker(path) { | |
311 } | |
312 | |
313 BooleanPrefMatchChecker::~BooleanPrefMatchChecker() { | |
314 } | |
315 | |
316 bool BooleanPrefMatchChecker::IsExitConditionSatisfied() { | |
317 return BooleanPrefMatches(GetPath()); | |
318 } | |
319 | |
320 // Helper class used in the implementation of AwaitIntegerPrefMatches. | |
321 class IntegerPrefMatchChecker : public PrefMatchChecker { | |
322 public: | |
323 explicit IntegerPrefMatchChecker(const char* path); | |
324 virtual ~IntegerPrefMatchChecker(); | |
325 | |
326 // Implementation of PrefMatchChecker. | |
327 virtual bool IsExitConditionSatisfied() OVERRIDE; | |
328 }; | |
329 | |
330 IntegerPrefMatchChecker::IntegerPrefMatchChecker(const char* path) | |
331 : PrefMatchChecker(path) { | |
332 } | |
333 | |
334 IntegerPrefMatchChecker::~IntegerPrefMatchChecker() { | |
335 } | |
336 | |
337 bool IntegerPrefMatchChecker::IsExitConditionSatisfied() { | |
338 return IntegerPrefMatches(GetPath()); | |
339 } | |
340 | |
341 // Helper class used in the implementation of AwaitStringPrefMatches. | |
342 class StringPrefMatchChecker : public PrefMatchChecker { | |
343 public: | |
344 explicit StringPrefMatchChecker(const char* path); | |
345 virtual ~StringPrefMatchChecker(); | |
346 | |
347 // Implementation of PrefMatchChecker. | |
348 virtual bool IsExitConditionSatisfied() OVERRIDE; | |
349 }; | |
350 | |
351 StringPrefMatchChecker::StringPrefMatchChecker(const char* path) | |
352 : PrefMatchChecker(path) { | |
353 } | |
354 | |
355 StringPrefMatchChecker::~StringPrefMatchChecker() { | |
356 } | |
357 | |
358 bool StringPrefMatchChecker::IsExitConditionSatisfied() { | |
359 return StringPrefMatches(GetPath()); | |
248 } | 360 } |
249 | 361 |
250 } // namespace | 362 } // namespace |
251 | 363 |
252 bool AwaitListPrefMatches(const char* pref_name) { | 364 bool AwaitListPrefMatches(const char* pref_name) { |
253 ListPrefMatchStatusChecker checker(pref_name); | 365 ListPrefMatchChecker checker(pref_name); |
254 checker.Wait(); | 366 checker.Wait(); |
255 return !checker.TimedOut(); | 367 return !checker.TimedOut(); |
256 } | 368 } |
369 | |
370 bool AwaitBooleanPrefMatches(const char* pref_name) { | |
pval...(no longer on Chromium)
2014/06/04 18:06:31
It's unfortunate that the PrefService design force
rlarocque
2014/06/04 18:24:40
Templates: Too complicated. Often requires placin
pval...(no longer on Chromium)
2014/06/04 23:00:41
Sounds reasonable; 3 more methods isn't too bad.
| |
371 BooleanPrefMatchChecker checker(pref_name); | |
372 checker.Wait(); | |
373 return !checker.TimedOut(); | |
374 } | |
375 | |
376 bool AwaitIntegerPrefMatches(const char* pref_name) { | |
377 IntegerPrefMatchChecker checker(pref_name); | |
378 checker.Wait(); | |
379 return !checker.TimedOut(); | |
380 } | |
381 | |
382 bool AwaitStringPrefMatches(const char* pref_name) { | |
383 StringPrefMatchChecker checker(pref_name); | |
384 checker.Wait(); | |
385 return !checker.TimedOut(); | |
386 } | |
257 | 387 |
258 } // namespace preferences_helper | 388 } // namespace preferences_helper |
OLD | NEW |