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

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

Issue 1571633002: Pass Manifest JSON paser error line and column number to console. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add comments Created 4 years, 11 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/renderer/manifest/manifest_parser.h ('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 b43e712dfb675fc93a0cf6a0b67ab62c8bead5aa..8816ecba48ec34673037844b4d1ba2529ac3d9ff 100644
--- a/content/renderer/manifest/manifest_parser.cc
+++ b/content/renderer/manifest/manifest_parser.cc
@@ -105,12 +105,15 @@ ManifestParser::~ManifestParser() {
}
void ManifestParser::Parse() {
- std::string parse_error;
+ std::string error_msg;
+ int error_line = 0;
+ int error_column = 0;
scoped_ptr<base::Value> value = base::JSONReader::ReadAndReturnError(
- data_, base::JSON_PARSE_RFC, nullptr, &parse_error);
+ data_, base::JSON_PARSE_RFC, nullptr, &error_msg, &error_line,
+ &error_column);
if (!value) {
- errors_.push_back(GetErrorPrefix() + parse_error);
+ AddErrorInfo(GetErrorPrefix() + error_msg, error_line, error_column);
ManifestUmaUtil::ParseFailed();
failed_ = true;
return;
@@ -118,8 +121,8 @@ void ManifestParser::Parse() {
base::DictionaryValue* dictionary = nullptr;
if (!value->GetAsDictionary(&dictionary)) {
- errors_.push_back(GetErrorPrefix() +
- "root element must be a valid JSON object.");
+ AddErrorInfo(GetErrorPrefix() +
+ "root element must be a valid JSON object.");
ManifestUmaUtil::ParseFailed();
failed_ = true;
return;
@@ -146,7 +149,8 @@ const Manifest& ManifestParser::manifest() const {
return manifest_;
}
-const std::vector<std::string>& ManifestParser::errors() const {
+const std::vector<scoped_ptr<ManifestParser::ErrorInfo>>&
+ManifestParser::errors() const {
return errors_;
}
@@ -162,8 +166,8 @@ bool ManifestParser::ParseBoolean(const base::DictionaryValue& dictionary,
bool value;
if (!dictionary.GetBoolean(key, &value)) {
- errors_.push_back(GetErrorPrefix() +
- "property '" + key + "' ignored, type boolean expected.");
+ AddErrorInfo(GetErrorPrefix() + "property '" + key + "' ignored, type " +
+ "boolean expected.");
return default_value;
}
@@ -179,8 +183,8 @@ base::NullableString16 ManifestParser::ParseString(
base::string16 value;
if (!dictionary.GetString(key, &value)) {
- errors_.push_back(GetErrorPrefix() +
- "property '" + key + "' ignored, type string expected.");
+ AddErrorInfo(GetErrorPrefix() + "property '" + key + "' ignored, type " +
+ "string expected.");
return base::NullableString16();
}
@@ -198,10 +202,9 @@ int64_t ManifestParser::ParseColor(
blink::WebColor color;
if (!blink::WebCSSParser::parseColor(&color, parsed_color.string())) {
- errors_.push_back(GetErrorPrefix() +
- "property '" + key + "' ignored, '" +
- base::UTF16ToUTF8(parsed_color.string()) +
- "' is not a valid color.");
+ AddErrorInfo(GetErrorPrefix() + "property '" + key + "' ignored, '" +
+ base::UTF16ToUTF8(parsed_color.string()) + "' is not a " +
+ "valid color.");
return Manifest::kInvalidOrMissingColor;
}
@@ -239,8 +242,8 @@ GURL ManifestParser::ParseStartURL(const base::DictionaryValue& dictionary) {
return GURL();
if (start_url.GetOrigin() != document_url_.GetOrigin()) {
- errors_.push_back(GetErrorPrefix() + "property 'start_url' ignored, should "
- "be same origin as document.");
+ AddErrorInfo(GetErrorPrefix() + "property 'start_url' ignored, should be " +
+ "same origin as document.");
return GURL();
}
@@ -262,7 +265,7 @@ blink::WebDisplayMode ManifestParser::ParseDisplay(
else if (base::LowerCaseEqualsASCII(display.string(), "browser"))
return blink::WebDisplayModeBrowser;
else {
- errors_.push_back(GetErrorPrefix() + "unknown 'display' value ignored.");
+ AddErrorInfo(GetErrorPrefix() + "unknown 'display' value ignored.");
return blink::WebDisplayModeUndefined;
}
}
@@ -296,8 +299,7 @@ blink::WebScreenOrientationLockType ManifestParser::ParseOrientation(
"portrait-secondary"))
return blink::WebScreenOrientationLockPortraitSecondary;
else {
- errors_.push_back(GetErrorPrefix() +
- "unknown 'orientation' value ignored.");
+ AddErrorInfo(GetErrorPrefix() + "unknown 'orientation' value ignored.");
return blink::WebScreenOrientationLockDefault;
}
}
@@ -317,8 +319,8 @@ double ManifestParser::ParseIconDensity(const base::DictionaryValue& icon) {
return Manifest::Icon::kDefaultDensity;
if (!icon.GetDouble("density", &density) || density <= 0) {
- errors_.push_back(GetErrorPrefix() +
- "icon 'density' ignored, must be float greater than 0.");
+ AddErrorInfo(GetErrorPrefix() +
+ "icon 'density' ignored, must be float greater than 0.");
return Manifest::Icon::kDefaultDensity;
}
return density;
@@ -333,7 +335,7 @@ std::vector<gfx::Size> ManifestParser::ParseIconSizes(
std::vector<gfx::Size> sizes = ParseIconSizesHTML(sizes_str.string());
if (sizes.empty()) {
- errors_.push_back(GetErrorPrefix() + "found icon with no valid size.");
+ AddErrorInfo(GetErrorPrefix() + "found icon with no valid size.");
}
return sizes;
}
@@ -346,8 +348,8 @@ std::vector<Manifest::Icon> ManifestParser::ParseIcons(
const base::ListValue* icons_list = nullptr;
if (!dictionary.GetList("icons", &icons_list)) {
- errors_.push_back(GetErrorPrefix() +
- "property 'icons' ignored, type array expected.");
+ AddErrorInfo(GetErrorPrefix() +
+ "property 'icons' ignored, type array expected.");
return icons;
}
@@ -395,7 +397,7 @@ ManifestParser::ParseRelatedApplications(
const base::ListValue* applications_list = nullptr;
if (!dictionary.GetList("related_applications", &applications_list)) {
- errors_.push_back(
+ AddErrorInfo(
GetErrorPrefix() +
"property 'related_applications' ignored, type array expected.");
return applications;
@@ -411,7 +413,7 @@ ManifestParser::ParseRelatedApplications(
ParseRelatedApplicationPlatform(*application_dictionary);
// "If platform is undefined, move onto the next item if any are left."
if (application.platform.is_null()) {
- errors_.push_back(
+ AddErrorInfo(
GetErrorPrefix() +
"'platform' is a required field, related application ignored.");
continue;
@@ -422,7 +424,7 @@ ManifestParser::ParseRelatedApplications(
// "If both id and url are undefined, move onto the next item if any are
// left."
if (application.url.is_empty() && application.id.is_null()) {
- errors_.push_back(
+ AddErrorInfo(
GetErrorPrefix() +
"one of 'url' or 'id' is required, related application ignored.");
continue;
@@ -454,4 +456,10 @@ base::NullableString16 ManifestParser::ParseGCMSenderID(
return ParseString(dictionary, "gcm_sender_id", Trim);
}
+void ManifestParser::AddErrorInfo(const std::string& error_msg,
+ int error_line,
+ int error_column) {
+ errors_.push_back(
+ make_scoped_ptr(new ErrorInfo(error_msg, error_line, error_column)));
+}
} // namespace content
« no previous file with comments | « content/renderer/manifest/manifest_parser.h ('k') | content/renderer/manifest/manifest_parser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698