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 4d7625e8c96d9f444f808fdb94e0b16b479fbc0f..7131f4f85f65dc62fd2faf898794284fc7a4968f 100644 |
--- a/chrome/browser/search_engines/default_search_pref_migration.cc |
+++ b/chrome/browser/search_engines/default_search_pref_migration.cc |
@@ -9,40 +9,120 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/metrics/histogram.h" |
#include "base/prefs/pref_service.h" |
+#include "base/strings/string_number_conversions.h" |
+#include "base/strings/string_split.h" |
+#include "base/strings/utf_string_conversions.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" |
+#include "chrome/common/pref_names.h" |
+#include "url/gurl.h" |
namespace { |
+scoped_ptr<TemplateURLData> LoadDefaultSearchProviderFromLegacyPrefs( |
+ PrefService* prefs) { |
+ if (!prefs || !prefs->HasPrefPath(prefs::kDefaultSearchProviderSearchURL) || |
+ !prefs->HasPrefPath(prefs::kDefaultSearchProviderKeyword)) |
+ return scoped_ptr<TemplateURLData>(); |
+ |
+ const PrefService::Preference* pref = |
+ prefs->FindPreference(prefs::kDefaultSearchProviderSearchURL); |
+ DCHECK(pref); |
+ if (pref->IsManaged()) |
+ return scoped_ptr<TemplateURLData>(); |
+ |
+ base::string16 name = |
+ base::UTF8ToUTF16(prefs->GetString(prefs::kDefaultSearchProviderName)); |
+ base::string16 keyword = |
+ base::UTF8ToUTF16(prefs->GetString(prefs::kDefaultSearchProviderKeyword)); |
+ if (keyword.empty()) |
+ return scoped_ptr<TemplateURLData>(); |
+ std::string search_url = |
+ prefs->GetString(prefs::kDefaultSearchProviderSearchURL); |
+ if (search_url.empty()) |
+ return scoped_ptr<TemplateURLData>(); |
+ std::string suggest_url = |
+ prefs->GetString(prefs::kDefaultSearchProviderSuggestURL); |
+ std::string instant_url = |
+ prefs->GetString(prefs::kDefaultSearchProviderInstantURL); |
+ std::string image_url = |
+ prefs->GetString(prefs::kDefaultSearchProviderImageURL); |
+ std::string new_tab_url = |
+ prefs->GetString(prefs::kDefaultSearchProviderNewTabURL); |
+ std::string search_url_post_params = |
+ prefs->GetString(prefs::kDefaultSearchProviderSearchURLPostParams); |
+ std::string suggest_url_post_params = |
+ prefs->GetString(prefs::kDefaultSearchProviderSuggestURLPostParams); |
+ std::string instant_url_post_params = |
+ prefs->GetString(prefs::kDefaultSearchProviderInstantURLPostParams); |
+ std::string image_url_post_params = |
+ prefs->GetString(prefs::kDefaultSearchProviderImageURLPostParams); |
+ std::string icon_url = |
+ prefs->GetString(prefs::kDefaultSearchProviderIconURL); |
+ std::string encodings = |
+ prefs->GetString(prefs::kDefaultSearchProviderEncodings); |
+ std::string id_string = prefs->GetString(prefs::kDefaultSearchProviderID); |
+ std::string prepopulate_id = |
+ prefs->GetString(prefs::kDefaultSearchProviderPrepopulateID); |
+ const base::ListValue* alternate_urls = |
+ prefs->GetList(prefs::kDefaultSearchProviderAlternateURLs); |
+ std::string search_terms_replacement_key = prefs->GetString( |
+ prefs::kDefaultSearchProviderSearchTermsReplacementKey); |
+ |
+ scoped_ptr<TemplateURLData> default_provider_data(new TemplateURLData); |
+ default_provider_data->short_name = name; |
+ default_provider_data->SetKeyword(keyword); |
+ default_provider_data->SetURL(search_url); |
+ default_provider_data->suggestions_url = suggest_url; |
+ default_provider_data->instant_url = instant_url; |
+ default_provider_data->image_url = image_url; |
+ default_provider_data->new_tab_url = new_tab_url; |
+ default_provider_data->search_url_post_params = search_url_post_params; |
+ default_provider_data->suggestions_url_post_params = |
+ suggest_url_post_params; |
+ default_provider_data->instant_url_post_params = instant_url_post_params; |
+ default_provider_data->image_url_post_params = image_url_post_params; |
+ default_provider_data->favicon_url = GURL(icon_url); |
+ default_provider_data->show_in_default_list = true; |
+ default_provider_data->alternate_urls.clear(); |
+ for (size_t i = 0; i < alternate_urls->GetSize(); ++i) { |
+ std::string alternate_url; |
+ if (alternate_urls->GetString(i, &alternate_url)) |
+ default_provider_data->alternate_urls.push_back(alternate_url); |
+ } |
+ default_provider_data->search_terms_replacement_key = |
+ search_terms_replacement_key; |
+ base::SplitString(encodings, ';', &default_provider_data->input_encodings); |
+ if (!id_string.empty()) { |
+ int64 value; |
+ base::StringToInt64(id_string, &value); |
+ default_provider_data->id = value; |
+ } |
+ if (!prepopulate_id.empty()) { |
+ int value; |
+ base::StringToInt(prepopulate_id, &value); |
+ default_provider_data->prepopulate_id = value; |
+ } |
+ return default_provider_data.Pass(); |
+} |
+ |
+ |
void MigrateDefaultSearchPref(PrefService* pref_service) { |
- DefaultSearchManager default_search_manager(pref_service); |
+ DefaultSearchManager default_search_manager( |
+ pref_service, DefaultSearchManager::ObserverCallback()); |
- TemplateURLData modern_user_dse; |
- if (default_search_manager.GetDefaultSearchEngine(&modern_user_dse)) |
+ if (default_search_manager.GetDefaultSearchEngineSource() != |
+ DefaultSearchManager::FROM_FALLBACK) |
return; |
- scoped_ptr<TemplateURLData> legacy_dse_from_prefs; |
- bool legacy_is_managed = false; |
- bool has_legacy_dse_from_prefs = |
- TemplateURLService::LoadDefaultSearchProviderFromPrefs( |
- pref_service, &legacy_dse_from_prefs, &legacy_is_managed); |
+ scoped_ptr<TemplateURLData> legacy_dse_from_prefs( |
+ LoadDefaultSearchProviderFromLegacyPrefs(pref_service)); |
- if (!has_legacy_dse_from_prefs) { |
- // The DSE is undefined. Nothing to migrate. |
- return; |
- } |
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. |
+ // The DSE is undefined. It might have been policy-defined. Nothing to |
+ // migrate. |
return; |
} |