Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Unified Diff: chrome/browser/search_engines/default_search_pref_migration.cc

Issue 268643002: Use the DefaultSearchManager as the exclusive authority on DSE, ignoring Web Data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix merge errors. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 7516bfc9c2ad1a2c779ff171f103a157ed27090d..b5361ccf552f028abafaf309942cf0ab32de5e97 100644
--- a/chrome/browser/search_engines/default_search_pref_migration.cc
+++ b/chrome/browser/search_engines/default_search_pref_migration.cc
@@ -6,68 +6,156 @@
#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 "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 {
-void MigrateDefaultSearchPref(PrefService* pref_service) {
- DefaultSearchManager default_search_manager(
- pref_service, DefaultSearchManager::ObserverCallback());
+scoped_ptr<TemplateURLData> LoadDefaultSearchProviderFromLegacyPrefs(
+ PrefService* prefs) {
+ if (!prefs->HasPrefPath(prefs::kDefaultSearchProviderSearchURL) ||
+ !prefs->HasPrefPath(prefs::kDefaultSearchProviderKeyword))
+ return scoped_ptr<TemplateURLData>();
- if (default_search_manager.GetDefaultSearchEngineSource() ==
- DefaultSearchManager::FROM_USER) {
- return;
- }
+ const PrefService::Preference* pref =
+ prefs->FindPreference(prefs::kDefaultSearchProviderSearchURL);
+ DCHECK(pref);
+ if (pref->IsManaged())
+ return scoped_ptr<TemplateURLData>();
- 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);
+ 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);
- if (!has_legacy_dse_from_prefs) {
- // The DSE is undefined. Nothing to migrate.
- return;
+ 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);
}
- 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;
+ 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 (legacy_is_managed) {
- // The DSE is policy-managed, not user-selected. It will automatically be
- // projected into the new location.
- return;
+ if (!prepopulate_id.empty()) {
+ int value;
+ base::StringToInt(prepopulate_id, &value);
+ default_provider_data->prepopulate_id = value;
}
+ return default_provider_data.Pass();
+}
- // 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;
- }
+void ClearDefaultSearchProviderFromLegacyPrefs(PrefService* prefs) {
+ prefs->ClearPref(prefs::kDefaultSearchProviderName);
+ prefs->ClearPref(prefs::kDefaultSearchProviderKeyword);
+ prefs->ClearPref(prefs::kDefaultSearchProviderSearchURL);
+ prefs->ClearPref(prefs::kDefaultSearchProviderSuggestURL);
+ prefs->ClearPref(prefs::kDefaultSearchProviderInstantURL);
+ prefs->ClearPref(prefs::kDefaultSearchProviderImageURL);
+ prefs->ClearPref(prefs::kDefaultSearchProviderNewTabURL);
+ prefs->ClearPref(prefs::kDefaultSearchProviderSearchURLPostParams);
+ prefs->ClearPref(prefs::kDefaultSearchProviderSuggestURLPostParams);
+ prefs->ClearPref(prefs::kDefaultSearchProviderInstantURLPostParams);
+ prefs->ClearPref(prefs::kDefaultSearchProviderImageURLPostParams);
+ prefs->ClearPref(prefs::kDefaultSearchProviderIconURL);
+ prefs->ClearPref(prefs::kDefaultSearchProviderEncodings);
+ prefs->ClearPref(prefs::kDefaultSearchProviderPrepopulateID);
+ prefs->ClearPref(prefs::kDefaultSearchProviderAlternateURLs);
+ prefs->ClearPref(prefs::kDefaultSearchProviderSearchTermsReplacementKey);
+}
- UMA_HISTOGRAM_BOOLEAN("Search.MigratedPrefToDictionaryValue", true);
+void MigrateDefaultSearchPref(PrefService* pref_service) {
+ DCHECK(pref_service);
+ DefaultSearchManager default_search_manager(
+ pref_service, DefaultSearchManager::ObserverCallback());
- // 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);
+ DefaultSearchManager::Source modern_source;
+ TemplateURLData* modern_value =
+ default_search_manager.GetDefaultSearchEngine(&modern_source);
+ if (modern_source == DefaultSearchManager::FROM_FALLBACK) {
+ scoped_ptr<TemplateURLData> legacy_dse_from_prefs(
+ LoadDefaultSearchProviderFromLegacyPrefs(pref_service));
+ if (!legacy_dse_from_prefs) {
+ // The DSE is undefined. It might have been policy-defined. Nothing to
+ // migrate.
+ return;
+ }
- // TODO(erikwright): Clear the legacy value when the modern value is the
- // authority. Don't forget to do this even if we don't migrate (because we
- // migrated prior to implementing the clear.
+ // |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.
+ UMA_HISTOGRAM_BOOLEAN("Search.MigratedPrefToDictionaryValue", true);
gab 2014/05/07 20:25:09 Add a TODO to remove this migration code once this
erikwright (departed) 2014/05/07 22:26:47 Done.
+ default_search_manager.SetUserSelectedDefaultSearchEngine(
+ *legacy_dse_from_prefs);
+ }
+ ClearDefaultSearchProviderFromLegacyPrefs(pref_service);
+ }
}
void OnPrefsInitialized(PrefService* pref_service,

Powered by Google App Engine
This is Rietveld 408576698