Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(389)

Side by Side Diff: chrome/renderer/autofill/password_generation_manager_browsertest.cc

Issue 10540069: Refactor detection of account creation forms and fix two minor issues. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/renderer/autofill/password_generation_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/memory/scoped_vector.h" 6 #include "base/memory/scoped_vector.h"
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "chrome/common/autofill_messages.h" 8 #include "chrome/common/autofill_messages.h"
9 #include "chrome/renderer/autofill/password_generation_manager.h" 9 #include "chrome/renderer/autofill/password_generation_manager.h"
10 #include "chrome/test/base/chrome_render_view_test.h" 10 #include "chrome/test/base/chrome_render_view_test.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 const char kSigninFormHTML[] = 87 const char kSigninFormHTML[] =
88 "<FORM name = 'blah' action = 'http://www.random.com/'> " 88 "<FORM name = 'blah' action = 'http://www.random.com/'> "
89 " <INPUT type = 'text' id = 'username'/> " 89 " <INPUT type = 'text' id = 'username'/> "
90 " <INPUT type = 'password' id = 'password'/> " 90 " <INPUT type = 'password' id = 'password'/> "
91 " <INPUT type = 'submit' value = 'LOGIN' />" 91 " <INPUT type = 'submit' value = 'LOGIN' />"
92 "</FORM>"; 92 "</FORM>";
93 93
94 const char kAccountCreationFormHTML[] = 94 const char kAccountCreationFormHTML[] =
95 "<FORM name = 'blah' action = 'http://www.random.com/'> " 95 "<FORM name = 'blah' action = 'http://www.random.com/'> "
96 " <INPUT type = 'text' id = 'username'/> " 96 " <INPUT type = 'text' id = 'username'/> "
97 " <INPUT type = 'password' id = 'first_password' size=5/> "
98 " <INPUT type = 'password' id = 'second_password' size=5/> "
99 " <INPUT type = 'submit' value = 'LOGIN' />"
100 "</FORM>";
101
102 const char kHiddenPasswordAccountCreationFormHTML[] =
103 "<FORM name = 'blah' action = 'http://www.random.com/'> "
104 " <INPUT type = 'text' id = 'username'/> "
105 " <INPUT type = 'password' id = 'first_password'/> "
106 " <INPUT type = 'password' id = 'second_password' style='display:none'/> "
107 " <INPUT type = 'submit' value = 'LOGIN' />"
108 "</FORM>";
109
110 const char kInvalidActionAccountCreationFormHTML[] =
111 "<FORM name = 'blah' action = 'invalid'> "
112 " <INPUT type = 'text' id = 'username'/> "
97 " <INPUT type = 'password' id = 'first_password'/> " 113 " <INPUT type = 'password' id = 'first_password'/> "
98 " <INPUT type = 'password' id = 'second_password'/> " 114 " <INPUT type = 'password' id = 'second_password'/> "
99 " <INPUT type = 'submit' value = 'LOGIN' />" 115 " <INPUT type = 'submit' value = 'LOGIN' />"
100 "</FORM>"; 116 "</FORM>";
101 117
102 TEST_F(PasswordGenerationManagerTest, DetectionTest) { 118 TEST_F(PasswordGenerationManagerTest, DetectionTest) {
103 LoadHTML(kSigninFormHTML); 119 LoadHTML(kSigninFormHTML);
104 120
105 WebDocument document = GetMainFrame()->document(); 121 WebDocument document = GetMainFrame()->document();
106 WebElement element = 122 WebElement element =
107 document.getElementById(WebString::fromUTF8("password")); 123 document.getElementById(WebString::fromUTF8("password"));
108 ASSERT_FALSE(element.isNull()); 124 ASSERT_FALSE(element.isNull());
109 WebInputElement password_element = element.to<WebInputElement>(); 125 WebInputElement password_element = element.to<WebInputElement>();
110 EXPECT_FALSE(DecorationIsVisible(&password_element)); 126 EXPECT_FALSE(DecorationIsVisible(&password_element));
111 127
112 LoadHTML(kAccountCreationFormHTML); 128 LoadHTML(kAccountCreationFormHTML);
113 129
114 // We don't show the decoration yet because the feature isn't enabled. 130 // We don't show the decoration yet because the feature isn't enabled.
115 document = GetMainFrame()->document(); 131 document = GetMainFrame()->document();
116 element = document.getElementById(WebString::fromUTF8("first_password")); 132 element = document.getElementById(WebString::fromUTF8("first_password"));
117 ASSERT_FALSE(element.isNull()); 133 ASSERT_FALSE(element.isNull());
118 WebInputElement first_password_element = element.to<WebInputElement>(); 134 WebInputElement first_password_element = element.to<WebInputElement>();
119 element = document.getElementById(WebString::fromUTF8("second_password"));
120 ASSERT_FALSE(element.isNull());
121 WebInputElement second_password_element = element.to<WebInputElement>();
122 EXPECT_FALSE(DecorationIsVisible(&first_password_element)); 135 EXPECT_FALSE(DecorationIsVisible(&first_password_element));
123 136
124 // Pretend like password generation was enabled. 137 // Pretend like password generation was enabled.
125 AutofillMsg_PasswordGenerationEnabled msg(0, true); 138 AutofillMsg_PasswordGenerationEnabled msg(0, true);
126 generation_manager_->OnMessageReceived(msg); 139 generation_manager_->OnMessageReceived(msg);
127 140
128 // Now check that the decoration is visible on the first password field and 141 // Now check that the decoration is visible on the first password field and
129 // that we send a message after the decoration is clicked. 142 // that we send a message after the decoration is clicked.
130 LoadHTML(kAccountCreationFormHTML); 143 LoadHTML(kAccountCreationFormHTML);
131 document = GetMainFrame()->document(); 144 document = GetMainFrame()->document();
132 element = document.getElementById(WebString::fromUTF8("first_password")); 145 element = document.getElementById(WebString::fromUTF8("first_password"));
133 ASSERT_FALSE(element.isNull()); 146 ASSERT_FALSE(element.isNull());
134 first_password_element = element.to<WebInputElement>(); 147 first_password_element = element.to<WebInputElement>();
135 element = document.getElementById(WebString::fromUTF8("second_password"));
136 ASSERT_FALSE(element.isNull());
137 second_password_element = element.to<WebInputElement>();
138 EXPECT_TRUE(DecorationIsVisible(&first_password_element)); 148 EXPECT_TRUE(DecorationIsVisible(&first_password_element));
139 SimulateClickOnDecoration(&first_password_element); 149 SimulateClickOnDecoration(&first_password_element);
140 EXPECT_EQ(1u, generation_manager_->messages().size()); 150 EXPECT_EQ(1u, generation_manager_->messages().size());
141 EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID, 151 EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID,
142 generation_manager_->messages()[0]->type()); 152 generation_manager_->messages()[0]->type());
153
154 // This doesn't trigger because hidden password fields are ignored.
155 LoadHTML(kHiddenPasswordAccountCreationFormHTML);
156 document = GetMainFrame()->document();
157 element = document.getElementById(WebString::fromUTF8("first_password"));
158 ASSERT_FALSE(element.isNull());
159 first_password_element = element.to<WebInputElement>();
160 EXPECT_FALSE(DecorationIsVisible(&first_password_element));
161
162 // This doesn't trigger because the form action is invalid.
163 LoadHTML(kInvalidActionAccountCreationFormHTML);
164 document = GetMainFrame()->document();
165 element = document.getElementById(WebString::fromUTF8("first_password"));
166 ASSERT_FALSE(element.isNull());
167 first_password_element = element.to<WebInputElement>();
168 EXPECT_FALSE(DecorationIsVisible(&first_password_element));
143 } 169 }
144 170
145 TEST_F(PasswordGenerationManagerTest, FillTest) { 171 TEST_F(PasswordGenerationManagerTest, FillTest) {
146 // Make sure that we are enabled before loading HTML. 172 // Make sure that we are enabled before loading HTML.
147 AutofillMsg_PasswordGenerationEnabled enabled_msg(0, true); 173 AutofillMsg_PasswordGenerationEnabled enabled_msg(0, true);
148 generation_manager_->OnMessageReceived(enabled_msg); 174 generation_manager_->OnMessageReceived(enabled_msg);
149 LoadHTML(kAccountCreationFormHTML); 175 LoadHTML(kAccountCreationFormHTML);
150 176
151 WebDocument document = GetMainFrame()->document(); 177 WebDocument document = GetMainFrame()->document();
152 WebElement element = 178 WebElement element =
(...skipping 13 matching lines...) Expand all
166 generation_manager_->OnMessageReceived(msg); 192 generation_manager_->OnMessageReceived(msg);
167 193
168 // Password fields are filled out and set as being autofilled. 194 // Password fields are filled out and set as being autofilled.
169 EXPECT_EQ(password, first_password_element.value()); 195 EXPECT_EQ(password, first_password_element.value());
170 EXPECT_EQ(password, second_password_element.value()); 196 EXPECT_EQ(password, second_password_element.value());
171 EXPECT_TRUE(first_password_element.isAutofilled()); 197 EXPECT_TRUE(first_password_element.isAutofilled());
172 EXPECT_TRUE(second_password_element.isAutofilled()); 198 EXPECT_TRUE(second_password_element.isAutofilled());
173 } 199 }
174 200
175 } // namespace autofill 201 } // namespace autofill
OLDNEW
« no previous file with comments | « chrome/renderer/autofill/password_generation_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698