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

Side by Side Diff: chrome/browser/search_engines/template_url_service_unittest.cc

Issue 2498053002: Add field to monitor last visited time for each search engine (Closed)
Patch Set: Remove sync operations of last_visited field. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/search_engines/template_url_service.h" 5 #include "components/search_engines/template_url_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 const std::string& keyword, 67 const std::string& keyword,
68 const std::string& url, 68 const std::string& url,
69 const std::string& suggest_url, 69 const std::string& suggest_url,
70 const std::string& alternate_url, 70 const std::string& alternate_url,
71 const std::string& favicon_url, 71 const std::string& favicon_url,
72 bool safe_for_autoreplace, 72 bool safe_for_autoreplace,
73 int prepopulate_id, 73 int prepopulate_id,
74 const std::string& encodings, 74 const std::string& encodings,
75 Time date_created, 75 Time date_created,
76 Time last_modified, 76 Time last_modified,
77 Time last_visited,
77 TemplateURL::Type type = TemplateURL::NORMAL) { 78 TemplateURL::Type type = TemplateURL::NORMAL) {
78 TemplateURLData data; 79 TemplateURLData data;
79 data.SetShortName(base::UTF8ToUTF16(short_name)); 80 data.SetShortName(base::UTF8ToUTF16(short_name));
80 data.SetKeyword(base::UTF8ToUTF16(keyword)); 81 data.SetKeyword(base::UTF8ToUTF16(keyword));
81 data.SetURL(url); 82 data.SetURL(url);
82 data.suggestions_url = suggest_url; 83 data.suggestions_url = suggest_url;
83 if (!alternate_url.empty()) 84 if (!alternate_url.empty())
84 data.alternate_urls.push_back(alternate_url); 85 data.alternate_urls.push_back(alternate_url);
85 data.favicon_url = GURL(favicon_url); 86 data.favicon_url = GURL(favicon_url);
86 data.safe_for_autoreplace = safe_for_autoreplace; 87 data.safe_for_autoreplace = safe_for_autoreplace;
87 data.prepopulate_id = prepopulate_id; 88 data.prepopulate_id = prepopulate_id;
88 data.input_encodings = base::SplitString( 89 data.input_encodings = base::SplitString(
89 encodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); 90 encodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
90 data.date_created = date_created; 91 data.date_created = date_created;
91 data.last_modified = last_modified; 92 data.last_modified = last_modified;
93 data.last_visited = last_visited;
92 return base::MakeUnique<TemplateURL>(data, type); 94 return base::MakeUnique<TemplateURL>(data, type);
93 } 95 }
94 96
95 TemplateURL* AddKeywordWithDate( 97 TemplateURL* AddKeywordWithDate(TemplateURLService* model,
96 TemplateURLService* model, 98 const std::string& short_name,
97 const std::string& short_name, 99 const std::string& keyword,
98 const std::string& keyword, 100 const std::string& url,
99 const std::string& url, 101 const std::string& suggest_url,
100 const std::string& suggest_url, 102 const std::string& alternate_url,
101 const std::string& alternate_url, 103 const std::string& favicon_url,
102 const std::string& favicon_url, 104 bool safe_for_autoreplace,
103 bool safe_for_autoreplace, 105 const std::string& encodings,
104 const std::string& encodings, 106 Time date_created,
105 Time date_created, 107 Time last_modified,
106 Time last_modified) { 108 Time last_visited) {
107 TemplateURL* t_url = model->Add(CreateKeywordWithDate( 109 TemplateURL* t_url = model->Add(CreateKeywordWithDate(
108 model, short_name, keyword, url, suggest_url, alternate_url, favicon_url, 110 model, short_name, keyword, url, suggest_url, alternate_url, favicon_url,
109 safe_for_autoreplace, 0, encodings, date_created, last_modified)); 111 safe_for_autoreplace, 0, encodings, date_created, last_modified,
112 last_visited));
110 EXPECT_NE(0, t_url->id()); 113 EXPECT_NE(0, t_url->id());
111 return t_url; 114 return t_url;
112 } 115 }
113 116
114 // Checks that the two TemplateURLs are similar. It does not check the id, the 117 // Checks that the two TemplateURLs are similar. It does not check the id or
115 // date_created or the last_modified time. Neither pointer should be NULL. 118 // any time-related fields. Neither pointer should be NULL.
116 void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual) { 119 void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual) {
117 ASSERT_TRUE(expected != NULL); 120 ASSERT_TRUE(expected != NULL);
118 ASSERT_TRUE(actual != NULL); 121 ASSERT_TRUE(actual != NULL);
119 EXPECT_EQ(expected->short_name(), actual->short_name()); 122 EXPECT_EQ(expected->short_name(), actual->short_name());
120 EXPECT_EQ(expected->keyword(), actual->keyword()); 123 EXPECT_EQ(expected->keyword(), actual->keyword());
121 EXPECT_EQ(expected->url(), actual->url()); 124 EXPECT_EQ(expected->url(), actual->url());
122 EXPECT_EQ(expected->suggestions_url(), actual->suggestions_url()); 125 EXPECT_EQ(expected->suggestions_url(), actual->suggestions_url());
123 EXPECT_EQ(expected->favicon_url(), actual->favicon_url()); 126 EXPECT_EQ(expected->favicon_url(), actual->favicon_url());
124 EXPECT_EQ(expected->alternate_urls(), actual->alternate_urls()); 127 EXPECT_EQ(expected->alternate_urls(), actual->alternate_urls());
125 EXPECT_EQ(expected->safe_for_autoreplace(), actual->safe_for_autoreplace()); 128 EXPECT_EQ(expected->safe_for_autoreplace(), actual->safe_for_autoreplace());
(...skipping 21 matching lines...) Expand all
147 150
148 TemplateURL* AddKeywordWithDate(const std::string& short_name, 151 TemplateURL* AddKeywordWithDate(const std::string& short_name,
149 const std::string& keyword, 152 const std::string& keyword,
150 const std::string& url, 153 const std::string& url,
151 const std::string& suggest_url, 154 const std::string& suggest_url,
152 const std::string& alternate_url, 155 const std::string& alternate_url,
153 const std::string& favicon_url, 156 const std::string& favicon_url,
154 bool safe_for_autoreplace, 157 bool safe_for_autoreplace,
155 const std::string& encodings, 158 const std::string& encodings,
156 Time date_created, 159 Time date_created,
157 Time last_modified); 160 Time last_modified,
161 Time last_visited);
158 162
159 // Verifies the two TemplateURLs are equal. 163 // Verifies the two TemplateURLs are equal.
160 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual); 164 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual);
161 165
162 // Verifies the two timestamps are equal, within the expected degree of 166 // Verifies the two timestamps are equal, within the expected degree of
163 // precision. 167 // precision.
164 void AssertTimesEqual(const base::Time& expected, const base::Time& actual); 168 void AssertTimesEqual(const base::Time& expected, const base::Time& actual);
165 169
166 // Create an URL that appears to have been prepopulated, but won't be in the 170 // Create an URL that appears to have been prepopulated, but won't be in the
167 // current data. 171 // current data.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 TemplateURL* TemplateURLServiceTest::AddKeywordWithDate( 219 TemplateURL* TemplateURLServiceTest::AddKeywordWithDate(
216 const std::string& short_name, 220 const std::string& short_name,
217 const std::string& keyword, 221 const std::string& keyword,
218 const std::string& url, 222 const std::string& url,
219 const std::string& suggest_url, 223 const std::string& suggest_url,
220 const std::string& alternate_url, 224 const std::string& alternate_url,
221 const std::string& favicon_url, 225 const std::string& favicon_url,
222 bool safe_for_autoreplace, 226 bool safe_for_autoreplace,
223 const std::string& encodings, 227 const std::string& encodings,
224 Time date_created, 228 Time date_created,
225 Time last_modified) { 229 Time last_modified,
230 Time last_visited) {
226 return ::AddKeywordWithDate(model(), short_name, keyword, url, suggest_url, 231 return ::AddKeywordWithDate(model(), short_name, keyword, url, suggest_url,
227 alternate_url, favicon_url, safe_for_autoreplace, 232 alternate_url, favicon_url, safe_for_autoreplace,
228 encodings, date_created, last_modified); 233 encodings, date_created, last_modified,
234 last_visited);
229 } 235 }
230 236
231 void TemplateURLServiceTest::AssertEquals(const TemplateURL& expected, 237 void TemplateURLServiceTest::AssertEquals(const TemplateURL& expected,
232 const TemplateURL& actual) { 238 const TemplateURL& actual) {
233 ASSERT_EQ(expected.short_name(), actual.short_name()); 239 ASSERT_EQ(expected.short_name(), actual.short_name());
234 ASSERT_EQ(expected.keyword(), actual.keyword()); 240 ASSERT_EQ(expected.keyword(), actual.keyword());
235 ASSERT_EQ(expected.url(), actual.url()); 241 ASSERT_EQ(expected.url(), actual.url());
236 ASSERT_EQ(expected.suggestions_url(), actual.suggestions_url()); 242 ASSERT_EQ(expected.suggestions_url(), actual.suggestions_url());
237 ASSERT_EQ(expected.favicon_url(), actual.favicon_url()); 243 ASSERT_EQ(expected.favicon_url(), actual.favicon_url());
238 ASSERT_EQ(expected.alternate_urls(), actual.alternate_urls()); 244 ASSERT_EQ(expected.alternate_urls(), actual.alternate_urls());
239 ASSERT_EQ(expected.prepopulate_id(), actual.prepopulate_id()); 245 ASSERT_EQ(expected.prepopulate_id(), actual.prepopulate_id());
240 ASSERT_EQ(expected.safe_for_autoreplace(), actual.safe_for_autoreplace()); 246 ASSERT_EQ(expected.safe_for_autoreplace(), actual.safe_for_autoreplace());
241 ASSERT_EQ(expected.input_encodings(), actual.input_encodings()); 247 ASSERT_EQ(expected.input_encodings(), actual.input_encodings());
242 ASSERT_EQ(expected.id(), actual.id()); 248 ASSERT_EQ(expected.id(), actual.id());
243 ASSERT_EQ(expected.date_created(), actual.date_created()); 249 ASSERT_EQ(expected.date_created(), actual.date_created());
244 AssertTimesEqual(expected.last_modified(), actual.last_modified()); 250 AssertTimesEqual(expected.last_modified(), actual.last_modified());
251 ASSERT_EQ(expected.last_visited(), actual.last_visited());
245 ASSERT_EQ(expected.sync_guid(), actual.sync_guid()); 252 ASSERT_EQ(expected.sync_guid(), actual.sync_guid());
246 ASSERT_EQ(expected.search_terms_replacement_key(), 253 ASSERT_EQ(expected.search_terms_replacement_key(),
247 actual.search_terms_replacement_key()); 254 actual.search_terms_replacement_key());
248 } 255 }
249 256
250 void TemplateURLServiceTest::AssertTimesEqual(const base::Time& expected, 257 void TemplateURLServiceTest::AssertTimesEqual(const base::Time& expected,
251 const base::Time& actual) { 258 const base::Time& actual) {
252 // Because times are stored with a granularity of one second, there is a loss 259 // Because times are stored with a granularity of one second, there is a loss
253 // of precision when serializing and deserializing the timestamps. Hence, only 260 // of precision when serializing and deserializing the timestamps. Hence, only
254 // expect timestamps to be equal to within one second of one another. 261 // expect timestamps to be equal to within one second of one another.
255 ASSERT_LT((expected - actual).magnitude(), base::TimeDelta::FromSeconds(1)); 262 ASSERT_LT((expected - actual).magnitude(), base::TimeDelta::FromSeconds(1));
256 } 263 }
257 264
258 std::unique_ptr<TemplateURL> TemplateURLServiceTest::CreatePreloadedTemplateURL( 265 std::unique_ptr<TemplateURL> TemplateURLServiceTest::CreatePreloadedTemplateURL(
259 bool safe_for_autoreplace, 266 bool safe_for_autoreplace,
260 int prepopulate_id) { 267 int prepopulate_id) {
261 TemplateURLData data; 268 TemplateURLData data;
262 data.SetShortName(ASCIIToUTF16("unittest")); 269 data.SetShortName(ASCIIToUTF16("unittest"));
263 data.SetKeyword(ASCIIToUTF16("unittest")); 270 data.SetKeyword(ASCIIToUTF16("unittest"));
264 data.SetURL("http://www.unittest.com/{searchTerms}"); 271 data.SetURL("http://www.unittest.com/{searchTerms}");
265 data.favicon_url = GURL("http://favicon.url"); 272 data.favicon_url = GURL("http://favicon.url");
266 data.safe_for_autoreplace = safe_for_autoreplace; 273 data.safe_for_autoreplace = safe_for_autoreplace;
267 data.input_encodings.push_back("UTF-8"); 274 data.input_encodings.push_back("UTF-8");
268 data.date_created = Time::FromTimeT(100); 275 data.date_created = Time::FromTimeT(100);
269 data.last_modified = Time::FromTimeT(100); 276 data.last_modified = Time::FromTimeT(100);
277 data.last_visited = Time::FromTimeT(100);
270 data.prepopulate_id = prepopulate_id; 278 data.prepopulate_id = prepopulate_id;
271 return base::MakeUnique<TemplateURL>(data); 279 return base::MakeUnique<TemplateURL>(data);
272 } 280 }
273 281
274 void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) { 282 void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) {
275 EXPECT_EQ(expected_changed_count, test_util_->GetObserverCount()); 283 EXPECT_EQ(expected_changed_count, test_util_->GetObserverCount());
276 test_util_->ResetObserverCount(); 284 test_util_->ResetObserverCount();
277 } 285 }
278 286
279 void TemplateURLServiceTest::VerifyObserverFired() { 287 void TemplateURLServiceTest::VerifyObserverFired() {
(...skipping 14 matching lines...) Expand all
294 const size_t initial_count = model()->GetTemplateURLs().size(); 302 const size_t initial_count = model()->GetTemplateURLs().size();
295 303
296 TemplateURLData data; 304 TemplateURLData data;
297 data.SetShortName(ASCIIToUTF16("google")); 305 data.SetShortName(ASCIIToUTF16("google"));
298 data.SetKeyword(ASCIIToUTF16("keyword")); 306 data.SetKeyword(ASCIIToUTF16("keyword"));
299 data.SetURL("http://www.google.com/foo/bar"); 307 data.SetURL("http://www.google.com/foo/bar");
300 data.favicon_url = GURL("http://favicon.url"); 308 data.favicon_url = GURL("http://favicon.url");
301 data.safe_for_autoreplace = true; 309 data.safe_for_autoreplace = true;
302 data.date_created = Time::FromTimeT(100); 310 data.date_created = Time::FromTimeT(100);
303 data.last_modified = Time::FromTimeT(100); 311 data.last_modified = Time::FromTimeT(100);
312 data.last_visited = Time::FromTimeT(100);
304 data.sync_guid = "00000000-0000-0000-0000-000000000001"; 313 data.sync_guid = "00000000-0000-0000-0000-000000000001";
305 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); 314 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data));
306 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("keyword"), 315 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("keyword"),
307 GURL(), NULL)); 316 GURL(), NULL));
308 VerifyObserverCount(1); 317 VerifyObserverCount(1);
309 base::RunLoop().RunUntilIdle(); 318 base::RunLoop().RunUntilIdle();
310 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 319 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
311 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); 320 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword()));
312 // We need to make a second copy as the model takes ownership of |t_url| and 321 // We need to make a second copy as the model takes ownership of |t_url| and
313 // will delete it. We have to do this after calling Add() since that gives 322 // will delete it. We have to do this after calling Add() since that gives
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 model()->Remove(loaded_url); 367 model()->Remove(loaded_url);
359 VerifyObserverCount(1); 368 VerifyObserverCount(1);
360 test_util()->ResetModel(true); 369 test_util()->ResetModel(true);
361 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size()); 370 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size());
362 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL); 371 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL);
363 } 372 }
364 373
365 TEST_F(TemplateURLServiceTest, AddSameKeyword) { 374 TEST_F(TemplateURLServiceTest, AddSameKeyword) {
366 test_util()->VerifyLoad(); 375 test_util()->VerifyLoad();
367 376
368 AddKeywordWithDate( 377 AddKeywordWithDate("first", "keyword", "http://test1", std::string(),
369 "first", "keyword", "http://test1", std::string(), std::string(), 378 std::string(), std::string(), true, "UTF-8", Time(),
370 std::string(), true, "UTF-8", Time(), Time()); 379 Time(), Time());
371 VerifyObserverCount(1); 380 VerifyObserverCount(1);
372 381
373 // Test what happens when we try to add a TemplateURL with the same keyword as 382 // Test what happens when we try to add a TemplateURL with the same keyword as
374 // one in the model. 383 // one in the model.
375 TemplateURLData data; 384 TemplateURLData data;
376 data.SetShortName(ASCIIToUTF16("second")); 385 data.SetShortName(ASCIIToUTF16("second"));
377 data.SetKeyword(ASCIIToUTF16("keyword")); 386 data.SetKeyword(ASCIIToUTF16("keyword"));
378 data.SetURL("http://test2"); 387 data.SetURL("http://test2");
379 data.safe_for_autoreplace = false; 388 data.safe_for_autoreplace = false;
380 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); 389 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data));
(...skipping 28 matching lines...) Expand all
409 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 418 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
410 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); 419 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name());
411 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); 420 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword());
412 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); 421 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name());
413 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); 422 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword());
414 } 423 }
415 424
416 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { 425 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) {
417 test_util()->VerifyLoad(); 426 test_util()->VerifyLoad();
418 427
419 AddKeywordWithDate( 428 AddKeywordWithDate("replaceable", "keyword1", "http://test1", std::string(),
420 "replaceable", "keyword1", "http://test1", std::string(), std::string(), 429 std::string(), std::string(), true, "UTF-8", Time(),
421 std::string(), true, "UTF-8", Time(), Time()); 430 Time(), Time());
422 TemplateURL* original2 = AddKeywordWithDate( 431 TemplateURL* original2 = AddKeywordWithDate(
423 "nonreplaceable", "keyword2", "http://test2", std::string(), 432 "nonreplaceable", "keyword2", "http://test2", std::string(),
424 std::string(), std::string(), false, "UTF-8", Time(), Time()); 433 std::string(), std::string(), false, "UTF-8", Time(), Time(), Time());
425 model()->RegisterOmniboxKeyword("test3", "extension", "keyword3", 434 model()->RegisterOmniboxKeyword("test3", "extension", "keyword3",
426 "http://test3"); 435 "http://test3");
427 TemplateURL* original3 = 436 TemplateURL* original3 =
428 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3")); 437 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3"));
429 ASSERT_TRUE(original3); 438 ASSERT_TRUE(original3);
430 439
431 // Extension keywords should override replaceable keywords. 440 // Extension keywords should override replaceable keywords.
432 model()->RegisterOmniboxKeyword("id1", "test", "keyword1", "http://test4"); 441 model()->RegisterOmniboxKeyword("id1", "test", "keyword1", "http://test4");
433 TemplateURL* extension1 = model()->FindTemplateURLForExtension( 442 TemplateURL* extension1 = model()->FindTemplateURLForExtension(
434 "id1", TemplateURL::OMNIBOX_API_EXTENSION); 443 "id1", TemplateURL::OMNIBOX_API_EXTENSION);
(...skipping 23 matching lines...) Expand all
458 467
459 // Similar to the AddSameKeyword test, but with an extension keyword masking a 468 // Similar to the AddSameKeyword test, but with an extension keyword masking a
460 // replaceable TemplateURL. We should still do correct conflict resolution 469 // replaceable TemplateURL. We should still do correct conflict resolution
461 // between the non-template URLs. 470 // between the non-template URLs.
462 model()->RegisterOmniboxKeyword("test2", "extension", "keyword", 471 model()->RegisterOmniboxKeyword("test2", "extension", "keyword",
463 "http://test2"); 472 "http://test2");
464 TemplateURL* extension = 473 TemplateURL* extension =
465 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 474 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
466 ASSERT_TRUE(extension); 475 ASSERT_TRUE(extension);
467 // Adding a keyword that matches the extension. 476 // Adding a keyword that matches the extension.
468 AddKeywordWithDate( 477 AddKeywordWithDate("replaceable", "keyword", "http://test1", std::string(),
469 "replaceable", "keyword", "http://test1", std::string(), std::string(), 478 std::string(), std::string(), true, "UTF-8", Time(),
470 std::string(), true, "UTF-8", Time(), Time()); 479 Time(), Time());
471 480
472 // Adding another replaceable keyword should remove the existing one, but 481 // Adding another replaceable keyword should remove the existing one, but
473 // leave the extension as is. 482 // leave the extension as is.
474 TemplateURLData data; 483 TemplateURLData data;
475 data.SetShortName(ASCIIToUTF16("name1")); 484 data.SetShortName(ASCIIToUTF16("name1"));
476 data.SetKeyword(ASCIIToUTF16("keyword")); 485 data.SetKeyword(ASCIIToUTF16("keyword"));
477 data.SetURL("http://test3"); 486 data.SetURL("http://test3");
478 data.safe_for_autoreplace = true; 487 data.safe_for_autoreplace = true;
479 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); 488 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data));
480 EXPECT_EQ(extension, 489 EXPECT_EQ(extension,
(...skipping 30 matching lines...) Expand all
511 Time now = Time::Now(); 520 Time now = Time::Now();
512 TimeDelta one_day = TimeDelta::FromDays(1); 521 TimeDelta one_day = TimeDelta::FromDays(1);
513 Time month_ago = now - TimeDelta::FromDays(30); 522 Time month_ago = now - TimeDelta::FromDays(30);
514 523
515 // Nothing has been added. 524 // Nothing has been added.
516 EXPECT_EQ(0U, model()->GetTemplateURLs().size()); 525 EXPECT_EQ(0U, model()->GetTemplateURLs().size());
517 526
518 // Create one with a 0 time. 527 // Create one with a 0 time.
519 AddKeywordWithDate("name1", "key1", "http://foo1", "http://suggest1", 528 AddKeywordWithDate("name1", "key1", "http://foo1", "http://suggest1",
520 std::string(), "http://icon1", true, "UTF-8;UTF-16", 529 std::string(), "http://icon1", true, "UTF-8;UTF-16",
521 Time(), Time()); 530 Time(), Time(), Time());
522 // Create one for now and +/- 1 day. 531 // Create one for now and +/- 1 day.
523 AddKeywordWithDate("name2", "key2", "http://foo2", "http://suggest2", 532 AddKeywordWithDate("name2", "key2", "http://foo2", "http://suggest2",
524 std::string(), "http://icon2", true, "UTF-8;UTF-16", 533 std::string(), "http://icon2", true, "UTF-8;UTF-16",
525 now - one_day, Time()); 534 now - one_day, Time(), Time());
526 AddKeywordWithDate("name3", "key3", "http://foo3", std::string(), 535 AddKeywordWithDate("name3", "key3", "http://foo3", std::string(),
527 std::string(), std::string(), true, std::string(), now, 536 std::string(), std::string(), true, std::string(), now,
528 Time()); 537 Time(), Time());
529 AddKeywordWithDate("name4", "key4", "http://foo4", std::string(), 538 AddKeywordWithDate("name4", "key4", "http://foo4", std::string(),
530 std::string(), std::string(), true, std::string(), 539 std::string(), std::string(), true, std::string(),
531 now + one_day, Time()); 540 now + one_day, Time(), Time());
532 // Try the other three states. 541 // Try the other three states.
533 AddKeywordWithDate("name5", "key5", "http://foo5", "http://suggest5", 542 AddKeywordWithDate("name5", "key5", "http://foo5", "http://suggest5",
534 std::string(), "http://icon5", false, "UTF-8;UTF-16", now, 543 std::string(), "http://icon5", false, "UTF-8;UTF-16", now,
535 Time()); 544 Time(), Time());
536 AddKeywordWithDate("name6", "key6", "http://foo6", "http://suggest6", 545 AddKeywordWithDate("name6", "key6", "http://foo6", "http://suggest6",
537 std::string(), "http://icon6", false, "UTF-8;UTF-16", 546 std::string(), "http://icon6", false, "UTF-8;UTF-16",
538 month_ago, Time()); 547 month_ago, Time(), Time());
539 548
540 // We just added a few items, validate them. 549 // We just added a few items, validate them.
541 EXPECT_EQ(6U, model()->GetTemplateURLs().size()); 550 EXPECT_EQ(6U, model()->GetTemplateURLs().size());
542 551
543 // Try removing from current timestamp. This should delete the one in the 552 // Try removing from current timestamp. This should delete the one in the
544 // future and one very recent one. 553 // future and one very recent one.
545 model()->RemoveAutoGeneratedSince(now); 554 model()->RemoveAutoGeneratedSince(now);
546 EXPECT_EQ(4U, model()->GetTemplateURLs().size()); 555 EXPECT_EQ(4U, model()->GetTemplateURLs().size());
547 556
548 // Try removing from two months ago. This should only delete items that are 557 // Try removing from two months ago. This should only delete items that are
(...skipping 26 matching lines...) Expand all
575 Time now = Time::Now(); 584 Time now = Time::Now();
576 TimeDelta one_day = TimeDelta::FromDays(1); 585 TimeDelta one_day = TimeDelta::FromDays(1);
577 Time month_ago = now - TimeDelta::FromDays(30); 586 Time month_ago = now - TimeDelta::FromDays(30);
578 587
579 // Nothing has been added. 588 // Nothing has been added.
580 EXPECT_EQ(0U, model()->GetTemplateURLs().size()); 589 EXPECT_EQ(0U, model()->GetTemplateURLs().size());
581 590
582 // Create one for now and +/- 1 day. 591 // Create one for now and +/- 1 day.
583 AddKeywordWithDate("name1", "key1", "http://foo1", "http://suggest1", 592 AddKeywordWithDate("name1", "key1", "http://foo1", "http://suggest1",
584 std::string(), "http://icon2", true, "UTF-8;UTF-16", 593 std::string(), "http://icon2", true, "UTF-8;UTF-16",
585 now - one_day, Time()); 594 now - one_day, Time(), Time());
586 AddKeywordWithDate("name2", "key2", "http://foo2", std::string(), 595 AddKeywordWithDate("name2", "key2", "http://foo2", std::string(),
587 std::string(), std::string(), true, std::string(), now, 596 std::string(), std::string(), true, std::string(), now,
588 Time()); 597 Time(), Time());
589 AddKeywordWithDate("name3", "key3", "http://foo3", std::string(), 598 AddKeywordWithDate("name3", "key3", "http://foo3", std::string(),
590 std::string(), std::string(), true, std::string(), 599 std::string(), std::string(), true, std::string(),
591 now + one_day, Time()); 600 now + one_day, Time(), Time());
592 601
593 // We just added a few items, validate them. 602 // We just added a few items, validate them.
594 EXPECT_EQ(3U, model()->GetTemplateURLs().size()); 603 EXPECT_EQ(3U, model()->GetTemplateURLs().size());
595 604
596 // Try removing foo2. This should delete foo2, but leave foo1 and 3 untouched. 605 // Try removing foo2. This should delete foo2, but leave foo1 and 3 untouched.
597 GURL url2("http://foo2"); 606 GURL url2("http://foo2");
598 model()->RemoveAutoGeneratedForUrlsBetween( 607 model()->RemoveAutoGeneratedForUrlsBetween(
599 base::Bind(static_cast<bool (*)(const GURL&, const GURL&)>(operator==), 608 base::Bind(static_cast<bool (*)(const GURL&, const GURL&)>(operator==),
600 url2), 609 url2),
601 month_ago, now + one_day); 610 month_ago, now + one_day);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 // Add a new TemplateURL. 642 // Add a new TemplateURL.
634 test_util()->VerifyLoad(); 643 test_util()->VerifyLoad();
635 const size_t initial_count = model()->GetTemplateURLs().size(); 644 const size_t initial_count = model()->GetTemplateURLs().size();
636 TemplateURLData data; 645 TemplateURLData data;
637 data.SetShortName(ASCIIToUTF16("google")); 646 data.SetShortName(ASCIIToUTF16("google"));
638 data.SetKeyword(ASCIIToUTF16("keyword")); 647 data.SetKeyword(ASCIIToUTF16("keyword"));
639 data.SetURL("http://www.google.com/foo/bar"); 648 data.SetURL("http://www.google.com/foo/bar");
640 data.favicon_url = GURL("http://favicon.url"); 649 data.favicon_url = GURL("http://favicon.url");
641 data.date_created = Time::FromTimeT(100); 650 data.date_created = Time::FromTimeT(100);
642 data.last_modified = Time::FromTimeT(100); 651 data.last_modified = Time::FromTimeT(100);
652 data.last_visited = Time::FromTimeT(100);
643 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); 653 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data));
644 654
645 VerifyObserverCount(1); 655 VerifyObserverCount(1);
646 base::RunLoop().RunUntilIdle(); 656 base::RunLoop().RunUntilIdle();
647 657
648 base::Time now = base::Time::Now(); 658 base::Time now = base::Time::Now();
649 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); 659 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock);
650 clock->SetNow(now); 660 clock->SetNow(now);
651 model()->set_clock(std::move(clock)); 661 model()->set_clock(std::move(clock));
652 662
(...skipping 20 matching lines...) Expand all
673 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); 683 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword);
674 ASSERT_TRUE(read_url); 684 ASSERT_TRUE(read_url);
675 AssertEquals(*cloned_url, *read_url); 685 AssertEquals(*cloned_url, *read_url);
676 AssertTimesEqual(now, read_url->last_modified()); 686 AssertTimesEqual(now, read_url->last_modified());
677 } 687 }
678 688
679 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { 689 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) {
680 // Add a new TemplateURL. 690 // Add a new TemplateURL.
681 test_util()->VerifyLoad(); 691 test_util()->VerifyLoad();
682 const size_t initial_count = model()->GetTemplateURLs().size(); 692 const size_t initial_count = model()->GetTemplateURLs().size();
683 TemplateURL* t_url = AddKeywordWithDate( 693 TemplateURL* t_url =
684 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", 694 AddKeywordWithDate("name1", "key1", "http://foo1/{searchTerms}",
685 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); 695 "http://sugg1", std::string(), "http://icon1", true,
696 "UTF-8;UTF-16", Time(), Time(), Time());
686 test_util()->ResetObserverCount(); 697 test_util()->ResetObserverCount();
687 698
688 model()->SetUserSelectedDefaultSearchProvider(t_url); 699 model()->SetUserSelectedDefaultSearchProvider(t_url);
689 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); 700 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider());
690 ASSERT_TRUE(t_url->safe_for_autoreplace()); 701 ASSERT_TRUE(t_url->safe_for_autoreplace());
691 ASSERT_TRUE(model()->ShowInDefaultList(t_url)); 702 ASSERT_TRUE(model()->ShowInDefaultList(t_url));
692 703
693 // Setting the default search provider should have caused notification. 704 // Setting the default search provider should have caused notification.
694 VerifyObserverCount(1); 705 VerifyObserverCount(1);
695 base::RunLoop().RunUntilIdle(); 706 base::RunLoop().RunUntilIdle();
696 707
697 std::unique_ptr<TemplateURL> cloned_url( 708 std::unique_ptr<TemplateURL> cloned_url(
698 base::MakeUnique<TemplateURL>(t_url->data())); 709 base::MakeUnique<TemplateURL>(t_url->data()));
699 710
700 // Make sure when we reload we get a default search provider. 711 // Make sure when we reload we get a default search provider.
701 test_util()->ResetModel(true); 712 test_util()->ResetModel(true);
702 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 713 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
703 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 714 ASSERT_TRUE(model()->GetDefaultSearchProvider());
704 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); 715 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider());
705 } 716 }
706 717
707 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { 718 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) {
708 test_util()->ChangeModelToLoadState(); 719 test_util()->ChangeModelToLoadState();
709 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"), GURL(), 720 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"), GURL(),
710 NULL)); 721 NULL));
711 TemplateURL* t_url = AddKeywordWithDate( 722 TemplateURL* t_url = AddKeywordWithDate(
712 "name1", "foo", "http://foo1", "http://sugg1", std::string(), 723 "name1", "foo", "http://foo1", "http://sugg1", std::string(),
713 "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); 724 "http://icon1", true, "UTF-8;UTF-16", Time(), Time(), Time());
714 725
715 // Can still replace, newly added template url is marked safe to replace. 726 // Can still replace, newly added template url is marked safe to replace.
716 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"), 727 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"),
717 GURL("http://foo2"), NULL)); 728 GURL("http://foo2"), NULL));
718 729
719 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should 730 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should
720 // no longer be replaceable. 731 // no longer be replaceable.
721 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), 732 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(),
722 t_url->url()); 733 t_url->url());
723 734
724 ASSERT_FALSE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"), 735 ASSERT_FALSE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"),
725 GURL("http://foo2"), NULL)); 736 GURL("http://foo2"), NULL));
726 } 737 }
727 738
728 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) { 739 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) {
729 test_util()->ChangeModelToLoadState(); 740 test_util()->ChangeModelToLoadState();
730 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"), 741 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("foo"),
731 GURL("http://foo.com"), NULL)); 742 GURL("http://foo.com"), NULL));
732 TemplateURL* t_url = AddKeywordWithDate( 743 TemplateURL* t_url = AddKeywordWithDate(
733 "name1", "foo", "http://foo.com", "http://sugg1", std::string(), 744 "name1", "foo", "http://foo.com", "http://sugg1", std::string(),
734 "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); 745 "http://icon1", true, "UTF-8;UTF-16", Time(), Time(), Time());
735 746
736 // Can still replace, newly added template url is marked safe to replace. 747 // Can still replace, newly added template url is marked safe to replace.
737 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("bar"), 748 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("bar"),
738 GURL("http://foo.com"), NULL)); 749 GURL("http://foo.com"), NULL));
739 750
740 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should 751 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should
741 // no longer be replaceable. 752 // no longer be replaceable.
742 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), 753 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(),
743 t_url->url()); 754 t_url->url());
744 755
(...skipping 15 matching lines...) Expand all
760 test_util()->VerifyLoad(); 771 test_util()->VerifyLoad();
761 772
762 TemplateURLData data; 773 TemplateURLData data;
763 data.SetShortName(ASCIIToUTF16("a")); 774 data.SetShortName(ASCIIToUTF16("a"));
764 data.safe_for_autoreplace = true; 775 data.safe_for_autoreplace = true;
765 data.SetURL("http://url/{searchTerms}"); 776 data.SetURL("http://url/{searchTerms}");
766 data.suggestions_url = "http://url2"; 777 data.suggestions_url = "http://url2";
767 data.instant_url = "http://instant"; 778 data.instant_url = "http://instant";
768 data.date_created = Time::FromTimeT(100); 779 data.date_created = Time::FromTimeT(100);
769 data.last_modified = Time::FromTimeT(100); 780 data.last_modified = Time::FromTimeT(100);
781 data.last_visited = Time::FromTimeT(100);
770 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); 782 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data));
771 const TemplateURLID id = t_url->id(); 783 const TemplateURLID id = t_url->id();
772 784
773 model()->SetUserSelectedDefaultSearchProvider(t_url); 785 model()->SetUserSelectedDefaultSearchProvider(t_url);
774 base::RunLoop().RunUntilIdle(); 786 base::RunLoop().RunUntilIdle();
775 std::unique_ptr<TemplateURL> cloned_url( 787 std::unique_ptr<TemplateURL> cloned_url(
776 base::MakeUnique<TemplateURL>(t_url->data())); 788 base::MakeUnique<TemplateURL>(t_url->data()));
777 789
778 // Reset the model and don't load it. The template url we set as the default 790 // Reset the model and don't load it. The template url we set as the default
779 // should be pulled from prefs now. 791 // should be pulled from prefs now.
(...skipping 24 matching lines...) Expand all
804 ASCIIToUTF16("google.com")); 816 ASCIIToUTF16("google.com"));
805 ASSERT_TRUE(google); 817 ASSERT_TRUE(google);
806 model()->ResetTemplateURL(google, ASCIIToUTF16("trash"), ASCIIToUTF16("xxx"), 818 model()->ResetTemplateURL(google, ASCIIToUTF16("trash"), ASCIIToUTF16("xxx"),
807 "http://www.foo.com/s?q={searchTerms}"); 819 "http://www.foo.com/s?q={searchTerms}");
808 EXPECT_EQ(ASCIIToUTF16("trash"), google->short_name()); 820 EXPECT_EQ(ASCIIToUTF16("trash"), google->short_name());
809 EXPECT_EQ(ASCIIToUTF16("xxx"), google->keyword()); 821 EXPECT_EQ(ASCIIToUTF16("xxx"), google->keyword());
810 822
811 // Add third-party default search engine. 823 // Add third-party default search engine.
812 TemplateURL* user_dse = AddKeywordWithDate( 824 TemplateURL* user_dse = AddKeywordWithDate(
813 "malware", "google.com", "http://www.goo.com/s?q={searchTerms}", 825 "malware", "google.com", "http://www.goo.com/s?q={searchTerms}",
814 std::string(), std::string(), std::string(), 826 std::string(), std::string(), std::string(), true, "UTF-8", Time(),
815 true, "UTF-8", Time(), Time()); 827 Time(), Time());
816 model()->SetUserSelectedDefaultSearchProvider(user_dse); 828 model()->SetUserSelectedDefaultSearchProvider(user_dse);
817 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); 829 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider());
818 830
819 // Remove bing. 831 // Remove bing.
820 TemplateURL* bing = model()->GetTemplateURLForKeyword( 832 TemplateURL* bing = model()->GetTemplateURLForKeyword(
821 ASCIIToUTF16("bing.com")); 833 ASCIIToUTF16("bing.com"));
822 ASSERT_TRUE(bing); 834 ASSERT_TRUE(bing);
823 model()->Remove(bing); 835 model()->Remove(bing);
824 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("bing.com"))); 836 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("bing.com")));
825 837
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 { "http://x/foo?q=b&q=xx", base::string16() }, 913 { "http://x/foo?q=b&q=xx", base::string16() },
902 { "http://x/foo#query=xx", ASCIIToUTF16("xx") }, 914 { "http://x/foo#query=xx", ASCIIToUTF16("xx") },
903 { "http://x/foo?q=b#query=xx", ASCIIToUTF16("xx") }, 915 { "http://x/foo?q=b#query=xx", ASCIIToUTF16("xx") },
904 { "http://x/foo?q=b#q=xx", ASCIIToUTF16("b") }, 916 { "http://x/foo?q=b#q=xx", ASCIIToUTF16("b") },
905 { "http://x/foo?query=b#q=xx", base::string16() }, 917 { "http://x/foo?query=b#q=xx", base::string16() },
906 }; 918 };
907 919
908 test_util()->ChangeModelToLoadState(); 920 test_util()->ChangeModelToLoadState();
909 AddKeywordWithDate("name", "x", "http://x/foo?q={searchTerms}", 921 AddKeywordWithDate("name", "x", "http://x/foo?q={searchTerms}",
910 "http://sugg1", "http://x/foo#query={searchTerms}", 922 "http://sugg1", "http://x/foo#query={searchTerms}",
911 "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); 923 "http://icon1", false, "UTF-8;UTF-16", Time(), Time(),
924 Time());
912 925
913 for (size_t i = 0; i < arraysize(data); ++i) { 926 for (size_t i = 0; i < arraysize(data); ++i) {
914 TemplateURLService::URLVisitedDetails details = { 927 TemplateURLService::URLVisitedDetails details = {
915 GURL(data[i].url), false 928 GURL(data[i].url), false
916 }; 929 };
917 model()->UpdateKeywordSearchTermsForURL(details); 930 model()->UpdateKeywordSearchTermsForURL(details);
918 EXPECT_EQ(data[i].term, test_util()->GetAndClearSearchTerm()); 931 EXPECT_EQ(data[i].term, test_util()->GetAndClearSearchTerm());
919 } 932 }
920 } 933 }
921 934
922 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) { 935 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) {
923 struct TestData { 936 struct TestData {
924 const std::string url; 937 const std::string url;
925 } data[] = { 938 } data[] = {
926 { "http://foo/" }, 939 { "http://foo/" },
927 { "http://x/bar?q=xx" }, 940 { "http://x/bar?q=xx" },
928 { "http://x/foo?y=xx" }, 941 { "http://x/foo?y=xx" },
929 }; 942 };
930 943
931 test_util()->ChangeModelToLoadState(); 944 test_util()->ChangeModelToLoadState();
932 AddKeywordWithDate("name", "x", "http://x/foo", "http://sugg1", std::string(), 945 AddKeywordWithDate("name", "x", "http://x/foo", "http://sugg1", std::string(),
933 "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); 946 "http://icon1", false, "UTF-8;UTF-16", Time(), Time(),
947 Time());
934 948
935 for (size_t i = 0; i < arraysize(data); ++i) { 949 for (size_t i = 0; i < arraysize(data); ++i) {
936 TemplateURLService::URLVisitedDetails details = { 950 TemplateURLService::URLVisitedDetails details = {
937 GURL(data[i].url), false 951 GURL(data[i].url), false
938 }; 952 };
939 model()->UpdateKeywordSearchTermsForURL(details); 953 model()->UpdateKeywordSearchTermsForURL(details);
940 ASSERT_EQ(base::string16(), test_util()->GetAndClearSearchTerm()); 954 ASSERT_EQ(base::string16(), test_util()->GetAndClearSearchTerm());
941 } 955 }
942 } 956 }
943 957
944 TEST_F(TemplateURLServiceWithoutFallbackTest, ChangeGoogleBaseValue) { 958 TEST_F(TemplateURLServiceWithoutFallbackTest, ChangeGoogleBaseValue) {
945 // NOTE: Do not load the prepopulate data, which also has a {google:baseURL} 959 // NOTE: Do not load the prepopulate data, which also has a {google:baseURL}
946 // keyword in it and would confuse this test. 960 // keyword in it and would confuse this test.
947 test_util()->ChangeModelToLoadState(); 961 test_util()->ChangeModelToLoadState();
948 962
949 test_util()->SetGoogleBaseURL(GURL("http://google.com/")); 963 test_util()->SetGoogleBaseURL(GURL("http://google.com/"));
950 const TemplateURL* t_url = AddKeywordWithDate( 964 const TemplateURL* t_url = AddKeywordWithDate(
951 "name", "google.com", "{google:baseURL}?q={searchTerms}", "http://sugg1", 965 "name", "google.com", "{google:baseURL}?q={searchTerms}", "http://sugg1",
952 std::string(), "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); 966 std::string(), "http://icon1", false, "UTF-8;UTF-16", Time(), Time(),
967 Time());
953 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com")); 968 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com"));
954 EXPECT_EQ("google.com", t_url->url_ref().GetHost(search_terms_data())); 969 EXPECT_EQ("google.com", t_url->url_ref().GetHost(search_terms_data()));
955 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword()); 970 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword());
956 971
957 // Change the Google base url. 972 // Change the Google base url.
958 test_util()->ResetObserverCount(); 973 test_util()->ResetObserverCount();
959 test_util()->SetGoogleBaseURL(GURL("http://google.co.uk/")); 974 test_util()->SetGoogleBaseURL(GURL("http://google.co.uk/"));
960 VerifyObserverCount(1); 975 VerifyObserverCount(1);
961 976
962 // Make sure the host->TemplateURL map was updated appropriately. 977 // Make sure the host->TemplateURL map was updated appropriately.
963 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.co.uk")); 978 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.co.uk"));
964 EXPECT_TRUE(model()->GetTemplateURLForHost("google.com") == NULL); 979 EXPECT_TRUE(model()->GetTemplateURLForHost("google.com") == NULL);
965 EXPECT_EQ("google.co.uk", t_url->url_ref().GetHost(search_terms_data())); 980 EXPECT_EQ("google.co.uk", t_url->url_ref().GetHost(search_terms_data()));
966 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword()); 981 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword());
967 EXPECT_EQ("http://google.co.uk/?q=x", t_url->url_ref().ReplaceSearchTerms( 982 EXPECT_EQ("http://google.co.uk/?q=x", t_url->url_ref().ReplaceSearchTerms(
968 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("x")), search_terms_data())); 983 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("x")), search_terms_data()));
969 984
970 // Now add a manual entry and then change the Google base URL such that the 985 // Now add a manual entry and then change the Google base URL such that the
971 // autogenerated Google search keyword would conflict. 986 // autogenerated Google search keyword would conflict.
972 TemplateURL* manual = AddKeywordWithDate( 987 TemplateURL* manual = AddKeywordWithDate(
973 "manual", "google.de", "http://google.de/search?q={searchTerms}", 988 "manual", "google.de", "http://google.de/search?q={searchTerms}",
974 std::string(), std::string(), std::string(), false, "UTF-8", Time(), 989 std::string(), std::string(), std::string(), false, "UTF-8", Time(),
975 Time()); 990 Time(), Time());
976 test_util()->SetGoogleBaseURL(GURL("http://google.de")); 991 test_util()->SetGoogleBaseURL(GURL("http://google.de"));
977 992
978 // Verify that the manual entry is untouched, and the autogenerated keyword 993 // Verify that the manual entry is untouched, and the autogenerated keyword
979 // has not changed. 994 // has not changed.
980 ASSERT_EQ(manual, 995 ASSERT_EQ(manual,
981 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.de"))); 996 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.de")));
982 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data())); 997 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data()));
983 ASSERT_EQ(t_url, 998 ASSERT_EQ(t_url,
984 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.co.uk"))); 999 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.co.uk")));
985 EXPECT_EQ("google.de", t_url->url_ref().GetHost(search_terms_data())); 1000 EXPECT_EQ("google.de", t_url->url_ref().GetHost(search_terms_data()));
(...skipping 16 matching lines...) Expand all
1002 // KEYWORD visits. 1017 // KEYWORD visits.
1003 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) { 1018 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) {
1004 test_util()->profile()->CreateBookmarkModel(false); 1019 test_util()->profile()->CreateBookmarkModel(false);
1005 ASSERT_TRUE(test_util()->profile()->CreateHistoryService(true, false)); 1020 ASSERT_TRUE(test_util()->profile()->CreateHistoryService(true, false));
1006 test_util()->ResetModel(true); 1021 test_util()->ResetModel(true);
1007 1022
1008 // Create a keyword. 1023 // Create a keyword.
1009 TemplateURL* t_url = AddKeywordWithDate( 1024 TemplateURL* t_url = AddKeywordWithDate(
1010 "keyword", "keyword", "http://foo.com/foo?query={searchTerms}", 1025 "keyword", "keyword", "http://foo.com/foo?query={searchTerms}",
1011 "http://sugg1", std::string(), "http://icon1", true, "UTF-8;UTF-16", 1026 "http://sugg1", std::string(), "http://icon1", true, "UTF-8;UTF-16",
1012 base::Time::Now(), base::Time::Now()); 1027 base::Time::Now(), base::Time::Now(), base::Time());
1013 1028
1014 // Add a visit that matches the url of the keyword. 1029 // Add a visit that matches the url of the keyword.
1015 history::HistoryService* history = HistoryServiceFactory::GetForProfile( 1030 history::HistoryService* history = HistoryServiceFactory::GetForProfile(
1016 test_util()->profile(), ServiceAccessType::EXPLICIT_ACCESS); 1031 test_util()->profile(), ServiceAccessType::EXPLICIT_ACCESS);
1017 history->AddPage( 1032 history->AddPage(
1018 GURL(t_url->url_ref().ReplaceSearchTerms( 1033 GURL(t_url->url_ref().ReplaceSearchTerms(
1019 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("blah")), 1034 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("blah")),
1020 search_terms_data())), 1035 search_terms_data())),
1021 base::Time::Now(), NULL, 0, GURL(), history::RedirectList(), 1036 base::Time::Now(), NULL, 0, GURL(), history::RedirectList(),
1022 ui::PAGE_TRANSITION_KEYWORD, history::SOURCE_BROWSED, false); 1037 ui::PAGE_TRANSITION_KEYWORD, history::SOURCE_BROWSED, false);
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 1226
1212 // Verifies that if the default search URL preference is managed, we report 1227 // Verifies that if the default search URL preference is managed, we report
1213 // the default search as managed. Also check that we are getting the right 1228 // the default search as managed. Also check that we are getting the right
1214 // values. 1229 // values.
1215 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) { 1230 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) {
1216 test_util()->VerifyLoad(); 1231 test_util()->VerifyLoad();
1217 const size_t initial_count = model()->GetTemplateURLs().size(); 1232 const size_t initial_count = model()->GetTemplateURLs().size();
1218 test_util()->ResetObserverCount(); 1233 test_util()->ResetObserverCount();
1219 1234
1220 // Set a regular default search provider. 1235 // Set a regular default search provider.
1221 TemplateURL* regular_default = AddKeywordWithDate( 1236 TemplateURL* regular_default =
1222 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", 1237 AddKeywordWithDate("name1", "key1", "http://foo1/{searchTerms}",
1223 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); 1238 "http://sugg1", std::string(), "http://icon1", true,
1239 "UTF-8;UTF-16", Time(), Time(), Time());
1224 VerifyObserverCount(1); 1240 VerifyObserverCount(1);
1225 model()->SetUserSelectedDefaultSearchProvider(regular_default); 1241 model()->SetUserSelectedDefaultSearchProvider(regular_default);
1226 // Adding the URL and setting the default search provider should have caused 1242 // Adding the URL and setting the default search provider should have caused
1227 // notifications. 1243 // notifications.
1228 VerifyObserverCount(1); 1244 VerifyObserverCount(1);
1229 EXPECT_FALSE(model()->is_default_search_managed()); 1245 EXPECT_FALSE(model()->is_default_search_managed());
1230 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1246 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1231 1247
1232 // Set a managed preference that establishes a default search provider. 1248 // Set a managed preference that establishes a default search provider.
1233 const char kName[] = "test1"; 1249 const char kName[] = "test1";
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1423 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1408 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 1424 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
1409 ASSERT_FALSE(loaded_url == NULL); 1425 ASSERT_FALSE(loaded_url == NULL);
1410 EXPECT_EQ(4U, loaded_url->input_encodings().size()); 1426 EXPECT_EQ(4U, loaded_url->input_encodings().size());
1411 } 1427 }
1412 1428
1413 TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) { 1429 TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) {
1414 test_util()->VerifyLoad(); 1430 test_util()->VerifyLoad();
1415 // Add third-party default search engine. 1431 // Add third-party default search engine.
1416 TemplateURL* user_dse = AddKeywordWithDate( 1432 TemplateURL* user_dse = AddKeywordWithDate(
1417 "user", "user", "http://www.goo.com/s?q={searchTerms}", 1433 "user", "user", "http://www.goo.com/s?q={searchTerms}", std::string(),
1418 std::string(), std::string(), std::string(), 1434 std::string(), std::string(), true, "UTF-8", Time(), Time(), Time());
1419 true, "UTF-8", Time(), Time());
1420 model()->SetUserSelectedDefaultSearchProvider(user_dse); 1435 model()->SetUserSelectedDefaultSearchProvider(user_dse);
1421 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); 1436 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider());
1422 1437
1423 std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate( 1438 std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate(
1424 model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}", 1439 model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}",
1425 std::string(), std::string(), std::string(), true, kPrepopulatedId, 1440 std::string(), std::string(), std::string(), true, kPrepopulatedId,
1426 "UTF-8", Time(), Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); 1441 "UTF-8", Time(), Time(), Time(),
1442 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
1427 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( 1443 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info(
1428 new TemplateURL::AssociatedExtensionInfo("ext")); 1444 new TemplateURL::AssociatedExtensionInfo("ext"));
1429 extension_info->wants_to_be_default_engine = true; 1445 extension_info->wants_to_be_default_engine = true;
1430 TemplateURL* ext_dse_ptr = model()->AddExtensionControlledTURL( 1446 TemplateURL* ext_dse_ptr = model()->AddExtensionControlledTURL(
1431 std::move(ext_dse), std::move(extension_info)); 1447 std::move(ext_dse), std::move(extension_info));
1432 EXPECT_EQ(ext_dse_ptr, model()->GetDefaultSearchProvider()); 1448 EXPECT_EQ(ext_dse_ptr, model()->GetDefaultSearchProvider());
1433 1449
1434 model()->RemoveExtensionControlledTURL( 1450 model()->RemoveExtensionControlledTURL(
1435 "ext", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); 1451 "ext", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
1436 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); 1452 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider());
1437 } 1453 }
1438 1454
1439 TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { 1455 TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) {
1440 test_util()->VerifyLoad(); 1456 test_util()->VerifyLoad();
1441 // Add third-party default search engine. 1457 // Add third-party default search engine.
1442 TemplateURL* user_dse = AddKeywordWithDate( 1458 TemplateURL* user_dse = AddKeywordWithDate(
1443 "user", "user", "http://www.goo.com/s?q={searchTerms}", 1459 "user", "user", "http://www.goo.com/s?q={searchTerms}", std::string(),
1444 std::string(), std::string(), std::string(), 1460 std::string(), std::string(), true, "UTF-8", Time(), Time(), Time());
1445 true, "UTF-8", Time(), Time());
1446 model()->SetUserSelectedDefaultSearchProvider(user_dse); 1461 model()->SetUserSelectedDefaultSearchProvider(user_dse);
1447 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); 1462 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider());
1448 1463
1449 std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate( 1464 std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate(
1450 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", 1465 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}",
1451 std::string(), std::string(), std::string(), true, 0, "UTF-8", Time(), 1466 std::string(), std::string(), std::string(), true, 0, "UTF-8", Time(),
1452 Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); 1467 Time(), Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
1453 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( 1468 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info(
1454 new TemplateURL::AssociatedExtensionInfo("ext1")); 1469 new TemplateURL::AssociatedExtensionInfo("ext1"));
1455 extension_info->wants_to_be_default_engine = false; 1470 extension_info->wants_to_be_default_engine = false;
1456 model()->AddExtensionControlledTURL(std::move(ext_dse), 1471 model()->AddExtensionControlledTURL(std::move(ext_dse),
1457 std::move(extension_info)); 1472 std::move(extension_info));
1458 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); 1473 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider());
1459 1474
1460 ext_dse = CreateKeywordWithDate( 1475 ext_dse = CreateKeywordWithDate(
1461 model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}", 1476 model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}",
1462 std::string(), std::string(), std::string(), true, kPrepopulatedId, 1477 std::string(), std::string(), std::string(), true, kPrepopulatedId,
1463 "UTF-8", Time(), Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); 1478 "UTF-8", Time(), Time(), Time(),
1479 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
1464 extension_info.reset(new TemplateURL::AssociatedExtensionInfo("ext2")); 1480 extension_info.reset(new TemplateURL::AssociatedExtensionInfo("ext2"));
1465 extension_info->wants_to_be_default_engine = true; 1481 extension_info->wants_to_be_default_engine = true;
1466 TemplateURL* ext_dse_ptr = model()->AddExtensionControlledTURL( 1482 TemplateURL* ext_dse_ptr = model()->AddExtensionControlledTURL(
1467 std::move(ext_dse), std::move(extension_info)); 1483 std::move(ext_dse), std::move(extension_info));
1468 EXPECT_EQ(ext_dse_ptr, model()->GetDefaultSearchProvider()); 1484 EXPECT_EQ(ext_dse_ptr, model()->GetDefaultSearchProvider());
1469 1485
1470 test_util()->ResetModel(true); 1486 test_util()->ResetModel(true);
1471 user_dse = model()->GetTemplateURLForKeyword(ASCIIToUTF16("user")); 1487 user_dse = model()->GetTemplateURLForKeyword(ASCIIToUTF16("user"));
1472 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); 1488 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider());
1473 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); 1489 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1")));
(...skipping 25 matching lines...) Expand all
1499 data.search_terms_replacement_key = kSearchTermsReplacementKey; 1515 data.search_terms_replacement_key = kSearchTermsReplacementKey;
1500 std::unique_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); 1516 std::unique_ptr<TemplateURL> expected_managed_default(new TemplateURL(data));
1501 EXPECT_TRUE(model()->is_default_search_managed()); 1517 EXPECT_TRUE(model()->is_default_search_managed());
1502 const TemplateURL* actual_managed_default = 1518 const TemplateURL* actual_managed_default =
1503 model()->GetDefaultSearchProvider(); 1519 model()->GetDefaultSearchProvider();
1504 ExpectSimilar(expected_managed_default.get(), actual_managed_default); 1520 ExpectSimilar(expected_managed_default.get(), actual_managed_default);
1505 1521
1506 std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate( 1522 std::unique_ptr<TemplateURL> ext_dse = CreateKeywordWithDate(
1507 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", 1523 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}",
1508 std::string(), std::string(), std::string(), true, kPrepopulatedId, 1524 std::string(), std::string(), std::string(), true, kPrepopulatedId,
1509 "UTF-8", Time(), Time(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); 1525 "UTF-8", Time(), Time(), Time(),
1526 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
1510 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( 1527 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info(
1511 new TemplateURL::AssociatedExtensionInfo("ext1")); 1528 new TemplateURL::AssociatedExtensionInfo("ext1"));
1512 extension_info->wants_to_be_default_engine = true; 1529 extension_info->wants_to_be_default_engine = true;
1513 TemplateURL* ext_dse_ptr = model()->AddExtensionControlledTURL( 1530 TemplateURL* ext_dse_ptr = model()->AddExtensionControlledTURL(
1514 std::move(ext_dse), std::move(extension_info)); 1531 std::move(ext_dse), std::move(extension_info));
1515 EXPECT_EQ(ext_dse_ptr, 1532 EXPECT_EQ(ext_dse_ptr,
1516 model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); 1533 model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1")));
1517 EXPECT_TRUE(model()->is_default_search_managed()); 1534 EXPECT_TRUE(model()->is_default_search_managed());
1518 actual_managed_default = model()->GetDefaultSearchProvider(); 1535 actual_managed_default = model()->GetDefaultSearchProvider();
1519 ExpectSimilar(expected_managed_default.get(), actual_managed_default); 1536 ExpectSimilar(expected_managed_default.get(), actual_managed_default);
1520 } 1537 }
1538
1539 TEST_F(TemplateURLServiceTest, LastVisitedTimeUpdate) {
1540 test_util()->VerifyLoad();
1541 TemplateURL* original_url = AddKeywordWithDate(
1542 "name1", "key1", "http://foo1", "http://suggest1", std::string(),
1543 "http://icon1", true, "UTF-8;UTF-16", Time(), Time(), Time());
1544 const base::Time original_last_visited = original_url->last_visited();
1545 model()->UpdateTemplateURLVisitTime(original_url);
1546 TemplateURL* modified_url =
1547 model()->GetTemplateURLForKeyword(ASCIIToUTF16("key1"));
1548 const base::Time modified_last_visited = modified_url->last_visited();
1549 EXPECT_NE(original_last_visited, modified_last_visited);
1550 test_util()->ResetModel(true);
1551 TemplateURL* reloaded_url =
1552 model()->GetTemplateURLForKeyword(ASCIIToUTF16("key1"));
1553 AssertTimesEqual(modified_last_visited, reloaded_url->last_visited());
1554 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698