|  | // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "chrome/browser/sync/test/integration/preferences_helper.h" | 
|  |  | 
|  | #include "base/values.h" | 
|  | #include "chrome/browser/prefs/pref_service.h" | 
|  | #include "chrome/browser/prefs/scoped_user_pref_update.h" | 
|  | #include "chrome/browser/profiles/profile.h" | 
|  | #include "chrome/browser/sync/profile_sync_service_harness.h" | 
|  | #include "chrome/browser/sync/test/integration/sync_test.h" | 
|  | #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" | 
|  |  | 
|  | using sync_datatype_helper::test; | 
|  |  | 
|  | namespace preferences_helper { | 
|  |  | 
|  | PrefService* GetPrefs(int index) { | 
|  | return test()->GetProfile(index)->GetPrefs(); | 
|  | } | 
|  |  | 
|  | PrefService* GetVerifierPrefs() { | 
|  | return test()->verifier()->GetPrefs(); | 
|  | } | 
|  |  | 
|  | void ChangeBooleanPref(int index, const char* pref_name) { | 
|  | bool new_value = !GetPrefs(index)->GetBoolean(pref_name); | 
|  | GetPrefs(index)->SetBoolean(pref_name, new_value); | 
|  | if (test()->use_verifier()) | 
|  | GetVerifierPrefs()->SetBoolean(pref_name, new_value); | 
|  | } | 
|  |  | 
|  | void ChangeIntegerPref(int index, const char* pref_name, int new_value) { | 
|  | GetPrefs(index)->SetInteger(pref_name, new_value); | 
|  | if (test()->use_verifier()) | 
|  | GetVerifierPrefs()->SetInteger(pref_name, new_value); | 
|  | } | 
|  |  | 
|  | void ChangeInt64Pref(int index, const char* pref_name, int64 new_value) { | 
|  | GetPrefs(index)->SetInt64(pref_name, new_value); | 
|  | if (test()->use_verifier()) | 
|  | GetVerifierPrefs()->SetInt64(pref_name, new_value); | 
|  | } | 
|  |  | 
|  | void ChangeDoublePref(int index, const char* pref_name, double new_value) { | 
|  | GetPrefs(index)->SetDouble(pref_name, new_value); | 
|  | if (test()->use_verifier()) | 
|  | GetVerifierPrefs()->SetDouble(pref_name, new_value); | 
|  | } | 
|  |  | 
|  | void ChangeStringPref(int index, | 
|  | const char* pref_name, | 
|  | const std::string& new_value) { | 
|  | GetPrefs(index)->SetString(pref_name, new_value); | 
|  | if (test()->use_verifier()) | 
|  | GetVerifierPrefs()->SetString(pref_name, new_value); | 
|  | } | 
|  |  | 
|  | void AppendStringPref(int index, | 
|  | const char* pref_name, | 
|  | const std::string& append_value) { | 
|  | ChangeStringPref(index, | 
|  | pref_name, | 
|  | GetPrefs(index)->GetString(pref_name) + append_value); | 
|  | } | 
|  |  | 
|  | void ChangeFilePathPref(int index, | 
|  | const char* pref_name, | 
|  | const FilePath& new_value) { | 
|  | GetPrefs(index)->SetFilePath(pref_name, new_value); | 
|  | if (test()->use_verifier()) | 
|  | GetVerifierPrefs()->SetFilePath(pref_name, new_value); | 
|  | } | 
|  |  | 
|  | void ChangeListPref(int index, | 
|  | const char* pref_name, | 
|  | const ListValue& new_value) { | 
|  | { | 
|  | ListPrefUpdate update(GetPrefs(index), pref_name); | 
|  | ListValue* list = update.Get(); | 
|  | for (ListValue::const_iterator it = new_value.begin(); | 
|  | it != new_value.end(); | 
|  | ++it) { | 
|  | list->Append((*it)->DeepCopy()); | 
|  | } | 
|  | } | 
|  |  | 
|  | if (test()->use_verifier()) { | 
|  | ListPrefUpdate update_verifier(GetVerifierPrefs(), pref_name); | 
|  | ListValue* list_verifier = update_verifier.Get(); | 
|  | for (ListValue::const_iterator it = new_value.begin(); | 
|  | it != new_value.end(); | 
|  | ++it) { | 
|  | list_verifier->Append((*it)->DeepCopy()); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | bool BooleanPrefMatches(const char* pref_name) { | 
|  | bool reference_value; | 
|  | if (test()->use_verifier()) { | 
|  | reference_value = GetVerifierPrefs()->GetBoolean(pref_name); | 
|  | } else { | 
|  | reference_value = GetPrefs(0)->GetBoolean(pref_name); | 
|  | } | 
|  | for (int i = 0; i < test()->num_clients(); ++i) { | 
|  | if (reference_value != GetPrefs(i)->GetBoolean(pref_name)) { | 
|  | LOG(ERROR) << "Boolean preference " << pref_name << " mismatched in" | 
|  | << " profile " << i << "."; | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool IntegerPrefMatches(const char* pref_name) { | 
|  | int reference_value; | 
|  | if (test()->use_verifier()) { | 
|  | reference_value = GetVerifierPrefs()->GetInteger(pref_name); | 
|  | } else { | 
|  | reference_value = GetPrefs(0)->GetInteger(pref_name); | 
|  | } | 
|  | for (int i = 0; i < test()->num_clients(); ++i) { | 
|  | if (reference_value != GetPrefs(i)->GetInteger(pref_name)) { | 
|  | LOG(ERROR) << "Integer preference " << pref_name << " mismatched in" | 
|  | << " profile " << i << "."; | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool Int64PrefMatches(const char* pref_name) { | 
|  | int64 reference_value; | 
|  | if (test()->use_verifier()) { | 
|  | reference_value = GetVerifierPrefs()->GetInt64(pref_name); | 
|  | } else { | 
|  | reference_value = GetPrefs(0)->GetInt64(pref_name); | 
|  | } | 
|  | for (int i = 0; i < test()->num_clients(); ++i) { | 
|  | if (reference_value != GetPrefs(i)->GetInt64(pref_name)) { | 
|  | LOG(ERROR) << "Integer preference " << pref_name << " mismatched in" | 
|  | << " profile " << i << "."; | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool DoublePrefMatches(const char* pref_name) { | 
|  | double reference_value; | 
|  | if (test()->use_verifier()) { | 
|  | reference_value = GetVerifierPrefs()->GetDouble(pref_name); | 
|  | } else { | 
|  | reference_value = GetPrefs(0)->GetDouble(pref_name); | 
|  | } | 
|  | for (int i = 0; i < test()->num_clients(); ++i) { | 
|  | if (reference_value != GetPrefs(i)->GetDouble(pref_name)) { | 
|  | LOG(ERROR) << "Double preference " << pref_name << " mismatched in" | 
|  | << " profile " << i << "."; | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool StringPrefMatches(const char* pref_name) { | 
|  | std::string reference_value; | 
|  | if (test()->use_verifier()) { | 
|  | reference_value = GetVerifierPrefs()->GetString(pref_name); | 
|  | } else { | 
|  | reference_value = GetPrefs(0)->GetString(pref_name); | 
|  | } | 
|  | for (int i = 0; i < test()->num_clients(); ++i) { | 
|  | if (reference_value != GetPrefs(i)->GetString(pref_name)) { | 
|  | LOG(ERROR) << "String preference " << pref_name << " mismatched in" | 
|  | << " profile " << i << "."; | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool FilePathPrefMatches(const char* pref_name) { | 
|  | FilePath reference_value; | 
|  | if (test()->use_verifier()) { | 
|  | reference_value = GetVerifierPrefs()->GetFilePath(pref_name); | 
|  | } else { | 
|  | reference_value = GetPrefs(0)->GetFilePath(pref_name); | 
|  | } | 
|  | for (int i = 0; i < test()->num_clients(); ++i) { | 
|  | if (reference_value != GetPrefs(i)->GetFilePath(pref_name)) { | 
|  | LOG(ERROR) << "FilePath preference " << pref_name << " mismatched in" | 
|  | << " profile " << i << "."; | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool ListPrefMatches(const char* pref_name) { | 
|  | const ListValue* reference_value; | 
|  | if (test()->use_verifier()) { | 
|  | reference_value = GetVerifierPrefs()->GetList(pref_name); | 
|  | } else { | 
|  | reference_value = GetPrefs(0)->GetList(pref_name); | 
|  | } | 
|  | for (int i = 0; i < test()->num_clients(); ++i) { | 
|  | if (!reference_value->Equals(GetPrefs(i)->GetList(pref_name))) { | 
|  | LOG(ERROR) << "List preference " << pref_name << " mismatched in" | 
|  | << " profile " << i << "."; | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | }  // namespace preferences_helper |