Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5327)

Unified Diff: chrome/browser/password_manager/password_store_x_unittest.cc

Issue 2866023: Linux: delete the unencrypted login database file after a successful password migration. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/password_manager/password_store_x.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/password_manager/password_store_x_unittest.cc
===================================================================
--- chrome/browser/password_manager/password_store_x_unittest.cc (revision 51079)
+++ chrome/browser/password_manager/password_store_x_unittest.cc (working copy)
@@ -27,6 +27,8 @@
using testing::WithArg;
using webkit_glue::PasswordForm;
+typedef std::vector<PasswordForm*> VectorOfForms;
+
namespace {
class MockPasswordStoreConsumer : public PasswordStoreConsumer {
@@ -243,65 +245,30 @@
MockLoginDatabaseReturn* mock_return_;
};
-const PasswordFormData g_autofillable_data[] = {
- { PasswordForm::SCHEME_HTML,
- "http://foo.example.com",
- "http://foo.example.com/origin",
- "http://foo.example.com/action",
- L"submit_element",
- L"username_element",
- L"password_element",
- L"username_value",
- L"password_value",
- true, false, 1 },
- { PasswordForm::SCHEME_HTML,
- "http://bar.example.com",
- "http://bar.example.com/origin",
- "http://bar.example.com/action",
- L"submit_element",
- L"username_element",
- L"password_element",
- L"username_value",
- L"password_value",
- true, false, 2 },
- { PasswordForm::SCHEME_HTML,
- "http://baz.example.com",
- "http://baz.example.com/origin",
- "http://baz.example.com/action",
- L"submit_element",
- L"username_element",
- L"password_element",
- L"username_value",
- L"password_value",
- true, false, 3 },
-};
-const PasswordFormData g_blacklisted_data[] = {
- { PasswordForm::SCHEME_HTML,
- "http://blacklisted.example.com",
- "http://blacklisted.example.com/origin",
- "http://blacklisted.example.com/action",
- L"submit_element",
- L"username_element",
- L"password_element",
- NULL,
- NULL,
- false, false, 1 },
- { PasswordForm::SCHEME_HTML,
- "http://blacklisted2.example.com",
- "http://blacklisted2.example.com/origin",
- "http://blacklisted2.example.com/action",
- L"submit_element",
- L"username_element",
- L"password_element",
- NULL,
- NULL,
- false, false, 2 },
-};
+// Generate |count| expected logins, either autofillable or blacklisted.
+void InitExpectedForms(bool autofillable, size_t count, VectorOfForms* forms) {
+ const char* domain = autofillable ? "example" : "blacklisted";
+ for (size_t i = 0; i < count; ++i) {
+ std::string realm = StringPrintf("http://%zu.%s.com", i, domain);
+ std::string origin = StringPrintf("http://%zu.%s.com/origin", i, domain);
+ std::string action = StringPrintf("http://%zu.%s.com/action", i, domain);
+ PasswordFormData data = {
+ PasswordForm::SCHEME_HTML,
+ realm.c_str(),
+ origin.c_str(),
+ action.c_str(),
+ L"submit_element",
+ L"username_element",
+ L"password_element",
+ autofillable ? L"username_value" : NULL,
+ autofillable ? L"password_value" : NULL,
+ autofillable, false, i + 1 };
+ forms->push_back(CreatePasswordFormFromData(data));
+ }
+}
} // anonymous namespace
-typedef std::vector<PasswordForm*> VectorOfForms;
-
// LoginDatabase isn't reference counted, but in these unit tests that won't be
// a problem as it always outlives the threads we post tasks to.
template<>
@@ -330,8 +297,7 @@
profile_.reset(new TestingProfile());
login_db_.reset(new LoginDatabase());
- ASSERT_TRUE(login_db_->Init(temp_dir_.path().Append(
- FILE_PATH_LITERAL("login_test"))));
+ ASSERT_TRUE(login_db_->Init(temp_dir_.path().Append("login_test")));
wds_ = new WebDataService();
ASSERT_TRUE(wds_->Init(temp_dir_.path()));
@@ -381,16 +347,10 @@
TEST_P(PasswordStoreXTest, WDSMigration) {
VectorOfForms expected_autofillable;
- for (unsigned int i = 0; i < ARRAYSIZE_UNSAFE(g_autofillable_data); ++i) {
- expected_autofillable.push_back(
- CreatePasswordFormFromData(g_autofillable_data[i]));
- }
+ InitExpectedForms(true, 5, &expected_autofillable);
VectorOfForms expected_blacklisted;
- for (unsigned int i = 0; i < ARRAYSIZE_UNSAFE(g_blacklisted_data); ++i) {
- expected_blacklisted.push_back(
- CreatePasswordFormFromData(g_blacklisted_data[i]));
- }
+ InitExpectedForms(false, 5, &expected_blacklisted);
// Populate the WDS with logins that should be migrated.
for (VectorOfForms::iterator it = expected_autofillable.begin();
@@ -642,17 +602,17 @@
TEST_P(PasswordStoreXTest, NativeMigration) {
VectorOfForms expected_autofillable;
- for (unsigned int i = 0; i < ARRAYSIZE_UNSAFE(g_autofillable_data); ++i) {
- expected_autofillable.push_back(
- CreatePasswordFormFromData(g_autofillable_data[i]));
- }
+ InitExpectedForms(true, 50, &expected_autofillable);
VectorOfForms expected_blacklisted;
- for (unsigned int i = 0; i < ARRAYSIZE_UNSAFE(g_blacklisted_data); ++i) {
- expected_blacklisted.push_back(
- CreatePasswordFormFromData(g_blacklisted_data[i]));
- }
+ InitExpectedForms(false, 50, &expected_blacklisted);
+ // Get the initial size of the login DB file, before we populate it.
+ // This will be used later to make sure it gets back to this size.
+ const FilePath login_db_file = temp_dir_.path().Append("login_test");
+ file_util::FileInfo db_file_start_info;
+ ASSERT_TRUE(file_util::GetFileInfo(login_db_file, &db_file_start_info));
+
LoginDatabase* login_db = login_db_.get();
// Populate the login DB with logins that should be migrated.
@@ -679,6 +639,11 @@
ChromeThread::PostTask(ChromeThread::DB, FROM_HERE, new SignalingTask(&done));
done.Wait();
+ // Get the new size of the login DB file. We expect it to be larger.
+ file_util::FileInfo db_file_full_info;
+ ASSERT_TRUE(file_util::GetFileInfo(login_db_file, &db_file_full_info));
+ EXPECT_GT(db_file_full_info.size, db_file_start_info.size);
+
// Pretend that the WDS migration has already taken place.
profile_->GetPrefs()->RegisterBooleanPref(prefs::kLoginDatabaseMigrated,
true);
@@ -756,6 +721,17 @@
ChromeThread::PostTask(ChromeThread::DB, FROM_HERE, new SignalingTask(&done));
done.Wait();
+ if (GetParam() == WORKING_BACKEND) {
+ // If the migration succeeded, then not only should there be no logins left
+ // in the login DB, but also the file should have been deleted and then
+ // recreated. We approximate checking for this by checking that the file
+ // size is equal to the size before we populated it, even though it was
+ // larger after populating it.
+ file_util::FileInfo db_file_end_info;
+ ASSERT_TRUE(file_util::GetFileInfo(login_db_file, &db_file_end_info));
+ EXPECT_EQ(db_file_start_info.size, db_file_end_info.size);
+ }
+
STLDeleteElements(&expected_autofillable);
STLDeleteElements(&expected_blacklisted);
}
« no previous file with comments | « chrome/browser/password_manager/password_store_x.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698