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..bc4d94400e113effc429a4f0c95c2f49df47b39d 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,105 @@ 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("ext2"); |
Peter Kasting
2017/02/07 00:42:45
Nit: "ext2" is pretty random, especially when the
Alexander Yashkin
2017/02/07 08:09:19
Done
|
+ 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>("ext2"); |
+ extension_info->wants_to_be_default_engine = true; |
+ |
+ 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. |
+ EXPECT_TRUE(model()->IsExtensionControlledDefaultSearch()); |
+ auto current_dse = model()->GetDefaultSearchProvider(); |
+ ExpectSimilar(turl_data.get(), ¤t_dse->data()); |
+ EXPECT_EQ(current_dse, |
+ model()->FindTemplateURLForExtension( |
+ "ext2", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION)); |
+ |
+ // 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 handled corrected. |
Peter Kasting
2017/02/07 00:42:45
Nit: handled corrected -> are handled correctly
Alexander Yashkin
2017/02/07 08:09:19
Done, thanks.
|
+TEST_F(TemplateURLServiceTest, ExtensionsWithSameKeywords) { |
+ test_util()->VerifyLoad(); |
+ |
+ // TemplateURLData used for all extension. |
Peter Kasting
2017/02/07 00:42:45
Nit: extension -> extensions
Alexander Yashkin
2017/02/07 08:09:19
Done.
|
+ 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; |
+ |
+ auto extension1 = model()->AddExtensionControlledTURL( |
Peter Kasting
2017/02/07 00:42:44
Nit: This should not use auto; it's a raw pointer
Alexander Yashkin
2017/02/07 08:09:19
Done.
|
+ 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; |
+ |
+ model()->AddExtensionControlledTURL(std::move(ext_dse), |
Peter Kasting
2017/02/07 00:42:45
Nit: Shouldn't this store the result in a temp |ex
Alexander Yashkin
2017/02/07 08:09:20
Done.
|
+ 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; |
+ |
+ auto extension3 = model()->AddExtensionControlledTURL( |
+ std::move(ext_dse), std::move(extension_info)); |
+ // Wait for any saves to finish. |
Peter Kasting
2017/02/07 00:42:45
Nit: Blank line above this
Alexander Yashkin
2017/02/07 08:09:19
Done
|
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Check that extension2 is set as default. Its keyword must not be changed. |
+ auto current_dse = model()->GetDefaultSearchProvider(); |
+ EXPECT_TRUE(model()->IsExtensionControlledDefaultSearch()); |
+ ExpectSimilar(turl_data.get(), ¤t_dse->data()); |
+ EXPECT_EQ(current_dse, |
+ model()->FindTemplateURLForExtension( |
+ "extension_id2", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION)); |
+ |
+ // 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(); |