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