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

Unified Diff: components/password_manager/core/browser/password_store_default.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: components/password_manager/core/browser/password_store_default.cc
diff --git a/components/password_manager/core/browser/password_store_default.cc b/components/password_manager/core/browser/password_store_default.cc
index 627472d2dbb075d869c053deae503f956fb9b052..abebed9a7f331a07df3f092b0de8e399e26a666c 100644
--- a/components/password_manager/core/browser/password_store_default.cc
+++ b/components/password_manager/core/browser/password_store_default.cc
@@ -18,17 +18,34 @@ namespace password_manager {
PasswordStoreDefault::PasswordStoreDefault(
scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
- LoginDatabase* login_db)
- : PasswordStore(main_thread_runner, db_thread_runner), login_db_(login_db) {
- DCHECK(login_db);
+ scoped_ptr<LoginDatabase> login_db)
+ : PasswordStore(main_thread_runner, db_thread_runner),
+ login_db_(login_db.Pass()) {
}
PasswordStoreDefault::~PasswordStoreDefault() {
}
+bool PasswordStoreDefault::Init(
+ const syncer::SyncableService::StartSyncFlare& flare) {
+ ScheduleTask(base::Bind(&PasswordStoreDefault::InitOnDBThread, this));
+ return PasswordStore::Init(flare);
+}
+
+void PasswordStoreDefault::InitOnDBThread() {
+ DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
+ DCHECK(login_db_);
+ if (!login_db_->Init()) {
+ login_db_.reset();
+ LOG(ERROR) << "Could not create/open login database.";
+ }
+}
+
void PasswordStoreDefault::ReportMetricsImpl(
const std::string& sync_username,
bool custom_passphrase_sync_enabled) {
+ if (!login_db_)
+ return;
DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
login_db_->ReportMetrics(sync_username, custom_passphrase_sync_enabled);
}
@@ -36,12 +53,16 @@ void PasswordStoreDefault::ReportMetricsImpl(
PasswordStoreChangeList PasswordStoreDefault::AddLoginImpl(
const PasswordForm& form) {
DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
+ if (!login_db_)
+ return PasswordStoreChangeList();
return login_db_->AddLogin(form);
}
PasswordStoreChangeList PasswordStoreDefault::UpdateLoginImpl(
const PasswordForm& form) {
DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
+ if (!login_db_)
+ return PasswordStoreChangeList();
return login_db_->UpdateLogin(form);
}
@@ -49,7 +70,7 @@ PasswordStoreChangeList PasswordStoreDefault::RemoveLoginImpl(
const PasswordForm& form) {
DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
PasswordStoreChangeList changes;
- if (login_db_->RemoveLogin(form))
+ if (login_db_ && login_db_->RemoveLogin(form))
changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form));
return changes;
}
@@ -59,7 +80,8 @@ PasswordStoreChangeList PasswordStoreDefault::RemoveLoginsCreatedBetweenImpl(
base::Time delete_end) {
std::vector<PasswordForm*> forms;
PasswordStoreChangeList changes;
- if (login_db_->GetLoginsCreatedBetween(delete_begin, delete_end, &forms)) {
+ if (login_db_ &&
+ login_db_->GetLoginsCreatedBetween(delete_begin, delete_end, &forms)) {
if (login_db_->RemoveLoginsCreatedBetween(delete_begin, delete_end)) {
for (std::vector<PasswordForm*>::const_iterator it = forms.begin();
it != forms.end(); ++it) {
@@ -78,7 +100,8 @@ PasswordStoreChangeList PasswordStoreDefault::RemoveLoginsSyncedBetweenImpl(
base::Time delete_end) {
std::vector<PasswordForm*> forms;
PasswordStoreChangeList changes;
- if (login_db_->GetLoginsSyncedBetween(delete_begin, delete_end, &forms)) {
+ if (login_db_ &&
+ login_db_->GetLoginsSyncedBetween(delete_begin, delete_end, &forms)) {
if (login_db_->RemoveLoginsSyncedBetween(delete_begin, delete_end)) {
for (std::vector<PasswordForm*>::const_iterator it = forms.begin();
it != forms.end(); ++it) {
@@ -97,7 +120,8 @@ void PasswordStoreDefault::GetLoginsImpl(
AuthorizationPromptPolicy prompt_policy,
const ConsumerCallbackRunner& callback_runner) {
std::vector<PasswordForm*> matched_forms;
- login_db_->GetLogins(form, &matched_forms);
+ if (login_db_)
+ login_db_->GetLogins(form, &matched_forms);
callback_runner.Run(matched_forms);
}
@@ -115,13 +139,13 @@ void PasswordStoreDefault::GetBlacklistLoginsImpl(GetLoginsRequest* request) {
bool PasswordStoreDefault::FillAutofillableLogins(
std::vector<PasswordForm*>* forms) {
DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
- return login_db_->GetAutofillableLogins(forms);
+ return login_db_ && login_db_->GetAutofillableLogins(forms);
}
bool PasswordStoreDefault::FillBlacklistLogins(
std::vector<PasswordForm*>* forms) {
DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
- return login_db_->GetBlacklistLogins(forms);
+ return login_db_ && login_db_->GetBlacklistLogins(forms);
}
} // namespace password_manager

Powered by Google App Engine
This is Rietveld 408576698