Chromium Code Reviews| Index: chrome/browser/search_engines/template_url_service_sync_unittest.cc |
| =================================================================== |
| --- chrome/browser/search_engines/template_url_service_sync_unittest.cc (revision 108653) |
| +++ chrome/browser/search_engines/template_url_service_sync_unittest.cc (working copy) |
| @@ -8,8 +8,13 @@ |
| #include "base/utf_string_conversions.h" |
| #include "chrome/browser/search_engines/template_url.h" |
| #include "chrome/browser/search_engines/template_url_service.h" |
| +#include "chrome/browser/search_engines/template_url_service_factory.h" |
| #include "chrome/browser/sync/protocol/search_engine_specifics.pb.h" |
| +#include "chrome/common/chrome_notification_types.h" |
| +#include "chrome/common/pref_names.h" |
| +#include "chrome/test/base/testing_pref_service.h" |
| #include "chrome/test/base/testing_profile.h" |
| +#include "content/public/browser/notification_service.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| using base::Time; |
| @@ -22,7 +27,7 @@ |
| sync_pb::search_engine).sync_guid(); |
| } |
| -// Extract the keyword from a search engine SyncData. |
| +// Extract the URL from a search engine SyncData. |
| std::string GetURL(const SyncData& sync_data) { |
| return sync_data.GetSpecifics().GetExtension( |
| sync_pb::search_engine).url(); |
| @@ -34,6 +39,51 @@ |
| sync_pb::search_engine).keyword(); |
| } |
| +// TODO(stevet): Share these with template_url_service_unittest. |
| +// Set the managed preferences for the default search provider and trigger |
| +// notification. |
| +void SetManagedDefaultSearchPreferences(TemplateURLService* turl_service, |
| + TestingProfile* profile, |
| + bool enabled, |
| + const char* name, |
| + const char* search_url, |
| + const char* suggest_url, |
| + const char* icon_url, |
| + const char* encodings, |
| + const char* keyword) { |
| + TestingPrefService* pref_service = profile->GetTestingPrefService(); |
| + pref_service->SetManagedPref(prefs::kDefaultSearchProviderEnabled, |
|
Nicolas Zea
2011/11/04 23:08:06
Are these prefs always set all-at-once like this?
SteveT
2011/11/07 21:48:56
I believe the policy system allows an admin to set
|
| + Value::CreateBooleanValue(enabled)); |
| + pref_service->SetManagedPref(prefs::kDefaultSearchProviderName, |
| + Value::CreateStringValue(name)); |
| + pref_service->SetManagedPref(prefs::kDefaultSearchProviderSearchURL, |
| + Value::CreateStringValue(search_url)); |
| + pref_service->SetManagedPref(prefs::kDefaultSearchProviderSuggestURL, |
| + Value::CreateStringValue(suggest_url)); |
| + pref_service->SetManagedPref(prefs::kDefaultSearchProviderIconURL, |
| + Value::CreateStringValue(icon_url)); |
| + pref_service->SetManagedPref(prefs::kDefaultSearchProviderEncodings, |
| + Value::CreateStringValue(encodings)); |
| + pref_service->SetManagedPref(prefs::kDefaultSearchProviderKeyword, |
| + Value::CreateStringValue(keyword)); |
| +} |
| + |
| +// Remove all the managed preferences for the default search provider and |
| +// trigger notification. |
| +void RemoveManagedDefaultSearchPreferences(TemplateURLService* turl_service, |
| + TestingProfile* profile) { |
| + TestingPrefService* pref_service = profile->GetTestingPrefService(); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderSearchURL); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderEnabled); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderName); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderSuggestURL); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderIconURL); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderEncodings); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderKeyword); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderID); |
| + pref_service->RemoveManagedPref(prefs::kDefaultSearchProviderPrepopulateID); |
| +} |
| + |
| // Dummy SyncChangeProcessor used to help review what SyncChanges are pushed |
| // back up to Sync. |
| class TestChangeProcessor : public SyncChangeProcessor { |
| @@ -87,9 +137,13 @@ |
| virtual void SetUp() { |
| profile_a_.reset(new TestingProfile); |
| + TemplateURLServiceFactory::GetInstance()->RegisterUserPrefsOnProfile( |
| + profile_a_.get()); |
| model_a_.reset(new TemplateURLService(profile_a_.get())); |
| model_a_->Load(); |
| profile_b_.reset(new TestingProfile); |
| + TemplateURLServiceFactory::GetInstance()->RegisterUserPrefsOnProfile( |
| + profile_b_.get()); |
| model_b_.reset(new TemplateURLService(profile_b_.get())); |
| model_b_->Load(); |
| } |
| @@ -1061,3 +1115,60 @@ |
| ASSERT_TRUE(reupdated_turl); |
| AssertEquals(updated_turl, *reupdated_turl); |
| } |
| + |
| +TEST_F(TemplateURLServiceSyncTest, SyncWithManagedDefaultSearch) { |
| + // First start off with a few entries and make sure we can set an unmanaged |
| + // default search provider. |
| + SyncDataList initial_data = CreateInitialSyncData(); |
| + model()->MergeDataAndStartSyncing( |
| + syncable::SEARCH_ENGINES, |
| + initial_data, |
| + processor()); |
| + model()->SetDefaultSearchProvider(model()->GetTemplateURLForGUID("key2")); |
| + |
| + EXPECT_EQ(3U, model()->GetAllSyncData(syncable::SEARCH_ENGINES).size()); |
| + ASSERT_FALSE(model()->is_default_search_managed()); |
| + ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
| + |
| + // Change the default search provider to a managed one. |
| + const char kName[] = "manageddefault"; |
| + const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}"; |
| + const char kIconURL[] = "http://manageddefault.com/icon.jpg"; |
| + const char kEncodings[] = "UTF-16;UTF-32"; |
| + SetManagedDefaultSearchPreferences(model(), profile_a_.get(), true, kName, |
| + kSearchURL, "", kIconURL, kEncodings, ""); |
| + const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider(); |
| + |
| + EXPECT_TRUE(model()->is_default_search_managed()); |
| + |
| + // Add a new entry from Sync. It should still sync in despite the default |
| + // being managed. |
| + SyncChangeList changes; |
| + changes.push_back(CreateTestSyncChange( |
| + SyncChange::ACTION_ADD, |
| + CreateTestTemplateURL("newkeyword", "http://new.com", "newdefault"))); |
| + model()->ProcessSyncChanges(FROM_HERE, changes); |
| + |
| + EXPECT_EQ(4U, model()->GetAllSyncData(syncable::SEARCH_ENGINES).size()); |
| + |
| + // Change kSyncedDefaultSearchProviderGUID to point to the new entry and |
| + // ensure that the DSP remains managed. |
| + profile_a_->GetTestingPrefService()->SetString( |
| + prefs::kSyncedDefaultSearchProviderGUID, |
| + "newdefault"); |
| + |
| + EXPECT_EQ(dsp_turl, model()->GetDefaultSearchProvider()); |
| + EXPECT_TRUE(model()->is_default_search_managed()); |
| + EXPECT_TRUE(profile_a_->GetTestingPrefService()->GetBoolean( |
| + prefs::kPendingSyncedDefaultSearchProviderChange)); |
| + |
| + // Go unmanaged. Ensure that the DSP changes to the expected pending entry |
| + // from Sync. |
| + const TemplateURL* expected_default = |
| + model()->GetTemplateURLForGUID("newdefault"); |
| + RemoveManagedDefaultSearchPreferences(model(), profile_a_.get()); |
| + |
| + EXPECT_EQ(expected_default, model()->GetDefaultSearchProvider()); |
| + EXPECT_FALSE(profile_a_->GetTestingPrefService()->GetBoolean( |
| + prefs::kPendingSyncedDefaultSearchProviderChange)); |
|
Nicolas Zea
2011/11/04 23:08:06
add a case where the synceddefaultsearchprovidergu
SteveT
2011/11/07 21:48:56
Ah yes, of course :)
Added SyncedDefaultGUIDArriv
|
| +} |