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

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: Introduced |has_generated_password| argument 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 return;
485
486 PasswordFormManager* matched_manager = FindMatchedManager(
487 password_form, pending_login_managers_, driver, nullptr);
488 if (!matched_manager)
489 return;
490 // TODO(crbug.com/741537): Process manual saving request even if there is
491 // still no response from the store.
492 if (matched_manager->form_fetcher()->GetState() ==
493 FormFetcher::State::WAITING) {
494 return;
495 }
496 ProvisionallySaveManager(password_form, matched_manager, nullptr);
497
498 DCHECK(provisional_save_manager_);
499 bool is_update = IsPasswordUpdate(*provisional_save_manager_);
500 bool has_generated_password =
501 provisional_save_manager_->has_generated_password();
502 client_->ShowManualFallbackForSaving(std::move(provisional_save_manager_),
503 has_generated_password, is_update);
504 }
505
506 void PasswordManager::HideManualFallbackForSaving() {
507 client_->HideManualFallbackForSaving();
508 }
509
470 void PasswordManager::OnPasswordFormsParsed( 510 void PasswordManager::OnPasswordFormsParsed(
471 password_manager::PasswordManagerDriver* driver, 511 password_manager::PasswordManagerDriver* driver,
472 const std::vector<PasswordForm>& forms) { 512 const std::vector<PasswordForm>& forms) {
473 CreatePendingLoginManagers(driver, forms); 513 CreatePendingLoginManagers(driver, forms);
474 } 514 }
475 515
476 void PasswordManager::CreatePendingLoginManagers( 516 void PasswordManager::CreatePendingLoginManagers(
477 password_manager::PasswordManagerDriver* driver, 517 password_manager::PasswordManagerDriver* driver,
478 const std::vector<PasswordForm>& forms) { 518 const std::vector<PasswordForm>& forms) {
479 std::unique_ptr<BrowserSavePasswordProgressLogger> logger; 519 std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 813
774 RecordWhetherTargetDomainDiffers(main_frame_url_, client_->GetMainFrameURL()); 814 RecordWhetherTargetDomainDiffers(main_frame_url_, client_->GetMainFrameURL());
775 815
776 if (ShouldPromptUserToSavePassword()) { 816 if (ShouldPromptUserToSavePassword()) {
777 bool empty_password = 817 bool empty_password =
778 provisional_save_manager_->pending_credentials().username_value.empty(); 818 provisional_save_manager_->pending_credentials().username_value.empty();
779 UMA_HISTOGRAM_BOOLEAN("PasswordManager.EmptyUsernames.OfferedToSave", 819 UMA_HISTOGRAM_BOOLEAN("PasswordManager.EmptyUsernames.OfferedToSave",
780 empty_password); 820 empty_password);
781 if (logger) 821 if (logger)
782 logger->LogMessage(Logger::STRING_DECISION_ASK); 822 logger->LogMessage(Logger::STRING_DECISION_ASK);
783 bool update_password = 823 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( 824 if (client_->PromptUserToSaveOrUpdatePassword(
790 std::move(provisional_save_manager_), update_password)) { 825 std::move(provisional_save_manager_), update_password)) {
791 if (logger) 826 if (logger)
792 logger->LogMessage(Logger::STRING_SHOW_PASSWORD_PROMPT); 827 logger->LogMessage(Logger::STRING_SHOW_PASSWORD_PROMPT);
793 } 828 }
794 } else { 829 } else {
795 if (logger) 830 if (logger)
796 logger->LogMessage(Logger::STRING_DECISION_SAVE); 831 logger->LogMessage(Logger::STRING_DECISION_SAVE);
797 provisional_save_manager_->Save(); 832 provisional_save_manager_->Save();
798 833
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 current_match_result = result; 986 current_match_result = result;
952 } else if (result > current_match_result) { 987 } else if (result > current_match_result) {
953 matched_manager = login_manager.get(); 988 matched_manager = login_manager.get();
954 current_match_result = result; 989 current_match_result = result;
955 } 990 }
956 } 991 }
957 return matched_manager; 992 return matched_manager;
958 } 993 }
959 994
960 } // namespace password_manager 995 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698