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

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

Issue 2497853002: Create TemplateUrlData to base::Dictionary utility functions (Closed)
Patch Set: Fixed android compilation 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, &result->sync_guid);
42 dict.GetString(DefaultSearchManager::kSuggestionsURL,
43 &result->suggestions_url);
44
45 dict.GetString(DefaultSearchManager::kInstantURL, &result->instant_url);
46 dict.GetString(DefaultSearchManager::kImageURL, &result->image_url);
47 dict.GetString(DefaultSearchManager::kNewTabURL, &result->new_tab_url);
48 dict.GetString(DefaultSearchManager::kContextualSearchURL,
49 &result->contextual_search_url);
50 std::string favicon_url;
51 std::string originating_url;
52 dict.GetString(DefaultSearchManager::kFaviconURL, &favicon_url);
53 dict.GetString(DefaultSearchManager::kOriginatingURL, &originating_url);
54 result->favicon_url = GURL(favicon_url);
55 result->originating_url = GURL(originating_url);
56
57 dict.GetString(DefaultSearchManager::kSearchURLPostParams,
58 &result->search_url_post_params);
59 dict.GetString(DefaultSearchManager::kSuggestionsURLPostParams,
60 &result->suggestions_url_post_params);
61 dict.GetString(DefaultSearchManager::kInstantURLPostParams,
62 &result->instant_url_post_params);
63 dict.GetString(DefaultSearchManager::kImageURLPostParams,
64 &result->image_url_post_params);
65 dict.GetBoolean(DefaultSearchManager::kSafeForAutoReplace,
66 &result->safe_for_autoreplace);
67
68 std::string date_created_str;
69 std::string last_modified_str;
70 dict.GetString(DefaultSearchManager::kDateCreated, &date_created_str);
71 dict.GetString(DefaultSearchManager::kLastModified, &last_modified_str);
72
73 int64_t date_created = 0;
74 if (base::StringToInt64(date_created_str, &date_created)) {
75 result->date_created = base::Time::FromInternalValue(date_created);
76 }
77
78 int64_t last_modified = 0;
79 if (base::StringToInt64(date_created_str, &last_modified)) {
80 result->last_modified = base::Time::FromInternalValue(last_modified);
81 }
82
83 dict.GetInteger(DefaultSearchManager::kUsageCount, &result->usage_count);
84
85 const base::ListValue* alternate_urls = nullptr;
86 if (dict.GetList(DefaultSearchManager::kAlternateURLs, &alternate_urls)) {
87 for (const auto& it : *alternate_urls) {
88 std::string alternate_url;
89 if (it->GetAsString(&alternate_url))
90 result->alternate_urls.push_back(std::move(alternate_url));
91 }
92 }
93
94 const base::ListValue* encodings = nullptr;
95 if (dict.GetList(DefaultSearchManager::kInputEncodings, &encodings)) {
96 for (const auto& it : *encodings) {
97 std::string encoding;
98 if (it->GetAsString(&encoding))
99 result->input_encodings.push_back(std::move(encoding));
100 }
101 }
102
103 dict.GetString(DefaultSearchManager::kSearchTermsReplacementKey,
104 &result->search_terms_replacement_key);
105 dict.GetBoolean(DefaultSearchManager::kCreatedByPolicy,
106 &result->created_by_policy);
107 return result;
108 }
109
110 std::unique_ptr<base::DictionaryValue> TemplateURLDataToDictionary(
111 const TemplateURLData& data) {
112 auto url_dict = base::MakeUnique<base::DictionaryValue>();
113 url_dict->SetString(DefaultSearchManager::kID, base::Int64ToString(data.id));
114 url_dict->SetString(DefaultSearchManager::kShortName, data.short_name());
115 url_dict->SetString(DefaultSearchManager::kKeyword, data.keyword());
116 url_dict->SetInteger(DefaultSearchManager::kPrepopulateID,
117 data.prepopulate_id);
118 url_dict->SetString(DefaultSearchManager::kSyncGUID, data.sync_guid);
119
120 url_dict->SetString(DefaultSearchManager::kURL, data.url());
121 url_dict->SetString(DefaultSearchManager::kSuggestionsURL,
122 data.suggestions_url);
123 url_dict->SetString(DefaultSearchManager::kInstantURL, data.instant_url);
124 url_dict->SetString(DefaultSearchManager::kImageURL, data.image_url);
125 url_dict->SetString(DefaultSearchManager::kNewTabURL, data.new_tab_url);
126 url_dict->SetString(DefaultSearchManager::kContextualSearchURL,
127 data.contextual_search_url);
128 url_dict->SetString(DefaultSearchManager::kFaviconURL,
129 data.favicon_url.spec());
130 url_dict->SetString(DefaultSearchManager::kOriginatingURL,
131 data.originating_url.spec());
132
133 url_dict->SetString(DefaultSearchManager::kSearchURLPostParams,
134 data.search_url_post_params);
135 url_dict->SetString(DefaultSearchManager::kSuggestionsURLPostParams,
136 data.suggestions_url_post_params);
137 url_dict->SetString(DefaultSearchManager::kInstantURLPostParams,
138 data.instant_url_post_params);
139 url_dict->SetString(DefaultSearchManager::kImageURLPostParams,
140 data.image_url_post_params);
141
142 url_dict->SetBoolean(DefaultSearchManager::kSafeForAutoReplace,
143 data.safe_for_autoreplace);
144
145 url_dict->SetString(DefaultSearchManager::kDateCreated,
146 base::Int64ToString(data.date_created.ToInternalValue()));
147 url_dict->SetString(
148 DefaultSearchManager::kLastModified,
149 base::Int64ToString(data.last_modified.ToInternalValue()));
150 url_dict->SetInteger(DefaultSearchManager::kUsageCount, data.usage_count);
151
152 auto alternate_urls = base::MakeUnique<base::ListValue>();
153 for (const auto& alternate_url : data.alternate_urls)
154 alternate_urls->AppendString(alternate_url);
155
156 url_dict->Set(DefaultSearchManager::kAlternateURLs,
157 std::move(alternate_urls));
158
159 auto encodings = base::MakeUnique<base::ListValue>();
160 for (const auto& input_encoding : data.input_encodings)
161 encodings->AppendString(input_encoding);
162 url_dict->Set(DefaultSearchManager::kInputEncodings, std::move(encodings));
163
164 url_dict->SetString(DefaultSearchManager::kSearchTermsReplacementKey,
165 data.search_terms_replacement_key);
166 url_dict->SetBoolean(DefaultSearchManager::kCreatedByPolicy,
167 data.created_by_policy);
168 return url_dict;
169 }
170
171 std::unique_ptr<TemplateURLData> TemplateURLDataFromPrepopulatedEngine(
172 const TemplateURLPrepopulateData::PrepopulatedEngine& engine) {
173 base::ListValue alternate_urls;
174 if (engine.alternate_urls) {
175 for (size_t i = 0; i < engine.alternate_urls_size; ++i)
176 alternate_urls.AppendString(std::string(engine.alternate_urls[i]));
177 }
178
179 return base::MakeUnique<TemplateURLData>(
180 base::WideToUTF16(engine.name), base::WideToUTF16(engine.keyword),
181 engine.search_url, engine.suggest_url, engine.instant_url,
182 engine.image_url, engine.new_tab_url, engine.contextual_search_url,
183 engine.search_url_post_params, engine.suggest_url_post_params,
184 engine.instant_url_post_params, engine.image_url_post_params,
185 engine.favicon_url, engine.encoding, alternate_urls,
186 engine.search_terms_replacement_key, engine.id);
187 }
188
189 std::unique_ptr<TemplateURLData> TemplateURLDataFromOverrideDictionary(
190 const base::DictionaryValue& engine) {
191 base::string16 name;
192 base::string16 keyword;
193 std::string search_url;
194 std::string favicon_url;
195 std::string encoding;
196 int id = -1;
197 // The following fields are required for each search engine configuration.
198 if (engine.GetString("name", &name) && !name.empty() &&
199 engine.GetString("keyword", &keyword) && !keyword.empty() &&
200 engine.GetString("search_url", &search_url) && !search_url.empty() &&
201 engine.GetString("favicon_url", &favicon_url) && !favicon_url.empty() &&
202 engine.GetString("encoding", &encoding) && !encoding.empty() &&
203 engine.GetInteger("id", &id)) {
204 // These fields are optional.
205 std::string suggest_url;
206 std::string instant_url;
207 std::string image_url;
208 std::string new_tab_url;
209 std::string contextual_search_url;
210 std::string search_url_post_params;
211 std::string suggest_url_post_params;
212 std::string instant_url_post_params;
213 std::string image_url_post_params;
214 base::ListValue empty_list;
215 const base::ListValue* alternate_urls = &empty_list;
216 std::string search_terms_replacement_key;
217 engine.GetString("suggest_url", &suggest_url);
218 engine.GetString("instant_url", &instant_url);
219 engine.GetString("image_url", &image_url);
220 engine.GetString("new_tab_url", &new_tab_url);
221 engine.GetString("contextual_search_url", &contextual_search_url);
222 engine.GetString("search_url_post_params", &search_url_post_params);
223 engine.GetString("suggest_url_post_params", &suggest_url_post_params);
224 engine.GetString("instant_url_post_params", &instant_url_post_params);
225 engine.GetString("image_url_post_params", &image_url_post_params);
226 engine.GetList("alternate_urls", &alternate_urls);
227 engine.GetString("search_terms_replacement_key",
228 &search_terms_replacement_key);
229 return base::MakeUnique<TemplateURLData>(
230 name, keyword, search_url, suggest_url, instant_url, image_url,
231 new_tab_url, contextual_search_url, search_url_post_params,
232 suggest_url_post_params, instant_url_post_params, image_url_post_params,
233 favicon_url, encoding, *alternate_urls, search_terms_replacement_key,
234 id);
235 }
236 return std::unique_ptr<TemplateURLData>();
237 }
OLDNEW
« no previous file with comments | « components/search_engines/template_url_data_util.h ('k') | components/search_engines/template_url_prepopulate_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698