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

Unified Diff: content/renderer/manifest/manifest_parser.cc

Issue 563083004: Add support for 'display' in Manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@add_to_homescreen_manifest
Patch Set: review comments Created 6 years, 3 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/public/common/manifest.cc ('k') | content/renderer/manifest/manifest_parser_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
« no previous file with comments | « content/public/common/manifest.cc ('k') | content/renderer/manifest/manifest_parser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698