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

Unified Diff: chrome/browser/search_engines/template_url_service_unittest.cc

Issue 2682453002: Changed keywords conflicts resolution for extensions search engines. (Closed)
Patch Set: Fixed auto variable type must not deduce to a raw pointer type Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/search_engines/template_url_service_unittest.cc
diff --git a/chrome/browser/search_engines/template_url_service_unittest.cc b/chrome/browser/search_engines/template_url_service_unittest.cc
index 07abd01787e417ddfe0c61ae831ce0db68cf4db4..b4292898dab78cfc548360987715695c36780273 100644
--- a/chrome/browser/search_engines/template_url_service_unittest.cc
+++ b/chrome/browser/search_engines/template_url_service_unittest.cc
@@ -176,6 +176,12 @@ class TemplateURLServiceTest : public testing::Test {
Time last_modified,
Time last_visited);
+ // Add extension controlled search engine with |keyword| to model.
+ TemplateURL* AddExtensionSearchEngine(const std::string& keyword,
+ const std::string& extension_name,
+ bool wants_to_be_default_engine,
+ const base::Time& install_time);
+
// Verifies the two TemplateURLs are equal.
void AssertEquals(const TemplateURL& expected, const TemplateURL& actual);
@@ -253,6 +259,26 @@ TemplateURL* TemplateURLServiceTest::AddKeywordWithDate(
last_visited);
}
+TemplateURL* TemplateURLServiceTest::AddExtensionSearchEngine(
+ const std::string& keyword,
+ const std::string& extension_name,
+ bool wants_to_be_default_engine,
+ const base::Time& install_time) {
+ std::unique_ptr<TemplateURLData> turl_data =
+ GenerateDummyTemplateURLData(keyword);
+ turl_data->safe_for_autoreplace = false;
+
+ auto ext_dse = base::MakeUnique<TemplateURL>(
+ *turl_data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
+ auto extension_info =
+ base::MakeUnique<TemplateURL::AssociatedExtensionInfo>(extension_name);
+ extension_info->wants_to_be_default_engine = wants_to_be_default_engine;
+ extension_info->install_time = install_time;
+
+ return model()->AddExtensionControlledTURL(std::move(ext_dse),
+ std::move(extension_info));
+}
+
void TemplateURLServiceTest::AssertEquals(const TemplateURL& expected,
const TemplateURL& actual) {
ASSERT_EQ(expected.short_name(), actual.short_name());
@@ -464,39 +490,42 @@ TEST_F(TemplateURLServiceTest, AddSameKeyword) {
EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword());
}
-TEST_F(TemplateURLServiceTest, AddExtensionKeyword) {
+TEST_F(TemplateURLServiceTest, AddOmniboxExtensionKeyword) {
test_util()->VerifyLoad();
AddKeywordWithDate("replaceable", "keyword1", "http://test1", std::string(),
std::string(), std::string(), true, "UTF-8", Time(),
Time(), Time());
- TemplateURL* original2 = AddKeywordWithDate(
- "nonreplaceable", "keyword2", "http://test2", std::string(),
- std::string(), std::string(), false, "UTF-8", Time(), Time(), Time());
+ AddKeywordWithDate("nonreplaceable", "keyword2", "http://test2",
+ std::string(), std::string(), std::string(), false,
+ "UTF-8", Time(), Time(), Time());
model()->RegisterOmniboxKeyword("test3", "extension", "keyword3",
- "http://test3");
+ "http://test3", Time::FromDoubleT(1));
TemplateURL* original3 =
model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3"));
ASSERT_TRUE(original3);
// Extension keywords should override replaceable keywords.
- model()->RegisterOmniboxKeyword("id1", "test", "keyword1", "http://test4");
+ model()->RegisterOmniboxKeyword("id1", "test", "keyword1", "http://test4",
+ Time());
TemplateURL* extension1 = model()->FindTemplateURLForExtension(
"id1", TemplateURL::OMNIBOX_API_EXTENSION);
EXPECT_TRUE(extension1);
EXPECT_EQ(extension1,
model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword1")));
- // They should not override non-replaceable keywords.
- model()->RegisterOmniboxKeyword("id2", "test", "keyword2", "http://test5");
+ // They should also override non-replaceable keywords.
+ model()->RegisterOmniboxKeyword("id2", "test", "keyword2", "http://test5",
+ Time());
TemplateURL* extension2 = model()->FindTemplateURLForExtension(
"id2", TemplateURL::OMNIBOX_API_EXTENSION);
ASSERT_TRUE(extension2);
- EXPECT_EQ(original2,
+ EXPECT_EQ(extension2,
model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword2")));
// They should override extension keywords added earlier.
- model()->RegisterOmniboxKeyword("id3", "test", "keyword3", "http://test6");
+ model()->RegisterOmniboxKeyword("id3", "test", "keyword3", "http://test6",
+ Time::FromDoubleT(4));
TemplateURL* extension3 = model()->FindTemplateURLForExtension(
"id3", TemplateURL::OMNIBOX_API_EXTENSION);
ASSERT_TRUE(extension3);
@@ -504,14 +533,14 @@ TEST_F(TemplateURLServiceTest, AddExtensionKeyword) {
model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3")));
}
-TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) {
+TEST_F(TemplateURLServiceTest, AddSameKeywordWithOmniboxExtensionPresent) {
test_util()->VerifyLoad();
// Similar to the AddSameKeyword test, but with an extension keyword masking a
// replaceable TemplateURL. We should still do correct conflict resolution
// between the non-template URLs.
model()->RegisterOmniboxKeyword("test2", "extension", "keyword",
- "http://test2");
+ "http://test2", Time());
TemplateURL* extension =
model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
ASSERT_TRUE(extension);
@@ -531,16 +560,22 @@ TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) {
EXPECT_EQ(extension,
model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
EXPECT_EQ(t_url, model()->GetTemplateURLForHost("test3"));
+ // Check that previous replaceable engine with keyword is removed.
+ EXPECT_FALSE(model()->GetTemplateURLForHost("test1"));
// Adding a nonreplaceable keyword should remove the existing replaceable
- // keyword and replace the extension as the associated URL for this keyword,
- // but not evict the extension from the service entirely.
+ // keyword, yet extension must still be set as the associated URL for this
+ // keyword.
data.SetShortName(ASCIIToUTF16("name2"));
data.SetURL("http://test4");
data.safe_for_autoreplace = false;
- TemplateURL* t_url2 = model()->Add(base::MakeUnique<TemplateURL>(data));
- EXPECT_EQ(t_url2,
+ TemplateURL* nonreplaceable =
+ model()->Add(base::MakeUnique<TemplateURL>(data));
+ EXPECT_EQ(extension,
model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
+ EXPECT_EQ(nonreplaceable, model()->GetTemplateURLForHost("test4"));
+ // Check that previous replaceable engine with keyword is removed.
+ EXPECT_FALSE(model()->GetTemplateURLForHost("test3"));
}
TEST_F(TemplateURLServiceTest, NotPersistOmniboxExtensionKeyword) {
@@ -548,7 +583,7 @@ TEST_F(TemplateURLServiceTest, NotPersistOmniboxExtensionKeyword) {
// Register an omnibox keyword.
model()->RegisterOmniboxKeyword("test", "extension", "keyword",
- "chrome-extension://test");
+ "chrome-extension://test", Time());
ASSERT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
// Reload the data.
@@ -879,7 +914,7 @@ TEST_F(TemplateURLServiceTest, RepairPrepopulatedSearchEngines) {
// Register an extension with bing keyword.
model()->RegisterOmniboxKeyword("abcdefg", "extension_name", "bing.com",
- "http://abcdefg");
+ "http://abcdefg", Time());
EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("bing.com")));
model()->RepairPrepopulatedSearchEngines();
@@ -892,7 +927,8 @@ TEST_F(TemplateURLServiceTest, RepairPrepopulatedSearchEngines) {
google->GenerateSearchURL(model()->search_terms_data()).host());
// Bing was repaired.
- bing = model()->GetTemplateURLForKeyword(ASCIIToUTF16("bing.com"));
+ bing =
+ model()->FindNonExtensionTemplateURLForKeyword(ASCIIToUTF16("bing.com"));
ASSERT_TRUE(bing);
EXPECT_EQ(TemplateURL::NORMAL, bing->type());
@@ -1658,6 +1694,116 @@ TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) {
EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext2")));
}
+// Checks that correct priority is applied when resolving conflicts between the
+// omnibox extension, search engine extension and user search engines with same
+// keyword.
+TEST_F(TemplateURLServiceTest, CheckEnginesWithSameKeywords) {
+ test_util()->VerifyLoad();
+ // TemplateURLData used for user engines.
+ std::unique_ptr<TemplateURLData> turl_data =
+ GenerateDummyTemplateURLData("common_keyword");
+ turl_data->safe_for_autoreplace = false;
+
+ // Add non replaceable user engine.
+ const TemplateURL* user1 =
+ model()->Add(base::MakeUnique<TemplateURL>(*turl_data));
+
+ // Add default extension engine with same keyword as user engine.
+ const TemplateURL* extension = AddExtensionSearchEngine(
+ "common_keyword", "extension_id", true, Time::FromDoubleT(2));
+
+ // Add another non replaceable user engine with same keyword as extension.
+ const TemplateURL* user2 =
+ model()->Add(base::MakeUnique<TemplateURL>(*turl_data));
+
+ // Check extension DSE is set as default and its keyword is not changed.
+ const TemplateURL* current_dse = model()->GetDefaultSearchProvider();
+ EXPECT_EQ(extension, current_dse);
+ EXPECT_EQ(ASCIIToUTF16("common_keyword"), current_dse->keyword());
+
+ // Register omnibox keyword with same keyword as extension.
+ // Use |install_time| value less than in AddExtensionSearchEngine call above
+ // to check that omnibox api keyword is ranked higher even if installed
+ // earlier.
+ model()->RegisterOmniboxKeyword("omnibox_api_extension_id", "extension_name",
+ "common_keyword", "http://test3",
+ Time::FromDoubleT(1));
+ TemplateURL* omnibox_api = model()->FindTemplateURLForExtension(
+ "omnibox_api_extension_id", TemplateURL::OMNIBOX_API_EXTENSION);
+
+ // Expect that first non replaceable user engine keyword is changed because of
+ // conflict. Second user engine will keep its keyword.
+ EXPECT_NE(ASCIIToUTF16("common_keyword"), user1->keyword());
+ EXPECT_EQ(ASCIIToUTF16("common_keyword"), user2->keyword());
+
+ // Check that extensions kept their keywords.
+ EXPECT_EQ(ASCIIToUTF16("common_keyword"), extension->keyword());
+ EXPECT_EQ(ASCIIToUTF16("common_keyword"), omnibox_api->keyword());
+
+ // Omnibox api is accessible by keyword as most relevant.
+ EXPECT_EQ(omnibox_api,
+ model()->GetTemplateURLForKeyword(ASCIIToUTF16("common_keyword")));
+ // Extension controlled search engine is still set as default and can be found
+ // in TemplateURLService.
+ EXPECT_EQ(extension, model()->GetDefaultSearchProvider());
+ EXPECT_EQ(extension,
+ model()->FindTemplateURLForExtension(
+ "extension_id", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION));
+
+ // Test removing engines.
+ // Remove omnibox api extension.
+ model()->RemoveExtensionControlledTURL("omnibox_api_extension_id",
+ TemplateURL::OMNIBOX_API_EXTENSION);
+ // Expect that keyword is now corresponds to extension search engine.
+ EXPECT_EQ(extension,
+ model()->GetTemplateURLForKeyword(ASCIIToUTF16("common_keyword")));
+ // Remove extension engine.
+ model()->RemoveExtensionControlledTURL(
+ "extension_id", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
+ EXPECT_NE(extension, model()->GetDefaultSearchProvider());
+ // Now latest user engine is returned for keyword.
+ EXPECT_EQ(user2,
+ model()->GetTemplateURLForKeyword(ASCIIToUTF16("common_keyword")));
+}
+
+// Check that two extensions with the same engine are handled correctly.
+TEST_F(TemplateURLServiceTest, ExtensionsWithSameKeywords) {
+ test_util()->VerifyLoad();
+
+ // Add non default extension engine.
+ const TemplateURL* extension1 = AddExtensionSearchEngine(
+ "common_keyword", "extension_id1", false, Time::FromDoubleT(1));
+
+ // Check that GetTemplateURLForKeyword returns last installed extension.
+ EXPECT_EQ(extension1,
+ model()->GetTemplateURLForKeyword(ASCIIToUTF16("common_keyword")));
+
+ // Add default extension engine with the same keyword.
+ const TemplateURL* extension2 = AddExtensionSearchEngine(
+ "common_keyword", "extension_id2", true, Time::FromDoubleT(2));
+
+ // Check that GetTemplateURLForKeyword now returns extension2 because it was
+ // installed later.
+ EXPECT_EQ(extension2,
+ model()->GetTemplateURLForKeyword(ASCIIToUTF16("common_keyword")));
+
+ // Add another non default extension with same keyword. This action must not
+ // change any keyword due to conflict.
+ const TemplateURL* extension3 = AddExtensionSearchEngine(
+ "common_keyword", "extension_id3", false, Time::FromDoubleT(3));
+
+ // Check that extension2 is set as default.
+ EXPECT_EQ(extension2, model()->GetDefaultSearchProvider());
+
+ // Check that GetTemplateURLForKeyword returns last installed extension.
+ EXPECT_EQ(extension3,
+ model()->GetTemplateURLForKeyword(ASCIIToUTF16("common_keyword")));
+ // Check that all keywords for extensions are left unchanged.
+ EXPECT_EQ(ASCIIToUTF16("common_keyword"), extension1->keyword());
+ EXPECT_EQ(ASCIIToUTF16("common_keyword"), extension2->keyword());
+ EXPECT_EQ(ASCIIToUTF16("common_keyword"), extension3->keyword());
+}
+
TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) {
// Set a managed preference that establishes a default search provider.
std::unique_ptr<TemplateURLData> managed = CreateTestSearchEngine();

Powered by Google App Engine
This is Rietveld 408576698