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

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

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

Powered by Google App Engine
This is Rietveld 408576698