OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/passwords/manage_passwords_state.h" | 5 #include "chrome/browser/ui/passwords/manage_passwords_state.h" |
6 | 6 |
| 7 #include <algorithm> |
7 #include <utility> | 8 #include <utility> |
8 | 9 |
9 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
10 #include "components/password_manager/core/browser/browser_save_password_progres
s_logger.h" | 11 #include "components/password_manager/core/browser/browser_save_password_progres
s_logger.h" |
11 #include "components/password_manager/core/browser/log_manager.h" | 12 #include "components/password_manager/core/browser/log_manager.h" |
12 #include "components/password_manager/core/browser/password_form_manager.h" | 13 #include "components/password_manager/core/browser/password_form_manager.h" |
13 #include "components/password_manager/core/browser/password_manager.h" | 14 #include "components/password_manager/core/browser/password_manager.h" |
14 #include "components/password_manager/core/browser/password_manager_client.h" | 15 #include "components/password_manager/core/browser/password_manager_client.h" |
15 | 16 |
16 using password_manager::PasswordFormManager; | 17 using password_manager::PasswordFormManager; |
17 using autofill::PasswordFormMap; | |
18 | 18 |
19 namespace { | 19 namespace { |
20 | 20 |
21 std::vector<std::unique_ptr<autofill::PasswordForm>> DeepCopyMapToVector( | 21 std::vector<std::unique_ptr<autofill::PasswordForm>> DeepCopyMapToVector( |
22 const PasswordFormMap& password_form_map) { | 22 const std::map<base::string16, const autofill::PasswordForm*>& |
| 23 password_form_map) { |
23 std::vector<std::unique_ptr<autofill::PasswordForm>> ret; | 24 std::vector<std::unique_ptr<autofill::PasswordForm>> ret; |
24 ret.reserve(password_form_map.size()); | 25 ret.reserve(password_form_map.size()); |
25 for (const auto& form_pair : password_form_map) | 26 for (const auto& form_pair : password_form_map) |
26 ret.push_back(base::MakeUnique<autofill::PasswordForm>(*form_pair.second)); | 27 ret.push_back(base::MakeUnique<autofill::PasswordForm>(*form_pair.second)); |
27 return ret; | 28 return ret; |
28 } | 29 } |
29 | 30 |
30 void AppendDeepCopyVector( | 31 void AppendDeepCopyVector( |
31 const std::vector<std::unique_ptr<autofill::PasswordForm>>& forms, | 32 const std::vector<const autofill::PasswordForm*>& forms, |
32 std::vector<std::unique_ptr<autofill::PasswordForm>>* result) { | 33 std::vector<std::unique_ptr<autofill::PasswordForm>>* result) { |
33 result->reserve(result->size() + forms.size()); | 34 result->reserve(result->size() + forms.size()); |
34 for (const auto& form : forms) | 35 for (const auto& form : forms) |
35 result->push_back(base::MakeUnique<autofill::PasswordForm>(*form)); | 36 result->push_back(base::MakeUnique<autofill::PasswordForm>(*form)); |
36 } | 37 } |
37 | 38 |
38 // Updates one form in |forms| that has the same unique key as |updated_form|. | 39 // Updates one form in |forms| that has the same unique key as |updated_form|. |
39 // Returns true if the form was found and updated. | 40 // Returns true if the form was found and updated. |
40 bool UpdateFormInVector( | 41 bool UpdateFormInVector( |
41 const autofill::PasswordForm& updated_form, | 42 const autofill::PasswordForm& updated_form, |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 local_credentials_forms_.push_back(base::MakeUnique<autofill::PasswordForm>( | 139 local_credentials_forms_.push_back(base::MakeUnique<autofill::PasswordForm>( |
139 form_manager_->pending_credentials())); | 140 form_manager_->pending_credentials())); |
140 } | 141 } |
141 AppendDeepCopyVector(form_manager_->federated_matches(), | 142 AppendDeepCopyVector(form_manager_->federated_matches(), |
142 &local_credentials_forms_); | 143 &local_credentials_forms_); |
143 origin_ = form_manager_->observed_form().origin; | 144 origin_ = form_manager_->observed_form().origin; |
144 SetState(password_manager::ui::CONFIRMATION_STATE); | 145 SetState(password_manager::ui::CONFIRMATION_STATE); |
145 } | 146 } |
146 | 147 |
147 void ManagePasswordsState::OnPasswordAutofilled( | 148 void ManagePasswordsState::OnPasswordAutofilled( |
148 const PasswordFormMap& password_form_map, | 149 const std::map<base::string16, const autofill::PasswordForm*>& |
| 150 password_form_map, |
149 const GURL& origin, | 151 const GURL& origin, |
150 const std::vector<std::unique_ptr<autofill::PasswordForm>>* | 152 const std::vector<const autofill::PasswordForm*>* federated_matches) { |
151 federated_matches) { | |
152 DCHECK(!password_form_map.empty()); | 153 DCHECK(!password_form_map.empty()); |
153 ClearData(); | 154 ClearData(); |
154 bool only_PSL_matches = | 155 bool only_PSL_matches = std::all_of( |
155 std::all_of(password_form_map.begin(), password_form_map.end(), | 156 password_form_map.begin(), password_form_map.end(), |
156 [](const PasswordFormMap::value_type& p) { | 157 [](const std::map<base::string16, |
157 return p.second->is_public_suffix_match; | 158 const autofill::PasswordForm*>::value_type& p) { |
158 }); | 159 return p.second->is_public_suffix_match; |
| 160 }); |
159 if (only_PSL_matches) { | 161 if (only_PSL_matches) { |
160 // Don't show the UI for PSL matched passwords. They are not stored for this | 162 // Don't show the UI for PSL matched passwords. They are not stored for this |
161 // page and cannot be deleted. | 163 // page and cannot be deleted. |
162 origin_ = GURL(); | 164 origin_ = GURL(); |
163 SetState(password_manager::ui::INACTIVE_STATE); | 165 SetState(password_manager::ui::INACTIVE_STATE); |
164 } else { | 166 } else { |
165 local_credentials_forms_ = DeepCopyMapToVector(password_form_map); | 167 local_credentials_forms_ = DeepCopyMapToVector(password_form_map); |
166 if (federated_matches) | 168 if (federated_matches) |
167 AppendDeepCopyVector(*federated_matches, &local_credentials_forms_); | 169 AppendDeepCopyVector(*federated_matches, &local_credentials_forms_); |
168 origin_ = origin; | 170 origin_ = origin; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 DCHECK(client_); | 252 DCHECK(client_); |
251 if (client_->GetLogManager()->IsLoggingActive()) { | 253 if (client_->GetLogManager()->IsLoggingActive()) { |
252 password_manager::BrowserSavePasswordProgressLogger logger( | 254 password_manager::BrowserSavePasswordProgressLogger logger( |
253 client_->GetLogManager()); | 255 client_->GetLogManager()); |
254 logger.LogNumber( | 256 logger.LogNumber( |
255 autofill::SavePasswordProgressLogger::STRING_NEW_UI_STATE, | 257 autofill::SavePasswordProgressLogger::STRING_NEW_UI_STATE, |
256 state); | 258 state); |
257 } | 259 } |
258 state_ = state; | 260 state_ = state; |
259 } | 261 } |
OLD | NEW |