| 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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 87 |
| 88 return start_url; | 88 return start_url; |
| 89 } | 89 } |
| 90 | 90 |
| 91 // Parses the 'display' field of the manifest, as defined in: | 91 // Parses the 'display' field of the manifest, as defined in: |
| 92 // http://w3c.github.io/manifest/#dfn-steps-for-processing-the-display-member | 92 // http://w3c.github.io/manifest/#dfn-steps-for-processing-the-display-member |
| 93 // Returns the parsed DisplayMode if any, DISPLAY_MODE_UNSPECIFIED if the | 93 // Returns the parsed DisplayMode if any, DISPLAY_MODE_UNSPECIFIED if the |
| 94 // parsing failed. | 94 // parsing failed. |
| 95 Manifest::DisplayMode ParseDisplay(const base::DictionaryValue& dictionary) { | 95 Manifest::DisplayMode ParseDisplay(const base::DictionaryValue& dictionary) { |
| 96 base::NullableString16 display = ParseString(dictionary, "display", Trim); | 96 base::NullableString16 display = ParseString(dictionary, "display", Trim); |
| 97 | |
| 98 if (display.is_null()) | 97 if (display.is_null()) |
| 99 return Manifest::DISPLAY_MODE_UNSPECIFIED; | 98 return Manifest::DISPLAY_MODE_UNSPECIFIED; |
| 100 | 99 |
| 101 if (LowerCaseEqualsASCII(display.string(), "fullscreen")) | 100 if (LowerCaseEqualsASCII(display.string(), "fullscreen")) |
| 102 return Manifest::DISPLAY_MODE_FULLSCREEN; | 101 return Manifest::DISPLAY_MODE_FULLSCREEN; |
| 103 else if (LowerCaseEqualsASCII(display.string(), "standalone")) | 102 else if (LowerCaseEqualsASCII(display.string(), "standalone")) |
| 104 return Manifest::DISPLAY_MODE_STANDALONE; | 103 return Manifest::DISPLAY_MODE_STANDALONE; |
| 105 else if (LowerCaseEqualsASCII(display.string(), "minimal-ui")) | 104 else if (LowerCaseEqualsASCII(display.string(), "minimal-ui")) |
| 106 return Manifest::DISPLAY_MODE_MINIMAL_UI; | 105 return Manifest::DISPLAY_MODE_MINIMAL_UI; |
| 107 else if (LowerCaseEqualsASCII(display.string(), "browser")) | 106 else if (LowerCaseEqualsASCII(display.string(), "browser")) |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 icon.type = ParseIconType(*icon_dictionary); | 267 icon.type = ParseIconType(*icon_dictionary); |
| 269 icon.density = ParseIconDensity(*icon_dictionary); | 268 icon.density = ParseIconDensity(*icon_dictionary); |
| 270 icon.sizes = ParseIconSizes(*icon_dictionary); | 269 icon.sizes = ParseIconSizes(*icon_dictionary); |
| 271 | 270 |
| 272 icons.push_back(icon); | 271 icons.push_back(icon); |
| 273 } | 272 } |
| 274 | 273 |
| 275 return icons; | 274 return icons; |
| 276 } | 275 } |
| 277 | 276 |
| 277 // Parses the 'gcm_sender_id' field of the manifest. |
| 278 // This is a proprietary extension of the Web Manifest specification. |
| 279 // Returns the parsed string if any, a null string if the parsing failed. |
| 280 base::NullableString16 ParseGCMSenderID( |
| 281 const base::DictionaryValue& dictionary) { |
| 282 return ParseString(dictionary, "gcm_sender_id", Trim); |
| 283 } |
| 284 |
| 278 } // anonymous namespace | 285 } // anonymous namespace |
| 279 | 286 |
| 280 Manifest ManifestParser::Parse(const base::StringPiece& json, | 287 Manifest ManifestParser::Parse(const base::StringPiece& json, |
| 281 const GURL& manifest_url, | 288 const GURL& manifest_url, |
| 282 const GURL& document_url) { | 289 const GURL& document_url) { |
| 283 scoped_ptr<base::Value> value(base::JSONReader::Read(json)); | 290 scoped_ptr<base::Value> value(base::JSONReader::Read(json)); |
| 284 if (!value) { | 291 if (!value) { |
| 285 // TODO(mlamouri): get the JSON parsing error and report it to the developer | 292 // TODO(mlamouri): get the JSON parsing error and report it to the developer |
| 286 // console. | 293 // console. |
| 287 return Manifest(); | 294 return Manifest(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 300 } | 307 } |
| 301 | 308 |
| 302 Manifest manifest; | 309 Manifest manifest; |
| 303 | 310 |
| 304 manifest.name = ParseName(*dictionary); | 311 manifest.name = ParseName(*dictionary); |
| 305 manifest.short_name = ParseShortName(*dictionary); | 312 manifest.short_name = ParseShortName(*dictionary); |
| 306 manifest.start_url = ParseStartURL(*dictionary, manifest_url, document_url); | 313 manifest.start_url = ParseStartURL(*dictionary, manifest_url, document_url); |
| 307 manifest.display = ParseDisplay(*dictionary); | 314 manifest.display = ParseDisplay(*dictionary); |
| 308 manifest.orientation = ParseOrientation(*dictionary); | 315 manifest.orientation = ParseOrientation(*dictionary); |
| 309 manifest.icons = ParseIcons(*dictionary, manifest_url); | 316 manifest.icons = ParseIcons(*dictionary, manifest_url); |
| 317 manifest.gcm_sender_id = ParseGCMSenderID(*dictionary); |
| 310 | 318 |
| 311 return manifest; | 319 return manifest; |
| 312 } | 320 } |
| 313 | 321 |
| 314 } // namespace content | 322 } // namespace content |
| OLD | NEW |