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