Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / components / autofill / content / renderer / password_form_conversion_utils_browsertest.cc
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
16 using blink::WebFormElement;
17 using blink::WebFrame;
18 using blink::WebVector;
19
20 namespace autofill {
21 namespace {
22
23 class 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
34 TEST_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
66 TEST_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
86 TEST_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
134 TEST_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