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

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: Rebase 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 // Finds the matched form manager for |form| in |pending_login_managers|. 150 // Finds the matched form manager for |form| in |pending_login_managers|.
141 PasswordFormManager* FindMatchedManager( 151 PasswordFormManager* FindMatchedManager(
142 const autofill::PasswordForm& form, 152 const autofill::PasswordForm& form,
143 const std::vector<std::unique_ptr<PasswordFormManager>>& 153 const std::vector<std::unique_ptr<PasswordFormManager>>&
144 pending_login_managers, 154 pending_login_managers,
145 const password_manager::PasswordManagerDriver* driver, 155 const password_manager::PasswordManagerDriver* driver,
146 BrowserSavePasswordProgressLogger* logger) { 156 BrowserSavePasswordProgressLogger* logger) {
147 auto matched_manager_it = pending_login_managers.end(); 157 auto matched_manager_it = pending_login_managers.end();
148 PasswordFormManager::MatchResultMask current_match_result = 158 PasswordFormManager::MatchResultMask current_match_result =
149 PasswordFormManager::RESULT_NO_MATCH; 159 PasswordFormManager::RESULT_NO_MATCH;
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 password_manager::PasswordManagerDriver* driver, 470 password_manager::PasswordManagerDriver* driver,
461 const PasswordForm& password_form) { 471 const PasswordForm& password_form) {
462 // TODO(msramek): This is just a sketch. We will need to show a custom bubble, 472 // TODO(msramek): This is just a sketch. We will need to show a custom bubble,
463 // mark the form as force saved, and recreate the pending login managers, 473 // mark the form as force saved, and recreate the pending login managers,
464 // because the password store might have changed. 474 // because the password store might have changed.
465 ProvisionallySavePassword(password_form, driver); 475 ProvisionallySavePassword(password_form, driver);
466 if (provisional_save_manager_) 476 if (provisional_save_manager_)
467 OnLoginSuccessful(); 477 OnLoginSuccessful();
468 } 478 }
469 479
480 void PasswordManager::ShowManualFallbackForSaving(
481 password_manager::PasswordManagerDriver* driver,
482 const PasswordForm& password_form) {
483 if (!client_->IsSavingAndFillingEnabledForCurrentPage() ||
484 ShouldBlockPasswordForSameOriginButDifferentScheme(password_form))
485 return;
486
487 PasswordFormManager* matched_manager = FindMatchedManager(
488 password_form, pending_login_managers_, driver, nullptr);
489 if (!matched_manager)
490 return;
491 // TODO(crbug.com/741537): Process manual saving request even if there is
492 // still no response from the store.
493 if (matched_manager->form_fetcher()->GetState() ==
494 FormFetcher::State::WAITING) {
495 return;
496 }
497 ProvisionallySaveManager(password_form, matched_manager, nullptr);
498
499 DCHECK(provisional_save_manager_);
500 bool is_update = IsPasswordUpdate(*provisional_save_manager_);
501 bool has_generated_password =
502 provisional_save_manager_->has_generated_password();
503 client_->ShowManualFallbackForSaving(std::move(provisional_save_manager_),
504 has_generated_password, is_update);
505 }
506
507 void PasswordManager::HideManualFallbackForSaving() {
508 client_->HideManualFallbackForSaving();
509 }
510
470 void PasswordManager::OnPasswordFormsParsed( 511 void PasswordManager::OnPasswordFormsParsed(
471 password_manager::PasswordManagerDriver* driver, 512 password_manager::PasswordManagerDriver* driver,
472 const std::vector<PasswordForm>& forms) { 513 const std::vector<PasswordForm>& forms) {
473 CreatePendingLoginManagers(driver, forms); 514 CreatePendingLoginManagers(driver, forms);
474 } 515 }
475 516
476 void PasswordManager::CreatePendingLoginManagers( 517 void PasswordManager::CreatePendingLoginManagers(
477 password_manager::PasswordManagerDriver* driver, 518 password_manager::PasswordManagerDriver* driver,
478 const std::vector<PasswordForm>& forms) { 519 const std::vector<PasswordForm>& forms) {
479 std::unique_ptr<BrowserSavePasswordProgressLogger> logger; 520 std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 814
774 RecordWhetherTargetDomainDiffers(main_frame_url_, client_->GetMainFrameURL()); 815 RecordWhetherTargetDomainDiffers(main_frame_url_, client_->GetMainFrameURL());
775 816
776 if (ShouldPromptUserToSavePassword()) { 817 if (ShouldPromptUserToSavePassword()) {
777 bool empty_password = 818 bool empty_password =
778 provisional_save_manager_->pending_credentials().username_value.empty(); 819 provisional_save_manager_->pending_credentials().username_value.empty();
779 UMA_HISTOGRAM_BOOLEAN("PasswordManager.EmptyUsernames.OfferedToSave", 820 UMA_HISTOGRAM_BOOLEAN("PasswordManager.EmptyUsernames.OfferedToSave",
780 empty_password); 821 empty_password);
781 if (logger) 822 if (logger)
782 logger->LogMessage(Logger::STRING_DECISION_ASK); 823 logger->LogMessage(Logger::STRING_DECISION_ASK);
783 bool update_password = 824 bool update_password = IsPasswordUpdate(*provisional_save_manager_);
784 (!provisional_save_manager_->best_matches().empty() &&
785 provisional_save_manager_
786 ->is_possible_change_password_form_without_username()) ||
787 provisional_save_manager_->password_overridden() ||
788 provisional_save_manager_->retry_password_form_password_update();
789 if (client_->PromptUserToSaveOrUpdatePassword( 825 if (client_->PromptUserToSaveOrUpdatePassword(
790 std::move(provisional_save_manager_), update_password)) { 826 std::move(provisional_save_manager_), update_password)) {
791 if (logger) 827 if (logger)
792 logger->LogMessage(Logger::STRING_SHOW_PASSWORD_PROMPT); 828 logger->LogMessage(Logger::STRING_SHOW_PASSWORD_PROMPT);
793 } 829 }
794 } else { 830 } else {
795 if (logger) 831 if (logger)
796 logger->LogMessage(Logger::STRING_DECISION_SAVE); 832 logger->LogMessage(Logger::STRING_DECISION_SAVE);
797 provisional_save_manager_->Save(); 833 provisional_save_manager_->Save();
798 834
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 current_match_result = result; 987 current_match_result = result;
952 } else if (result > current_match_result) { 988 } else if (result > current_match_result) {
953 matched_manager = login_manager.get(); 989 matched_manager = login_manager.get();
954 current_match_result = result; 990 current_match_result = result;
955 } 991 }
956 } 992 }
957 return matched_manager; 993 return matched_manager;
958 } 994 }
959 995
960 } // namespace password_manager 996 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698