15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/preferences_helper.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/prefs/pref_change_registrar.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/stringprintf.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 12a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/sync/test/integration/multi_client_status_change_checker.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_datatype_helper.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_test.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using sync_datatype_helper::test; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace preferences_helper { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefService* GetPrefs(int index) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return test()->GetProfile(index)->GetPrefs(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefService* GetVerifierPrefs() { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return test()->verifier()->GetPrefs(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChangeBooleanPref(int index, const char* pref_name) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool new_value = !GetPrefs(index)->GetBoolean(pref_name); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrefs(index)->SetBoolean(pref_name, new_value); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetVerifierPrefs()->SetBoolean(pref_name, new_value); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChangeIntegerPref(int index, const char* pref_name, int new_value) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrefs(index)->SetInteger(pref_name, new_value); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetVerifierPrefs()->SetInteger(pref_name, new_value); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChangeInt64Pref(int index, const char* pref_name, int64 new_value) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrefs(index)->SetInt64(pref_name, new_value); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetVerifierPrefs()->SetInt64(pref_name, new_value); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChangeDoublePref(int index, const char* pref_name, double new_value) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrefs(index)->SetDouble(pref_name, new_value); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetVerifierPrefs()->SetDouble(pref_name, new_value); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChangeStringPref(int index, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& new_value) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrefs(index)->SetString(pref_name, new_value); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetVerifierPrefs()->SetString(pref_name, new_value); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChangeFilePathPref(int index, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& new_value) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrefs(index)->SetFilePath(pref_name, new_value); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetVerifierPrefs()->SetFilePath(pref_name, new_value); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChangeListPref(int index, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name, 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue& new_value) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update(GetPrefs(index), pref_name); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* list = update.Get(); 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::ListValue::const_iterator it = new_value.begin(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != new_value.end(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++it) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->Append((*it)->DeepCopy()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update_verifier(GetVerifierPrefs(), pref_name); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* list_verifier = update_verifier.Get(); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::ListValue::const_iterator it = new_value.begin(); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != new_value.end(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++it) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list_verifier->Append((*it)->DeepCopy()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BooleanPrefMatches(const char* pref_name) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool reference_value; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetVerifierPrefs()->GetBoolean(pref_name); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetPrefs(0)->GetBoolean(pref_name); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < test()->num_clients(); ++i) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reference_value != GetPrefs(i)->GetBoolean(pref_name)) { 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DVLOG(1) << "Boolean preference " << pref_name << " mismatched in" 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << " profile " << i << "."; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IntegerPrefMatches(const char* pref_name) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int reference_value; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetVerifierPrefs()->GetInteger(pref_name); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetPrefs(0)->GetInteger(pref_name); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < test()->num_clients(); ++i) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reference_value != GetPrefs(i)->GetInteger(pref_name)) { 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DVLOG(1) << "Integer preference " << pref_name << " mismatched in" 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << " profile " << i << "."; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Int64PrefMatches(const char* pref_name) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 reference_value; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetVerifierPrefs()->GetInt64(pref_name); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetPrefs(0)->GetInt64(pref_name); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < test()->num_clients(); ++i) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reference_value != GetPrefs(i)->GetInt64(pref_name)) { 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DVLOG(1) << "Integer preference " << pref_name << " mismatched in" 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << " profile " << i << "."; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DoublePrefMatches(const char* pref_name) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double reference_value; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetVerifierPrefs()->GetDouble(pref_name); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetPrefs(0)->GetDouble(pref_name); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < test()->num_clients(); ++i) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reference_value != GetPrefs(i)->GetDouble(pref_name)) { 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DVLOG(1) << "Double preference " << pref_name << " mismatched in" 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << " profile " << i << "."; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool StringPrefMatches(const char* pref_name) { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string reference_value; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetVerifierPrefs()->GetString(pref_name); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetPrefs(0)->GetString(pref_name); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < test()->num_clients(); ++i) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reference_value != GetPrefs(i)->GetString(pref_name)) { 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DVLOG(1) << "String preference " << pref_name << " mismatched in" 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << " profile " << i << "."; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool FilePathPrefMatches(const char* pref_name) { 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath reference_value; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetVerifierPrefs()->GetFilePath(pref_name); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetPrefs(0)->GetFilePath(pref_name); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < test()->num_clients(); ++i) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reference_value != GetPrefs(i)->GetFilePath(pref_name)) { 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DVLOG(1) << "base::FilePath preference " << pref_name << " mismatched in" 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << " profile " << i << "."; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ListPrefMatches(const char* pref_name) { 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* reference_value; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test()->use_verifier()) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetVerifierPrefs()->GetList(pref_name); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reference_value = GetPrefs(0)->GetList(pref_name); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < test()->num_clients(); ++i) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!reference_value->Equals(GetPrefs(i)->GetList(pref_name))) { 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DVLOG(1) << "List preference " << pref_name << " mismatched in" 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << " profile " << i << "."; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 213a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 214a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace { 215a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass PrefMatchChecker : public StatusChangeChecker { 217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public: 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit PrefMatchChecker(const char* path); 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~PrefMatchChecker(); 220a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // StatusChangeChecker implementation. 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool IsExitConditionSatisfied() = 0; 223a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual std::string GetDebugMessage() const OVERRIDE; 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Wait for condition to become true. 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Wait(); 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* GetPath() const; 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 231a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch private: 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void RegisterPrefListener(PrefService* pref_service); 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedVector<PrefChangeRegistrar> pref_change_registrars_; 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* path_; 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 238116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPrefMatchChecker::PrefMatchChecker(const char* path) : path_(path) { 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 241116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPrefMatchChecker::~PrefMatchChecker() { 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstd::string PrefMatchChecker::GetDebugMessage() const { 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return base::StringPrintf("Waiting for pref '%s' to match", GetPath()); 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrefMatchChecker::Wait() { 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (test()->use_verifier()) { 250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RegisterPrefListener(GetVerifierPrefs()); 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (int i = 0; i < test()->num_clients(); ++i) { 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RegisterPrefListener(GetPrefs(i)); 255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (IsExitConditionSatisfied()) { 258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StartBlockingWait(); 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 264116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char* PrefMatchChecker::GetPath() const { 265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return path_; 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 268116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrefMatchChecker::RegisterPrefListener(PrefService* pref_service) { 269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<PrefChangeRegistrar> registrar(new PrefChangeRegistrar()); 270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch registrar->Init(pref_service); 271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch registrar->Add(path_, 272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&PrefMatchChecker::CheckExitCondition, 273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Unretained(this))); 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref_change_registrars_.push_back(registrar.release()); 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Helper class used in the implementation of AwaitListPrefMatches. 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ListPrefMatchChecker : public PrefMatchChecker { 279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit ListPrefMatchChecker(const char* path); 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~ListPrefMatchChecker(); 282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Implementation of PrefMatchChecker. 284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool IsExitConditionSatisfied() OVERRIDE; 285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 287116680a4aac90f2aa7413d9095a592090648e557Ben MurdochListPrefMatchChecker::ListPrefMatchChecker(const char* path) 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : PrefMatchChecker(path) { 289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 291116680a4aac90f2aa7413d9095a592090648e557Ben MurdochListPrefMatchChecker::~ListPrefMatchChecker() { 292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 294116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ListPrefMatchChecker::IsExitConditionSatisfied() { 295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return ListPrefMatches(GetPath()); 296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Helper class used in the implementation of AwaitBooleanPrefMatches. 299116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BooleanPrefMatchChecker : public PrefMatchChecker { 300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit BooleanPrefMatchChecker(const char* path); 302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~BooleanPrefMatchChecker(); 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Implementation of PrefMatchChecker. 305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool IsExitConditionSatisfied() OVERRIDE; 306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 308116680a4aac90f2aa7413d9095a592090648e557Ben MurdochBooleanPrefMatchChecker::BooleanPrefMatchChecker(const char* path) 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : PrefMatchChecker(path) { 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 312116680a4aac90f2aa7413d9095a592090648e557Ben MurdochBooleanPrefMatchChecker::~BooleanPrefMatchChecker() { 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool BooleanPrefMatchChecker::IsExitConditionSatisfied() { 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return BooleanPrefMatches(GetPath()); 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Helper class used in the implementation of AwaitIntegerPrefMatches. 320116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass IntegerPrefMatchChecker : public PrefMatchChecker { 321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit IntegerPrefMatchChecker(const char* path); 323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~IntegerPrefMatchChecker(); 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Implementation of PrefMatchChecker. 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool IsExitConditionSatisfied() OVERRIDE; 327a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 328a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 329116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIntegerPrefMatchChecker::IntegerPrefMatchChecker(const char* path) 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : PrefMatchChecker(path) { 331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 333116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIntegerPrefMatchChecker::~IntegerPrefMatchChecker() { 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 336116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool IntegerPrefMatchChecker::IsExitConditionSatisfied() { 337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return IntegerPrefMatches(GetPath()); 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Helper class used in the implementation of AwaitStringPrefMatches. 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass StringPrefMatchChecker : public PrefMatchChecker { 342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit StringPrefMatchChecker(const char* path); 344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~StringPrefMatchChecker(); 345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Implementation of PrefMatchChecker. 347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool IsExitConditionSatisfied() OVERRIDE; 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 349a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 350116680a4aac90f2aa7413d9095a592090648e557Ben MurdochStringPrefMatchChecker::StringPrefMatchChecker(const char* path) 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : PrefMatchChecker(path) { 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 353a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 354116680a4aac90f2aa7413d9095a592090648e557Ben MurdochStringPrefMatchChecker::~StringPrefMatchChecker() { 355a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 356a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 357116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool StringPrefMatchChecker::IsExitConditionSatisfied() { 358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return StringPrefMatches(GetPath()); 359a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 360a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 361a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace 362a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 363a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool AwaitListPrefMatches(const char* pref_name) { 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ListPrefMatchChecker checker(pref_name); 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch checker.Wait(); 366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return !checker.TimedOut(); 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool AwaitBooleanPrefMatches(const char* pref_name) { 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BooleanPrefMatchChecker checker(pref_name); 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch checker.Wait(); 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return !checker.TimedOut(); 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool AwaitIntegerPrefMatches(const char* pref_name) { 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IntegerPrefMatchChecker checker(pref_name); 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch checker.Wait(); 378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return !checker.TimedOut(); 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool AwaitStringPrefMatches(const char* pref_name) { 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StringPrefMatchChecker checker(pref_name); 383a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch checker.Wait(); 384a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return !checker.TimedOut(); 385a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 386a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace preferences_helper 388