Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: components/password_manager/core/browser/password_manager.cc

Issue 2915763003: [Password Manager] Show omnibox icon and anchored prompt once user start typing password (Closed)
Patch Set: Changes addressed to vasilii@ comments Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698