1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/guid.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_type.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_change.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_entry.h" 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_table.h" 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_field_data.h" 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/os_crypt/os_crypt.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_database.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/statement.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)using base::ASCIIToUTF16; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// So we can compare AutofillKeys with EXPECT_EQ(). 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::ostream& operator<<(std::ostream& os, const AutofillKey& key) { 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return os << base::UTF16ToASCII(key.name()) << ", " 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << base::UTF16ToASCII(key.value()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// So we can compare AutofillChanges with EXPECT_EQ(). 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::ostream& operator<<(std::ostream& os, const AutofillChange& change) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (change.type()) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case AutofillChange::ADD: { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os << "ADD"; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case AutofillChange::UPDATE: { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os << "UPDATE"; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case AutofillChange::REMOVE: { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os << "REMOVE"; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return os << " " << change.key(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)typedef std::set<AutofillEntry, 618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool (*)(const AutofillEntry&, const AutofillEntry&)> AutofillEntrySet; 628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)typedef AutofillEntrySet::iterator AutofillEntrySetIterator; 638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CompareAutofillEntries(const AutofillEntry& a, const AutofillEntry& b) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int compVal = a.key().name().compare(b.key().name()); 668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (compVal != 0) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return compVal < 0; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) compVal = a.key().value().compare(b.key().value()); 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (compVal != 0) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return compVal < 0; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (a.date_created() != b.date_created()) 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return a.date_created() < b.date_created(); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return a.date_last_used() < b.date_last_used(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)AutofillEntry MakeAutofillEntry(const char* name, 808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const char* value, 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) time_t date_created, 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) time_t date_last_used) { 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (date_last_used < 0) 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) date_last_used = date_created; 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return AutofillEntry(AutofillKey(ASCIIToUTF16(name), ASCIIToUTF16(value)), 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Time::FromTimeT(date_created), 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Time::FromTimeT(date_last_used)); 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Checks |actual| and |expected| contain the same elements. 918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void CompareAutofillEntrySets(const AutofillEntrySet& actual, 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const AutofillEntrySet& expected) { 938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_EQ(expected.size(), actual.size()); 948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) size_t count = 0; 958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (AutofillEntrySet::const_iterator it = actual.begin(); 968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) it != actual.end(); ++it) { 978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) count += expected.count(*it); 988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(actual.size(), count); 1008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)int GetAutofillEntryCount(const base::string16& name, 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::string16& value, 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WebDatabase* db) { 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sql::Statement s(db->GetSQLConnection()->GetUniqueStatement( 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "SELECT count FROM autofill WHERE name = ? AND value = ?")); 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) s.BindString16(0, name); 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) s.BindString16(1, value); 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) s.Step(); 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return s.ColumnInt(0); 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} // namespace 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillTableTest : public testing::Test { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillTableTest() {} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~AutofillTableTest() {} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OSCrypt::UseMockKeychain(true); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_ = temp_dir_.path().AppendASCII("TestWebDatabase"); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) table_.reset(new AutofillTable("en-US")); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_.reset(new WebDatabase); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->AddTable(table_.get()); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(sql::INIT_OK, db_->Init(file_)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath file_; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<AutofillTable> table_; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<WebDatabase> db_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AutofillTableTest); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time t1 = Time::Now(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the submission of a handful of entries in a field called "Name", 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // some more often than others. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChangeList changes; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time now = base::Time::Now(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta two_seconds = base::TimeDelta::FromSeconds(2); 154b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_FALSE(table_->HasFormElements()); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValue(field, &changes)); 156b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_TRUE(table_->HasFormElements()); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> v; 1588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (int i = 0; i < 5; ++i) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Clark Kent"); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now + i * two_seconds)); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (int i = 0; i < 3; ++i) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Clark Sutter"); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now + i * two_seconds)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (int i = 0; i < 2; ++i) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Favorite Color"); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Green"); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now + i * two_seconds)); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // We have added the name Clark Kent 5 times, so count should be 5. 176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(5, GetAutofillEntryCount(ASCIIToUTF16("Name"), 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("Clark Kent"), db_.get())); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Storing in the data base should be case sensitive, so there should be no 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // database entry for clark kent lowercase. 181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, GetAutofillEntryCount(ASCIIToUTF16("Name"), 182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("clark kent"), db_.get())); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(2, GetAutofillEntryCount(ASCIIToUTF16("Favorite Color"), 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("Green"), db_.get())); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is meant to get a list of suggestions for Name. The empty prefix 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in the second argument means it should return all suggestions for a name 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // no matter what they start with. The order that the names occur in the list 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should be decreasing order by count. 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetFormValuesForElementName( 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16("Name"), base::string16(), &v, 6)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, v.size()); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v.size() == 3) { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Clark Kent"), v[0]); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Clark Sutter"), v[1]); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Superman"), v[2]); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we query again limiting the list size to 1, we should only get the most 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // frequent entry. 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetFormValuesForElementName( 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16("Name"), base::string16(), &v, 1)); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, v.size()); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v.size() == 1) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Clark Kent"), v[0]); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Querying for suggestions given a prefix is case-insensitive, so the prefix 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "cLa" shoud get suggestions for both Clarks. 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetFormValuesForElementName( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Name"), ASCIIToUTF16("cLa"), &v, 6)); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, v.size()); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (v.size() == 2) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Clark Kent"), v[0]); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Clark Sutter"), v[1]); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removing all elements since the beginning of this function should remove 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // everything from the database. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.clear(); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->RemoveFormElementsAddedBetween(t1, Time(), &changes)); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const AutofillChange kExpectedChanges[] = { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChange(AutofillChange::REMOVE, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("Name"), 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Superman"))), 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChange(AutofillChange::REMOVE, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("Name"), 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Clark Kent"))), 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChange(AutofillChange::REMOVE, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("Name"), 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Clark Sutter"))), 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChange(AutofillChange::REMOVE, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("Favorite Color"), 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Green"))), 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(arraysize(kExpectedChanges), changes.size()); 2398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (size_t i = 0; i < arraysize(kExpectedChanges); ++i) { 2408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(kExpectedChanges[i], changes[i]); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, GetAutofillEntryCount(ASCIIToUTF16("Name"), 244a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("Clark Kent"), db_.get())); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetFormValuesForElementName( 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16("Name"), base::string16(), &v, 6)); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, v.size()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now add some values with empty strings. 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kValue = ASCIIToUTF16(" toto "); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("blank"); 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) field.value = base::string16(); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValue(field, &changes)); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("blank"); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16(" "); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValue(field, &changes)); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("blank"); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16(" "); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValue(field, &changes)); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("blank"); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = kValue; 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValue(field, &changes)); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // They should be stored normally as the DB layer does not check for empty 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // values. 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v.clear(); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetFormValuesForElementName( 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16("blank"), base::string16(), &v, 10)); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, v.size()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_RemoveBetweenChanges) { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TimeDelta one_day(TimeDelta::FromDays(1)); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time t1 = Time::Now(); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time t2 = t1 + one_day; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChangeList changes; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, t1)); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, t2)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.clear(); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->RemoveFormElementsAddedBetween(t1, t2, &changes)); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, changes.size()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutofillChange(AutofillChange::UPDATE, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("Name"), 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Superman"))), 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes[0]); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.clear(); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE( 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->RemoveFormElementsAddedBetween(t2, t2 + one_day, &changes)); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, changes.size()); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutofillChange(AutofillChange::REMOVE, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("Name"), 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Superman"))), 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes[0]); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_AddChanges) { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TimeDelta one_day(TimeDelta::FromDays(1)); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time t1 = Time::Now(); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time t2 = t1 + one_day; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChangeList changes; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, t1)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, changes.size()); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutofillChange(AutofillChange::ADD, 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("Name"), 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Superman"))), 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes[0]); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.clear(); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->AddFormFieldValueTime(field, &changes, t2)); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, changes.size()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutofillChange(AutofillChange::UPDATE, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("Name"), 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Superman"))), 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes[0]); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_UpdateOneWithOneTimestamp) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntry entry(MakeAutofillEntry("foo", "bar", 1, -1)); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entries.push_back(entry); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->UpdateAutofillEntries(entries)); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, GetAutofillEntryCount(ASCIIToUTF16("foo"), ASCIIToUTF16("bar"), 336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) db_.get())); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> all_entries; 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&all_entries)); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, all_entries.size()); 3418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(entry, all_entries[0]); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_UpdateOneWithTwoTimestamps) { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntry entry(MakeAutofillEntry("foo", "bar", 1, 2)); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entries.push_back(entry); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->UpdateAutofillEntries(entries)); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(2, GetAutofillEntryCount(ASCIIToUTF16("foo"), ASCIIToUTF16("bar"), 351a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) db_.get())); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> all_entries; 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&all_entries)); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, all_entries.size()); 3568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(entry, all_entries[0]); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_GetAutofillTimestamps) { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntry entry(MakeAutofillEntry("foo", "bar", 1, 2)); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entries.push_back(entry); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->UpdateAutofillEntries(entries)); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Time date_created, date_last_used; 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillTimestamps(ASCIIToUTF16("foo"), 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("bar"), 368a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &date_created, 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &date_last_used)); 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(Time::FromTimeT(1), date_created); 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(Time::FromTimeT(2), date_last_used); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_UpdateTwo) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntry entry0(MakeAutofillEntry("foo", "bar0", 1, -1)); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntry entry1(MakeAutofillEntry("foo", "bar1", 2, 3)); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entries.push_back(entry0); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entries.push_back(entry1); 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->UpdateAutofillEntries(entries)); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 382a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, GetAutofillEntryCount(ASCIIToUTF16("foo"), ASCIIToUTF16("bar0"), 383a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) db_.get())); 384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(2, GetAutofillEntryCount(ASCIIToUTF16("foo"), ASCIIToUTF16("bar1"), 385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) db_.get())); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_UpdateReplace) { 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChangeList changes; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a form field. This will be replaced. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValue(field, &changes)); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntry entry(MakeAutofillEntry("Name", "Superman", 1, 2)); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entries.push_back(entry); 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->UpdateAutofillEntries(entries)); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> all_entries; 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&all_entries)); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, all_entries.size()); 4048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(entry, all_entries[0]); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_UpdateDontReplace) { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time t = Time::Now(); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntry existing( 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeAutofillEntry("Name", "Superman", t.ToTimeT(), -1)); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChangeList changes; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a form field. This will NOT be replaced. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = existing.key().name(); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = existing.key().value(); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, t)); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntry entry(MakeAutofillEntry("Name", "Clark Kent", 1, 2)); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entries.push_back(entry); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->UpdateAutofillEntries(entries)); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> all_entries; 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&all_entries)); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, all_entries.size()); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntrySet expected_entries(all_entries.begin(), 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_entries.end(), 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompareAutofillEntries); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, expected_entries.count(existing)); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, expected_entries.count(entry)); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_AddFormFieldValues) { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time t = Time::Now(); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add multiple values for "firstname" and "lastname" names. Test that only 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // first value of each gets added. Related to security issue: 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/51727. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormFieldData> elements; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("firstname"); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Joe"); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elements.push_back(field); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("firstname"); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Jane"); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elements.push_back(field); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("lastname"); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Smith"); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elements.push_back(field); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("lastname"); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Jones"); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elements.push_back(field); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillChange> changes; 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->AddFormFieldValuesTime(elements, &changes, t); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, changes.size()); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(changes[0], AutofillChange(AutofillChange::ADD, 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("firstname"), 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Joe")))); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(changes[1], AutofillChange(AutofillChange::ADD, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey(ASCIIToUTF16("lastname"), 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Smith")))); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> all_entries; 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&all_entries)); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, all_entries.size()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(AutofillTableTest, 474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Autofill_RemoveFormElementsAddedBetween_UsedOnlyBefore) { 475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Add an entry used only before the targetted range. 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillChangeList changes; 477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FormFieldData field; 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(10))); 482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(20))); 484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(30))); 486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(40))); 488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 489a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(50))); 490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 491a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(5, GetAutofillEntryCount(field.name, field.value, db_.get())); 492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) changes.clear(); 494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->RemoveFormElementsAddedBetween(base::Time::FromTimeT(51), 495a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(60), 496a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &changes)); 497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(changes.empty()); 498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(5, GetAutofillEntryCount(field.name, field.value, db_.get())); 499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 500a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 501a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(AutofillTableTest, 502a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Autofill_RemoveFormElementsAddedBetween_UsedOnlyAfter) { 503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Add an entry used only after the targetted range. 504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillChangeList changes; 505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FormFieldData field; 506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(50))); 510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(60))); 512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(70))); 514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(80))); 516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(90))); 518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(5, GetAutofillEntryCount(field.name, field.value, db_.get())); 520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) changes.clear(); 522a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->RemoveFormElementsAddedBetween(base::Time::FromTimeT(40), 523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(50), 524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &changes)); 525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(changes.empty()); 526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(5, GetAutofillEntryCount(field.name, field.value, db_.get())); 527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 528a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 529a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(AutofillTableTest, 530a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Autofill_RemoveFormElementsAddedBetween_UsedOnlyDuring) { 531a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Add an entry used entirely during the targetted range. 532a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillChangeList changes; 533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FormFieldData field; 534a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 535a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(10))); 538a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 539a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(20))); 540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(30))); 542a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 543a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(40))); 544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(50))); 546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 547a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(5, GetAutofillEntryCount(field.name, field.value, db_.get())); 548a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) changes.clear(); 550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->RemoveFormElementsAddedBetween(base::Time::FromTimeT(10), 551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(51), 552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &changes)); 553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(1U, changes.size()); 554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(AutofillChange(AutofillChange::REMOVE, 555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillKey(field.name, field.value)), 556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) changes[0]); 557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, GetAutofillEntryCount(field.name, field.value, db_.get())); 558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(AutofillTableTest, 561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Autofill_RemoveFormElementsAddedBetween_UsedBeforeAndDuring) { 562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Add an entry used both before and during the targetted range. 563a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillChangeList changes; 564a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FormFieldData field; 565a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 566a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 567a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 568a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(10))); 569a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(20))); 571a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 572a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(30))); 573a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 574a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(40))); 575a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 576a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(50))); 577a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 578a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(5, GetAutofillEntryCount(field.name, field.value, db_.get())); 579a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 580a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) changes.clear(); 581a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->RemoveFormElementsAddedBetween(base::Time::FromTimeT(40), 582a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(60), 583a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &changes)); 584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(1U, changes.size()); 585a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(AutofillChange(AutofillChange::UPDATE, 586a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillKey(field.name, field.value)), 587a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) changes[0]); 588a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(4, GetAutofillEntryCount(field.name, field.value, db_.get())); 589a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time date_created, date_last_used; 590a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE( 591a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) table_->GetAutofillTimestamps(field.name, field.value, 592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &date_created, &date_last_used)); 593a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(base::Time::FromTimeT(10), date_created); 594a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(base::Time::FromTimeT(39), date_last_used); 595a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 596a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 597a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(AutofillTableTest, 598a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Autofill_RemoveFormElementsAddedBetween_UsedDuringAndAfter) { 599a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Add an entry used both during and after the targetted range. 600a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillChangeList changes; 601a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FormFieldData field; 602a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 603a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 604a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 605a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(50))); 606a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 607a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(60))); 608a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(70))); 610a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(80))); 612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(90))); 614a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 615a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(5, GetAutofillEntryCount(field.name, field.value, db_.get())); 616a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 617a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) changes.clear(); 618a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(table_->RemoveFormElementsAddedBetween(base::Time::FromTimeT(40), 619a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time::FromTimeT(80), 620a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &changes)); 621a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(1U, changes.size()); 622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(AutofillChange(AutofillChange::UPDATE, 623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillKey(field.name, field.value)), 624a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) changes[0]); 625a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(2, GetAutofillEntryCount(field.name, field.value, db_.get())); 626a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time date_created, date_last_used; 627a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE( 628a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) table_->GetAutofillTimestamps(field.name, field.value, 629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &date_created, &date_last_used)); 630a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(base::Time::FromTimeT(80), date_created); 631a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(base::Time::FromTimeT(90), date_last_used); 632a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 633a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, AutofillProfile) { 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a 'Home' profile. 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile home_profile; 63790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) home_profile.set_origin(std::string()); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("John")); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(NAME_MIDDLE, ASCIIToUTF16("Q.")); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("js@smith.xyz")); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(COMPANY_NAME, ASCIIToUTF16("Google")); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("1234 Apple Way")); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("unit 5")); 645a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) home_profile.SetRawInfo(ADDRESS_HOME_DEPENDENT_LOCALITY, 646a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASCIIToUTF16("Beverly Hills")); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("Los Angeles")); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("90025")); 650a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) home_profile.SetRawInfo(ADDRESS_HOME_SORTING_CODE, ASCIIToUTF16("MAGIC ###")); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) home_profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("18181234567")); 653a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch home_profile.set_language_code("en"); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time pre_creation_time = Time::Now(); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillProfile(home_profile)); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time post_creation_time = Time::Now(); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the 'Home' profile. 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* db_profile; 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(home_profile.guid(), &db_profile)); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(home_profile, *db_profile); 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_home(db_->GetSQLConnection()->GetUniqueStatement( 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified " 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM autofill_profiles WHERE guid=?")); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_home.BindString(0, home_profile.guid()); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_home.is_valid()); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_home.Step()); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_home.ColumnInt64(0), pre_creation_time.ToTimeT()); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_home.ColumnInt64(0), post_creation_time.ToTimeT()); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_home.Step()); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a 'Billing' profile. 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile billing_profile = home_profile; 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.set_guid(base::GenerateGUID()); 67790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) billing_profile.set_origin("https://www.example.com/"); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_LINE1, 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("5678 Bottom Street")); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("suite 3")); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pre_creation_time = Time::Now(); 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillProfile(billing_profile)); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_creation_time = Time::Now(); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the 'Billing' profile. 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(billing_profile.guid(), &db_profile)); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(billing_profile, *db_profile); 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_billing(db_->GetSQLConnection()->GetUniqueStatement( 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles WHERE guid=?")); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_billing.BindString(0, billing_profile.guid()); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_billing.is_valid()); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_billing.Step()); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_billing.ColumnInt64(0), pre_creation_time.ToTimeT()); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_billing.ColumnInt64(0), post_creation_time.ToTimeT()); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_billing.Step()); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the 'Billing' profile, name only. 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Jane")); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time pre_modification_time = Time::Now(); 70290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(billing_profile)); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time post_modification_time = Time::Now(); 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(billing_profile.guid(), &db_profile)); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(billing_profile, *db_profile); 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_billing_updated(db_->GetSQLConnection()->GetUniqueStatement( 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles WHERE guid=?")); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_billing_updated.BindString(0, billing_profile.guid()); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_billing_updated.is_valid()); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_billing_updated.Step()); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_billing_updated.ColumnInt64(0), 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pre_modification_time.ToTimeT()); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_billing_updated.ColumnInt64(0), 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_modification_time.ToTimeT()); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_billing_updated.Step()); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the 'Billing' profile. 71990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) billing_profile.set_origin("Chrome settings"); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Janice")); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(NAME_MIDDLE, ASCIIToUTF16("C.")); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Joplin")); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("jane@singer.com")); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(COMPANY_NAME, ASCIIToUTF16("Indy")); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("Open Road")); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("Route 66")); 727a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_DEPENDENT_LOCALITY, 728a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASCIIToUTF16("District 9")); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("NFA")); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("NY")); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("10011")); 732a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_SORTING_CODE, ASCIIToUTF16("123456")); 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) billing_profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) billing_profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("18181230000")); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time pre_modification_time_2 = Time::Now(); 73790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(billing_profile)); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time post_modification_time_2 = Time::Now(); 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(billing_profile.guid(), &db_profile)); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(billing_profile, *db_profile); 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_billing_updated_2( 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "SELECT date_modified FROM autofill_profiles WHERE guid=?")); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_billing_updated_2.BindString(0, billing_profile.guid()); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_billing_updated_2.is_valid()); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_billing_updated_2.Step()); 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_billing_updated_2.ColumnInt64(0), 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pre_modification_time_2.ToTimeT()); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_billing_updated_2.ColumnInt64(0), 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_modification_time_2.ToTimeT()); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_billing_updated_2.Step()); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove the 'Billing' profile. 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->RemoveAutofillProfile(billing_profile.guid())); 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(table_->GetAutofillProfile(billing_profile.guid(), &db_profile)); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, AutofillProfileMultiValueNames) { 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile p; 761c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kJohnDoe(ASCIIToUTF16("John Doe")); 762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kJohnPDoe(ASCIIToUTF16("John P. Doe")); 763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> set_values; 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.push_back(kJohnDoe); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.push_back(kJohnPDoe); 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(NAME_FULL, set_values); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillProfile(p)); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* db_profile; 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the values. 777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kNoOne(ASCIIToUTF16("No One")); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values[1] = kNoOne; 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(NAME_FULL, set_values); 78090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(p)); 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete values. 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.clear(); 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(NAME_FULL, set_values); 78990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(p)); 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 793c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), db_profile->GetRawInfo(NAME_FULL)); 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, AutofillProfileMultiValueEmails) { 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile p; 799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kJohnDoe(ASCIIToUTF16("john@doe.com")); 800c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kJohnPDoe(ASCIIToUTF16("john_p@doe.com")); 801c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> set_values; 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.push_back(kJohnDoe); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.push_back(kJohnPDoe); 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(EMAIL_ADDRESS, set_values); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillProfile(p)); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* db_profile; 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the values. 815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kNoOne(ASCIIToUTF16("no@one.com")); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values[1] = kNoOne; 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(EMAIL_ADDRESS, set_values); 81890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(p)); 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete values. 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.clear(); 8262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(EMAIL_ADDRESS, set_values); 82790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(p)); 8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 831c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), db_profile->GetRawInfo(EMAIL_ADDRESS)); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, AutofillProfileMultiValuePhone) { 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile p; 837c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kJohnDoe(ASCIIToUTF16("4151112222")); 838c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kJohnPDoe(ASCIIToUTF16("4151113333")); 839c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> set_values; 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.push_back(kJohnDoe); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.push_back(kJohnPDoe); 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillProfile(p)); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* db_profile; 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the values. 853c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 kNoOne(ASCIIToUTF16("4151110000")); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values[1] = kNoOne; 8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values); 85690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(p)); 8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete values. 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_values.clear(); 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values); 86590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(p)); 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(p.guid(), &db_profile)); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p, *db_profile); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, p.Compare(*db_profile)); 869c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), db_profile->GetRawInfo(EMAIL_ADDRESS)); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_profile; 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, AutofillProfileTrash) { 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> guids; 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->GetAutofillProfilesInTrash(&guids); 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(guids.empty()); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->AddAutofillGUIDToTrash( 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "00000000-0000-0000-0000-000000000000")); 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->AddAutofillGUIDToTrash( 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "00000000-0000-0000-0000-000000000001")); 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfilesInTrash(&guids)); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2UL, guids.size()); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000000", guids[0]); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000001", guids[1]); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->EmptyAutofillProfilesTrash()); 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfilesInTrash(&guids)); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(guids.empty()); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, AutofillProfileTrashInteraction) { 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> guids; 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->GetAutofillProfilesInTrash(&guids); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(guids.empty()); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile; 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("John")); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(NAME_MIDDLE, ASCIIToUTF16("Q.")); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 9018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("js@smith.xyz")); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("1 Main St")); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("Los Angeles")); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("90025")); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mark this profile as in the trash. This stops |AddAutofillProfile| from 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // adding it. 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillGUIDToTrash(profile.guid())); 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillProfile(profile)); 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* added_profile = NULL; 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(table_->GetAutofillProfile(profile.guid(), &added_profile)); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(static_cast<AutofillProfile*>(NULL), added_profile); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the profile for real this time. 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->EmptyAutofillProfilesTrash()); 9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetAutofillProfilesInTrash(&guids)); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(guids.empty()); 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillProfile(profile)); 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetAutofillProfile(profile.guid(), 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &added_profile)); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<AutofillProfile*>(NULL), added_profile); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete added_profile; 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mark this profile as in the trash. This stops |UpdateAutofillProfileMulti| 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from updating it. In normal operation a profile should not be both in the 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // trash and in the profiles table simultaneously. 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddAutofillGUIDToTrash(profile.guid())); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Jane")); 93190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(table_->UpdateAutofillProfile(profile)); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* updated_profile = NULL; 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetAutofillProfile(profile.guid(), &updated_profile)); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<AutofillProfile*>(NULL), added_profile); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John"), updated_profile->GetRawInfo(NAME_FIRST)); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete updated_profile; 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to delete the trashed profile. This stops |RemoveAutofillProfile| from 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // deleting it. In normal operation deletion is done by migration step, and 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // removal from trash is done by |WebDataService|. |RemoveAutofillProfile| 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // does remove the item from the trash if it is found however, so that if 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // other clients remove it (via Sync say) then it is gone and doesn't need to 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be processed further by |WebDataService|. 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->RemoveAutofillProfile(profile.guid())); 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* removed_profile = NULL; 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->GetAutofillProfile(profile.guid(), &removed_profile)); 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(table_->IsAutofillGUIDInTrash(profile.guid())); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<AutofillProfile*>(NULL), removed_profile); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete removed_profile; 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that emptying the trash now allows removal to occur. 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->EmptyAutofillProfilesTrash()); 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->RemoveAutofillProfile(profile.guid())); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) removed_profile = NULL; 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(table_->GetAutofillProfile(profile.guid(), &removed_profile)); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(static_cast<AutofillProfile*>(NULL), removed_profile); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, CreditCard) { 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a 'Work' credit card. 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard work_creditcard; 96290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) work_creditcard.set_origin("https://www.example.com/"); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_creditcard.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Jack Torrance")); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_creditcard.SetRawInfo(CREDIT_CARD_NUMBER, 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("1234567890123456")); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_creditcard.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("04")); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_creditcard.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("2013")); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time pre_creation_time = Time::Now(); 9712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddCreditCard(work_creditcard)); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time post_creation_time = Time::Now(); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the 'Work' credit card. 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* db_creditcard; 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetCreditCard(work_creditcard.guid(), &db_creditcard)); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(work_creditcard, *db_creditcard); 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_work(db_->GetSQLConnection()->GetUniqueStatement( 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, expiration_year, " 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "card_number_encrypted, date_modified " 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards WHERE guid=?")); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_work.BindString(0, work_creditcard.guid()); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_work.is_valid()); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_work.Step()); 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_work.ColumnInt64(5), pre_creation_time.ToTimeT()); 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_work.ColumnInt64(5), post_creation_time.ToTimeT()); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_work.Step()); 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_creditcard; 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a 'Target' credit card. 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard target_creditcard; 99290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) target_creditcard.set_origin(std::string()); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_creditcard.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Jack Torrance")); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_creditcard.SetRawInfo(CREDIT_CARD_NUMBER, 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("1111222233334444")); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_creditcard.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("06")); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_creditcard.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("2012")); 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pre_creation_time = Time::Now(); 10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddCreditCard(target_creditcard)); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_creation_time = Time::Now(); 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetCreditCard(target_creditcard.guid(), &db_creditcard)); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(target_creditcard, *db_creditcard); 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_target(db_->GetSQLConnection()->GetUniqueStatement( 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, expiration_year, " 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "card_number_encrypted, date_modified " 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards WHERE guid=?")); 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_target.BindString(0, target_creditcard.guid()); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_target.is_valid()); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_target.Step()); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_target.ColumnInt64(5), pre_creation_time.ToTimeT()); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_target.ColumnInt64(5), post_creation_time.ToTimeT()); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_target.Step()); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_creditcard; 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the 'Target' credit card. 101890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) target_creditcard.set_origin("Interactive Autofill dialog"); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_creditcard.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Charles Grady")); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time pre_modification_time = Time::Now(); 10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->UpdateCreditCard(target_creditcard)); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time post_modification_time = Time::Now(); 10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetCreditCard(target_creditcard.guid(), &db_creditcard)); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(target_creditcard, *db_creditcard); 10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_target_updated(db_->GetSQLConnection()->GetUniqueStatement( 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT guid, name_on_card, expiration_month, expiration_year, " 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "card_number_encrypted, date_modified " 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "FROM credit_cards WHERE guid=?")); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_target_updated.BindString(0, target_creditcard.guid()); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_target_updated.is_valid()); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_target_updated.Step()); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(s_target_updated.ColumnInt64(5), pre_modification_time.ToTimeT()); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(s_target_updated.ColumnInt64(5), post_modification_time.ToTimeT()); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_target_updated.Step()); 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete db_creditcard; 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove the 'Target' credit card. 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->RemoveCreditCard(target_creditcard.guid())); 10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(table_->GetCreditCard(target_creditcard.guid(), &db_creditcard)); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, UpdateAutofillProfile) { 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a profile to the db. 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile; 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("John")); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(NAME_MIDDLE, ASCIIToUTF16("Q.")); 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("js@example.com")); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(COMPANY_NAME, ASCIIToUTF16("Google")); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("1234 Apple Way")); 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("unit 5")); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("Los Angeles")); 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("90025")); 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("18181234567")); 1057a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch profile.set_language_code("en"); 10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->AddAutofillProfile(profile); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a mocked value for the profile's creation time. 10618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const time_t kMockCreationDate = Time::Now().ToTimeT() - 13; 10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_mock_creation_date( 10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "UPDATE autofill_profiles SET date_modified = ?")); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_mock_creation_date.is_valid()); 10668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) s_mock_creation_date.BindInt64(0, kMockCreationDate); 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_mock_creation_date.Run()); 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the profile. 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* tmp_profile; 10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(profile.guid(), &tmp_profile)); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<AutofillProfile> db_profile(tmp_profile); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile, *db_profile); 10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_original(db_->GetSQLConnection()->GetUniqueStatement( 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles")); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_original.is_valid()); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_original.Step()); 10788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(kMockCreationDate, s_original.ColumnInt64(0)); 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_original.Step()); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now, update the profile and save the update to the database. 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The modification date should change to reflect the update. 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("js@smith.xyz")); 108490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) table_->UpdateAutofillProfile(profile); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the profile. 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(profile.guid(), &tmp_profile)); 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_profile.reset(tmp_profile); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile, *db_profile); 10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_updated(db_->GetSQLConnection()->GetUniqueStatement( 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles")); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_updated.is_valid()); 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_updated.Step()); 10948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_LT(kMockCreationDate, s_updated.ColumnInt64(0)); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_updated.Step()); 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a mocked value for the profile's modification time. 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const time_t mock_modification_date = Time::Now().ToTimeT() - 7; 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_mock_modification_date( 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "UPDATE autofill_profiles SET date_modified = ?")); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_mock_modification_date.is_valid()); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_mock_modification_date.BindInt64(0, mock_modification_date); 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_mock_modification_date.Run()); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 110690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Finally, call into |UpdateAutofillProfile()| without changing the 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile. The modification date should not change. 110890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) table_->UpdateAutofillProfile(profile); 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the profile. 11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(profile.guid(), &tmp_profile)); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_profile.reset(tmp_profile); 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile, *db_profile); 11142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_unchanged(db_->GetSQLConnection()->GetUniqueStatement( 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles")); 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_unchanged.is_valid()); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_unchanged.Step()); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(mock_modification_date, s_unchanged.ColumnInt64(0)); 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_unchanged.Step()); 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, UpdateCreditCard) { 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a credit card to the db. 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard credit_card; 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Jack Torrance")); 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("1234567890123456")); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("04")); 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2013")); 11292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->AddCreditCard(credit_card); 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a mocked value for the credit card's creation time. 11328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const time_t kMockCreationDate = Time::Now().ToTimeT() - 13; 11332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_mock_creation_date( 11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "UPDATE credit_cards SET date_modified = ?")); 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_mock_creation_date.is_valid()); 11378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) s_mock_creation_date.BindInt64(0, kMockCreationDate); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_mock_creation_date.Run()); 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the credit card. 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* tmp_credit_card; 11422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetCreditCard(credit_card.guid(), &tmp_credit_card)); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<CreditCard> db_credit_card(tmp_credit_card); 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(credit_card, *db_credit_card); 11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_original(db_->GetSQLConnection()->GetUniqueStatement( 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM credit_cards")); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_original.is_valid()); 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_original.Step()); 11498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(kMockCreationDate, s_original.ColumnInt64(0)); 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_original.Step()); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now, update the credit card and save the update to the database. 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The modification date should change to reflect the update. 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->UpdateCreditCard(credit_card); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the credit card. 11582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetCreditCard(credit_card.guid(), &tmp_credit_card)); 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_credit_card.reset(tmp_credit_card); 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(credit_card, *db_credit_card); 11612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_updated(db_->GetSQLConnection()->GetUniqueStatement( 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM credit_cards")); 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_updated.is_valid()); 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_updated.Step()); 11658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_LT(kMockCreationDate, s_updated.ColumnInt64(0)); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_updated.Step()); 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a mocked value for the credit card's modification time. 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const time_t mock_modification_date = Time::Now().ToTimeT() - 7; 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_mock_modification_date( 11712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "UPDATE credit_cards SET date_modified = ?")); 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_mock_modification_date.is_valid()); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s_mock_modification_date.BindInt64(0, mock_modification_date); 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_mock_modification_date.Run()); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Finally, call into |UpdateCreditCard()| without changing the credit card. 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The modification date should not change. 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table_->UpdateCreditCard(credit_card); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 118190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Get the credit card. 11822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetCreditCard(credit_card.guid(), &tmp_credit_card)); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_credit_card.reset(tmp_credit_card); 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(credit_card, *db_credit_card); 11852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sql::Statement s_unchanged(db_->GetSQLConnection()->GetUniqueStatement( 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM credit_cards")); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_unchanged.is_valid()); 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_unchanged.Step()); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(mock_modification_date, s_unchanged.ColumnInt64(0)); 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_unchanged.Step()); 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 119390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(AutofillTableTest, UpdateProfileOriginOnly) { 119490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Add a profile to the db. 119590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutofillProfile profile; 119690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("John")); 119790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(NAME_MIDDLE, ASCIIToUTF16("Q.")); 119890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 119990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("js@example.com")); 120090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(COMPANY_NAME, ASCIIToUTF16("Google")); 120190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("1234 Apple Way")); 120290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("unit 5")); 120390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("Los Angeles")); 120490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 120590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("90025")); 120690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 120790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("18181234567")); 120890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) table_->AddAutofillProfile(profile); 120990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 121090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Set a mocked value for the profile's creation time. 12118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const time_t kMockCreationDate = Time::Now().ToTimeT() - 13; 121290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_mock_creation_date( 121390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 121490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "UPDATE autofill_profiles SET date_modified = ?")); 121590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_mock_creation_date.is_valid()); 12168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) s_mock_creation_date.BindInt64(0, kMockCreationDate); 121790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_mock_creation_date.Run()); 121890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 121990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Get the profile. 122090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutofillProfile* tmp_profile; 122190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(profile.guid(), &tmp_profile)); 122290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<AutofillProfile> db_profile(tmp_profile); 122390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(profile, *db_profile); 122490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_original(db_->GetSQLConnection()->GetUniqueStatement( 122590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SELECT date_modified FROM autofill_profiles")); 122690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_original.is_valid()); 122790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_original.Step()); 12288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(kMockCreationDate, s_original.ColumnInt64(0)); 122990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(s_original.Step()); 123090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 123190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Now, update just the profile's origin and save the update to the database. 123290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The modification date should change to reflect the update. 123390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile.set_origin("https://www.example.com/"); 123490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) table_->UpdateAutofillProfile(profile); 123590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 123690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Get the profile. 123790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(table_->GetAutofillProfile(profile.guid(), &tmp_profile)); 123890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) db_profile.reset(tmp_profile); 123990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(profile, *db_profile); 124090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_updated(db_->GetSQLConnection()->GetUniqueStatement( 124190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SELECT date_modified FROM autofill_profiles")); 124290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_updated.is_valid()); 124390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_updated.Step()); 12448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_LT(kMockCreationDate, s_updated.ColumnInt64(0)); 124590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(s_updated.Step()); 124690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 124790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 124890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(AutofillTableTest, UpdateCreditCardOriginOnly) { 124990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Add a credit card to the db. 125090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card; 125190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Jack Torrance")); 125290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("1234567890123456")); 125390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("04")); 125490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2013")); 125590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) table_->AddCreditCard(credit_card); 125690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 125790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Set a mocked value for the credit card's creation time. 12588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const time_t kMockCreationDate = Time::Now().ToTimeT() - 13; 125990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_mock_creation_date( 126090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 126190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "UPDATE credit_cards SET date_modified = ?")); 126290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_mock_creation_date.is_valid()); 12638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) s_mock_creation_date.BindInt64(0, kMockCreationDate); 126490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_mock_creation_date.Run()); 126590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 126690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Get the credit card. 126790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard* tmp_credit_card; 126890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(table_->GetCreditCard(credit_card.guid(), &tmp_credit_card)); 126990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<CreditCard> db_credit_card(tmp_credit_card); 127090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(credit_card, *db_credit_card); 127190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_original(db_->GetSQLConnection()->GetUniqueStatement( 127290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SELECT date_modified FROM credit_cards")); 127390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_original.is_valid()); 127490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_original.Step()); 12758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(kMockCreationDate, s_original.ColumnInt64(0)); 127690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(s_original.Step()); 127790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 127890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Now, update just the credit card's origin and save the update to the 127990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // database. The modification date should change to reflect the update. 128090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) credit_card.set_origin("https://www.example.com/"); 128190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) table_->UpdateCreditCard(credit_card); 128290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 128390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Get the credit card. 128490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(table_->GetCreditCard(credit_card.guid(), &tmp_credit_card)); 128590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) db_credit_card.reset(tmp_credit_card); 128690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(credit_card, *db_credit_card); 128790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_updated(db_->GetSQLConnection()->GetUniqueStatement( 128890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SELECT date_modified FROM credit_cards")); 128990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_updated.is_valid()); 129090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_updated.Step()); 12918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_LT(kMockCreationDate, s_updated.ColumnInt64(0)); 129290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(s_updated.Step()); 129390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 129490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(AutofillTableTest, RemoveAutofillDataModifiedBetween) { 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Populate the autofill_profiles and credit_cards tables. 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(db_->GetSQLConnection()->Execute( 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO autofill_profiles (guid, date_modified) " 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000000', 11);" 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO autofill_profiles (guid, date_modified) " 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000001', 21);" 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO autofill_profiles (guid, date_modified) " 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000002', 31);" 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO autofill_profiles (guid, date_modified) " 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000003', 41);" 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO autofill_profiles (guid, date_modified) " 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000004', 51);" 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO autofill_profiles (guid, date_modified) " 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000005', 61);" 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO credit_cards (guid, date_modified) " 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000006', 17);" 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO credit_cards (guid, date_modified) " 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000007', 27);" 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO credit_cards (guid, date_modified) " 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000008', 37);" 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO credit_cards (guid, date_modified) " 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000009', 47);" 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO credit_cards (guid, date_modified) " 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000010', 57);" 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "INSERT INTO credit_cards (guid, date_modified) " 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000011', 67);")); 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove all entries modified in the bounded time range [17,41). 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> profile_guids; 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> credit_card_guids; 1326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) table_->RemoveAutofillDataModifiedBetween( 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::FromTimeT(17), Time::FromTimeT(41), 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_guids, &credit_card_guids); 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, profile_guids.size()); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000001", profile_guids[0]); 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000002", profile_guids[1]); 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_autofill_profiles_bounded( 13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles")); 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.is_valid()); 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.Step()); 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(11, s_autofill_profiles_bounded.ColumnInt64(0)); 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.Step()); 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(41, s_autofill_profiles_bounded.ColumnInt64(0)); 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.Step()); 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(51, s_autofill_profiles_bounded.ColumnInt64(0)); 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.Step()); 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(61, s_autofill_profiles_bounded.ColumnInt64(0)); 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_autofill_profiles_bounded.Step()); 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3UL, credit_card_guids.size()); 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000006", credit_card_guids[0]); 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000007", credit_card_guids[1]); 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000008", credit_card_guids[2]); 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_credit_cards_bounded( 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM credit_cards")); 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards_bounded.is_valid()); 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards_bounded.Step()); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(47, s_credit_cards_bounded.ColumnInt64(0)); 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards_bounded.Step()); 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(57, s_credit_cards_bounded.ColumnInt64(0)); 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards_bounded.Step()); 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(67, s_credit_cards_bounded.ColumnInt64(0)); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_credit_cards_bounded.Step()); 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove all entries modified on or after time 51 (unbounded range). 1362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) table_->RemoveAutofillDataModifiedBetween( 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::FromTimeT(51), Time(), 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_guids, &credit_card_guids); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, profile_guids.size()); 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000004", profile_guids[0]); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000005", profile_guids[1]); 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_autofill_profiles_unbounded( 13692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles")); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_unbounded.is_valid()); 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_unbounded.Step()); 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(11, s_autofill_profiles_unbounded.ColumnInt64(0)); 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_unbounded.Step()); 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(41, s_autofill_profiles_unbounded.ColumnInt64(0)); 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_autofill_profiles_unbounded.Step()); 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, credit_card_guids.size()); 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000010", credit_card_guids[0]); 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000011", credit_card_guids[1]); 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_credit_cards_unbounded( 13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM credit_cards")); 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards_unbounded.is_valid()); 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards_unbounded.Step()); 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(47, s_credit_cards_unbounded.ColumnInt64(0)); 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_credit_cards_unbounded.Step()); 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove all remaining entries. 1389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) table_->RemoveAutofillDataModifiedBetween( 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time(), Time(), 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_guids, &credit_card_guids); 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, profile_guids.size()); 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000000", profile_guids[0]); 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000003", profile_guids[1]); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_autofill_profiles_empty( 13962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM autofill_profiles")); 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_empty.is_valid()); 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_autofill_profiles_empty.Step()); 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, credit_card_guids.size()); 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000009", credit_card_guids[0]); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s_credit_cards_empty( 14032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT date_modified FROM credit_cards")); 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(s_credit_cards_empty.is_valid()); 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(s_credit_cards_empty.Step()); 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 140990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(AutofillTableTest, RemoveOriginURLsModifiedBetween) { 141090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Populate the autofill_profiles and credit_cards tables. 141190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(db_->GetSQLConnection()->Execute( 141290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "INSERT INTO autofill_profiles (guid, origin, date_modified) " 141390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000000', '', 11);" 141490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "INSERT INTO autofill_profiles (guid, origin, date_modified) " 141590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000001', " 141690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) " 'https://www.example.com/', 21);" 141790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "INSERT INTO autofill_profiles (guid, origin, date_modified) " 141890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000002', 'Chrome settings', 31);" 141990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "INSERT INTO credit_cards (guid, origin, date_modified) " 142090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000003', '', 17);" 142190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "INSERT INTO credit_cards (guid, origin, date_modified) " 142290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000004', " 142390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) " 'https://www.example.com/', 27);" 142490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "INSERT INTO credit_cards (guid, origin, date_modified) " 142590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "VALUES('00000000-0000-0000-0000-000000000005', 'Chrome settings', " 142690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) " 37);")); 142790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 142890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Remove all origin URLs set in the bounded time range [21,27). 142990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedVector<AutofillProfile> profiles; 143090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) table_->RemoveOriginURLsModifiedBetween( 143190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Time::FromTimeT(21), Time::FromTimeT(27), &profiles); 143290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(1UL, profiles.size()); 143390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("00000000-0000-0000-0000-000000000001", profiles[0]->guid()); 143490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_autofill_profiles_bounded( 143590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 143690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SELECT date_modified, origin FROM autofill_profiles")); 143790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.is_valid()); 143890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.Step()); 143990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(11, s_autofill_profiles_bounded.ColumnInt64(0)); 144090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(), s_autofill_profiles_bounded.ColumnString(1)); 144190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.Step()); 144290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(21, s_autofill_profiles_bounded.ColumnInt64(0)); 144390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(), s_autofill_profiles_bounded.ColumnString(1)); 144490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_bounded.Step()); 144590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(31, s_autofill_profiles_bounded.ColumnInt64(0)); 144690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("Chrome settings", s_autofill_profiles_bounded.ColumnString(1)); 144790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_credit_cards_bounded( 144890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 144990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SELECT date_modified, origin FROM credit_cards")); 145090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_credit_cards_bounded.is_valid()); 145190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_credit_cards_bounded.Step()); 145290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(17, s_credit_cards_bounded.ColumnInt64(0)); 145390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(), s_credit_cards_bounded.ColumnString(1)); 145490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_credit_cards_bounded.Step()); 145590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(27, s_credit_cards_bounded.ColumnInt64(0)); 145690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("https://www.example.com/", 145790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) s_credit_cards_bounded.ColumnString(1)); 145890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_credit_cards_bounded.Step()); 145990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(37, s_credit_cards_bounded.ColumnInt64(0)); 146090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("Chrome settings", s_credit_cards_bounded.ColumnString(1)); 146190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 146290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Remove all origin URLS. 146390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profiles.clear(); 146490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) table_->RemoveOriginURLsModifiedBetween(Time(), Time(), &profiles); 146590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(0UL, profiles.size()); 146690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_autofill_profiles_all( 146790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 146890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SELECT date_modified, origin FROM autofill_profiles")); 146990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_all.is_valid()); 147090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_all.Step()); 147190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(11, s_autofill_profiles_all.ColumnInt64(0)); 147290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(), s_autofill_profiles_all.ColumnString(1)); 147390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_all.Step()); 147490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(21, s_autofill_profiles_all.ColumnInt64(0)); 147590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(), s_autofill_profiles_all.ColumnString(1)); 147690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_autofill_profiles_all.Step()); 147790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(31, s_autofill_profiles_all.ColumnInt64(0)); 147890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("Chrome settings", s_autofill_profiles_all.ColumnString(1)); 147990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sql::Statement s_credit_cards_all( 148090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) db_->GetSQLConnection()->GetUniqueStatement( 148190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SELECT date_modified, origin FROM credit_cards")); 148290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_credit_cards_all.is_valid()); 148390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_credit_cards_all.Step()); 148490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(17, s_credit_cards_all.ColumnInt64(0)); 148590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(), s_credit_cards_all.ColumnString(1)); 148690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_credit_cards_all.Step()); 148790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(27, s_credit_cards_all.ColumnInt64(0)); 148890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(), s_credit_cards_all.ColumnString(1)); 148990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(s_credit_cards_all.Step()); 149090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(37, s_credit_cards_all.ColumnInt64(0)); 149190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("Chrome settings", s_credit_cards_all.ColumnString(1)); 149290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 149390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_GetAllAutofillEntries_NoResults) { 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 14962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&entries)); 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, entries.size()); 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_GetAllAutofillEntries_OneResult) { 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChangeList changes; 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, std::vector<Time> > name_value_times_map; 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time_t start = 0; 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Time> timestamps1; 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 15102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 15112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Time::FromTimeT(start))); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamps1.push_back(Time::FromTimeT(start)); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string key1("NameSuperman"); 15148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) name_value_times_map.insert( 15158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::pair<std::string, std::vector<Time> >(key1, timestamps1)); 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntrySet expected_entries(CompareAutofillEntries); 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey ak1(ASCIIToUTF16("Name"), ASCIIToUTF16("Superman")); 1519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillEntry ae1(ak1, timestamps1.front(), timestamps1.back()); 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_entries.insert(ae1); 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&entries)); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntrySet entry_set(entries.begin(), entries.end(), 15268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CompareAutofillEntries); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CompareAutofillEntrySets(entry_set, expected_entries); 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_GetAllAutofillEntries_TwoDistinct) { 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChangeList changes; 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, std::vector<Time> > name_value_times_map; 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time_t start = 0; 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Time> timestamps1; 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 15402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 15412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Time::FromTimeT(start))); 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamps1.push_back(Time::FromTimeT(start)); 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string key1("NameSuperman"); 15448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) name_value_times_map.insert( 15458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::pair<std::string, std::vector<Time> >(key1, timestamps1)); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ++start; 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Time> timestamps2; 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Clark Kent"); 15512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 15522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Time::FromTimeT(start))); 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamps2.push_back(Time::FromTimeT(start)); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string key2("NameClark Kent"); 15558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) name_value_times_map.insert( 15568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::pair<std::string, std::vector<Time> >(key2, timestamps2)); 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntrySet expected_entries(CompareAutofillEntries); 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey ak1(ASCIIToUTF16("Name"), ASCIIToUTF16("Superman")); 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey ak2(ASCIIToUTF16("Name"), ASCIIToUTF16("Clark Kent")); 1561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillEntry ae1(ak1, timestamps1.front(), timestamps1.back()); 1562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillEntry ae2(ak2, timestamps2.front(), timestamps2.back()); 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_entries.insert(ae1); 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_entries.insert(ae2); 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 15682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&entries)); 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntrySet entry_set(entries.begin(), entries.end(), 15708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CompareAutofillEntries); 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CompareAutofillEntrySets(entry_set, expected_entries); 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillTableTest, Autofill_GetAllAutofillEntries_TwoSame) { 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillChangeList changes; 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, std::vector<Time> > name_value_times_map; 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Time> timestamps; 15808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) time_t start = 0; 15818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (int i = 0; i < 2; ++i, ++start) { 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.name = ASCIIToUTF16("Name"); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Superman"); 15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(table_->AddFormFieldValueTime(field, &changes, 15862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Time::FromTimeT(start))); 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamps.push_back(Time::FromTimeT(start)); 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string key("NameSuperman"); 15918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) name_value_times_map.insert( 15928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::pair<std::string, std::vector<Time> >(key, timestamps)); 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntrySet expected_entries(CompareAutofillEntries); 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillKey ak1(ASCIIToUTF16("Name"), ASCIIToUTF16("Superman")); 1596a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillEntry ae1(ak1, timestamps.front(), timestamps.back()); 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_entries.insert(ae1); 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillEntry> entries; 16012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(table_->GetAllAutofillEntries(&entries)); 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillEntrySet entry_set(entries.begin(), entries.end(), 16038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CompareAutofillEntries); 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CompareAutofillEntrySets(entry_set, expected_entries); 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 1609