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 |