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

Side by Side Diff: content/renderer/manifest/manifest_parser.cc

Issue 2425833002: Parse "purpose" member from Web Manifest (Closed)
Patch Set: Fix Created 4 years 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/manifest/manifest_parser.h" 5 #include "content/renderer/manifest/manifest_parser.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 blink::WebIconSizesParser::parseIconSizes(sizes_str.string()); 269 blink::WebIconSizesParser::parseIconSizes(sizes_str.string());
270 sizes.resize(web_sizes.size()); 270 sizes.resize(web_sizes.size());
271 for (size_t i = 0; i < web_sizes.size(); ++i) 271 for (size_t i = 0; i < web_sizes.size(); ++i)
272 sizes[i] = web_sizes[i]; 272 sizes[i] = web_sizes[i];
273 if (sizes.empty()) { 273 if (sizes.empty()) {
274 AddErrorInfo("found icon with no valid size."); 274 AddErrorInfo("found icon with no valid size.");
275 } 275 }
276 return sizes; 276 return sizes;
277 } 277 }
278 278
279 std::vector<Manifest::Icon::IconPurpose> ManifestParser::ParseIconPurpose(
280 const base::DictionaryValue& icon) {
281 base::NullableString16 purpose_str = ParseString(icon, "purpose", NoTrim);
282 std::vector<Manifest::Icon::IconPurpose> purposes;
283
284 if (purpose_str.is_null()) {
285 purposes.push_back(Manifest::Icon::IconPurpose::ANY);
286 return purposes;
287 }
288
289 std::vector<base::string16> keywords = base::SplitString(
290 purpose_str.string(), base::ASCIIToUTF16(" "),
291 base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
292 for (const base::string16& keyword : keywords) {
293 if (base::LowerCaseEqualsASCII(keyword, "any")) {
294 purposes.push_back(Manifest::Icon::IconPurpose::ANY);
295 } else if (base::LowerCaseEqualsASCII(keyword, "badge")) {
296 purposes.push_back(Manifest::Icon::IconPurpose::BADGE);
297 } else {
298 AddErrorInfo(
299 "found icon with invalid purpose. "
300 "Using default value 'any'.");
301 }
302 }
303
304 if (purposes.empty()) {
305 purposes.push_back(Manifest::Icon::IconPurpose::ANY);
306 }
307
308 return purposes;
309 }
310
279 std::vector<Manifest::Icon> ManifestParser::ParseIcons( 311 std::vector<Manifest::Icon> ManifestParser::ParseIcons(
280 const base::DictionaryValue& dictionary) { 312 const base::DictionaryValue& dictionary) {
281 std::vector<Manifest::Icon> icons; 313 std::vector<Manifest::Icon> icons;
282 if (!dictionary.HasKey("icons")) 314 if (!dictionary.HasKey("icons"))
283 return icons; 315 return icons;
284 316
285 const base::ListValue* icons_list = nullptr; 317 const base::ListValue* icons_list = nullptr;
286 if (!dictionary.GetList("icons", &icons_list)) { 318 if (!dictionary.GetList("icons", &icons_list)) {
287 AddErrorInfo("property 'icons' ignored, type array expected."); 319 AddErrorInfo("property 'icons' ignored, type array expected.");
288 return icons; 320 return icons;
289 } 321 }
290 322
291 for (size_t i = 0; i < icons_list->GetSize(); ++i) { 323 for (size_t i = 0; i < icons_list->GetSize(); ++i) {
292 const base::DictionaryValue* icon_dictionary = nullptr; 324 const base::DictionaryValue* icon_dictionary = nullptr;
293 if (!icons_list->GetDictionary(i, &icon_dictionary)) 325 if (!icons_list->GetDictionary(i, &icon_dictionary))
294 continue; 326 continue;
295 327
296 Manifest::Icon icon; 328 Manifest::Icon icon;
297 icon.src = ParseIconSrc(*icon_dictionary); 329 icon.src = ParseIconSrc(*icon_dictionary);
298 // An icon MUST have a valid src. If it does not, it MUST be ignored. 330 // An icon MUST have a valid src. If it does not, it MUST be ignored.
299 if (!icon.src.is_valid()) 331 if (!icon.src.is_valid())
300 continue; 332 continue;
301 icon.type = ParseIconType(*icon_dictionary); 333 icon.type = ParseIconType(*icon_dictionary);
302 icon.sizes = ParseIconSizes(*icon_dictionary); 334 icon.sizes = ParseIconSizes(*icon_dictionary);
335 icon.purpose = ParseIconPurpose(*icon_dictionary);
303 336
304 icons.push_back(icon); 337 icons.push_back(icon);
305 } 338 }
306 339
307 return icons; 340 return icons;
308 } 341 }
309 342
310 base::NullableString16 ManifestParser::ParseRelatedApplicationPlatform( 343 base::NullableString16 ManifestParser::ParseRelatedApplicationPlatform(
311 const base::DictionaryValue& application) { 344 const base::DictionaryValue& application) {
312 return ParseString(application, "platform", Trim); 345 return ParseString(application, "platform", Trim);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 } 421 }
389 422
390 void ManifestParser::AddErrorInfo(const std::string& error_msg, 423 void ManifestParser::AddErrorInfo(const std::string& error_msg,
391 bool critical, 424 bool critical,
392 int error_line, 425 int error_line,
393 int error_column) { 426 int error_column) {
394 errors_.push_back({error_msg, critical, error_line, error_column}); 427 errors_.push_back({error_msg, critical, error_line, error_column});
395 } 428 }
396 429
397 } // namespace content 430 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/manifest/manifest_parser.h ('k') | content/renderer/manifest/manifest_parser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698