password_store_default.cc revision 010d83a9304c5a91596085d917d248abff47903a
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 PasswordStoreChangeList changes; 38 if (login_db_->AddLogin(form)) 39 changes.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form)); 40 return changes; 41} 42 43PasswordStoreChangeList PasswordStoreDefault::UpdateLoginImpl( 44 const PasswordForm& form) { 45 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 46 PasswordStoreChangeList changes; 47 if (login_db_->UpdateLogin(form, NULL)) 48 changes.push_back(PasswordStoreChange(PasswordStoreChange::UPDATE, form)); 49 return changes; 50} 51 52PasswordStoreChangeList PasswordStoreDefault::RemoveLoginImpl( 53 const PasswordForm& form) { 54 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 55 PasswordStoreChangeList changes; 56 if (login_db_->RemoveLogin(form)) 57 changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form)); 58 return changes; 59} 60 61PasswordStoreChangeList PasswordStoreDefault::RemoveLoginsCreatedBetweenImpl( 62 const base::Time& delete_begin, const base::Time& delete_end) { 63 std::vector<PasswordForm*> forms; 64 PasswordStoreChangeList changes; 65 if (login_db_->GetLoginsCreatedBetween(delete_begin, delete_end, &forms)) { 66 if (login_db_->RemoveLoginsCreatedBetween(delete_begin, delete_end)) { 67 for (std::vector<PasswordForm*>::const_iterator it = forms.begin(); 68 it != forms.end(); ++it) { 69 changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, 70 **it)); 71 } 72 LogStatsForBulkDeletion(changes.size()); 73 } 74 } 75 STLDeleteElements(&forms); 76 return changes; 77} 78 79void PasswordStoreDefault::GetLoginsImpl( 80 const autofill::PasswordForm& form, 81 AuthorizationPromptPolicy prompt_policy, 82 const ConsumerCallbackRunner& callback_runner) { 83 std::vector<PasswordForm*> matched_forms; 84 login_db_->GetLogins(form, &matched_forms); 85 callback_runner.Run(matched_forms); 86} 87 88void PasswordStoreDefault::GetAutofillableLoginsImpl( 89 GetLoginsRequest* request) { 90 FillAutofillableLogins(request->result()); 91 ForwardLoginsResult(request); 92} 93 94void PasswordStoreDefault::GetBlacklistLoginsImpl( 95 GetLoginsRequest* request) { 96 FillBlacklistLogins(request->result()); 97 ForwardLoginsResult(request); 98} 99 100bool PasswordStoreDefault::FillAutofillableLogins( 101 std::vector<PasswordForm*>* forms) { 102 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 103 return login_db_->GetAutofillableLogins(forms); 104} 105 106bool PasswordStoreDefault::FillBlacklistLogins( 107 std::vector<PasswordForm*>* forms) { 108 DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread()); 109 return login_db_->GetBlacklistLogins(forms); 110} 111 112} // namespace password_manager 113