OLD | NEW |
---|---|
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 "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
8 #include "base/strings/nullable_string16.h" | 8 #include "base/strings/nullable_string16.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
120 return; | 120 return; |
121 } | 121 } |
122 DCHECK(dictionary); | 122 DCHECK(dictionary); |
123 | 123 |
124 manifest_.name = ParseName(*dictionary); | 124 manifest_.name = ParseName(*dictionary); |
125 manifest_.short_name = ParseShortName(*dictionary); | 125 manifest_.short_name = ParseShortName(*dictionary); |
126 manifest_.start_url = ParseStartURL(*dictionary); | 126 manifest_.start_url = ParseStartURL(*dictionary); |
127 manifest_.display = ParseDisplay(*dictionary); | 127 manifest_.display = ParseDisplay(*dictionary); |
128 manifest_.orientation = ParseOrientation(*dictionary); | 128 manifest_.orientation = ParseOrientation(*dictionary); |
129 manifest_.icons = ParseIcons(*dictionary); | 129 manifest_.icons = ParseIcons(*dictionary); |
130 manifest_.related_applications = ParseRelatedApplications(*dictionary); | |
131 manifest_.prefer_related_applications = | |
132 ParsePreferRelatedApplications(*dictionary); | |
130 manifest_.gcm_sender_id = ParseGCMSenderID(*dictionary); | 133 manifest_.gcm_sender_id = ParseGCMSenderID(*dictionary); |
131 manifest_.gcm_user_visible_only = ParseGCMUserVisibleOnly(*dictionary); | 134 manifest_.gcm_user_visible_only = ParseGCMUserVisibleOnly(*dictionary); |
132 | 135 |
133 ManifestUmaUtil::ParseSucceeded(manifest_); | 136 ManifestUmaUtil::ParseSucceeded(manifest_); |
134 } | 137 } |
135 | 138 |
136 const Manifest& ManifestParser::manifest() const { | 139 const Manifest& ManifestParser::manifest() const { |
137 return manifest_; | 140 return manifest_; |
138 } | 141 } |
139 | 142 |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
327 icon.type = ParseIconType(*icon_dictionary); | 330 icon.type = ParseIconType(*icon_dictionary); |
328 icon.density = ParseIconDensity(*icon_dictionary); | 331 icon.density = ParseIconDensity(*icon_dictionary); |
329 icon.sizes = ParseIconSizes(*icon_dictionary); | 332 icon.sizes = ParseIconSizes(*icon_dictionary); |
330 | 333 |
331 icons.push_back(icon); | 334 icons.push_back(icon); |
332 } | 335 } |
333 | 336 |
334 return icons; | 337 return icons; |
335 } | 338 } |
336 | 339 |
340 Manifest::RelatedApplicationPlatform | |
341 ManifestParser::ParseRelatedApplicationPlatform( | |
342 const base::DictionaryValue& application) { | |
343 base::NullableString16 platform = ParseString(application, "platform", Trim); | |
344 if (platform.is_null()) { | |
345 errors_.push_back(GetErrorPrefix() + "'platform' is a required field, " | |
346 "related application ignored."); | |
347 return Manifest::RELATED_APPLICATION_PLATFORM_UNSPECIFIED; | |
348 } | |
349 | |
350 if (LowerCaseEqualsASCII(platform.string(), "play")) | |
351 return Manifest::RELATED_APPLICATION_PLATFORM_PLAY; | |
352 else { | |
353 errors_.push_back(GetErrorPrefix() + "unknown 'platform' value ignored."); | |
354 return Manifest::RELATED_APPLICATION_PLATFORM_UNSPECIFIED; | |
355 } | |
356 } | |
mlamouri (slow - plz ping)
2015/04/10 09:49:45
I would do:
return ParseString(application, "pla
benwells
2015/04/15 06:45:22
Done.
| |
357 | |
358 GURL ManifestParser::ParseRelatedApplicationURL( | |
359 const base::DictionaryValue& application) { | |
360 return ParseURL(application, "url", manifest_url_); | |
361 } | |
362 | |
363 base::NullableString16 ManifestParser::ParseRelatedApplicationId( | |
364 const base::DictionaryValue& application) { | |
365 return ParseString(application, "id", Trim); | |
366 } | |
367 | |
368 std::vector<Manifest::RelatedApplication> | |
369 ManifestParser::ParseRelatedApplications( | |
370 const base::DictionaryValue& dictionary) { | |
371 std::vector<Manifest::RelatedApplication> applications; | |
372 if (!dictionary.HasKey("related_applications")) | |
373 return applications; | |
374 | |
375 const base::ListValue* applications_list = nullptr; | |
376 if (!dictionary.GetList("related_applications", &applications_list)) { | |
377 errors_.push_back( | |
378 GetErrorPrefix() + | |
379 "property 'related_applications' ignored, type array expected."); | |
380 return applications; | |
381 } | |
382 | |
383 for (size_t i = 0; i < applications_list->GetSize(); ++i) { | |
384 const base::DictionaryValue* application_dictionary = nullptr; | |
385 if (!applications_list->GetDictionary(i, &application_dictionary)) | |
386 continue; | |
387 | |
388 Manifest::RelatedApplication application; | |
389 application.platform = | |
390 ParseRelatedApplicationPlatform(*application_dictionary); | |
391 // "If platform is undefined, move onto the next item if any are left." | |
392 // No error needs to be reported here, as it will have been reported in | |
393 // ParseRelatedApplicationPlatform. | |
394 if (application.platform == | |
395 Manifest::RELATED_APPLICATION_PLATFORM_UNSPECIFIED) { | |
396 continue; | |
397 } | |
398 | |
399 application.id = ParseRelatedApplicationId(*application_dictionary); | |
400 application.url = ParseRelatedApplicationURL(*application_dictionary); | |
401 // "If both id and url are undefined, move onto the next item if any are | |
402 // left." | |
403 if (application.url.is_empty() && application.id.is_null()) { | |
404 errors_.push_back( | |
405 GetErrorPrefix() + | |
406 "one of 'url' or 'id' is required, related application ignored."); | |
407 continue; | |
408 } | |
409 | |
410 applications.push_back(application); | |
411 } | |
412 | |
413 return applications; | |
414 } | |
415 | |
416 bool ManifestParser::ParsePreferRelatedApplications( | |
417 const base::DictionaryValue& dictionary) { | |
418 return ParseBoolean(dictionary, "prefer_related_applications", false); | |
419 } | |
420 | |
337 base::NullableString16 ManifestParser::ParseGCMSenderID( | 421 base::NullableString16 ManifestParser::ParseGCMSenderID( |
338 const base::DictionaryValue& dictionary) { | 422 const base::DictionaryValue& dictionary) { |
339 return ParseString(dictionary, "gcm_sender_id", Trim); | 423 return ParseString(dictionary, "gcm_sender_id", Trim); |
340 } | 424 } |
341 | 425 |
342 bool ManifestParser::ParseGCMUserVisibleOnly( | 426 bool ManifestParser::ParseGCMUserVisibleOnly( |
343 const base::DictionaryValue& dictionary) { | 427 const base::DictionaryValue& dictionary) { |
344 return ParseBoolean(dictionary, "gcm_user_visible_only", false); | 428 return ParseBoolean(dictionary, "gcm_user_visible_only", false); |
345 } | 429 } |
346 | 430 |
347 } // namespace content | 431 } // namespace content |
OLD | NEW |