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

Side by Side Diff: chrome/browser/webdata/web_database_unittest.cc

Issue 507053: Differentiate between ADD and CHANGED when adding new autofill entries. (Closed)
Patch Set: Created 11 years 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 | « chrome/browser/webdata/web_database.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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/file_util.h" 5 #include "base/file_util.h"
6 #include "base/path_service.h" 6 #include "base/path_service.h"
7 #include "base/stl_util-inl.h" 7 #include "base/stl_util-inl.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 case AutofillChange::REMOVE: { 42 case AutofillChange::REMOVE: {
43 os << "REMOVE"; 43 os << "REMOVE";
44 break; 44 break;
45 } 45 }
46 } 46 }
47 return os << " " << change.key(); 47 return os << " " << change.key();
48 } 48 }
49 49
50 class WebDatabaseTest : public testing::Test { 50 class WebDatabaseTest : public testing::Test {
51 protected: 51 protected:
52 52 typedef std::vector<AutofillChange> AutofillChangeList;
53 virtual void SetUp() { 53 virtual void SetUp() {
54 PathService::Get(chrome::DIR_TEST_DATA, &file_); 54 PathService::Get(chrome::DIR_TEST_DATA, &file_);
55 const std::string test_db = "TestWebDatabase" + 55 const std::string test_db = "TestWebDatabase" +
56 Int64ToString(base::Time::Now().ToInternalValue()) + 56 Int64ToString(base::Time::Now().ToInternalValue()) +
57 ".db"; 57 ".db";
58 file_ = file_.AppendASCII(test_db); 58 file_ = file_.AppendASCII(test_db);
59 file_util::Delete(file_, false); 59 file_util::Delete(file_, false);
60 } 60 }
61 61
62 virtual void TearDown() { 62 virtual void TearDown() {
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 410
411 TEST_F(WebDatabaseTest, Autofill) { 411 TEST_F(WebDatabaseTest, Autofill) {
412 WebDatabase db; 412 WebDatabase db;
413 413
414 ASSERT_EQ(sql::INIT_OK, db.Init(file_)); 414 ASSERT_EQ(sql::INIT_OK, db.Init(file_));
415 415
416 Time t1 = Time::Now(); 416 Time t1 = Time::Now();
417 417
418 // Simulate the submission of a handful of entries in a field called "Name", 418 // Simulate the submission of a handful of entries in a field called "Name",
419 // some more often than others. 419 // some more often than others.
420 AutofillChangeList changes;
420 EXPECT_TRUE(db.AddFormFieldValue( 421 EXPECT_TRUE(db.AddFormFieldValue(
421 FormField(string16(), 422 FormField(string16(),
422 ASCIIToUTF16("Name"), 423 ASCIIToUTF16("Name"),
423 string16(), 424 string16(),
424 ASCIIToUTF16("Superman")))); 425 ASCIIToUTF16("Superman")),
426 &changes));
425 std::vector<string16> v; 427 std::vector<string16> v;
426 for (int i = 0; i < 5; i++) { 428 for (int i = 0; i < 5; i++) {
427 EXPECT_TRUE(db.AddFormFieldValue( 429 EXPECT_TRUE(db.AddFormFieldValue(
428 FormField(string16(), 430 FormField(string16(),
429 ASCIIToUTF16("Name"), 431 ASCIIToUTF16("Name"),
430 string16(), 432 string16(),
431 ASCIIToUTF16("Clark Kent")))); 433 ASCIIToUTF16("Clark Kent")),
434 &changes));
432 } 435 }
433 for (int i = 0; i < 3; i++) { 436 for (int i = 0; i < 3; i++) {
434 EXPECT_TRUE(db.AddFormFieldValue( 437 EXPECT_TRUE(db.AddFormFieldValue(
435 FormField(string16(), 438 FormField(string16(),
436 ASCIIToUTF16("Name"), 439 ASCIIToUTF16("Name"),
437 string16(), 440 string16(),
438 ASCIIToUTF16("Clark Sutter")))); 441 ASCIIToUTF16("Clark Sutter")),
442 &changes));
439 } 443 }
440 for (int i = 0; i < 2; i++) { 444 for (int i = 0; i < 2; i++) {
441 EXPECT_TRUE(db.AddFormFieldValue( 445 EXPECT_TRUE(db.AddFormFieldValue(
442 FormField(string16(), 446 FormField(string16(),
443 ASCIIToUTF16("Favorite Color"), 447 ASCIIToUTF16("Favorite Color"),
444 string16(), 448 string16(),
445 ASCIIToUTF16("Green")))); 449 ASCIIToUTF16("Green")),
450 &changes));
446 } 451 }
447 452
448 int count = 0; 453 int count = 0;
449 int64 pair_id = 0; 454 int64 pair_id = 0;
450 455
451 // We have added the name Clark Kent 5 times, so count should be 5 and pair_id 456 // We have added the name Clark Kent 5 times, so count should be 5 and pair_id
452 // should be somthing non-zero. 457 // should be somthing non-zero.
453 EXPECT_TRUE(db.GetIDAndCountOfFormElement( 458 EXPECT_TRUE(db.GetIDAndCountOfFormElement(
454 FormField(string16(), 459 FormField(string16(),
455 ASCIIToUTF16("Name"), 460 ASCIIToUTF16("Name"),
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 EXPECT_TRUE(db.GetFormValuesForElementName( 509 EXPECT_TRUE(db.GetFormValuesForElementName(
505 ASCIIToUTF16("Name"), ASCIIToUTF16("cLa"), &v, 6)); 510 ASCIIToUTF16("Name"), ASCIIToUTF16("cLa"), &v, 6));
506 EXPECT_EQ(2U, v.size()); 511 EXPECT_EQ(2U, v.size());
507 if (v.size() == 2) { 512 if (v.size() == 2) {
508 EXPECT_EQ(ASCIIToUTF16("Clark Kent"), v[0]); 513 EXPECT_EQ(ASCIIToUTF16("Clark Kent"), v[0]);
509 EXPECT_EQ(ASCIIToUTF16("Clark Sutter"), v[1]); 514 EXPECT_EQ(ASCIIToUTF16("Clark Sutter"), v[1]);
510 } 515 }
511 516
512 // Removing all elements since the beginning of this function should remove 517 // Removing all elements since the beginning of this function should remove
513 // everything from the database. 518 // everything from the database.
514 std::vector<AutofillChange> changes; 519 changes.clear();
515 EXPECT_TRUE(db.RemoveFormElementsAddedBetween(t1, Time(), &changes)); 520 EXPECT_TRUE(db.RemoveFormElementsAddedBetween(t1, Time(), &changes));
516 521
517 const AutofillChange expected_changes[] = { 522 const AutofillChange expected_changes[] = {
518 AutofillChange(AutofillChange::REMOVE, 523 AutofillChange(AutofillChange::REMOVE,
519 AutofillKey(ASCIIToUTF16("Name"), 524 AutofillKey(ASCIIToUTF16("Name"),
520 ASCIIToUTF16("Superman"))), 525 ASCIIToUTF16("Superman"))),
521 AutofillChange(AutofillChange::REMOVE, 526 AutofillChange(AutofillChange::REMOVE,
522 AutofillKey(ASCIIToUTF16("Name"), 527 AutofillKey(ASCIIToUTF16("Name"),
523 ASCIIToUTF16("Clark Kent"))), 528 ASCIIToUTF16("Clark Kent"))),
524 AutofillChange(AutofillChange::REMOVE, 529 AutofillChange(AutofillChange::REMOVE,
(...skipping 18 matching lines...) Expand all
543 548
544 EXPECT_TRUE( 549 EXPECT_TRUE(
545 db.GetFormValuesForElementName(ASCIIToUTF16("Name"), string16(), &v, 6)); 550 db.GetFormValuesForElementName(ASCIIToUTF16("Name"), string16(), &v, 6));
546 EXPECT_EQ(0U, v.size()); 551 EXPECT_EQ(0U, v.size());
547 552
548 // Now add some values with empty strings. 553 // Now add some values with empty strings.
549 const string16 kValue = ASCIIToUTF16(" toto "); 554 const string16 kValue = ASCIIToUTF16(" toto ");
550 EXPECT_TRUE(db.AddFormFieldValue(FormField(string16(), 555 EXPECT_TRUE(db.AddFormFieldValue(FormField(string16(),
551 ASCIIToUTF16("blank"), 556 ASCIIToUTF16("blank"),
552 string16(), 557 string16(),
553 string16()))); 558 string16()),
559 &changes));
554 EXPECT_TRUE(db.AddFormFieldValue(FormField(string16(), 560 EXPECT_TRUE(db.AddFormFieldValue(FormField(string16(),
555 ASCIIToUTF16("blank"), 561 ASCIIToUTF16("blank"),
556 string16(), 562 string16(),
557 ASCIIToUTF16(" ")))); 563 ASCIIToUTF16(" ")),
564 &changes));
558 EXPECT_TRUE(db.AddFormFieldValue(FormField(string16(), 565 EXPECT_TRUE(db.AddFormFieldValue(FormField(string16(),
559 ASCIIToUTF16("blank"), 566 ASCIIToUTF16("blank"),
560 string16(), 567 string16(),
561 ASCIIToUTF16(" ")))); 568 ASCIIToUTF16(" ")),
569 &changes));
562 EXPECT_TRUE(db.AddFormFieldValue(FormField(string16(), 570 EXPECT_TRUE(db.AddFormFieldValue(FormField(string16(),
563 ASCIIToUTF16("blank"), 571 ASCIIToUTF16("blank"),
564 string16(), 572 string16(),
565 kValue))); 573 kValue),
574 &changes));
566 575
567 // They should be stored normally as the DB layer does not check for empty 576 // They should be stored normally as the DB layer does not check for empty
568 // values. 577 // values.
569 v.clear(); 578 v.clear();
570 EXPECT_TRUE(db.GetFormValuesForElementName( 579 EXPECT_TRUE(db.GetFormValuesForElementName(
571 ASCIIToUTF16("blank"), string16(), &v, 10)); 580 ASCIIToUTF16("blank"), string16(), &v, 10));
572 EXPECT_EQ(4U, v.size()); 581 EXPECT_EQ(4U, v.size());
573 582
574 // Now we'll check that ClearAutofillEmptyValueElements() works as expected. 583 // Now we'll check that ClearAutofillEmptyValueElements() works as expected.
575 db.ClearAutofillEmptyValueElements(); 584 db.ClearAutofillEmptyValueElements();
576 585
577 v.clear(); 586 v.clear();
578 EXPECT_TRUE(db.GetFormValuesForElementName(ASCIIToUTF16("blank"), 587 EXPECT_TRUE(db.GetFormValuesForElementName(ASCIIToUTF16("blank"),
579 string16(), &v, 10)); 588 string16(), &v, 10));
580 ASSERT_EQ(1U, v.size()); 589 ASSERT_EQ(1U, v.size());
581 590
582 EXPECT_EQ(kValue, v[0]); 591 EXPECT_EQ(kValue, v[0]);
583 } 592 }
584 593
585 TEST_F(WebDatabaseTest, Autofill_RemoveBetweenChanges) { 594 TEST_F(WebDatabaseTest, Autofill_RemoveBetweenChanges) {
586 WebDatabase db; 595 WebDatabase db;
587 ASSERT_EQ(sql::INIT_OK, db.Init(file_)); 596 ASSERT_EQ(sql::INIT_OK, db.Init(file_));
588 597
589 TimeDelta one_day(TimeDelta::FromDays(1)); 598 TimeDelta one_day(TimeDelta::FromDays(1));
590 Time t1 = Time::Now(); 599 Time t1 = Time::Now();
591 Time t2 = t1 + one_day; 600 Time t2 = t1 + one_day;
592 601
602 AutofillChangeList changes;
593 EXPECT_TRUE(db.AddFormFieldValueTime( 603 EXPECT_TRUE(db.AddFormFieldValueTime(
594 FormField(string16(), 604 FormField(string16(),
595 ASCIIToUTF16("Name"), 605 ASCIIToUTF16("Name"),
596 string16(), 606 string16(),
597 ASCIIToUTF16("Superman")), 607 ASCIIToUTF16("Superman")),
608 &changes,
598 t1)); 609 t1));
599 EXPECT_TRUE(db.AddFormFieldValueTime( 610 EXPECT_TRUE(db.AddFormFieldValueTime(
600 FormField(string16(), 611 FormField(string16(),
601 ASCIIToUTF16("Name"), 612 ASCIIToUTF16("Name"),
602 string16(), 613 string16(),
603 ASCIIToUTF16("Superman")), 614 ASCIIToUTF16("Superman")),
615 &changes,
604 t2)); 616 t2));
605 617
606 std::vector<AutofillChange> changes; 618 changes.clear();
607 EXPECT_TRUE(db.RemoveFormElementsAddedBetween(t1, t2, &changes)); 619 EXPECT_TRUE(db.RemoveFormElementsAddedBetween(t1, t2, &changes));
608 ASSERT_EQ(1U, changes.size()); 620 ASSERT_EQ(1U, changes.size());
609 EXPECT_EQ(AutofillChange(AutofillChange::UPDATE, 621 EXPECT_EQ(AutofillChange(AutofillChange::UPDATE,
610 AutofillKey(ASCIIToUTF16("Name"), 622 AutofillKey(ASCIIToUTF16("Name"),
611 ASCIIToUTF16("Superman"))), 623 ASCIIToUTF16("Superman"))),
612 changes[0]); 624 changes[0]);
613 changes.clear(); 625 changes.clear();
614 626
615 EXPECT_TRUE(db.RemoveFormElementsAddedBetween(t2, t2 + one_day, &changes)); 627 EXPECT_TRUE(db.RemoveFormElementsAddedBetween(t2, t2 + one_day, &changes));
616 ASSERT_EQ(1U, changes.size()); 628 ASSERT_EQ(1U, changes.size());
617 EXPECT_EQ(AutofillChange(AutofillChange::REMOVE, 629 EXPECT_EQ(AutofillChange(AutofillChange::REMOVE,
618 AutofillKey(ASCIIToUTF16("Name"), 630 AutofillKey(ASCIIToUTF16("Name"),
619 ASCIIToUTF16("Superman"))), 631 ASCIIToUTF16("Superman"))),
620 changes[0]); 632 changes[0]);
621 } 633 }
622 634
635 TEST_F(WebDatabaseTest, Autofill_AddChanges) {
636 WebDatabase db;
637 ASSERT_EQ(sql::INIT_OK, db.Init(file_));
638
639 TimeDelta one_day(TimeDelta::FromDays(1));
640 Time t1 = Time::Now();
641 Time t2 = t1 + one_day;
642
643 AutofillChangeList changes;
644 EXPECT_TRUE(db.AddFormFieldValueTime(
645 FormField(string16(),
646 ASCIIToUTF16("Name"),
647 string16(),
648 ASCIIToUTF16("Superman")),
649 &changes,
650 t1));
651 ASSERT_EQ(1U, changes.size());
652 EXPECT_EQ(AutofillChange(AutofillChange::ADD,
653 AutofillKey(ASCIIToUTF16("Name"),
654 ASCIIToUTF16("Superman"))),
655 changes[0]);
656
657 changes.clear();
658 EXPECT_TRUE(db.AddFormFieldValueTime(
659 FormField(string16(),
660 ASCIIToUTF16("Name"),
661 string16(),
662 ASCIIToUTF16("Superman")),
663 &changes,
664 t2));
665 ASSERT_EQ(1U, changes.size());
666 EXPECT_EQ(AutofillChange(AutofillChange::UPDATE,
667 AutofillKey(ASCIIToUTF16("Name"),
668 ASCIIToUTF16("Superman"))),
669 changes[0]);
670 }
671
623 static bool AddTimestampedLogin(WebDatabase* db, std::string url, 672 static bool AddTimestampedLogin(WebDatabase* db, std::string url,
624 const std::string& unique_string, 673 const std::string& unique_string,
625 const Time& time) { 674 const Time& time) {
626 // Example password form. 675 // Example password form.
627 PasswordForm form; 676 PasswordForm form;
628 form.origin = GURL(url + std::string("/LoginAuth")); 677 form.origin = GURL(url + std::string("/LoginAuth"));
629 form.username_element = ASCIIToUTF16(unique_string); 678 form.username_element = ASCIIToUTF16(unique_string);
630 form.username_value = ASCIIToUTF16(unique_string); 679 form.username_value = ASCIIToUTF16(unique_string);
631 form.password_element = ASCIIToUTF16(unique_string); 680 form.password_element = ASCIIToUTF16(unique_string);
632 form.submit_element = ASCIIToUTF16("signIn"); 681 form.submit_element = ASCIIToUTF16("signIn");
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 ASSERT_EQ(16, images[0].height()); 856 ASSERT_EQ(16, images[0].height());
808 ASSERT_EQ(32, images[1].width()); 857 ASSERT_EQ(32, images[1].width());
809 ASSERT_EQ(32, images[1].height()); 858 ASSERT_EQ(32, images[1].height());
810 } else { 859 } else {
811 ASSERT_EQ(32, images[0].width()); 860 ASSERT_EQ(32, images[0].width());
812 ASSERT_EQ(32, images[0].height()); 861 ASSERT_EQ(32, images[0].height());
813 ASSERT_EQ(16, images[1].width()); 862 ASSERT_EQ(16, images[1].width());
814 ASSERT_EQ(16, images[1].height()); 863 ASSERT_EQ(16, images[1].height());
815 } 864 }
816 } 865 }
OLDNEW
« no previous file with comments | « chrome/browser/webdata/web_database.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698