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

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

Issue 15805002: Modify extension omnibox keywords to be user-configurable (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Test updates Created 7 years, 6 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
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/string_util.h" 10 #include "base/string_util.h"
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 model()->Add(t_url2); 499 model()->Add(t_url2);
500 VerifyObserverCount(2); 500 VerifyObserverCount(2);
501 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 501 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
502 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); 502 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name());
503 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); 503 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword());
504 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); 504 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name());
505 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); 505 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword());
506 } 506 }
507 507
508 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { 508 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) {
509 test_util_.VerifyLoad();
510
509 TemplateURL* original1 = AddKeywordWithDate( 511 TemplateURL* original1 = AddKeywordWithDate(
510 "replaceable", "keyword1", "http://test1", std::string(), std::string(), 512 "replaceable", "keyword1", "http://test1", std::string(), std::string(),
511 std::string(), true, "UTF-8", Time(), Time()); 513 std::string(), true, "UTF-8", Time(), Time());
512 TemplateURL* original2 = AddKeywordWithDate( 514 TemplateURL* original2 = AddKeywordWithDate(
513 "nonreplaceable", "keyword2", "http://test2", std::string(), 515 "nonreplaceable", "keyword2", "http://test2", std::string(),
514 std::string(), std::string(), false, "UTF-8", Time(), Time()); 516 std::string(), std::string(), false, "UTF-8", Time(), Time());
515 TemplateURL* original3 = AddKeywordWithDate( 517 TemplateURL* original3 = AddKeywordWithDate(
516 "extension", "keyword3", 518 "extension", "keyword3",
517 std::string(extensions::kExtensionScheme) + "://test3", std::string(), 519 std::string(extensions::kExtensionScheme) + "://test3", std::string(),
518 std::string(), std::string(), false, "UTF-8", Time(), Time()); 520 std::string(), std::string(), false, "UTF-8", Time(), Time());
519 521
520 // Add an extension keyword that conflicts with each of the above three 522 // Add an extension keyword that conflicts with each of the above three
521 // keywords. 523 // keywords.
522 TemplateURLData data; 524 TemplateURLData data;
523 data.short_name = ASCIIToUTF16("test"); 525 data.short_name = ASCIIToUTF16("test");
524 data.SetKeyword(ASCIIToUTF16("keyword1")); 526 data.SetKeyword(ASCIIToUTF16("keyword1"));
525 data.SetURL(std::string(extensions::kExtensionScheme) + "://test4"); 527 data.SetURL(std::string(extensions::kExtensionScheme) + "://test4");
526 data.safe_for_autoreplace = false; 528 data.safe_for_autoreplace = false;
527 529
528 // Extension keywords should override replaceable keywords. 530 // Both replaceable and non-replaceable keywords should be uniquified.
529 TemplateURL* extension1 = new TemplateURL(test_util_.profile(), data); 531 TemplateURL* extension1 = new TemplateURL(test_util_.profile(), data);
530 model()->Add(extension1); 532 model()->Add(extension1);
531 ASSERT_EQ(extension1, 533 ASSERT_EQ(extension1,
532 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword1"))); 534 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword1")));
533 model()->Remove(extension1);
534 EXPECT_EQ(original1, 535 EXPECT_EQ(original1,
535 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword1"))); 536 model()->GetTemplateURLForKeyword(ASCIIToUTF16("test1")));
536
537 // They should not override non-replaceable keywords.
538 data.SetKeyword(ASCIIToUTF16("keyword2")); 537 data.SetKeyword(ASCIIToUTF16("keyword2"));
539 TemplateURL* extension2 = new TemplateURL(test_util_.profile(), data); 538 TemplateURL* extension2 = new TemplateURL(test_util_.profile(), data);
540 model()->Add(extension2); 539 model()->Add(extension2);
541 ASSERT_EQ(original2, 540 ASSERT_EQ(extension2,
542 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword2"))); 541 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword2")));
543 model()->Remove(original2); 542 EXPECT_EQ(original2,
544 EXPECT_EQ(extension2, 543 model()->GetTemplateURLForKeyword(ASCIIToUTF16("test2")));
545 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword2")));
546 544
547 // They should override extension keywords added earlier. 545 // They should override extension keywords added earlier.
548 data.SetKeyword(ASCIIToUTF16("keyword3")); 546 data.SetKeyword(ASCIIToUTF16("keyword3"));
549 TemplateURL* extension3 = new TemplateURL(test_util_.profile(), data); 547 TemplateURL* extension3 = new TemplateURL(test_util_.profile(), data);
550 model()->Add(extension3); 548 model()->Add(extension3);
551 ASSERT_EQ(extension3, 549 ASSERT_EQ(extension3,
552 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3"))); 550 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3")));
553 model()->Remove(extension3);
554 EXPECT_EQ(original3, 551 EXPECT_EQ(original3,
555 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3"))); 552 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3_")));
556 } 553 }
557 554
558 TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) { 555 TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) {
559 test_util_.VerifyLoad(); 556 test_util_.VerifyLoad();
560 557
561 // Similar to the AddSameKeyword test, but with an extension keyword masking a 558 // Similar to the AddSameKeyword test, but with an extension keyword masking a
562 // replaceable TemplateURL. We should still do correct conflict resolution 559 // replaceable TemplateURL. We should still do correct conflict resolution
563 // between the non-template URLs. 560 // between the non-template URLs.
564 AddKeywordWithDate(
565 "replaceable", "keyword", "http://test1", std::string(), std::string(),
566 std::string(), true, "UTF-8", Time(), Time());
567 TemplateURL* extension = AddKeywordWithDate( 561 TemplateURL* extension = AddKeywordWithDate(
568 "extension", "keyword", 562 "extension", "keyword",
569 std::string(extensions::kExtensionScheme) + "://test2", std::string(), 563 std::string(extensions::kExtensionScheme) + "://test2", std::string(),
570 std::string(), std::string(), false, "UTF-8", Time(), Time()); 564 std::string(), std::string(), false, "UTF-8", Time(), Time());
565 // Adding a keyword that matches the extension should cause the extension
566 // to uniquify.
567 AddKeywordWithDate(
568 "replaceable", "keyword", "http://test1", std::string(), std::string(),
569 std::string(), true, "UTF-8", Time(), Time());
571 570
572 // Adding another replaceable keyword should remove the existing one, but 571 // Adding another replaceable keyword should remove the existing one, but
573 // leave the extension as the associated URL for this keyword. 572 // leave the extension as is.
574 TemplateURLData data; 573 TemplateURLData data;
575 data.short_name = ASCIIToUTF16("name1"); 574 data.short_name = ASCIIToUTF16("name1");
576 data.SetKeyword(ASCIIToUTF16("keyword")); 575 data.SetKeyword(ASCIIToUTF16("keyword"));
577 data.SetURL("http://test3"); 576 data.SetURL("http://test3");
578 data.safe_for_autoreplace = true; 577 data.safe_for_autoreplace = true;
579 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data); 578 TemplateURL* t_url = new TemplateURL(test_util_.profile(), data);
580 model()->Add(t_url); 579 model()->Add(t_url);
581 EXPECT_EQ(extension, 580 EXPECT_EQ(extension,
582 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 581 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword_")));
583 EXPECT_TRUE(model()->GetTemplateURLForHost("test1") == NULL); 582 EXPECT_TRUE(model()->GetTemplateURLForHost("test1") == NULL);
584 EXPECT_EQ(t_url, model()->GetTemplateURLForHost("test3")); 583 EXPECT_EQ(t_url, model()->GetTemplateURLForHost("test3"));
585 584
586 // Adding a nonreplaceable keyword should remove the existing replaceable 585 // Adding a nonreplaceable keyword should remove the existing replaceable
587 // keyword and replace the extension as the associated URL for this keyword, 586 // keyword.
588 // but not evict the extension from the service entirely.
589 data.short_name = ASCIIToUTF16("name2"); 587 data.short_name = ASCIIToUTF16("name2");
590 data.SetURL("http://test4"); 588 data.SetURL("http://test4");
591 data.safe_for_autoreplace = false; 589 data.safe_for_autoreplace = false;
592 TemplateURL* t_url2 = new TemplateURL(test_util_.profile(), data); 590 TemplateURL* t_url2 = new TemplateURL(test_util_.profile(), data);
593 model()->Add(t_url2); 591 model()->Add(t_url2);
594 EXPECT_EQ(t_url2, 592 EXPECT_EQ(t_url2,
595 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 593 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
596 EXPECT_TRUE(model()->GetTemplateURLForHost("test3") == NULL); 594 EXPECT_TRUE(model()->GetTemplateURLForHost("test3") == NULL);
597 // Note that extensions don't use host-based keywords, so we can't check that 595 EXPECT_EQ(extension,
598 // the extension is still in the model using GetTemplateURLForHost(); and we 596 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword_")));
599 // have to create a full-fledged Extension to use
600 // GetTemplateURLForExtension(), which is annoying, so just grab all the URLs
601 // from the model and search for |extension| within them.
602 TemplateURLService::TemplateURLVector template_urls(
603 model()->GetTemplateURLs());
604 EXPECT_FALSE(std::find(template_urls.begin(), template_urls.end(),
605 extension) == template_urls.end());
606 } 597 }
607 598
608 TEST_F(TemplateURLServiceTest, GenerateKeyword) { 599 TEST_F(TemplateURLServiceTest, GenerateKeyword) {
609 ASSERT_EQ(ASCIIToUTF16("foo"), 600 ASSERT_EQ(ASCIIToUTF16("foo"),
610 TemplateURLService::GenerateKeyword(GURL("http://foo"))); 601 TemplateURLService::GenerateKeyword(GURL("http://foo")));
611 // www. should be stripped. 602 // www. should be stripped.
612 ASSERT_EQ(ASCIIToUTF16("foo"), 603 ASSERT_EQ(ASCIIToUTF16("foo"),
613 TemplateURLService::GenerateKeyword(GURL("http://www.foo"))); 604 TemplateURLService::GenerateKeyword(GURL("http://www.foo")));
614 // Make sure we don't get a trailing '/'. 605 // Make sure we don't get a trailing '/'.
615 ASSERT_EQ(ASCIIToUTF16("blah"), 606 ASSERT_EQ(ASCIIToUTF16("blah"),
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 931
941 // Non-extension URLs should go away. Default search engine is Google again. 932 // Non-extension URLs should go away. Default search engine is Google again.
942 model()->ResetNonExtensionURLs(); 933 model()->ResetNonExtensionURLs();
943 default_provider = model()->GetDefaultSearchProvider(); 934 default_provider = model()->GetDefaultSearchProvider();
944 ASSERT_TRUE(default_provider); 935 ASSERT_TRUE(default_provider);
945 EXPECT_EQ(SEARCH_ENGINE_GOOGLE, 936 EXPECT_EQ(SEARCH_ENGINE_GOOGLE,
946 TemplateURLPrepopulateData::GetEngineType(default_provider->url())); 937 TemplateURLPrepopulateData::GetEngineType(default_provider->url()));
947 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext_keyword"))); 938 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext_keyword")));
948 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 939 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
949 940
950 // Reload URLs. Result should be the same except that extension keywords 941 // Reload URLs. Result should be the same, as extension keywords are now
951 // aren't persisted. 942 // persisted.
952 test_util_.ResetModel(true); 943 test_util_.ResetModel(true);
953 default_provider = model()->GetDefaultSearchProvider(); 944 default_provider = model()->GetDefaultSearchProvider();
954 ASSERT_TRUE(default_provider); 945 ASSERT_TRUE(default_provider);
955 EXPECT_EQ(SEARCH_ENGINE_GOOGLE, 946 EXPECT_EQ(SEARCH_ENGINE_GOOGLE,
956 TemplateURLPrepopulateData::GetEngineType(default_provider->url())); 947 TemplateURLPrepopulateData::GetEngineType(default_provider->url()));
957 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext_keyword"))); 948 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext_keyword")));
958 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); 949 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
959 } 950 }
960 951
961 TEST_F(TemplateURLServiceTest, ResetURLsWithManagedDefault) { 952 TEST_F(TemplateURLServiceTest, ResetURLsWithManagedDefault) {
962 // Set a managed preference that establishes a default search provider. 953 // Set a managed preference that establishes a default search provider.
963 const char kName[] = "test1"; 954 const char kName[] = "test1";
964 const char kKeyword[] = "test.com"; 955 const char kKeyword[] = "test.com";
965 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; 956 const char kSearchURL[] = "http://test.com/search?t={searchTerms}";
966 const char kIconURL[] = "http://test.com/icon.jpg"; 957 const char kIconURL[] = "http://test.com/icon.jpg";
967 const char kEncodings[] = "UTF-16;UTF-32"; 958 const char kEncodings[] = "UTF-16;UTF-32";
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 EXPECT_EQ(8U, loaded_url->input_encodings().size()); 1566 EXPECT_EQ(8U, loaded_url->input_encodings().size());
1576 1567
1577 // Reload the model to verify it was actually saved to the database and the 1568 // Reload the model to verify it was actually saved to the database and the
1578 // duplicate encodings were removed. 1569 // duplicate encodings were removed.
1579 test_util_.ResetModel(true); 1570 test_util_.ResetModel(true);
1580 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1571 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1581 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 1572 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
1582 ASSERT_FALSE(loaded_url == NULL); 1573 ASSERT_FALSE(loaded_url == NULL);
1583 EXPECT_EQ(4U, loaded_url->input_encodings().size()); 1574 EXPECT_EQ(4U, loaded_url->input_encodings().size());
1584 } 1575 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698