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 explicit 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 } |
| 278 |
| 279 // Helper class used in the implementation of AwaitListPrefMatches. |
| 280 class ListPrefMatchChecker : public PrefMatchChecker { |
| 281 public: |
| 282 explicit ListPrefMatchChecker(const char* path); |
| 283 virtual ~ListPrefMatchChecker(); |
| 284 |
| 285 // Implementation of PrefMatchChecker. |
| 286 virtual bool IsExitConditionSatisfied() OVERRIDE; |
| 287 }; |
| 288 |
| 289 ListPrefMatchChecker::ListPrefMatchChecker(const char* path) |
| 290 : PrefMatchChecker(path) { |
| 291 } |
| 292 |
| 293 ListPrefMatchChecker::~ListPrefMatchChecker() { |
| 294 } |
| 295 |
| 296 bool ListPrefMatchChecker::IsExitConditionSatisfied() { |
| 297 return ListPrefMatches(GetPath()); |
| 298 } |
| 299 |
| 300 // Helper class used in the implementation of AwaitBooleanPrefMatches. |
| 301 class BooleanPrefMatchChecker : public PrefMatchChecker { |
| 302 public: |
| 303 explicit BooleanPrefMatchChecker(const char* path); |
| 304 virtual ~BooleanPrefMatchChecker(); |
| 305 |
| 306 // Implementation of PrefMatchChecker. |
| 307 virtual bool IsExitConditionSatisfied() OVERRIDE; |
| 308 }; |
| 309 |
| 310 BooleanPrefMatchChecker::BooleanPrefMatchChecker(const char* path) |
| 311 : PrefMatchChecker(path) { |
| 312 } |
| 313 |
| 314 BooleanPrefMatchChecker::~BooleanPrefMatchChecker() { |
| 315 } |
| 316 |
| 317 bool BooleanPrefMatchChecker::IsExitConditionSatisfied() { |
| 318 return BooleanPrefMatches(GetPath()); |
| 319 } |
| 320 |
| 321 // Helper class used in the implementation of AwaitIntegerPrefMatches. |
| 322 class IntegerPrefMatchChecker : public PrefMatchChecker { |
| 323 public: |
| 324 explicit IntegerPrefMatchChecker(const char* path); |
| 325 virtual ~IntegerPrefMatchChecker(); |
| 326 |
| 327 // Implementation of PrefMatchChecker. |
| 328 virtual bool IsExitConditionSatisfied() OVERRIDE; |
| 329 }; |
| 330 |
| 331 IntegerPrefMatchChecker::IntegerPrefMatchChecker(const char* path) |
| 332 : PrefMatchChecker(path) { |
| 333 } |
| 334 |
| 335 IntegerPrefMatchChecker::~IntegerPrefMatchChecker() { |
| 336 } |
| 337 |
| 338 bool IntegerPrefMatchChecker::IsExitConditionSatisfied() { |
| 339 return IntegerPrefMatches(GetPath()); |
| 340 } |
| 341 |
| 342 // Helper class used in the implementation of AwaitStringPrefMatches. |
| 343 class StringPrefMatchChecker : public PrefMatchChecker { |
| 344 public: |
| 345 explicit StringPrefMatchChecker(const char* path); |
| 346 virtual ~StringPrefMatchChecker(); |
| 347 |
| 348 // Implementation of PrefMatchChecker. |
| 349 virtual bool IsExitConditionSatisfied() OVERRIDE; |
| 350 }; |
| 351 |
| 352 StringPrefMatchChecker::StringPrefMatchChecker(const char* path) |
| 353 : PrefMatchChecker(path) { |
| 354 } |
| 355 |
| 356 StringPrefMatchChecker::~StringPrefMatchChecker() { |
| 357 } |
| 358 |
| 359 bool StringPrefMatchChecker::IsExitConditionSatisfied() { |
| 360 return StringPrefMatches(GetPath()); |
248 } | 361 } |
249 | 362 |
250 } // namespace | 363 } // namespace |
251 | 364 |
252 bool AwaitListPrefMatches(const char* pref_name) { | 365 bool AwaitListPrefMatches(const char* pref_name) { |
253 ListPrefMatchStatusChecker checker(pref_name); | 366 ListPrefMatchChecker checker(pref_name); |
254 checker.Wait(); | 367 checker.Wait(); |
255 return !checker.TimedOut(); | 368 return !checker.TimedOut(); |
256 } | 369 } |
| 370 |
| 371 bool AwaitBooleanPrefMatches(const char* pref_name) { |
| 372 BooleanPrefMatchChecker checker(pref_name); |
| 373 checker.Wait(); |
| 374 return !checker.TimedOut(); |
| 375 } |
| 376 |
| 377 bool AwaitIntegerPrefMatches(const char* pref_name) { |
| 378 IntegerPrefMatchChecker checker(pref_name); |
| 379 checker.Wait(); |
| 380 return !checker.TimedOut(); |
| 381 } |
| 382 |
| 383 bool AwaitStringPrefMatches(const char* pref_name) { |
| 384 StringPrefMatchChecker checker(pref_name); |
| 385 checker.Wait(); |
| 386 return !checker.TimedOut(); |
| 387 } |
257 | 388 |
258 } // namespace preferences_helper | 389 } // namespace preferences_helper |
OLD | NEW |