Index: content/renderer/manifest/manifest_parser.cc |
diff --git a/content/renderer/manifest/manifest_parser.cc b/content/renderer/manifest/manifest_parser.cc |
index 19b69a540278b1782cda702ed986fbe0e91f453b..b7b7d5a86467bc85dce435dc097e935362ba5234 100644 |
--- a/content/renderer/manifest/manifest_parser.cc |
+++ b/content/renderer/manifest/manifest_parser.cc |
@@ -11,23 +11,38 @@ |
#include "base/values.h" |
#include "content/public/common/manifest.h" |
+namespace content { |
+ |
namespace { |
-// Parses the 'name' field of the manifest, as defined in: |
-// http://w3c.github.io/manifest/#dfn-steps-for-processing-the-name-member |
-// Returns the parsed string if any, a null string if the parsing failed. |
-base::NullableString16 ParseName(const base::DictionaryValue& dictionary) { |
- if (!dictionary.HasKey("name")) |
+enum TrimType { |
+ Trim, |
+ NoTrim |
+}; |
+ |
+base::NullableString16 ParseString(const base::DictionaryValue& dictionary, |
+ const std::string& key, |
+ TrimType trim) { |
+ if (!dictionary.HasKey(key)) |
return base::NullableString16(); |
- base::string16 name; |
- if (!dictionary.GetString("name", &name)) { |
- // TODO(mlamouri): provide a custom message to the developer console. |
+ base::string16 value; |
+ if (!dictionary.GetString(key, &value)) { |
+ // TODO(mlamouri): provide a custom message to the developer console about |
+ // the property being incorrectly set. |
return base::NullableString16(); |
} |
- base::TrimWhitespace(name, base::TRIM_ALL, &name); |
- return base::NullableString16(name, false); |
+ if (trim == Trim) |
+ base::TrimWhitespace(value, base::TRIM_ALL, &value); |
+ return base::NullableString16(value, false); |
+} |
+ |
+// Parses the 'name' field of the manifest, as defined in: |
+// http://w3c.github.io/manifest/#dfn-steps-for-processing-the-name-member |
+// Returns the parsed string if any, a null string if the parsing failed. |
+base::NullableString16 ParseName(const base::DictionaryValue& dictionary) { |
+ return ParseString(dictionary, "name", Trim); |
} |
// Parses the 'short_name' field of the manifest, as defined in: |
@@ -35,17 +50,7 @@ base::NullableString16 ParseName(const base::DictionaryValue& dictionary) { |
// Returns the parsed string if any, a null string if the parsing failed. |
base::NullableString16 ParseShortName( |
const base::DictionaryValue& dictionary) { |
- if (!dictionary.HasKey("short_name")) |
- return base::NullableString16(); |
- |
- base::string16 short_name; |
- if (!dictionary.GetString("short_name", &short_name)) { |
- // TODO(mlamouri): provide a custom message to the developer console. |
- return base::NullableString16(); |
- } |
- |
- base::TrimWhitespace(short_name, base::TRIM_ALL, &short_name); |
- return base::NullableString16(short_name, false); |
+ return ParseString(dictionary, "short_name", Trim); |
} |
// Parses the 'start_url' field of the manifest, as defined in: |
@@ -54,16 +59,13 @@ base::NullableString16 ParseShortName( |
GURL ParseStartURL(const base::DictionaryValue& dictionary, |
const GURL& manifest_url, |
const GURL& document_url) { |
- if (!dictionary.HasKey("start_url")) |
- return GURL(); |
+ base::NullableString16 start_url_str = |
+ ParseString(dictionary, "start_url", NoTrim); |
- base::string16 start_url_str; |
- if (!dictionary.GetString("start_url", &start_url_str)) { |
- // TODO(mlamouri): provide a custom message to the developer console. |
+ if (start_url_str.is_null()) |
return GURL(); |
- } |
- GURL start_url = manifest_url.Resolve(start_url_str); |
+ GURL start_url = manifest_url.Resolve(start_url_str.string()); |
if (!start_url.is_valid()) |
return GURL(); |
@@ -75,9 +77,29 @@ GURL ParseStartURL(const base::DictionaryValue& dictionary, |
return start_url; |
} |
-} // anonymous namespace |
+// Parses the 'display' field of the manifest, as defined in: |
+// http://w3c.github.io/manifest/#dfn-steps-for-processing-the-display-member |
+// Returns the parsed DisplayMode if any, DISPLAY_MODE_UNSPECIFIED if the |
+// parsing failed. |
+Manifest::DisplayMode ParseDisplay(const base::DictionaryValue& dictionary) { |
+ base::NullableString16 display = ParseString(dictionary, "display", Trim); |
+ |
+ if (display.is_null()) |
+ return Manifest::DISPLAY_MODE_UNSPECIFIED; |
+ |
+ if (LowerCaseEqualsASCII(display.string(), "fullscreen")) |
+ return Manifest::DISPLAY_MODE_FULLSCREEN; |
+ else if (LowerCaseEqualsASCII(display.string(), "standalone")) |
+ return Manifest::DISPLAY_MODE_STANDALONE; |
+ else if (LowerCaseEqualsASCII(display.string(), "minimal-ui")) |
+ return Manifest::DISPLAY_MODE_MINIMAL_UI; |
+ else if (LowerCaseEqualsASCII(display.string(), "browser")) |
+ return Manifest::DISPLAY_MODE_BROWSER; |
+ else |
+ return Manifest::DISPLAY_MODE_UNSPECIFIED; |
+} |
-namespace content { |
+} // anonymous namespace |
Manifest ManifestParser::Parse(const base::StringPiece& json, |
const GURL& manifest_url, |
@@ -106,6 +128,7 @@ Manifest ManifestParser::Parse(const base::StringPiece& json, |
manifest.name = ParseName(*dictionary); |
manifest.short_name = ParseShortName(*dictionary); |
manifest.start_url = ParseStartURL(*dictionary, manifest_url, document_url); |
+ manifest.display = ParseDisplay(*dictionary); |
return manifest; |
} |