| 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_form_manager.h" | 5 #include "components/password_manager/core/browser/password_form_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 !has_generated_password_) { | 348 !has_generated_password_) { |
| 349 LogPasswordGenerationSubmissionEvent(PASSWORD_OVERRIDDEN); | 349 LogPasswordGenerationSubmissionEvent(PASSWORD_OVERRIDDEN); |
| 350 } | 350 } |
| 351 | 351 |
| 352 if (has_generated_password_) | 352 if (has_generated_password_) |
| 353 pending_credentials_.type = PasswordForm::TYPE_GENERATED; | 353 pending_credentials_.type = PasswordForm::TYPE_GENERATED; |
| 354 } | 354 } |
| 355 | 355 |
| 356 void PasswordFormManager::Save() { | 356 void PasswordFormManager::Save() { |
| 357 DCHECK_EQ(state_, POST_MATCHING_PHASE); | 357 DCHECK_EQ(state_, POST_MATCHING_PHASE); |
| 358 DCHECK(!driver_->IsOffTheRecord()); | 358 DCHECK(!client_->IsOffTheRecord()); |
| 359 | 359 |
| 360 if (IsNewLogin()) | 360 if (IsNewLogin()) |
| 361 SaveAsNewLogin(true); | 361 SaveAsNewLogin(true); |
| 362 else | 362 else |
| 363 UpdateLogin(); | 363 UpdateLogin(); |
| 364 } | 364 } |
| 365 | 365 |
| 366 void PasswordFormManager::FetchMatchingLoginsFromPasswordStore( | 366 void PasswordFormManager::FetchMatchingLoginsFromPasswordStore( |
| 367 PasswordStore::AuthorizationPromptPolicy prompt_policy) { | 367 PasswordStore::AuthorizationPromptPolicy prompt_policy) { |
| 368 DCHECK_EQ(state_, PRE_MATCHING_PHASE); | 368 DCHECK_EQ(state_, PRE_MATCHING_PHASE); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 } | 509 } |
| 510 | 510 |
| 511 // If not blacklisted, inform the driver that password generation is allowed | 511 // If not blacklisted, inform the driver that password generation is allowed |
| 512 // for |observed_form_|. | 512 // for |observed_form_|. |
| 513 driver_->AllowPasswordGenerationForForm(observed_form_); | 513 driver_->AllowPasswordGenerationForForm(observed_form_); |
| 514 | 514 |
| 515 // Proceed to autofill. | 515 // Proceed to autofill. |
| 516 // Note that we provide the choices but don't actually prefill a value if: | 516 // Note that we provide the choices but don't actually prefill a value if: |
| 517 // (1) we are in Incognito mode, (2) the ACTION paths don't match, | 517 // (1) we are in Incognito mode, (2) the ACTION paths don't match, |
| 518 // or (3) if it matched using public suffix domain matching. | 518 // or (3) if it matched using public suffix domain matching. |
| 519 bool wait_for_username = | 519 bool wait_for_username = client_->IsOffTheRecord() || |
| 520 driver_->IsOffTheRecord() || | 520 observed_form_.action.GetWithEmptyPath() != |
| 521 observed_form_.action.GetWithEmptyPath() != | 521 preferred_match_->action.GetWithEmptyPath() || |
| 522 preferred_match_->action.GetWithEmptyPath() || | 522 preferred_match_->IsPublicSuffixMatch(); |
| 523 preferred_match_->IsPublicSuffixMatch(); | |
| 524 if (wait_for_username) | 523 if (wait_for_username) |
| 525 manager_action_ = kManagerActionNone; | 524 manager_action_ = kManagerActionNone; |
| 526 else | 525 else |
| 527 manager_action_ = kManagerActionAutofilled; | 526 manager_action_ = kManagerActionAutofilled; |
| 528 password_manager_->Autofill(observed_form_, best_matches_, | 527 password_manager_->Autofill(driver_, observed_form_, best_matches_, |
| 529 *preferred_match_, wait_for_username); | 528 *preferred_match_, wait_for_username); |
| 530 } | 529 } |
| 531 | 530 |
| 532 void PasswordFormManager::OnGetPasswordStoreResults( | 531 void PasswordFormManager::OnGetPasswordStoreResults( |
| 533 const std::vector<autofill::PasswordForm*>& results) { | 532 const std::vector<autofill::PasswordForm*>& results) { |
| 534 DCHECK_EQ(state_, MATCHING_PHASE); | 533 DCHECK_EQ(state_, MATCHING_PHASE); |
| 535 | 534 |
| 536 scoped_ptr<BrowserSavePasswordProgressLogger> logger; | 535 scoped_ptr<BrowserSavePasswordProgressLogger> logger; |
| 537 if (client_->IsLoggingActive()) { | 536 if (client_->IsLoggingActive()) { |
| 538 logger.reset(new BrowserSavePasswordProgressLogger(client_)); | 537 logger.reset(new BrowserSavePasswordProgressLogger(client_)); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 567 } | 566 } |
| 568 | 567 |
| 569 void PasswordFormManager::SaveAsNewLogin(bool reset_preferred_login) { | 568 void PasswordFormManager::SaveAsNewLogin(bool reset_preferred_login) { |
| 570 DCHECK_EQ(state_, POST_MATCHING_PHASE); | 569 DCHECK_EQ(state_, POST_MATCHING_PHASE); |
| 571 DCHECK(IsNewLogin()); | 570 DCHECK(IsNewLogin()); |
| 572 // The new_form is being used to sign in, so it is preferred. | 571 // The new_form is being used to sign in, so it is preferred. |
| 573 DCHECK(pending_credentials_.preferred); | 572 DCHECK(pending_credentials_.preferred); |
| 574 // new_form contains the same basic data as observed_form_ (because its the | 573 // new_form contains the same basic data as observed_form_ (because its the |
| 575 // same form), but with the newly added credentials. | 574 // same form), but with the newly added credentials. |
| 576 | 575 |
| 577 DCHECK(!driver_->IsOffTheRecord()); | 576 DCHECK(!client_->IsOffTheRecord()); |
| 578 | 577 |
| 579 PasswordStore* password_store = client_->GetPasswordStore(); | 578 PasswordStore* password_store = client_->GetPasswordStore(); |
| 580 if (!password_store) { | 579 if (!password_store) { |
| 581 NOTREACHED(); | 580 NOTREACHED(); |
| 582 return; | 581 return; |
| 583 } | 582 } |
| 584 | 583 |
| 585 // Upload credentials the first time they are saved. This data is used | 584 // Upload credentials the first time they are saved. This data is used |
| 586 // by password generation to help determine account creation sites. | 585 // by password generation to help determine account creation sites. |
| 587 // Blacklisted credentials will never be used, so don't upload a vote for | 586 // Blacklisted credentials will never be used, so don't upload a vote for |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 } | 640 } |
| 642 | 641 |
| 643 void PasswordFormManager::UpdateLogin() { | 642 void PasswordFormManager::UpdateLogin() { |
| 644 DCHECK_EQ(state_, POST_MATCHING_PHASE); | 643 DCHECK_EQ(state_, POST_MATCHING_PHASE); |
| 645 DCHECK(preferred_match_); | 644 DCHECK(preferred_match_); |
| 646 // If we're doing an Update, we either autofilled correctly and need to | 645 // If we're doing an Update, we either autofilled correctly and need to |
| 647 // update the stats, or the user typed in a new password for autofilled | 646 // update the stats, or the user typed in a new password for autofilled |
| 648 // username, or the user selected one of the non-preferred matches, | 647 // username, or the user selected one of the non-preferred matches, |
| 649 // thus requiring a swap of preferred bits. | 648 // thus requiring a swap of preferred bits. |
| 650 DCHECK(!IsNewLogin() && pending_credentials_.preferred); | 649 DCHECK(!IsNewLogin() && pending_credentials_.preferred); |
| 651 DCHECK(!driver_->IsOffTheRecord()); | 650 DCHECK(!client_->IsOffTheRecord()); |
| 652 | 651 |
| 653 PasswordStore* password_store = client_->GetPasswordStore(); | 652 PasswordStore* password_store = client_->GetPasswordStore(); |
| 654 if (!password_store) { | 653 if (!password_store) { |
| 655 NOTREACHED(); | 654 NOTREACHED(); |
| 656 return; | 655 return; |
| 657 } | 656 } |
| 658 | 657 |
| 659 UpdateMetadataForUsage(pending_credentials_); | 658 UpdateMetadataForUsage(pending_credentials_); |
| 660 | 659 |
| 661 if (client_->IsSyncAccountCredential( | 660 if (client_->IsSyncAccountCredential( |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 852 LogPasswordGenerationSubmissionEvent(PASSWORD_SUBMITTED); | 851 LogPasswordGenerationSubmissionEvent(PASSWORD_SUBMITTED); |
| 853 } | 852 } |
| 854 | 853 |
| 855 void PasswordFormManager::SubmitFailed() { | 854 void PasswordFormManager::SubmitFailed() { |
| 856 submit_result_ = kSubmitResultFailed; | 855 submit_result_ = kSubmitResultFailed; |
| 857 if (has_generated_password_) | 856 if (has_generated_password_) |
| 858 LogPasswordGenerationSubmissionEvent(PASSWORD_SUBMISSION_FAILED); | 857 LogPasswordGenerationSubmissionEvent(PASSWORD_SUBMISSION_FAILED); |
| 859 } | 858 } |
| 860 | 859 |
| 861 } // namespace password_manager | 860 } // namespace password_manager |
| OLD | NEW |