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..07abd01787e417ddfe0c61ae831ce0db68cf4db4 100644 |
--- a/chrome/browser/search_engines/template_url_service_unittest.cc |
+++ b/chrome/browser/search_engines/template_url_service_unittest.cc |
@@ -28,10 +28,13 @@ |
#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_pref_names.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" |
#include "components/search_engines/template_url_prepopulate_data.h" |
+#include "components/sync_preferences/testing_pref_service_syncable.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -186,6 +189,9 @@ class TemplateURLServiceTest : public testing::Test { |
bool safe_for_autoreplace, |
int prepopulate_id); |
+ // Set custom search engine as default fallback through overrides pref. |
+ void SetOverriddenEngines(); |
+ |
// Helper methods to make calling TemplateURLServiceTestUtil methods less |
// visually noisy in the test code. |
void VerifyObserverCount(int expected_changed_count); |
@@ -292,6 +298,29 @@ std::unique_ptr<TemplateURL> TemplateURLServiceTest::CreatePreloadedTemplateURL( |
return base::MakeUnique<TemplateURL>(data); |
} |
+void TemplateURLServiceTest::SetOverriddenEngines() { |
+ // Set custom search engine as default fallback through overrides. |
+ auto entry = base::MakeUnique<base::DictionaryValue>(); |
+ entry->SetString("name", "override_name"); |
+ entry->SetString("keyword", "override_keyword"); |
+ entry->SetString("search_url", "http://override.com/s?q={searchTerms}"); |
+ entry->SetString("favicon_url", "http://override.com/favicon.ico"); |
+ entry->SetString("encoding", "UTF-8"); |
+ entry->SetInteger("id", 1001); |
+ entry->SetString("suggest_url", |
+ "http://override.com/suggest?q={searchTerms}"); |
+ entry->SetString("instant_url", |
+ "http://override.com/instant?q={searchTerms}"); |
+ |
+ auto overrides_list = base::MakeUnique<base::ListValue>(); |
+ overrides_list->Append(std::move(entry)); |
+ |
+ auto prefs = test_util()->profile()->GetTestingPrefService(); |
+ prefs->SetUserPref(prefs::kSearchProviderOverridesVersion, |
+ new base::FundamentalValue(1)); |
+ prefs->SetUserPref(prefs::kSearchProviderOverrides, overrides_list.release()); |
+} |
+ |
void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) { |
EXPECT_EQ(expected_changed_count, test_util_->GetObserverCount()); |
test_util_->ResetObserverCount(); |
@@ -893,6 +922,154 @@ TEST_F(TemplateURLServiceTest, RepairSearchEnginesWithManagedDefault) { |
ExpectSimilar(expected_managed_default.get(), actual_managed_default); |
} |
+// Checks that RepairPrepopulatedEngines correctly updates sync guid for default |
+// search. Repair is considered a user action and new DSE must be synced to |
+// other devices as well. Otherwise previous user selected engine will arrive on |
+// next sync attempt. |
+TEST_F(TemplateURLServiceTest, RepairPrepopulatedEnginesUpdatesSyncGuid) { |
+ test_util()->VerifyLoad(); |
+ |
+ // The synced DSE GUID should be empty until the user selects something or |
+ // there is sync activity. |
+ EXPECT_TRUE(test_util() |
+ ->profile() |
+ ->GetTestingPrefService() |
+ ->GetString(prefs::kSyncedDefaultSearchProviderGUID) |
+ .empty()); |
+ |
+ TemplateURL* initial_dse = model()->GetDefaultSearchProvider(); |
+ ASSERT_TRUE(initial_dse); |
+ |
+ // Add user provided default search engine. |
+ TemplateURL* user_dse = AddKeywordWithDate( |
+ "user_dse", "user_dse.com", "http://www.user_dse.com/s?q={searchTerms}", |
+ std::string(), std::string(), std::string(), true, "UTF-8", Time(), |
+ Time(), Time()); |
+ model()->SetUserSelectedDefaultSearchProvider(user_dse); |
+ EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
+ // Check that user dse is different from initial. |
+ EXPECT_NE(initial_dse, user_dse); |
+ |
+ // Check that user DSE guid is stored in kSyncedDefaultSearchProviderGUID. |
+ EXPECT_EQ(user_dse->sync_guid(), |
+ test_util()->profile()->GetTestingPrefService()->GetString( |
+ prefs::kSyncedDefaultSearchProviderGUID)); |
+ |
+ model()->RepairPrepopulatedSearchEngines(); |
+ |
+ // Check that initial search engine is returned as default after repair. |
+ ASSERT_EQ(initial_dse, model()->GetDefaultSearchProvider()); |
+ // Check that initial_dse guid is stored in kSyncedDefaultSearchProviderGUID. |
+ const std::string dse_guid = |
+ test_util()->profile()->GetTestingPrefService()->GetString( |
+ prefs::kSyncedDefaultSearchProviderGUID); |
+ EXPECT_EQ(initial_dse->sync_guid(), dse_guid); |
+ EXPECT_EQ(initial_dse->keyword(), |
+ model()->GetTemplateURLForGUID(dse_guid)->keyword()); |
+} |
+ |
+// Checks that RepairPrepopulatedEngines correctly updates sync guid for default |
+// search when search engines are overridden using pref. |
+TEST_F(TemplateURLServiceTest, |
+ RepairPrepopulatedEnginesWithOverridesUpdatesSyncGuid) { |
+ SetOverriddenEngines(); |
+ test_util()->VerifyLoad(); |
+ |
+ // The synced DSE GUID should be empty until the user selects something or |
+ // there is sync activity. |
+ EXPECT_TRUE(test_util() |
+ ->profile() |
+ ->GetTestingPrefService() |
+ ->GetString(prefs::kSyncedDefaultSearchProviderGUID) |
+ .empty()); |
+ |
+ TemplateURL* overridden_engine = |
+ model()->GetTemplateURLForKeyword(ASCIIToUTF16("override_keyword")); |
+ ASSERT_TRUE(overridden_engine); |
+ |
+ EXPECT_EQ(overridden_engine, model()->GetDefaultSearchProvider()); |
+ |
+ // Add user provided default search engine. |
+ TemplateURL* user_dse = AddKeywordWithDate( |
+ "user_dse", "user_dse.com", "http://www.user_dse.com/s?q={searchTerms}", |
+ std::string(), std::string(), std::string(), true, "UTF-8", Time(), |
+ Time(), Time()); |
+ model()->SetUserSelectedDefaultSearchProvider(user_dse); |
+ EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
+ |
+ // Check that user DSE guid is stored in kSyncedDefaultSearchProviderGUID. |
+ EXPECT_EQ(user_dse->sync_guid(), |
+ test_util()->profile()->GetTestingPrefService()->GetString( |
+ prefs::kSyncedDefaultSearchProviderGUID)); |
+ |
+ model()->RepairPrepopulatedSearchEngines(); |
+ |
+ // Check that overridden engine is returned as default after repair. |
+ ASSERT_EQ(overridden_engine, model()->GetDefaultSearchProvider()); |
+ // Check that overridden_engine guid is stored in |
+ // kSyncedDefaultSearchProviderGUID. |
+ const std::string dse_guid = |
+ test_util()->profile()->GetTestingPrefService()->GetString( |
+ prefs::kSyncedDefaultSearchProviderGUID); |
+ EXPECT_EQ(overridden_engine->sync_guid(), dse_guid); |
+ EXPECT_EQ(overridden_engine->keyword(), |
+ model()->GetTemplateURLForGUID(dse_guid)->keyword()); |
+} |
+ |
+// Checks that RepairPrepopulatedEngines correctly updates sync guid for default |
+// search when search engines is overridden by extension. |
+TEST_F(TemplateURLServiceTest, |
+ RepairPrepopulatedEnginesWithExtensionUpdatesSyncGuid) { |
+ test_util()->VerifyLoad(); |
+ |
+ // The synced DSE GUID should be empty until the user selects something or |
+ // there is sync activity. |
+ EXPECT_TRUE(test_util() |
+ ->profile() |
+ ->GetTestingPrefService() |
+ ->GetString(prefs::kSyncedDefaultSearchProviderGUID) |
+ .empty()); |
+ |
+ // Get initial DSE to check its guid later. |
+ TemplateURL* initial_dse = model()->GetDefaultSearchProvider(); |
+ ASSERT_TRUE(initial_dse); |
+ |
+ // Add user provided default search engine. |
+ TemplateURL* user_dse = model()->Add( |
+ base::MakeUnique<TemplateURL>(*GenerateDummyTemplateURLData("user_dse"))); |
+ model()->SetUserSelectedDefaultSearchProvider(user_dse); |
+ EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
+ |
+ // Check that user DSE guid is stored in kSyncedDefaultSearchProviderGUID. |
+ EXPECT_EQ(user_dse->sync_guid(), |
+ test_util()->profile()->GetTestingPrefService()->GetString( |
+ prefs::kSyncedDefaultSearchProviderGUID)); |
+ |
+ // Add extension controlled default search engine. |
+ std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
+ new TemplateURL::AssociatedExtensionInfo("extension")); |
+ extension_info->wants_to_be_default_engine = true; |
+ TemplateURL* extension_dse = model()->AddExtensionControlledTURL( |
+ base::MakeUnique<TemplateURL>( |
+ *GenerateDummyTemplateURLData("extension_dse"), |
+ TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION), |
+ std::move(extension_info)); |
+ EXPECT_EQ(extension_dse, model()->GetDefaultSearchProvider()); |
+ // Check that user DSE guid is still stored in |
+ // kSyncedDefaultSearchProviderGUID. |
+ EXPECT_EQ(user_dse->sync_guid(), |
+ test_util()->profile()->GetTestingPrefService()->GetString( |
+ prefs::kSyncedDefaultSearchProviderGUID)); |
+ |
+ model()->RepairPrepopulatedSearchEngines(); |
+ // Check that extension engine is still default but sync guid is updated to |
+ // initial dse guid. |
+ EXPECT_EQ(extension_dse, model()->GetDefaultSearchProvider()); |
+ EXPECT_EQ(initial_dse->sync_guid(), |
+ test_util()->profile()->GetTestingPrefService()->GetString( |
+ prefs::kSyncedDefaultSearchProviderGUID)); |
+} |
+ |
TEST_F(TemplateURLServiceTest, UpdateKeywordSearchTermsForURL) { |
struct TestData { |
const std::string url; |