password_store_default.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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. 4 5#include "components/password_manager/core/browser/password_store_default.h" 6 7#include <set> 8 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" 13 14using autofill::PasswordForm; 15 16namespace password_manager { 17 18PasswordStoreDefault::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) { 23 DCHECK(login_db); 24} 25 26PasswordStoreDefault::~PasswordStoreDefault() { 27} 28 29void PasswordStoreDefault::ReportMetricsImpl() { 30 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 31 login_db_->ReportMetrics(); 32} 33 34PasswordStoreChangeList PasswordStoreDefault::AddLoginImpl( 35 const PasswordForm& form) { 36 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 37 return login_db_->AddLogin(form); 38} 39 40PasswordStoreChangeList PasswordStoreDefault::UpdateLoginImpl( 41 const PasswordForm& form) { 42 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 43 return login_db_->UpdateLogin(form); 44} 45 46PasswordStoreChangeList PasswordStoreDefault::RemoveLoginImpl( 47 const PasswordForm& form) { 48 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 49 PasswordStoreChangeList changes; 50 if (login_db_->RemoveLogin(form)) 51 changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form)); 52 return changes; 53} 54 55PasswordStoreChangeList PasswordStoreDefault::RemoveLoginsCreatedBetweenImpl( 56 const base::Time& delete_begin, const base::Time& delete_end) { 57 std::vector<PasswordForm*> forms; 58 PasswordStoreChangeList changes; 59 if (login_db_->GetLoginsCreatedBetween(delete_begin, delete_end, &forms)) { 60 if (login_db_->RemoveLoginsCreatedBetween(delete_begin, delete_end)) { 61 for (std::vector<PasswordForm*>::const_iterator it = forms.begin(); 62 it != forms.end(); ++it) { 63 changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, 64 **it)); 65 } 66 LogStatsForBulkDeletion(changes.size()); 67 } 68 } 69 STLDeleteElements(&forms); 70 return changes; 71} 72 73PasswordStoreChangeList PasswordStoreDefault::RemoveLoginsSyncedBetweenImpl( 74 base::Time delete_begin, 75 base::Time delete_end) { 76 std::vector<PasswordForm*> forms; 77 PasswordStoreChangeList changes; 78 if (login_db_->GetLoginsSyncedBetween(delete_begin, delete_end, &forms)) { 79 if (login_db_->RemoveLoginsSyncedBetween(delete_begin, delete_end)) { 80 for (std::vector<PasswordForm*>::const_iterator it = forms.begin(); 81 it != forms.end(); 82 ++it) { 83 changes.push_back( 84 PasswordStoreChange(PasswordStoreChange::REMOVE, **it)); 85 } 86 } 87 } 88 STLDeleteElements(&forms); 89 return changes; 90} 91 92void PasswordStoreDefault::GetLoginsImpl( 93 const autofill::PasswordForm& form, 94 AuthorizationPromptPolicy prompt_policy, 95 const ConsumerCallbackRunner& callback_runner) { 96 std::vector<PasswordForm*> matched_forms; 97 login_db_->GetLogins(form, &matched_forms); 98 callback_runner.Run(matched_forms); 99} 100 101void PasswordStoreDefault::GetAutofillableLoginsImpl( 102 GetLoginsRequest* request) { 103 FillAutofillableLogins(request->result()); 104 ForwardLoginsResult(request); 105} 106 107void PasswordStoreDefault::GetBlacklistLoginsImpl( 108 GetLoginsRequest* request) { 109 FillBlacklistLogins(request->result()); 110 ForwardLoginsResult(request); 111} 112 113bool PasswordStoreDefault::FillAutofillableLogins( 114 std::vector<PasswordForm*>* forms) { 115 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 116 return login_db_->GetAutofillableLogins(forms); 117} 118 119bool PasswordStoreDefault::FillBlacklistLogins( 120 std::vector<PasswordForm*>* forms) { 121 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 122 return login_db_->GetBlacklistLogins(forms); 123} 124 125} // namespace password_manager 126