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

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

Issue 2497853002: Create TemplateUrlData to base::Dictionary utility functions (Closed)
Patch Set: More fixes after review Created 4 years, 1 month 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 2016 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/template_url_data_util.h"
6
7 #include <string>
8
9 #include "base/memory/ptr_util.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "base/values.h"
13 #include "components/search_engines/default_search_manager.h"
14 #include "components/search_engines/prepopulated_engines.h"
15 #include "components/search_engines/template_url_data.h"
16 #include "url/gurl.h"
17
18 std::unique_ptr<TemplateURLData> TemplateURLDataFromDictionary(
19 const base::DictionaryValue& dict) {
20 std::string search_url;
21 base::string16 keyword;
22 base::string16 short_name;
23 dict.GetString(DefaultSearchManager::kURL, &search_url);
24 dict.GetString(DefaultSearchManager::kKeyword, &keyword);
25 dict.GetString(DefaultSearchManager::kShortName, &short_name);
26 // Check required TemplateURLData fields first.
27 if (search_url.empty() || keyword.empty() || short_name.empty())
28 return std::unique_ptr<TemplateURLData>();
29
30 auto result = base::MakeUnique<TemplateURLData>();
31 result->SetKeyword(keyword);
32 result->SetURL(search_url);
33
34 std::string id;
35 dict.GetString(DefaultSearchManager::kID, &id);
36 base::StringToInt64(id, &result->id);
37
38 result->SetShortName(short_name);
39 dict.GetInteger(DefaultSearchManager::kPrepopulateID,
40 &result->prepopulate_id);
41 dict.GetString(DefaultSearchManager::kSyncGUID,
42 &result->sync_guid);
43 dict.GetString(DefaultSearchManager::kSuggestionsURL,
44 &result->suggestions_url);
45
46 dict.GetString(DefaultSearchManager::kInstantURL,
47 &result->instant_url);
48 dict.GetString(DefaultSearchManager::kImageURL, &result->image_url);
49 dict.GetString(DefaultSearchManager::kNewTabURL, &result->new_tab_url);
50 dict.GetString(DefaultSearchManager::kContextualSearchURL,
51 &result->contextual_search_url);
52 std::string favicon_url;
53 std::string originating_url;
54 dict.GetString(DefaultSearchManager::kFaviconURL, &favicon_url);
55 dict.GetString(DefaultSearchManager::kOriginatingURL, &originating_url);
56 result->favicon_url = GURL(favicon_url);
57 result->originating_url = GURL(originating_url);
58
59 dict.GetString(DefaultSearchManager::kSearchURLPostParams,
60 &result->search_url_post_params);
61 dict.GetString(DefaultSearchManager::kSuggestionsURLPostParams,
62 &result->suggestions_url_post_params);
63 dict.GetString(DefaultSearchManager::kInstantURLPostParams,
64 &result->instant_url_post_params);
65 dict.GetString(DefaultSearchManager::kImageURLPostParams,
66 &result->image_url_post_params);
67 dict.GetBoolean(DefaultSearchManager::kSafeForAutoReplace,
68 &result->safe_for_autoreplace);
69
70 std::string date_created_str;
71 std::string last_modified_str;
72 dict.GetString(DefaultSearchManager::kDateCreated, &date_created_str);
73 dict.GetString(DefaultSearchManager::kLastModified, &last_modified_str);
74
75 int64_t date_created = 0;
76 if (base::StringToInt64(date_created_str, &date_created)) {
77 result->date_created = base::Time::FromInternalValue(date_created);
78 }
79
80 int64_t last_modified = 0;
81 if (base::StringToInt64(date_created_str, &last_modified)) {
82 result->last_modified = base::Time::FromInternalValue(last_modified);
83 }
84
85 dict.GetInteger(DefaultSearchManager::kUsageCount, &result->usage_count);
86
87 const base::ListValue* alternate_urls = nullptr;
88 if (dict.GetList(DefaultSearchManager::kAlternateURLs, &alternate_urls)) {
89 for (const auto& it : *alternate_urls) {
90 std::string alternate_url;
91 if (it->GetAsString(&alternate_url))
92 result->alternate_urls.push_back(std::move(alternate_url));
93 }
94 }
95
96 const base::ListValue* encodings = nullptr;
97 if (dict.GetList(DefaultSearchManager::kInputEncodings, &encodings)) {
98 for (const auto& it : *encodings) {
99 std::string encoding;
100 if (it->GetAsString(&encoding))
101 result->input_encodings.push_back(std::move(encoding));
102 }
103 }
104
105 dict.GetString(DefaultSearchManager::kSearchTermsReplacementKey,
106 &result->search_terms_replacement_key);
107 dict.GetBoolean(DefaultSearchManager::kCreatedByPolicy,
108 &result->created_by_policy);
109 return result;
110 }
111
112 std::unique_ptr<base::DictionaryValue> TemplateURLDataToDictionary(
113 const TemplateURLData& data) {
114 auto url_dict = base::MakeUnique<base::DictionaryValue>();
115 url_dict->SetString(DefaultSearchManager::kID, base::Int64ToString(data.id));
116 url_dict->SetString(DefaultSearchManager::kShortName, data.short_name());
117 url_dict->SetString(DefaultSearchManager::kKeyword, data.keyword());
118 url_dict->SetInteger(DefaultSearchManager::kPrepopulateID,
119 data.prepopulate_id);
120 url_dict->SetString(DefaultSearchManager::kSyncGUID, data.sync_guid);
121
122 url_dict->SetString(DefaultSearchManager::kURL, data.url());
123 url_dict->SetString(DefaultSearchManager::kSuggestionsURL,
124 data.suggestions_url);
125 url_dict->SetString(DefaultSearchManager::kInstantURL, data.instant_url);
126 url_dict->SetString(DefaultSearchManager::kImageURL, data.image_url);
127 url_dict->SetString(DefaultSearchManager::kNewTabURL, data.new_tab_url);
128 url_dict->SetString(DefaultSearchManager::kContextualSearchURL,
129 data.contextual_search_url);
130 url_dict->SetString(DefaultSearchManager::kFaviconURL,
131 data.favicon_url.spec());
132 url_dict->SetString(DefaultSearchManager::kOriginatingURL,
133 data.originating_url.spec());
134
135 url_dict->SetString(DefaultSearchManager::kSearchURLPostParams,
136 data.search_url_post_params);
137 url_dict->SetString(DefaultSearchManager::kSuggestionsURLPostParams,
138 data.suggestions_url_post_params);
139 url_dict->SetString(DefaultSearchManager::kInstantURLPostParams,
140 data.instant_url_post_params);
141 url_dict->SetString(DefaultSearchManager::kImageURLPostParams,
142 data.image_url_post_params);
143
144 url_dict->SetBoolean(DefaultSearchManager::kSafeForAutoReplace,
145 data.safe_for_autoreplace);
146
147 url_dict->SetString(DefaultSearchManager::kDateCreated,
148 base::Int64ToString(data.date_created.ToInternalValue()));
149 url_dict->SetString(DefaultSearchManager::kLastModified,
150 base::Int64ToString(
151 data.last_modified.ToInternalValue()));
152 url_dict->SetInteger(DefaultSearchManager::kUsageCount, data.usage_count);
153
154 auto alternate_urls = base::MakeUnique<base::ListValue>();
155 for (const auto& alternate_url : data.alternate_urls)
156 alternate_urls->AppendString(alternate_url);
157
158 url_dict->Set(DefaultSearchManager::kAlternateURLs,
159 std::move(alternate_urls));
160
161 auto encodings = base::MakeUnique<base::ListValue>();
162 for (const auto& input_encoding : data.input_encodings)
163 encodings->AppendString(input_encoding);
164 url_dict->Set(DefaultSearchManager::kInputEncodings, std::move(encodings));
165
166 url_dict->SetString(DefaultSearchManager::kSearchTermsReplacementKey,
167 data.search_terms_replacement_key);
168 url_dict->SetBoolean(DefaultSearchManager::kCreatedByPolicy,
169 data.created_by_policy);
170 return url_dict;
171 }
172
173 std::unique_ptr<TemplateURLData> MakePrepopulatedTemplateURLData(
174 const base::string16& name,
175 const base::string16& keyword,
176 const base::StringPiece& search_url,
177 const base::StringPiece& suggest_url,
178 const base::StringPiece& instant_url,
179 const base::StringPiece& image_url,
180 const base::StringPiece& new_tab_url,
181 const base::StringPiece& contextual_search_url,
182 const base::StringPiece& search_url_post_params,
183 const base::StringPiece& suggest_url_post_params,
184 const base::StringPiece& instant_url_post_params,
185 const base::StringPiece& image_url_post_params,
186 const base::StringPiece& favicon_url,
187 const base::StringPiece& encoding,
188 const base::ListValue& alternate_urls,
189 const base::StringPiece& search_terms_replacement_key,
190 int prepopulate_id) {
191 std::unique_ptr<TemplateURLData> data(new TemplateURLData);
192
193 data->SetShortName(name);
194 data->SetKeyword(keyword);
195 data->SetURL(search_url.as_string());
196 data->suggestions_url = suggest_url.as_string();
197 data->instant_url = instant_url.as_string();
198 data->image_url = image_url.as_string();
199 data->new_tab_url = new_tab_url.as_string();
200 data->contextual_search_url = contextual_search_url.as_string();
201 data->search_url_post_params = search_url_post_params.as_string();
202 data->suggestions_url_post_params = suggest_url_post_params.as_string();
203 data->instant_url_post_params = instant_url_post_params.as_string();
204 data->image_url_post_params = image_url_post_params.as_string();
205 data->favicon_url = GURL(favicon_url);
206 data->safe_for_autoreplace = true;
207 data->input_encodings.push_back(encoding.as_string());
208 data->date_created = base::Time();
209 data->last_modified = base::Time();
210 data->prepopulate_id = prepopulate_id;
211 for (size_t i = 0; i < alternate_urls.GetSize(); ++i) {
212 std::string alternate_url;
213 alternate_urls.GetString(i, &alternate_url);
214 DCHECK(!alternate_url.empty());
215 data->alternate_urls.push_back(alternate_url);
216 }
217 data->search_terms_replacement_key = search_terms_replacement_key.as_string();
218 return data;
219 }
220
221 std::unique_ptr<TemplateURLData> TemplateURLDataFromPrepopulatedEngine(
222 const TemplateURLPrepopulateData::PrepopulatedEngine& engine) {
223 base::ListValue alternate_urls;
224 if (engine.alternate_urls) {
225 for (size_t i = 0; i < engine.alternate_urls_size; ++i)
226 alternate_urls.AppendString(std::string(engine.alternate_urls[i]));
227 }
228
229 return MakePrepopulatedTemplateURLData(
230 base::WideToUTF16(engine.name), base::WideToUTF16(engine.keyword),
231 engine.search_url, engine.suggest_url, engine.instant_url,
232 engine.image_url, engine.new_tab_url, engine.contextual_search_url,
233 engine.search_url_post_params, engine.suggest_url_post_params,
234 engine.instant_url_post_params, engine.image_url_post_params,
235 engine.favicon_url, engine.encoding, alternate_urls,
236 engine.search_terms_replacement_key, engine.id);
237 }
238
239 std::unique_ptr<TemplateURLData> TemplateURLDataFromOverrideDictionary(
240 const base::DictionaryValue& engine) {
241 base::string16 name;
242 base::string16 keyword;
243 std::string search_url;
244 std::string favicon_url;
245 std::string encoding;
246 int id = -1;
247 // The following fields are required for each search engine configuration.
248 if (engine.GetString("name", &name) && !name.empty() &&
249 engine.GetString("keyword", &keyword) && !keyword.empty() &&
250 engine.GetString("search_url", &search_url) && !search_url.empty() &&
251 engine.GetString("favicon_url", &favicon_url) && !favicon_url.empty() &&
252 engine.GetString("encoding", &encoding) && !encoding.empty() &&
253 engine.GetInteger("id", &id)) {
254 // These fields are optional.
255 std::string suggest_url;
256 std::string instant_url;
257 std::string image_url;
258 std::string new_tab_url;
259 std::string contextual_search_url;
260 std::string search_url_post_params;
261 std::string suggest_url_post_params;
262 std::string instant_url_post_params;
263 std::string image_url_post_params;
264 base::ListValue empty_list;
265 const base::ListValue* alternate_urls = &empty_list;
266 std::string search_terms_replacement_key;
267 engine.GetString("suggest_url", &suggest_url);
268 engine.GetString("instant_url", &instant_url);
269 engine.GetString("image_url", &image_url);
270 engine.GetString("new_tab_url", &new_tab_url);
271 engine.GetString("contextual_search_url", &contextual_search_url);
272 engine.GetString("search_url_post_params", &search_url_post_params);
273 engine.GetString("suggest_url_post_params", &suggest_url_post_params);
274 engine.GetString("instant_url_post_params", &instant_url_post_params);
275 engine.GetString("image_url_post_params", &image_url_post_params);
276 engine.GetList("alternate_urls", &alternate_urls);
277 engine.GetString("search_terms_replacement_key",
278 &search_terms_replacement_key);
279 return MakePrepopulatedTemplateURLData(
280 name, keyword, search_url, suggest_url, instant_url, image_url,
281 new_tab_url, contextual_search_url, search_url_post_params,
282 suggest_url_post_params, instant_url_post_params,
283 image_url_post_params, favicon_url, encoding, *alternate_urls,
284 search_terms_replacement_key, id);
285 }
286 return std::unique_ptr<TemplateURLData>();
287 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698