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

Side by Side Diff: components/search_engines/template_url_service_unittest.cc

Issue 513133002: Move TemplateURLService related tests to components/search_engines (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/search_engines/template_url_service_sync_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_vector.h" 9 #include "base/memory/scoped_vector.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "base/strings/string_split.h" 11 #include "base/strings/string_split.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/task/cancelable_task_tracker.h" 14 #include "base/task/cancelable_task_tracker.h"
15 #include "base/test/mock_time_provider.h" 15 #include "base/test/mock_time_provider.h"
16 #include "base/threading/thread.h" 16 #include "base/threading/thread.h"
17 #include "base/time/time.h" 17 #include "base/time/time.h"
18 #include "chrome/browser/history/history_service.h" 18 #include "chrome/browser/history/history_service.h"
19 #include "chrome/browser/history/history_service_factory.h" 19 #include "chrome/browser/history/history_service_factory.h"
20 #include "chrome/browser/search_engines/template_url_service_test_util.h" 20 #include "chrome/browser/search_engines/template_url_service_test_util.h"
21 #include "chrome/browser/webdata/web_data_service_factory.h"
22 #include "chrome/test/base/testing_profile.h" 21 #include "chrome/test/base/testing_profile.h"
23 #include "components/search_engines/keyword_web_data_service.h" 22 #include "components/search_engines/keyword_web_data_service.h"
24 #include "components/search_engines/search_host_to_urls_map.h" 23 #include "components/search_engines/search_host_to_urls_map.h"
25 #include "components/search_engines/search_terms_data.h" 24 #include "components/search_engines/search_terms_data.h"
26 #include "components/search_engines/template_url.h" 25 #include "components/search_engines/template_url.h"
27 #include "components/search_engines/template_url_prepopulate_data.h" 26 #include "components/search_engines/template_url_prepopulate_data.h"
28 #include "components/search_engines/template_url_service.h" 27 #include "components/search_engines/template_url_service.h"
29 #include "components/webdata/common/web_database.h" 28 #include "content/public/test/test_browser_thread_bundle.h"
30 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
31 30
32 using base::ASCIIToUTF16; 31 using base::ASCIIToUTF16;
33 using base::Time; 32 using base::Time;
34 using base::TimeDelta; 33 using base::TimeDelta;
35 using ::testing::Return; 34 using ::testing::Return;
36 using ::testing::StrictMock; 35 using ::testing::StrictMock;
37 36
38 namespace { 37 namespace {
39 38
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 152
154 // Create an URL that appears to have been prepopulated, but won't be in the 153 // Create an URL that appears to have been prepopulated, but won't be in the
155 // current data. The caller owns the returned TemplateURL*. 154 // current data. The caller owns the returned TemplateURL*.
156 TemplateURL* CreatePreloadedTemplateURL(bool safe_for_autoreplace, 155 TemplateURL* CreatePreloadedTemplateURL(bool safe_for_autoreplace,
157 int prepopulate_id); 156 int prepopulate_id);
158 157
159 // Helper methods to make calling TemplateURLServiceTestUtil methods less 158 // Helper methods to make calling TemplateURLServiceTestUtil methods less
160 // visually noisy in the test code. 159 // visually noisy in the test code.
161 void VerifyObserverCount(int expected_changed_count); 160 void VerifyObserverCount(int expected_changed_count);
162 void VerifyObserverFired(); 161 void VerifyObserverFired();
162 TemplateURLServiceTestUtil* test_util() { return test_util_.get(); }
163 TemplateURLService* model() { return test_util_->model(); } 163 TemplateURLService* model() { return test_util_->model(); }
164 const SearchTermsData& search_terms_data() { 164 const SearchTermsData& search_terms_data() {
165 return model()->search_terms_data(); 165 return model()->search_terms_data();
166 } 166 }
167 167
168 protected: 168 private:
169 content::TestBrowserThreadBundle thread_bundle_; // To set up BrowserThreads.
169 scoped_ptr<TemplateURLServiceTestUtil> test_util_; 170 scoped_ptr<TemplateURLServiceTestUtil> test_util_;
170 171
171 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTest); 172 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTest);
172 }; 173 };
173 174
174 class TemplateURLServiceWithoutFallbackTest : public TemplateURLServiceTest { 175 class TemplateURLServiceWithoutFallbackTest : public TemplateURLServiceTest {
175 public: 176 public:
176 TemplateURLServiceWithoutFallbackTest() : TemplateURLServiceTest() {} 177 TemplateURLServiceWithoutFallbackTest() : TemplateURLServiceTest() {}
177 178
178 virtual void SetUp() OVERRIDE { 179 virtual void SetUp() OVERRIDE {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 257
257 void TemplateURLServiceTest::VerifyObserverFired() { 258 void TemplateURLServiceTest::VerifyObserverFired() {
258 EXPECT_LE(1, test_util_->GetObserverCount()); 259 EXPECT_LE(1, test_util_->GetObserverCount());
259 test_util_->ResetObserverCount(); 260 test_util_->ResetObserverCount();
260 } 261 }
261 262
262 263
263 // Actual tests --------------------------------------------------------------- 264 // Actual tests ---------------------------------------------------------------
264 265
265 TEST_F(TemplateURLServiceTest, Load) { 266 TEST_F(TemplateURLServiceTest, Load) {
266 test_util_->VerifyLoad(); 267 test_util()->VerifyLoad();
267 } 268 }
268 269
269 TEST_F(TemplateURLServiceTest, AddUpdateRemove) { 270 TEST_F(TemplateURLServiceTest, AddUpdateRemove) {
270 // Add a new TemplateURL. 271 // Add a new TemplateURL.
271 test_util_->VerifyLoad(); 272 test_util()->VerifyLoad();
272 const size_t initial_count = model()->GetTemplateURLs().size(); 273 const size_t initial_count = model()->GetTemplateURLs().size();
273 274
274 TemplateURLData data; 275 TemplateURLData data;
275 data.short_name = ASCIIToUTF16("google"); 276 data.short_name = ASCIIToUTF16("google");
276 data.SetKeyword(ASCIIToUTF16("keyword")); 277 data.SetKeyword(ASCIIToUTF16("keyword"));
277 data.SetURL("http://www.google.com/foo/bar"); 278 data.SetURL("http://www.google.com/foo/bar");
278 data.favicon_url = GURL("http://favicon.url"); 279 data.favicon_url = GURL("http://favicon.url");
279 data.safe_for_autoreplace = true; 280 data.safe_for_autoreplace = true;
280 data.date_created = Time::FromTimeT(100); 281 data.date_created = Time::FromTimeT(100);
281 data.last_modified = Time::FromTimeT(100); 282 data.last_modified = Time::FromTimeT(100);
282 data.sync_guid = "00000000-0000-0000-0000-000000000001"; 283 data.sync_guid = "00000000-0000-0000-0000-000000000001";
283 TemplateURL* t_url = new TemplateURL(data); 284 TemplateURL* t_url = new TemplateURL(data);
284 model()->Add(t_url); 285 model()->Add(t_url);
285 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), 286 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(),
286 NULL)); 287 NULL));
287 VerifyObserverCount(1); 288 VerifyObserverCount(1);
288 base::RunLoop().RunUntilIdle(); 289 base::RunLoop().RunUntilIdle();
289 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 290 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
290 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); 291 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword()));
291 // We need to make a second copy as the model takes ownership of |t_url| and 292 // We need to make a second copy as the model takes ownership of |t_url| and
292 // will delete it. We have to do this after calling Add() since that gives 293 // will delete it. We have to do this after calling Add() since that gives
293 // |t_url| its ID. 294 // |t_url| its ID.
294 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); 295 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
295 296
296 // Reload the model to verify it was actually saved to the database. 297 // Reload the model to verify it was actually saved to the database.
297 test_util_->ResetModel(true); 298 test_util()->ResetModel(true);
298 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 299 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
299 TemplateURL* loaded_url = 300 TemplateURL* loaded_url =
300 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 301 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
301 ASSERT_TRUE(loaded_url != NULL); 302 ASSERT_TRUE(loaded_url != NULL);
302 AssertEquals(*cloned_url, *loaded_url); 303 AssertEquals(*cloned_url, *loaded_url);
303 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), 304 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(),
304 NULL)); 305 NULL));
305 306
306 // We expect the last_modified time to be updated to the present time on an 307 // We expect the last_modified time to be updated to the present time on an
307 // explicit reset. We have to set up the expectation here because ResetModel 308 // explicit reset. We have to set up the expectation here because ResetModel
308 // resets the TimeProvider in the TemplateURLService. 309 // resets the TimeProvider in the TemplateURLService.
309 StrictMock<base::MockTimeProvider> mock_time; 310 StrictMock<base::MockTimeProvider> mock_time;
310 model()->set_time_provider(&base::MockTimeProvider::StaticNow); 311 model()->set_time_provider(&base::MockTimeProvider::StaticNow);
311 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); 312 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337)));
312 313
313 // Mutate an element and verify it succeeded. 314 // Mutate an element and verify it succeeded.
314 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), ASCIIToUTF16("b"), 315 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), ASCIIToUTF16("b"),
315 "c"); 316 "c");
316 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name()); 317 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name());
317 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword()); 318 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword());
318 ASSERT_EQ("c", loaded_url->url()); 319 ASSERT_EQ("c", loaded_url->url());
319 ASSERT_FALSE(loaded_url->safe_for_autoreplace()); 320 ASSERT_FALSE(loaded_url->safe_for_autoreplace());
320 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), 321 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(),
321 NULL)); 322 NULL));
322 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL)); 323 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL));
323 cloned_url.reset(new TemplateURL(loaded_url->data())); 324 cloned_url.reset(new TemplateURL(loaded_url->data()));
324 base::RunLoop().RunUntilIdle(); 325 base::RunLoop().RunUntilIdle();
325 test_util_->ResetModel(true); 326 test_util()->ResetModel(true);
326 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 327 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
327 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")); 328 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b"));
328 ASSERT_TRUE(loaded_url != NULL); 329 ASSERT_TRUE(loaded_url != NULL);
329 AssertEquals(*cloned_url, *loaded_url); 330 AssertEquals(*cloned_url, *loaded_url);
330 // We changed a TemplateURL in the service, so ensure that the time was 331 // We changed a TemplateURL in the service, so ensure that the time was
331 // updated. 332 // updated.
332 ASSERT_EQ(base::Time::FromDoubleT(1337), loaded_url->last_modified()); 333 ASSERT_EQ(base::Time::FromDoubleT(1337), loaded_url->last_modified());
333 334
334 // Remove an element and verify it succeeded. 335 // Remove an element and verify it succeeded.
335 model()->Remove(loaded_url); 336 model()->Remove(loaded_url);
336 VerifyObserverCount(1); 337 VerifyObserverCount(1);
337 test_util_->ResetModel(true); 338 test_util()->ResetModel(true);
338 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size()); 339 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size());
339 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL); 340 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL);
340 } 341 }
341 342
342 TEST_F(TemplateURLServiceTest, AddSameKeyword) { 343 TEST_F(TemplateURLServiceTest, AddSameKeyword) {
343 test_util_->VerifyLoad(); 344 test_util()->VerifyLoad();
344 345
345 AddKeywordWithDate( 346 AddKeywordWithDate(
346 "first", "keyword", "http://test1", std::string(), std::string(), 347 "first", "keyword", "http://test1", std::string(), std::string(),
347 std::string(), true, "UTF-8", Time(), Time()); 348 std::string(), true, "UTF-8", Time(), Time());
348 VerifyObserverCount(1); 349 VerifyObserverCount(1);
349 350
350 // Test what happens when we try to add a TemplateURL with the same keyword as 351 // Test what happens when we try to add a TemplateURL with the same keyword as
351 // one in the model. 352 // one in the model.
352 TemplateURLData data; 353 TemplateURLData data;
353 data.short_name = ASCIIToUTF16("second"); 354 data.short_name = ASCIIToUTF16("second");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 model()->Add(t_url2); 387 model()->Add(t_url2);
387 VerifyObserverCount(1); 388 VerifyObserverCount(1);
388 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 389 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
389 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); 390 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name());
390 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); 391 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword());
391 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); 392 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name());
392 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); 393 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword());
393 } 394 }
394 395
395 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { 396 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) {
396 test_util_->VerifyLoad(); 397 test_util()->VerifyLoad();
397 398
398 TemplateURL* original1 = AddKeywordWithDate( 399 TemplateURL* original1 = AddKeywordWithDate(
399 "replaceable", "keyword1", "http://test1", std::string(), std::string(), 400 "replaceable", "keyword1", "http://test1", std::string(), std::string(),
400 std::string(), true, "UTF-8", Time(), Time()); 401 std::string(), true, "UTF-8", Time(), Time());
401 TemplateURL* original2 = AddKeywordWithDate( 402 TemplateURL* original2 = AddKeywordWithDate(
402 "nonreplaceable", "keyword2", "http://test2", std::string(), 403 "nonreplaceable", "keyword2", "http://test2", std::string(),
403 std::string(), std::string(), false, "UTF-8", Time(), Time()); 404 std::string(), std::string(), false, "UTF-8", Time(), Time());
404 model()->RegisterOmniboxKeyword("test3", "extension", "keyword3", 405 model()->RegisterOmniboxKeyword("test3", "extension", "keyword3",
405 "http://test3"); 406 "http://test3");
406 TemplateURL* original3 = 407 TemplateURL* original3 =
(...skipping 20 matching lines...) Expand all
427 // They should override extension keywords added earlier. 428 // They should override extension keywords added earlier.
428 model()->RegisterOmniboxKeyword("test6", "test", "keyword3", "http://test6"); 429 model()->RegisterOmniboxKeyword("test6", "test", "keyword3", "http://test6");
429 TemplateURL* extension3 = 430 TemplateURL* extension3 =
430 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3")); 431 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3"));
431 ASSERT_TRUE(extension3); 432 ASSERT_TRUE(extension3);
432 EXPECT_EQ(original3, 433 EXPECT_EQ(original3,
433 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3_"))); 434 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3_")));
434 } 435 }
435 436
436 TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) { 437 TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) {
437 test_util_->VerifyLoad(); 438 test_util()->VerifyLoad();
438 439
439 // Similar to the AddSameKeyword test, but with an extension keyword masking a 440 // Similar to the AddSameKeyword test, but with an extension keyword masking a
440 // replaceable TemplateURL. We should still do correct conflict resolution 441 // replaceable TemplateURL. We should still do correct conflict resolution
441 // between the non-template URLs. 442 // between the non-template URLs.
442 model()->RegisterOmniboxKeyword("test2", "extension", "keyword", 443 model()->RegisterOmniboxKeyword("test2", "extension", "keyword",
443 "http://test2"); 444 "http://test2");
444 TemplateURL* extension = 445 TemplateURL* extension =
445 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 446 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
446 ASSERT_TRUE(extension); 447 ASSERT_TRUE(extension);
447 // Adding a keyword that matches the extension should cause the extension 448 // Adding a keyword that matches the extension should cause the extension
(...skipping 24 matching lines...) Expand all
472 TemplateURL* t_url2 = new TemplateURL(data); 473 TemplateURL* t_url2 = new TemplateURL(data);
473 model()->Add(t_url2); 474 model()->Add(t_url2);
474 EXPECT_EQ(t_url2, 475 EXPECT_EQ(t_url2,
475 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 476 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
476 EXPECT_TRUE(model()->GetTemplateURLForHost("test3") == NULL); 477 EXPECT_TRUE(model()->GetTemplateURLForHost("test3") == NULL);
477 EXPECT_EQ(extension, 478 EXPECT_EQ(extension,
478 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword_"))); 479 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword_")));
479 } 480 }
480 481
481 TEST_F(TemplateURLServiceTest, RestoreOmniboxExtensionKeyword) { 482 TEST_F(TemplateURLServiceTest, RestoreOmniboxExtensionKeyword) {
482 test_util_->VerifyLoad(); 483 test_util()->VerifyLoad();
483 484
484 // Register an omnibox keyword. 485 // Register an omnibox keyword.
485 model()->RegisterOmniboxKeyword("test", "extension", "keyword", 486 model()->RegisterOmniboxKeyword("test", "extension", "keyword",
486 "chrome-extension://test"); 487 "chrome-extension://test");
487 ASSERT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 488 ASSERT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
488 489
489 // Reload the data. 490 // Reload the data.
490 test_util_->ResetModel(true); 491 test_util()->ResetModel(true);
491 492
492 // Ensure the omnibox keyword is restored correctly. 493 // Ensure the omnibox keyword is restored correctly.
493 TemplateURL* t_url = 494 TemplateURL* t_url =
494 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 495 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
495 ASSERT_TRUE(t_url); 496 ASSERT_TRUE(t_url);
496 ASSERT_EQ(TemplateURL::OMNIBOX_API_EXTENSION, t_url->GetType()); 497 ASSERT_EQ(TemplateURL::OMNIBOX_API_EXTENSION, t_url->GetType());
497 EXPECT_EQ("test", t_url->GetExtensionId()); 498 EXPECT_EQ("test", t_url->GetExtensionId());
498 } 499 }
499 500
500 TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) { 501 TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 // Try removing foo3. This should delete foo3, but leave foo1 untouched. 607 // Try removing foo3. This should delete foo3, but leave foo1 untouched.
607 model()->RemoveAutoGeneratedForOriginBetween(GURL("http://foo3"), month_ago, 608 model()->RemoveAutoGeneratedForOriginBetween(GURL("http://foo3"), month_ago,
608 now + one_day + one_day); 609 now + one_day + one_day);
609 EXPECT_EQ(1U, model()->GetTemplateURLs().size()); 610 EXPECT_EQ(1U, model()->GetTemplateURLs().size());
610 EXPECT_EQ(ASCIIToUTF16("key1"), model()->GetTemplateURLs()[0]->keyword()); 611 EXPECT_EQ(ASCIIToUTF16("key1"), model()->GetTemplateURLs()[0]->keyword());
611 EXPECT_TRUE(model()->GetTemplateURLs()[0]->safe_for_autoreplace()); 612 EXPECT_TRUE(model()->GetTemplateURLs()[0]->safe_for_autoreplace());
612 } 613 }
613 614
614 TEST_F(TemplateURLServiceTest, Reset) { 615 TEST_F(TemplateURLServiceTest, Reset) {
615 // Add a new TemplateURL. 616 // Add a new TemplateURL.
616 test_util_->VerifyLoad(); 617 test_util()->VerifyLoad();
617 const size_t initial_count = model()->GetTemplateURLs().size(); 618 const size_t initial_count = model()->GetTemplateURLs().size();
618 TemplateURLData data; 619 TemplateURLData data;
619 data.short_name = ASCIIToUTF16("google"); 620 data.short_name = ASCIIToUTF16("google");
620 data.SetKeyword(ASCIIToUTF16("keyword")); 621 data.SetKeyword(ASCIIToUTF16("keyword"));
621 data.SetURL("http://www.google.com/foo/bar"); 622 data.SetURL("http://www.google.com/foo/bar");
622 data.favicon_url = GURL("http://favicon.url"); 623 data.favicon_url = GURL("http://favicon.url");
623 data.date_created = Time::FromTimeT(100); 624 data.date_created = Time::FromTimeT(100);
624 data.last_modified = Time::FromTimeT(100); 625 data.last_modified = Time::FromTimeT(100);
625 TemplateURL* t_url = new TemplateURL(data); 626 TemplateURL* t_url = new TemplateURL(data);
626 model()->Add(t_url); 627 model()->Add(t_url);
(...skipping 15 matching lines...) Expand all
642 ASSERT_EQ(new_url, t_url->url()); 643 ASSERT_EQ(new_url, t_url->url());
643 644
644 // Make sure the mappings in the model were updated. 645 // Make sure the mappings in the model were updated.
645 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword)); 646 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword));
646 ASSERT_TRUE( 647 ASSERT_TRUE(
647 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); 648 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL);
648 649
649 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); 650 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
650 651
651 // Reload the model from the database and make sure the change took. 652 // Reload the model from the database and make sure the change took.
652 test_util_->ResetModel(true); 653 test_util()->ResetModel(true);
653 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 654 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
654 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); 655 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword);
655 ASSERT_TRUE(read_url); 656 ASSERT_TRUE(read_url);
656 AssertEquals(*cloned_url, *read_url); 657 AssertEquals(*cloned_url, *read_url);
657 ASSERT_EQ(base::Time::FromDoubleT(1337), read_url->last_modified()); 658 ASSERT_EQ(base::Time::FromDoubleT(1337), read_url->last_modified());
658 } 659 }
659 660
660 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { 661 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) {
661 // Add a new TemplateURL. 662 // Add a new TemplateURL.
662 test_util_->VerifyLoad(); 663 test_util()->VerifyLoad();
663 const size_t initial_count = model()->GetTemplateURLs().size(); 664 const size_t initial_count = model()->GetTemplateURLs().size();
664 TemplateURL* t_url = AddKeywordWithDate( 665 TemplateURL* t_url = AddKeywordWithDate(
665 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", 666 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1",
666 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); 667 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
667 test_util_->ResetObserverCount(); 668 test_util()->ResetObserverCount();
668 669
669 model()->SetUserSelectedDefaultSearchProvider(t_url); 670 model()->SetUserSelectedDefaultSearchProvider(t_url);
670 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); 671 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider());
671 ASSERT_TRUE(t_url->safe_for_autoreplace()); 672 ASSERT_TRUE(t_url->safe_for_autoreplace());
672 ASSERT_TRUE(t_url->show_in_default_list()); 673 ASSERT_TRUE(t_url->show_in_default_list());
673 674
674 // Setting the default search provider should have caused notification. 675 // Setting the default search provider should have caused notification.
675 VerifyObserverCount(1); 676 VerifyObserverCount(1);
676 base::RunLoop().RunUntilIdle(); 677 base::RunLoop().RunUntilIdle();
677 678
678 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); 679 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
679 680
680 // Make sure when we reload we get a default search provider. 681 // Make sure when we reload we get a default search provider.
681 test_util_->ResetModel(true); 682 test_util()->ResetModel(true);
682 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 683 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
683 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 684 ASSERT_TRUE(model()->GetDefaultSearchProvider());
684 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); 685 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider());
685 } 686 }
686 687
687 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { 688 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) {
688 test_util_->ChangeModelToLoadState(); 689 test_util()->ChangeModelToLoadState();
689 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), GURL(), NULL)); 690 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), GURL(), NULL));
690 TemplateURL* t_url = AddKeywordWithDate( 691 TemplateURL* t_url = AddKeywordWithDate(
691 "name1", "foo", "http://foo1", "http://sugg1", std::string(), 692 "name1", "foo", "http://foo1", "http://sugg1", std::string(),
692 "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); 693 "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
693 694
694 // Can still replace, newly added template url is marked safe to replace. 695 // Can still replace, newly added template url is marked safe to replace.
695 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), 696 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"),
696 GURL("http://foo2"), NULL)); 697 GURL("http://foo2"), NULL));
697 698
698 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should 699 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should
699 // no longer be replaceable. 700 // no longer be replaceable.
700 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), 701 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(),
701 t_url->url()); 702 t_url->url());
702 703
703 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), 704 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"),
704 GURL("http://foo2"), NULL)); 705 GURL("http://foo2"), NULL));
705 } 706 }
706 707
707 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) { 708 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) {
708 test_util_->ChangeModelToLoadState(); 709 test_util()->ChangeModelToLoadState();
709 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), 710 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"),
710 GURL("http://foo.com"), NULL)); 711 GURL("http://foo.com"), NULL));
711 TemplateURL* t_url = AddKeywordWithDate( 712 TemplateURL* t_url = AddKeywordWithDate(
712 "name1", "foo", "http://foo.com", "http://sugg1", std::string(), 713 "name1", "foo", "http://foo.com", "http://sugg1", std::string(),
713 "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); 714 "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
714 715
715 // Can still replace, newly added template url is marked safe to replace. 716 // Can still replace, newly added template url is marked safe to replace.
716 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), 717 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"),
717 GURL("http://foo.com"), NULL)); 718 GURL("http://foo.com"), NULL));
718 719
719 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should 720 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should
720 // no longer be replaceable. 721 // no longer be replaceable.
721 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), 722 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(),
722 t_url->url()); 723 t_url->url());
723 724
724 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), 725 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"),
725 GURL("http://foo.com"), NULL)); 726 GURL("http://foo.com"), NULL));
726 } 727 }
727 728
728 TEST_F(TemplateURLServiceTest, HasDefaultSearchProvider) { 729 TEST_F(TemplateURLServiceTest, HasDefaultSearchProvider) {
729 // We should have a default search provider even if we haven't loaded. 730 // We should have a default search provider even if we haven't loaded.
730 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 731 ASSERT_TRUE(model()->GetDefaultSearchProvider());
731 732
732 // Now force the model to load and make sure we still have a default. 733 // Now force the model to load and make sure we still have a default.
733 test_util_->VerifyLoad(); 734 test_util()->VerifyLoad();
734 735
735 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 736 ASSERT_TRUE(model()->GetDefaultSearchProvider());
736 } 737 }
737 738
738 TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) { 739 TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) {
739 test_util_->VerifyLoad(); 740 test_util()->VerifyLoad();
740 741
741 TemplateURLData data; 742 TemplateURLData data;
742 data.short_name = ASCIIToUTF16("a"); 743 data.short_name = ASCIIToUTF16("a");
743 data.safe_for_autoreplace = true; 744 data.safe_for_autoreplace = true;
744 data.SetURL("http://url/{searchTerms}"); 745 data.SetURL("http://url/{searchTerms}");
745 data.suggestions_url = "http://url2"; 746 data.suggestions_url = "http://url2";
746 data.instant_url = "http://instant"; 747 data.instant_url = "http://instant";
747 data.date_created = Time::FromTimeT(100); 748 data.date_created = Time::FromTimeT(100);
748 data.last_modified = Time::FromTimeT(100); 749 data.last_modified = Time::FromTimeT(100);
749 TemplateURL* t_url = new TemplateURL(data); 750 TemplateURL* t_url = new TemplateURL(data);
750 model()->Add(t_url); 751 model()->Add(t_url);
751 const TemplateURLID id = t_url->id(); 752 const TemplateURLID id = t_url->id();
752 753
753 model()->SetUserSelectedDefaultSearchProvider(t_url); 754 model()->SetUserSelectedDefaultSearchProvider(t_url);
754 base::RunLoop().RunUntilIdle(); 755 base::RunLoop().RunUntilIdle();
755 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); 756 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
756 757
757 // Reset the model and don't load it. The template url we set as the default 758 // Reset the model and don't load it. The template url we set as the default
758 // should be pulled from prefs now. 759 // should be pulled from prefs now.
759 test_util_->ResetModel(false); 760 test_util()->ResetModel(false);
760 761
761 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs 762 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs
762 // value are persisted to prefs. 763 // value are persisted to prefs.
763 const TemplateURL* default_turl = model()->GetDefaultSearchProvider(); 764 const TemplateURL* default_turl = model()->GetDefaultSearchProvider();
764 ASSERT_TRUE(default_turl); 765 ASSERT_TRUE(default_turl);
765 EXPECT_EQ(ASCIIToUTF16("a"), default_turl->short_name()); 766 EXPECT_EQ(ASCIIToUTF16("a"), default_turl->short_name());
766 EXPECT_EQ("http://url/{searchTerms}", default_turl->url()); 767 EXPECT_EQ("http://url/{searchTerms}", default_turl->url());
767 EXPECT_EQ("http://url2", default_turl->suggestions_url()); 768 EXPECT_EQ("http://url2", default_turl->suggestions_url());
768 EXPECT_EQ("http://instant", default_turl->instant_url()); 769 EXPECT_EQ("http://instant", default_turl->instant_url());
769 EXPECT_EQ(id, default_turl->id()); 770 EXPECT_EQ(id, default_turl->id());
770 771
771 // Now do a load and make sure the default search provider really takes. 772 // Now do a load and make sure the default search provider really takes.
772 test_util_->VerifyLoad(); 773 test_util()->VerifyLoad();
773 774
774 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 775 ASSERT_TRUE(model()->GetDefaultSearchProvider());
775 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); 776 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider());
776 } 777 }
777 778
778 TEST_F(TemplateURLServiceTest, RepairPrepopulatedSearchEngines) { 779 TEST_F(TemplateURLServiceTest, RepairPrepopulatedSearchEngines) {
779 test_util_->VerifyLoad(); 780 test_util()->VerifyLoad();
780 781
781 // Edit Google search engine. 782 // Edit Google search engine.
782 TemplateURL* google = model()->GetTemplateURLForKeyword( 783 TemplateURL* google = model()->GetTemplateURLForKeyword(
783 ASCIIToUTF16("google.com")); 784 ASCIIToUTF16("google.com"));
784 ASSERT_TRUE(google); 785 ASSERT_TRUE(google);
785 model()->ResetTemplateURL(google, ASCIIToUTF16("trash"), ASCIIToUTF16("xxx"), 786 model()->ResetTemplateURL(google, ASCIIToUTF16("trash"), ASCIIToUTF16("xxx"),
786 "http://www.foo.com/s?q={searchTerms}"); 787 "http://www.foo.com/s?q={searchTerms}");
787 EXPECT_EQ(ASCIIToUTF16("trash"), google->short_name()); 788 EXPECT_EQ(ASCIIToUTF16("trash"), google->short_name());
788 EXPECT_EQ(ASCIIToUTF16("xxx"), google->keyword()); 789 EXPECT_EQ(ASCIIToUTF16("xxx"), google->keyword());
789 790
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 829
829 TEST_F(TemplateURLServiceTest, RepairSearchEnginesWithManagedDefault) { 830 TEST_F(TemplateURLServiceTest, RepairSearchEnginesWithManagedDefault) {
830 // Set a managed preference that establishes a default search provider. 831 // Set a managed preference that establishes a default search provider.
831 const char kName[] = "test1"; 832 const char kName[] = "test1";
832 const char kKeyword[] = "test.com"; 833 const char kKeyword[] = "test.com";
833 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; 834 const char kSearchURL[] = "http://test.com/search?t={searchTerms}";
834 const char kIconURL[] = "http://test.com/icon.jpg"; 835 const char kIconURL[] = "http://test.com/icon.jpg";
835 const char kEncodings[] = "UTF-16;UTF-32"; 836 const char kEncodings[] = "UTF-16;UTF-32";
836 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; 837 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}";
837 const char kSearchTermsReplacementKey[] = "espv"; 838 const char kSearchTermsReplacementKey[] = "espv";
838 test_util_->SetManagedDefaultSearchPreferences(true, kName, kKeyword, 839 test_util()->SetManagedDefaultSearchPreferences(true, kName, kKeyword,
839 kSearchURL, std::string(), 840 kSearchURL, std::string(),
840 kIconURL, kEncodings, 841 kIconURL, kEncodings,
841 kAlternateURL, 842 kAlternateURL,
842 kSearchTermsReplacementKey); 843 kSearchTermsReplacementKey);
843 test_util_->VerifyLoad(); 844 test_util()->VerifyLoad();
844 // Verify that the default manager we are getting is the managed one. 845 // Verify that the default manager we are getting is the managed one.
845 TemplateURLData data; 846 TemplateURLData data;
846 data.short_name = ASCIIToUTF16(kName); 847 data.short_name = ASCIIToUTF16(kName);
847 data.SetKeyword(ASCIIToUTF16(kKeyword)); 848 data.SetKeyword(ASCIIToUTF16(kKeyword));
848 data.SetURL(kSearchURL); 849 data.SetURL(kSearchURL);
849 data.favicon_url = GURL(kIconURL); 850 data.favicon_url = GURL(kIconURL);
850 data.show_in_default_list = true; 851 data.show_in_default_list = true;
851 base::SplitString(kEncodings, ';', &data.input_encodings); 852 base::SplitString(kEncodings, ';', &data.input_encodings);
852 data.alternate_urls.push_back(kAlternateURL); 853 data.alternate_urls.push_back(kAlternateURL);
853 data.search_terms_replacement_key = kSearchTermsReplacementKey; 854 data.search_terms_replacement_key = kSearchTermsReplacementKey;
(...skipping 22 matching lines...) Expand all
876 { "http://x/foo?y=xx", base::string16() }, 877 { "http://x/foo?y=xx", base::string16() },
877 { "http://x/foo?q=xx", ASCIIToUTF16("xx") }, 878 { "http://x/foo?q=xx", ASCIIToUTF16("xx") },
878 { "http://x/foo?a=b&q=xx", ASCIIToUTF16("xx") }, 879 { "http://x/foo?a=b&q=xx", ASCIIToUTF16("xx") },
879 { "http://x/foo?q=b&q=xx", base::string16() }, 880 { "http://x/foo?q=b&q=xx", base::string16() },
880 { "http://x/foo#query=xx", ASCIIToUTF16("xx") }, 881 { "http://x/foo#query=xx", ASCIIToUTF16("xx") },
881 { "http://x/foo?q=b#query=xx", ASCIIToUTF16("xx") }, 882 { "http://x/foo?q=b#query=xx", ASCIIToUTF16("xx") },
882 { "http://x/foo?q=b#q=xx", ASCIIToUTF16("b") }, 883 { "http://x/foo?q=b#q=xx", ASCIIToUTF16("b") },
883 { "http://x/foo?query=b#q=xx", base::string16() }, 884 { "http://x/foo?query=b#q=xx", base::string16() },
884 }; 885 };
885 886
886 test_util_->ChangeModelToLoadState(); 887 test_util()->ChangeModelToLoadState();
887 AddKeywordWithDate("name", "x", "http://x/foo?q={searchTerms}", 888 AddKeywordWithDate("name", "x", "http://x/foo?q={searchTerms}",
888 "http://sugg1", "http://x/foo#query={searchTerms}", 889 "http://sugg1", "http://x/foo#query={searchTerms}",
889 "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); 890 "http://icon1", false, "UTF-8;UTF-16", Time(), Time());
890 891
891 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { 892 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
892 TemplateURLService::URLVisitedDetails details = { 893 TemplateURLService::URLVisitedDetails details = {
893 GURL(data[i].url), false 894 GURL(data[i].url), false
894 }; 895 };
895 model()->UpdateKeywordSearchTermsForURL(details); 896 model()->UpdateKeywordSearchTermsForURL(details);
896 EXPECT_EQ(data[i].term, test_util_->GetAndClearSearchTerm()); 897 EXPECT_EQ(data[i].term, test_util()->GetAndClearSearchTerm());
897 } 898 }
898 } 899 }
899 900
900 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) { 901 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) {
901 struct TestData { 902 struct TestData {
902 const std::string url; 903 const std::string url;
903 } data[] = { 904 } data[] = {
904 { "http://foo/" }, 905 { "http://foo/" },
905 { "http://x/bar?q=xx" }, 906 { "http://x/bar?q=xx" },
906 { "http://x/foo?y=xx" }, 907 { "http://x/foo?y=xx" },
907 }; 908 };
908 909
909 test_util_->ChangeModelToLoadState(); 910 test_util()->ChangeModelToLoadState();
910 AddKeywordWithDate("name", "x", "http://x/foo", "http://sugg1", std::string(), 911 AddKeywordWithDate("name", "x", "http://x/foo", "http://sugg1", std::string(),
911 "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); 912 "http://icon1", false, "UTF-8;UTF-16", Time(), Time());
912 913
913 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { 914 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
914 TemplateURLService::URLVisitedDetails details = { 915 TemplateURLService::URLVisitedDetails details = {
915 GURL(data[i].url), false 916 GURL(data[i].url), false
916 }; 917 };
917 model()->UpdateKeywordSearchTermsForURL(details); 918 model()->UpdateKeywordSearchTermsForURL(details);
918 ASSERT_EQ(base::string16(), test_util_->GetAndClearSearchTerm()); 919 ASSERT_EQ(base::string16(), test_util()->GetAndClearSearchTerm());
919 } 920 }
920 } 921 }
921 922
922 TEST_F(TemplateURLServiceWithoutFallbackTest, ChangeGoogleBaseValue) { 923 TEST_F(TemplateURLServiceWithoutFallbackTest, ChangeGoogleBaseValue) {
923 // NOTE: Do not load the prepopulate data, which also has a {google:baseURL} 924 // NOTE: Do not load the prepopulate data, which also has a {google:baseURL}
924 // keyword in it and would confuse this test. 925 // keyword in it and would confuse this test.
925 test_util_->ChangeModelToLoadState(); 926 test_util()->ChangeModelToLoadState();
926 927
927 test_util_->SetGoogleBaseURL(GURL("http://google.com/")); 928 test_util()->SetGoogleBaseURL(GURL("http://google.com/"));
928 const TemplateURL* t_url = AddKeywordWithDate( 929 const TemplateURL* t_url = AddKeywordWithDate(
929 "name", "google.com", "{google:baseURL}?q={searchTerms}", "http://sugg1", 930 "name", "google.com", "{google:baseURL}?q={searchTerms}", "http://sugg1",
930 std::string(), "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); 931 std::string(), "http://icon1", false, "UTF-8;UTF-16", Time(), Time());
931 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com")); 932 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com"));
932 EXPECT_EQ("google.com", t_url->url_ref().GetHost(search_terms_data())); 933 EXPECT_EQ("google.com", t_url->url_ref().GetHost(search_terms_data()));
933 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword()); 934 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword());
934 935
935 // Change the Google base url. 936 // Change the Google base url.
936 test_util_->ResetObserverCount(); 937 test_util()->ResetObserverCount();
937 test_util_->SetGoogleBaseURL(GURL("http://google.co.uk/")); 938 test_util()->SetGoogleBaseURL(GURL("http://google.co.uk/"));
938 VerifyObserverCount(1); 939 VerifyObserverCount(1);
939 940
940 // Make sure the host->TemplateURL map was updated appropriately. 941 // Make sure the host->TemplateURL map was updated appropriately.
941 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.co.uk")); 942 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.co.uk"));
942 EXPECT_TRUE(model()->GetTemplateURLForHost("google.com") == NULL); 943 EXPECT_TRUE(model()->GetTemplateURLForHost("google.com") == NULL);
943 EXPECT_EQ("google.co.uk", t_url->url_ref().GetHost(search_terms_data())); 944 EXPECT_EQ("google.co.uk", t_url->url_ref().GetHost(search_terms_data()));
944 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword()); 945 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword());
945 EXPECT_EQ("http://google.co.uk/?q=x", t_url->url_ref().ReplaceSearchTerms( 946 EXPECT_EQ("http://google.co.uk/?q=x", t_url->url_ref().ReplaceSearchTerms(
946 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("x")), search_terms_data())); 947 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("x")), search_terms_data()));
947 948
948 // Now add a manual entry and then change the Google base URL such that the 949 // Now add a manual entry and then change the Google base URL such that the
949 // autogenerated Google search keyword would conflict. 950 // autogenerated Google search keyword would conflict.
950 TemplateURL* manual = AddKeywordWithDate( 951 TemplateURL* manual = AddKeywordWithDate(
951 "manual", "google.de", "http://google.de/search?q={searchTerms}", 952 "manual", "google.de", "http://google.de/search?q={searchTerms}",
952 std::string(), std::string(), std::string(), false, "UTF-8", Time(), 953 std::string(), std::string(), std::string(), false, "UTF-8", Time(),
953 Time()); 954 Time());
954 test_util_->SetGoogleBaseURL(GURL("http://google.de")); 955 test_util()->SetGoogleBaseURL(GURL("http://google.de"));
955 956
956 // Verify that the manual entry is untouched, and the autogenerated keyword 957 // Verify that the manual entry is untouched, and the autogenerated keyword
957 // has not changed. 958 // has not changed.
958 ASSERT_EQ(manual, 959 ASSERT_EQ(manual,
959 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.de"))); 960 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.de")));
960 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data())); 961 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data()));
961 ASSERT_EQ(t_url, 962 ASSERT_EQ(t_url,
962 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.co.uk"))); 963 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.co.uk")));
963 EXPECT_EQ("google.de", t_url->url_ref().GetHost(search_terms_data())); 964 EXPECT_EQ("google.de", t_url->url_ref().GetHost(search_terms_data()));
964 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword()); 965 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword());
965 966
966 // Change the base URL again and verify that the autogenerated keyword follows 967 // Change the base URL again and verify that the autogenerated keyword follows
967 // even though it didn't match the base URL, while the manual entry is still 968 // even though it didn't match the base URL, while the manual entry is still
968 // untouched. 969 // untouched.
969 test_util_->SetGoogleBaseURL(GURL("http://google.fr/")); 970 test_util()->SetGoogleBaseURL(GURL("http://google.fr/"));
970 ASSERT_EQ(manual, model()->GetTemplateURLForHost("google.de")); 971 ASSERT_EQ(manual, model()->GetTemplateURLForHost("google.de"));
971 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data())); 972 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data()));
972 EXPECT_EQ(ASCIIToUTF16("google.de"), manual->keyword()); 973 EXPECT_EQ(ASCIIToUTF16("google.de"), manual->keyword());
973 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.fr")); 974 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.fr"));
974 EXPECT_TRUE(model()->GetTemplateURLForHost("google.co.uk") == NULL); 975 EXPECT_TRUE(model()->GetTemplateURLForHost("google.co.uk") == NULL);
975 EXPECT_EQ("google.fr", t_url->url_ref().GetHost(search_terms_data())); 976 EXPECT_EQ("google.fr", t_url->url_ref().GetHost(search_terms_data()));
976 EXPECT_EQ(ASCIIToUTF16("google.fr"), t_url->keyword()); 977 EXPECT_EQ(ASCIIToUTF16("google.fr"), t_url->keyword());
977 } 978 }
978 979
979 // Make sure TemplateURLService generates a KEYWORD_GENERATED visit for 980 // Make sure TemplateURLService generates a KEYWORD_GENERATED visit for
980 // KEYWORD visits. 981 // KEYWORD visits.
981 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) { 982 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) {
982 test_util_->VerifyLoad(); 983 test_util()->VerifyLoad();
983 ASSERT_TRUE(test_util_->profile()->CreateHistoryService(true, false)); 984 ASSERT_TRUE(test_util()->profile()->CreateHistoryService(true, false));
984 985
985 // Create a keyword. 986 // Create a keyword.
986 TemplateURL* t_url = AddKeywordWithDate( 987 TemplateURL* t_url = AddKeywordWithDate(
987 "keyword", "keyword", "http://foo.com/foo?query={searchTerms}", 988 "keyword", "keyword", "http://foo.com/foo?query={searchTerms}",
988 "http://sugg1", std::string(), "http://icon1", true, "UTF-8;UTF-16", 989 "http://sugg1", std::string(), "http://icon1", true, "UTF-8;UTF-16",
989 base::Time::Now(), base::Time::Now()); 990 base::Time::Now(), base::Time::Now());
990 991
991 // Add a visit that matches the url of the keyword. 992 // Add a visit that matches the url of the keyword.
992 HistoryService* history = 993 HistoryService* history =
993 HistoryServiceFactory::GetForProfile(test_util_->profile(), 994 HistoryServiceFactory::GetForProfile(test_util()->profile(),
994 Profile::EXPLICIT_ACCESS); 995 Profile::EXPLICIT_ACCESS);
995 history->AddPage( 996 history->AddPage(
996 GURL(t_url->url_ref().ReplaceSearchTerms( 997 GURL(t_url->url_ref().ReplaceSearchTerms(
997 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("blah")), 998 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("blah")),
998 search_terms_data())), 999 search_terms_data())),
999 base::Time::Now(), NULL, 0, GURL(), history::RedirectList(), 1000 base::Time::Now(), NULL, 0, GURL(), history::RedirectList(),
1000 content::PAGE_TRANSITION_KEYWORD, history::SOURCE_BROWSED, false); 1001 content::PAGE_TRANSITION_KEYWORD, history::SOURCE_BROWSED, false);
1001 1002
1002 // Wait for history to finish processing the request. 1003 // Wait for history to finish processing the request.
1003 test_util_->profile()->BlockUntilHistoryProcessesPendingRequests(); 1004 test_util()->profile()->BlockUntilHistoryProcessesPendingRequests();
1004 1005
1005 // Query history for the generated url. 1006 // Query history for the generated url.
1006 base::CancelableTaskTracker tracker; 1007 base::CancelableTaskTracker tracker;
1007 QueryHistoryCallbackImpl callback; 1008 QueryHistoryCallbackImpl callback;
1008 history->QueryURL(GURL("http://keyword"), 1009 history->QueryURL(GURL("http://keyword"),
1009 true, 1010 true,
1010 base::Bind(&QueryHistoryCallbackImpl::Callback, 1011 base::Bind(&QueryHistoryCallbackImpl::Callback,
1011 base::Unretained(&callback)), 1012 base::Unretained(&callback)),
1012 &tracker); 1013 &tracker);
1013 1014
1014 // Wait for the request to be processed. 1015 // Wait for the request to be processed.
1015 test_util_->profile()->BlockUntilHistoryProcessesPendingRequests(); 1016 test_util()->profile()->BlockUntilHistoryProcessesPendingRequests();
1016 1017
1017 // And make sure the url and visit were added. 1018 // And make sure the url and visit were added.
1018 EXPECT_TRUE(callback.success); 1019 EXPECT_TRUE(callback.success);
1019 EXPECT_NE(0, callback.row.id()); 1020 EXPECT_NE(0, callback.row.id());
1020 ASSERT_EQ(1U, callback.visits.size()); 1021 ASSERT_EQ(1U, callback.visits.size());
1021 EXPECT_EQ(content::PAGE_TRANSITION_KEYWORD_GENERATED, 1022 EXPECT_EQ(content::PAGE_TRANSITION_KEYWORD_GENERATED,
1022 content::PageTransitionStripQualifier(callback.visits[0].transition)); 1023 content::PageTransitionStripQualifier(callback.visits[0].transition));
1023 } 1024 }
1024 1025
1025 // Make sure that the load routine deletes prepopulated engines that no longer 1026 // Make sure that the load routine deletes prepopulated engines that no longer
1026 // exist in the prepopulate data. 1027 // exist in the prepopulate data.
1027 TEST_F(TemplateURLServiceTest, LoadDeletesUnusedProvider) { 1028 TEST_F(TemplateURLServiceTest, LoadDeletesUnusedProvider) {
1028 // Create a preloaded template url. Add it to a loaded model and wait for the 1029 // Create a preloaded template url. Add it to a loaded model and wait for the
1029 // saves to finish. 1030 // saves to finish.
1030 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); 1031 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999);
1031 test_util_->ChangeModelToLoadState(); 1032 test_util()->ChangeModelToLoadState();
1032 model()->Add(t_url); 1033 model()->Add(t_url);
1033 ASSERT_TRUE( 1034 ASSERT_TRUE(
1034 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); 1035 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL);
1035 base::RunLoop().RunUntilIdle(); 1036 base::RunLoop().RunUntilIdle();
1036 1037
1037 // Ensure that merging clears this engine. 1038 // Ensure that merging clears this engine.
1038 test_util_->ResetModel(true); 1039 test_util()->ResetModel(true);
1039 ASSERT_TRUE( 1040 ASSERT_TRUE(
1040 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); 1041 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL);
1041 1042
1042 // Wait for any saves to finish. 1043 // Wait for any saves to finish.
1043 base::RunLoop().RunUntilIdle(); 1044 base::RunLoop().RunUntilIdle();
1044 1045
1045 // Reload the model to verify that the database was updated as a result of the 1046 // Reload the model to verify that the database was updated as a result of the
1046 // merge. 1047 // merge.
1047 test_util_->ResetModel(true); 1048 test_util()->ResetModel(true);
1048 ASSERT_TRUE( 1049 ASSERT_TRUE(
1049 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); 1050 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL);
1050 } 1051 }
1051 1052
1052 // Make sure that load routine doesn't delete prepopulated engines that no 1053 // Make sure that load routine doesn't delete prepopulated engines that no
1053 // longer exist in the prepopulate data if it has been modified by the user. 1054 // longer exist in the prepopulate data if it has been modified by the user.
1054 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) { 1055 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) {
1055 // Create a preloaded template url and add it to a loaded model. 1056 // Create a preloaded template url and add it to a loaded model.
1056 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999); 1057 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999);
1057 test_util_->ChangeModelToLoadState(); 1058 test_util()->ChangeModelToLoadState();
1058 model()->Add(t_url); 1059 model()->Add(t_url);
1059 1060
1060 // Do the copy after t_url is added so that the id is set. 1061 // Do the copy after t_url is added so that the id is set.
1061 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); 1062 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
1062 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); 1063 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")));
1063 1064
1064 // Wait for any saves to finish. 1065 // Wait for any saves to finish.
1065 base::RunLoop().RunUntilIdle(); 1066 base::RunLoop().RunUntilIdle();
1066 1067
1067 // Ensure that merging won't clear it if the user has edited it. 1068 // Ensure that merging won't clear it if the user has edited it.
1068 test_util_->ResetModel(true); 1069 test_util()->ResetModel(true);
1069 const TemplateURL* url_for_unittest = 1070 const TemplateURL* url_for_unittest =
1070 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); 1071 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"));
1071 ASSERT_TRUE(url_for_unittest != NULL); 1072 ASSERT_TRUE(url_for_unittest != NULL);
1072 AssertEquals(*cloned_url, *url_for_unittest); 1073 AssertEquals(*cloned_url, *url_for_unittest);
1073 1074
1074 // Wait for any saves to finish. 1075 // Wait for any saves to finish.
1075 base::RunLoop().RunUntilIdle(); 1076 base::RunLoop().RunUntilIdle();
1076 1077
1077 // Reload the model to verify that save/reload retains the item. 1078 // Reload the model to verify that save/reload retains the item.
1078 test_util_->ResetModel(true); 1079 test_util()->ResetModel(true);
1079 ASSERT_TRUE( 1080 ASSERT_TRUE(
1080 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); 1081 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL);
1081 } 1082 }
1082 1083
1083 // Make sure that load routine doesn't delete 1084 // Make sure that load routine doesn't delete
1084 // prepopulated engines that no longer exist in the prepopulate data if 1085 // prepopulated engines that no longer exist in the prepopulate data if
1085 // it has been modified by the user. 1086 // it has been modified by the user.
1086 TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) { 1087 TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) {
1087 test_util_->VerifyLoad(); 1088 test_util()->VerifyLoad();
1088 // Verify that the default search provider is set to something. 1089 // Verify that the default search provider is set to something.
1089 TemplateURL* default_search = model()->GetDefaultSearchProvider(); 1090 TemplateURL* default_search = model()->GetDefaultSearchProvider();
1090 ASSERT_TRUE(default_search != NULL); 1091 ASSERT_TRUE(default_search != NULL);
1091 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(default_search->data())); 1092 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(default_search->data()));
1092 1093
1093 // Wait for any saves to finish. 1094 // Wait for any saves to finish.
1094 base::RunLoop().RunUntilIdle(); 1095 base::RunLoop().RunUntilIdle();
1095 1096
1096 // Reload the model and check that the default search provider 1097 // Reload the model and check that the default search provider
1097 // was properly saved. 1098 // was properly saved.
1098 test_util_->ResetModel(true); 1099 test_util()->ResetModel(true);
1099 default_search = model()->GetDefaultSearchProvider(); 1100 default_search = model()->GetDefaultSearchProvider();
1100 ASSERT_TRUE(default_search != NULL); 1101 ASSERT_TRUE(default_search != NULL);
1101 AssertEquals(*cloned_url, *default_search); 1102 AssertEquals(*cloned_url, *default_search);
1102 } 1103 }
1103 1104
1104 // Make sure that the load routine doesn't delete 1105 // Make sure that the load routine doesn't delete
1105 // prepopulated engines that no longer exist in the prepopulate data if 1106 // prepopulated engines that no longer exist in the prepopulate data if
1106 // it is the default search provider. 1107 // it is the default search provider.
1107 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) { 1108 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) {
1108 // Set the default search provider to a preloaded template url which 1109 // Set the default search provider to a preloaded template url which
1109 // is not in the current set of preloaded template urls and save 1110 // is not in the current set of preloaded template urls and save
1110 // the result. 1111 // the result.
1111 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); 1112 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999);
1112 test_util_->ChangeModelToLoadState(); 1113 test_util()->ChangeModelToLoadState();
1113 model()->Add(t_url); 1114 model()->Add(t_url);
1114 model()->SetUserSelectedDefaultSearchProvider(t_url); 1115 model()->SetUserSelectedDefaultSearchProvider(t_url);
1115 // Do the copy after t_url is added and set as default so that its 1116 // Do the copy after t_url is added and set as default so that its
1116 // internal state is correct. 1117 // internal state is correct.
1117 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); 1118 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
1118 1119
1119 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); 1120 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")));
1120 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); 1121 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider());
1121 base::RunLoop().RunUntilIdle(); 1122 base::RunLoop().RunUntilIdle();
1122 1123
1123 // Ensure that merging won't clear the prepopulated template url 1124 // Ensure that merging won't clear the prepopulated template url
1124 // which is no longer present if it's the default engine. 1125 // which is no longer present if it's the default engine.
1125 test_util_->ResetModel(true); 1126 test_util()->ResetModel(true);
1126 { 1127 {
1127 const TemplateURL* keyword_url = 1128 const TemplateURL* keyword_url =
1128 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); 1129 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"));
1129 ASSERT_TRUE(keyword_url != NULL); 1130 ASSERT_TRUE(keyword_url != NULL);
1130 AssertEquals(*cloned_url, *keyword_url); 1131 AssertEquals(*cloned_url, *keyword_url);
1131 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider()); 1132 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider());
1132 } 1133 }
1133 1134
1134 // Wait for any saves to finish. 1135 // Wait for any saves to finish.
1135 base::RunLoop().RunUntilIdle(); 1136 base::RunLoop().RunUntilIdle();
1136 1137
1137 // Reload the model to verify that the update was saved. 1138 // Reload the model to verify that the update was saved.
1138 test_util_->ResetModel(true); 1139 test_util()->ResetModel(true);
1139 { 1140 {
1140 const TemplateURL* keyword_url = 1141 const TemplateURL* keyword_url =
1141 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); 1142 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"));
1142 ASSERT_TRUE(keyword_url != NULL); 1143 ASSERT_TRUE(keyword_url != NULL);
1143 AssertEquals(*cloned_url, *keyword_url); 1144 AssertEquals(*cloned_url, *keyword_url);
1144 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider()); 1145 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider());
1145 } 1146 }
1146 } 1147 }
1147 1148
1148 // Make sure that the load routine sets a default search provider if it was 1149 // Make sure that the load routine sets a default search provider if it was
1149 // missing and not managed. 1150 // missing and not managed.
1150 TEST_F(TemplateURLServiceTest, LoadEnsuresDefaultSearchProviderExists) { 1151 TEST_F(TemplateURLServiceTest, LoadEnsuresDefaultSearchProviderExists) {
1151 // Force the model to load and make sure we have a default search provider. 1152 // Force the model to load and make sure we have a default search provider.
1152 test_util_->VerifyLoad(); 1153 test_util()->VerifyLoad();
1153 EXPECT_TRUE(model()->GetDefaultSearchProvider()); 1154 EXPECT_TRUE(model()->GetDefaultSearchProvider());
1154 1155
1155 EXPECT_TRUE(model()->GetDefaultSearchProvider()->SupportsReplacement( 1156 EXPECT_TRUE(model()->GetDefaultSearchProvider()->SupportsReplacement(
1156 search_terms_data())); 1157 search_terms_data()));
1157 1158
1158 // Make default search provider unusable (no search terms). 1159 // Make default search provider unusable (no search terms).
1159 model()->ResetTemplateURL(model()->GetDefaultSearchProvider(), 1160 model()->ResetTemplateURL(model()->GetDefaultSearchProvider(),
1160 ASCIIToUTF16("test"), ASCIIToUTF16("test"), 1161 ASCIIToUTF16("test"), ASCIIToUTF16("test"),
1161 "http://example.com/"); 1162 "http://example.com/");
1162 base::RunLoop().RunUntilIdle(); 1163 base::RunLoop().RunUntilIdle();
1163 1164
1164 // Reset the model and load it. There should be a usable default search 1165 // Reset the model and load it. There should be a usable default search
1165 // provider. 1166 // provider.
1166 test_util_->ResetModel(true); 1167 test_util()->ResetModel(true);
1167 1168
1168 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 1169 ASSERT_TRUE(model()->GetDefaultSearchProvider());
1169 EXPECT_TRUE(model()->GetDefaultSearchProvider()->SupportsReplacement( 1170 EXPECT_TRUE(model()->GetDefaultSearchProvider()->SupportsReplacement(
1170 search_terms_data())); 1171 search_terms_data()));
1171 } 1172 }
1172 1173
1173 // Simulates failing to load the webdb and makes sure the default search 1174 // Simulates failing to load the webdb and makes sure the default search
1174 // provider is valid. 1175 // provider is valid.
1175 TEST_F(TemplateURLServiceTest, FailedInit) { 1176 TEST_F(TemplateURLServiceTest, FailedInit) {
1176 test_util_->VerifyLoad(); 1177 test_util()->VerifyLoad();
1177 1178
1178 test_util_->ClearModel(); 1179 test_util()->ClearModel();
1179 WebDataServiceFactory::GetKeywordWebDataForProfile( 1180 test_util()->web_data_service()->ShutdownDatabase();
1180 test_util_->profile(), Profile::EXPLICIT_ACCESS)->ShutdownDatabase();
1181 1181
1182 test_util_->ResetModel(false); 1182 test_util()->ResetModel(false);
1183 model()->Load(); 1183 model()->Load();
1184 base::RunLoop().RunUntilIdle(); 1184 base::RunLoop().RunUntilIdle();
1185 1185
1186 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 1186 ASSERT_TRUE(model()->GetDefaultSearchProvider());
1187 } 1187 }
1188 1188
1189 // Verifies that if the default search URL preference is managed, we report 1189 // Verifies that if the default search URL preference is managed, we report
1190 // the default search as managed. Also check that we are getting the right 1190 // the default search as managed. Also check that we are getting the right
1191 // values. 1191 // values.
1192 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) { 1192 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) {
1193 test_util_->VerifyLoad(); 1193 test_util()->VerifyLoad();
1194 const size_t initial_count = model()->GetTemplateURLs().size(); 1194 const size_t initial_count = model()->GetTemplateURLs().size();
1195 test_util_->ResetObserverCount(); 1195 test_util()->ResetObserverCount();
1196 1196
1197 // Set a regular default search provider. 1197 // Set a regular default search provider.
1198 TemplateURL* regular_default = AddKeywordWithDate( 1198 TemplateURL* regular_default = AddKeywordWithDate(
1199 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", 1199 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1",
1200 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); 1200 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
1201 VerifyObserverCount(1); 1201 VerifyObserverCount(1);
1202 model()->SetUserSelectedDefaultSearchProvider(regular_default); 1202 model()->SetUserSelectedDefaultSearchProvider(regular_default);
1203 // Adding the URL and setting the default search provider should have caused 1203 // Adding the URL and setting the default search provider should have caused
1204 // notifications. 1204 // notifications.
1205 VerifyObserverCount(1); 1205 VerifyObserverCount(1);
1206 EXPECT_FALSE(model()->is_default_search_managed()); 1206 EXPECT_FALSE(model()->is_default_search_managed());
1207 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1207 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1208 1208
1209 // Set a managed preference that establishes a default search provider. 1209 // Set a managed preference that establishes a default search provider.
1210 const char kName[] = "test1"; 1210 const char kName[] = "test1";
1211 const char kKeyword[] = "test.com"; 1211 const char kKeyword[] = "test.com";
1212 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; 1212 const char kSearchURL[] = "http://test.com/search?t={searchTerms}";
1213 const char kIconURL[] = "http://test.com/icon.jpg"; 1213 const char kIconURL[] = "http://test.com/icon.jpg";
1214 const char kEncodings[] = "UTF-16;UTF-32"; 1214 const char kEncodings[] = "UTF-16;UTF-32";
1215 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; 1215 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}";
1216 const char kSearchTermsReplacementKey[] = "espv"; 1216 const char kSearchTermsReplacementKey[] = "espv";
1217 test_util_->SetManagedDefaultSearchPreferences(true, kName, kKeyword, 1217 test_util()->SetManagedDefaultSearchPreferences(true, kName, kKeyword,
1218 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, 1218 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL,
1219 kSearchTermsReplacementKey); 1219 kSearchTermsReplacementKey);
1220 VerifyObserverFired(); 1220 VerifyObserverFired();
1221 EXPECT_TRUE(model()->is_default_search_managed()); 1221 EXPECT_TRUE(model()->is_default_search_managed());
1222 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); 1222 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size());
1223 1223
1224 // Verify that the default manager we are getting is the managed one. 1224 // Verify that the default manager we are getting is the managed one.
1225 TemplateURLData data; 1225 TemplateURLData data;
1226 data.short_name = ASCIIToUTF16(kName); 1226 data.short_name = ASCIIToUTF16(kName);
1227 data.SetKeyword(ASCIIToUTF16(kKeyword)); 1227 data.SetKeyword(ASCIIToUTF16(kKeyword));
1228 data.SetURL(kSearchURL); 1228 data.SetURL(kSearchURL);
1229 data.favicon_url = GURL(kIconURL); 1229 data.favicon_url = GURL(kIconURL);
1230 data.show_in_default_list = true; 1230 data.show_in_default_list = true;
1231 base::SplitString(kEncodings, ';', &data.input_encodings); 1231 base::SplitString(kEncodings, ';', &data.input_encodings);
1232 data.alternate_urls.push_back(kAlternateURL); 1232 data.alternate_urls.push_back(kAlternateURL);
1233 data.search_terms_replacement_key = kSearchTermsReplacementKey; 1233 data.search_terms_replacement_key = kSearchTermsReplacementKey;
1234 scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL(data)); 1234 scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL(data));
1235 const TemplateURL* actual_managed_default = 1235 const TemplateURL* actual_managed_default =
1236 model()->GetDefaultSearchProvider(); 1236 model()->GetDefaultSearchProvider();
1237 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); 1237 ExpectSimilar(expected_managed_default1.get(), actual_managed_default);
1238 EXPECT_TRUE(actual_managed_default->show_in_default_list()); 1238 EXPECT_TRUE(actual_managed_default->show_in_default_list());
1239 1239
1240 // Update the managed preference and check that the model has changed. 1240 // Update the managed preference and check that the model has changed.
1241 const char kNewName[] = "test2"; 1241 const char kNewName[] = "test2";
1242 const char kNewKeyword[] = "other.com"; 1242 const char kNewKeyword[] = "other.com";
1243 const char kNewSearchURL[] = "http://other.com/search?t={searchTerms}"; 1243 const char kNewSearchURL[] = "http://other.com/search?t={searchTerms}";
1244 const char kNewSuggestURL[] = "http://other.com/suggest?t={searchTerms}"; 1244 const char kNewSuggestURL[] = "http://other.com/suggest?t={searchTerms}";
1245 test_util_->SetManagedDefaultSearchPreferences(true, kNewName, kNewKeyword, 1245 test_util()->SetManagedDefaultSearchPreferences(true, kNewName, kNewKeyword,
1246 kNewSearchURL, kNewSuggestURL, std::string(), std::string(), 1246 kNewSearchURL, kNewSuggestURL, std::string(), std::string(),
1247 std::string(), std::string()); 1247 std::string(), std::string());
1248 VerifyObserverFired(); 1248 VerifyObserverFired();
1249 EXPECT_TRUE(model()->is_default_search_managed()); 1249 EXPECT_TRUE(model()->is_default_search_managed());
1250 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); 1250 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size());
1251 1251
1252 // Verify that the default manager we are now getting is the correct one. 1252 // Verify that the default manager we are now getting is the correct one.
1253 TemplateURLData data2; 1253 TemplateURLData data2;
1254 data2.short_name = ASCIIToUTF16(kNewName); 1254 data2.short_name = ASCIIToUTF16(kNewName);
1255 data2.SetKeyword(ASCIIToUTF16(kNewKeyword)); 1255 data2.SetKeyword(ASCIIToUTF16(kNewKeyword));
1256 data2.SetURL(kNewSearchURL); 1256 data2.SetURL(kNewSearchURL);
1257 data2.suggestions_url = kNewSuggestURL; 1257 data2.suggestions_url = kNewSuggestURL;
1258 data2.show_in_default_list = true; 1258 data2.show_in_default_list = true;
1259 scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL(data2)); 1259 scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL(data2));
1260 actual_managed_default = model()->GetDefaultSearchProvider(); 1260 actual_managed_default = model()->GetDefaultSearchProvider();
1261 ExpectSimilar(expected_managed_default2.get(), actual_managed_default); 1261 ExpectSimilar(expected_managed_default2.get(), actual_managed_default);
1262 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); 1262 EXPECT_EQ(actual_managed_default->show_in_default_list(), true);
1263 1263
1264 // Remove all the managed prefs and check that we are no longer managed. 1264 // Remove all the managed prefs and check that we are no longer managed.
1265 test_util_->RemoveManagedDefaultSearchPreferences(); 1265 test_util()->RemoveManagedDefaultSearchPreferences();
1266 VerifyObserverFired(); 1266 VerifyObserverFired();
1267 EXPECT_FALSE(model()->is_default_search_managed()); 1267 EXPECT_FALSE(model()->is_default_search_managed());
1268 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1268 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1269 1269
1270 // The default should now be the user preference. 1270 // The default should now be the user preference.
1271 const TemplateURL* actual_final_managed_default = 1271 const TemplateURL* actual_final_managed_default =
1272 model()->GetDefaultSearchProvider(); 1272 model()->GetDefaultSearchProvider();
1273 ExpectSimilar(regular_default, actual_final_managed_default); 1273 ExpectSimilar(regular_default, actual_final_managed_default);
1274 EXPECT_EQ(actual_final_managed_default->show_in_default_list(), true); 1274 EXPECT_EQ(actual_final_managed_default->show_in_default_list(), true);
1275 1275
1276 // Disable the default search provider through policy. 1276 // Disable the default search provider through policy.
1277 test_util_->SetManagedDefaultSearchPreferences(false, std::string(), 1277 test_util()->SetManagedDefaultSearchPreferences(false, std::string(),
1278 std::string(), std::string(), std::string(), std::string(), 1278 std::string(), std::string(), std::string(), std::string(),
1279 std::string(), std::string(), std::string()); 1279 std::string(), std::string(), std::string());
1280 VerifyObserverFired(); 1280 VerifyObserverFired();
1281 EXPECT_TRUE(model()->is_default_search_managed()); 1281 EXPECT_TRUE(model()->is_default_search_managed());
1282 EXPECT_TRUE(NULL == model()->GetDefaultSearchProvider()); 1282 EXPECT_TRUE(NULL == model()->GetDefaultSearchProvider());
1283 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1283 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1284 1284
1285 // Re-enable it. 1285 // Re-enable it.
1286 test_util_->SetManagedDefaultSearchPreferences(true, kName, kKeyword, 1286 test_util()->SetManagedDefaultSearchPreferences(true, kName, kKeyword,
1287 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, 1287 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL,
1288 kSearchTermsReplacementKey); 1288 kSearchTermsReplacementKey);
1289 VerifyObserverFired(); 1289 VerifyObserverFired();
1290 EXPECT_TRUE(model()->is_default_search_managed()); 1290 EXPECT_TRUE(model()->is_default_search_managed());
1291 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); 1291 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size());
1292 1292
1293 // Verify that the default manager we are getting is the managed one. 1293 // Verify that the default manager we are getting is the managed one.
1294 actual_managed_default = model()->GetDefaultSearchProvider(); 1294 actual_managed_default = model()->GetDefaultSearchProvider();
1295 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); 1295 ExpectSimilar(expected_managed_default1.get(), actual_managed_default);
1296 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); 1296 EXPECT_EQ(actual_managed_default->show_in_default_list(), true);
1297 1297
1298 // Clear the model and disable the default search provider through policy. 1298 // Clear the model and disable the default search provider through policy.
1299 // Verify that there is no default search provider after loading the model. 1299 // Verify that there is no default search provider after loading the model.
1300 // This checks against regressions of http://crbug.com/67180 1300 // This checks against regressions of http://crbug.com/67180
1301 1301
1302 // First, remove the preferences, reset the model, and set a default. 1302 // First, remove the preferences, reset the model, and set a default.
1303 test_util_->RemoveManagedDefaultSearchPreferences(); 1303 test_util()->RemoveManagedDefaultSearchPreferences();
1304 test_util_->ResetModel(true); 1304 test_util()->ResetModel(true);
1305 TemplateURL* new_default = 1305 TemplateURL* new_default =
1306 model()->GetTemplateURLForKeyword(ASCIIToUTF16("key1")); 1306 model()->GetTemplateURLForKeyword(ASCIIToUTF16("key1"));
1307 ASSERT_FALSE(new_default == NULL); 1307 ASSERT_FALSE(new_default == NULL);
1308 model()->SetUserSelectedDefaultSearchProvider(new_default); 1308 model()->SetUserSelectedDefaultSearchProvider(new_default);
1309 EXPECT_EQ(new_default, model()->GetDefaultSearchProvider()); 1309 EXPECT_EQ(new_default, model()->GetDefaultSearchProvider());
1310 1310
1311 // Now reset the model again but load it after setting the preferences. 1311 // Now reset the model again but load it after setting the preferences.
1312 test_util_->ResetModel(false); 1312 test_util()->ResetModel(false);
1313 test_util_->SetManagedDefaultSearchPreferences(false, std::string(), 1313 test_util()->SetManagedDefaultSearchPreferences(false, std::string(),
1314 std::string(), std::string(), std::string(), std::string(), 1314 std::string(), std::string(), std::string(), std::string(),
1315 std::string(), std::string(), std::string()); 1315 std::string(), std::string(), std::string());
1316 test_util_->VerifyLoad(); 1316 test_util()->VerifyLoad();
1317 EXPECT_TRUE(model()->is_default_search_managed()); 1317 EXPECT_TRUE(model()->is_default_search_managed());
1318 EXPECT_TRUE(model()->GetDefaultSearchProvider() == NULL); 1318 EXPECT_TRUE(model()->GetDefaultSearchProvider() == NULL);
1319 } 1319 }
1320 1320
1321 // Test that if we load a TemplateURL with an empty GUID, the load process 1321 // Test that if we load a TemplateURL with an empty GUID, the load process
1322 // assigns it a newly generated GUID. 1322 // assigns it a newly generated GUID.
1323 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) { 1323 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) {
1324 // Add a new TemplateURL. 1324 // Add a new TemplateURL.
1325 test_util_->VerifyLoad(); 1325 test_util()->VerifyLoad();
1326 const size_t initial_count = model()->GetTemplateURLs().size(); 1326 const size_t initial_count = model()->GetTemplateURLs().size();
1327 1327
1328 TemplateURLData data; 1328 TemplateURLData data;
1329 data.short_name = ASCIIToUTF16("google"); 1329 data.short_name = ASCIIToUTF16("google");
1330 data.SetKeyword(ASCIIToUTF16("keyword")); 1330 data.SetKeyword(ASCIIToUTF16("keyword"));
1331 data.SetURL("http://www.google.com/foo/bar"); 1331 data.SetURL("http://www.google.com/foo/bar");
1332 data.sync_guid.clear(); 1332 data.sync_guid.clear();
1333 TemplateURL* t_url = new TemplateURL(data); 1333 TemplateURL* t_url = new TemplateURL(data);
1334 model()->Add(t_url); 1334 model()->Add(t_url);
1335 1335
1336 VerifyObserverCount(1); 1336 VerifyObserverCount(1);
1337 base::RunLoop().RunUntilIdle(); 1337 base::RunLoop().RunUntilIdle();
1338 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1338 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1339 1339
1340 // Reload the model to verify it was actually saved to the database and 1340 // Reload the model to verify it was actually saved to the database and
1341 // assigned a new GUID when brought back. 1341 // assigned a new GUID when brought back.
1342 test_util_->ResetModel(true); 1342 test_util()->ResetModel(true);
1343 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1343 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1344 const TemplateURL* loaded_url = 1344 const TemplateURL* loaded_url =
1345 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 1345 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
1346 ASSERT_FALSE(loaded_url == NULL); 1346 ASSERT_FALSE(loaded_url == NULL);
1347 ASSERT_FALSE(loaded_url->sync_guid().empty()); 1347 ASSERT_FALSE(loaded_url->sync_guid().empty());
1348 } 1348 }
1349 1349
1350 // Test that if we load a TemplateURL with duplicate input encodings, the load 1350 // Test that if we load a TemplateURL with duplicate input encodings, the load
1351 // process de-dupes them. 1351 // process de-dupes them.
1352 TEST_F(TemplateURLServiceTest, DuplicateInputEncodings) { 1352 TEST_F(TemplateURLServiceTest, DuplicateInputEncodings) {
1353 // Add a new TemplateURL. 1353 // Add a new TemplateURL.
1354 test_util_->VerifyLoad(); 1354 test_util()->VerifyLoad();
1355 const size_t initial_count = model()->GetTemplateURLs().size(); 1355 const size_t initial_count = model()->GetTemplateURLs().size();
1356 1356
1357 TemplateURLData data; 1357 TemplateURLData data;
1358 data.short_name = ASCIIToUTF16("google"); 1358 data.short_name = ASCIIToUTF16("google");
1359 data.SetKeyword(ASCIIToUTF16("keyword")); 1359 data.SetKeyword(ASCIIToUTF16("keyword"));
1360 data.SetURL("http://www.google.com/foo/bar"); 1360 data.SetURL("http://www.google.com/foo/bar");
1361 std::vector<std::string> encodings; 1361 std::vector<std::string> encodings;
1362 data.input_encodings.push_back("UTF-8"); 1362 data.input_encodings.push_back("UTF-8");
1363 data.input_encodings.push_back("UTF-8"); 1363 data.input_encodings.push_back("UTF-8");
1364 data.input_encodings.push_back("UTF-16"); 1364 data.input_encodings.push_back("UTF-16");
1365 data.input_encodings.push_back("UTF-8"); 1365 data.input_encodings.push_back("UTF-8");
1366 data.input_encodings.push_back("Big5"); 1366 data.input_encodings.push_back("Big5");
1367 data.input_encodings.push_back("UTF-16"); 1367 data.input_encodings.push_back("UTF-16");
1368 data.input_encodings.push_back("Big5"); 1368 data.input_encodings.push_back("Big5");
1369 data.input_encodings.push_back("Windows-1252"); 1369 data.input_encodings.push_back("Windows-1252");
1370 TemplateURL* t_url = new TemplateURL(data); 1370 TemplateURL* t_url = new TemplateURL(data);
1371 model()->Add(t_url); 1371 model()->Add(t_url);
1372 1372
1373 VerifyObserverCount(1); 1373 VerifyObserverCount(1);
1374 base::RunLoop().RunUntilIdle(); 1374 base::RunLoop().RunUntilIdle();
1375 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1375 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1376 const TemplateURL* loaded_url = 1376 const TemplateURL* loaded_url =
1377 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 1377 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
1378 ASSERT_TRUE(loaded_url != NULL); 1378 ASSERT_TRUE(loaded_url != NULL);
1379 EXPECT_EQ(8U, loaded_url->input_encodings().size()); 1379 EXPECT_EQ(8U, loaded_url->input_encodings().size());
1380 1380
1381 // Reload the model to verify it was actually saved to the database and the 1381 // Reload the model to verify it was actually saved to the database and the
1382 // duplicate encodings were removed. 1382 // duplicate encodings were removed.
1383 test_util_->ResetModel(true); 1383 test_util()->ResetModel(true);
1384 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1384 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1385 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 1385 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
1386 ASSERT_FALSE(loaded_url == NULL); 1386 ASSERT_FALSE(loaded_url == NULL);
1387 EXPECT_EQ(4U, loaded_url->input_encodings().size()); 1387 EXPECT_EQ(4U, loaded_url->input_encodings().size());
1388 } 1388 }
1389 1389
1390 TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) { 1390 TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) {
1391 test_util_->VerifyLoad(); 1391 test_util()->VerifyLoad();
1392 // Add third-party default search engine. 1392 // Add third-party default search engine.
1393 TemplateURL* user_dse = AddKeywordWithDate( 1393 TemplateURL* user_dse = AddKeywordWithDate(
1394 "user", "user", "http://www.goo.com/s?q={searchTerms}", 1394 "user", "user", "http://www.goo.com/s?q={searchTerms}",
1395 std::string(), std::string(), std::string(), 1395 std::string(), std::string(), std::string(),
1396 true, "UTF-8", Time(), Time()); 1396 true, "UTF-8", Time(), Time());
1397 model()->SetUserSelectedDefaultSearchProvider(user_dse); 1397 model()->SetUserSelectedDefaultSearchProvider(user_dse);
1398 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); 1398 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider());
1399 1399
1400 TemplateURL* ext_dse = CreateKeywordWithDate( 1400 TemplateURL* ext_dse = CreateKeywordWithDate(
1401 model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}", 1401 model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}",
1402 std::string(), std::string(), std::string(), 1402 std::string(), std::string(), std::string(),
1403 true, true, "UTF-8", Time(), Time()); 1403 true, true, "UTF-8", Time(), Time());
1404 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( 1404 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info(
1405 new TemplateURL::AssociatedExtensionInfo( 1405 new TemplateURL::AssociatedExtensionInfo(
1406 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext")); 1406 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext"));
1407 extension_info->wants_to_be_default_engine = true; 1407 extension_info->wants_to_be_default_engine = true;
1408 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); 1408 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass());
1409 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); 1409 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider());
1410 1410
1411 model()->RemoveExtensionControlledTURL( 1411 model()->RemoveExtensionControlledTURL(
1412 "ext", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); 1412 "ext", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
1413 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); 1413 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider());
1414 } 1414 }
1415 1415
1416 TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { 1416 TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) {
1417 test_util_->VerifyLoad(); 1417 test_util()->VerifyLoad();
1418 // Add third-party default search engine. 1418 // Add third-party default search engine.
1419 TemplateURL* user_dse = AddKeywordWithDate( 1419 TemplateURL* user_dse = AddKeywordWithDate(
1420 "user", "user", "http://www.goo.com/s?q={searchTerms}", 1420 "user", "user", "http://www.goo.com/s?q={searchTerms}",
1421 std::string(), std::string(), std::string(), 1421 std::string(), std::string(), std::string(),
1422 true, "UTF-8", Time(), Time()); 1422 true, "UTF-8", Time(), Time());
1423 model()->SetUserSelectedDefaultSearchProvider(user_dse); 1423 model()->SetUserSelectedDefaultSearchProvider(user_dse);
1424 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); 1424 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider());
1425 1425
1426 TemplateURL* ext_dse = CreateKeywordWithDate( 1426 TemplateURL* ext_dse = CreateKeywordWithDate(
1427 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", 1427 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}",
1428 std::string(), std::string(), std::string(), 1428 std::string(), std::string(), std::string(),
1429 true, false, "UTF-8", Time(), Time()); 1429 true, false, "UTF-8", Time(), Time());
1430 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( 1430 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info(
1431 new TemplateURL::AssociatedExtensionInfo( 1431 new TemplateURL::AssociatedExtensionInfo(
1432 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); 1432 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1"));
1433 extension_info->wants_to_be_default_engine = false; 1433 extension_info->wants_to_be_default_engine = false;
1434 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); 1434 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass());
1435 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); 1435 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider());
1436 1436
1437 ext_dse = CreateKeywordWithDate( 1437 ext_dse = CreateKeywordWithDate(
1438 model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}", 1438 model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}",
1439 std::string(), std::string(), std::string(), 1439 std::string(), std::string(), std::string(),
1440 true, true, "UTF-8", Time(), Time()); 1440 true, true, "UTF-8", Time(), Time());
1441 extension_info.reset(new TemplateURL::AssociatedExtensionInfo( 1441 extension_info.reset(new TemplateURL::AssociatedExtensionInfo(
1442 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext2")); 1442 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext2"));
1443 extension_info->wants_to_be_default_engine = true; 1443 extension_info->wants_to_be_default_engine = true;
1444 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); 1444 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass());
1445 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); 1445 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider());
1446 1446
1447 test_util_->ResetModel(true); 1447 test_util()->ResetModel(true);
1448 user_dse = model()->GetTemplateURLForKeyword(ASCIIToUTF16("user")); 1448 user_dse = model()->GetTemplateURLForKeyword(ASCIIToUTF16("user"));
1449 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); 1449 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider());
1450 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); 1450 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1")));
1451 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext2"))); 1451 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext2")));
1452 } 1452 }
1453 1453
1454 TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) { 1454 TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) {
1455 // Set a managed preference that establishes a default search provider. 1455 // Set a managed preference that establishes a default search provider.
1456 const char kName[] = "test"; 1456 const char kName[] = "test";
1457 const char kKeyword[] = "test.com"; 1457 const char kKeyword[] = "test.com";
1458 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; 1458 const char kSearchURL[] = "http://test.com/search?t={searchTerms}";
1459 const char kIconURL[] = "http://test.com/icon.jpg"; 1459 const char kIconURL[] = "http://test.com/icon.jpg";
1460 const char kEncodings[] = "UTF-16;UTF-32"; 1460 const char kEncodings[] = "UTF-16;UTF-32";
1461 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; 1461 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}";
1462 const char kSearchTermsReplacementKey[] = "espv"; 1462 const char kSearchTermsReplacementKey[] = "espv";
1463 test_util_->SetManagedDefaultSearchPreferences( 1463 test_util()->SetManagedDefaultSearchPreferences(
1464 true, kName, kKeyword, kSearchURL, std::string(), kIconURL, kEncodings, 1464 true, kName, kKeyword, kSearchURL, std::string(), kIconURL, kEncodings,
1465 kAlternateURL, kSearchTermsReplacementKey); 1465 kAlternateURL, kSearchTermsReplacementKey);
1466 test_util_->VerifyLoad(); 1466 test_util()->VerifyLoad();
1467 // Verify that the default manager we are getting is the managed one. 1467 // Verify that the default manager we are getting is the managed one.
1468 TemplateURLData data; 1468 TemplateURLData data;
1469 data.short_name = ASCIIToUTF16(kName); 1469 data.short_name = ASCIIToUTF16(kName);
1470 data.SetKeyword(ASCIIToUTF16(kKeyword)); 1470 data.SetKeyword(ASCIIToUTF16(kKeyword));
1471 data.SetURL(kSearchURL); 1471 data.SetURL(kSearchURL);
1472 data.favicon_url = GURL(kIconURL); 1472 data.favicon_url = GURL(kIconURL);
1473 data.show_in_default_list = true; 1473 data.show_in_default_list = true;
1474 base::SplitString(kEncodings, ';', &data.input_encodings); 1474 base::SplitString(kEncodings, ';', &data.input_encodings);
1475 data.alternate_urls.push_back(kAlternateURL); 1475 data.alternate_urls.push_back(kAlternateURL);
1476 data.search_terms_replacement_key = kSearchTermsReplacementKey; 1476 data.search_terms_replacement_key = kSearchTermsReplacementKey;
(...skipping 10 matching lines...) Expand all
1487 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( 1487 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info(
1488 new TemplateURL::AssociatedExtensionInfo( 1488 new TemplateURL::AssociatedExtensionInfo(
1489 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); 1489 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1"));
1490 extension_info->wants_to_be_default_engine = true; 1490 extension_info->wants_to_be_default_engine = true;
1491 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); 1491 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass());
1492 EXPECT_EQ(ext_dse, model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); 1492 EXPECT_EQ(ext_dse, model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1")));
1493 EXPECT_TRUE(model()->is_default_search_managed()); 1493 EXPECT_TRUE(model()->is_default_search_managed());
1494 actual_managed_default = model()->GetDefaultSearchProvider(); 1494 actual_managed_default = model()->GetDefaultSearchProvider();
1495 ExpectSimilar(expected_managed_default.get(), actual_managed_default); 1495 ExpectSimilar(expected_managed_default.get(), actual_managed_default);
1496 } 1496 }
OLDNEW
« no previous file with comments | « components/search_engines/template_url_service_sync_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698