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

Side by Side Diff: components/autofill/content/renderer/password_form_conversion_utils_browsertest.cc

Issue 2985373002: Revert of [Password Manager] Send username correction votes (Closed)
Patch Set: Created 3 years, 4 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
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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 // PasswordFormBuilder below, plus the corresponding expectations. 291 // PasswordFormBuilder below, plus the corresponding expectations.
292 struct TestCase { 292 struct TestCase {
293 const char* autocomplete[3]; 293 const char* autocomplete[3];
294 const char* expected_username_element; 294 const char* expected_username_element;
295 const char* expected_username_value; 295 const char* expected_username_value;
296 const char* expected_other_possible_usernames; 296 const char* expected_other_possible_usernames;
297 } cases[] = { 297 } cases[] = {
298 // When no elements are marked with autocomplete='username', the text-type 298 // When no elements are marked with autocomplete='username', the text-type
299 // input field before the first password element should get selected as 299 // input field before the first password element should get selected as
300 // the username, and the rest should be marked as alternatives. 300 // the username, and the rest should be marked as alternatives.
301 {{nullptr, nullptr, nullptr}, 301 {{nullptr, nullptr, nullptr}, "username2", "William", "John+Smith"},
302 "username2",
303 "William",
304 "John+username1, Smith+username3"},
305 // When a sole element is marked with autocomplete='username', it should 302 // When a sole element is marked with autocomplete='username', it should
306 // be treated as the username for sure, with no other_possible_usernames. 303 // be treated as the username for sure, with no other_possible_usernames.
307 {{"username", nullptr, nullptr}, "username1", "John", ""}, 304 {{"username", nullptr, nullptr}, "username1", "John", ""},
308 {{nullptr, "username", nullptr}, "username2", "William", ""}, 305 {{nullptr, "username", nullptr}, "username2", "William", ""},
309 {{nullptr, nullptr, "username"}, "username3", "Smith", ""}, 306 {{nullptr, nullptr, "username"}, "username3", "Smith", ""},
310 // When >=2 elements have the attribute, the first should be selected as 307 // When >=2 elements have the attribute, the first should be selected as
311 // the username, and the rest should go to other_possible_usernames. 308 // the username, and the rest should go to other_possible_usernames.
312 {{"username", "username", nullptr}, 309 {{"username", "username", nullptr}, "username1", "John", "William"},
313 "username1", 310 {{nullptr, "username", "username"}, "username2", "William", "Smith"},
314 "John", 311 {{"username", nullptr, "username"}, "username1", "John", "Smith"},
315 "William+username2"},
316 {{nullptr, "username", "username"},
317 "username2",
318 "William",
319 "Smith+username3"},
320 {{"username", nullptr, "username"},
321 "username1",
322 "John",
323 "Smith+username3"},
324 {{"username", "username", "username"}, 312 {{"username", "username", "username"},
325 "username1", 313 "username1",
326 "John", 314 "John",
327 "William+username2, Smith+username3"}, 315 "William+Smith"},
328 // When there is an empty autocomplete attribute (i.e. autocomplete=""), 316 // When there is an empty autocomplete attribute (i.e. autocomplete=""),
329 // it should have the same effect as having no attribute whatsoever. 317 // it should have the same effect as having no attribute whatsoever.
330 {{"", "", ""}, "username2", "William", "John+username1, Smith+username3"}, 318 {{"", "", ""}, "username2", "William", "John+Smith"},
331 {{"", "", "username"}, "username3", "Smith", ""}, 319 {{"", "", "username"}, "username3", "Smith", ""},
332 {{"username", "", "username"}, "username1", "John", "Smith+username3"}, 320 {{"username", "", "username"}, "username1", "John", "Smith"},
333 // It should not matter if attribute values are upper or mixed case. 321 // It should not matter if attribute values are upper or mixed case.
334 {{"USERNAME", nullptr, "uSeRNaMe"}, 322 {{"USERNAME", nullptr, "uSeRNaMe"}, "username1", "John", "Smith"},
335 "username1", 323 {{"uSeRNaMe", nullptr, "USERNAME"}, "username1", "John", "Smith"}};
336 "John",
337 "Smith+username3"},
338 {{"uSeRNaMe", nullptr, "USERNAME"},
339 "username1",
340 "John",
341 "Smith+username3"}};
342 324
343 for (size_t i = 0; i < arraysize(cases); ++i) { 325 for (size_t i = 0; i < arraysize(cases); ++i) {
344 for (size_t nonempty_username_fields = 0; nonempty_username_fields < 2; 326 for (size_t nonempty_username_fields = 0; nonempty_username_fields < 2;
345 ++nonempty_username_fields) { 327 ++nonempty_username_fields) {
346 SCOPED_TRACE(testing::Message() 328 SCOPED_TRACE(testing::Message()
347 << "Iteration " << i << " " 329 << "Iteration " << i << " "
348 << (nonempty_username_fields ? "nonempty" : "empty")); 330 << (nonempty_username_fields ? "nonempty" : "empty"));
349 331
350 // Repeat each test once with empty, and once with non-empty usernames. 332 // Repeat each test once with empty, and once with non-empty usernames.
351 // In the former case, no empty other_possible_usernames should be saved. 333 // In the former case, no empty other_possible_usernames should be saved.
(...skipping 19 matching lines...) Expand all
371 LoadHTMLAndConvertForm(html, nullptr, false); 353 LoadHTMLAndConvertForm(html, nullptr, false);
372 ASSERT_TRUE(password_form); 354 ASSERT_TRUE(password_form);
373 355
374 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_username_element), 356 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_username_element),
375 password_form->username_element); 357 password_form->username_element);
376 358
377 if (nonempty_username_fields) { 359 if (nonempty_username_fields) {
378 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_username_value), 360 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_username_value),
379 password_form->username_value); 361 password_form->username_value);
380 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_other_possible_usernames), 362 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_other_possible_usernames),
381 OtherPossibleUsernamesToString( 363 base::JoinString(password_form->other_possible_usernames,
382 password_form->other_possible_usernames)); 364 base::ASCIIToUTF16("+")));
383 } else { 365 } else {
384 EXPECT_TRUE(password_form->username_value.empty()); 366 EXPECT_TRUE(password_form->username_value.empty());
385 EXPECT_TRUE(password_form->other_possible_usernames.empty()); 367 EXPECT_TRUE(password_form->other_possible_usernames.empty());
386 } 368 }
387 369
388 // Do a basic sanity check that we are still having a password field. 370 // Do a basic sanity check that we are still having a password field.
389 EXPECT_EQ(base::UTF8ToUTF16("password"), password_form->password_element); 371 EXPECT_EQ(base::UTF8ToUTF16("password"), password_form->password_element);
390 EXPECT_EQ(base::UTF8ToUTF16("secret"), password_form->password_value); 372 EXPECT_EQ(base::UTF8ToUTF16("secret"), password_form->password_value);
391 } 373 }
392 } 374 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_element), 420 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_element),
439 password_form->new_password_element); 421 password_form->new_password_element);
440 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_value), 422 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_value),
441 password_form->new_password_value); 423 password_form->new_password_value);
442 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_confirmation_element), 424 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_confirmation_element),
443 password_form->confirmation_password_element); 425 password_form->confirmation_password_element);
444 426
445 // Do a basic sanity check that we are still selecting the right username. 427 // Do a basic sanity check that we are still selecting the right username.
446 EXPECT_EQ(base::UTF8ToUTF16("username1"), password_form->username_element); 428 EXPECT_EQ(base::UTF8ToUTF16("username1"), password_form->username_element);
447 EXPECT_EQ(base::UTF8ToUTF16("William"), password_form->username_value); 429 EXPECT_EQ(base::UTF8ToUTF16("William"), password_form->username_value);
448 EXPECT_THAT( 430 EXPECT_THAT(password_form->other_possible_usernames,
449 password_form->other_possible_usernames, 431 testing::ElementsAre(base::UTF8ToUTF16("Smith")));
450 testing::ElementsAre(PossibleUsernamePair(
451 base::UTF8ToUTF16("Smith"), base::UTF8ToUTF16("username2"))));
452 } 432 }
453 } 433 }
454 434
455 TEST_F(MAYBE_PasswordFormConversionUtilsTest, IdentifyingThreePasswordFields) { 435 TEST_F(MAYBE_PasswordFormConversionUtilsTest, IdentifyingThreePasswordFields) {
456 // Each test case consists of a set of parameters to be plugged into the 436 // Each test case consists of a set of parameters to be plugged into the
457 // PasswordFormBuilder below, plus the corresponding expectations. 437 // PasswordFormBuilder below, plus the corresponding expectations.
458 struct TestCase { 438 struct TestCase {
459 const char* password_values[3]; 439 const char* password_values[3];
460 const char* expected_password_element; 440 const char* expected_password_element;
461 const char* expected_password_value; 441 const char* expected_password_value;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_element), 489 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_element),
510 password_form->new_password_element); 490 password_form->new_password_element);
511 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_value), 491 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_value),
512 password_form->new_password_value); 492 password_form->new_password_value);
513 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_confirmation_element), 493 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_confirmation_element),
514 password_form->confirmation_password_element); 494 password_form->confirmation_password_element);
515 495
516 // Do a basic sanity check that we are still selecting the right username. 496 // Do a basic sanity check that we are still selecting the right username.
517 EXPECT_EQ(base::UTF8ToUTF16("username1"), password_form->username_element); 497 EXPECT_EQ(base::UTF8ToUTF16("username1"), password_form->username_element);
518 EXPECT_EQ(base::UTF8ToUTF16("William"), password_form->username_value); 498 EXPECT_EQ(base::UTF8ToUTF16("William"), password_form->username_value);
519 EXPECT_THAT( 499 EXPECT_THAT(password_form->other_possible_usernames,
520 password_form->other_possible_usernames, 500 testing::ElementsAre(base::UTF8ToUTF16("Smith")));
521 testing::ElementsAre(PossibleUsernamePair(
522 base::UTF8ToUTF16("Smith"), base::UTF8ToUTF16("username2"))));
523 } 501 }
524 } 502 }
525 503
526 TEST_F(MAYBE_PasswordFormConversionUtilsTest, 504 TEST_F(MAYBE_PasswordFormConversionUtilsTest,
527 IdentifyingPasswordFieldsWithAutocompleteAttributes) { 505 IdentifyingPasswordFieldsWithAutocompleteAttributes) {
528 // Each test case consists of a set of parameters to be plugged into the 506 // Each test case consists of a set of parameters to be plugged into the
529 // PasswordFormBuilder below, plus the corresponding expectations. 507 // PasswordFormBuilder below, plus the corresponding expectations.
530 struct TestCase { 508 struct TestCase {
531 const char* autocomplete[3]; 509 const char* autocomplete[3];
532 const char* expected_password_element; 510 const char* expected_password_element;
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 ASSERT_TRUE(password_form); 841 ASSERT_TRUE(password_form);
864 842
865 // In the absence of username autocomplete attributes, the username should 843 // In the absence of username autocomplete attributes, the username should
866 // be the text input field just before 'current-password' or before 844 // be the text input field just before 'current-password' or before
867 // 'new-password', if there is no 'current-password'. 845 // 'new-password', if there is no 'current-password'.
868 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_username_element), 846 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_username_element),
869 password_form->username_element); 847 password_form->username_element);
870 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_username_value), 848 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_username_value),
871 password_form->username_value); 849 password_form->username_value);
872 if (strcmp(cases[i].expected_username_value, "William") == 0) { 850 if (strcmp(cases[i].expected_username_value, "William") == 0) {
873 EXPECT_THAT( 851 EXPECT_THAT(password_form->other_possible_usernames,
874 password_form->other_possible_usernames, 852 testing::ElementsAre(base::UTF8ToUTF16("Smith")));
875 testing::ElementsAre(PossibleUsernamePair(
876 base::UTF8ToUTF16("Smith"), base::UTF8ToUTF16("username2"))));
877 } else { 853 } else {
878 EXPECT_THAT( 854 EXPECT_THAT(password_form->other_possible_usernames,
879 password_form->other_possible_usernames, 855 testing::ElementsAre(base::UTF8ToUTF16("William")));
880 testing::ElementsAre(PossibleUsernamePair(
881 base::UTF8ToUTF16("William"), base::UTF8ToUTF16("username1"))));
882 } 856 }
883 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_password_element), 857 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_password_element),
884 password_form->password_element); 858 password_form->password_element);
885 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_password_value), 859 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_password_value),
886 password_form->password_value); 860 password_form->password_value);
887 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_element), 861 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_element),
888 password_form->new_password_element); 862 password_form->new_password_element);
889 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_value), 863 EXPECT_EQ(base::UTF8ToUTF16(cases[i].expected_new_password_value),
890 password_form->new_password_value); 864 password_form->new_password_value);
891 EXPECT_EQ(cases[i].expected_new_password_marked_by_site, 865 EXPECT_EQ(cases[i].expected_new_password_marked_by_site,
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
1499 TEST_F(MAYBE_PasswordFormConversionUtilsTest, TooManyFieldsToParseForm) { 1473 TEST_F(MAYBE_PasswordFormConversionUtilsTest, TooManyFieldsToParseForm) {
1500 PasswordFormBuilder builder(kTestFormActionURL); 1474 PasswordFormBuilder builder(kTestFormActionURL);
1501 for (size_t i = 0; i < form_util::kMaxParseableFields + 1; ++i) 1475 for (size_t i = 0; i < form_util::kMaxParseableFields + 1; ++i)
1502 builder.AddTextField("id", "value", "autocomplete"); 1476 builder.AddTextField("id", "value", "autocomplete");
1503 std::unique_ptr<PasswordForm> password_form = 1477 std::unique_ptr<PasswordForm> password_form =
1504 LoadHTMLAndConvertForm(builder.ProduceHTML(), nullptr, false); 1478 LoadHTMLAndConvertForm(builder.ProduceHTML(), nullptr, false);
1505 EXPECT_FALSE(password_form); 1479 EXPECT_FALSE(password_form);
1506 } 1480 }
1507 1481
1508 } // namespace autofill 1482 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698