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 ddc06380b068dc5a15b115a81b7277584f0d54a4..30a4c7262c40ef701c188ee5ab96d61078be4197 100644 |
--- a/chrome/browser/search_engines/template_url_service_unittest.cc |
+++ b/chrome/browser/search_engines/template_url_service_unittest.cc |
@@ -28,6 +28,7 @@ |
#include "chrome/test/base/testing_profile.h" |
#include "components/history/core/browser/history_service.h" |
#include "components/search_engines/keyword_web_data_service.h" |
+#include "components/search_engines/search_engines_test_util.h" |
#include "components/search_engines/search_host_to_urls_map.h" |
#include "components/search_engines/search_terms_data.h" |
#include "components/search_engines/template_url.h" |
@@ -1481,6 +1482,100 @@ TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { |
EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext2"))); |
} |
+// Check that default extension engine and user engines with same keywords are |
+// handled corrected. |
+TEST_F(TemplateURLServiceTest, DefaultExtensionAndUserEnginesWithSameKeywords) { |
+ test_util()->VerifyLoad(); |
+ // TemplateURLData used for all engines. |
+ auto turl_data = GenerateDummyTemplateURLData("extension"); |
+ 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. |
+ auto ext_dse = base::MakeUnique<TemplateURL>( |
+ *turl_data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
+ auto extension_info = |
+ base::MakeUnique<TemplateURL::AssociatedExtensionInfo>("extension_id"); |
+ extension_info->wants_to_be_default_engine = true; |
+ |
+ const TemplateURL* extension = model()->AddExtensionControlledTURL( |
+ std::move(ext_dse), std::move(extension_info)); |
+ |
+ // Add another non replaceable user engine with same keyword as extension. |
+ const TemplateURL* user2 = |
+ model()->Add(base::MakeUnique<TemplateURL>(*turl_data)); |
+ |
+ // Wait for any saves to finish. |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Check extension DSE is set as default and its keyword is not changed. |
+ auto current_dse = model()->GetDefaultSearchProvider(); |
+ EXPECT_EQ(extension, current_dse); |
+ ExpectSimilar(turl_data.get(), ¤t_dse->data()); |
+ |
+ // Expect that both user engine keywords are changed because of conflict |
+ // with extension engine keyword. |
+ EXPECT_NE(turl_data->keyword(), user1->keyword()); |
+ EXPECT_NE(turl_data->keyword(), user2->keyword()); |
+ // Check that user engine keywords are different. |
+ EXPECT_NE(user1->keyword(), user2->keyword()); |
+} |
+ |
+// Check that two extensions with same engine are handled corrected. |
+TEST_F(TemplateURLServiceTest, ExtensionsWithSameKeywords) { |
+ test_util()->VerifyLoad(); |
+ |
+ // TemplateURLData used for all extensions. |
+ auto turl_data = GenerateDummyTemplateURLData("extension"); |
+ turl_data->safe_for_autoreplace = false; |
+ |
+ // Add non default extension engine. |
+ auto ext_dse = base::MakeUnique<TemplateURL>( |
+ *turl_data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
+ auto extension_info = |
+ base::MakeUnique<TemplateURL::AssociatedExtensionInfo>("extension_id1"); |
+ extension_info->wants_to_be_default_engine = false; |
+ |
+ const TemplateURL* extension1 = model()->AddExtensionControlledTURL( |
+ std::move(ext_dse), std::move(extension_info)); |
+ |
+ // Add default extension engine. |
+ ext_dse = base::MakeUnique<TemplateURL>( |
+ *turl_data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
+ extension_info = |
+ base::MakeUnique<TemplateURL::AssociatedExtensionInfo>("extension_id2"); |
+ extension_info->wants_to_be_default_engine = true; |
+ |
+ const TemplateURL* extension2 = model()->AddExtensionControlledTURL( |
+ std::move(ext_dse), std::move(extension_info)); |
+ |
+ // Add another non default extension with same keyword. This action must not |
+ // change default extension keyword due to conflict. |
+ ext_dse = base::MakeUnique<TemplateURL>( |
+ *turl_data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
+ extension_info = |
+ base::MakeUnique<TemplateURL::AssociatedExtensionInfo>("extension_id3"); |
+ extension_info->wants_to_be_default_engine = false; |
+ |
+ const TemplateURL* extension3 = model()->AddExtensionControlledTURL( |
+ std::move(ext_dse), std::move(extension_info)); |
+ // Wait for any saves to finish. |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Check that extension2 is set as default. Its keyword must not be changed. |
+ auto current_dse = model()->GetDefaultSearchProvider(); |
+ EXPECT_EQ(extension2, current_dse); |
+ ExpectSimilar(turl_data.get(), ¤t_dse->data()); |
+ |
+ // Check that non default extensions keywords are updated. |
+ EXPECT_NE(extension1->keyword(), turl_data->keyword()); |
+ EXPECT_NE(extension3->keyword(), turl_data->keyword()); |
+ EXPECT_NE(extension1->keyword(), extension3->keyword()); |
+} |
+ |
TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) { |
// Set a managed preference that establishes a default search provider. |
std::unique_ptr<TemplateURLData> managed = CreateTestSearchEngine(); |