| Index: chrome/browser/search_engines/default_search_pref_migration.cc
|
| diff --git a/chrome/browser/search_engines/default_search_pref_migration.cc b/chrome/browser/search_engines/default_search_pref_migration.cc
|
| index 835254a3c21a1376561e1d1149a363108fb2e63f..7516bfc9c2ad1a2c779ff171f103a157ed27090d 100644
|
| --- a/chrome/browser/search_engines/default_search_pref_migration.cc
|
| +++ b/chrome/browser/search_engines/default_search_pref_migration.cc
|
| @@ -6,57 +6,68 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/bind_helpers.h"
|
| -#include "base/logging.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/prefs/pref_service.h"
|
| #include "chrome/browser/search_engines/default_search_manager.h"
|
| #include "chrome/browser/search_engines/template_url.h"
|
| +#include "chrome/browser/search_engines/template_url_prepopulate_data.h"
|
| #include "chrome/browser/search_engines/template_url_service.h"
|
|
|
| namespace {
|
|
|
| -// Loads the user-selected DSE (if there is one, and it's not masked by policy
|
| -// or an extension) from legacy preferences.
|
| -scoped_ptr<TemplateURLData> LoadDefaultSearchProviderFromPrefs(
|
| - PrefService* pref_service) {
|
| +void MigrateDefaultSearchPref(PrefService* pref_service) {
|
| + DefaultSearchManager default_search_manager(
|
| + pref_service, DefaultSearchManager::ObserverCallback());
|
| +
|
| + if (default_search_manager.GetDefaultSearchEngineSource() ==
|
| + DefaultSearchManager::FROM_USER) {
|
| + return;
|
| + }
|
| +
|
| scoped_ptr<TemplateURLData> legacy_dse_from_prefs;
|
| bool legacy_is_managed = false;
|
| - TemplateURLService::LoadDefaultSearchProviderFromPrefs(
|
| - pref_service, &legacy_dse_from_prefs, &legacy_is_managed);
|
| - return legacy_is_managed ?
|
| - scoped_ptr<TemplateURLData>() : legacy_dse_from_prefs.Pass();
|
| -}
|
| + bool has_legacy_dse_from_prefs =
|
| + TemplateURLService::LoadDefaultSearchProviderFromPrefs(
|
| + pref_service, &legacy_dse_from_prefs, &legacy_is_managed);
|
|
|
| -void MigrateDefaultSearchPref(PrefService* pref_service) {
|
| - DCHECK(pref_service);
|
| -
|
| - scoped_ptr<TemplateURLData> legacy_dse_from_prefs =
|
| - LoadDefaultSearchProviderFromPrefs(pref_service);
|
| - if (!legacy_dse_from_prefs)
|
| + if (!has_legacy_dse_from_prefs) {
|
| + // The DSE is undefined. Nothing to migrate.
|
| return;
|
| -
|
| - DefaultSearchManager default_search_manager(
|
| - pref_service, DefaultSearchManager::ObserverCallback());
|
| - DefaultSearchManager::Source modern_source;
|
| - TemplateURLData* modern_value =
|
| - default_search_manager.GetDefaultSearchEngine(&modern_source);
|
| - if (modern_source == DefaultSearchManager::FROM_FALLBACK) {
|
| - // |modern_value| is the prepopulated default. If it matches the legacy DSE
|
| - // we assume it is not a user-selected value.
|
| - if (!modern_value ||
|
| - legacy_dse_from_prefs->prepopulate_id != modern_value->prepopulate_id) {
|
| - // This looks like a user-selected value, so let's migrate it.
|
| - // TODO(erikwright): Remove this migration logic when this stat approaches
|
| - // zero.
|
| - UMA_HISTOGRAM_BOOLEAN("Search.MigratedPrefToDictionaryValue", true);
|
| - default_search_manager.SetUserSelectedDefaultSearchEngine(
|
| - *legacy_dse_from_prefs);
|
| - }
|
| + }
|
| + if (!legacy_dse_from_prefs) {
|
| + // The DSE is defined as NULL. This can only really be done via policy.
|
| + // Policy-defined values will be automatically projected into the new
|
| + // format. Even if the user did somehow set this manually we do not have a
|
| + // way to migrate it.
|
| + return;
|
| + }
|
| + if (legacy_is_managed) {
|
| + // The DSE is policy-managed, not user-selected. It will automatically be
|
| + // projected into the new location.
|
| + return;
|
| }
|
|
|
| + // If the pre-populated DSE matches the DSE from prefs we assume it is not a
|
| + // user-selected value.
|
| + scoped_ptr<TemplateURLData> prepopulated_dse(
|
| + TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service));
|
| + if (prepopulated_dse &&
|
| + legacy_dse_from_prefs->prepopulate_id ==
|
| + prepopulated_dse->prepopulate_id) {
|
| + return;
|
| + }
|
| +
|
| + UMA_HISTOGRAM_BOOLEAN("Search.MigratedPrefToDictionaryValue", true);
|
| +
|
| + // This looks like a user-selected value, so let's migrate it. Subsequent
|
| + // changes to this value will be automatically stored in the correct location.
|
| + default_search_manager.SetUserSelectedDefaultSearchEngine(
|
| + *legacy_dse_from_prefs);
|
| +
|
| // TODO(erikwright): Clear the legacy value when the modern value is the
|
| - // authority.
|
| + // authority. Don't forget to do this even if we don't migrate (because we
|
| + // migrated prior to implementing the clear.
|
| }
|
|
|
| void OnPrefsInitialized(PrefService* pref_service,
|
|
|