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

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

Issue 2926833002: Revert of [Password Manager] Convert |pending_login_managers_| to an array of scoped_refptr (Closed)
Patch Set: Created 3 years, 6 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 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 if (form_manager) { 231 if (form_manager) {
232 form_manager->set_generation_element(generation_element); 232 form_manager->set_generation_element(generation_element);
233 form_manager->set_is_manual_generation(is_manually_triggered); 233 form_manager->set_is_manual_generation(is_manually_triggered);
234 form_manager->set_generation_popup_was_shown(true); 234 form_manager->set_generation_popup_was_shown(true);
235 return; 235 return;
236 } 236 }
237 237
238 // If there is no corresponding PasswordFormManager, we create one. This is 238 // If there is no corresponding PasswordFormManager, we create one. This is
239 // not the common case, and should only happen when there is a bug in our 239 // not the common case, and should only happen when there is a bug in our
240 // ability to detect forms. 240 // ability to detect forms.
241 auto manager = base::MakeRefCounted<PasswordFormManager>( 241 auto manager = base::MakeUnique<PasswordFormManager>(
242 this, client_, driver->AsWeakPtr(), form, 242 this, client_, driver->AsWeakPtr(), form,
243 base::WrapUnique(new FormSaverImpl(client_->GetPasswordStore())), 243 base::WrapUnique(new FormSaverImpl(client_->GetPasswordStore())),
244 nullptr); 244 nullptr);
245 pending_login_managers_.push_back(std::move(manager)); 245 pending_login_managers_.push_back(std::move(manager));
246 } 246 }
247 247
248 void PasswordManager::SaveGenerationFieldDetectedByClassifier( 248 void PasswordManager::SaveGenerationFieldDetectedByClassifier(
249 const autofill::PasswordForm& form, 249 const autofill::PasswordForm& form,
250 const base::string16& generation_field) { 250 const base::string16& generation_field) {
251 if (!client_->IsSavingAndFillingEnabledForCurrentPage()) 251 if (!client_->IsSavingAndFillingEnabledForCurrentPage())
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 } 342 }
343 } 343 }
344 // If we didn't find a manager, this means a form was submitted without 344 // If we didn't find a manager, this means a form was submitted without
345 // first loading the page containing the form. Don't offer to save 345 // first loading the page containing the form. Don't offer to save
346 // passwords in this case. 346 // passwords in this case.
347 if (matched_manager_it == pending_login_managers_.end()) { 347 if (matched_manager_it == pending_login_managers_.end()) {
348 RecordFailure(NO_MATCHING_FORM, form.origin, logger.get()); 348 RecordFailure(NO_MATCHING_FORM, form.origin, logger.get());
349 return; 349 return;
350 } 350 }
351 351
352 // Copy ownership of the manager from |pending_login_managers_| to 352 std::unique_ptr<PasswordFormManager> manager;
353 // Transfer ownership of the manager from |pending_login_managers_| to
353 // |manager|. 354 // |manager|.
354 scoped_refptr<PasswordFormManager> manager(*matched_manager_it); 355 manager.swap(*matched_manager_it);
356 pending_login_managers_.erase(matched_manager_it);
355 357
356 PasswordForm submitted_form(form); 358 PasswordForm submitted_form(form);
357 submitted_form.preferred = true; 359 submitted_form.preferred = true;
358 if (logger) { 360 if (logger) {
359 logger->LogPasswordForm(Logger::STRING_PROVISIONALLY_SAVED_FORM, 361 logger->LogPasswordForm(Logger::STRING_PROVISIONALLY_SAVED_FORM,
360 submitted_form); 362 submitted_form);
361 } 363 }
362 PasswordFormManager::OtherPossibleUsernamesAction action = 364 PasswordFormManager::OtherPossibleUsernamesAction action =
363 PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES; 365 PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES;
364 if (OtherPossibleUsernamesEnabled()) 366 if (OtherPossibleUsernamesEnabled())
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 } 403 }
402 404
403 void PasswordManager::UpdateFormManagers() { 405 void PasswordManager::UpdateFormManagers() {
404 for (const auto& form_manager : pending_login_managers_) { 406 for (const auto& form_manager : pending_login_managers_) {
405 form_manager->form_fetcher()->Fetch(); 407 form_manager->form_fetcher()->Fetch();
406 } 408 }
407 } 409 }
408 410
409 void PasswordManager::DropFormManagers() { 411 void PasswordManager::DropFormManagers() {
410 pending_login_managers_.clear(); 412 pending_login_managers_.clear();
411 provisional_save_manager_ = nullptr; 413 provisional_save_manager_.reset();
412 all_visible_forms_.clear(); 414 all_visible_forms_.clear();
413 } 415 }
414 416
415 bool PasswordManager::IsPasswordFieldDetectedOnPage() { 417 bool PasswordManager::IsPasswordFieldDetectedOnPage() {
416 return !pending_login_managers_.empty(); 418 return !pending_login_managers_.empty();
417 } 419 }
418 420
419 void PasswordManager::RecordFailure(ProvisionalSaveFailure failure, 421 void PasswordManager::RecordFailure(ProvisionalSaveFailure failure,
420 const GURL& form_origin, 422 const GURL& form_origin,
421 BrowserSavePasswordProgressLogger* logger) { 423 BrowserSavePasswordProgressLogger* logger) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 // are password change forms. 560 // are password change forms.
559 if (iter->username_element.empty()) { 561 if (iter->username_element.empty()) {
560 UMA_HISTOGRAM_BOOLEAN( 562 UMA_HISTOGRAM_BOOLEAN(
561 "PasswordManager.EmptyUsernames." 563 "PasswordManager.EmptyUsernames."
562 "FormWithoutUsernameFieldIsPasswordChangeForm", 564 "FormWithoutUsernameFieldIsPasswordChangeForm",
563 !iter->new_password_element.empty()); 565 !iter->new_password_element.empty());
564 } 566 }
565 567
566 if (logger) 568 if (logger)
567 logger->LogFormSignatures(Logger::STRING_ADDING_SIGNATURE, *iter); 569 logger->LogFormSignatures(Logger::STRING_ADDING_SIGNATURE, *iter);
568 auto manager = base::MakeRefCounted<PasswordFormManager>( 570 auto manager = base::MakeUnique<PasswordFormManager>(
569 this, client_, 571 this, client_,
570 (driver ? driver->AsWeakPtr() : base::WeakPtr<PasswordManagerDriver>()), 572 (driver ? driver->AsWeakPtr() : base::WeakPtr<PasswordManagerDriver>()),
571 *iter, base::WrapUnique(new FormSaverImpl(client_->GetPasswordStore())), 573 *iter, base::WrapUnique(new FormSaverImpl(client_->GetPasswordStore())),
572 nullptr); 574 nullptr);
573 pending_login_managers_.push_back(std::move(manager)); 575 pending_login_managers_.push_back(std::move(manager));
574 } 576 }
575 577
576 if (logger) { 578 if (logger) {
577 logger->LogNumber(Logger::STRING_NEW_NUMBER_LOGIN_MANAGERS, 579 logger->LogNumber(Logger::STRING_NEW_NUMBER_LOGIN_MANAGERS,
578 pending_login_managers_.size()); 580 pending_login_managers_.size());
(...skipping 15 matching lines...) Expand all
594 return false; 596 return false;
595 } 597 }
596 598
597 if (provisional_save_manager_->form_fetcher()->GetState() == 599 if (provisional_save_manager_->form_fetcher()->GetState() ==
598 FormFetcher::State::WAITING) { 600 FormFetcher::State::WAITING) {
599 // We have a provisional save manager, but it didn't finish matching yet. 601 // We have a provisional save manager, but it didn't finish matching yet.
600 // We just give up. 602 // We just give up.
601 RecordFailure(MATCHING_NOT_COMPLETE, 603 RecordFailure(MATCHING_NOT_COMPLETE,
602 provisional_save_manager_->observed_form().origin, 604 provisional_save_manager_->observed_form().origin,
603 logger.get()); 605 logger.get());
604 provisional_save_manager_ = nullptr; 606 provisional_save_manager_.reset();
605 return false; 607 return false;
606 } 608 }
607 return true; 609 return true;
608 } 610 }
609 611
610 bool PasswordManager::ShouldBlockPasswordForSameOriginButDifferentScheme( 612 bool PasswordManager::ShouldBlockPasswordForSameOriginButDifferentScheme(
611 const PasswordForm& form) const { 613 const PasswordForm& form) const {
612 const GURL& old_origin = main_frame_url_.GetOrigin(); 614 const GURL& old_origin = main_frame_url_.GetOrigin();
613 const GURL& new_origin = form.origin.GetOrigin(); 615 const GURL& new_origin = form.origin.GetOrigin();
614 return old_origin.host_piece() == new_origin.host_piece() && 616 return old_origin.host_piece() == new_origin.host_piece() &&
(...skipping 26 matching lines...) Expand all
641 643
642 if (!CanProvisionalManagerSave()) 644 if (!CanProvisionalManagerSave())
643 return; 645 return;
644 646
645 // If the server throws an internal error, access denied page, page not 647 // If the server throws an internal error, access denied page, page not
646 // found etc. after a login attempt, we do not save the credentials. 648 // found etc. after a login attempt, we do not save the credentials.
647 if (client_->WasLastNavigationHTTPError()) { 649 if (client_->WasLastNavigationHTTPError()) {
648 if (logger) 650 if (logger)
649 logger->LogMessage(Logger::STRING_DECISION_DROP); 651 logger->LogMessage(Logger::STRING_DECISION_DROP);
650 provisional_save_manager_->LogSubmitFailed(); 652 provisional_save_manager_->LogSubmitFailed();
651 provisional_save_manager_ = nullptr; 653 provisional_save_manager_.reset();
652 return; 654 return;
653 } 655 }
654 656
655 if (logger) { 657 if (logger) {
656 logger->LogNumber(Logger::STRING_NUMBER_OF_VISIBLE_FORMS, 658 logger->LogNumber(Logger::STRING_NUMBER_OF_VISIBLE_FORMS,
657 visible_forms.size()); 659 visible_forms.size());
658 } 660 }
659 661
660 // Record all visible forms from the frame. 662 // Record all visible forms from the frame.
661 all_visible_forms_.insert(all_visible_forms_.end(), 663 all_visible_forms_.insert(all_visible_forms_.end(),
(...skipping 16 matching lines...) Expand all
678 if (provisional_save_manager_ 680 if (provisional_save_manager_
679 ->is_possible_change_password_form_without_username() && 681 ->is_possible_change_password_form_without_username() &&
680 AreAllFieldsEmpty(all_visible_forms_[i])) 682 AreAllFieldsEmpty(all_visible_forms_[i]))
681 continue; 683 continue;
682 provisional_save_manager_->LogSubmitFailed(); 684 provisional_save_manager_->LogSubmitFailed();
683 if (logger) { 685 if (logger) {
684 logger->LogPasswordForm(Logger::STRING_PASSWORD_FORM_REAPPEARED, 686 logger->LogPasswordForm(Logger::STRING_PASSWORD_FORM_REAPPEARED,
685 all_visible_forms_[i]); 687 all_visible_forms_[i]);
686 logger->LogMessage(Logger::STRING_DECISION_DROP); 688 logger->LogMessage(Logger::STRING_DECISION_DROP);
687 } 689 }
688 provisional_save_manager_ = nullptr; 690 provisional_save_manager_.reset();
689 // Clear all_visible_forms_ once we found the match. 691 // Clear all_visible_forms_ once we found the match.
690 all_visible_forms_.clear(); 692 all_visible_forms_.clear();
691 return; 693 return;
692 } 694 }
693 } 695 }
694 } else { 696 } else {
695 if (logger) 697 if (logger)
696 logger->LogMessage(Logger::STRING_PROVISIONALLY_SAVED_FORM_IS_NOT_HTML); 698 logger->LogMessage(Logger::STRING_PROVISIONALLY_SAVED_FORM_IS_NOT_HTML);
697 } 699 }
698 700
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 } 747 }
746 748
747 if (base::FeatureList::IsEnabled(features::kDropSyncCredential)) { 749 if (base::FeatureList::IsEnabled(features::kDropSyncCredential)) {
748 DCHECK(provisional_save_manager_->submitted_form()); 750 DCHECK(provisional_save_manager_->submitted_form());
749 if (!client_->GetStoreResultFilter()->ShouldSave( 751 if (!client_->GetStoreResultFilter()->ShouldSave(
750 *provisional_save_manager_->submitted_form())) { 752 *provisional_save_manager_->submitted_form())) {
751 provisional_save_manager_->WipeStoreCopyIfOutdated(); 753 provisional_save_manager_->WipeStoreCopyIfOutdated();
752 RecordFailure(SYNC_CREDENTIAL, 754 RecordFailure(SYNC_CREDENTIAL,
753 provisional_save_manager_->observed_form().origin, 755 provisional_save_manager_->observed_form().origin,
754 logger.get()); 756 logger.get());
755 provisional_save_manager_ = nullptr; 757 provisional_save_manager_.reset();
756 return; 758 return;
757 } 759 }
758 } 760 }
759 761
760 provisional_save_manager_->LogSubmitPassed(); 762 provisional_save_manager_->LogSubmitPassed();
761 763
762 RecordWhetherTargetDomainDiffers(main_frame_url_, client_->GetMainFrameURL()); 764 RecordWhetherTargetDomainDiffers(main_frame_url_, client_->GetMainFrameURL());
763 765
764 if (ShouldPromptUserToSavePassword()) { 766 if (ShouldPromptUserToSavePassword()) {
765 bool empty_password = 767 bool empty_password =
(...skipping 19 matching lines...) Expand all
785 provisional_save_manager_->Save(); 787 provisional_save_manager_->Save();
786 788
787 if (!provisional_save_manager_->IsNewLogin()) { 789 if (!provisional_save_manager_->IsNewLogin()) {
788 client_->NotifySuccessfulLoginWithExistingPassword( 790 client_->NotifySuccessfulLoginWithExistingPassword(
789 provisional_save_manager_->pending_credentials()); 791 provisional_save_manager_->pending_credentials());
790 } 792 }
791 793
792 if (provisional_save_manager_->has_generated_password()) { 794 if (provisional_save_manager_->has_generated_password()) {
793 client_->AutomaticPasswordSave(std::move(provisional_save_manager_)); 795 client_->AutomaticPasswordSave(std::move(provisional_save_manager_));
794 } else { 796 } else {
795 provisional_save_manager_ = nullptr; 797 provisional_save_manager_.reset();
796 } 798 }
797 } 799 }
798 } 800 }
799 801
800 bool PasswordManager::OtherPossibleUsernamesEnabled() const { 802 bool PasswordManager::OtherPossibleUsernamesEnabled() const {
801 return false; 803 return false;
802 } 804 }
803 805
804 void PasswordManager::Autofill( 806 void PasswordManager::Autofill(
805 password_manager::PasswordManagerDriver* driver, 807 password_manager::PasswordManagerDriver* driver,
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 current_match_result = result; 945 current_match_result = result;
944 } else if (result > current_match_result) { 946 } else if (result > current_match_result) {
945 matched_manager = login_manager.get(); 947 matched_manager = login_manager.get();
946 current_match_result = result; 948 current_match_result = result;
947 } 949 }
948 } 950 }
949 return matched_manager; 951 return matched_manager;
950 } 952 }
951 953
952 } // namespace password_manager 954 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698