Chromium Code Reviews| Index: chrome/browser/search_engines/template_url_service_unittest.cc |
| diff --git a/chrome/browser/search_engines/template_url_service_unittest.cc b/chrome/browser/search_engines/template_url_service_unittest.cc |
| index 3e86c1a9cdaf6479557021e3306207ff19f742bf..461a6f5f36fd82a71c29b360a2833ecdfcfb52c8 100644 |
| --- a/chrome/browser/search_engines/template_url_service_unittest.cc |
| +++ b/chrome/browser/search_engines/template_url_service_unittest.cc |
| @@ -74,6 +74,7 @@ std::unique_ptr<TemplateURL> CreateKeywordWithDate( |
| const std::string& encodings, |
| Time date_created, |
| Time last_modified, |
| + Time last_visited, |
| TemplateURL::Type type = TemplateURL::NORMAL) { |
| TemplateURLData data; |
| data.SetShortName(base::UTF8ToUTF16(short_name)); |
| @@ -89,6 +90,7 @@ std::unique_ptr<TemplateURL> CreateKeywordWithDate( |
| encodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| data.date_created = date_created; |
| data.last_modified = last_modified; |
| + data.last_visited = last_visited; |
| return base::MakeUnique<TemplateURL>(data, type); |
| } |
| @@ -103,16 +105,19 @@ TemplateURL* AddKeywordWithDate( |
| bool safe_for_autoreplace, |
| const std::string& encodings, |
| Time date_created, |
| - Time last_modified) { |
| + Time last_modified, |
| + Time last_visited) { |
| TemplateURL* t_url = model->Add(CreateKeywordWithDate( |
| - model, short_name, keyword, url, suggest_url, alternate_url, favicon_url, |
| - safe_for_autoreplace, 0, encodings, date_created, last_modified)); |
| + model, short_name, keyword, url, suggest_url, alternate_url, |
| + favicon_url, safe_for_autoreplace, 0, encodings, date_created, |
| + last_modified, last_visited)); |
| EXPECT_NE(0, t_url->id()); |
| return t_url; |
| } |
| // Checks that the two TemplateURLs are similar. It does not check the id, the |
| -// date_created or the last_modified time. Neither pointer should be NULL. |
| +// date_created, the last_modified and the last_visit time. Neither pointer |
|
Peter Kasting
2016/11/21 03:35:08
Nit: Shorter, and more future-proof: "It does not
ltian
2016/11/28 22:08:01
Done.
|
| +// should be NULL. |
| void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual) { |
| ASSERT_TRUE(expected != NULL); |
| ASSERT_TRUE(actual != NULL); |
| @@ -154,7 +159,8 @@ class TemplateURLServiceTest : public testing::Test { |
| bool safe_for_autoreplace, |
| const std::string& encodings, |
| Time date_created, |
| - Time last_modified); |
| + Time last_modified, |
| + Time last_visited); |
| // Verifies the two TemplateURLs are equal. |
| void AssertEquals(const TemplateURL& expected, const TemplateURL& actual); |
| @@ -222,10 +228,12 @@ TemplateURL* TemplateURLServiceTest::AddKeywordWithDate( |
| bool safe_for_autoreplace, |
| const std::string& encodings, |
| Time date_created, |
| - Time last_modified) { |
| + Time last_modified, |
| + Time last_visited) { |
| return ::AddKeywordWithDate(model(), short_name, keyword, url, suggest_url, |
| alternate_url, favicon_url, safe_for_autoreplace, |
| - encodings, date_created, last_modified); |
| + encodings, date_created, last_modified, |
| + last_visited); |
| } |
| void TemplateURLServiceTest::AssertEquals(const TemplateURL& expected, |
| @@ -242,6 +250,7 @@ void TemplateURLServiceTest::AssertEquals(const TemplateURL& expected, |
| ASSERT_EQ(expected.id(), actual.id()); |
| ASSERT_EQ(expected.date_created(), actual.date_created()); |
| AssertTimesEqual(expected.last_modified(), actual.last_modified()); |
| + ASSERT_EQ(expected.last_visited(), actual.last_visited()); |
| ASSERT_EQ(expected.sync_guid(), actual.sync_guid()); |
| ASSERT_EQ(expected.search_terms_replacement_key(), |
| actual.search_terms_replacement_key()); |
| @@ -267,6 +276,7 @@ std::unique_ptr<TemplateURL> TemplateURLServiceTest::CreatePreloadedTemplateURL( |
| data.input_encodings.push_back("UTF-8"); |
| data.date_created = Time::FromTimeT(100); |
| data.last_modified = Time::FromTimeT(100); |
| + data.last_visited = Time::FromTimeT(100); |
| data.prepopulate_id = prepopulate_id; |
| return base::MakeUnique<TemplateURL>(data); |
| } |
| @@ -301,6 +311,7 @@ TEST_F(TemplateURLServiceTest, AddUpdateRemove) { |
| data.safe_for_autoreplace = true; |
| data.date_created = Time::FromTimeT(100); |
| data.last_modified = Time::FromTimeT(100); |
| + data.last_visited = Time::FromTimeT(100); |
| data.sync_guid = "00000000-0000-0000-0000-000000000001"; |
| TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); |
| ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("keyword"), |
| @@ -367,7 +378,7 @@ TEST_F(TemplateURLServiceTest, AddSameKeyword) { |
| AddKeywordWithDate( |
| "first", "keyword", "http://test1", std::string(), std::string(), |
| - std::string(), true, "UTF-8", Time(), Time()); |
| + std::string(), true, "UTF-8", Time(), Time(), Time()); |
| VerifyObserverCount(1); |
| // Test what happens when we try to add a TemplateURL with the same keyword as |
| @@ -418,10 +429,10 @@ TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { |
| AddKeywordWithDate( |
| "replaceable", "keyword1", "http://test1", std::string(), std::string(), |
| - std::string(), true, "UTF-8", Time(), Time()); |
| + std::string(), true, "UTF-8", Time(), Time(), Time()); |
| TemplateURL* original2 = AddKeywordWithDate( |
| "nonreplaceable", "keyword2", "http://test2", std::string(), |
| - std::string(), std::string(), false, "UTF-8", Time(), Time()); |
| + std::string(), std::string(), false, "UTF-8", Time(), Time(), Time()); |
| model()->RegisterOmniboxKeyword("test3", "extension", "keyword3", |
| "http://test3"); |
| TemplateURL* original3 = |
| @@ -467,7 +478,7 @@ TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) { |
| // Adding a keyword that matches the extension. |
| AddKeywordWithDate( |
| "replaceable", "keyword", "http://test1", std::string(), std::string(), |
| - std::string(), true, "UTF-8", Time(), Time()); |
| + std::string(), true, "UTF-8", Time(), Time(), Time()); |
| // Adding another replaceable keyword should remove the existing one, but |
| // leave the extension as is. |
| @@ -518,24 +529,24 @@ TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) { |
| // Create one with a 0 time. |
| AddKeywordWithDate("name1", "key1", "http://foo1", "http://suggest1", |
| std::string(), "http://icon1", true, "UTF-8;UTF-16", |
| - Time(), Time()); |
| + Time(), Time(), Time()); |
| // Create one for now and +/- 1 day. |
| AddKeywordWithDate("name2", "key2", "http://foo2", "http://suggest2", |
| std::string(), "http://icon2", true, "UTF-8;UTF-16", |
| - now - one_day, Time()); |
| + now - one_day, Time(), Time()); |
| AddKeywordWithDate("name3", "key3", "http://foo3", std::string(), |
| std::string(), std::string(), true, std::string(), now, |
| - Time()); |
| + Time(), Time()); |
| AddKeywordWithDate("name4", "key4", "http://foo4", std::string(), |
| std::string(), std::string(), true, std::string(), |
| - now + one_day, Time()); |
| + now + one_day, Time(), Time()); |
| // Try the other three states. |
| AddKeywordWithDate("name5", "key5", "http://foo5", "http://suggest5", |
| std::string(), "http://icon5", false, "UTF-8;UTF-16", now, |
| - Time()); |
| + Time(), Time()); |
| AddKeywordWithDate("name6", "key6", "http://foo6", "http://suggest6", |
| std::string(), "http://icon6", false, "UTF-8;UTF-16", |
| - month_ago, Time()); |
| + month_ago, Time(), Time()); |
| // We just added a few items, validate them. |
| EXPECT_EQ(6U, model()->GetTemplateURLs().size()); |
| @@ -582,13 +593,13 @@ TEST_F(TemplateURLServiceTest, ClearBrowsingData_KeywordsForUrls) { |
| // Create one for now and +/- 1 day. |
| AddKeywordWithDate("name1", "key1", "http://foo1", "http://suggest1", |
| std::string(), "http://icon2", true, "UTF-8;UTF-16", |
| - now - one_day, Time()); |
| + now - one_day, Time(), Time()); |
| AddKeywordWithDate("name2", "key2", "http://foo2", std::string(), |
| std::string(), std::string(), true, std::string(), now, |
| - Time()); |
| + Time(), Time()); |
| AddKeywordWithDate("name3", "key3", "http://foo3", std::string(), |
| std::string(), std::string(), true, std::string(), |
| - now + one_day, Time()); |
| + now + one_day, Time(), Time()); |
| // We just added a few items, validate them. |
| EXPECT_EQ(3U, model()->GetTemplateURLs().size()); |
| @@ -640,6 +651,7 @@ TEST_F(TemplateURLServiceTest, Reset) { |
| data.favicon_url = GURL("http://favicon.url"); |
| data.date_created = Time::FromTimeT(100); |
| data.last_modified = Time::FromTimeT(100); |
| + data.last_visited = Time::FromTimeT(100); |
| TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); |
| VerifyObserverCount(1); |
| @@ -682,7 +694,7 @@ TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { |
| const size_t initial_count = model()->GetTemplateURLs().size(); |
| TemplateURL* t_url = AddKeywordWithDate( |
| "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", |
| - std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
| + std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time(), Time()); |
| test_util()->ResetObserverCount(); |
| model()->SetUserSelectedDefaultSearchProvider(t_url); |
| @@ -710,7 +722,7 @@ TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { |
| NULL)); |
| TemplateURL* t_url = AddKeywordWithDate( |
| "name1", "foo", "http://foo1", "http://sugg1", std::string(), |
| - "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
| + "http://icon1", true, "UTF-8;UTF-16", Time(), Time(), Time()); |
| // Can still replace, newly added template url is marked safe to replace. |
| ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"), |
| @@ -731,7 +743,7 @@ TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) { |
| GURL("http://foo.com"), NULL)); |
| TemplateURL* t_url = AddKeywordWithDate( |
| "name1", "foo", "http://foo.com", "http://sugg1", std::string(), |
| - "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
| + "http://icon1", true, "UTF-8;UTF-16", Time(), Time(), Time()); |
| // Can still replace, newly added template url is marked safe to replace. |
| ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("bar"), |
| @@ -767,6 +779,7 @@ TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) { |
| data.instant_url = "http://instant"; |
| data.date_created = Time::FromTimeT(100); |
| data.last_modified = Time::FromTimeT(100); |
| + data.last_visited = Time::FromTimeT(100); |
| TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); |
| const TemplateURLID id = t_url->id(); |
| @@ -812,7 +825,7 @@ TEST_F(TemplateURLServiceTest, RepairPrepopulatedSearchEngines) { |
| TemplateURL* user_dse = AddKeywordWithDate( |
| "malware", "google.com", "http://www.goo.com/s?q={searchTerms}", |
| std::string(), std::string(), std::string(), |
| - true, "UTF-8", Time(), Time()); |
| + true, "UTF-8", Time(), Time(), Time()); |
| model()->SetUserSelectedDefaultSearchProvider(user_dse); |
| EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
| @@ -908,7 +921,7 @@ TEST_F(TemplateURLServiceTest, UpdateKeywordSearchTermsForURL) { |
| test_util()->ChangeModelToLoadState(); |
| AddKeywordWithDate("name", "x", "http://x/foo?q={searchTerms}", |
| "http://sugg1", "http://x/foo#query={searchTerms}", |
| - "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); |
| + "http://icon1", false, "UTF-8;UTF-16", Time(), Time(), Time()); |
|
Peter Kasting
2016/11/21 03:35:08
Nit: 80 columns (several places)
(Running git cl
ltian
2016/11/28 22:08:02
Done.
|
| for (size_t i = 0; i < arraysize(data); ++i) { |
| TemplateURLService::URLVisitedDetails details = { |
| @@ -930,7 +943,7 @@ TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) { |
| test_util()->ChangeModelToLoadState(); |
| AddKeywordWithDate("name", "x", "http://x/foo", "http://sugg1", std::string(), |
| - "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); |
| + "http://icon1", false, "UTF-8;UTF-16", Time(), Time(), Time()); |
| for (size_t i = 0; i < arraysize(data); ++i) { |
| TemplateURLService::URLVisitedDetails details = { |
| @@ -949,7 +962,7 @@ TEST_F(TemplateURLServiceWithoutFallbackTest, ChangeGoogleBaseValue) { |
| test_util()->SetGoogleBaseURL(GURL("http://google.com/")); |
| const TemplateURL* t_url = AddKeywordWithDate( |
| "name", "google.com", "{google:baseURL}?q={searchTerms}", "http://sugg1", |
| - std::string(), "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); |
| + std::string(), "http://icon1", false, "UTF-8;UTF-16", Time(), Time(), Time()); |
| ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com")); |
| EXPECT_EQ("google.com", t_url->url_ref().GetHost(search_terms_data())); |
| EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword()); |
| @@ -972,7 +985,7 @@ TEST_F(TemplateURLServiceWithoutFallbackTest, ChangeGoogleBaseValue) { |
| TemplateURL* manual = AddKeywordWithDate( |
| "manual", "google.de", "http://google.de/search?q={searchTerms}", |
| std::string(), std::string(), std::string(), false, "UTF-8", Time(), |
| - Time()); |
| + Time(), Time()); |
| test_util()->SetGoogleBaseURL(GURL("http://google.de")); |
| // Verify that the manual entry is untouched, and the autogenerated keyword |
| @@ -1009,7 +1022,7 @@ TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) { |
| TemplateURL* t_url = AddKeywordWithDate( |
| "keyword", "keyword", "http://foo.com/foo?query={searchTerms}", |
| "http://sugg1", std::string(), "http://icon1", true, "UTF-8;UTF-16", |
| - base::Time::Now(), base::Time::Now()); |
| + base::Time::Now(), base::Time::Now(), base::Time::Now()); |
|
Peter Kasting
2016/11/21 03:35:08
Is it important that we set this to Time::Now()?
ltian
2016/11/28 22:08:02
Done.
|
| // Add a visit that matches the url of the keyword. |
| history::HistoryService* history = HistoryServiceFactory::GetForProfile( |
| @@ -1220,7 +1233,7 @@ TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) { |
| // Set a regular default search provider. |
| TemplateURL* regular_default = AddKeywordWithDate( |
| "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", |
| - std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
| + std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time(), Time()); |
| VerifyObserverCount(1); |
| model()->SetUserSelectedDefaultSearchProvider(regular_default); |
| // Adding the URL and setting the default search provider should have caused |
| @@ -1416,14 +1429,15 @@ TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) { |
| TemplateURL* user_dse = AddKeywordWithDate( |
| "user", "user", "http://www.goo.com/s?q={searchTerms}", |
| std::string(), std::string(), std::string(), |
| - true, "UTF-8", Time(), Time()); |
| + true, "UTF-8", Time(), Time(), Time()); |
| model()->SetUserSelectedDefaultSearchProvider(user_dse); |
| EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
| std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate( |
| model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}", |
| std::string(), std::string(), std::string(), true, kPrepopulatedId, |
| - "UTF-8", Time(), Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
| + "UTF-8", Time(), Time(), Time(), |
| + TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
| std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
| new TemplateURL::AssociatedExtensionInfo("ext")); |
| extension_info->wants_to_be_default_engine = true; |
| @@ -1442,14 +1456,14 @@ TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { |
| TemplateURL* user_dse = AddKeywordWithDate( |
| "user", "user", "http://www.goo.com/s?q={searchTerms}", |
| std::string(), std::string(), std::string(), |
| - true, "UTF-8", Time(), Time()); |
| + true, "UTF-8", Time(), Time(), Time()); |
| model()->SetUserSelectedDefaultSearchProvider(user_dse); |
| EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
| std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate( |
| model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", |
| std::string(), std::string(), std::string(), true, 0, "UTF-8", Time(), |
| - Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
| + Time(), Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
| std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
| new TemplateURL::AssociatedExtensionInfo("ext1")); |
| extension_info->wants_to_be_default_engine = false; |
| @@ -1460,7 +1474,8 @@ TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { |
| ext_dse = CreateKeywordWithDate( |
| model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}", |
| std::string(), std::string(), std::string(), true, kPrepopulatedId, |
| - "UTF-8", Time(), Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
| + "UTF-8", Time(), Time(), Time(), |
| + TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
| extension_info.reset(new TemplateURL::AssociatedExtensionInfo("ext2")); |
| extension_info->wants_to_be_default_engine = true; |
| TemplateURL* ext_dse_ptr = model()->AddExtensionControlledTURL( |
| @@ -1506,7 +1521,8 @@ TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) { |
| std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate( |
| model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", |
| std::string(), std::string(), std::string(), true, kPrepopulatedId, |
| - "UTF-8", Time(), Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
| + "UTF-8", Time(), Time(), Time(), |
| + TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
| std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
| new TemplateURL::AssociatedExtensionInfo("ext1")); |
| extension_info->wants_to_be_default_engine = true; |
| @@ -1518,3 +1534,24 @@ TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) { |
| actual_managed_default = model()->GetDefaultSearchProvider(); |
| ExpectSimilar(expected_managed_default.get(), actual_managed_default); |
| } |
| + |
| +TEST_F(TemplateURLServiceTest, LastVisitedTimeUpdate) { |
| + test_util()->VerifyLoad(); |
| + TemplateURL* original_url = AddKeywordWithDate( |
| + "name1", "key1", "http://foo1","http://suggest1", |
| + std::string(), "http://icon1", true, "UTF-8;UTF-16", |
| + Time(), Time(), Time()); |
| + base::Time original_last_visited = original_url->last_visited(); |
|
Peter Kasting
2016/11/21 03:35:08
Nit: Can be const (2 places)
ltian
2016/11/28 22:08:02
Done.
|
| + model()->UpdateTemplateURLVisitTime(original_url); |
| + TemplateURL* modified_url = model()->GetTemplateURLForKeyword( |
|
Peter Kasting
2016/11/21 03:35:08
Nit: If you follow my next comment, then this coul
ltian
2016/11/28 22:08:01
git cl format does as you suggest.
Peter Kasting
2016/12/01 07:38:24
"Inlined into the next statement" isn't about line
|
| + ASCIIToUTF16("key1")); |
| + base::Time modifed_last_visited = modified_url->last_visited(); |
| + EXPECT_NE(original_last_visited, modified_url->last_visited()); |
|
Peter Kasting
2016/11/21 03:35:08
Nit: Use |modifed_last_visited|
ltian
2016/11/28 22:08:01
Done.
|
| + test_util()->ResetModel(true); |
| + TemplateURL* reloaded_url = model()->GetTemplateURLForKeyword( |
|
Peter Kasting
2016/11/21 03:35:08
Nit: Prefer to linebreak after '=' rather than in
ltian
2016/11/28 22:08:02
Done.
|
| + ASCIIToUTF16("key1")); |
| + // Times are stored with a granularity of one second, there is a loss |
| + // of precision when serializing and deserializing the timestamps. |
|
Peter Kasting
2016/11/21 03:35:08
Nit: Comment not necessary (this is just explainin
ltian
2016/11/28 22:08:02
Done.
|
| + AssertTimesEqual(modifed_last_visited, reloaded_url ->last_visited()); |
|
Peter Kasting
2016/11/21 03:35:08
Nit: No space before ->
ltian
2016/11/28 22:08:02
Done.
|
| + |
| +} |