| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/password_manager.h" | 5 #include "components/password_manager/core/browser/password_manager.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 } | 130 } |
| 131 | 131 |
| 132 return PreferredRealmIsFromAndroid(fill_data); | 132 return PreferredRealmIsFromAndroid(fill_data); |
| 133 } | 133 } |
| 134 | 134 |
| 135 bool AreAllFieldsEmpty(const PasswordForm& form) { | 135 bool AreAllFieldsEmpty(const PasswordForm& form) { |
| 136 return form.username_value.empty() && form.password_value.empty() && | 136 return form.username_value.empty() && form.password_value.empty() && |
| 137 form.new_password_value.empty(); | 137 form.new_password_value.empty(); |
| 138 } | 138 } |
| 139 | 139 |
| 140 // Helper function that determines whether update or save prompt should be |
| 141 // shown for credentials in |provisional_save_manager|. |
| 142 bool IsPasswordUpdate(const PasswordFormManager& provisional_save_manager) { |
| 143 return (!provisional_save_manager.best_matches().empty() && |
| 144 provisional_save_manager |
| 145 .is_possible_change_password_form_without_username()) || |
| 146 provisional_save_manager.password_overridden() || |
| 147 provisional_save_manager.retry_password_form_password_update(); |
| 148 } |
| 149 |
| 140 } // namespace | 150 } // namespace |
| 141 | 151 |
| 142 // static | 152 // static |
| 143 void PasswordManager::RegisterProfilePrefs( | 153 void PasswordManager::RegisterProfilePrefs( |
| 144 user_prefs::PrefRegistrySyncable* registry) { | 154 user_prefs::PrefRegistrySyncable* registry) { |
| 145 #if defined(OS_IOS) || defined(OS_ANDROID) | 155 #if defined(OS_IOS) || defined(OS_ANDROID) |
| 146 uint32_t flags = PrefRegistry::NO_REGISTRATION_FLAGS; | 156 uint32_t flags = PrefRegistry::NO_REGISTRATION_FLAGS; |
| 147 #else | 157 #else |
| 148 uint32_t flags = user_prefs::PrefRegistrySyncable::SYNCABLE_PREF; | 158 uint32_t flags = user_prefs::PrefRegistrySyncable::SYNCABLE_PREF; |
| 149 #endif | 159 #endif |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 password_manager::PasswordManagerDriver* driver, | 473 password_manager::PasswordManagerDriver* driver, |
| 464 const PasswordForm& password_form) { | 474 const PasswordForm& password_form) { |
| 465 // TODO(msramek): This is just a sketch. We will need to show a custom bubble, | 475 // TODO(msramek): This is just a sketch. We will need to show a custom bubble, |
| 466 // mark the form as force saved, and recreate the pending login managers, | 476 // mark the form as force saved, and recreate the pending login managers, |
| 467 // because the password store might have changed. | 477 // because the password store might have changed. |
| 468 ProvisionallySavePassword(password_form, driver); | 478 ProvisionallySavePassword(password_form, driver); |
| 469 if (provisional_save_manager_) | 479 if (provisional_save_manager_) |
| 470 OnLoginSuccessful(); | 480 OnLoginSuccessful(); |
| 471 } | 481 } |
| 472 | 482 |
| 483 void PasswordManager::ShowManualFallbackForSaving( |
| 484 password_manager::PasswordManagerDriver* driver, |
| 485 const PasswordForm& password_form) { |
| 486 ProvisionallySavePassword(password_form, driver); |
| 487 DCHECK(provisional_save_manager_); |
| 488 DCHECK(provisional_save_manager_->form_fetcher()); |
| 489 // TODO(crbug.com/741537): Process manual saving request even if there is |
| 490 // still no response from the store. |
| 491 if (provisional_save_manager_->form_fetcher()->GetState() == |
| 492 FormFetcher::State::WAITING) { |
| 493 return; |
| 494 } |
| 495 bool is_update = IsPasswordUpdate(*provisional_save_manager_); |
| 496 client_->ShowManualFallbackForSaving(std::move(provisional_save_manager_), |
| 497 is_update); |
| 498 } |
| 499 |
| 500 void PasswordManager::HideManualFallbackForSaving() { |
| 501 client_->HideManualFallbackForSaving(); |
| 502 } |
| 503 |
| 473 void PasswordManager::OnPasswordFormsParsed( | 504 void PasswordManager::OnPasswordFormsParsed( |
| 474 password_manager::PasswordManagerDriver* driver, | 505 password_manager::PasswordManagerDriver* driver, |
| 475 const std::vector<PasswordForm>& forms) { | 506 const std::vector<PasswordForm>& forms) { |
| 476 CreatePendingLoginManagers(driver, forms); | 507 CreatePendingLoginManagers(driver, forms); |
| 477 } | 508 } |
| 478 | 509 |
| 479 void PasswordManager::CreatePendingLoginManagers( | 510 void PasswordManager::CreatePendingLoginManagers( |
| 480 password_manager::PasswordManagerDriver* driver, | 511 password_manager::PasswordManagerDriver* driver, |
| 481 const std::vector<PasswordForm>& forms) { | 512 const std::vector<PasswordForm>& forms) { |
| 482 std::unique_ptr<BrowserSavePasswordProgressLogger> logger; | 513 std::unique_ptr<BrowserSavePasswordProgressLogger> logger; |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 | 777 |
| 747 RecordWhetherTargetDomainDiffers(main_frame_url_, client_->GetMainFrameURL()); | 778 RecordWhetherTargetDomainDiffers(main_frame_url_, client_->GetMainFrameURL()); |
| 748 | 779 |
| 749 if (ShouldPromptUserToSavePassword()) { | 780 if (ShouldPromptUserToSavePassword()) { |
| 750 bool empty_password = | 781 bool empty_password = |
| 751 provisional_save_manager_->pending_credentials().username_value.empty(); | 782 provisional_save_manager_->pending_credentials().username_value.empty(); |
| 752 UMA_HISTOGRAM_BOOLEAN("PasswordManager.EmptyUsernames.OfferedToSave", | 783 UMA_HISTOGRAM_BOOLEAN("PasswordManager.EmptyUsernames.OfferedToSave", |
| 753 empty_password); | 784 empty_password); |
| 754 if (logger) | 785 if (logger) |
| 755 logger->LogMessage(Logger::STRING_DECISION_ASK); | 786 logger->LogMessage(Logger::STRING_DECISION_ASK); |
| 756 bool update_password = | 787 bool update_password = IsPasswordUpdate(*provisional_save_manager_); |
| 757 (!provisional_save_manager_->best_matches().empty() && | |
| 758 provisional_save_manager_ | |
| 759 ->is_possible_change_password_form_without_username()) || | |
| 760 provisional_save_manager_->password_overridden() || | |
| 761 provisional_save_manager_->retry_password_form_password_update(); | |
| 762 if (client_->PromptUserToSaveOrUpdatePassword( | 788 if (client_->PromptUserToSaveOrUpdatePassword( |
| 763 std::move(provisional_save_manager_), update_password)) { | 789 std::move(provisional_save_manager_), update_password)) { |
| 764 if (logger) | 790 if (logger) |
| 765 logger->LogMessage(Logger::STRING_SHOW_PASSWORD_PROMPT); | 791 logger->LogMessage(Logger::STRING_SHOW_PASSWORD_PROMPT); |
| 766 } | 792 } |
| 767 } else { | 793 } else { |
| 768 if (logger) | 794 if (logger) |
| 769 logger->LogMessage(Logger::STRING_DECISION_SAVE); | 795 logger->LogMessage(Logger::STRING_DECISION_SAVE); |
| 770 provisional_save_manager_->Save(); | 796 provisional_save_manager_->Save(); |
| 771 | 797 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 928 current_match_result = result; | 954 current_match_result = result; |
| 929 } else if (result > current_match_result) { | 955 } else if (result > current_match_result) { |
| 930 matched_manager = login_manager.get(); | 956 matched_manager = login_manager.get(); |
| 931 current_match_result = result; | 957 current_match_result = result; |
| 932 } | 958 } |
| 933 } | 959 } |
| 934 return matched_manager; | 960 return matched_manager; |
| 935 } | 961 } |
| 936 | 962 |
| 937 } // namespace password_manager | 963 } // namespace password_manager |
| OLD | NEW |