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

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

Issue 838453003: Open the LoginDatabase on the DB thread, not the UI thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix nits from vabr@. Created 5 years, 11 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
Index: chrome/browser/password_manager/password_store_mac.cc
diff --git a/chrome/browser/password_manager/password_store_mac.cc b/chrome/browser/password_manager/password_store_mac.cc
index 416bab57ddb8d6d2f554b248cf953150344c4c98..bb50c7425f1a6208bdb54b9f42369294e273602c 100644
--- a/chrome/browser/password_manager/password_store_mac.cc
+++ b/chrome/browser/password_manager/password_store_mac.cc
@@ -863,11 +863,11 @@ OSType MacKeychainPasswordFormAdapter::CreatorCodeForSearch() {
PasswordStoreMac::PasswordStoreMac(
scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
- AppleKeychain* keychain,
- password_manager::LoginDatabase* login_db)
+ scoped_ptr<AppleKeychain> keychain,
+ scoped_ptr<password_manager::LoginDatabase> login_db)
: password_manager::PasswordStore(main_thread_runner, db_thread_runner),
- keychain_(keychain),
- login_metadata_db_(login_db) {
+ keychain_(keychain.Pass()),
+ login_metadata_db_(login_db.Pass()) {
DCHECK(keychain_.get());
DCHECK(login_metadata_db_.get());
}
@@ -883,9 +883,20 @@ bool PasswordStoreMac::Init(
thread_.reset(NULL);
return false;
}
+
+ ScheduleTask(base::Bind(&PasswordStoreMac::InitOnBackgroundThread, this));
return password_manager::PasswordStore::Init(flare);
}
+void PasswordStoreMac::InitOnBackgroundThread() {
+ DCHECK(thread_->message_loop() == base::MessageLoop::current());
+ DCHECK(login_metadata_db_);
+ if (!login_metadata_db_->Init()) {
+ login_metadata_db_.reset();
+ LOG(ERROR) << "Could not create/open login database.";
+ }
+}
+
void PasswordStoreMac::Shutdown() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
password_manager::PasswordStore::Shutdown();
@@ -903,6 +914,8 @@ PasswordStoreMac::GetBackgroundTaskRunner() {
void PasswordStoreMac::ReportMetricsImpl(const std::string& sync_username,
bool custom_passphrase_sync_enabled) {
+ if (!login_metadata_db_)
+ return;
login_metadata_db_->ReportMetrics(sync_username,
custom_passphrase_sync_enabled);
}
@@ -910,16 +923,17 @@ void PasswordStoreMac::ReportMetricsImpl(const std::string& sync_username,
PasswordStoreChangeList PasswordStoreMac::AddLoginImpl(
const PasswordForm& form) {
DCHECK(thread_->message_loop() == base::MessageLoop::current());
- PasswordStoreChangeList changes;
- if (AddToKeychainIfNecessary(form)) {
- changes = login_metadata_db_->AddLogin(form);
- }
- return changes;
+ if (login_metadata_db_ && AddToKeychainIfNecessary(form))
+ return login_metadata_db_->AddLogin(form);
+ return PasswordStoreChangeList();
}
PasswordStoreChangeList PasswordStoreMac::UpdateLoginImpl(
const PasswordForm& form) {
DCHECK(thread_->message_loop() == base::MessageLoop::current());
+ if (!login_metadata_db_)
+ return PasswordStoreChangeList();
+
PasswordStoreChangeList changes = login_metadata_db_->UpdateLogin(form);
MacKeychainPasswordFormAdapter keychain_adapter(keychain_.get());
@@ -942,7 +956,7 @@ PasswordStoreChangeList PasswordStoreMac::RemoveLoginImpl(
const PasswordForm& form) {
DCHECK(thread_->message_loop() == base::MessageLoop::current());
PasswordStoreChangeList changes;
- if (login_metadata_db_->RemoveLogin(form)) {
+ if (login_metadata_db_ && login_metadata_db_->RemoveLogin(form)) {
// See if we own a Keychain item associated with this item. We can do an
// exact search rather than messing around with trying to do fuzzy matching
// because passwords that we created will always have an exact-match
@@ -970,15 +984,15 @@ PasswordStoreChangeList PasswordStoreMac::RemoveLoginsCreatedBetweenImpl(
base::Time delete_end) {
PasswordStoreChangeList changes;
ScopedVector<PasswordForm> forms;
- if (login_metadata_db_->GetLoginsCreatedBetween(delete_begin, delete_end,
- &forms.get())) {
- if (login_metadata_db_->RemoveLoginsCreatedBetween(delete_begin,
- delete_end)) {
- RemoveKeychainForms(forms.get());
- CleanOrphanedForms(&forms.get());
- changes = FormsToRemoveChangeList(forms.get());
- LogStatsForBulkDeletion(changes.size());
- }
+ if (login_metadata_db_ &&
+ login_metadata_db_->GetLoginsCreatedBetween(delete_begin, delete_end,
+ &forms.get()) &&
+ login_metadata_db_->RemoveLoginsCreatedBetween(delete_begin,
+ delete_end)) {
+ RemoveKeychainForms(forms.get());
+ CleanOrphanedForms(&forms.get());
+ changes = FormsToRemoveChangeList(forms.get());
+ LogStatsForBulkDeletion(changes.size());
}
return changes;
}
@@ -988,15 +1002,14 @@ PasswordStoreChangeList PasswordStoreMac::RemoveLoginsSyncedBetweenImpl(
base::Time delete_end) {
PasswordStoreChangeList changes;
ScopedVector<PasswordForm> forms;
- if (login_metadata_db_->GetLoginsSyncedBetween(
- delete_begin, delete_end, &forms.get())) {
- if (login_metadata_db_->RemoveLoginsSyncedBetween(delete_begin,
- delete_end)) {
- RemoveKeychainForms(forms.get());
- CleanOrphanedForms(&forms.get());
- changes = FormsToRemoveChangeList(forms.get());
- LogStatsForBulkDeletionDuringRollback(changes.size());
- }
+ if (login_metadata_db_ &&
+ login_metadata_db_->GetLoginsSyncedBetween(delete_begin, delete_end,
+ &forms.get()) &&
+ login_metadata_db_->RemoveLoginsSyncedBetween(delete_begin, delete_end)) {
+ RemoveKeychainForms(forms.get());
+ CleanOrphanedForms(&forms.get());
+ changes = FormsToRemoveChangeList(forms.get());
+ LogStatsForBulkDeletionDuringRollback(changes.size());
}
return changes;
}
@@ -1008,6 +1021,11 @@ void PasswordStoreMac::GetLoginsImpl(
chrome::ScopedSecKeychainSetUserInteractionAllowed user_interaction_allowed(
prompt_policy == ALLOW_PROMPT);
+ if (!login_metadata_db_) {
+ callback_runner.Run(std::vector<PasswordForm*>());
+ return;
+ }
+
ScopedVector<PasswordForm> database_forms;
login_metadata_db_->GetLogins(form, &database_forms.get());
@@ -1076,7 +1094,8 @@ bool PasswordStoreMac::FillAutofillableLogins(
DCHECK(thread_->message_loop() == base::MessageLoop::current());
ScopedVector<PasswordForm> database_forms;
- if (!login_metadata_db_->GetAutofillableLogins(&database_forms.get()))
+ if (!login_metadata_db_ ||
+ !login_metadata_db_->GetAutofillableLogins(&database_forms.get()))
return false;
std::vector<PasswordForm*> merged_forms =
@@ -1095,7 +1114,7 @@ bool PasswordStoreMac::FillAutofillableLogins(
bool PasswordStoreMac::FillBlacklistLogins(
std::vector<PasswordForm*>* forms) {
DCHECK(thread_->message_loop() == base::MessageLoop::current());
- return login_metadata_db_->GetBlacklistLogins(forms);
+ return login_metadata_db_ && login_metadata_db_->GetBlacklistLogins(forms);
}
bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) {
@@ -1108,6 +1127,7 @@ bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) {
bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm(
const autofill::PasswordForm& form) {
+ DCHECK(login_metadata_db_);
bool has_match = false;
std::vector<PasswordForm*> database_forms;
login_metadata_db_->GetLogins(form, &database_forms);
@@ -1129,6 +1149,7 @@ bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm(
void PasswordStoreMac::RemoveDatabaseForms(
const std::vector<PasswordForm*>& forms) {
+ DCHECK(login_metadata_db_);
for (std::vector<PasswordForm*>::const_iterator i = forms.begin();
i != forms.end(); ++i) {
login_metadata_db_->RemoveLogin(**i);
@@ -1147,6 +1168,8 @@ void PasswordStoreMac::RemoveKeychainForms(
void PasswordStoreMac::CleanOrphanedForms(std::vector<PasswordForm*>* forms) {
DCHECK(forms);
+ DCHECK(login_metadata_db_);
+
std::vector<PasswordForm*> database_forms;
login_metadata_db_->GetAutofillableLogins(&database_forms);
« no previous file with comments | « chrome/browser/password_manager/password_store_mac.h ('k') | chrome/browser/password_manager/password_store_mac_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698