Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / components / password_manager / core / browser / password_store_default.cc
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
14 using autofill::PasswordForm;
15
16 namespace password_manager {
17
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) {
23   DCHECK(login_db);
24 }
25
26 PasswordStoreDefault::~PasswordStoreDefault() {
27 }
28
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);
34 }
35
36 PasswordStoreChangeList PasswordStoreDefault::AddLoginImpl(
37     const PasswordForm& form) {
38   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
39   return login_db_->AddLogin(form);
40 }
41
42 PasswordStoreChangeList PasswordStoreDefault::UpdateLoginImpl(
43     const PasswordForm& form) {
44   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
45   return login_db_->UpdateLogin(form);
46 }
47
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));
54   return changes;
55 }
56
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,
67                                               **it));
68       }
69       LogStatsForBulkDeletion(changes.size());
70     }
71   }
72   STLDeleteElements(&forms);
73   return changes;
74 }
75
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();
84            it != forms.end();
85            ++it) {
86         changes.push_back(
87             PasswordStoreChange(PasswordStoreChange::REMOVE, **it));
88       }
89     }
90   }
91   STLDeleteElements(&forms);
92   return changes;
93 }
94
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);
102 }
103
104 void PasswordStoreDefault::GetAutofillableLoginsImpl(
105     GetLoginsRequest* request) {
106   FillAutofillableLogins(request->result());
107   ForwardLoginsResult(request);
108 }
109
110 void PasswordStoreDefault::GetBlacklistLoginsImpl(
111     GetLoginsRequest* request) {
112   FillBlacklistLogins(request->result());
113   ForwardLoginsResult(request);
114 }
115
116 bool PasswordStoreDefault::FillAutofillableLogins(
117          std::vector<PasswordForm*>* forms) {
118   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
119   return login_db_->GetAutofillableLogins(forms);
120 }
121
122 bool PasswordStoreDefault::FillBlacklistLogins(
123          std::vector<PasswordForm*>* forms) {
124   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
125   return login_db_->GetBlacklistLogins(forms);
126 }
127
128 }  // namespace password_manager