1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/password_manager/core/browser/password_store_default.h"
9 #include "base/logging.h"
10 #include "base/prefs/pref_service.h"
11 #include "base/stl_util.h"
12 #include "components/password_manager/core/browser/password_store_change.h"
14 using autofill::PasswordForm;
16 namespace password_manager {
18 PasswordStoreDefault::PasswordStoreDefault(
19 scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
20 scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
21 LoginDatabase* login_db)
22 : PasswordStore(main_thread_runner, db_thread_runner), login_db_(login_db) {
26 PasswordStoreDefault::~PasswordStoreDefault() {
29 void PasswordStoreDefault::ReportMetricsImpl(
30 const std::string& sync_username,
31 bool custom_passphrase_sync_enabled) {
32 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
33 login_db_->ReportMetrics(sync_username, custom_passphrase_sync_enabled);
36 PasswordStoreChangeList PasswordStoreDefault::AddLoginImpl(
37 const PasswordForm& form) {
38 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
39 return login_db_->AddLogin(form);
42 PasswordStoreChangeList PasswordStoreDefault::UpdateLoginImpl(
43 const PasswordForm& form) {
44 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
45 return login_db_->UpdateLogin(form);
48 PasswordStoreChangeList PasswordStoreDefault::RemoveLoginImpl(
49 const PasswordForm& form) {
50 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
51 PasswordStoreChangeList changes;
52 if (login_db_->RemoveLogin(form))
53 changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form));
57 PasswordStoreChangeList PasswordStoreDefault::RemoveLoginsCreatedBetweenImpl(
58 base::Time delete_begin,
59 base::Time delete_end) {
60 std::vector<PasswordForm*> forms;
61 PasswordStoreChangeList changes;
62 if (login_db_->GetLoginsCreatedBetween(delete_begin, delete_end, &forms)) {
63 if (login_db_->RemoveLoginsCreatedBetween(delete_begin, delete_end)) {
64 for (std::vector<PasswordForm*>::const_iterator it = forms.begin();
65 it != forms.end(); ++it) {
66 changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE,
69 LogStatsForBulkDeletion(changes.size());
72 STLDeleteElements(&forms);
76 PasswordStoreChangeList PasswordStoreDefault::RemoveLoginsSyncedBetweenImpl(
77 base::Time delete_begin,
78 base::Time delete_end) {
79 std::vector<PasswordForm*> forms;
80 PasswordStoreChangeList changes;
81 if (login_db_->GetLoginsSyncedBetween(delete_begin, delete_end, &forms)) {
82 if (login_db_->RemoveLoginsSyncedBetween(delete_begin, delete_end)) {
83 for (std::vector<PasswordForm*>::const_iterator it = forms.begin();
87 PasswordStoreChange(PasswordStoreChange::REMOVE, **it));
91 STLDeleteElements(&forms);
95 void PasswordStoreDefault::GetLoginsImpl(
96 const autofill::PasswordForm& form,
97 AuthorizationPromptPolicy prompt_policy,
98 const ConsumerCallbackRunner& callback_runner) {
99 std::vector<PasswordForm*> matched_forms;
100 login_db_->GetLogins(form, &matched_forms);
101 callback_runner.Run(matched_forms);
104 void PasswordStoreDefault::GetAutofillableLoginsImpl(
105 GetLoginsRequest* request) {
106 FillAutofillableLogins(request->result());
107 ForwardLoginsResult(request);
110 void PasswordStoreDefault::GetBlacklistLoginsImpl(
111 GetLoginsRequest* request) {
112 FillBlacklistLogins(request->result());
113 ForwardLoginsResult(request);
116 bool PasswordStoreDefault::FillAutofillableLogins(
117 std::vector<PasswordForm*>* forms) {
118 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
119 return login_db_->GetAutofillableLogins(forms);
122 bool PasswordStoreDefault::FillBlacklistLogins(
123 std::vector<PasswordForm*>* forms) {
124 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
125 return login_db_->GetBlacklistLogins(forms);
128 } // namespace password_manager