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

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

Issue 845693002: [Password Generation] Require full form match to allow generation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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
« no previous file with comments | « no previous file | components/autofill/content/renderer/password_generation_agent.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 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 <string.h> 5 #include <string.h>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "base/test/histogram_tester.h" 9 #include "base/test/histogram_tester.h"
10 #include "chrome/test/base/chrome_render_view_test.h" 10 #include "chrome/test/base/chrome_render_view_test.h"
11 #include "components/autofill/content/common/autofill_messages.h" 11 #include "components/autofill/content/common/autofill_messages.h"
12 #include "components/autofill/content/renderer/autofill_agent.h" 12 #include "components/autofill/content/renderer/autofill_agent.h"
13 #include "components/autofill/content/renderer/form_autofill_util.h"
13 #include "components/autofill/content/renderer/test_password_generation_agent.h" 14 #include "components/autofill/content/renderer/test_password_generation_agent.h"
14 #include "components/autofill/core/common/form_data.h" 15 #include "components/autofill/core/common/form_data.h"
15 #include "components/autofill/core/common/password_generation_util.h" 16 #include "components/autofill/core/common/password_generation_util.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/WebKit/public/platform/WebString.h" 18 #include "third_party/WebKit/public/platform/WebString.h"
18 #include "third_party/WebKit/public/web/WebDocument.h" 19 #include "third_party/WebKit/public/web/WebDocument.h"
19 #include "third_party/WebKit/public/web/WebLocalFrame.h" 20 #include "third_party/WebKit/public/web/WebLocalFrame.h"
20 #include "third_party/WebKit/public/web/WebWidget.h" 21 #include "third_party/WebKit/public/web/WebWidget.h"
21 22
22 using blink::WebDocument; 23 using blink::WebDocument;
(...skipping 14 matching lines...) Expand all
37 } 38 }
38 39
39 void SetNotBlacklistedMessage(const char* form_str) { 40 void SetNotBlacklistedMessage(const char* form_str) {
40 autofill::PasswordForm form; 41 autofill::PasswordForm form;
41 form.origin = 42 form.origin =
42 GURL(base::StringPrintf("data:text/html;charset=utf-8,%s", form_str)); 43 GURL(base::StringPrintf("data:text/html;charset=utf-8,%s", form_str));
43 AutofillMsg_FormNotBlacklisted msg(0, form); 44 AutofillMsg_FormNotBlacklisted msg(0, form);
44 password_generation_->OnMessageReceived(msg); 45 password_generation_->OnMessageReceived(msg);
45 } 46 }
46 47
47 void SetAccountCreationFormsDetectedMessage(const char* form_str) { 48 // Sends a message that the |form_index| form on the page is valid for
48 autofill::FormData form; 49 // account creation.
49 form.origin = 50 void SetAccountCreationFormsDetectedMessage(int form_index) {
50 GURL(base::StringPrintf("data:text/html;charset=utf-8,%s", form_str)); 51 WebDocument document = GetMainFrame()->document();
52 blink::WebVector<blink::WebFormElement> web_forms;
53 document.forms(web_forms);
54
55 autofill::FormData form_data;
56 WebFormElementToFormData(web_forms[form_index],
57 blink::WebFormControlElement(),
58 REQUIRE_NONE,
59 EXTRACT_NONE,
60 &form_data,
61 NULL /* FormFieldData */);
62
51 std::vector<autofill::FormData> forms; 63 std::vector<autofill::FormData> forms;
52 forms.push_back(form); 64 forms.push_back(form_data);
53 AutofillMsg_AccountCreationFormsDetected msg(0, forms); 65 AutofillMsg_AccountCreationFormsDetected msg(0, forms);
54 password_generation_->OnMessageReceived(msg); 66 password_generation_->OnMessageReceived(msg);
55 } 67 }
56 68
57 void ExpectPasswordGenerationAvailable(const char* element_id, 69 void ExpectPasswordGenerationAvailable(const char* element_id,
58 bool available) { 70 bool available) {
59 WebDocument document = GetMainFrame()->document(); 71 WebDocument document = GetMainFrame()->document();
60 WebElement element = 72 WebElement element =
61 document.getElementById(WebString::fromUTF8(element_id)); 73 document.getElementById(WebString::fromUTF8(element_id));
62 ASSERT_FALSE(element.isNull()); 74 ASSERT_FALSE(element.isNull());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 "</FORM>"; 115 "</FORM>";
104 116
105 const char kInvalidActionAccountCreationFormHTML[] = 117 const char kInvalidActionAccountCreationFormHTML[] =
106 "<FORM name = 'blah' action = 'invalid'> " 118 "<FORM name = 'blah' action = 'invalid'> "
107 " <INPUT type = 'text' id = 'username'/> " 119 " <INPUT type = 'text' id = 'username'/> "
108 " <INPUT type = 'password' id = 'first_password'/> " 120 " <INPUT type = 'password' id = 'first_password'/> "
109 " <INPUT type = 'password' id = 'second_password'/> " 121 " <INPUT type = 'password' id = 'second_password'/> "
110 " <INPUT type = 'submit' value = 'LOGIN' />" 122 " <INPUT type = 'submit' value = 'LOGIN' />"
111 "</FORM>"; 123 "</FORM>";
112 124
125 const char kMultipleAccountCreationFormHTML[] =
126 "<FORM name = 'login' action = 'http://www.random.com/'> "
127 " <INPUT type = 'text' id = 'random'/> "
128 " <INPUT type = 'text' id = 'username'/> "
129 " <INPUT type = 'password' id = 'password'/> "
130 " <INPUT type = 'submit' value = 'LOGIN' />"
131 "</FORM>"
132 "<FORM name = 'signup' action = 'http://www.random.com/signup'> "
133 " <INPUT type = 'text' id = 'username'/> "
134 " <INPUT type = 'password' id = 'first_password' "
135 " autocomplete = 'off' size = 5/>"
136 " <INPUT type = 'password' id = 'second_password' size = 5/> "
137 " <INPUT type = 'text' id = 'address'/> "
138 " <INPUT type = 'submit' value = 'LOGIN' />"
139 "</FORM>";
140
113 const char ChangeDetectionScript[] = 141 const char ChangeDetectionScript[] =
114 "<script>" 142 "<script>"
115 " firstOnChangeCalled = false;" 143 " firstOnChangeCalled = false;"
116 " secondOnChangeCalled = false;" 144 " secondOnChangeCalled = false;"
117 " document.getElementById('first_password').onchange = function() {" 145 " document.getElementById('first_password').onchange = function() {"
118 " firstOnChangeCalled = true;" 146 " firstOnChangeCalled = true;"
119 " };" 147 " };"
120 " document.getElementById('second_password').onchange = function() {" 148 " document.getElementById('second_password').onchange = function() {"
121 " secondOnChangeCalled = true;" 149 " secondOnChangeCalled = true;"
122 " };" 150 " };"
123 "</script>"; 151 "</script>";
124 152
125 TEST_F(PasswordGenerationAgentTest, DetectionTest) { 153 TEST_F(PasswordGenerationAgentTest, DetectionTest) {
126 // Don't shown the icon for non account creation forms. 154 // Don't shown the icon for non account creation forms.
127 LoadHTML(kSigninFormHTML); 155 LoadHTML(kSigninFormHTML);
128 ExpectPasswordGenerationAvailable("password", false); 156 ExpectPasswordGenerationAvailable("password", false);
129 157
130 // We don't show the decoration yet because the feature isn't enabled. 158 // We don't show the decoration yet because the feature isn't enabled.
131 LoadHTML(kAccountCreationFormHTML); 159 LoadHTML(kAccountCreationFormHTML);
132 ExpectPasswordGenerationAvailable("first_password", false); 160 ExpectPasswordGenerationAvailable("first_password", false);
133 161
134 // Pretend like We have received message indicating site is not blacklisted, 162 // Pretend like We have received message indicating site is not blacklisted,
135 // and we have received message indicating the form is classified as 163 // and we have received message indicating the form is classified as
136 // ACCOUNT_CREATION_FORM form Autofill server. We should show the icon. 164 // ACCOUNT_CREATION_FORM form Autofill server. We should show the icon.
137 LoadHTML(kAccountCreationFormHTML); 165 LoadHTML(kAccountCreationFormHTML);
138 SetNotBlacklistedMessage(kAccountCreationFormHTML); 166 SetNotBlacklistedMessage(kAccountCreationFormHTML);
139 SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); 167 SetAccountCreationFormsDetectedMessage(0);
140 ExpectPasswordGenerationAvailable("first_password", true); 168 ExpectPasswordGenerationAvailable("first_password", true);
141 169
142 // Hidden fields are not treated differently. 170 // Hidden fields are not treated differently.
143 LoadHTML(kHiddenPasswordAccountCreationFormHTML); 171 LoadHTML(kHiddenPasswordAccountCreationFormHTML);
144 SetNotBlacklistedMessage(kHiddenPasswordAccountCreationFormHTML); 172 SetNotBlacklistedMessage(kHiddenPasswordAccountCreationFormHTML);
145 SetAccountCreationFormsDetectedMessage( 173 SetAccountCreationFormsDetectedMessage(0);
146 kHiddenPasswordAccountCreationFormHTML);
147 ExpectPasswordGenerationAvailable("first_password", true); 174 ExpectPasswordGenerationAvailable("first_password", true);
148 175
149 // This doesn't trigger because the form action is invalid. 176 // This doesn't trigger because the form action is invalid.
150 LoadHTML(kInvalidActionAccountCreationFormHTML); 177 LoadHTML(kInvalidActionAccountCreationFormHTML);
151 SetNotBlacklistedMessage(kInvalidActionAccountCreationFormHTML); 178 SetNotBlacklistedMessage(kInvalidActionAccountCreationFormHTML);
152 SetAccountCreationFormsDetectedMessage(kInvalidActionAccountCreationFormHTML); 179 SetAccountCreationFormsDetectedMessage(0);
153 ExpectPasswordGenerationAvailable("first_password", false); 180 ExpectPasswordGenerationAvailable("first_password", false);
154 } 181 }
155 182
156 TEST_F(PasswordGenerationAgentTest, FillTest) { 183 TEST_F(PasswordGenerationAgentTest, FillTest) {
157 // Make sure that we are enabled before loading HTML. 184 // Make sure that we are enabled before loading HTML.
158 std::string html = std::string(kAccountCreationFormHTML) + 185 std::string html = std::string(kAccountCreationFormHTML) +
159 ChangeDetectionScript; 186 ChangeDetectionScript;
160 LoadHTML(html.c_str()); 187 LoadHTML(html.c_str());
188 SetNotBlacklistedMessage(html.c_str());
189 SetAccountCreationFormsDetectedMessage(0);
161 190
162 WebDocument document = GetMainFrame()->document(); 191 WebDocument document = GetMainFrame()->document();
163 WebElement element = 192 WebElement element =
164 document.getElementById(WebString::fromUTF8("first_password")); 193 document.getElementById(WebString::fromUTF8("first_password"));
165 ASSERT_FALSE(element.isNull()); 194 ASSERT_FALSE(element.isNull());
166 WebInputElement first_password_element = element.to<WebInputElement>(); 195 WebInputElement first_password_element = element.to<WebInputElement>();
167 element = document.getElementById(WebString::fromUTF8("second_password")); 196 element = document.getElementById(WebString::fromUTF8("second_password"));
168 ASSERT_FALSE(element.isNull()); 197 ASSERT_FALSE(element.isNull());
169 WebInputElement second_password_element = element.to<WebInputElement>(); 198 WebInputElement second_password_element = element.to<WebInputElement>();
170 199
(...skipping 29 matching lines...) Expand all
200 // TODO(zysxqn): Change this back to the address element once Bug 90224 229 // TODO(zysxqn): Change this back to the address element once Bug 90224
201 // https://bugs.webkit.org/show_bug.cgi?id=90224 has been fixed. 230 // https://bugs.webkit.org/show_bug.cgi?id=90224 has been fixed.
202 element = document.getElementById(WebString::fromUTF8("first_password")); 231 element = document.getElementById(WebString::fromUTF8("first_password"));
203 ASSERT_FALSE(element.isNull()); 232 ASSERT_FALSE(element.isNull());
204 EXPECT_EQ(element, document.focusedElement()); 233 EXPECT_EQ(element, document.focusedElement());
205 } 234 }
206 235
207 TEST_F(PasswordGenerationAgentTest, EditingTest) { 236 TEST_F(PasswordGenerationAgentTest, EditingTest) {
208 LoadHTML(kAccountCreationFormHTML); 237 LoadHTML(kAccountCreationFormHTML);
209 SetNotBlacklistedMessage(kAccountCreationFormHTML); 238 SetNotBlacklistedMessage(kAccountCreationFormHTML);
210 SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); 239 SetAccountCreationFormsDetectedMessage(0);
211 240
212 WebDocument document = GetMainFrame()->document(); 241 WebDocument document = GetMainFrame()->document();
213 WebElement element = 242 WebElement element =
214 document.getElementById(WebString::fromUTF8("first_password")); 243 document.getElementById(WebString::fromUTF8("first_password"));
215 ASSERT_FALSE(element.isNull()); 244 ASSERT_FALSE(element.isNull());
216 WebInputElement first_password_element = element.to<WebInputElement>(); 245 WebInputElement first_password_element = element.to<WebInputElement>();
217 element = document.getElementById(WebString::fromUTF8("second_password")); 246 element = document.getElementById(WebString::fromUTF8("second_password"));
218 ASSERT_FALSE(element.isNull()); 247 ASSERT_FALSE(element.isNull());
219 WebInputElement second_password_element = element.to<WebInputElement>(); 248 WebInputElement second_password_element = element.to<WebInputElement>();
220 249
(...skipping 28 matching lines...) Expand all
249 // processed. 278 // processed.
250 base::MessageLoop::current()->RunUntilIdle(); 279 base::MessageLoop::current()->RunUntilIdle();
251 EXPECT_EQ(empty_password, first_password_element.value()); 280 EXPECT_EQ(empty_password, first_password_element.value());
252 EXPECT_EQ(empty_password, second_password_element.value()); 281 EXPECT_EQ(empty_password, second_password_element.value());
253 } 282 }
254 283
255 TEST_F(PasswordGenerationAgentTest, BlacklistedTest) { 284 TEST_F(PasswordGenerationAgentTest, BlacklistedTest) {
256 // Did not receive not blacklisted message. Don't show password generation 285 // Did not receive not blacklisted message. Don't show password generation
257 // icon. 286 // icon.
258 LoadHTML(kAccountCreationFormHTML); 287 LoadHTML(kAccountCreationFormHTML);
259 SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); 288 SetAccountCreationFormsDetectedMessage(0);
260 ExpectPasswordGenerationAvailable("first_password", false); 289 ExpectPasswordGenerationAvailable("first_password", false);
261 290
262 // Receive one not blacklisted message for non account creation form. Don't 291 // Receive one not blacklisted message for non account creation form. Don't
263 // show password generation icon. 292 // show password generation icon.
264 LoadHTML(kAccountCreationFormHTML); 293 LoadHTML(kAccountCreationFormHTML);
265 SetNotBlacklistedMessage(kSigninFormHTML); 294 SetNotBlacklistedMessage(kSigninFormHTML);
266 SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); 295 SetAccountCreationFormsDetectedMessage(0);
267 ExpectPasswordGenerationAvailable("first_password", false); 296 ExpectPasswordGenerationAvailable("first_password", false);
268 297
269 // Receive one not blackliste message for account creation form. Show password 298 // Receive one not blackliste message for account creation form. Show password
270 // generation icon. 299 // generation icon.
271 LoadHTML(kAccountCreationFormHTML); 300 LoadHTML(kAccountCreationFormHTML);
272 SetNotBlacklistedMessage(kAccountCreationFormHTML); 301 SetNotBlacklistedMessage(kAccountCreationFormHTML);
273 SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); 302 SetAccountCreationFormsDetectedMessage(0);
274 ExpectPasswordGenerationAvailable("first_password", true); 303 ExpectPasswordGenerationAvailable("first_password", true);
275 304
276 // Receive two not blacklisted messages, one is for account creation form and 305 // Receive two not blacklisted messages, one is for account creation form and
277 // the other is not. Show password generation icon. 306 // the other is not. Show password generation icon.
278 LoadHTML(kAccountCreationFormHTML); 307 LoadHTML(kAccountCreationFormHTML);
279 SetNotBlacklistedMessage(kAccountCreationFormHTML); 308 SetNotBlacklistedMessage(kAccountCreationFormHTML);
280 SetNotBlacklistedMessage(kSigninFormHTML); 309 SetNotBlacklistedMessage(kSigninFormHTML);
281 SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); 310 SetAccountCreationFormsDetectedMessage(0);
282 ExpectPasswordGenerationAvailable("first_password", true); 311 ExpectPasswordGenerationAvailable("first_password", true);
283 } 312 }
284 313
285 TEST_F(PasswordGenerationAgentTest, AccountCreationFormsDetectedTest) { 314 TEST_F(PasswordGenerationAgentTest, AccountCreationFormsDetectedTest) {
286 // Did not receive account creation forms detected messege. Don't show 315 // Did not receive account creation forms detected messege. Don't show
287 // password generation icon. 316 // password generation icon.
288 LoadHTML(kAccountCreationFormHTML); 317 LoadHTML(kAccountCreationFormHTML);
289 SetNotBlacklistedMessage(kAccountCreationFormHTML); 318 SetNotBlacklistedMessage(kAccountCreationFormHTML);
290 ExpectPasswordGenerationAvailable("first_password", false); 319 ExpectPasswordGenerationAvailable("first_password", false);
291 320
292 // Receive the account creation forms detected message. Show password 321 // Receive the account creation forms detected message. Show password
293 // generation icon. 322 // generation icon.
294 LoadHTML(kAccountCreationFormHTML); 323 LoadHTML(kAccountCreationFormHTML);
295 SetNotBlacklistedMessage(kAccountCreationFormHTML); 324 SetNotBlacklistedMessage(kAccountCreationFormHTML);
296 SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); 325 SetAccountCreationFormsDetectedMessage(0);
297 ExpectPasswordGenerationAvailable("first_password", true); 326 ExpectPasswordGenerationAvailable("first_password", true);
298 } 327 }
299 328
300 TEST_F(PasswordGenerationAgentTest, MaximumOfferSize) { 329 TEST_F(PasswordGenerationAgentTest, MaximumOfferSize) {
301 base::HistogramTester histogram_tester; 330 base::HistogramTester histogram_tester;
302 331
303 LoadHTML(kAccountCreationFormHTML); 332 LoadHTML(kAccountCreationFormHTML);
304 SetNotBlacklistedMessage(kAccountCreationFormHTML); 333 SetNotBlacklistedMessage(kAccountCreationFormHTML);
305 SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); 334 SetAccountCreationFormsDetectedMessage(0);
306 ExpectPasswordGenerationAvailable("first_password", true); 335 ExpectPasswordGenerationAvailable("first_password", true);
307 336
308 WebDocument document = GetMainFrame()->document(); 337 WebDocument document = GetMainFrame()->document();
309 WebElement element = 338 WebElement element =
310 document.getElementById(WebString::fromUTF8("first_password")); 339 document.getElementById(WebString::fromUTF8("first_password"));
311 ASSERT_FALSE(element.isNull()); 340 ASSERT_FALSE(element.isNull());
312 WebInputElement first_password_element = element.to<WebInputElement>(); 341 WebInputElement first_password_element = element.to<WebInputElement>();
313 342
314 // Make a password just under maximum offer size. 343 // Make a password just under maximum offer size.
315 first_password_element.setValue( 344 first_password_element.setValue(
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 408
380 histogram_tester.ExpectBucketCount( 409 histogram_tester.ExpectBucketCount(
381 "PasswordGeneration.Event", 410 "PasswordGeneration.Event",
382 autofill::password_generation::GENERATION_POPUP_SHOWN, 411 autofill::password_generation::GENERATION_POPUP_SHOWN,
383 1); 412 1);
384 } 413 }
385 414
386 TEST_F(PasswordGenerationAgentTest, DynamicFormTest) { 415 TEST_F(PasswordGenerationAgentTest, DynamicFormTest) {
387 LoadHTML(kSigninFormHTML); 416 LoadHTML(kSigninFormHTML);
388 SetNotBlacklistedMessage(kSigninFormHTML); 417 SetNotBlacklistedMessage(kSigninFormHTML);
389 SetAccountCreationFormsDetectedMessage(kSigninFormHTML);
390 418
391 ExecuteJavaScript( 419 ExecuteJavaScript(
392 "var form = document.createElement('form');" 420 "var form = document.createElement('form');"
393 "var username = document.createElement('input');" 421 "var username = document.createElement('input');"
394 "username.type = 'text';" 422 "username.type = 'text';"
395 "username.id = 'dynamic_username';" 423 "username.id = 'dynamic_username';"
396 "var first_password = document.createElement('input');" 424 "var first_password = document.createElement('input');"
397 "first_password.type = 'password';" 425 "first_password.type = 'password';"
398 "first_password.id = 'first_password';" 426 "first_password.id = 'first_password';"
399 "first_password.name = 'first_password';" 427 "first_password.name = 'first_password';"
400 "var second_password = document.createElement('input');" 428 "var second_password = document.createElement('input');"
401 "second_password.type = 'password';" 429 "second_password.type = 'password';"
402 "second_password.id = 'second_password';" 430 "second_password.id = 'second_password';"
403 "second_password.name = 'second_password';" 431 "second_password.name = 'second_password';"
404 "form.appendChild(username);" 432 "form.appendChild(username);"
405 "form.appendChild(first_password);" 433 "form.appendChild(first_password);"
406 "form.appendChild(second_password);" 434 "form.appendChild(second_password);"
407 "document.body.appendChild(form);"); 435 "document.body.appendChild(form);");
408 ProcessPendingMessages(); 436 ProcessPendingMessages();
437
438 // This needs to come after the DOM has been modified.
439 SetAccountCreationFormsDetectedMessage(1);
440
409 // TODO(gcasto): I'm slighty worried about flakes in this test where 441 // TODO(gcasto): I'm slighty worried about flakes in this test where
410 // didAssociateFormControls() isn't called. If this turns out to be a problem 442 // didAssociateFormControls() isn't called. If this turns out to be a problem
411 // adding a call to OnDynamicFormsSeen(GetMainFrame()) will fix it, though 443 // adding a call to OnDynamicFormsSeen(GetMainFrame()) will fix it, though
412 // it will weaken the test. 444 // it will weaken the test.
413 ExpectPasswordGenerationAvailable("first_password", true); 445 ExpectPasswordGenerationAvailable("first_password", true);
414 } 446 }
415 447
448 TEST_F(PasswordGenerationAgentTest, MultiplePasswordFormsTest) {
449 // If two forms on the page looks like possible account creation forms, make
450 // sure to trigger on the one that is specified from Autofill.
451 LoadHTML(kMultipleAccountCreationFormHTML);
452 SetNotBlacklistedMessage(kMultipleAccountCreationFormHTML);
453
454 // Should trigger on the second form.
455 SetAccountCreationFormsDetectedMessage(1);
456
457 ExpectPasswordGenerationAvailable("password", false);
458
459 // TODO(gcasto): Enable this check once we examine multiple heuristic matches.
460 //ExpectPasswordGenerationAvailable("first_password", true);
461 }
462
416 } // namespace autofill 463 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | components/autofill/content/renderer/password_generation_agent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698