OLD | NEW |
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" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 data.SetURL(url); | 103 data.SetURL(url); |
104 data.suggestions_url = suggest_url; | 104 data.suggestions_url = suggest_url; |
105 if (!alternate_url.empty()) | 105 if (!alternate_url.empty()) |
106 data.alternate_urls.push_back(alternate_url); | 106 data.alternate_urls.push_back(alternate_url); |
107 data.favicon_url = GURL(favicon_url); | 107 data.favicon_url = GURL(favicon_url); |
108 data.safe_for_autoreplace = safe_for_autoreplace; | 108 data.safe_for_autoreplace = safe_for_autoreplace; |
109 data.show_in_default_list = show_in_default_list; | 109 data.show_in_default_list = show_in_default_list; |
110 base::SplitString(encodings, ';', &data.input_encodings); | 110 base::SplitString(encodings, ';', &data.input_encodings); |
111 data.date_created = date_created; | 111 data.date_created = date_created; |
112 data.last_modified = last_modified; | 112 data.last_modified = last_modified; |
113 return new TemplateURL(model->profile(), data); | 113 return new TemplateURL(data); |
114 } | 114 } |
115 | 115 |
116 TemplateURL* AddKeywordWithDate( | 116 TemplateURL* AddKeywordWithDate( |
117 TemplateURLService* model, | 117 TemplateURLService* model, |
118 const std::string& short_name, | 118 const std::string& short_name, |
119 const std::string& keyword, | 119 const std::string& keyword, |
120 const std::string& url, | 120 const std::string& url, |
121 const std::string& suggest_url, | 121 const std::string& suggest_url, |
122 const std::string& alternate_url, | 122 const std::string& alternate_url, |
123 const std::string& favicon_url, | 123 const std::string& favicon_url, |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 void VerifyObserverCount(int expected_changed_count); | 188 void VerifyObserverCount(int expected_changed_count); |
189 void VerifyObserverFired(); | 189 void VerifyObserverFired(); |
190 TemplateURLService* model() { return test_util_.model(); } | 190 TemplateURLService* model() { return test_util_.model(); } |
191 const SearchTermsData& search_terms_data() { | 191 const SearchTermsData& search_terms_data() { |
192 return model()->search_terms_data(); | 192 return model()->search_terms_data(); |
193 } | 193 } |
194 | 194 |
195 protected: | 195 protected: |
196 TemplateURLServiceTestUtil test_util_; | 196 TemplateURLServiceTestUtil test_util_; |
197 | 197 |
198 void TestGenerateSearchURL(SearchTermsData* search_terms_data) { | |
199 struct GenerateSearchURLCase { | |
200 const char* test_name; | |
201 const char* url; | |
202 const char* expected; | |
203 } generate_url_cases[] = { | |
204 { "invalid URL", "foo{searchTerms}", "" }, | |
205 { "URL with no replacements", "http://foo/", "http://foo/" }, | |
206 { "basic functionality", "http://foo/{searchTerms}", | |
207 "http://foo/blah.blah.blah.blah.blah" } | |
208 }; | |
209 | |
210 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(generate_url_cases); ++i) { | |
211 TemplateURLData data; | |
212 data.SetURL(generate_url_cases[i].url); | |
213 TemplateURL t_url(NULL, data); | |
214 std::string result; | |
215 if (search_terms_data) { | |
216 result = TemplateURLService::GenerateSearchURLUsingTermsData( | |
217 &t_url, *search_terms_data).spec(); | |
218 } else { | |
219 result = TemplateURLService::GenerateSearchURL(&t_url).spec(); | |
220 } | |
221 EXPECT_EQ(result, generate_url_cases[i].expected) | |
222 << generate_url_cases[i].test_name << " failed. Expected " | |
223 << generate_url_cases[i].expected << " Actual " << result; | |
224 } | |
225 } | |
226 | |
227 | |
228 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTest); | 198 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTest); |
229 }; | 199 }; |
230 | 200 |
231 class TemplateURLServiceWithoutFallbackTest : public TemplateURLServiceTest { | 201 class TemplateURLServiceWithoutFallbackTest : public TemplateURLServiceTest { |
232 public: | 202 public: |
233 TemplateURLServiceWithoutFallbackTest() : TemplateURLServiceTest() {} | 203 TemplateURLServiceWithoutFallbackTest() : TemplateURLServiceTest() {} |
234 | 204 |
235 virtual void SetUp() OVERRIDE { | 205 virtual void SetUp() OVERRIDE { |
236 TemplateURLService::set_fallback_search_engines_disabled(true); | 206 TemplateURLService::set_fallback_search_engines_disabled(true); |
237 TemplateURLServiceTest::SetUp(); | 207 TemplateURLServiceTest::SetUp(); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 data.short_name = ASCIIToUTF16("unittest"); | 266 data.short_name = ASCIIToUTF16("unittest"); |
297 data.SetKeyword(ASCIIToUTF16("unittest")); | 267 data.SetKeyword(ASCIIToUTF16("unittest")); |
298 data.SetURL("http://www.unittest.com/{searchTerms}"); | 268 data.SetURL("http://www.unittest.com/{searchTerms}"); |
299 data.favicon_url = GURL("http://favicon.url"); | 269 data.favicon_url = GURL("http://favicon.url"); |
300 data.show_in_default_list = true; | 270 data.show_in_default_list = true; |
301 data.safe_for_autoreplace = safe_for_autoreplace; | 271 data.safe_for_autoreplace = safe_for_autoreplace; |
302 data.input_encodings.push_back("UTF-8"); | 272 data.input_encodings.push_back("UTF-8"); |
303 data.date_created = Time::FromTimeT(100); | 273 data.date_created = Time::FromTimeT(100); |
304 data.last_modified = Time::FromTimeT(100); | 274 data.last_modified = Time::FromTimeT(100); |
305 data.prepopulate_id = prepopulate_id; | 275 data.prepopulate_id = prepopulate_id; |
306 return new TemplateURL(test_util_.profile(), data); | 276 return new TemplateURL(data); |
307 } | 277 } |
308 | 278 |
309 void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) { | 279 void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) { |
310 EXPECT_EQ(expected_changed_count, test_util_.GetObserverCount()); | 280 EXPECT_EQ(expected_changed_count, test_util_.GetObserverCount()); |
311 test_util_.ResetObserverCount(); | 281 test_util_.ResetObserverCount(); |
312 } | 282 } |
313 | 283 |
314 void TemplateURLServiceTest::VerifyObserverFired() { | 284 void TemplateURLServiceTest::VerifyObserverFired() { |
315 EXPECT_LE(1, test_util_.GetObserverCount()); | 285 EXPECT_LE(1, test_util_.GetObserverCount()); |
316 test_util_.ResetObserverCount(); | 286 test_util_.ResetObserverCount(); |
(...skipping 13 matching lines...) Expand all Loading... |
330 | 300 |
331 TemplateURLData data; | 301 TemplateURLData data; |
332 data.short_name = ASCIIToUTF16("google"); | 302 data.short_name = ASCIIToUTF16("google"); |
333 data.SetKeyword(ASCIIToUTF16("keyword")); | 303 data.SetKeyword(ASCIIToUTF16("keyword")); |
334 data.SetURL("http://www.google.com/foo/bar"); | 304 data.SetURL("http://www.google.com/foo/bar"); |
335 data.favicon_url = GURL("http://favicon.url"); | 305 data.favicon_url = GURL("http://favicon.url"); |
336 data.safe_for_autoreplace = true; | 306 data.safe_for_autoreplace = true; |
337 data.date_created = Time::FromTimeT(100); | 307 data.date_created = Time::FromTimeT(100); |
338 data.last_modified = Time::FromTimeT(100); | 308 data.last_modified = Time::FromTimeT(100); |
339 data.sync_guid = "00000000-0000-0000-0000-000000000001"; | 309 data.sync_guid = "00000000-0000-0000-0000-000000000001"; |
340 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data); | 310 TemplateURL* t_url = new TemplateURL(data); |
341 model()->Add(t_url); | 311 model()->Add(t_url); |
342 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), | 312 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), |
343 NULL)); | 313 NULL)); |
344 VerifyObserverCount(1); | 314 VerifyObserverCount(1); |
345 base::RunLoop().RunUntilIdle(); | 315 base::RunLoop().RunUntilIdle(); |
346 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 316 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
347 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); | 317 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); |
348 // We need to make a second copy as the model takes ownership of |t_url| and | 318 // We need to make a second copy as the model takes ownership of |t_url| and |
349 // will delete it. We have to do this after calling Add() since that gives | 319 // will delete it. We have to do this after calling Add() since that gives |
350 // |t_url| its ID. | 320 // |t_url| its ID. |
351 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->profile(), | 321 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
352 t_url->data())); | |
353 | 322 |
354 // Reload the model to verify it was actually saved to the database. | 323 // Reload the model to verify it was actually saved to the database. |
355 test_util_.ResetModel(true); | 324 test_util_.ResetModel(true); |
356 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 325 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
357 TemplateURL* loaded_url = | 326 TemplateURL* loaded_url = |
358 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 327 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
359 ASSERT_TRUE(loaded_url != NULL); | 328 ASSERT_TRUE(loaded_url != NULL); |
360 AssertEquals(*cloned_url, *loaded_url); | 329 AssertEquals(*cloned_url, *loaded_url); |
361 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), | 330 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), |
362 NULL)); | 331 NULL)); |
363 | 332 |
364 // We expect the last_modified time to be updated to the present time on an | 333 // We expect the last_modified time to be updated to the present time on an |
365 // explicit reset. We have to set up the expectation here because ResetModel | 334 // explicit reset. We have to set up the expectation here because ResetModel |
366 // resets the TimeProvider in the TemplateURLService. | 335 // resets the TimeProvider in the TemplateURLService. |
367 StrictMock<base::MockTimeProvider> mock_time; | 336 StrictMock<base::MockTimeProvider> mock_time; |
368 model()->set_time_provider(&base::MockTimeProvider::StaticNow); | 337 model()->set_time_provider(&base::MockTimeProvider::StaticNow); |
369 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); | 338 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); |
370 | 339 |
371 // Mutate an element and verify it succeeded. | 340 // Mutate an element and verify it succeeded. |
372 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), ASCIIToUTF16("b"), | 341 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), ASCIIToUTF16("b"), |
373 "c"); | 342 "c"); |
374 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name()); | 343 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name()); |
375 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword()); | 344 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword()); |
376 ASSERT_EQ("c", loaded_url->url()); | 345 ASSERT_EQ("c", loaded_url->url()); |
377 ASSERT_FALSE(loaded_url->safe_for_autoreplace()); | 346 ASSERT_FALSE(loaded_url->safe_for_autoreplace()); |
378 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), | 347 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), |
379 NULL)); | 348 NULL)); |
380 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL)); | 349 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL)); |
381 cloned_url.reset(new TemplateURL(loaded_url->profile(), loaded_url->data())); | 350 cloned_url.reset(new TemplateURL(loaded_url->data())); |
382 base::RunLoop().RunUntilIdle(); | 351 base::RunLoop().RunUntilIdle(); |
383 test_util_.ResetModel(true); | 352 test_util_.ResetModel(true); |
384 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 353 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
385 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")); | 354 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")); |
386 ASSERT_TRUE(loaded_url != NULL); | 355 ASSERT_TRUE(loaded_url != NULL); |
387 AssertEquals(*cloned_url, *loaded_url); | 356 AssertEquals(*cloned_url, *loaded_url); |
388 // We changed a TemplateURL in the service, so ensure that the time was | 357 // We changed a TemplateURL in the service, so ensure that the time was |
389 // updated. | 358 // updated. |
390 ASSERT_EQ(base::Time::FromDoubleT(1337), loaded_url->last_modified()); | 359 ASSERT_EQ(base::Time::FromDoubleT(1337), loaded_url->last_modified()); |
391 | 360 |
(...skipping 13 matching lines...) Expand all Loading... |
405 std::string(), true, "UTF-8", Time(), Time()); | 374 std::string(), true, "UTF-8", Time(), Time()); |
406 VerifyObserverCount(1); | 375 VerifyObserverCount(1); |
407 | 376 |
408 // Test what happens when we try to add a TemplateURL with the same keyword as | 377 // Test what happens when we try to add a TemplateURL with the same keyword as |
409 // one in the model. | 378 // one in the model. |
410 TemplateURLData data; | 379 TemplateURLData data; |
411 data.short_name = ASCIIToUTF16("second"); | 380 data.short_name = ASCIIToUTF16("second"); |
412 data.SetKeyword(ASCIIToUTF16("keyword")); | 381 data.SetKeyword(ASCIIToUTF16("keyword")); |
413 data.SetURL("http://test2"); | 382 data.SetURL("http://test2"); |
414 data.safe_for_autoreplace = false; | 383 data.safe_for_autoreplace = false; |
415 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data); | 384 TemplateURL* t_url = new TemplateURL(data); |
416 model()->Add(t_url); | 385 model()->Add(t_url); |
417 | 386 |
418 // Because the old TemplateURL was replaceable and the new one wasn't, the new | 387 // Because the old TemplateURL was replaceable and the new one wasn't, the new |
419 // one should have replaced the old. | 388 // one should have replaced the old. |
420 VerifyObserverCount(1); | 389 VerifyObserverCount(1); |
421 EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 390 EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
422 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); | 391 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); |
423 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword()); | 392 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword()); |
424 EXPECT_FALSE(t_url->safe_for_autoreplace()); | 393 EXPECT_FALSE(t_url->safe_for_autoreplace()); |
425 | 394 |
426 // Now try adding a replaceable TemplateURL. This should just delete the | 395 // Now try adding a replaceable TemplateURL. This should just delete the |
427 // passed-in URL. | 396 // passed-in URL. |
428 data.short_name = ASCIIToUTF16("third"); | 397 data.short_name = ASCIIToUTF16("third"); |
429 data.SetURL("http://test3"); | 398 data.SetURL("http://test3"); |
430 data.safe_for_autoreplace = true; | 399 data.safe_for_autoreplace = true; |
431 model()->Add(new TemplateURL(test_util_.profile(), data)); | 400 model()->Add(new TemplateURL(data)); |
432 VerifyObserverCount(0); | 401 VerifyObserverCount(0); |
433 EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 402 EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
434 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); | 403 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); |
435 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword()); | 404 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword()); |
436 EXPECT_FALSE(t_url->safe_for_autoreplace()); | 405 EXPECT_FALSE(t_url->safe_for_autoreplace()); |
437 | 406 |
438 // Now try adding a non-replaceable TemplateURL again. This should uniquify | 407 // Now try adding a non-replaceable TemplateURL again. This should uniquify |
439 // the existing entry's keyword. | 408 // the existing entry's keyword. |
440 data.short_name = ASCIIToUTF16("fourth"); | 409 data.short_name = ASCIIToUTF16("fourth"); |
441 data.SetURL("http://test4"); | 410 data.SetURL("http://test4"); |
442 data.safe_for_autoreplace = false; | 411 data.safe_for_autoreplace = false; |
443 TemplateURL* t_url2 = new TemplateURL(test_util_.profile(), data); | 412 TemplateURL* t_url2 = new TemplateURL(data); |
444 model()->Add(t_url2); | 413 model()->Add(t_url2); |
445 VerifyObserverCount(1); | 414 VerifyObserverCount(1); |
446 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 415 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
447 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); | 416 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); |
448 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); | 417 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); |
449 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); | 418 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); |
450 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); | 419 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); |
451 } | 420 } |
452 | 421 |
453 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { | 422 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { |
(...skipping 12 matching lines...) Expand all Loading... |
466 | 435 |
467 // Add an extension keyword that conflicts with each of the above three | 436 // Add an extension keyword that conflicts with each of the above three |
468 // keywords. | 437 // keywords. |
469 TemplateURLData data; | 438 TemplateURLData data; |
470 data.short_name = ASCIIToUTF16("test"); | 439 data.short_name = ASCIIToUTF16("test"); |
471 data.SetKeyword(ASCIIToUTF16("keyword1")); | 440 data.SetKeyword(ASCIIToUTF16("keyword1")); |
472 data.SetURL(std::string(extensions::kExtensionScheme) + "://test4"); | 441 data.SetURL(std::string(extensions::kExtensionScheme) + "://test4"); |
473 data.safe_for_autoreplace = false; | 442 data.safe_for_autoreplace = false; |
474 | 443 |
475 // Both replaceable and non-replaceable keywords should be uniquified. | 444 // Both replaceable and non-replaceable keywords should be uniquified. |
476 TemplateURL* extension1 = new TemplateURL(test_util_.profile(), data); | 445 TemplateURL* extension1 = new TemplateURL(data); |
477 model()->Add(extension1); | 446 model()->Add(extension1); |
478 ASSERT_EQ(extension1, | 447 ASSERT_EQ(extension1, |
479 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword1"))); | 448 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword1"))); |
480 EXPECT_EQ(original1, | 449 EXPECT_EQ(original1, |
481 model()->GetTemplateURLForKeyword(ASCIIToUTF16("test1"))); | 450 model()->GetTemplateURLForKeyword(ASCIIToUTF16("test1"))); |
482 data.SetKeyword(ASCIIToUTF16("keyword2")); | 451 data.SetKeyword(ASCIIToUTF16("keyword2")); |
483 TemplateURL* extension2 = new TemplateURL(test_util_.profile(), data); | 452 TemplateURL* extension2 = new TemplateURL(data); |
484 model()->Add(extension2); | 453 model()->Add(extension2); |
485 ASSERT_EQ(extension2, | 454 ASSERT_EQ(extension2, |
486 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword2"))); | 455 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword2"))); |
487 EXPECT_EQ(original2, | 456 EXPECT_EQ(original2, |
488 model()->GetTemplateURLForKeyword(ASCIIToUTF16("test2"))); | 457 model()->GetTemplateURLForKeyword(ASCIIToUTF16("test2"))); |
489 | 458 |
490 // They should override extension keywords added earlier. | 459 // They should override extension keywords added earlier. |
491 data.SetKeyword(ASCIIToUTF16("keyword3")); | 460 data.SetKeyword(ASCIIToUTF16("keyword3")); |
492 TemplateURL* extension3 = new TemplateURL(test_util_.profile(), data); | 461 TemplateURL* extension3 = new TemplateURL(data); |
493 model()->Add(extension3); | 462 model()->Add(extension3); |
494 ASSERT_EQ(extension3, | 463 ASSERT_EQ(extension3, |
495 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3"))); | 464 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3"))); |
496 EXPECT_EQ(original3, | 465 EXPECT_EQ(original3, |
497 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3_"))); | 466 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3_"))); |
498 } | 467 } |
499 | 468 |
500 TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) { | 469 TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) { |
501 test_util_.VerifyLoad(); | 470 test_util_.VerifyLoad(); |
502 | 471 |
(...skipping 10 matching lines...) Expand all Loading... |
513 "replaceable", "keyword", "http://test1", std::string(), std::string(), | 482 "replaceable", "keyword", "http://test1", std::string(), std::string(), |
514 std::string(), true, "UTF-8", Time(), Time()); | 483 std::string(), true, "UTF-8", Time(), Time()); |
515 | 484 |
516 // Adding another replaceable keyword should remove the existing one, but | 485 // Adding another replaceable keyword should remove the existing one, but |
517 // leave the extension as is. | 486 // leave the extension as is. |
518 TemplateURLData data; | 487 TemplateURLData data; |
519 data.short_name = ASCIIToUTF16("name1"); | 488 data.short_name = ASCIIToUTF16("name1"); |
520 data.SetKeyword(ASCIIToUTF16("keyword")); | 489 data.SetKeyword(ASCIIToUTF16("keyword")); |
521 data.SetURL("http://test3"); | 490 data.SetURL("http://test3"); |
522 data.safe_for_autoreplace = true; | 491 data.safe_for_autoreplace = true; |
523 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data); | 492 TemplateURL* t_url = new TemplateURL(data); |
524 model()->Add(t_url); | 493 model()->Add(t_url); |
525 EXPECT_EQ(extension, | 494 EXPECT_EQ(extension, |
526 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword_"))); | 495 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword_"))); |
527 EXPECT_TRUE(model()->GetTemplateURLForHost("test1") == NULL); | 496 EXPECT_TRUE(model()->GetTemplateURLForHost("test1") == NULL); |
528 EXPECT_EQ(t_url, model()->GetTemplateURLForHost("test3")); | 497 EXPECT_EQ(t_url, model()->GetTemplateURLForHost("test3")); |
529 | 498 |
530 // Adding a nonreplaceable keyword should remove the existing replaceable | 499 // Adding a nonreplaceable keyword should remove the existing replaceable |
531 // keyword. | 500 // keyword. |
532 data.short_name = ASCIIToUTF16("name2"); | 501 data.short_name = ASCIIToUTF16("name2"); |
533 data.SetURL("http://test4"); | 502 data.SetURL("http://test4"); |
534 data.safe_for_autoreplace = false; | 503 data.safe_for_autoreplace = false; |
535 TemplateURL* t_url2 = new TemplateURL(test_util_.profile(), data); | 504 TemplateURL* t_url2 = new TemplateURL(data); |
536 model()->Add(t_url2); | 505 model()->Add(t_url2); |
537 EXPECT_EQ(t_url2, | 506 EXPECT_EQ(t_url2, |
538 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 507 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
539 EXPECT_TRUE(model()->GetTemplateURLForHost("test3") == NULL); | 508 EXPECT_TRUE(model()->GetTemplateURLForHost("test3") == NULL); |
540 EXPECT_EQ(extension, | 509 EXPECT_EQ(extension, |
541 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword_"))); | 510 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword_"))); |
542 } | 511 } |
543 | 512 |
544 TEST_F(TemplateURLServiceTest, GenerateKeyword) { | 513 TEST_F(TemplateURLServiceTest, GenerateKeyword) { |
545 ASSERT_EQ(ASCIIToUTF16("foo"), | 514 ASSERT_EQ(ASCIIToUTF16("foo"), |
546 TemplateURLService::GenerateKeyword(GURL("http://foo"))); | 515 TemplateURLService::GenerateKeyword(GURL("http://foo"))); |
547 // www. should be stripped. | 516 // www. should be stripped. |
548 ASSERT_EQ(ASCIIToUTF16("foo"), | 517 ASSERT_EQ(ASCIIToUTF16("foo"), |
549 TemplateURLService::GenerateKeyword(GURL("http://www.foo"))); | 518 TemplateURLService::GenerateKeyword(GURL("http://www.foo"))); |
550 // Make sure we don't get a trailing '/'. | 519 // Make sure we don't get a trailing '/'. |
551 ASSERT_EQ(ASCIIToUTF16("blah"), | 520 ASSERT_EQ(ASCIIToUTF16("blah"), |
552 TemplateURLService::GenerateKeyword(GURL("http://blah/"))); | 521 TemplateURLService::GenerateKeyword(GURL("http://blah/"))); |
553 // Don't generate the empty string. | 522 // Don't generate the empty string. |
554 ASSERT_EQ(ASCIIToUTF16("www"), | 523 ASSERT_EQ(ASCIIToUTF16("www"), |
555 TemplateURLService::GenerateKeyword(GURL("http://www."))); | 524 TemplateURLService::GenerateKeyword(GURL("http://www."))); |
556 } | 525 } |
557 | 526 |
558 TEST_F(TemplateURLServiceTest, GenerateSearchURL) { | 527 TEST_F(TemplateURLServiceTest, GenerateSearchURL) { |
559 TestGenerateSearchURL(NULL); | 528 TestSearchTermsData search_terms_data("http://google.com/"); |
560 } | |
561 | 529 |
562 TEST_F(TemplateURLServiceTest, GenerateSearchURLUsingTermsData) { | 530 struct GenerateSearchURLCase { |
563 // Run the test for GenerateSearchURLUsingTermsData on the "IO" thread and | 531 const char* test_name; |
564 // wait for it to finish. | 532 const char* url; |
565 TestSearchTermsData search_terms_data("http://google.com/"); | 533 const char* expected; |
566 TestGenerateSearchURL(&search_terms_data); | 534 } generate_url_cases[] = { |
| 535 { "invalid URL", "foo{searchTerms}", "" }, |
| 536 { "URL with no replacements", "http://foo/", "http://foo/" }, |
| 537 { "basic functionality", "http://foo/{searchTerms}", |
| 538 "http://foo/blah.blah.blah.blah.blah" } |
| 539 }; |
| 540 |
| 541 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(generate_url_cases); ++i) { |
| 542 TemplateURLData data; |
| 543 data.SetURL(generate_url_cases[i].url); |
| 544 TemplateURL t_url(data); |
| 545 std::string result = TemplateURLService::GenerateSearchURL( |
| 546 &t_url, search_terms_data).spec(); |
| 547 EXPECT_EQ(result, generate_url_cases[i].expected) |
| 548 << generate_url_cases[i].test_name << " failed."; |
| 549 } |
567 } | 550 } |
568 | 551 |
569 TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) { | 552 TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) { |
570 Time now = Time::Now(); | 553 Time now = Time::Now(); |
571 TimeDelta one_day = TimeDelta::FromDays(1); | 554 TimeDelta one_day = TimeDelta::FromDays(1); |
572 Time month_ago = now - TimeDelta::FromDays(30); | 555 Time month_ago = now - TimeDelta::FromDays(30); |
573 | 556 |
574 // Nothing has been added. | 557 // Nothing has been added. |
575 EXPECT_EQ(0U, model()->GetTemplateURLs().size()); | 558 EXPECT_EQ(0U, model()->GetTemplateURLs().size()); |
576 | 559 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
684 // Add a new TemplateURL. | 667 // Add a new TemplateURL. |
685 test_util_.VerifyLoad(); | 668 test_util_.VerifyLoad(); |
686 const size_t initial_count = model()->GetTemplateURLs().size(); | 669 const size_t initial_count = model()->GetTemplateURLs().size(); |
687 TemplateURLData data; | 670 TemplateURLData data; |
688 data.short_name = ASCIIToUTF16("google"); | 671 data.short_name = ASCIIToUTF16("google"); |
689 data.SetKeyword(ASCIIToUTF16("keyword")); | 672 data.SetKeyword(ASCIIToUTF16("keyword")); |
690 data.SetURL("http://www.google.com/foo/bar"); | 673 data.SetURL("http://www.google.com/foo/bar"); |
691 data.favicon_url = GURL("http://favicon.url"); | 674 data.favicon_url = GURL("http://favicon.url"); |
692 data.date_created = Time::FromTimeT(100); | 675 data.date_created = Time::FromTimeT(100); |
693 data.last_modified = Time::FromTimeT(100); | 676 data.last_modified = Time::FromTimeT(100); |
694 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data); | 677 TemplateURL* t_url = new TemplateURL(data); |
695 model()->Add(t_url); | 678 model()->Add(t_url); |
696 | 679 |
697 VerifyObserverCount(1); | 680 VerifyObserverCount(1); |
698 base::RunLoop().RunUntilIdle(); | 681 base::RunLoop().RunUntilIdle(); |
699 | 682 |
700 StrictMock<base::MockTimeProvider> mock_time; | 683 StrictMock<base::MockTimeProvider> mock_time; |
701 model()->set_time_provider(&base::MockTimeProvider::StaticNow); | 684 model()->set_time_provider(&base::MockTimeProvider::StaticNow); |
702 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); | 685 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); |
703 | 686 |
704 // Reset the short name, keyword, url and make sure it takes. | 687 // Reset the short name, keyword, url and make sure it takes. |
705 const base::string16 new_short_name(ASCIIToUTF16("a")); | 688 const base::string16 new_short_name(ASCIIToUTF16("a")); |
706 const base::string16 new_keyword(ASCIIToUTF16("b")); | 689 const base::string16 new_keyword(ASCIIToUTF16("b")); |
707 const std::string new_url("c"); | 690 const std::string new_url("c"); |
708 model()->ResetTemplateURL(t_url, new_short_name, new_keyword, new_url); | 691 model()->ResetTemplateURL(t_url, new_short_name, new_keyword, new_url); |
709 ASSERT_EQ(new_short_name, t_url->short_name()); | 692 ASSERT_EQ(new_short_name, t_url->short_name()); |
710 ASSERT_EQ(new_keyword, t_url->keyword()); | 693 ASSERT_EQ(new_keyword, t_url->keyword()); |
711 ASSERT_EQ(new_url, t_url->url()); | 694 ASSERT_EQ(new_url, t_url->url()); |
712 | 695 |
713 // Make sure the mappings in the model were updated. | 696 // Make sure the mappings in the model were updated. |
714 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword)); | 697 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword)); |
715 ASSERT_TRUE( | 698 ASSERT_TRUE( |
716 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); | 699 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); |
717 | 700 |
718 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->profile(), | 701 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
719 t_url->data())); | |
720 | 702 |
721 // Reload the model from the database and make sure the change took. | 703 // Reload the model from the database and make sure the change took. |
722 test_util_.ResetModel(true); | 704 test_util_.ResetModel(true); |
723 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 705 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
724 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); | 706 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); |
725 ASSERT_TRUE(read_url); | 707 ASSERT_TRUE(read_url); |
726 AssertEquals(*cloned_url, *read_url); | 708 AssertEquals(*cloned_url, *read_url); |
727 ASSERT_EQ(base::Time::FromDoubleT(1337), read_url->last_modified()); | 709 ASSERT_EQ(base::Time::FromDoubleT(1337), read_url->last_modified()); |
728 } | 710 } |
729 | 711 |
730 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { | 712 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { |
731 // Add a new TemplateURL. | 713 // Add a new TemplateURL. |
732 test_util_.VerifyLoad(); | 714 test_util_.VerifyLoad(); |
733 const size_t initial_count = model()->GetTemplateURLs().size(); | 715 const size_t initial_count = model()->GetTemplateURLs().size(); |
734 TemplateURL* t_url = AddKeywordWithDate( | 716 TemplateURL* t_url = AddKeywordWithDate( |
735 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", | 717 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", |
736 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); | 718 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
737 test_util_.ResetObserverCount(); | 719 test_util_.ResetObserverCount(); |
738 | 720 |
739 model()->SetUserSelectedDefaultSearchProvider(t_url); | 721 model()->SetUserSelectedDefaultSearchProvider(t_url); |
740 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); | 722 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); |
741 ASSERT_TRUE(t_url->safe_for_autoreplace()); | 723 ASSERT_TRUE(t_url->safe_for_autoreplace()); |
742 ASSERT_TRUE(t_url->show_in_default_list()); | 724 ASSERT_TRUE(t_url->show_in_default_list()); |
743 | 725 |
744 // Setting the default search provider should have caused notification. | 726 // Setting the default search provider should have caused notification. |
745 VerifyObserverCount(1); | 727 VerifyObserverCount(1); |
746 base::RunLoop().RunUntilIdle(); | 728 base::RunLoop().RunUntilIdle(); |
747 | 729 |
748 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->profile(), | 730 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
749 t_url->data())); | |
750 | 731 |
751 // Make sure when we reload we get a default search provider. | 732 // Make sure when we reload we get a default search provider. |
752 test_util_.ResetModel(true); | 733 test_util_.ResetModel(true); |
753 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 734 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
754 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 735 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
755 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); | 736 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); |
756 } | 737 } |
757 | 738 |
758 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { | 739 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { |
759 test_util_.ChangeModelToLoadState(); | 740 test_util_.ChangeModelToLoadState(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
810 test_util_.VerifyLoad(); | 791 test_util_.VerifyLoad(); |
811 | 792 |
812 TemplateURLData data; | 793 TemplateURLData data; |
813 data.short_name = ASCIIToUTF16("a"); | 794 data.short_name = ASCIIToUTF16("a"); |
814 data.safe_for_autoreplace = true; | 795 data.safe_for_autoreplace = true; |
815 data.SetURL("http://url/{searchTerms}"); | 796 data.SetURL("http://url/{searchTerms}"); |
816 data.suggestions_url = "http://url2"; | 797 data.suggestions_url = "http://url2"; |
817 data.instant_url = "http://instant"; | 798 data.instant_url = "http://instant"; |
818 data.date_created = Time::FromTimeT(100); | 799 data.date_created = Time::FromTimeT(100); |
819 data.last_modified = Time::FromTimeT(100); | 800 data.last_modified = Time::FromTimeT(100); |
820 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data); | 801 TemplateURL* t_url = new TemplateURL(data); |
821 model()->Add(t_url); | 802 model()->Add(t_url); |
822 const TemplateURLID id = t_url->id(); | 803 const TemplateURLID id = t_url->id(); |
823 | 804 |
824 model()->SetUserSelectedDefaultSearchProvider(t_url); | 805 model()->SetUserSelectedDefaultSearchProvider(t_url); |
825 base::RunLoop().RunUntilIdle(); | 806 base::RunLoop().RunUntilIdle(); |
826 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->profile(), | 807 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
827 t_url->data())); | |
828 | 808 |
829 // Reset the model and don't load it. The template url we set as the default | 809 // Reset the model and don't load it. The template url we set as the default |
830 // should be pulled from prefs now. | 810 // should be pulled from prefs now. |
831 test_util_.ResetModel(false); | 811 test_util_.ResetModel(false); |
832 | 812 |
833 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs | 813 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs |
834 // value are persisted to prefs. | 814 // value are persisted to prefs. |
835 const TemplateURL* default_turl = model()->GetDefaultSearchProvider(); | 815 const TemplateURL* default_turl = model()->GetDefaultSearchProvider(); |
836 ASSERT_TRUE(default_turl); | 816 ASSERT_TRUE(default_turl); |
837 EXPECT_EQ(ASCIIToUTF16("a"), default_turl->short_name()); | 817 EXPECT_EQ(ASCIIToUTF16("a"), default_turl->short_name()); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
878 model()->RegisterOmniboxKeyword("abcdefg", "extension_name", "bing.com"); | 858 model()->RegisterOmniboxKeyword("abcdefg", "extension_name", "bing.com"); |
879 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("bing.com"))); | 859 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("bing.com"))); |
880 | 860 |
881 model()->RepairPrepopulatedSearchEngines(); | 861 model()->RepairPrepopulatedSearchEngines(); |
882 | 862 |
883 // Google is default. | 863 // Google is default. |
884 ASSERT_EQ(google, model()->GetDefaultSearchProvider()); | 864 ASSERT_EQ(google, model()->GetDefaultSearchProvider()); |
885 // The keyword wasn't reverted. | 865 // The keyword wasn't reverted. |
886 EXPECT_EQ(ASCIIToUTF16("trash"), google->short_name()); | 866 EXPECT_EQ(ASCIIToUTF16("trash"), google->short_name()); |
887 EXPECT_EQ("www.google.com", | 867 EXPECT_EQ("www.google.com", |
888 TemplateURLService::GenerateSearchURL(google).host()); | 868 TemplateURLService::GenerateSearchURL( |
| 869 google, model()->search_terms_data()).host()); |
889 | 870 |
890 // Bing was repaired. | 871 // Bing was repaired. |
891 bing = model()->GetTemplateURLForKeyword(ASCIIToUTF16("bing.com")); | 872 bing = model()->GetTemplateURLForKeyword(ASCIIToUTF16("bing.com")); |
892 ASSERT_TRUE(bing); | 873 ASSERT_TRUE(bing); |
893 EXPECT_EQ(TemplateURL::NORMAL, bing->GetType()); | 874 EXPECT_EQ(TemplateURL::NORMAL, bing->GetType()); |
894 | 875 |
895 // User search engine is preserved. | 876 // User search engine is preserved. |
896 EXPECT_EQ(user_dse, model()->GetTemplateURLForHost("www.goo.com")); | 877 EXPECT_EQ(user_dse, model()->GetTemplateURLForHost("www.goo.com")); |
897 EXPECT_EQ(ASCIIToUTF16("google.com"), user_dse->keyword()); | 878 EXPECT_EQ(ASCIIToUTF16("google.com"), user_dse->keyword()); |
898 } | 879 } |
(...skipping 16 matching lines...) Expand all Loading... |
915 // Verify that the default manager we are getting is the managed one. | 896 // Verify that the default manager we are getting is the managed one. |
916 TemplateURLData data; | 897 TemplateURLData data; |
917 data.short_name = ASCIIToUTF16(kName); | 898 data.short_name = ASCIIToUTF16(kName); |
918 data.SetKeyword(ASCIIToUTF16(kKeyword)); | 899 data.SetKeyword(ASCIIToUTF16(kKeyword)); |
919 data.SetURL(kSearchURL); | 900 data.SetURL(kSearchURL); |
920 data.favicon_url = GURL(kIconURL); | 901 data.favicon_url = GURL(kIconURL); |
921 data.show_in_default_list = true; | 902 data.show_in_default_list = true; |
922 base::SplitString(kEncodings, ';', &data.input_encodings); | 903 base::SplitString(kEncodings, ';', &data.input_encodings); |
923 data.alternate_urls.push_back(kAlternateURL); | 904 data.alternate_urls.push_back(kAlternateURL); |
924 data.search_terms_replacement_key = kSearchTermsReplacementKey; | 905 data.search_terms_replacement_key = kSearchTermsReplacementKey; |
925 scoped_ptr<TemplateURL> expected_managed_default(new TemplateURL( | 906 scoped_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); |
926 test_util_.profile(), data)); | |
927 EXPECT_TRUE(model()->is_default_search_managed()); | 907 EXPECT_TRUE(model()->is_default_search_managed()); |
928 const TemplateURL* actual_managed_default = | 908 const TemplateURL* actual_managed_default = |
929 model()->GetDefaultSearchProvider(); | 909 model()->GetDefaultSearchProvider(); |
930 ExpectSimilar(expected_managed_default.get(), actual_managed_default); | 910 ExpectSimilar(expected_managed_default.get(), actual_managed_default); |
931 | 911 |
932 // The following call has no effect on the managed search engine. | 912 // The following call has no effect on the managed search engine. |
933 model()->RepairPrepopulatedSearchEngines(); | 913 model()->RepairPrepopulatedSearchEngines(); |
934 | 914 |
935 EXPECT_TRUE(model()->is_default_search_managed()); | 915 EXPECT_TRUE(model()->is_default_search_managed()); |
936 actual_managed_default = model()->GetDefaultSearchProvider(); | 916 actual_managed_default = model()->GetDefaultSearchProvider(); |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1123 | 1103 |
1124 // Make sure that load routine doesn't delete prepopulated engines that no | 1104 // Make sure that load routine doesn't delete prepopulated engines that no |
1125 // longer exist in the prepopulate data if it has been modified by the user. | 1105 // longer exist in the prepopulate data if it has been modified by the user. |
1126 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) { | 1106 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) { |
1127 // Create a preloaded template url and add it to a loaded model. | 1107 // Create a preloaded template url and add it to a loaded model. |
1128 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999); | 1108 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999); |
1129 test_util_.ChangeModelToLoadState(); | 1109 test_util_.ChangeModelToLoadState(); |
1130 model()->Add(t_url); | 1110 model()->Add(t_url); |
1131 | 1111 |
1132 // Do the copy after t_url is added so that the id is set. | 1112 // Do the copy after t_url is added so that the id is set. |
1133 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->profile(), | 1113 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
1134 t_url->data())); | |
1135 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); | 1114 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); |
1136 | 1115 |
1137 // Wait for any saves to finish. | 1116 // Wait for any saves to finish. |
1138 base::RunLoop().RunUntilIdle(); | 1117 base::RunLoop().RunUntilIdle(); |
1139 | 1118 |
1140 // Ensure that merging won't clear it if the user has edited it. | 1119 // Ensure that merging won't clear it if the user has edited it. |
1141 test_util_.ResetModel(true); | 1120 test_util_.ResetModel(true); |
1142 const TemplateURL* url_for_unittest = | 1121 const TemplateURL* url_for_unittest = |
1143 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); | 1122 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); |
1144 ASSERT_TRUE(url_for_unittest != NULL); | 1123 ASSERT_TRUE(url_for_unittest != NULL); |
1145 AssertEquals(*cloned_url, *url_for_unittest); | 1124 AssertEquals(*cloned_url, *url_for_unittest); |
1146 | 1125 |
1147 // Wait for any saves to finish. | 1126 // Wait for any saves to finish. |
1148 base::RunLoop().RunUntilIdle(); | 1127 base::RunLoop().RunUntilIdle(); |
1149 | 1128 |
1150 // Reload the model to verify that save/reload retains the item. | 1129 // Reload the model to verify that save/reload retains the item. |
1151 test_util_.ResetModel(true); | 1130 test_util_.ResetModel(true); |
1152 ASSERT_TRUE( | 1131 ASSERT_TRUE( |
1153 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); | 1132 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); |
1154 } | 1133 } |
1155 | 1134 |
1156 // Make sure that load routine doesn't delete | 1135 // Make sure that load routine doesn't delete |
1157 // prepopulated engines that no longer exist in the prepopulate data if | 1136 // prepopulated engines that no longer exist in the prepopulate data if |
1158 // it has been modified by the user. | 1137 // it has been modified by the user. |
1159 TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) { | 1138 TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) { |
1160 test_util_.VerifyLoad(); | 1139 test_util_.VerifyLoad(); |
1161 // Verify that the default search provider is set to something. | 1140 // Verify that the default search provider is set to something. |
1162 TemplateURL* default_search = model()->GetDefaultSearchProvider(); | 1141 TemplateURL* default_search = model()->GetDefaultSearchProvider(); |
1163 ASSERT_TRUE(default_search != NULL); | 1142 ASSERT_TRUE(default_search != NULL); |
1164 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(default_search->profile(), | 1143 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(default_search->data())); |
1165 default_search->data())); | |
1166 | 1144 |
1167 // Wait for any saves to finish. | 1145 // Wait for any saves to finish. |
1168 base::RunLoop().RunUntilIdle(); | 1146 base::RunLoop().RunUntilIdle(); |
1169 | 1147 |
1170 // Reload the model and check that the default search provider | 1148 // Reload the model and check that the default search provider |
1171 // was properly saved. | 1149 // was properly saved. |
1172 test_util_.ResetModel(true); | 1150 test_util_.ResetModel(true); |
1173 default_search = model()->GetDefaultSearchProvider(); | 1151 default_search = model()->GetDefaultSearchProvider(); |
1174 ASSERT_TRUE(default_search != NULL); | 1152 ASSERT_TRUE(default_search != NULL); |
1175 AssertEquals(*cloned_url, *default_search); | 1153 AssertEquals(*cloned_url, *default_search); |
1176 } | 1154 } |
1177 | 1155 |
1178 // Make sure that the load routine doesn't delete | 1156 // Make sure that the load routine doesn't delete |
1179 // prepopulated engines that no longer exist in the prepopulate data if | 1157 // prepopulated engines that no longer exist in the prepopulate data if |
1180 // it is the default search provider. | 1158 // it is the default search provider. |
1181 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) { | 1159 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) { |
1182 // Set the default search provider to a preloaded template url which | 1160 // Set the default search provider to a preloaded template url which |
1183 // is not in the current set of preloaded template urls and save | 1161 // is not in the current set of preloaded template urls and save |
1184 // the result. | 1162 // the result. |
1185 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); | 1163 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); |
1186 test_util_.ChangeModelToLoadState(); | 1164 test_util_.ChangeModelToLoadState(); |
1187 model()->Add(t_url); | 1165 model()->Add(t_url); |
1188 model()->SetUserSelectedDefaultSearchProvider(t_url); | 1166 model()->SetUserSelectedDefaultSearchProvider(t_url); |
1189 // Do the copy after t_url is added and set as default so that its | 1167 // Do the copy after t_url is added and set as default so that its |
1190 // internal state is correct. | 1168 // internal state is correct. |
1191 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->profile(), | 1169 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
1192 t_url->data())); | |
1193 | 1170 |
1194 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); | 1171 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); |
1195 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); | 1172 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); |
1196 base::RunLoop().RunUntilIdle(); | 1173 base::RunLoop().RunUntilIdle(); |
1197 | 1174 |
1198 // Ensure that merging won't clear the prepopulated template url | 1175 // Ensure that merging won't clear the prepopulated template url |
1199 // which is no longer present if it's the default engine. | 1176 // which is no longer present if it's the default engine. |
1200 test_util_.ResetModel(true); | 1177 test_util_.ResetModel(true); |
1201 { | 1178 { |
1202 const TemplateURL* keyword_url = | 1179 const TemplateURL* keyword_url = |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1300 // Verify that the default manager we are getting is the managed one. | 1277 // Verify that the default manager we are getting is the managed one. |
1301 TemplateURLData data; | 1278 TemplateURLData data; |
1302 data.short_name = ASCIIToUTF16(kName); | 1279 data.short_name = ASCIIToUTF16(kName); |
1303 data.SetKeyword(ASCIIToUTF16(kKeyword)); | 1280 data.SetKeyword(ASCIIToUTF16(kKeyword)); |
1304 data.SetURL(kSearchURL); | 1281 data.SetURL(kSearchURL); |
1305 data.favicon_url = GURL(kIconURL); | 1282 data.favicon_url = GURL(kIconURL); |
1306 data.show_in_default_list = true; | 1283 data.show_in_default_list = true; |
1307 base::SplitString(kEncodings, ';', &data.input_encodings); | 1284 base::SplitString(kEncodings, ';', &data.input_encodings); |
1308 data.alternate_urls.push_back(kAlternateURL); | 1285 data.alternate_urls.push_back(kAlternateURL); |
1309 data.search_terms_replacement_key = kSearchTermsReplacementKey; | 1286 data.search_terms_replacement_key = kSearchTermsReplacementKey; |
1310 Profile* profile = test_util_.profile(); | 1287 scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL(data)); |
1311 scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL(profile, | |
1312 data)); | |
1313 const TemplateURL* actual_managed_default = | 1288 const TemplateURL* actual_managed_default = |
1314 model()->GetDefaultSearchProvider(); | 1289 model()->GetDefaultSearchProvider(); |
1315 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); | 1290 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); |
1316 EXPECT_TRUE(actual_managed_default->show_in_default_list()); | 1291 EXPECT_TRUE(actual_managed_default->show_in_default_list()); |
1317 | 1292 |
1318 // Update the managed preference and check that the model has changed. | 1293 // Update the managed preference and check that the model has changed. |
1319 const char kNewName[] = "test2"; | 1294 const char kNewName[] = "test2"; |
1320 const char kNewKeyword[] = "other.com"; | 1295 const char kNewKeyword[] = "other.com"; |
1321 const char kNewSearchURL[] = "http://other.com/search?t={searchTerms}"; | 1296 const char kNewSearchURL[] = "http://other.com/search?t={searchTerms}"; |
1322 const char kNewSuggestURL[] = "http://other.com/suggest?t={searchTerms}"; | 1297 const char kNewSuggestURL[] = "http://other.com/suggest?t={searchTerms}"; |
1323 test_util_.SetManagedDefaultSearchPreferences(true, kNewName, kNewKeyword, | 1298 test_util_.SetManagedDefaultSearchPreferences(true, kNewName, kNewKeyword, |
1324 kNewSearchURL, kNewSuggestURL, std::string(), std::string(), | 1299 kNewSearchURL, kNewSuggestURL, std::string(), std::string(), |
1325 std::string(), std::string()); | 1300 std::string(), std::string()); |
1326 VerifyObserverFired(); | 1301 VerifyObserverFired(); |
1327 EXPECT_TRUE(model()->is_default_search_managed()); | 1302 EXPECT_TRUE(model()->is_default_search_managed()); |
1328 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); | 1303 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); |
1329 | 1304 |
1330 // Verify that the default manager we are now getting is the correct one. | 1305 // Verify that the default manager we are now getting is the correct one. |
1331 TemplateURLData data2; | 1306 TemplateURLData data2; |
1332 data2.short_name = ASCIIToUTF16(kNewName); | 1307 data2.short_name = ASCIIToUTF16(kNewName); |
1333 data2.SetKeyword(ASCIIToUTF16(kNewKeyword)); | 1308 data2.SetKeyword(ASCIIToUTF16(kNewKeyword)); |
1334 data2.SetURL(kNewSearchURL); | 1309 data2.SetURL(kNewSearchURL); |
1335 data2.suggestions_url = kNewSuggestURL; | 1310 data2.suggestions_url = kNewSuggestURL; |
1336 data2.show_in_default_list = true; | 1311 data2.show_in_default_list = true; |
1337 scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL(profile, | 1312 scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL(data2)); |
1338 data2)); | |
1339 actual_managed_default = model()->GetDefaultSearchProvider(); | 1313 actual_managed_default = model()->GetDefaultSearchProvider(); |
1340 ExpectSimilar(expected_managed_default2.get(), actual_managed_default); | 1314 ExpectSimilar(expected_managed_default2.get(), actual_managed_default); |
1341 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); | 1315 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); |
1342 | 1316 |
1343 // Remove all the managed prefs and check that we are no longer managed. | 1317 // Remove all the managed prefs and check that we are no longer managed. |
1344 test_util_.RemoveManagedDefaultSearchPreferences(); | 1318 test_util_.RemoveManagedDefaultSearchPreferences(); |
1345 VerifyObserverFired(); | 1319 VerifyObserverFired(); |
1346 EXPECT_FALSE(model()->is_default_search_managed()); | 1320 EXPECT_FALSE(model()->is_default_search_managed()); |
1347 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1321 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1348 | 1322 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1402 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) { | 1376 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) { |
1403 // Add a new TemplateURL. | 1377 // Add a new TemplateURL. |
1404 test_util_.VerifyLoad(); | 1378 test_util_.VerifyLoad(); |
1405 const size_t initial_count = model()->GetTemplateURLs().size(); | 1379 const size_t initial_count = model()->GetTemplateURLs().size(); |
1406 | 1380 |
1407 TemplateURLData data; | 1381 TemplateURLData data; |
1408 data.short_name = ASCIIToUTF16("google"); | 1382 data.short_name = ASCIIToUTF16("google"); |
1409 data.SetKeyword(ASCIIToUTF16("keyword")); | 1383 data.SetKeyword(ASCIIToUTF16("keyword")); |
1410 data.SetURL("http://www.google.com/foo/bar"); | 1384 data.SetURL("http://www.google.com/foo/bar"); |
1411 data.sync_guid.clear(); | 1385 data.sync_guid.clear(); |
1412 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data); | 1386 TemplateURL* t_url = new TemplateURL(data); |
1413 model()->Add(t_url); | 1387 model()->Add(t_url); |
1414 | 1388 |
1415 VerifyObserverCount(1); | 1389 VerifyObserverCount(1); |
1416 base::RunLoop().RunUntilIdle(); | 1390 base::RunLoop().RunUntilIdle(); |
1417 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1391 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1418 | 1392 |
1419 // Reload the model to verify it was actually saved to the database and | 1393 // Reload the model to verify it was actually saved to the database and |
1420 // assigned a new GUID when brought back. | 1394 // assigned a new GUID when brought back. |
1421 test_util_.ResetModel(true); | 1395 test_util_.ResetModel(true); |
1422 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1396 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
(...skipping 16 matching lines...) Expand all Loading... |
1439 data.SetURL("http://www.google.com/foo/bar"); | 1413 data.SetURL("http://www.google.com/foo/bar"); |
1440 std::vector<std::string> encodings; | 1414 std::vector<std::string> encodings; |
1441 data.input_encodings.push_back("UTF-8"); | 1415 data.input_encodings.push_back("UTF-8"); |
1442 data.input_encodings.push_back("UTF-8"); | 1416 data.input_encodings.push_back("UTF-8"); |
1443 data.input_encodings.push_back("UTF-16"); | 1417 data.input_encodings.push_back("UTF-16"); |
1444 data.input_encodings.push_back("UTF-8"); | 1418 data.input_encodings.push_back("UTF-8"); |
1445 data.input_encodings.push_back("Big5"); | 1419 data.input_encodings.push_back("Big5"); |
1446 data.input_encodings.push_back("UTF-16"); | 1420 data.input_encodings.push_back("UTF-16"); |
1447 data.input_encodings.push_back("Big5"); | 1421 data.input_encodings.push_back("Big5"); |
1448 data.input_encodings.push_back("Windows-1252"); | 1422 data.input_encodings.push_back("Windows-1252"); |
1449 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data); | 1423 TemplateURL* t_url = new TemplateURL(data); |
1450 model()->Add(t_url); | 1424 model()->Add(t_url); |
1451 | 1425 |
1452 VerifyObserverCount(1); | 1426 VerifyObserverCount(1); |
1453 base::RunLoop().RunUntilIdle(); | 1427 base::RunLoop().RunUntilIdle(); |
1454 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1428 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1455 const TemplateURL* loaded_url = | 1429 const TemplateURL* loaded_url = |
1456 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 1430 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
1457 ASSERT_TRUE(loaded_url != NULL); | 1431 ASSERT_TRUE(loaded_url != NULL); |
1458 EXPECT_EQ(8U, loaded_url->input_encodings().size()); | 1432 EXPECT_EQ(8U, loaded_url->input_encodings().size()); |
1459 | 1433 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1545 // Verify that the default manager we are getting is the managed one. | 1519 // Verify that the default manager we are getting is the managed one. |
1546 TemplateURLData data; | 1520 TemplateURLData data; |
1547 data.short_name = ASCIIToUTF16(kName); | 1521 data.short_name = ASCIIToUTF16(kName); |
1548 data.SetKeyword(ASCIIToUTF16(kKeyword)); | 1522 data.SetKeyword(ASCIIToUTF16(kKeyword)); |
1549 data.SetURL(kSearchURL); | 1523 data.SetURL(kSearchURL); |
1550 data.favicon_url = GURL(kIconURL); | 1524 data.favicon_url = GURL(kIconURL); |
1551 data.show_in_default_list = true; | 1525 data.show_in_default_list = true; |
1552 base::SplitString(kEncodings, ';', &data.input_encodings); | 1526 base::SplitString(kEncodings, ';', &data.input_encodings); |
1553 data.alternate_urls.push_back(kAlternateURL); | 1527 data.alternate_urls.push_back(kAlternateURL); |
1554 data.search_terms_replacement_key = kSearchTermsReplacementKey; | 1528 data.search_terms_replacement_key = kSearchTermsReplacementKey; |
1555 scoped_ptr<TemplateURL> expected_managed_default(new TemplateURL( | 1529 scoped_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); |
1556 test_util_.profile(), data)); | |
1557 EXPECT_TRUE(model()->is_default_search_managed()); | 1530 EXPECT_TRUE(model()->is_default_search_managed()); |
1558 const TemplateURL* actual_managed_default = | 1531 const TemplateURL* actual_managed_default = |
1559 model()->GetDefaultSearchProvider(); | 1532 model()->GetDefaultSearchProvider(); |
1560 ExpectSimilar(expected_managed_default.get(), actual_managed_default); | 1533 ExpectSimilar(expected_managed_default.get(), actual_managed_default); |
1561 | 1534 |
1562 TemplateURL* ext_dse = CreateKeywordWithDate( | 1535 TemplateURL* ext_dse = CreateKeywordWithDate( |
1563 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", | 1536 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", |
1564 std::string(), std::string(), std::string(), | 1537 std::string(), std::string(), std::string(), |
1565 true, true, "UTF-8", Time(), Time()); | 1538 true, true, "UTF-8", Time(), Time()); |
1566 scoped_ptr<AssociatedExtensionInfo> extension_info( | 1539 scoped_ptr<AssociatedExtensionInfo> extension_info( |
1567 new AssociatedExtensionInfo); | 1540 new AssociatedExtensionInfo); |
1568 extension_info->wants_to_be_default_engine = true; | 1541 extension_info->wants_to_be_default_engine = true; |
1569 extension_info->extension_id = "ext1"; | 1542 extension_info->extension_id = "ext1"; |
1570 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); | 1543 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); |
1571 EXPECT_EQ(ext_dse, model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); | 1544 EXPECT_EQ(ext_dse, model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); |
1572 EXPECT_TRUE(model()->is_default_search_managed()); | 1545 EXPECT_TRUE(model()->is_default_search_managed()); |
1573 actual_managed_default = model()->GetDefaultSearchProvider(); | 1546 actual_managed_default = model()->GetDefaultSearchProvider(); |
1574 ExpectSimilar(expected_managed_default.get(), actual_managed_default); | 1547 ExpectSimilar(expected_managed_default.get(), actual_managed_default); |
1575 } | 1548 } |
OLD | NEW |