| 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 "base/strings/string_util.h" | 5 #include "base/strings/string_util.h" |
| 6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
| 7 #include "chrome/test/base/chrome_render_view_test.h" | 7 #include "chrome/test/base/chrome_render_view_test.h" |
| 8 #include "components/autofill/content/common/autofill_messages.h" | 8 #include "components/autofill/content/common/autofill_messages.h" |
| 9 #include "components/autofill/content/renderer/autofill_agent.h" | 9 #include "components/autofill/content/renderer/autofill_agent.h" |
| 10 #include "components/autofill/content/renderer/form_autofill_util.h" | 10 #include "components/autofill/content/renderer/form_autofill_util.h" |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 | 383 |
| 384 // Checks the message sent to PasswordAutofillManager to build the suggestion | 384 // Checks the message sent to PasswordAutofillManager to build the suggestion |
| 385 // list. |username| is the expected username field value, and |show_all| is | 385 // list. |username| is the expected username field value, and |show_all| is |
| 386 // the expected flag for the PasswordAutofillManager, whether to show all | 386 // the expected flag for the PasswordAutofillManager, whether to show all |
| 387 // suggestions, or only those starting with |username|. | 387 // suggestions, or only those starting with |username|. |
| 388 void CheckSuggestions(const std::string& username, bool show_all) { | 388 void CheckSuggestions(const std::string& username, bool show_all) { |
| 389 const IPC::Message* message = | 389 const IPC::Message* message = |
| 390 render_thread_->sink().GetFirstMessageMatching( | 390 render_thread_->sink().GetFirstMessageMatching( |
| 391 AutofillHostMsg_ShowPasswordSuggestions::ID); | 391 AutofillHostMsg_ShowPasswordSuggestions::ID); |
| 392 EXPECT_TRUE(message); | 392 EXPECT_TRUE(message); |
| 393 Tuple<int, base::i18n::TextDirection, base::string16, int, gfx::RectF> | 393 base::Tuple<int, base::i18n::TextDirection, base::string16, int, gfx::RectF> |
| 394 args; | 394 args; |
| 395 AutofillHostMsg_ShowPasswordSuggestions::Read(message, &args); | 395 AutofillHostMsg_ShowPasswordSuggestions::Read(message, &args); |
| 396 EXPECT_EQ(kPasswordFillFormDataId, get<0>(args)); | 396 EXPECT_EQ(kPasswordFillFormDataId, base::get<0>(args)); |
| 397 EXPECT_EQ(ASCIIToUTF16(username), get<2>(args)); | 397 EXPECT_EQ(ASCIIToUTF16(username), base::get<2>(args)); |
| 398 EXPECT_EQ(show_all, static_cast<bool>(get<3>(args) & autofill::SHOW_ALL)); | 398 EXPECT_EQ(show_all, |
| 399 static_cast<bool>(base::get<3>(args) & autofill::SHOW_ALL)); |
| 399 | 400 |
| 400 render_thread_->sink().ClearMessages(); | 401 render_thread_->sink().ClearMessages(); |
| 401 } | 402 } |
| 402 | 403 |
| 403 void ExpectFormSubmittedWithUsernameAndPasswords( | 404 void ExpectFormSubmittedWithUsernameAndPasswords( |
| 404 const std::string& username_value, | 405 const std::string& username_value, |
| 405 const std::string& password_value, | 406 const std::string& password_value, |
| 406 const std::string& new_password_value) { | 407 const std::string& new_password_value) { |
| 407 const IPC::Message* message = | 408 const IPC::Message* message = |
| 408 render_thread_->sink().GetFirstMessageMatching( | 409 render_thread_->sink().GetFirstMessageMatching( |
| 409 AutofillHostMsg_PasswordFormSubmitted::ID); | 410 AutofillHostMsg_PasswordFormSubmitted::ID); |
| 410 ASSERT_TRUE(message); | 411 ASSERT_TRUE(message); |
| 411 Tuple<autofill::PasswordForm> args; | 412 base::Tuple<autofill::PasswordForm> args; |
| 412 AutofillHostMsg_PasswordFormSubmitted::Read(message, &args); | 413 AutofillHostMsg_PasswordFormSubmitted::Read(message, &args); |
| 413 EXPECT_EQ(ASCIIToUTF16(username_value), get<0>(args).username_value); | 414 EXPECT_EQ(ASCIIToUTF16(username_value), base::get<0>(args).username_value); |
| 414 EXPECT_EQ(ASCIIToUTF16(password_value), get<0>(args).password_value); | 415 EXPECT_EQ(ASCIIToUTF16(password_value), base::get<0>(args).password_value); |
| 415 EXPECT_EQ(ASCIIToUTF16(new_password_value), | 416 EXPECT_EQ(ASCIIToUTF16(new_password_value), |
| 416 get<0>(args).new_password_value); | 417 base::get<0>(args).new_password_value); |
| 417 } | 418 } |
| 418 | 419 |
| 419 base::string16 username1_; | 420 base::string16 username1_; |
| 420 base::string16 username2_; | 421 base::string16 username2_; |
| 421 base::string16 username3_; | 422 base::string16 username3_; |
| 422 base::string16 password1_; | 423 base::string16 password1_; |
| 423 base::string16 password2_; | 424 base::string16 password2_; |
| 424 base::string16 password3_; | 425 base::string16 password3_; |
| 425 base::string16 alternate_username3_; | 426 base::string16 alternate_username3_; |
| 426 PasswordFormFillData fill_data_; | 427 PasswordFormFillData fill_data_; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 441 * returns false. May be we should mock URL loading to cirmcuvent this? | 442 * returns false. May be we should mock URL loading to cirmcuvent this? |
| 442 TODO(jcivelli): find a way to make the security origin not deny access to the | 443 TODO(jcivelli): find a way to make the security origin not deny access to the |
| 443 password manager and then reenable this code. | 444 password manager and then reenable this code. |
| 444 | 445 |
| 445 // The form has been loaded, we should have sent the browser a message about | 446 // The form has been loaded, we should have sent the browser a message about |
| 446 // the form. | 447 // the form. |
| 447 const IPC::Message* msg = render_thread_.sink().GetFirstMessageMatching( | 448 const IPC::Message* msg = render_thread_.sink().GetFirstMessageMatching( |
| 448 AutofillHostMsg_PasswordFormsParsed::ID); | 449 AutofillHostMsg_PasswordFormsParsed::ID); |
| 449 ASSERT_TRUE(msg != NULL); | 450 ASSERT_TRUE(msg != NULL); |
| 450 | 451 |
| 451 Tuple1<std::vector<PasswordForm> > forms; | 452 base::Tuple1<std::vector<PasswordForm> > forms; |
| 452 AutofillHostMsg_PasswordFormsParsed::Read(msg, &forms); | 453 AutofillHostMsg_PasswordFormsParsed::Read(msg, &forms); |
| 453 ASSERT_EQ(1U, forms.a.size()); | 454 ASSERT_EQ(1U, forms.a.size()); |
| 454 PasswordForm password_form = forms.a[0]; | 455 PasswordForm password_form = forms.a[0]; |
| 455 EXPECT_EQ(PasswordForm::SCHEME_HTML, password_form.scheme); | 456 EXPECT_EQ(PasswordForm::SCHEME_HTML, password_form.scheme); |
| 456 EXPECT_EQ(ASCIIToUTF16(kUsernameName), password_form.username_element); | 457 EXPECT_EQ(ASCIIToUTF16(kUsernameName), password_form.username_element); |
| 457 EXPECT_EQ(ASCIIToUTF16(kPasswordName), password_form.password_element); | 458 EXPECT_EQ(ASCIIToUTF16(kPasswordName), password_form.password_element); |
| 458 */ | 459 */ |
| 459 | 460 |
| 460 // Simulate the browser sending back the login info, it triggers the | 461 // Simulate the browser sending back the login info, it triggers the |
| 461 // autocomplete. | 462 // autocomplete. |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 ASSERT_EQ(1u, forms3.size()); | 769 ASSERT_EQ(1u, forms3.size()); |
| 769 EXPECT_FALSE(IsWebNodeVisible(forms3[0])); | 770 EXPECT_FALSE(IsWebNodeVisible(forms3[0])); |
| 770 } | 771 } |
| 771 | 772 |
| 772 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest) { | 773 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest) { |
| 773 render_thread_->sink().ClearMessages(); | 774 render_thread_->sink().ClearMessages(); |
| 774 LoadHTML(kVisibleFormWithNoUsernameHTML); | 775 LoadHTML(kVisibleFormWithNoUsernameHTML); |
| 775 const IPC::Message* message = render_thread_->sink() | 776 const IPC::Message* message = render_thread_->sink() |
| 776 .GetFirstMessageMatching(AutofillHostMsg_PasswordFormsRendered::ID); | 777 .GetFirstMessageMatching(AutofillHostMsg_PasswordFormsRendered::ID); |
| 777 EXPECT_TRUE(message); | 778 EXPECT_TRUE(message); |
| 778 Tuple<std::vector<autofill::PasswordForm>, bool> param; | 779 base::Tuple<std::vector<autofill::PasswordForm>, bool> param; |
| 779 AutofillHostMsg_PasswordFormsRendered::Read(message, ¶m); | 780 AutofillHostMsg_PasswordFormsRendered::Read(message, ¶m); |
| 780 EXPECT_TRUE(get<0>(param).size()); | 781 EXPECT_TRUE(base::get<0>(param).size()); |
| 781 | 782 |
| 782 render_thread_->sink().ClearMessages(); | 783 render_thread_->sink().ClearMessages(); |
| 783 LoadHTML(kEmptyFormHTML); | 784 LoadHTML(kEmptyFormHTML); |
| 784 message = render_thread_->sink().GetFirstMessageMatching( | 785 message = render_thread_->sink().GetFirstMessageMatching( |
| 785 AutofillHostMsg_PasswordFormsRendered::ID); | 786 AutofillHostMsg_PasswordFormsRendered::ID); |
| 786 EXPECT_TRUE(message); | 787 EXPECT_TRUE(message); |
| 787 AutofillHostMsg_PasswordFormsRendered::Read(message, ¶m); | 788 AutofillHostMsg_PasswordFormsRendered::Read(message, ¶m); |
| 788 EXPECT_FALSE(get<0>(param).size()); | 789 EXPECT_FALSE(base::get<0>(param).size()); |
| 789 | 790 |
| 790 render_thread_->sink().ClearMessages(); | 791 render_thread_->sink().ClearMessages(); |
| 791 LoadHTML(kNonVisibleFormHTML); | 792 LoadHTML(kNonVisibleFormHTML); |
| 792 message = render_thread_->sink().GetFirstMessageMatching( | 793 message = render_thread_->sink().GetFirstMessageMatching( |
| 793 AutofillHostMsg_PasswordFormsRendered::ID); | 794 AutofillHostMsg_PasswordFormsRendered::ID); |
| 794 EXPECT_TRUE(message); | 795 EXPECT_TRUE(message); |
| 795 AutofillHostMsg_PasswordFormsRendered::Read(message, ¶m); | 796 AutofillHostMsg_PasswordFormsRendered::Read(message, ¶m); |
| 796 EXPECT_FALSE(get<0>(param).size()); | 797 EXPECT_FALSE(base::get<0>(param).size()); |
| 797 } | 798 } |
| 798 | 799 |
| 799 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_Redirection) { | 800 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_Redirection) { |
| 800 render_thread_->sink().ClearMessages(); | 801 render_thread_->sink().ClearMessages(); |
| 801 LoadHTML(kEmptyWebpage); | 802 LoadHTML(kEmptyWebpage); |
| 802 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( | 803 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( |
| 803 AutofillHostMsg_PasswordFormsRendered::ID)); | 804 AutofillHostMsg_PasswordFormsRendered::ID)); |
| 804 | 805 |
| 805 render_thread_->sink().ClearMessages(); | 806 render_thread_->sink().ClearMessages(); |
| 806 LoadHTML(kRedirectionWebpage); | 807 LoadHTML(kRedirectionWebpage); |
| (...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1876 SetElementReadOnly(password_element_, true); | 1877 SetElementReadOnly(password_element_, true); |
| 1877 static_cast<content::RenderFrameObserver*>(password_autofill_agent_) | 1878 static_cast<content::RenderFrameObserver*>(password_autofill_agent_) |
| 1878 ->WillSubmitForm(username_element_.form()); | 1879 ->WillSubmitForm(username_element_.form()); |
| 1879 | 1880 |
| 1880 // Observe that the PasswordAutofillAgent can correctly process submitted | 1881 // Observe that the PasswordAutofillAgent can correctly process submitted |
| 1881 // form. | 1882 // form. |
| 1882 ExpectFormSubmittedWithUsernameAndPasswords("temp", "random", ""); | 1883 ExpectFormSubmittedWithUsernameAndPasswords("temp", "random", ""); |
| 1883 } | 1884 } |
| 1884 | 1885 |
| 1885 } // namespace autofill | 1886 } // namespace autofill |
| OLD | NEW |