| 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/autofill/content/renderer/password_autofill_agent.h" | 5 #include "components/autofill/content/renderer/password_autofill_agent.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 const std::string& password_value, | 500 const std::string& password_value, |
| 501 const std::string& new_password_value) { | 501 const std::string& new_password_value) { |
| 502 base::RunLoop().RunUntilIdle(); | 502 base::RunLoop().RunUntilIdle(); |
| 503 ASSERT_TRUE(fake_driver_.called_password_form_submitted()); | 503 ASSERT_TRUE(fake_driver_.called_password_form_submitted()); |
| 504 ASSERT_TRUE(static_cast<bool>(fake_driver_.password_form_submitted())); | 504 ASSERT_TRUE(static_cast<bool>(fake_driver_.password_form_submitted())); |
| 505 const autofill::PasswordForm& form = | 505 const autofill::PasswordForm& form = |
| 506 *(fake_driver_.password_form_submitted()); | 506 *(fake_driver_.password_form_submitted()); |
| 507 EXPECT_EQ(ASCIIToUTF16(username_value), form.username_value); | 507 EXPECT_EQ(ASCIIToUTF16(username_value), form.username_value); |
| 508 EXPECT_EQ(ASCIIToUTF16(password_value), form.password_value); | 508 EXPECT_EQ(ASCIIToUTF16(password_value), form.password_value); |
| 509 EXPECT_EQ(ASCIIToUTF16(new_password_value), form.new_password_value); | 509 EXPECT_EQ(ASCIIToUTF16(new_password_value), form.new_password_value); |
| 510 EXPECT_EQ(PasswordForm::SubmissionIndicatorEvent::HTML_FORM_SUBMISSION, |
| 511 form.submission_event); |
| 510 } | 512 } |
| 511 | 513 |
| 512 void ExpectFieldPropertiesMasks( | 514 void ExpectFieldPropertiesMasks( |
| 513 PasswordFormSourceType expected_type, | 515 PasswordFormSourceType expected_type, |
| 514 const std::map<base::string16, FieldPropertiesMask>& | 516 const std::map<base::string16, FieldPropertiesMask>& |
| 515 expected_properties_masks) { | 517 expected_properties_masks) { |
| 516 base::RunLoop().RunUntilIdle(); | 518 base::RunLoop().RunUntilIdle(); |
| 517 autofill::PasswordForm form; | 519 autofill::PasswordForm form; |
| 518 if (expected_type == PasswordFormSubmitted) { | 520 if (expected_type == PasswordFormSubmitted) { |
| 519 ASSERT_TRUE(fake_driver_.called_password_form_submitted()); | 521 ASSERT_TRUE(fake_driver_.called_password_form_submitted()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 536 << "Wrong mask for the field " << field.name; | 538 << "Wrong mask for the field " << field.name; |
| 537 unchecked_masks--; | 539 unchecked_masks--; |
| 538 } | 540 } |
| 539 EXPECT_TRUE(unchecked_masks == 0) | 541 EXPECT_TRUE(unchecked_masks == 0) |
| 540 << "Some expected masks are missed in FormData"; | 542 << "Some expected masks are missed in FormData"; |
| 541 } | 543 } |
| 542 | 544 |
| 543 void ExpectInPageNavigationWithUsernameAndPasswords( | 545 void ExpectInPageNavigationWithUsernameAndPasswords( |
| 544 const std::string& username_value, | 546 const std::string& username_value, |
| 545 const std::string& password_value, | 547 const std::string& password_value, |
| 546 const std::string& new_password_value) { | 548 const std::string& new_password_value, |
| 549 PasswordForm::SubmissionIndicatorEvent event) { |
| 547 base::RunLoop().RunUntilIdle(); | 550 base::RunLoop().RunUntilIdle(); |
| 548 ASSERT_TRUE(fake_driver_.called_inpage_navigation()); | 551 ASSERT_TRUE(fake_driver_.called_inpage_navigation()); |
| 549 ASSERT_TRUE( | 552 ASSERT_TRUE( |
| 550 static_cast<bool>(fake_driver_.password_form_inpage_navigation())); | 553 static_cast<bool>(fake_driver_.password_form_inpage_navigation())); |
| 551 const autofill::PasswordForm& form = | 554 const autofill::PasswordForm& form = |
| 552 *(fake_driver_.password_form_inpage_navigation()); | 555 *(fake_driver_.password_form_inpage_navigation()); |
| 553 EXPECT_EQ(ASCIIToUTF16(username_value), form.username_value); | 556 EXPECT_EQ(ASCIIToUTF16(username_value), form.username_value); |
| 554 EXPECT_EQ(ASCIIToUTF16(password_value), form.password_value); | 557 EXPECT_EQ(ASCIIToUTF16(password_value), form.password_value); |
| 555 EXPECT_EQ(ASCIIToUTF16(new_password_value), form.new_password_value); | 558 EXPECT_EQ(ASCIIToUTF16(new_password_value), form.new_password_value); |
| 559 EXPECT_EQ(event, form.submission_event); |
| 556 } | 560 } |
| 557 | 561 |
| 558 void CheckIfEventsAreCalled(const std::vector<base::string16>& checkers, | 562 void CheckIfEventsAreCalled(const std::vector<base::string16>& checkers, |
| 559 bool expected) { | 563 bool expected) { |
| 560 for (const base::string16& variable : checkers) { | 564 for (const base::string16& variable : checkers) { |
| 561 int value; | 565 int value; |
| 562 EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(variable, &value)) | 566 EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(variable, &value)) |
| 563 << variable; | 567 << variable; |
| 564 EXPECT_EQ(expected, value == 1) << variable; | 568 EXPECT_EQ(expected, value == 1) << variable; |
| 565 } | 569 } |
| (...skipping 1676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2242 UpdateUsernameAndPasswordElements(); | 2246 UpdateUsernameAndPasswordElements(); |
| 2243 | 2247 |
| 2244 SimulateUsernameChange("Bob"); | 2248 SimulateUsernameChange("Bob"); |
| 2245 SimulatePasswordChange("mypassword"); | 2249 SimulatePasswordChange("mypassword"); |
| 2246 | 2250 |
| 2247 username_element_.SetAttribute("style", "display:none;"); | 2251 username_element_.SetAttribute("style", "display:none;"); |
| 2248 password_element_.SetAttribute("style", "display:none;"); | 2252 password_element_.SetAttribute("style", "display:none;"); |
| 2249 | 2253 |
| 2250 password_autofill_agent_->AJAXSucceeded(); | 2254 password_autofill_agent_->AJAXSucceeded(); |
| 2251 | 2255 |
| 2252 ExpectInPageNavigationWithUsernameAndPasswords("Bob", "mypassword", ""); | 2256 ExpectInPageNavigationWithUsernameAndPasswords( |
| 2257 "Bob", "mypassword", "", |
| 2258 PasswordForm::SubmissionIndicatorEvent::XHR_SUCCEEDED); |
| 2253 } | 2259 } |
| 2254 | 2260 |
| 2255 TEST_F(PasswordAutofillAgentTest, | 2261 TEST_F(PasswordAutofillAgentTest, |
| 2256 NoForm_NoPromptForAJAXSubmitWithoutNavigationAndElementsVisible) { | 2262 NoForm_NoPromptForAJAXSubmitWithoutNavigationAndElementsVisible) { |
| 2257 LoadHTML(kNoFormHTML); | 2263 LoadHTML(kNoFormHTML); |
| 2258 UpdateUsernameAndPasswordElements(); | 2264 UpdateUsernameAndPasswordElements(); |
| 2259 | 2265 |
| 2260 SimulateUsernameChange("Bob"); | 2266 SimulateUsernameChange("Bob"); |
| 2261 SimulatePasswordChange("mypassword"); | 2267 SimulatePasswordChange("mypassword"); |
| 2262 | 2268 |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2533 SimulateUsernameChange("Bob"); | 2539 SimulateUsernameChange("Bob"); |
| 2534 SimulatePasswordChange("mypassword"); | 2540 SimulatePasswordChange("mypassword"); |
| 2535 SimulateUsernameChange("Alice"); | 2541 SimulateUsernameChange("Alice"); |
| 2536 | 2542 |
| 2537 // Hide form elements to simulate successful login. | 2543 // Hide form elements to simulate successful login. |
| 2538 username_element_.SetAttribute("style", "display:none;"); | 2544 username_element_.SetAttribute("style", "display:none;"); |
| 2539 password_element_.SetAttribute("style", "display:none;"); | 2545 password_element_.SetAttribute("style", "display:none;"); |
| 2540 | 2546 |
| 2541 password_autofill_agent_->AJAXSucceeded(); | 2547 password_autofill_agent_->AJAXSucceeded(); |
| 2542 | 2548 |
| 2543 ExpectInPageNavigationWithUsernameAndPasswords("Alice", "mypassword", ""); | 2549 ExpectInPageNavigationWithUsernameAndPasswords( |
| 2550 "Alice", "mypassword", "", |
| 2551 PasswordForm::SubmissionIndicatorEvent::XHR_SUCCEEDED); |
| 2544 } | 2552 } |
| 2545 | 2553 |
| 2546 TEST_F(PasswordAutofillAgentTest, | 2554 TEST_F(PasswordAutofillAgentTest, |
| 2547 UsernameChangedAfterPasswordInput_FormSubmitted) { | 2555 UsernameChangedAfterPasswordInput_FormSubmitted) { |
| 2548 SimulateUsernameChange("Bob"); | 2556 SimulateUsernameChange("Bob"); |
| 2549 SimulatePasswordChange("mypassword"); | 2557 SimulatePasswordChange("mypassword"); |
| 2550 SimulateUsernameChange("Alice"); | 2558 SimulateUsernameChange("Alice"); |
| 2551 | 2559 |
| 2552 static_cast<content::RenderFrameObserver*>(password_autofill_agent_) | 2560 static_cast<content::RenderFrameObserver*>(password_autofill_agent_) |
| 2553 ->WillSendSubmitEvent(username_element_.Form()); | 2561 ->WillSendSubmitEvent(username_element_.Form()); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2695 | 2703 |
| 2696 // Simulate that JavaScript removes the submitted form from DOM. That means | 2704 // Simulate that JavaScript removes the submitted form from DOM. That means |
| 2697 // that a submission was successful. | 2705 // that a submission was successful. |
| 2698 std::string remove_form = | 2706 std::string remove_form = |
| 2699 "var form = document.getElementById('LoginTestForm');" | 2707 "var form = document.getElementById('LoginTestForm');" |
| 2700 "form.parentNode.removeChild(form);"; | 2708 "form.parentNode.removeChild(form);"; |
| 2701 ExecuteJavaScriptForTests(remove_form.c_str()); | 2709 ExecuteJavaScriptForTests(remove_form.c_str()); |
| 2702 | 2710 |
| 2703 static_cast<content::RenderFrameObserver*>(password_autofill_agent_) | 2711 static_cast<content::RenderFrameObserver*>(password_autofill_agent_) |
| 2704 ->DidCommitProvisionalLoad(false, true); | 2712 ->DidCommitProvisionalLoad(false, true); |
| 2705 base::RunLoop().RunUntilIdle(); | 2713 ExpectInPageNavigationWithUsernameAndPasswords( |
| 2706 | 2714 std::string(), "random", std::string(), |
| 2707 // Chect that the form was submitted with in-page navigation. | 2715 PasswordForm::SubmissionIndicatorEvent::INPAGE_NAVIGATION); |
| 2708 EXPECT_TRUE(fake_driver_.called_inpage_navigation()); | |
| 2709 EXPECT_EQ(base::string16(), | |
| 2710 fake_driver_.password_form_inpage_navigation()->username_value); | |
| 2711 EXPECT_EQ(ASCIIToUTF16("random"), | |
| 2712 fake_driver_.password_form_inpage_navigation()->password_value); | |
| 2713 } | 2716 } |
| 2714 | 2717 |
| 2715 #if defined(SAFE_BROWSING_DB_LOCAL) | 2718 #if defined(SAFE_BROWSING_DB_LOCAL) |
| 2716 // Verify CheckSafeBrowsingReputation() is called when user starts filling | 2719 // Verify CheckSafeBrowsingReputation() is called when user starts filling |
| 2717 // username or password field, and that this function is only called once. | 2720 // username or password field, and that this function is only called once. |
| 2718 TEST_F(PasswordAutofillAgentTest, | 2721 TEST_F(PasswordAutofillAgentTest, |
| 2719 CheckSafeBrowsingReputationWhenUserStartsFillingUsernamePassword) { | 2722 CheckSafeBrowsingReputationWhenUserStartsFillingUsernamePassword) { |
| 2720 ASSERT_EQ(0, fake_driver_.called_check_safe_browsing_reputation_cnt()); | 2723 ASSERT_EQ(0, fake_driver_.called_check_safe_browsing_reputation_cnt()); |
| 2721 // Simulate a click on password field to set its on focus, | 2724 // Simulate a click on password field to set its on focus, |
| 2722 // CheckSafeBrowsingReputation() should be called. | 2725 // CheckSafeBrowsingReputation() should be called. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2734 | 2737 |
| 2735 // Navigate to another page and click on username field, | 2738 // Navigate to another page and click on username field, |
| 2736 // CheckSafeBrowsingReputation() should be triggered again. | 2739 // CheckSafeBrowsingReputation() should be triggered again. |
| 2737 LoadHTML(kFormHTML); | 2740 LoadHTML(kFormHTML); |
| 2738 SimulateElementClick(kUsernameName); | 2741 SimulateElementClick(kUsernameName); |
| 2739 base::RunLoop().RunUntilIdle(); | 2742 base::RunLoop().RunUntilIdle(); |
| 2740 EXPECT_EQ(2, fake_driver_.called_check_safe_browsing_reputation_cnt()); | 2743 EXPECT_EQ(2, fake_driver_.called_check_safe_browsing_reputation_cnt()); |
| 2741 } | 2744 } |
| 2742 #endif | 2745 #endif |
| 2743 } // namespace autofill | 2746 } // namespace autofill |
| OLD | NEW |