| Index: content/renderer/manifest/manifest_parser.cc
|
| diff --git a/content/renderer/manifest/manifest_parser.cc b/content/renderer/manifest/manifest_parser.cc
|
| index 3e08f8c55f995181d8467dd7cf241feb9357d4b5..19b69a540278b1782cda702ed986fbe0e91f453b 100644
|
| --- a/content/renderer/manifest/manifest_parser.cc
|
| +++ b/content/renderer/manifest/manifest_parser.cc
|
| @@ -32,7 +32,6 @@ base::NullableString16 ParseName(const base::DictionaryValue& dictionary) {
|
|
|
| // Parses the 'short_name' field of the manifest, as defined in:
|
| // http://w3c.github.io/manifest/#dfn-steps-for-processing-the-short-name-member
|
| -// |short_name| is an out parameter that must not be null.
|
| // Returns the parsed string if any, a null string if the parsing failed.
|
| base::NullableString16 ParseShortName(
|
| const base::DictionaryValue& dictionary) {
|
| @@ -49,11 +48,40 @@ base::NullableString16 ParseShortName(
|
| return base::NullableString16(short_name, false);
|
| }
|
|
|
| +// Parses the 'start_url' field of the manifest, as defined in:
|
| +// http://w3c.github.io/manifest/#dfn-steps-for-processing-the-start_url-member
|
| +// Returns the parsed GURL if any, an empty GURL if the parsing failed.
|
| +GURL ParseStartURL(const base::DictionaryValue& dictionary,
|
| + const GURL& manifest_url,
|
| + const GURL& document_url) {
|
| + if (!dictionary.HasKey("start_url"))
|
| + return GURL();
|
| +
|
| + base::string16 start_url_str;
|
| + if (!dictionary.GetString("start_url", &start_url_str)) {
|
| + // TODO(mlamouri): provide a custom message to the developer console.
|
| + return GURL();
|
| + }
|
| +
|
| + GURL start_url = manifest_url.Resolve(start_url_str);
|
| + if (!start_url.is_valid())
|
| + return GURL();
|
| +
|
| + if (start_url.GetOrigin() != document_url.GetOrigin()) {
|
| + // TODO(mlamouri): provide a custom message to the developer console.
|
| + return GURL();
|
| + }
|
| +
|
| + return start_url;
|
| +}
|
| +
|
| } // anonymous namespace
|
|
|
| namespace content {
|
|
|
| -Manifest ManifestParser::Parse(const base::StringPiece& json) {
|
| +Manifest ManifestParser::Parse(const base::StringPiece& json,
|
| + const GURL& manifest_url,
|
| + const GURL& document_url) {
|
| scoped_ptr<base::Value> value(base::JSONReader::Read(json));
|
| if (!value) {
|
| // TODO(mlamouri): get the JSON parsing error and report it to the developer
|
| @@ -77,6 +105,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);
|
|
|
| return manifest;
|
| }
|
|
|