OLD | NEW |
---|---|
(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 } | |
OLD | NEW |