OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/callback.h" | 5 #include "base/callback.h" |
6 #include "base/memory/ref_counted.h" | 6 #include "base/memory/ref_counted.h" |
7 #include "base/memory/scoped_vector.h" | 7 #include "base/memory/scoped_vector.h" |
| 8 #include "base/test/mock_time_provider.h" |
8 #include "base/string_split.h" | 9 #include "base/string_split.h" |
9 #include "base/string_util.h" | 10 #include "base/string_util.h" |
10 #include "base/threading/thread.h" | 11 #include "base/threading/thread.h" |
11 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
12 #include "chrome/browser/history/history.h" | 13 #include "chrome/browser/history/history.h" |
13 #include "chrome/browser/history/history_notifications.h" | 14 #include "chrome/browser/history/history_notifications.h" |
14 #include "chrome/browser/search_engines/search_host_to_urls_map.h" | 15 #include "chrome/browser/search_engines/search_host_to_urls_map.h" |
15 #include "chrome/browser/search_engines/search_terms_data.h" | 16 #include "chrome/browser/search_engines/search_terms_data.h" |
16 #include "chrome/browser/search_engines/template_url.h" | 17 #include "chrome/browser/search_engines/template_url.h" |
17 #include "chrome/browser/search_engines/template_url_service.h" | 18 #include "chrome/browser/search_engines/template_url_service.h" |
18 #include "chrome/browser/search_engines/template_url_service_test_util.h" | 19 #include "chrome/browser/search_engines/template_url_service_test_util.h" |
19 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" | 20 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" |
20 #include "chrome/browser/webdata/web_database.h" | 21 #include "chrome/browser/webdata/web_database.h" |
21 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
22 #include "chrome/test/testing_pref_service.h" | 23 #include "chrome/test/testing_pref_service.h" |
23 #include "chrome/test/testing_profile.h" | 24 #include "chrome/test/testing_profile.h" |
24 #include "content/browser/browser_thread.h" | 25 #include "content/browser/browser_thread.h" |
25 #include "content/common/notification_details.h" | 26 #include "content/common/notification_details.h" |
26 #include "content/common/notification_source.h" | 27 #include "content/common/notification_source.h" |
27 #include "testing/gtest/include/gtest/gtest.h" | 28 #include "testing/gtest/include/gtest/gtest.h" |
28 | 29 |
29 using base::Time; | 30 using base::Time; |
30 using base::TimeDelta; | 31 using base::TimeDelta; |
| 32 using ::testing::Return; |
| 33 using ::testing::StrictMock; |
31 | 34 |
32 // Test the GenerateSearchURL on a thread or the main thread. | 35 // Test the GenerateSearchURL on a thread or the main thread. |
33 class TestGenerateSearchURL | 36 class TestGenerateSearchURL |
34 : public base::RefCountedThreadSafe<TestGenerateSearchURL> { | 37 : public base::RefCountedThreadSafe<TestGenerateSearchURL> { |
35 public: | 38 public: |
36 explicit TestGenerateSearchURL(SearchTermsData* search_terms_data) | 39 explicit TestGenerateSearchURL(SearchTermsData* search_terms_data) |
37 : search_terms_data_(search_terms_data), | 40 : search_terms_data_(search_terms_data), |
38 passed_(false) { | 41 passed_(false) { |
39 } | 42 } |
40 | 43 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 // current data. The caller owns the returned TemplateURL*. | 89 // current data. The caller owns the returned TemplateURL*. |
87 static TemplateURL* CreatePreloadedTemplateURL() { | 90 static TemplateURL* CreatePreloadedTemplateURL() { |
88 TemplateURL* t_url = new TemplateURL(); | 91 TemplateURL* t_url = new TemplateURL(); |
89 t_url->SetURL("http://www.unittest.com/", 0, 0); | 92 t_url->SetURL("http://www.unittest.com/", 0, 0); |
90 t_url->set_keyword(ASCIIToUTF16("unittest")); | 93 t_url->set_keyword(ASCIIToUTF16("unittest")); |
91 t_url->set_short_name(ASCIIToUTF16("unittest")); | 94 t_url->set_short_name(ASCIIToUTF16("unittest")); |
92 t_url->set_safe_for_autoreplace(true); | 95 t_url->set_safe_for_autoreplace(true); |
93 GURL favicon_url("http://favicon.url"); | 96 GURL favicon_url("http://favicon.url"); |
94 t_url->SetFaviconURL(favicon_url); | 97 t_url->SetFaviconURL(favicon_url); |
95 t_url->set_date_created(Time::FromTimeT(100)); | 98 t_url->set_date_created(Time::FromTimeT(100)); |
| 99 t_url->set_last_modified(Time::FromTimeT(100)); |
96 t_url->set_prepopulate_id(999999); | 100 t_url->set_prepopulate_id(999999); |
97 return t_url; | 101 return t_url; |
98 } | 102 } |
99 | 103 |
100 class TemplateURLServiceTest : public testing::Test { | 104 class TemplateURLServiceTest : public testing::Test { |
101 public: | 105 public: |
102 TemplateURLServiceTest() {} | 106 TemplateURLServiceTest() {} |
103 | 107 |
104 virtual void SetUp() { | 108 virtual void SetUp() { |
105 test_util_.SetUp(); | 109 test_util_.SetUp(); |
106 } | 110 } |
107 | 111 |
108 virtual void TearDown() { | 112 virtual void TearDown() { |
109 test_util_.TearDown(); | 113 test_util_.TearDown(); |
110 } | 114 } |
111 | 115 |
112 TemplateURL* AddKeywordWithDate(const std::string& keyword, | 116 TemplateURL* AddKeywordWithDate(const std::string& keyword, |
113 bool autogenerate_keyword, | 117 bool autogenerate_keyword, |
114 const std::string& url, | 118 const std::string& url, |
115 const std::string& suggest_url, | 119 const std::string& suggest_url, |
116 const std::string& favicon_url, | 120 const std::string& favicon_url, |
117 const std::string& encodings, | 121 const std::string& encodings, |
118 const std::string& short_name, | 122 const std::string& short_name, |
119 bool safe_for_autoreplace, | 123 bool safe_for_autoreplace, |
120 Time created_date) { | 124 Time created_date, |
| 125 Time last_modified) { |
121 TemplateURL* template_url = new TemplateURL(); | 126 TemplateURL* template_url = new TemplateURL(); |
122 template_url->SetURL(url, 0, 0); | 127 template_url->SetURL(url, 0, 0); |
123 template_url->SetSuggestionsURL(suggest_url, 0, 0); | 128 template_url->SetSuggestionsURL(suggest_url, 0, 0); |
124 template_url->SetFaviconURL(GURL(favicon_url)); | 129 template_url->SetFaviconURL(GURL(favicon_url)); |
125 template_url->set_keyword(UTF8ToUTF16(keyword)); | 130 template_url->set_keyword(UTF8ToUTF16(keyword)); |
126 template_url->set_autogenerate_keyword(autogenerate_keyword); | 131 template_url->set_autogenerate_keyword(autogenerate_keyword); |
127 template_url->set_short_name(UTF8ToUTF16(short_name)); | 132 template_url->set_short_name(UTF8ToUTF16(short_name)); |
128 std::vector<std::string> encodings_vector; | 133 std::vector<std::string> encodings_vector; |
129 base::SplitString(encodings, ';', &encodings_vector); | 134 base::SplitString(encodings, ';', &encodings_vector); |
130 template_url->set_input_encodings(encodings_vector); | 135 template_url->set_input_encodings(encodings_vector); |
131 template_url->set_date_created(created_date); | 136 template_url->set_date_created(created_date); |
| 137 template_url->set_last_modified(last_modified); |
132 template_url->set_safe_for_autoreplace(safe_for_autoreplace); | 138 template_url->set_safe_for_autoreplace(safe_for_autoreplace); |
133 model()->Add(template_url); | 139 model()->Add(template_url); |
134 EXPECT_NE(0, template_url->id()); | 140 EXPECT_NE(0, template_url->id()); |
135 return template_url; | 141 return template_url; |
136 } | 142 } |
137 | 143 |
138 // Simulate firing by the prefs service specifying that the managed | 144 // Simulate firing by the prefs service specifying that the managed |
139 // preferences have changed. | 145 // preferences have changed. |
140 void NotifyManagedPrefsHaveChanged() { | 146 void NotifyManagedPrefsHaveChanged() { |
141 model()->Observe( | 147 model()->Observe( |
142 NotificationType::PREF_CHANGED, | 148 NotificationType::PREF_CHANGED, |
143 Source<PrefService>(profile()->GetTestingPrefService()), | 149 Source<PrefService>(profile()->GetTestingPrefService()), |
144 Details<std::string>(NULL)); | 150 Details<std::string>(NULL)); |
145 } | 151 } |
146 | 152 |
147 // Verifies the two TemplateURLs are equal. | 153 // Verifies the two TemplateURLs are equal. |
148 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual) { | 154 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual) { |
149 ASSERT_TRUE(TemplateURLRef::SameUrlRefs(expected.url(), actual.url())); | 155 ASSERT_TRUE(TemplateURLRef::SameUrlRefs(expected.url(), actual.url())); |
150 ASSERT_TRUE(TemplateURLRef::SameUrlRefs(expected.suggestions_url(), | 156 ASSERT_TRUE(TemplateURLRef::SameUrlRefs(expected.suggestions_url(), |
151 actual.suggestions_url())); | 157 actual.suggestions_url())); |
152 ASSERT_EQ(expected.keyword(), actual.keyword()); | 158 ASSERT_EQ(expected.keyword(), actual.keyword()); |
153 ASSERT_EQ(expected.short_name(), actual.short_name()); | 159 ASSERT_EQ(expected.short_name(), actual.short_name()); |
154 ASSERT_EQ(JoinString(expected.input_encodings(), ';'), | 160 ASSERT_EQ(JoinString(expected.input_encodings(), ';'), |
155 JoinString(actual.input_encodings(), ';')); | 161 JoinString(actual.input_encodings(), ';')); |
156 ASSERT_TRUE(expected.GetFaviconURL() == actual.GetFaviconURL()); | 162 ASSERT_TRUE(expected.GetFaviconURL() == actual.GetFaviconURL()); |
157 ASSERT_EQ(expected.id(), actual.id()); | 163 ASSERT_EQ(expected.id(), actual.id()); |
158 ASSERT_EQ(expected.safe_for_autoreplace(), actual.safe_for_autoreplace()); | 164 ASSERT_EQ(expected.safe_for_autoreplace(), actual.safe_for_autoreplace()); |
159 ASSERT_EQ(expected.show_in_default_list(), actual.show_in_default_list()); | 165 ASSERT_EQ(expected.show_in_default_list(), actual.show_in_default_list()); |
160 ASSERT_TRUE(expected.date_created() == actual.date_created()); | 166 ASSERT_TRUE(expected.date_created() == actual.date_created()); |
| 167 ASSERT_TRUE(expected.last_modified() == actual.last_modified()); |
161 } | 168 } |
162 | 169 |
163 // Checks that the two TemplateURLs are similar. It does not check the id | 170 // Checks that the two TemplateURLs are similar. It does not check the id, the |
164 // and the date_created. Neither pointer should be NULL. | 171 // date_created or the last_modified time. Neither pointer should be NULL. |
165 void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual) { | 172 void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual) { |
166 ASSERT_TRUE(expected != NULL); | 173 ASSERT_TRUE(expected != NULL); |
167 ASSERT_TRUE(actual != NULL); | 174 ASSERT_TRUE(actual != NULL); |
168 EXPECT_TRUE(TemplateURLRef::SameUrlRefs(expected->url(), actual->url())); | 175 EXPECT_TRUE(TemplateURLRef::SameUrlRefs(expected->url(), actual->url())); |
169 EXPECT_TRUE(TemplateURLRef::SameUrlRefs(expected->suggestions_url(), | 176 EXPECT_TRUE(TemplateURLRef::SameUrlRefs(expected->suggestions_url(), |
170 actual->suggestions_url())); | 177 actual->suggestions_url())); |
171 EXPECT_EQ(expected->keyword(), actual->keyword()); | 178 EXPECT_EQ(expected->keyword(), actual->keyword()); |
172 EXPECT_EQ(expected->short_name(), actual->short_name()); | 179 EXPECT_EQ(expected->short_name(), actual->short_name()); |
173 EXPECT_EQ(JoinString(expected->input_encodings(), ';'), | 180 EXPECT_EQ(JoinString(expected->input_encodings(), ';'), |
174 JoinString(actual->input_encodings(), ';')); | 181 JoinString(actual->input_encodings(), ';')); |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 VerifyLoad(); | 387 VerifyLoad(); |
381 const size_t initial_count = model()->GetTemplateURLs().size(); | 388 const size_t initial_count = model()->GetTemplateURLs().size(); |
382 | 389 |
383 TemplateURL* t_url = new TemplateURL(); | 390 TemplateURL* t_url = new TemplateURL(); |
384 t_url->SetURL("http://www.google.com/foo/bar", 0, 0); | 391 t_url->SetURL("http://www.google.com/foo/bar", 0, 0); |
385 t_url->set_keyword(ASCIIToUTF16("keyword")); | 392 t_url->set_keyword(ASCIIToUTF16("keyword")); |
386 t_url->set_short_name(ASCIIToUTF16("google")); | 393 t_url->set_short_name(ASCIIToUTF16("google")); |
387 GURL favicon_url("http://favicon.url"); | 394 GURL favicon_url("http://favicon.url"); |
388 t_url->SetFaviconURL(favicon_url); | 395 t_url->SetFaviconURL(favicon_url); |
389 t_url->set_date_created(Time::FromTimeT(100)); | 396 t_url->set_date_created(Time::FromTimeT(100)); |
| 397 t_url->set_last_modified(Time::FromTimeT(100)); |
390 t_url->set_safe_for_autoreplace(true); | 398 t_url->set_safe_for_autoreplace(true); |
391 model()->Add(t_url); | 399 model()->Add(t_url); |
392 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), | 400 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), |
393 GURL(), NULL)); | 401 GURL(), NULL)); |
394 VerifyObserverCount(1); | 402 VerifyObserverCount(1); |
395 BlockTillServiceProcessesRequests(); | 403 BlockTillServiceProcessesRequests(); |
396 // We need to clone as model takes ownership of TemplateURL and will | 404 // We need to clone as model takes ownership of TemplateURL and will |
397 // delete it. | 405 // delete it. |
398 TemplateURL cloned_url(*t_url); | 406 TemplateURL cloned_url(*t_url); |
399 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); | 407 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); |
400 ASSERT_TRUE(model()->GetTemplateURLForKeyword(t_url->keyword()) == t_url); | 408 ASSERT_TRUE(model()->GetTemplateURLForKeyword(t_url->keyword()) == t_url); |
401 ASSERT_TRUE(t_url->date_created() == cloned_url.date_created()); | 409 ASSERT_TRUE(t_url->date_created() == cloned_url.date_created()); |
402 | 410 |
403 // Reload the model to verify it was actually saved to the database. | 411 // Reload the model to verify it was actually saved to the database. |
404 ResetModel(true); | 412 ResetModel(true); |
405 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); | 413 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); |
406 const TemplateURL* loaded_url = | 414 const TemplateURL* loaded_url = |
407 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 415 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
408 ASSERT_TRUE(loaded_url != NULL); | 416 ASSERT_TRUE(loaded_url != NULL); |
409 AssertEquals(cloned_url, *loaded_url); | 417 AssertEquals(cloned_url, *loaded_url); |
410 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), | 418 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), |
411 GURL(), NULL)); | 419 GURL(), NULL)); |
412 | 420 |
| 421 // We expect the last_modified time to be updated to the present time on an |
| 422 // explicit reset. We have to set up the expectation here because ResetModel |
| 423 // resets the TimeProvider in the TemplateURLService. |
| 424 StrictMock<base::MockTimeProvider> mock_time; |
| 425 model()->set_time_provider(&base::MockTimeProvider::StaticNow); |
| 426 EXPECT_CALL(mock_time, Now()) |
| 427 .WillOnce(Return(base::Time::FromDoubleT(1337))); |
| 428 |
413 // Mutate an element and verify it succeeded. | 429 // Mutate an element and verify it succeeded. |
414 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), | 430 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), |
415 ASCIIToUTF16("b"), "c"); | 431 ASCIIToUTF16("b"), "c"); |
416 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name()); | 432 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name()); |
417 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword()); | 433 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword()); |
418 ASSERT_EQ("c", loaded_url->url()->url()); | 434 ASSERT_EQ("c", loaded_url->url()->url()); |
419 ASSERT_FALSE(loaded_url->safe_for_autoreplace()); | 435 ASSERT_FALSE(loaded_url->safe_for_autoreplace()); |
420 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), | 436 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), |
421 GURL(), NULL)); | 437 GURL(), NULL)); |
422 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL)); | 438 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL)); |
423 cloned_url = *loaded_url; | 439 cloned_url = *loaded_url; |
424 BlockTillServiceProcessesRequests(); | 440 BlockTillServiceProcessesRequests(); |
425 ResetModel(true); | 441 ResetModel(true); |
426 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); | 442 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); |
427 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")); | 443 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")); |
428 ASSERT_TRUE(loaded_url != NULL); | 444 ASSERT_TRUE(loaded_url != NULL); |
429 AssertEquals(cloned_url, *loaded_url); | 445 AssertEquals(cloned_url, *loaded_url); |
| 446 // We changed a TemplateURL in the service, so ensure that the time was |
| 447 // updated. |
| 448 ASSERT_EQ(loaded_url->last_modified(), base::Time::FromDoubleT(1337)); |
430 | 449 |
431 // Remove an element and verify it succeeded. | 450 // Remove an element and verify it succeeded. |
432 model()->Remove(loaded_url); | 451 model()->Remove(loaded_url); |
433 VerifyObserverCount(1); | 452 VerifyObserverCount(1); |
434 ResetModel(true); | 453 ResetModel(true); |
435 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size()); | 454 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size()); |
436 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL); | 455 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL); |
437 } | 456 } |
438 | 457 |
439 TEST_F(TemplateURLServiceTest, GenerateKeyword) { | 458 TEST_F(TemplateURLServiceTest, GenerateKeyword) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) { | 504 TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) { |
486 Time now = Time::Now(); | 505 Time now = Time::Now(); |
487 TimeDelta one_day = TimeDelta::FromDays(1); | 506 TimeDelta one_day = TimeDelta::FromDays(1); |
488 Time month_ago = now - TimeDelta::FromDays(30); | 507 Time month_ago = now - TimeDelta::FromDays(30); |
489 | 508 |
490 // Nothing has been added. | 509 // Nothing has been added. |
491 EXPECT_EQ(0U, model()->GetTemplateURLs().size()); | 510 EXPECT_EQ(0U, model()->GetTemplateURLs().size()); |
492 | 511 |
493 // Create one with a 0 time. | 512 // Create one with a 0 time. |
494 AddKeywordWithDate("key1", false, "http://foo1", "http://suggest1", | 513 AddKeywordWithDate("key1", false, "http://foo1", "http://suggest1", |
495 "http://icon1", "UTF-8;UTF-16", "name1", true, Time()); | 514 "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), |
| 515 Time()); |
496 // Create one for now and +/- 1 day. | 516 // Create one for now and +/- 1 day. |
497 AddKeywordWithDate("key2", false, "http://foo2", "http://suggest2", | 517 AddKeywordWithDate("key2", false, "http://foo2", "http://suggest2", |
498 "http://icon2", "UTF-8;UTF-16", "name2", true, | 518 "http://icon2", "UTF-8;UTF-16", "name2", true, |
499 now - one_day); | 519 now - one_day, Time()); |
500 AddKeywordWithDate("key3", false, "http://foo3", "", "", "", "name3", | 520 AddKeywordWithDate("key3", false, "http://foo3", "", "", "", "name3", |
501 true, now); | 521 true, now, Time()); |
502 AddKeywordWithDate("key4", false, "http://foo4", "", "", "", "name4", | 522 AddKeywordWithDate("key4", false, "http://foo4", "", "", "", "name4", |
503 true, now + one_day); | 523 true, now + one_day, Time()); |
504 // Try the other three states. | 524 // Try the other three states. |
505 AddKeywordWithDate("key5", false, "http://foo5", "http://suggest5", | 525 AddKeywordWithDate("key5", false, "http://foo5", "http://suggest5", |
506 "http://icon5", "UTF-8;UTF-16", "name5", false, now); | 526 "http://icon5", "UTF-8;UTF-16", "name5", false, now, |
| 527 Time()); |
507 AddKeywordWithDate("key6", false, "http://foo6", "http://suggest6", | 528 AddKeywordWithDate("key6", false, "http://foo6", "http://suggest6", |
508 "http://icon6", "UTF-8;UTF-16", "name6", false, | 529 "http://icon6", "UTF-8;UTF-16", "name6", false, |
509 month_ago); | 530 month_ago, Time()); |
510 | 531 |
511 // We just added a few items, validate them. | 532 // We just added a few items, validate them. |
512 EXPECT_EQ(6U, model()->GetTemplateURLs().size()); | 533 EXPECT_EQ(6U, model()->GetTemplateURLs().size()); |
513 | 534 |
514 // Try removing from current timestamp. This should delete the one in the | 535 // Try removing from current timestamp. This should delete the one in the |
515 // future and one very recent one. | 536 // future and one very recent one. |
516 model()->RemoveAutoGeneratedSince(now); | 537 model()->RemoveAutoGeneratedSince(now); |
517 EXPECT_EQ(4U, model()->GetTemplateURLs().size()); | 538 EXPECT_EQ(4U, model()->GetTemplateURLs().size()); |
518 | 539 |
519 // Try removing from two months ago. This should only delete items that are | 540 // Try removing from two months ago. This should only delete items that are |
(...skipping 26 matching lines...) Expand all Loading... |
546 // Add a new TemplateURL. | 567 // Add a new TemplateURL. |
547 VerifyLoad(); | 568 VerifyLoad(); |
548 const size_t initial_count = model()->GetTemplateURLs().size(); | 569 const size_t initial_count = model()->GetTemplateURLs().size(); |
549 TemplateURL* t_url = new TemplateURL(); | 570 TemplateURL* t_url = new TemplateURL(); |
550 t_url->SetURL("http://www.google.com/foo/bar", 0, 0); | 571 t_url->SetURL("http://www.google.com/foo/bar", 0, 0); |
551 t_url->set_keyword(ASCIIToUTF16("keyword")); | 572 t_url->set_keyword(ASCIIToUTF16("keyword")); |
552 t_url->set_short_name(ASCIIToUTF16("google")); | 573 t_url->set_short_name(ASCIIToUTF16("google")); |
553 GURL favicon_url("http://favicon.url"); | 574 GURL favicon_url("http://favicon.url"); |
554 t_url->SetFaviconURL(favicon_url); | 575 t_url->SetFaviconURL(favicon_url); |
555 t_url->set_date_created(Time::FromTimeT(100)); | 576 t_url->set_date_created(Time::FromTimeT(100)); |
| 577 t_url->set_last_modified(Time::FromTimeT(100)); |
556 model()->Add(t_url); | 578 model()->Add(t_url); |
557 | 579 |
558 VerifyObserverCount(1); | 580 VerifyObserverCount(1); |
559 BlockTillServiceProcessesRequests(); | 581 BlockTillServiceProcessesRequests(); |
560 | 582 |
| 583 StrictMock<base::MockTimeProvider> mock_time; |
| 584 model()->set_time_provider(&base::MockTimeProvider::StaticNow); |
| 585 EXPECT_CALL(mock_time, Now()) |
| 586 .WillOnce(Return(base::Time::FromDoubleT(1337))); |
| 587 |
561 // Reset the short name, keyword, url and make sure it takes. | 588 // Reset the short name, keyword, url and make sure it takes. |
562 const string16 new_short_name(ASCIIToUTF16("a")); | 589 const string16 new_short_name(ASCIIToUTF16("a")); |
563 const string16 new_keyword(ASCIIToUTF16("b")); | 590 const string16 new_keyword(ASCIIToUTF16("b")); |
564 const std::string new_url("c"); | 591 const std::string new_url("c"); |
565 model()->ResetTemplateURL(t_url, new_short_name, new_keyword, new_url); | 592 model()->ResetTemplateURL(t_url, new_short_name, new_keyword, new_url); |
566 ASSERT_EQ(new_short_name, t_url->short_name()); | 593 ASSERT_EQ(new_short_name, t_url->short_name()); |
567 ASSERT_EQ(new_keyword, t_url->keyword()); | 594 ASSERT_EQ(new_keyword, t_url->keyword()); |
568 ASSERT_EQ(new_url, t_url->url()->url()); | 595 ASSERT_EQ(new_url, t_url->url()->url()); |
569 | 596 |
570 // Make sure the mappings in the model were updated. | 597 // Make sure the mappings in the model were updated. |
571 ASSERT_TRUE(model()->GetTemplateURLForKeyword(new_keyword) == t_url); | 598 ASSERT_TRUE(model()->GetTemplateURLForKeyword(new_keyword) == t_url); |
572 ASSERT_TRUE( | 599 ASSERT_TRUE( |
573 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); | 600 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); |
574 | 601 |
575 TemplateURL last_url = *t_url; | 602 TemplateURL last_url = *t_url; |
576 | 603 |
577 // Reload the model from the database and make sure the change took. | 604 // Reload the model from the database and make sure the change took. |
578 ResetModel(true); | 605 ResetModel(true); |
579 t_url = NULL; | 606 t_url = NULL; |
580 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 607 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
581 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); | 608 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); |
582 ASSERT_TRUE(read_url); | 609 ASSERT_TRUE(read_url); |
583 AssertEquals(last_url, *read_url); | 610 AssertEquals(last_url, *read_url); |
| 611 ASSERT_EQ(read_url->last_modified(), base::Time::FromDoubleT(1337)); |
584 } | 612 } |
585 | 613 |
586 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { | 614 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { |
587 // Add a new TemplateURL. | 615 // Add a new TemplateURL. |
588 VerifyLoad(); | 616 VerifyLoad(); |
589 const size_t initial_count = model()->GetTemplateURLs().size(); | 617 const size_t initial_count = model()->GetTemplateURLs().size(); |
590 TemplateURL* t_url = AddKeywordWithDate("key1", false, "http://foo1", | 618 TemplateURL* t_url = AddKeywordWithDate("key1", false, "http://foo1", |
591 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time()); | 619 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), |
| 620 Time()); |
592 | 621 |
593 test_util_.ResetObserverCount(); | 622 test_util_.ResetObserverCount(); |
594 model()->SetDefaultSearchProvider(t_url); | 623 model()->SetDefaultSearchProvider(t_url); |
595 | 624 |
596 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); | 625 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); |
597 | 626 |
598 ASSERT_TRUE(t_url->safe_for_autoreplace()); | 627 ASSERT_TRUE(t_url->safe_for_autoreplace()); |
599 ASSERT_TRUE(t_url->show_in_default_list()); | 628 ASSERT_TRUE(t_url->show_in_default_list()); |
600 | 629 |
601 // Setting the default search provider should have caused notification. | 630 // Setting the default search provider should have caused notification. |
(...skipping 11 matching lines...) Expand all Loading... |
613 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 642 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
614 AssertEquals(cloned_url, *model()->GetDefaultSearchProvider()); | 643 AssertEquals(cloned_url, *model()->GetDefaultSearchProvider()); |
615 } | 644 } |
616 | 645 |
617 TEST_F(TemplateURLServiceTest, TemplateURLWithNoKeyword) { | 646 TEST_F(TemplateURLServiceTest, TemplateURLWithNoKeyword) { |
618 VerifyLoad(); | 647 VerifyLoad(); |
619 | 648 |
620 const size_t initial_count = model()->GetTemplateURLs().size(); | 649 const size_t initial_count = model()->GetTemplateURLs().size(); |
621 | 650 |
622 AddKeywordWithDate("", false, "http://foo1", "http://sugg1", | 651 AddKeywordWithDate("", false, "http://foo1", "http://sugg1", |
623 "http://icon1", "UTF-8;UTF-16", "name1", true, Time()); | 652 "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), Time()); |
624 | 653 |
625 // We just added a few items, validate them. | 654 // We just added a few items, validate them. |
626 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 655 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
627 | 656 |
628 // Reload the model from the database and make sure we get the url back. | 657 // Reload the model from the database and make sure we get the url back. |
629 ResetModel(true); | 658 ResetModel(true); |
630 | 659 |
631 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); | 660 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); |
632 | 661 |
633 bool found_keyword = false; | 662 bool found_keyword = false; |
634 for (size_t i = 0; i < initial_count + 1; ++i) { | 663 for (size_t i = 0; i < initial_count + 1; ++i) { |
635 if (model()->GetTemplateURLs()[i]->keyword().empty()) { | 664 if (model()->GetTemplateURLs()[i]->keyword().empty()) { |
636 found_keyword = true; | 665 found_keyword = true; |
637 break; | 666 break; |
638 } | 667 } |
639 } | 668 } |
640 ASSERT_TRUE(found_keyword); | 669 ASSERT_TRUE(found_keyword); |
641 } | 670 } |
642 | 671 |
643 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { | 672 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { |
644 ChangeModelToLoadState(); | 673 ChangeModelToLoadState(); |
645 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), GURL(), NULL)); | 674 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), GURL(), NULL)); |
646 TemplateURL* t_url = AddKeywordWithDate("foo", false, "http://foo1", | 675 TemplateURL* t_url = AddKeywordWithDate("foo", false, "http://foo1", |
647 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time()); | 676 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), |
| 677 Time()); |
648 | 678 |
649 // Can still replace, newly added template url is marked safe to replace. | 679 // Can still replace, newly added template url is marked safe to replace. |
650 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), | 680 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), |
651 GURL("http://foo2"), NULL)); | 681 GURL("http://foo2"), NULL)); |
652 | 682 |
653 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should | 683 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should |
654 // no longer be replaceable. | 684 // no longer be replaceable. |
655 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), | 685 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), |
656 t_url->url()->url()); | 686 t_url->url()->url()); |
657 | 687 |
658 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), | 688 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), |
659 GURL("http://foo2"), NULL)); | 689 GURL("http://foo2"), NULL)); |
660 } | 690 } |
661 | 691 |
662 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) { | 692 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) { |
663 ChangeModelToLoadState(); | 693 ChangeModelToLoadState(); |
664 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), | 694 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), |
665 GURL("http://foo.com"), NULL)); | 695 GURL("http://foo.com"), NULL)); |
666 TemplateURL* t_url = AddKeywordWithDate("foo", false, "http://foo.com", | 696 TemplateURL* t_url = AddKeywordWithDate("foo", false, "http://foo.com", |
667 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time()); | 697 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), |
| 698 Time()); |
668 | 699 |
669 // Can still replace, newly added template url is marked safe to replace. | 700 // Can still replace, newly added template url is marked safe to replace. |
670 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), | 701 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), |
671 GURL("http://foo.com"), NULL)); | 702 GURL("http://foo.com"), NULL)); |
672 | 703 |
673 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should | 704 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should |
674 // no longer be replaceable. | 705 // no longer be replaceable. |
675 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), | 706 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), |
676 t_url->url()->url()); | 707 t_url->url()->url()); |
677 | 708 |
678 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), | 709 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), |
679 GURL("http://foo.com"), NULL)); | 710 GURL("http://foo.com"), NULL)); |
680 } | 711 } |
681 | 712 |
682 TEST_F(TemplateURLServiceTest, HasDefaultSearchProvider) { | 713 TEST_F(TemplateURLServiceTest, HasDefaultSearchProvider) { |
683 // We should have a default search provider even if we haven't loaded. | 714 // We should have a default search provider even if we haven't loaded. |
684 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 715 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
685 | 716 |
686 // Now force the model to load and make sure we still have a default. | 717 // Now force the model to load and make sure we still have a default. |
687 VerifyLoad(); | 718 VerifyLoad(); |
688 | 719 |
689 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 720 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
690 } | 721 } |
691 | 722 |
692 TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) { | 723 TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) { |
693 VerifyLoad(); | 724 VerifyLoad(); |
694 | 725 |
695 TemplateURL* template_url = new TemplateURL(); | 726 TemplateURL* template_url = new TemplateURL(); |
696 template_url->SetURL("http://url", 0, 0); | 727 template_url->SetURL("http://url", 0, 0); |
697 template_url->SetSuggestionsURL("http://url2", 0, 0); | 728 template_url->SetSuggestionsURL("http://url2", 0, 0); |
698 template_url->SetInstantURL("http://instant", 0, 0); | 729 template_url->SetInstantURL("http://instant", 0, 0); |
699 template_url->set_short_name(ASCIIToUTF16("a")); | 730 template_url->set_short_name(ASCIIToUTF16("a")); |
700 template_url->set_safe_for_autoreplace(true); | 731 template_url->set_safe_for_autoreplace(true); |
701 template_url->set_date_created(Time::FromTimeT(100)); | 732 template_url->set_date_created(Time::FromTimeT(100)); |
| 733 template_url->set_last_modified(Time::FromTimeT(100)); |
702 | 734 |
703 model()->Add(template_url); | 735 model()->Add(template_url); |
704 | 736 |
705 const TemplateURLID id = template_url->id(); | 737 const TemplateURLID id = template_url->id(); |
706 | 738 |
707 model()->SetDefaultSearchProvider(template_url); | 739 model()->SetDefaultSearchProvider(template_url); |
708 | 740 |
709 BlockTillServiceProcessesRequests(); | 741 BlockTillServiceProcessesRequests(); |
710 | 742 |
711 TemplateURL first_default_search_provider = *template_url; | 743 TemplateURL first_default_search_provider = *template_url; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
792 { "http://foo/foo?q=xx", string16() }, | 824 { "http://foo/foo?q=xx", string16() }, |
793 { "http://x/bar?q=xx", string16() }, | 825 { "http://x/bar?q=xx", string16() }, |
794 { "http://x/foo?y=xx", string16() }, | 826 { "http://x/foo?y=xx", string16() }, |
795 { "http://x/foo?q=xx", ASCIIToUTF16("xx") }, | 827 { "http://x/foo?q=xx", ASCIIToUTF16("xx") }, |
796 { "http://x/foo?a=b&q=xx", ASCIIToUTF16("xx") }, | 828 { "http://x/foo?a=b&q=xx", ASCIIToUTF16("xx") }, |
797 { "http://x/foo?q=b&q=xx", string16() }, | 829 { "http://x/foo?q=b&q=xx", string16() }, |
798 }; | 830 }; |
799 | 831 |
800 ChangeModelToLoadState(); | 832 ChangeModelToLoadState(); |
801 AddKeywordWithDate("x", false, "http://x/foo?q={searchTerms}", | 833 AddKeywordWithDate("x", false, "http://x/foo?q={searchTerms}", |
802 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name", false, Time()); | 834 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name", false, Time(), |
| 835 Time()); |
803 | 836 |
804 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 837 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { |
805 history::URLVisitedDetails details; | 838 history::URLVisitedDetails details; |
806 details.row = history::URLRow(GURL(data[i].url)); | 839 details.row = history::URLRow(GURL(data[i].url)); |
807 details.transition = 0; | 840 details.transition = 0; |
808 model()->UpdateKeywordSearchTermsForURL(details); | 841 model()->UpdateKeywordSearchTermsForURL(details); |
809 EXPECT_EQ(data[i].term, GetAndClearSearchTerm()); | 842 EXPECT_EQ(data[i].term, GetAndClearSearchTerm()); |
810 } | 843 } |
811 } | 844 } |
812 | 845 |
813 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) { | 846 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) { |
814 struct TestData { | 847 struct TestData { |
815 const std::string url; | 848 const std::string url; |
816 } data[] = { | 849 } data[] = { |
817 { "http://foo/" }, | 850 { "http://foo/" }, |
818 { "http://x/bar?q=xx" }, | 851 { "http://x/bar?q=xx" }, |
819 { "http://x/foo?y=xx" }, | 852 { "http://x/foo?y=xx" }, |
820 }; | 853 }; |
821 | 854 |
822 ChangeModelToLoadState(); | 855 ChangeModelToLoadState(); |
823 AddKeywordWithDate("x", false, "http://x/foo", "http://sugg1", | 856 AddKeywordWithDate("x", false, "http://x/foo", "http://sugg1", |
824 "http://icon1", "UTF-8;UTF-16", "name", false, Time()); | 857 "http://icon1", "UTF-8;UTF-16", "name", false, Time(), Time()); |
825 | 858 |
826 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 859 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { |
827 history::URLVisitedDetails details; | 860 history::URLVisitedDetails details; |
828 details.row = history::URLRow(GURL(data[i].url)); | 861 details.row = history::URLRow(GURL(data[i].url)); |
829 details.transition = 0; | 862 details.transition = 0; |
830 model()->UpdateKeywordSearchTermsForURL(details); | 863 model()->UpdateKeywordSearchTermsForURL(details); |
831 ASSERT_EQ(string16(), GetAndClearSearchTerm()); | 864 ASSERT_EQ(string16(), GetAndClearSearchTerm()); |
832 } | 865 } |
833 } | 866 } |
834 | 867 |
835 TEST_F(TemplateURLServiceTest, ChangeGoogleBaseValue) { | 868 TEST_F(TemplateURLServiceTest, ChangeGoogleBaseValue) { |
836 // NOTE: Do not do a VerifyLoad() here as it will load the prepopulate data, | 869 // NOTE: Do not do a VerifyLoad() here as it will load the prepopulate data, |
837 // which also has a {google:baseURL} keyword in it, which will confuse this | 870 // which also has a {google:baseURL} keyword in it, which will confuse this |
838 // test. | 871 // test. |
839 ChangeModelToLoadState(); | 872 ChangeModelToLoadState(); |
840 SetGoogleBaseURL("http://google.com/"); | 873 SetGoogleBaseURL("http://google.com/"); |
841 const TemplateURL* t_url = AddKeywordWithDate("", true, | 874 const TemplateURL* t_url = AddKeywordWithDate("", true, |
842 "{google:baseURL}?q={searchTerms}", "http://sugg1", "http://icon1", | 875 "{google:baseURL}?q={searchTerms}", "http://sugg1", "http://icon1", |
843 "UTF-8;UTF-16", "name", false, Time()); | 876 "UTF-8;UTF-16", "name", false, Time(), Time()); |
844 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com")); | 877 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com")); |
845 EXPECT_EQ("google.com", t_url->url()->GetHost()); | 878 EXPECT_EQ("google.com", t_url->url()->GetHost()); |
846 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword()); | 879 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword()); |
847 | 880 |
848 // Change the Google base url. | 881 // Change the Google base url. |
849 test_util_.ResetObserverCount(); | 882 test_util_.ResetObserverCount(); |
850 SetGoogleBaseURL("http://foo.com/"); | 883 SetGoogleBaseURL("http://foo.com/"); |
851 VerifyObserverCount(1); | 884 VerifyObserverCount(1); |
852 | 885 |
853 // Make sure the host->TemplateURL map was updated appropriately. | 886 // Make sure the host->TemplateURL map was updated appropriately. |
(...skipping 26 matching lines...) Expand all Loading... |
880 // Make sure TemplateURLService generates a KEYWORD_GENERATED visit for | 913 // Make sure TemplateURLService generates a KEYWORD_GENERATED visit for |
881 // KEYWORD visits. | 914 // KEYWORD visits. |
882 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) { | 915 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) { |
883 VerifyLoad(); | 916 VerifyLoad(); |
884 profile()->CreateHistoryService(true, false); | 917 profile()->CreateHistoryService(true, false); |
885 | 918 |
886 // Create a keyword. | 919 // Create a keyword. |
887 TemplateURL* t_url = AddKeywordWithDate( | 920 TemplateURL* t_url = AddKeywordWithDate( |
888 "keyword", false, "http://foo.com/foo?query={searchTerms}", | 921 "keyword", false, "http://foo.com/foo?query={searchTerms}", |
889 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "keyword", | 922 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "keyword", |
890 true, base::Time::Now()); | 923 true, base::Time::Now(), base::Time::Now()); |
891 | 924 |
892 // Add a visit that matches the url of the keyword. | 925 // Add a visit that matches the url of the keyword. |
893 HistoryService* history = | 926 HistoryService* history = |
894 profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); | 927 profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); |
895 history->AddPage( | 928 history->AddPage( |
896 GURL(t_url->url()->ReplaceSearchTerms(*t_url, ASCIIToUTF16("blah"), 0, | 929 GURL(t_url->url()->ReplaceSearchTerms(*t_url, ASCIIToUTF16("blah"), 0, |
897 string16())), | 930 string16())), |
898 NULL, 0, GURL(), PageTransition::KEYWORD, history::RedirectList(), | 931 NULL, 0, GURL(), PageTransition::KEYWORD, history::RedirectList(), |
899 history::SOURCE_BROWSED, false); | 932 history::SOURCE_BROWSED, false); |
900 | 933 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1095 // the default search as managed. Also check that we are getting the right | 1128 // the default search as managed. Also check that we are getting the right |
1096 // values. | 1129 // values. |
1097 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) { | 1130 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) { |
1098 VerifyLoad(); | 1131 VerifyLoad(); |
1099 const size_t initial_count = model()->GetTemplateURLs().size(); | 1132 const size_t initial_count = model()->GetTemplateURLs().size(); |
1100 test_util_.ResetObserverCount(); | 1133 test_util_.ResetObserverCount(); |
1101 | 1134 |
1102 // Set a regular default search provider. | 1135 // Set a regular default search provider. |
1103 TemplateURL* regular_default = AddKeywordWithDate("key1", false, | 1136 TemplateURL* regular_default = AddKeywordWithDate("key1", false, |
1104 "http://foo1", "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", | 1137 "http://foo1", "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", |
1105 true, Time()); | 1138 true, Time(), Time()); |
1106 VerifyObserverCount(1); | 1139 VerifyObserverCount(1); |
1107 model()->SetDefaultSearchProvider(regular_default); | 1140 model()->SetDefaultSearchProvider(regular_default); |
1108 // Adding the URL and setting the default search provider should have caused | 1141 // Adding the URL and setting the default search provider should have caused |
1109 // notifications. | 1142 // notifications. |
1110 VerifyObserverCount(1); | 1143 VerifyObserverCount(1); |
1111 EXPECT_FALSE(model()->is_default_search_managed()); | 1144 EXPECT_FALSE(model()->is_default_search_managed()); |
1112 EXPECT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); | 1145 EXPECT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); |
1113 | 1146 |
1114 // Set a managed preference that establishes a default search provider. | 1147 // Set a managed preference that establishes a default search provider. |
1115 const char kName[] = "test1"; | 1148 const char kName[] = "test1"; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1189 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); | 1222 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); |
1190 | 1223 |
1191 // Clear the model and disable the default search provider through policy. | 1224 // Clear the model and disable the default search provider through policy. |
1192 // Verify that there is no default search provider after loading the model. | 1225 // Verify that there is no default search provider after loading the model. |
1193 // This checks against regressions of http://crbug.com/67180 | 1226 // This checks against regressions of http://crbug.com/67180 |
1194 | 1227 |
1195 // First, remove the preferences, reset the model, and set a default. | 1228 // First, remove the preferences, reset the model, and set a default. |
1196 RemoveManagedDefaultSearchPreferences(); | 1229 RemoveManagedDefaultSearchPreferences(); |
1197 ResetModel(true); | 1230 ResetModel(true); |
1198 TemplateURL* t_url = AddKeywordWithDate("key1", false, "http://foo1", | 1231 TemplateURL* t_url = AddKeywordWithDate("key1", false, "http://foo1", |
1199 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time()); | 1232 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), |
| 1233 Time()); |
1200 model()->SetDefaultSearchProvider(t_url); | 1234 model()->SetDefaultSearchProvider(t_url); |
1201 EXPECT_EQ(t_url, model()->GetDefaultSearchProvider()); | 1235 EXPECT_EQ(t_url, model()->GetDefaultSearchProvider()); |
1202 | 1236 |
1203 // Now reset the model again but load it after setting the preferences. | 1237 // Now reset the model again but load it after setting the preferences. |
1204 ResetModel(false); | 1238 ResetModel(false); |
1205 SetManagedDefaultSearchPreferences(false, "", "", "", "", "", ""); | 1239 SetManagedDefaultSearchPreferences(false, "", "", "", "", "", ""); |
1206 VerifyLoad(); | 1240 VerifyLoad(); |
1207 EXPECT_TRUE(model()->is_default_search_managed()); | 1241 EXPECT_TRUE(model()->is_default_search_managed()); |
1208 EXPECT_TRUE(model()->GetDefaultSearchProvider() == NULL); | 1242 EXPECT_TRUE(model()->GetDefaultSearchProvider() == NULL); |
1209 } | 1243 } |
OLD | NEW |