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..0be22bc8a57730c5ae421fa844503681a4f823cf 100644 |
--- a/components/search_engines/template_url_service.cc |
+++ b/components/search_engines/template_url_service.cc |
@@ -678,6 +678,7 @@ void TemplateURLService::RepairPrepopulatedSearchEngines() { |
base::AutoReset<DefaultSearchChangeOrigin> change_origin( |
&dsp_change_origin_, DSP_CHANGE_PROFILE_RESET); |
+ DefaultSearchManager::Source old_source = default_search_provider_source_; |
default_search_manager_.ClearUserSelectedDefaultSearchEngine(); |
if (!default_search_provider_) { |
@@ -692,7 +693,16 @@ void TemplateURLService::RepairPrepopulatedSearchEngines() { |
// ApplyDefaultSearchChange will notify observers once it is done. |
ApplyDefaultSearchChange(new_dse, source); |
} else { |
- NotifyObservers(); |
+ if (old_source == DefaultSearchManager::FROM_USER && |
+ default_search_provider_source_ == |
+ DefaultSearchManager::FROM_FALLBACK) { |
+ // Set fallback engine as user selected, because repair is considered user |
+ // action and new engine is expected to sync to other user devices. |
+ default_search_manager_.SetUserSelectedDefaultSearchEngine( |
+ default_search_provider_->data()); |
+ } else { |
+ NotifyObservers(); |
+ } |
} |
} |
@@ -1937,6 +1947,9 @@ bool TemplateURLService::ApplyDefaultSearchChangeNoMetrics( |
source == DefaultSearchManager::FROM_POLICY ? data : nullptr); |
} |
+ // Set new DSE source as current before calling UpdateNoNotify below which |
+ // is checking it to update user selected engine. |
+ default_search_provider_source_ = source; |
if (!data) { |
default_search_provider_ = nullptr; |
} else if (source == DefaultSearchManager::FROM_EXTENSION) { |
@@ -1987,11 +2000,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(); |