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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/sync/test/integration/preferences_helper.h" 6 7 #include "base/prefs/pref_service.h" 8 #include "base/values.h" 9 #include "chrome/browser/prefs/scoped_user_pref_update.h" 10 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/sync/profile_sync_service_harness.h" 12 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" 13 #include "chrome/browser/sync/test/integration/sync_test.h" 14 15 using sync_datatype_helper::test; 16 17 namespace preferences_helper { 18 19 PrefService* GetPrefs(int index) { 20 return test()->GetProfile(index)->GetPrefs(); 21 } 22 23 PrefService* GetVerifierPrefs() { 24 return test()->verifier()->GetPrefs(); 25 } 26 27 void ChangeBooleanPref(int index, const char* pref_name) { 28 bool new_value = !GetPrefs(index)->GetBoolean(pref_name); 29 GetPrefs(index)->SetBoolean(pref_name, new_value); 30 if (test()->use_verifier()) 31 GetVerifierPrefs()->SetBoolean(pref_name, new_value); 32 } 33 34 void ChangeIntegerPref(int index, const char* pref_name, int new_value) { 35 GetPrefs(index)->SetInteger(pref_name, new_value); 36 if (test()->use_verifier()) 37 GetVerifierPrefs()->SetInteger(pref_name, new_value); 38 } 39 40 void ChangeInt64Pref(int index, const char* pref_name, int64 new_value) { 41 GetPrefs(index)->SetInt64(pref_name, new_value); 42 if (test()->use_verifier()) 43 GetVerifierPrefs()->SetInt64(pref_name, new_value); 44 } 45 46 void ChangeDoublePref(int index, const char* pref_name, double new_value) { 47 GetPrefs(index)->SetDouble(pref_name, new_value); 48 if (test()->use_verifier()) 49 GetVerifierPrefs()->SetDouble(pref_name, new_value); 50 } 51 52 void ChangeStringPref(int index, 53 const char* pref_name, 54 const std::string& new_value) { 55 GetPrefs(index)->SetString(pref_name, new_value); 56 if (test()->use_verifier()) 57 GetVerifierPrefs()->SetString(pref_name, new_value); 58 } 59 60 void AppendStringPref(int index, 61 const char* pref_name, 62 const std::string& append_value) { 63 ChangeStringPref(index, 64 pref_name, 65 GetPrefs(index)->GetString(pref_name) + append_value); 66 } 67 68 void ChangeFilePathPref(int index, 69 const char* pref_name, 70 const base::FilePath& new_value) { 71 GetPrefs(index)->SetFilePath(pref_name, new_value); 72 if (test()->use_verifier()) 73 GetVerifierPrefs()->SetFilePath(pref_name, new_value); 74 } 75 76 void ChangeListPref(int index, 77 const char* pref_name, 78 const ListValue& new_value) { 79 { 80 ListPrefUpdate update(GetPrefs(index), pref_name); 81 ListValue* list = update.Get(); 82 for (ListValue::const_iterator it = new_value.begin(); 83 it != new_value.end(); 84 ++it) { 85 list->Append((*it)->DeepCopy()); 86 } 87 } 88 89 if (test()->use_verifier()) { 90 ListPrefUpdate update_verifier(GetVerifierPrefs(), pref_name); 91 ListValue* list_verifier = update_verifier.Get(); 92 for (ListValue::const_iterator it = new_value.begin(); 93 it != new_value.end(); 94 ++it) { 95 list_verifier->Append((*it)->DeepCopy()); 96 } 97 } 98 } 99 100 bool BooleanPrefMatches(const char* pref_name) { 101 bool reference_value; 102 if (test()->use_verifier()) { 103 reference_value = GetVerifierPrefs()->GetBoolean(pref_name); 104 } else { 105 reference_value = GetPrefs(0)->GetBoolean(pref_name); 106 } 107 for (int i = 0; i < test()->num_clients(); ++i) { 108 if (reference_value != GetPrefs(i)->GetBoolean(pref_name)) { 109 LOG(ERROR) << "Boolean preference " << pref_name << " mismatched in" 110 << " profile " << i << "."; 111 return false; 112 } 113 } 114 return true; 115 } 116 117 bool IntegerPrefMatches(const char* pref_name) { 118 int reference_value; 119 if (test()->use_verifier()) { 120 reference_value = GetVerifierPrefs()->GetInteger(pref_name); 121 } else { 122 reference_value = GetPrefs(0)->GetInteger(pref_name); 123 } 124 for (int i = 0; i < test()->num_clients(); ++i) { 125 if (reference_value != GetPrefs(i)->GetInteger(pref_name)) { 126 LOG(ERROR) << "Integer preference " << pref_name << " mismatched in" 127 << " profile " << i << "."; 128 return false; 129 } 130 } 131 return true; 132 } 133 134 bool Int64PrefMatches(const char* pref_name) { 135 int64 reference_value; 136 if (test()->use_verifier()) { 137 reference_value = GetVerifierPrefs()->GetInt64(pref_name); 138 } else { 139 reference_value = GetPrefs(0)->GetInt64(pref_name); 140 } 141 for (int i = 0; i < test()->num_clients(); ++i) { 142 if (reference_value != GetPrefs(i)->GetInt64(pref_name)) { 143 LOG(ERROR) << "Integer preference " << pref_name << " mismatched in" 144 << " profile " << i << "."; 145 return false; 146 } 147 } 148 return true; 149 } 150 151 bool DoublePrefMatches(const char* pref_name) { 152 double reference_value; 153 if (test()->use_verifier()) { 154 reference_value = GetVerifierPrefs()->GetDouble(pref_name); 155 } else { 156 reference_value = GetPrefs(0)->GetDouble(pref_name); 157 } 158 for (int i = 0; i < test()->num_clients(); ++i) { 159 if (reference_value != GetPrefs(i)->GetDouble(pref_name)) { 160 LOG(ERROR) << "Double preference " << pref_name << " mismatched in" 161 << " profile " << i << "."; 162 return false; 163 } 164 } 165 return true; 166 } 167 168 bool StringPrefMatches(const char* pref_name) { 169 std::string reference_value; 170 if (test()->use_verifier()) { 171 reference_value = GetVerifierPrefs()->GetString(pref_name); 172 } else { 173 reference_value = GetPrefs(0)->GetString(pref_name); 174 } 175 for (int i = 0; i < test()->num_clients(); ++i) { 176 if (reference_value != GetPrefs(i)->GetString(pref_name)) { 177 LOG(ERROR) << "String preference " << pref_name << " mismatched in" 178 << " profile " << i << "."; 179 return false; 180 } 181 } 182 return true; 183 } 184 185 bool FilePathPrefMatches(const char* pref_name) { 186 base::FilePath reference_value; 187 if (test()->use_verifier()) { 188 reference_value = GetVerifierPrefs()->GetFilePath(pref_name); 189 } else { 190 reference_value = GetPrefs(0)->GetFilePath(pref_name); 191 } 192 for (int i = 0; i < test()->num_clients(); ++i) { 193 if (reference_value != GetPrefs(i)->GetFilePath(pref_name)) { 194 LOG(ERROR) << "base::FilePath preference " << pref_name 195 << " mismatched in" << " profile " << i << "."; 196 return false; 197 } 198 } 199 return true; 200 } 201 202 bool ListPrefMatches(const char* pref_name) { 203 const ListValue* reference_value; 204 if (test()->use_verifier()) { 205 reference_value = GetVerifierPrefs()->GetList(pref_name); 206 } else { 207 reference_value = GetPrefs(0)->GetList(pref_name); 208 } 209 for (int i = 0; i < test()->num_clients(); ++i) { 210 if (!reference_value->Equals(GetPrefs(i)->GetList(pref_name))) { 211 LOG(ERROR) << "List preference " << pref_name << " mismatched in" 212 << " profile " << i << "."; 213 return false; 214 } 215 } 216 return true; 217 } 218 219 } // namespace preferences_helper 220