blob: 5a00cd5f0c9d7e7fcbb07db1b4de1786c7098778 [file] [log] [blame]
// 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/test/live_sync/live_preferences_sync_test.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"
LivePreferencesSyncTest::LivePreferencesSyncTest(TestType test_type)
: LiveSyncTest(test_type),
use_verifier_prefs_(true) {}
LivePreferencesSyncTest::~LivePreferencesSyncTest() {}
PrefService* LivePreferencesSyncTest::GetPrefs(int index) {
return GetProfile(index)->GetPrefs();
}
PrefService* LivePreferencesSyncTest::GetVerifierPrefs() {
return verifier()->GetPrefs();
}
void LivePreferencesSyncTest::ChangeBooleanPref(int index,
const char* pref_name) {
bool new_value = !GetPrefs(index)->GetBoolean(pref_name);
GetPrefs(index)->SetBoolean(pref_name, new_value);
if (use_verifier_prefs_)
GetVerifierPrefs()->SetBoolean(pref_name, new_value);
}
void LivePreferencesSyncTest::ChangeIntegerPref(int index,
const char* pref_name,
int new_value) {
GetPrefs(index)->SetInteger(pref_name, new_value);
if (use_verifier_prefs_)
GetVerifierPrefs()->SetInteger(pref_name, new_value);
}
void LivePreferencesSyncTest::ChangeDoublePref(int index,
const char* pref_name,
double new_value) {
GetPrefs(index)->SetDouble(pref_name, new_value);
if (use_verifier_prefs_)
GetVerifierPrefs()->SetDouble(pref_name, new_value);
}
void LivePreferencesSyncTest::ChangeStringPref(int index,
const char* pref_name,
const std::string& new_value) {
GetPrefs(index)->SetString(pref_name, new_value);
if (use_verifier_prefs_)
GetVerifierPrefs()->SetString(pref_name, new_value);
}
void LivePreferencesSyncTest::AppendStringPref(
int index,
const char* pref_name,
const std::string& append_value) {
ChangeStringPref(index, pref_name,
GetPrefs(index)->GetString(pref_name) + append_value);
}
void LivePreferencesSyncTest::ChangeFilePathPref(int index,
const char* pref_name,
const FilePath& new_value) {
GetPrefs(index)->SetFilePath(pref_name, new_value);
if (use_verifier_prefs_)
GetVerifierPrefs()->SetFilePath(pref_name, new_value);
}
void LivePreferencesSyncTest::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 (use_verifier_prefs_) {
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 LivePreferencesSyncTest::BooleanPrefMatches(const char* pref_name) {
bool reference_value;
if (use_verifier_prefs_) {
reference_value = GetVerifierPrefs()->GetBoolean(pref_name);
} else {
reference_value = GetPrefs(0)->GetBoolean(pref_name);
}
for (int i = 0; i < 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 LivePreferencesSyncTest::IntegerPrefMatches(const char* pref_name) {
int reference_value;
if (use_verifier_prefs_) {
reference_value = GetVerifierPrefs()->GetInteger(pref_name);
} else {
reference_value = GetPrefs(0)->GetInteger(pref_name);
}
for (int i = 0; i < 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 LivePreferencesSyncTest::DoublePrefMatches(const char* pref_name) {
double reference_value;
if (use_verifier_prefs_) {
reference_value = GetVerifierPrefs()->GetDouble(pref_name);
} else {
reference_value = GetPrefs(0)->GetDouble(pref_name);
}
for (int i = 0; i < 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 LivePreferencesSyncTest::StringPrefMatches(const char* pref_name) {
std::string reference_value;
if (use_verifier_prefs_) {
reference_value = GetVerifierPrefs()->GetString(pref_name);
} else {
reference_value = GetPrefs(0)->GetString(pref_name);
}
for (int i = 0; i < 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 LivePreferencesSyncTest::FilePathPrefMatches(const char* pref_name) {
FilePath reference_value;
if (use_verifier_prefs_) {
reference_value = GetVerifierPrefs()->GetFilePath(pref_name);
} else {
reference_value = GetPrefs(0)->GetFilePath(pref_name);
}
for (int i = 0; i < 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 LivePreferencesSyncTest::ListPrefMatches(const char* pref_name) {
const ListValue* reference_value;
if (use_verifier_prefs_) {
reference_value = GetVerifierPrefs()->GetList(pref_name);
} else {
reference_value = GetPrefs(0)->GetList(pref_name);
}
for (int i = 0; i < 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;
}
void LivePreferencesSyncTest::DisableVerifier() {
use_verifier_prefs_ = false;
}
bool LivePreferencesSyncTest::EnableEncryption(int index) {
return GetClient(index)->EnableEncryptionForType(syncable::PREFERENCES);
}
bool LivePreferencesSyncTest::IsEncrypted(int index) {
return GetClient(index)->IsTypeEncrypted(syncable::PREFERENCES);
}