OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <string.h> | 5 #include <string.h> |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/test/histogram_tester.h" | 10 #include "base/test/histogram_tester.h" |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 | 568 |
569 ExpectGenerationAvailable("first_password", false); | 569 ExpectGenerationAvailable("first_password", false); |
570 } | 570 } |
571 | 571 |
572 TEST_F(PasswordGenerationAgentTest, ChangePasswordFormDetectionTest) { | 572 TEST_F(PasswordGenerationAgentTest, ChangePasswordFormDetectionTest) { |
573 // Verify that generation is shown on correct field after message receiving. | 573 // Verify that generation is shown on correct field after message receiving. |
574 LoadHTMLWithUserGesture(kPasswordChangeFormHTML); | 574 LoadHTMLWithUserGesture(kPasswordChangeFormHTML); |
575 SetNotBlacklistedMessage(password_generation_, kPasswordChangeFormHTML); | 575 SetNotBlacklistedMessage(password_generation_, kPasswordChangeFormHTML); |
576 ExpectGenerationAvailable("password", false); | 576 ExpectGenerationAvailable("password", false); |
577 ExpectGenerationAvailable("newpassword", false); | 577 ExpectGenerationAvailable("newpassword", false); |
| 578 ExpectGenerationAvailable("confirmpassword", false); |
578 | 579 |
579 SetAccountCreationFormsDetectedMessage(password_generation_, | 580 SetAccountCreationFormsDetectedMessage(password_generation_, |
580 GetMainFrame()->document(), 0, 2); | 581 GetMainFrame()->document(), 0, 2); |
581 ExpectGenerationAvailable("password", false); | 582 ExpectGenerationAvailable("password", false); |
582 ExpectGenerationAvailable("newpassword", true); | 583 ExpectGenerationAvailable("newpassword", true); |
| 584 ExpectGenerationAvailable("confirmpassword", false); |
583 } | 585 } |
584 | 586 |
585 TEST_F(PasswordGenerationAgentTest, ManualGenerationInFormTest) { | 587 TEST_F(PasswordGenerationAgentTest, ManualGenerationInFormTest) { |
586 LoadHTMLWithUserGesture(kAccountCreationFormHTML); | 588 LoadHTMLWithUserGesture(kAccountCreationFormHTML); |
587 ShowGenerationPopUpManually("first_password"); | 589 ShowGenerationPopUpManually("first_password"); |
588 ExpectGenerationAvailable("first_password", true); | 590 ExpectGenerationAvailable("first_password", true); |
589 ExpectGenerationAvailable("second_password", false); | 591 ExpectGenerationAvailable("second_password", false); |
590 } | 592 } |
591 | 593 |
592 TEST_F(PasswordGenerationAgentTest, ManualGenerationNoFormTest) { | 594 TEST_F(PasswordGenerationAgentTest, ManualGenerationNoFormTest) { |
593 LoadHTMLWithUserGesture(kAccountCreationNoForm); | 595 LoadHTMLWithUserGesture(kAccountCreationNoForm); |
594 ShowGenerationPopUpManually("first_password"); | 596 ShowGenerationPopUpManually("first_password"); |
595 ExpectGenerationAvailable("first_password", true); | 597 ExpectGenerationAvailable("first_password", true); |
596 ExpectGenerationAvailable("second_password", false); | 598 ExpectGenerationAvailable("second_password", false); |
597 } | 599 } |
598 | 600 |
599 TEST_F(PasswordGenerationAgentTest, ManualGenerationChangeFocusTest) { | 601 TEST_F(PasswordGenerationAgentTest, ManualGenerationChangeFocusTest) { |
600 // This test simulates focus change after user triggered password generation. | 602 // This test simulates focus change after user triggered password generation. |
601 // PasswordGenerationAgent should save last focused password element and | 603 // PasswordGenerationAgent should save last focused password element and |
602 // generate password, even if focused element has changed. | 604 // generate password, even if focused element has changed. |
603 LoadHTMLWithUserGesture(kAccountCreationFormHTML); | 605 LoadHTMLWithUserGesture(kAccountCreationFormHTML); |
604 FocusField("first_password"); | 606 FocusField("first_password"); |
605 ShowGenerationPopUpManually("username" /* current focus */); | 607 ShowGenerationPopUpManually("username" /* current focus */); |
606 ExpectGenerationAvailable("first_password", true); | 608 ExpectGenerationAvailable("first_password", true); |
607 ExpectGenerationAvailable("second_password", false); | 609 ExpectGenerationAvailable("second_password", false); |
608 } | 610 } |
609 | 611 |
| 612 TEST_F(PasswordGenerationAgentTest, PresavingGeneratedPassword) { |
| 613 const struct { |
| 614 const char* form; |
| 615 const char* generation_element; |
| 616 } kTestCases[] = {{kAccountCreationFormHTML, "first_password"}, |
| 617 {kAccountCreationNoForm, "first_password"}, |
| 618 {kPasswordChangeFormHTML, "newpassword"}}; |
| 619 for (auto& test_case : kTestCases) { |
| 620 SCOPED_TRACE(testing::Message("form: ") << test_case.form); |
| 621 LoadHTMLWithUserGesture(test_case.form); |
| 622 // To be able to work with input elements outside <form>'s, use manual |
| 623 // generation. |
| 624 ShowGenerationPopUpManually(test_case.generation_element); |
| 625 ExpectGenerationAvailable(test_case.generation_element, true); |
| 626 |
| 627 base::string16 password = base::ASCIIToUTF16("random_password"); |
| 628 AutofillMsg_GeneratedPasswordAccepted msg(0, password); |
| 629 password_generation_->OnMessageReceived(msg); |
| 630 EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching( |
| 631 AutofillHostMsg_PresaveGeneratedPassword::ID)); |
| 632 render_thread_->sink().ClearMessages(); |
| 633 |
| 634 FocusField(test_case.generation_element); |
| 635 SimulateUserTypingASCIICharacter('a', true); |
| 636 EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching( |
| 637 AutofillHostMsg_PresaveGeneratedPassword::ID)); |
| 638 render_thread_->sink().ClearMessages(); |
| 639 |
| 640 for (size_t i = 0; i < password.length(); ++i) |
| 641 SimulateUserTypingASCIICharacter(ui::VKEY_BACK, false); |
| 642 SimulateUserTypingASCIICharacter(ui::VKEY_BACK, true); |
| 643 EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching( |
| 644 AutofillHostMsg_PasswordNoLongerGenerated::ID)); |
| 645 render_thread_->sink().ClearMessages(); |
| 646 } |
| 647 } |
| 648 |
610 } // namespace autofill | 649 } // namespace autofill |
OLD | NEW |