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

Side by Side Diff: components/search_engines/default_search_pref_migration.cc

Issue 2598033004: Remove old default search preferences. (Closed)
Patch Set: Fixed after review, round 2 Created 3 years, 11 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/search_engines/default_search_pref_migration.h"
6
7 #include <stddef.h>
8 #include <stdint.h>
9
10 #include <memory>
11
12 #include "base/bind.h"
13 #include "base/bind_helpers.h"
14 #include "base/logging.h"
15 #include "base/metrics/histogram_macros.h"
16 #include "base/strings/string_number_conversions.h"
17 #include "base/strings/string_split.h"
18 #include "base/strings/utf_string_conversions.h"
19 #include "components/prefs/pref_service.h"
20 #include "components/search_engines/default_search_manager.h"
21 #include "components/search_engines/search_engines_pref_names.h"
22 #include "components/search_engines/template_url_data.h"
23 #include "components/search_engines/template_url_service.h"
24 #include "url/gurl.h"
25
26 namespace {
27
28 // Loads the user-selected DSE (if there is one) from legacy preferences.
29 std::unique_ptr<TemplateURLData> LoadDefaultSearchProviderFromLegacyPrefs(
30 PrefService* prefs) {
31 if (!prefs->HasPrefPath(prefs::kDefaultSearchProviderSearchURL) ||
32 !prefs->HasPrefPath(prefs::kDefaultSearchProviderKeyword))
33 return std::unique_ptr<TemplateURLData>();
34
35 const PrefService::Preference* pref =
36 prefs->FindPreference(prefs::kDefaultSearchProviderSearchURL);
37 DCHECK(pref);
38 if (pref->IsManaged())
39 return std::unique_ptr<TemplateURLData>();
40
41 base::string16 keyword =
42 base::UTF8ToUTF16(prefs->GetString(prefs::kDefaultSearchProviderKeyword));
43 std::string search_url =
44 prefs->GetString(prefs::kDefaultSearchProviderSearchURL);
45 if (keyword.empty() || search_url.empty())
46 return std::unique_ptr<TemplateURLData>();
47
48 std::unique_ptr<TemplateURLData> default_provider_data(new TemplateURLData);
49 default_provider_data->SetShortName(
50 base::UTF8ToUTF16(prefs->GetString(prefs::kDefaultSearchProviderName)));
51 default_provider_data->SetKeyword(keyword);
52 default_provider_data->SetURL(search_url);
53 default_provider_data->suggestions_url =
54 prefs->GetString(prefs::kDefaultSearchProviderSuggestURL);
55 default_provider_data->instant_url =
56 prefs->GetString(prefs::kDefaultSearchProviderInstantURL);
57 default_provider_data->image_url =
58 prefs->GetString(prefs::kDefaultSearchProviderImageURL);
59 default_provider_data->new_tab_url =
60 prefs->GetString(prefs::kDefaultSearchProviderNewTabURL);
61 default_provider_data->search_url_post_params =
62 prefs->GetString(prefs::kDefaultSearchProviderSearchURLPostParams);
63 default_provider_data->suggestions_url_post_params =
64 prefs->GetString(prefs::kDefaultSearchProviderSuggestURLPostParams);
65 default_provider_data->instant_url_post_params =
66 prefs->GetString(prefs::kDefaultSearchProviderInstantURLPostParams);
67 default_provider_data->image_url_post_params =
68 prefs->GetString(prefs::kDefaultSearchProviderImageURLPostParams);
69 default_provider_data->favicon_url =
70 GURL(prefs->GetString(prefs::kDefaultSearchProviderIconURL));
71 default_provider_data->search_terms_replacement_key =
72 prefs->GetString(prefs::kDefaultSearchProviderSearchTermsReplacementKey);
73 default_provider_data->input_encodings = base::SplitString(
74 prefs->GetString(prefs::kDefaultSearchProviderEncodings),
75 ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
76
77 default_provider_data->alternate_urls.clear();
78 const base::ListValue* alternate_urls =
79 prefs->GetList(prefs::kDefaultSearchProviderAlternateURLs);
80 for (size_t i = 0; i < alternate_urls->GetSize(); ++i) {
81 std::string alternate_url;
82 if (alternate_urls->GetString(i, &alternate_url))
83 default_provider_data->alternate_urls.push_back(alternate_url);
84 }
85
86 std::string id_string = prefs->GetString(prefs::kDefaultSearchProviderID);
87 if (!id_string.empty()) {
88 int64_t value;
89 base::StringToInt64(id_string, &value);
90 default_provider_data->id = value;
91 }
92
93 std::string prepopulate_id =
94 prefs->GetString(prefs::kDefaultSearchProviderPrepopulateID);
95 if (!prepopulate_id.empty()) {
96 int value;
97 base::StringToInt(prepopulate_id, &value);
98 default_provider_data->prepopulate_id = value;
99 }
100
101 return default_provider_data;
102 }
103
104 void ClearDefaultSearchProviderFromLegacyPrefs(PrefService* prefs) {
105 prefs->ClearPref(prefs::kDefaultSearchProviderName);
106 prefs->ClearPref(prefs::kDefaultSearchProviderKeyword);
107 prefs->ClearPref(prefs::kDefaultSearchProviderSearchURL);
108 prefs->ClearPref(prefs::kDefaultSearchProviderSuggestURL);
109 prefs->ClearPref(prefs::kDefaultSearchProviderInstantURL);
110 prefs->ClearPref(prefs::kDefaultSearchProviderImageURL);
111 prefs->ClearPref(prefs::kDefaultSearchProviderNewTabURL);
112 prefs->ClearPref(prefs::kDefaultSearchProviderSearchURLPostParams);
113 prefs->ClearPref(prefs::kDefaultSearchProviderSuggestURLPostParams);
114 prefs->ClearPref(prefs::kDefaultSearchProviderInstantURLPostParams);
115 prefs->ClearPref(prefs::kDefaultSearchProviderImageURLPostParams);
116 prefs->ClearPref(prefs::kDefaultSearchProviderIconURL);
117 prefs->ClearPref(prefs::kDefaultSearchProviderEncodings);
118 prefs->ClearPref(prefs::kDefaultSearchProviderPrepopulateID);
119 prefs->ClearPref(prefs::kDefaultSearchProviderAlternateURLs);
120 prefs->ClearPref(prefs::kDefaultSearchProviderSearchTermsReplacementKey);
121 }
122
123 void MigrateDefaultSearchPref(PrefService* pref_service) {
124 DCHECK(pref_service);
125
126 std::unique_ptr<TemplateURLData> legacy_dse_from_prefs =
127 LoadDefaultSearchProviderFromLegacyPrefs(pref_service);
128 if (!legacy_dse_from_prefs)
129 return;
130
131 DefaultSearchManager default_search_manager(
132 pref_service, DefaultSearchManager::ObserverCallback());
133 DefaultSearchManager::Source modern_source;
134 TemplateURLData* modern_value =
135 default_search_manager.GetDefaultSearchEngine(&modern_source);
136 if (modern_source == DefaultSearchManager::FROM_FALLBACK) {
137 // |modern_value| is the prepopulated default. If it matches the legacy DSE
138 // we assume it is not a user-selected value.
139 if (!modern_value ||
140 legacy_dse_from_prefs->prepopulate_id != modern_value->prepopulate_id) {
141 // This looks like a user-selected value, so let's migrate it.
142 // TODO(erikwright): Remove this migration logic when this stat approaches
143 // zero.
144 UMA_HISTOGRAM_BOOLEAN("Search.MigratedPrefToDictionaryValue", true);
145 default_search_manager.SetUserSelectedDefaultSearchEngine(
146 *legacy_dse_from_prefs);
147 }
148 }
149
150 ClearDefaultSearchProviderFromLegacyPrefs(pref_service);
151 }
152
153 void OnPrefsInitialized(PrefService* pref_service,
154 bool pref_service_initialization_success) {
155 MigrateDefaultSearchPref(pref_service);
156 }
157
158 } // namespace
159
160 void ConfigureDefaultSearchPrefMigrationToDictionaryValue(
161 PrefService* pref_service) {
162 if (pref_service->GetInitializationStatus() ==
163 PrefService::INITIALIZATION_STATUS_WAITING) {
164 pref_service->AddPrefInitObserver(
165 base::Bind(&OnPrefsInitialized, base::Unretained(pref_service)));
166 } else {
167 MigrateDefaultSearchPref(pref_service);
168 }
169 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698