Chromium Code Reviews| Index: components/search_engines/template_url_service.cc | 
| diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc | 
| index 0e77d27379f265169564fc3bb4cf7eff964c7a4f..6a71bafa36646f8db2661a740da96feb873f410e 100644 | 
| --- a/components/search_engines/template_url_service.cc | 
| +++ b/components/search_engines/template_url_service.cc | 
| @@ -692,7 +692,27 @@ void TemplateURLService::RepairPrepopulatedSearchEngines() { | 
| // ApplyDefaultSearchChange will notify observers once it is done. | 
| ApplyDefaultSearchChange(new_dse, source); | 
| } else { | 
| - NotifyObservers(); | 
| + // Set fallback engine as user selected, because repair is considered a user | 
| + // action and we are expected to sync new fallback engine to other devices. | 
| + TemplateURLData* fallback_engine_data = | 
| + default_search_manager_.GetFallbackSearchEngine(); | 
| + if (fallback_engine_data) { | 
| + TemplateURL* fallback_engine = | 
| + FindPrepopulatedTemplateURL(fallback_engine_data->prepopulate_id); | 
| + if (fallback_engine) { | 
| + // Write fallback engine guid to sync pref. This will also set fallback | 
| + // engine as new user selected in | 
| + // OnSyncedDefaultSearchProviderGUIDChanged. | 
| + prefs_->SetString(prefs::kSyncedDefaultSearchProviderGUID, | 
| + fallback_engine->sync_guid()); | 
| 
 
vasilii
2017/02/13 14:37:54
Shouldn't we set all the user prefs via SetUserSel
 
Peter Kasting
2017/02/13 22:24:57
As the comment notes, that will happen automatical
 
Alexander Yashkin
2017/02/14 12:04:43
Yes, that was my first solution, yet luckily one o
 
Peter Kasting
2017/02/15 02:09:57
This seems worrisome.  Does this mean that if I re
 
Alexander Yashkin
2017/02/15 12:46:10
I think this issue with sync is taken care of - se
 
 | 
| + } else { | 
| + // Fallback engine can not be found by prepopulate_id. Write its data | 
| + // to user pref. | 
| + default_search_manager_.SetUserSelectedDefaultSearchEngine( | 
| + *fallback_engine_data); | 
| + } | 
| + NotifyObservers(); | 
| + } | 
| } | 
| } | 
| @@ -1937,6 +1957,11 @@ bool TemplateURLService::ApplyDefaultSearchChangeNoMetrics( | 
| source == DefaultSearchManager::FROM_POLICY ? data : nullptr); | 
| } | 
| + // |default_search_provider_source_| must be set before calling | 
| + // UpdateNoNotify(), since that function needs to know the source of the | 
| + // update in question. | 
| + default_search_provider_source_ = source; | 
| + | 
| if (!data) { | 
| default_search_provider_ = nullptr; | 
| } else if (source == DefaultSearchManager::FROM_EXTENSION) { | 
| @@ -1987,11 +2012,8 @@ bool TemplateURLService::ApplyDefaultSearchChangeNoMetrics( | 
| prefs_->SetString(prefs::kSyncedDefaultSearchProviderGUID, | 
| default_search_provider_->sync_guid()); | 
| } | 
| - | 
| } | 
| - default_search_provider_source_ = source; | 
| - | 
| bool changed = default_search_provider_ != previous_default_search_engine; | 
| if (changed) | 
| RequestGoogleURLTrackerServerCheckIfNecessary(); |