| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 #include "components/password_manager/core/browser/credential_manager_impl.h" | 4 #include "components/password_manager/core/browser/credential_manager_impl.h" |
| 5 | 5 |
| 6 #include "base/metrics/user_metrics.h" | 6 #include "base/metrics/user_metrics.h" |
| 7 #include "components/password_manager/core/browser/credential_manager_logger.h" | 7 #include "components/password_manager/core/browser/credential_manager_logger.h" |
| 8 #include "components/password_manager/core/browser/form_fetcher_impl.h" | 8 #include "components/password_manager/core/browser/form_fetcher_impl.h" |
| 9 #include "components/password_manager/core/browser/form_saver.h" | 9 #include "components/password_manager/core/browser/form_saver.h" |
| 10 #include "components/password_manager/core/browser/password_manager_util.h" | 10 #include "components/password_manager/core/browser/password_manager_util.h" |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 pending_request_.reset(); | 165 pending_request_.reset(); |
| 166 } | 166 } |
| 167 | 167 |
| 168 void CredentialManagerImpl::SendPasswordForm( | 168 void CredentialManagerImpl::SendPasswordForm( |
| 169 const SendCredentialCallback& send_callback, | 169 const SendCredentialCallback& send_callback, |
| 170 CredentialMediationRequirement mediation, | 170 CredentialMediationRequirement mediation, |
| 171 const autofill::PasswordForm* form) { | 171 const autofill::PasswordForm* form) { |
| 172 CredentialInfo info; | 172 CredentialInfo info; |
| 173 if (form) { | 173 if (form) { |
| 174 password_manager::CredentialType type_to_return = | 174 password_manager::CredentialType type_to_return = |
| 175 form->federation_origin.unique() | 175 form->federation_origin.opaque() |
| 176 ? CredentialType::CREDENTIAL_TYPE_PASSWORD | 176 ? CredentialType::CREDENTIAL_TYPE_PASSWORD |
| 177 : CredentialType::CREDENTIAL_TYPE_FEDERATED; | 177 : CredentialType::CREDENTIAL_TYPE_FEDERATED; |
| 178 info = CredentialInfo(*form, type_to_return); | 178 info = CredentialInfo(*form, type_to_return); |
| 179 if (PasswordStore* store = GetPasswordStore()) { | 179 if (PasswordStore* store = GetPasswordStore()) { |
| 180 if (form->skip_zero_click && IsZeroClickAllowed()) { | 180 if (form->skip_zero_click && IsZeroClickAllowed()) { |
| 181 autofill::PasswordForm update_form = *form; | 181 autofill::PasswordForm update_form = *form; |
| 182 update_form.skip_zero_click = false; | 182 update_form.skip_zero_click = false; |
| 183 store->UpdateLogin(update_form); | 183 store->UpdateLogin(update_form); |
| 184 } | 184 } |
| 185 } | 185 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 215 const autofill::PasswordForm& form = form_manager_->pending_credentials(); | 215 const autofill::PasswordForm& form = form_manager_->pending_credentials(); |
| 216 | 216 |
| 217 if (form_manager_->IsPendingCredentialsPublicSuffixMatch()) { | 217 if (form_manager_->IsPendingCredentialsPublicSuffixMatch()) { |
| 218 // Having a credential with a PSL match implies there is no credential with | 218 // Having a credential with a PSL match implies there is no credential with |
| 219 // an exactly matching origin and username. In order to avoid showing a save | 219 // an exactly matching origin and username. In order to avoid showing a save |
| 220 // bubble to the user Save() is called directly. | 220 // bubble to the user Save() is called directly. |
| 221 form_manager_->Save(); | 221 form_manager_->Save(); |
| 222 return; | 222 return; |
| 223 } | 223 } |
| 224 | 224 |
| 225 if (!form.federation_origin.unique()) { | 225 if (!form.federation_origin.opaque()) { |
| 226 // If this is a federated credential, check it against the federated matches | 226 // If this is a federated credential, check it against the federated matches |
| 227 // produced by the PasswordFormManager. If a match is found, update it and | 227 // produced by the PasswordFormManager. If a match is found, update it and |
| 228 // return. | 228 // return. |
| 229 for (auto* match : form_manager_->form_fetcher()->GetFederatedMatches()) { | 229 for (auto* match : form_manager_->form_fetcher()->GetFederatedMatches()) { |
| 230 if (match->username_value == form.username_value && | 230 if (match->username_value == form.username_value && |
| 231 match->federation_origin.IsSameOriginWith(form.federation_origin)) { | 231 match->federation_origin.IsSameOriginWith(form.federation_origin)) { |
| 232 form_manager_->Update(*match); | 232 form_manager_->Update(*match); |
| 233 return; | 233 return; |
| 234 } | 234 } |
| 235 } | 235 } |
| 236 } else if (!form_manager_->IsNewLogin()) { | 236 } else if (!form_manager_->IsNewLogin()) { |
| 237 // Otherwise, if this is not a new password credential, update the existing | 237 // Otherwise, if this is not a new password credential, update the existing |
| 238 // credential without prompting the user. This will also update the | 238 // credential without prompting the user. This will also update the |
| 239 // 'skip_zero_click' state, as we've gotten an explicit signal that the page | 239 // 'skip_zero_click' state, as we've gotten an explicit signal that the page |
| 240 // understands the credential management API and so can be trusted to notify | 240 // understands the credential management API and so can be trusted to notify |
| 241 // us when they sign the user out. | 241 // us when they sign the user out. |
| 242 form_manager_->Update(*form_manager_->preferred_match()); | 242 form_manager_->Update(*form_manager_->preferred_match()); |
| 243 return; | 243 return; |
| 244 } | 244 } |
| 245 | 245 |
| 246 // Otherwise, this is a new form, so as the user if they'd like to save. | 246 // Otherwise, this is a new form, so as the user if they'd like to save. |
| 247 client_->PromptUserToSaveOrUpdatePassword(std::move(form_manager_), false); | 247 client_->PromptUserToSaveOrUpdatePassword(std::move(form_manager_), false); |
| 248 } | 248 } |
| 249 | 249 |
| 250 GURL CredentialManagerImpl::GetLastCommittedURL() const { | 250 GURL CredentialManagerImpl::GetLastCommittedURL() const { |
| 251 return client_->GetLastCommittedEntryURL(); | 251 return client_->GetLastCommittedEntryURL(); |
| 252 } | 252 } |
| 253 | 253 |
| 254 } // namespace password_manager | 254 } // namespace password_manager |
| OLD | NEW |