Remove obsolete UserSettings class

BUG=105076
TEST=


Review URL: http://codereview.chromium.org/8636020

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112342 0039d316-1c4b-4281-b951-d872f2087c98
parent 542acf69
This diff is collapsed.
// 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.
//
// Implement the storage of service tokens in memory.
#include "chrome/browser/sync/util/user_settings.h"
#include "base/logging.h"
#include "chrome/browser/password_manager/encryptor.h"
#include "chrome/browser/sync/util/sqlite_utils.h"
namespace browser_sync {
void UserSettings::SetAuthTokenForService(
const std::string& email,
const std::string& service_name,
const std::string& long_lived_service_token) {
DVLOG(1) << "Saving auth token " << long_lived_service_token
<< " for " << email << "for service " << service_name;
std::string encrypted_service_token;
if (!Encryptor::EncryptString(long_lived_service_token,
&encrypted_service_token)) {
LOG(ERROR) << "Encrytion failed: " << long_lived_service_token;
return;
}
ScopedDBHandle dbhandle(this);
sqlite_utils::SQLStatement statement;
statement.prepare(dbhandle.get(),
"INSERT INTO cookies "
"(email, service_name, service_token) "
"values (?, ?, ?)");
statement.bind_string(0, email);
statement.bind_string(1, service_name);
statement.bind_blob(2, encrypted_service_token.data(),
encrypted_service_token.size());
if (SQLITE_DONE != statement.step()) {
LOG(FATAL) << sqlite3_errmsg(dbhandle.get());
}
}
bool UserSettings::GetLastUserAndServiceToken(const std::string& service_name,
std::string* username,
std::string* service_token) {
ScopedDBHandle dbhandle(this);
sqlite_utils::SQLStatement query;
query.prepare(dbhandle.get(),
"SELECT email, service_token FROM cookies"
" WHERE service_name = ?");
query.bind_string(0, service_name.c_str());
if (SQLITE_ROW == query.step()) {
std::string encrypted_service_token;
query.column_blob_as_string(1, &encrypted_service_token);
if (!Encryptor::DecryptString(encrypted_service_token, service_token)) {
LOG(ERROR) << "Decryption failed: " << encrypted_service_token;
return false;
}
*username = query.column_string(0);
DVLOG(1) << "Found service token for:" << *username << " @ " << service_name
<< " returning: " << *service_token;
return true;
}
DVLOG(1) << "Couldn't find service token for " << service_name;
return false;
}
} // namespace browser_sync
// 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 <limits>
#include <string>
#include "base/file_util.h"
#include "base/scoped_temp_dir.h"
#include "base/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/password_manager/encryptor.h"
#include "chrome/browser/sync/syncable/directory_manager.h"
#include "chrome/browser/sync/util/user_settings.h"
#include "sql/statement.h"
#include "testing/gtest/include/gtest/gtest.h"
using std::numeric_limits;
namespace {
const FilePath::CharType kV10UserSettingsDB[] =
FILE_PATH_LITERAL("Version10Settings.sqlite3");
const FilePath::CharType kV11UserSettingsDB[] =
FILE_PATH_LITERAL("Version11Settings.sqlite3");
const FilePath::CharType kOldStyleSyncDataDB[] =
FILE_PATH_LITERAL("OldStyleSyncData.sqlite3");
} // namespace
class UserSettingsTest : public testing::Test {
public:
UserSettingsTest() : sync_data_("Some sync data") {}
virtual void SetUp() {
#if defined(OS_MACOSX)
// Need to mock the Keychain for unit tests on Mac to avoid possible
// blocking UI. |SetAuthTokenForService| uses Encryptor.
Encryptor::UseMockKeychain(true);
#endif
}
// Creates and populates the V10 database files within
// |destination_directory|.
void SetUpVersion10Databases(const FilePath& destination_directory) {
v10_user_setting_db_path_ =
destination_directory.Append(FilePath(kV10UserSettingsDB));
sql::Connection db;
ASSERT_TRUE(db.Open(v10_user_setting_db_path_));
old_style_sync_data_path_ =
destination_directory.Append(FilePath(kOldStyleSyncDataDB));
ASSERT_EQ(sync_data_.length(),
static_cast<size_t>(file_util::WriteFile(
old_style_sync_data_path_, sync_data_.data(),
sync_data_.length())));
// Create settings table.
ASSERT_TRUE(db.Execute(
"CREATE TABLE settings (email, key, value, PRIMARY KEY(email, key)"
" ON CONFLICT REPLACE)"));
// Add a blank signin table.
ASSERT_TRUE(db.Execute(
"CREATE TABLE signin_types (signin, signin_type)"));
// Create and populate version table.
ASSERT_TRUE(db.Execute("CREATE TABLE db_version (version)"));
{
const char* query = "INSERT INTO db_version VALUES(?)";
sql::Statement s(db.GetUniqueStatement(query));
if (!s)
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
s.BindInt(0, 10);
if (!s.Run())
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
}
// Create shares table.
ASSERT_TRUE(db.Execute(
"CREATE TABLE shares (email, share_name, file_name,"
" PRIMARY KEY(email, share_name) ON CONFLICT REPLACE)"));
// Populate a share.
{
const char* query = "INSERT INTO shares VALUES(?, ?, ?)";
sql::Statement s(db.GetUniqueStatement(query));
if (!s)
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
s.BindString(0, "foo@foo.com");
s.BindString(1, "foo@foo.com");
#if defined(OS_WIN)
s.BindString(2, WideToUTF8(old_style_sync_data_path_.value()));
#elif defined(OS_POSIX)
s.BindString(2, old_style_sync_data_path_.value());
#endif
if (!s.Run())
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
}
}
// Creates and populates the V11 database file within
// |destination_directory|.
void SetUpVersion11Database(const FilePath& destination_directory) {
v11_user_setting_db_path_ =
destination_directory.Append(FilePath(kV11UserSettingsDB));
sql::Connection db;
ASSERT_TRUE(db.Open(v11_user_setting_db_path_));
// Create settings table.
ASSERT_TRUE(db.Execute(
"CREATE TABLE settings (email, key, value, PRIMARY KEY(email, key)"
" ON CONFLICT REPLACE)"));
// Create and populate version table.
ASSERT_TRUE(db.Execute("CREATE TABLE db_version (version)"));
{
const char* query = "INSERT INTO db_version VALUES(?)";
sql::Statement s(db.GetUniqueStatement(query));
if (!s)
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
s.BindInt(0, 11);
if (!s.Run())
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
}
ASSERT_TRUE(db.Execute(
"CREATE TABLE signin_types (signin, signin_type)"));
{
const char* query = "INSERT INTO signin_types VALUES(?, ?)";
sql::Statement s(db.GetUniqueStatement(query));
if (!s)
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
s.BindString(0, "test");
s.BindString(1, "test");
if (!s.Run())
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
}
}
const std::string& sync_data() const { return sync_data_; }
const FilePath& v10_user_setting_db_path() const {
return v10_user_setting_db_path_;
}
const FilePath& v11_user_setting_db_path() const {
return v11_user_setting_db_path_;
}
const FilePath& old_style_sync_data_path() const {
return old_style_sync_data_path_;
}
private:
FilePath v10_user_setting_db_path_;
FilePath old_style_sync_data_path_;
FilePath v11_user_setting_db_path_;
std::string sync_data_;
};
TEST_F(UserSettingsTest, MigrateFromV10ToV11) {
ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
SetUpVersion10Databases(temp_dir.path());
{
// Create a UserSettings, which should trigger migration code. We do this
// inside a scoped block so it closes itself and we can poke around to see
// what happened later.
browser_sync::UserSettings settings;
settings.Init(v10_user_setting_db_path());
}
// Now poke around using sqlite to see if UserSettings migrated properly.
sql::Connection db;
ASSERT_TRUE(db.Open(v10_user_setting_db_path()));
// Note that we don't use ScopedStatement to avoid closing the sqlite handle
// before finalizing the statement.
{
const char* query = "SELECT version FROM db_version";
sql::Statement version_query(db.GetUniqueStatement(query));
if (!version_query)
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
ASSERT_TRUE(version_query.Step());
const int version = version_query.ColumnInt(0);
EXPECT_GE(version, 11);
}
EXPECT_FALSE(file_util::PathExists(old_style_sync_data_path()));
FilePath new_style_path = temp_dir.path().Append(
syncable::DirectoryManager::GetSyncDataDatabaseFilename());
std::string contents;
ASSERT_TRUE(file_util::ReadFileToString(new_style_path, &contents));
EXPECT_TRUE(sync_data() == contents);
}
TEST_F(UserSettingsTest, MigrateFromV11ToV12) {
ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
SetUpVersion11Database(temp_dir.path());
{
browser_sync::UserSettings settings;
settings.Init(v11_user_setting_db_path());
}
sql::Connection db;
ASSERT_TRUE(db.Open(v11_user_setting_db_path()));
{
const char* query = "SELECT version FROM db_version";
sql::Statement version_query(db.GetUniqueStatement(query));
if (!version_query)
LOG(FATAL) << query << "\n" << db.GetErrorMessage();
ASSERT_TRUE(version_query.Step());
const int version = version_query.ColumnInt(0);
EXPECT_GE(version, 12);
const char* query2 = "SELECT name FROM sqlite_master "
"WHERE type='table' AND name='signin_types'";
sql::Statement table_query(db.GetUniqueStatement(query2));
if (!table_query)
LOG(FATAL) << query2 << "\n" << db.GetErrorMessage();
ASSERT_FALSE(table_query.Step());
}
}
TEST_F(UserSettingsTest, APEncode) {
std::string test;
char i;
for (i = numeric_limits<char>::min(); i < numeric_limits<char>::max(); ++i)
test.push_back(i);
test.push_back(i);
const std::string encoded = browser_sync::APEncode(test);
const std::string decoded = browser_sync::APDecode(encoded);
ASSERT_EQ(test, decoded);
}
TEST_F(UserSettingsTest, PersistEmptyToken) {
ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
browser_sync::UserSettings settings;
settings.Init(temp_dir.path().AppendASCII("UserSettings.sqlite3"));
settings.SetAuthTokenForService("username", "service", "");
std::string username;
std::string token;
ASSERT_TRUE(settings.GetLastUserAndServiceToken("service", &username,
&token));
EXPECT_EQ("", token);
EXPECT_EQ("username", username);
}
TEST_F(UserSettingsTest, PersistNonEmptyToken) {
ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
browser_sync::UserSettings settings;
settings.Init(temp_dir.path().AppendASCII("UserSettings.sqlite3"));
settings.SetAuthTokenForService("username", "service",
"oonetuhasonteuhasonetuhasonetuhasonetuhasouhasonetuhasonetuhasonetuhah"
"oonetuhasonteuhasonetuhasonetuhasonetuhasouhasonetuhasonetuhasonetuhah"
"oonetuhasonteuhasonetuhasonetuhasonetuhasouhasonetuhasonetuhasonetuhah");
std::string username;
std::string token;
ASSERT_TRUE(settings.GetLastUserAndServiceToken("service", &username,
&token));
EXPECT_EQ(
"oonetuhasonteuhasonetuhasonetuhasonetuhasouhasonetuhasonetuhasonetuhah"
"oonetuhasonteuhasonetuhasonetuhasonetuhasouhasonetuhasonetuhasonetuhah"
"oonetuhasonteuhasonetuhasonetuhasonetuhasouhasonetuhasonetuhasonetuhah",
token);
EXPECT_EQ("username", username);
}
// 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/util/user_settings.h"
#include <string>
#include "base/logging.h"
#include "chrome/browser/sync/util/data_encryption.h"
#include "chrome/browser/sync/util/sqlite_utils.h"
using std::string;
namespace browser_sync {
void UserSettings::SetAuthTokenForService(const string& email,
const string& service_name, const string& long_lived_service_token) {
ScopedDBHandle dbhandle(this);
sqlite_utils::SQLStatement statement;
statement.prepare(dbhandle.get(),
"INSERT INTO cookies "
"(email, service_name, service_token) "
"values (?, ?, ?)");
statement.bind_string(0, email);
statement.bind_string(1, service_name);
statement.bind_blob(2, &EncryptData(long_lived_service_token));
if (SQLITE_DONE != statement.step()) {
LOG(FATAL) << sqlite3_errmsg(dbhandle.get());
}
}
// Returns the username whose credentials have been persisted as well as
// a service token for the named service.
bool UserSettings::GetLastUserAndServiceToken(const string& service_name,
string* username,
string* service_token) {
ScopedDBHandle dbhandle(this);
sqlite_utils::SQLStatement query;
query.prepare(dbhandle.get(),
"SELECT email, service_token FROM cookies"
" WHERE service_name = ?");
query.bind_string(0, service_name.c_str());
if (SQLITE_ROW == query.step()) {
*username = query.column_string(0);
std::vector<uint8> encrypted_service_token;
query.column_blob_as_vector(1, &encrypted_service_token);
DecryptData(encrypted_service_token, service_token);
return true;
}
return false;
}
} // namespace browser_sync
...@@ -481,10 +481,6 @@ ...@@ -481,10 +481,6 @@
'browser/sync/util/time.h', 'browser/sync/util/time.h',
'browser/sync/util/unrecoverable_error_info.h', 'browser/sync/util/unrecoverable_error_info.h',
'browser/sync/util/unrecoverable_error_info.cc', 'browser/sync/util/unrecoverable_error_info.cc',
'browser/sync/util/user_settings.cc',
'browser/sync/util/user_settings.h',
'browser/sync/util/user_settings_posix.cc',
'browser/sync/util/user_settings_win.cc',
'browser/sync/util/weak_handle.cc', 'browser/sync/util/weak_handle.cc',
'browser/sync/util/weak_handle.h', 'browser/sync/util/weak_handle.h',
], ],
......
...@@ -3279,7 +3279,6 @@ ...@@ -3279,7 +3279,6 @@
'browser/sync/util/extensions_activity_monitor_unittest.cc', 'browser/sync/util/extensions_activity_monitor_unittest.cc',
'browser/sync/util/protobuf_unittest.cc', 'browser/sync/util/protobuf_unittest.cc',
'browser/sync/util/immutable_unittest.cc', 'browser/sync/util/immutable_unittest.cc',
'browser/sync/util/user_settings_unittest.cc',
'browser/sync/util/weak_handle_unittest.cc', 'browser/sync/util/weak_handle_unittest.cc',
], ],
'include_dirs': [ 'include_dirs': [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment