password_form_conversion_utils_browsertest.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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 3// found in the LICENSE file. 4 5#include "base/strings/string16.h" 6#include "base/strings/utf_string_conversions.h" 7#include "components/autofill/content/renderer/password_form_conversion_utils.h" 8#include "components/autofill/core/common/password_form.h" 9#include "content/public/test/render_view_test.h" 10#include "testing/gtest/include/gtest/gtest.h" 11#include "third_party/WebKit/public/platform/WebVector.h" 12#include "third_party/WebKit/public/web/WebDocument.h" 13#include "third_party/WebKit/public/web/WebFormElement.h" 14#include "third_party/WebKit/public/web/WebLocalFrame.h" 15 16using blink::WebFormElement; 17using blink::WebFrame; 18using blink::WebVector; 19 20namespace autofill { 21namespace { 22 23class PasswordFormConversionUtilsTest : public content::RenderViewTest { 24 public: 25 PasswordFormConversionUtilsTest() : content::RenderViewTest() {} 26 virtual ~PasswordFormConversionUtilsTest() {} 27 28 private: 29 DISALLOW_COPY_AND_ASSIGN(PasswordFormConversionUtilsTest); 30}; 31 32} // namespace 33 34TEST_F(PasswordFormConversionUtilsTest, ValidWebFormElementToPasswordForm) { 35 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 36 " <INPUT type=\"text\" name=\"username\" " 37 " id=\"username\" value=\"johnsmith\"/>" 38 " <INPUT type=\"submit\" name=\"submit\" value=\"Submit\"/>" 39 " <INPUT type=\"password\" name=\"password\" id=\"password\" " 40 " value=\"secret\"/>" 41 "</FORM>"); 42 43 WebFrame* frame = GetMainFrame(); 44 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 45 46 WebVector<WebFormElement> forms; 47 frame->document().forms(forms); 48 ASSERT_EQ(1U, forms.size()); 49 50 scoped_ptr<PasswordForm> password_form = CreatePasswordForm(forms[0]); 51 ASSERT_NE(static_cast<PasswordForm*>(NULL), password_form.get()); 52 53 EXPECT_EQ("data:", password_form->signon_realm); 54 EXPECT_EQ(GURL("http://cnn.com"), password_form->action); 55 EXPECT_EQ(base::UTF8ToUTF16("username"), password_form->username_element); 56 EXPECT_EQ(base::UTF8ToUTF16("johnsmith"), password_form->username_value); 57 EXPECT_EQ(base::UTF8ToUTF16("password"), password_form->password_element); 58 EXPECT_EQ(base::UTF8ToUTF16("secret"), password_form->password_value); 59 EXPECT_EQ(PasswordForm::SCHEME_HTML, password_form->scheme); 60 EXPECT_FALSE(password_form->ssl_valid); 61 EXPECT_FALSE(password_form->preferred); 62 EXPECT_FALSE(password_form->blacklisted_by_user); 63 EXPECT_EQ(PasswordForm::TYPE_MANUAL, password_form->type); 64} 65 66TEST_F(PasswordFormConversionUtilsTest, InvalidWebFormElementToPasswordForm) { 67 LoadHTML("<FORM name=\"TestForm\" action=\"invalid\" method=\"post\">" 68 " <INPUT type=\"text\" name=\"username\" " 69 " id=\"username\" value=\"johnsmith\"/>" 70 " <INPUT type=\"submit\" name=\"submit\" value=\"Submit\"/>" 71 " <INPUT type=\"password\" name=\"password\" id=\"password\" " 72 " value=\"secret\"/>" 73 "</FORM>"); 74 75 WebFrame* frame = GetMainFrame(); 76 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 77 78 WebVector<WebFormElement> forms; 79 frame->document().forms(forms); 80 ASSERT_EQ(1U, forms.size()); 81 82 scoped_ptr<PasswordForm> password_form = CreatePasswordForm(forms[0]); 83 EXPECT_EQ(static_cast<PasswordForm*>(NULL), password_form.get()); 84} 85 86TEST_F(PasswordFormConversionUtilsTest, 87 WebFormWithMultipleUseNameAndPassWordFieldsToPasswordForm) { 88 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 89 " <INPUT type=\"text\" name=\"username1\" " 90 " id=\"username1\" value=\"John\"/>" 91 " <INPUT type=\"password\" name=\"password1\" id=\"password1\" " 92 " value=\"encrypted\"/>" 93 " <INPUT type=\"text\" name=\"username2\" " 94 " id=\"username2\" value=\"Smith\"/>" 95 " <INPUT type=\"password\" name=\"password2\" id=\"password2\" " 96 " value=\"secret\"/>" 97 " <INPUT type=\"text\" name=\"username3\" " 98 " id=\"username3\" value=\"JohnSmith\"/>" 99 " <INPUT type=\"password\" name=\"password3\" id=\"password3\" " 100 " value=\"secret\"/>" 101 " <INPUT type=\"submit\" name=\"submit\" value=\"Submit\"/>" 102 "</FORM>"); 103 104 WebFrame* frame = GetMainFrame(); 105 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 106 107 WebVector<WebFormElement> forms; 108 frame->document().forms(forms); 109 ASSERT_EQ(1U, forms.size()); 110 111 scoped_ptr<PasswordForm> password_form = CreatePasswordForm(forms[0]); 112 ASSERT_NE(static_cast<PasswordForm*>(NULL), password_form.get()); 113 114 EXPECT_EQ("data:", password_form->signon_realm); 115 EXPECT_EQ(GURL("http://cnn.com"), password_form->action); 116 EXPECT_EQ(base::UTF8ToUTF16("username1"), password_form->username_element); 117 EXPECT_EQ(base::UTF8ToUTF16("John"), password_form->username_value); 118 EXPECT_EQ(base::UTF8ToUTF16("password2"), password_form->password_element); 119 EXPECT_EQ(base::UTF8ToUTF16("secret"), password_form->password_value); 120 EXPECT_EQ(base::UTF8ToUTF16("password1"), 121 password_form->old_password_element); 122 EXPECT_EQ(base::UTF8ToUTF16("encrypted"), password_form->old_password_value); 123 EXPECT_EQ(base::UTF8ToUTF16("Smith"), 124 password_form->other_possible_usernames[0]); 125 EXPECT_EQ(base::UTF8ToUTF16("JohnSmith"), 126 password_form->other_possible_usernames[1]); 127 EXPECT_EQ(PasswordForm::SCHEME_HTML, password_form->scheme); 128 EXPECT_FALSE(password_form->ssl_valid); 129 EXPECT_FALSE(password_form->preferred); 130 EXPECT_FALSE(password_form->blacklisted_by_user); 131 EXPECT_EQ(PasswordForm::TYPE_MANUAL, password_form->type); 132} 133 134TEST_F(PasswordFormConversionUtilsTest, 135 WebFormwithThreeDifferentPasswordsToPasswordForm) { 136 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 137 " <INPUT type=\"text\" name=\"username\" " 138 " id=\"username\" value=\"John\"/>" 139 " <INPUT type=\"password\" name=\"password1\" id=\"password1\" " 140 " value=\"secret\"/>" 141 " <INPUT type=\"password\" name=\"password2\" id=\"password2\" " 142 " value=\"encrypted\"/>" 143 " <INPUT type=\"password\" name=\"password3\" id=\"password3\" " 144 " value=\"key\"/>" 145 " <INPUT type=\"submit\" name=\"submit\" value=\"Submit\"/>" 146 "</FORM>"); 147 148 WebFrame* frame = GetMainFrame(); 149 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 150 151 WebVector<WebFormElement> forms; 152 frame->document().forms(forms); 153 ASSERT_EQ(1U, forms.size()); 154 155 scoped_ptr<PasswordForm> password_form = CreatePasswordForm(forms[0]); 156 ASSERT_EQ(static_cast<PasswordForm*>(NULL), password_form.get()); 157} 158 159} // namespace autofill 160