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 "components/password_manager/core/browser/credential_manager_pending_re
quest_task.h" | 5 #include "components/password_manager/core/browser/credential_manager_pending_re
quest_task.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <iterator> | 8 #include <iterator> |
9 #include <map> | 9 #include <map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 // Remove duplicates in |forms| before displaying them in the account chooser. | 64 // Remove duplicates in |forms| before displaying them in the account chooser. |
65 void FilterDuplicates( | 65 void FilterDuplicates( |
66 std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) { | 66 std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) { |
67 std::vector<std::unique_ptr<autofill::PasswordForm>> federated_forms; | 67 std::vector<std::unique_ptr<autofill::PasswordForm>> federated_forms; |
68 // The key is [username, signon_realm]. signon_realm is used only for PSL | 68 // The key is [username, signon_realm]. signon_realm is used only for PSL |
69 // matches because those entries have it in the UI. | 69 // matches because those entries have it in the UI. |
70 std::map<std::pair<base::string16, std::string>, | 70 std::map<std::pair<base::string16, std::string>, |
71 std::unique_ptr<autofill::PasswordForm>> | 71 std::unique_ptr<autofill::PasswordForm>> |
72 credentials; | 72 credentials; |
73 for (auto& form : *forms) { | 73 for (auto& form : *forms) { |
74 if (!form->federation_origin.unique()) { | 74 if (!form->federation_origin.opaque()) { |
75 federated_forms.push_back(std::move(form)); | 75 federated_forms.push_back(std::move(form)); |
76 } else { | 76 } else { |
77 auto key = std::make_pair( | 77 auto key = std::make_pair( |
78 form->username_value, | 78 form->username_value, |
79 form->is_public_suffix_match ? form->signon_realm : std::string()); | 79 form->is_public_suffix_match ? form->signon_realm : std::string()); |
80 auto it = credentials.find(key); | 80 auto it = credentials.find(key); |
81 if (it == credentials.end() || IsBetterMatch(*form, *it->second)) | 81 if (it == credentials.end() || IsBetterMatch(*form, *it->second)) |
82 credentials[key] = std::move(form); | 82 credentials[key] = std::move(form); |
83 } | 83 } |
84 } | 84 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 mediation_); | 154 mediation_); |
155 delegate_->SendCredential(send_callback_, CredentialInfo()); | 155 delegate_->SendCredential(send_callback_, CredentialInfo()); |
156 return; | 156 return; |
157 } | 157 } |
158 | 158 |
159 std::vector<std::unique_ptr<autofill::PasswordForm>> local_results; | 159 std::vector<std::unique_ptr<autofill::PasswordForm>> local_results; |
160 std::vector<std::unique_ptr<autofill::PasswordForm>> psl_results; | 160 std::vector<std::unique_ptr<autofill::PasswordForm>> psl_results; |
161 for (auto& form : results) { | 161 for (auto& form : results) { |
162 // Ensure that the form we're looking at matches the password and | 162 // Ensure that the form we're looking at matches the password and |
163 // federation filters provided. | 163 // federation filters provided. |
164 if (!((form->federation_origin.unique() && include_passwords_) || | 164 if (!((form->federation_origin.opaque() && include_passwords_) || |
165 (!form->federation_origin.unique() && | 165 (!form->federation_origin.opaque() && |
166 federations_.count(form->federation_origin.Serialize())))) { | 166 federations_.count(form->federation_origin.Serialize())))) { |
167 continue; | 167 continue; |
168 } | 168 } |
169 | 169 |
170 // PasswordFrom and GURL have different definition of origin. | 170 // PasswordFrom and GURL have different definition of origin. |
171 // PasswordForm definition: scheme, host, port and path. | 171 // PasswordForm definition: scheme, host, port and path. |
172 // GURL definition: scheme, host, and port. | 172 // GURL definition: scheme, host, and port. |
173 // So we can't compare them directly. | 173 // So we can't compare them directly. |
174 if (form->is_affiliation_based_match || | 174 if (form->is_affiliation_based_match || |
175 form->origin.GetOrigin() == origin_.GetOrigin()) { | 175 form->origin.GetOrigin() == origin_.GetOrigin()) { |
(...skipping 15 matching lines...) Expand all Loading... |
191 // | 191 // |
192 // Moreover, we only return such a credential if the user has opted-in via the | 192 // Moreover, we only return such a credential if the user has opted-in via the |
193 // first-run experience. | 193 // first-run experience. |
194 const bool can_use_autosignin = | 194 const bool can_use_autosignin = |
195 mediation_ != CredentialMediationRequirement::kRequired && | 195 mediation_ != CredentialMediationRequirement::kRequired && |
196 local_results.size() == 1u && delegate_->IsZeroClickAllowed(); | 196 local_results.size() == 1u && delegate_->IsZeroClickAllowed(); |
197 if (can_use_autosignin && !local_results[0]->skip_zero_click && | 197 if (can_use_autosignin && !local_results[0]->skip_zero_click && |
198 !password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 198 !password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
199 delegate_->client()->GetPrefs())) { | 199 delegate_->client()->GetPrefs())) { |
200 CredentialInfo info(*local_results[0], | 200 CredentialInfo info(*local_results[0], |
201 local_results[0]->federation_origin.unique() | 201 local_results[0]->federation_origin.opaque() |
202 ? CredentialType::CREDENTIAL_TYPE_PASSWORD | 202 ? CredentialType::CREDENTIAL_TYPE_PASSWORD |
203 : CredentialType::CREDENTIAL_TYPE_FEDERATED); | 203 : CredentialType::CREDENTIAL_TYPE_FEDERATED); |
204 delegate_->client()->NotifyUserAutoSignin(std::move(local_results), | 204 delegate_->client()->NotifyUserAutoSignin(std::move(local_results), |
205 origin_); | 205 origin_); |
206 base::RecordAction(base::UserMetricsAction("CredentialManager_Autosignin")); | 206 base::RecordAction(base::UserMetricsAction("CredentialManager_Autosignin")); |
207 LogCredentialManagerGetResult( | 207 LogCredentialManagerGetResult( |
208 metrics_util::CREDENTIAL_MANAGER_GET_AUTOSIGNIN, mediation_); | 208 metrics_util::CREDENTIAL_MANAGER_GET_AUTOSIGNIN, mediation_); |
209 delegate_->SendCredential(send_callback_, info); | 209 delegate_->SendCredential(send_callback_, info); |
210 return; | 210 return; |
211 } | 211 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 base::Bind( | 257 base::Bind( |
258 &CredentialManagerPendingRequestTaskDelegate::SendPasswordForm, | 258 &CredentialManagerPendingRequestTaskDelegate::SendPasswordForm, |
259 base::Unretained(delegate_), send_callback_, mediation_))) { | 259 base::Unretained(delegate_), send_callback_, mediation_))) { |
260 LogCredentialManagerGetResult(metrics_util::CREDENTIAL_MANAGER_GET_NONE, | 260 LogCredentialManagerGetResult(metrics_util::CREDENTIAL_MANAGER_GET_NONE, |
261 mediation_); | 261 mediation_); |
262 delegate_->SendCredential(send_callback_, CredentialInfo()); | 262 delegate_->SendCredential(send_callback_, CredentialInfo()); |
263 } | 263 } |
264 } | 264 } |
265 | 265 |
266 } // namespace password_manager | 266 } // namespace password_manager |
OLD | NEW |