libchromeos: Add error location informaion to chromeos::Error
The error information logged always appears to come from error.cc
file in libchormeos since that's where LOG(ERROR) statement is.
Added the ability to pass in the actual source of the error by
using tracked_objects::Location parameter and "FROM_HERE" macros
used in base::TaskRunner-based classes.
While all the system log messages looked like this:
[ERROR:error.cc(15)] Domain=peerd, Code=service.info, Message=Invalid service key.
Now they appear as this:
ERROR:service.cc(155)] IsValidServiceInfo(...): Domain=peerd, Code=service.info, Message=Invalid service key.
We report the actual source file and line number where the error is
coming from, as well as the function name.
BUG=None
TEST=FEATURES=test emerge-link libchromeos buffet lorgnette peerd privetd
Change-Id: I647997c24d61a03f3b481e4c9ca336c90e99e9a3
Reviewed-on: https://chromium-review.googlesource.com/229071
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/commands/command_dictionary.cc b/buffet/commands/command_dictionary.cc
index 51ffb3d..98ffefc 100644
--- a/buffet/commands/command_dictionary.cc
+++ b/buffet/commands/command_dictionary.cc
@@ -36,7 +36,7 @@
std::string package_name = package_iter.key();
const base::DictionaryValue* package_value = nullptr;
if (!package_iter.value().GetAsDictionary(&package_value)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kTypeMismatch,
"Expecting an object for package '%s'",
package_name.c_str());
@@ -48,7 +48,7 @@
std::string command_name = command_iter.key();
if (command_name.empty()) {
chromeos::Error::AddToPrintf(
- error, errors::commands::kDomain,
+ error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidCommandName,
"Unnamed command encountered in package '%s'",
package_name.c_str());
@@ -56,7 +56,8 @@
}
const base::DictionaryValue* command_value = nullptr;
if (!command_iter.value().GetAsDictionary(&command_value)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ errors::commands::kDomain,
errors::commands::kTypeMismatch,
"Expecting an object for command '%s'",
command_name.c_str());
@@ -71,7 +72,7 @@
if (!command_value->GetDictionaryWithoutPathExpansion(
commands::attributes::kCommand_Parameters, &command_schema_def)) {
chromeos::Error::AddToPrintf(
- error, errors::commands::kDomain,
+ error, FROM_HERE, errors::commands::kDomain,
errors::commands::kPropertyMissing,
"Command definition '%s' is missing property '%s'",
full_command_name.c_str(),
@@ -93,7 +94,7 @@
if (!base_def) {
if (command_name.front() != '_') {
chromeos::Error::AddToPrintf(
- error, errors::commands::kDomain,
+ error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidCommandName,
"The name of custom command '%s' in package '%s'"
" must start with '_'",
@@ -105,7 +106,8 @@
auto command_schema = std::make_shared<ObjectSchema>();
if (!command_schema->FromJson(command_schema_def, base_def, error)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ errors::commands::kDomain,
errors::commands::kInvalidObjectSchema,
"Invalid definition for command '%s'",
full_command_name.c_str());
@@ -128,7 +130,7 @@
auto iter = definitions_.find(pair.first);
if (iter != definitions_.end()) {
chromeos::Error::AddToPrintf(
- error, errors::commands::kDomain,
+ error, FROM_HERE, errors::commands::kDomain,
errors::commands::kDuplicateCommandDef,
"Definition for command '%s' overrides an earlier "
"definition in category '%s'",
diff --git a/buffet/commands/command_instance.cc b/buffet/commands/command_instance.cc
index c83b48a..6cde43e 100644
--- a/buffet/commands/command_instance.cc
+++ b/buffet/commands/command_instance.cc
@@ -63,7 +63,8 @@
¶ms_value)) {
// Make sure the "parameters" property is actually an object.
if (!params_value->GetAsDictionary(¶ms)) {
- chromeos::Error::AddToPrintf(error, chromeos::errors::json::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"Property '%s' must be a JSON object",
commands::attributes::kCommand_Parameters);
@@ -93,7 +94,7 @@
// Get the command JSON object from the value.
const base::DictionaryValue* json = nullptr;
if (!value->GetAsDictionary(&json)) {
- chromeos::Error::AddTo(error, chromeos::errors::json::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"Command instance is not a JSON object");
return instance;
@@ -103,7 +104,7 @@
std::string command_name;
if (!json->GetStringWithoutPathExpansion(commands::attributes::kCommand_Name,
&command_name)) {
- chromeos::Error::AddTo(error, errors::commands::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kPropertyMissing,
"Command name is missing");
return instance;
@@ -111,7 +112,7 @@
// Make sure we know how to handle the command with this name.
const CommandDefinition* command_def = dictionary.FindCommand(command_name);
if (!command_def) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidCommandName,
"Unknown command received: %s",
command_name.c_str());
@@ -120,7 +121,7 @@
native_types::Object parameters;
if (!GetCommandParameters(json, command_def, ¶meters, error)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kCommandFailed,
"Failed to validate command '%s'",
command_name.c_str());
diff --git a/buffet/commands/object_schema.cc b/buffet/commands/object_schema.cc
index b71b467..41e7639 100644
--- a/buffet/commands/object_schema.cc
+++ b/buffet/commands/object_schema.cc
@@ -64,7 +64,7 @@
if (PropType::GetTypeFromTypeString(type_name, &type))
prop = PropType::Create(type);
if (!prop) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kUnknownType,
"Unknown type %s for parameter %s",
type_name.c_str(), prop_name.c_str());
@@ -74,7 +74,7 @@
static bool ErrorInvalidTypeInfo(const std::string& prop_name,
chromeos::ErrorPtr* error) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kNoTypeInfo,
"Unable to determine parameter type for %s",
prop_name.c_str());
@@ -100,7 +100,7 @@
return PropFromJsonObject(prop_name, value, base_schema, properties,
error);
}
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidPropDef,
"Invalid parameter definition for %s",
prop_name.c_str());
@@ -119,7 +119,7 @@
return false;
base::DictionaryValue empty;
if (!prop->FromJson(&empty, base_schema, error)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidPropDef,
"Error in definition of property '%s'",
prop_name.c_str());
@@ -179,7 +179,7 @@
array_object.SetWithoutPathExpansion(commands::attributes::kOneOf_Enum,
list->DeepCopy());
if (!prop->FromJson(&array_object, base_schema, error)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidPropDef,
"Error in definition of property '%s'",
prop_name.c_str());
@@ -262,7 +262,7 @@
if (!prop)
return false;
if (!prop->FromJson(dict, base_schema, error)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidPropDef,
"Error in definition of property '%s'",
prop_name.c_str());
diff --git a/buffet/commands/prop_constraints.cc b/buffet/commands/prop_constraints.cc
index c9008d2..d44700d 100644
--- a/buffet/commands/prop_constraints.cc
+++ b/buffet/commands/prop_constraints.cc
@@ -15,7 +15,7 @@
const std::string& val,
const std::string& limit) {
chromeos::Error::AddToPrintf(
- error, errors::commands::kDomain,
+ error, FROM_HERE, errors::commands::kDomain,
errors::commands::kOutOfRange,
"Value %s is out of range. It must not be less than %s",
val.c_str(), limit.c_str());
@@ -26,7 +26,7 @@
const std::string& val,
const std::string& limit) {
chromeos::Error::AddToPrintf(
- error, errors::commands::kDomain,
+ error, FROM_HERE, errors::commands::kDomain,
errors::commands::kOutOfRange,
"Value %s is out of range. It must not be greater than %s",
val.c_str(), limit.c_str());
@@ -36,7 +36,7 @@
bool Constraint::ReportErrorNotOneOf(chromeos::ErrorPtr* error,
const std::string& val,
const std::vector<std::string>& values) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kOutOfRange,
"Value %s is invalid. Expected one of [%s]",
val.c_str(),
@@ -84,11 +84,11 @@
int length = static_cast<int>(str.size());
if (length < limit_.value) {
if (limit_.value == 1) {
- chromeos::Error::AddTo(error, errors::commands::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kOutOfRange,
"String must not be empty");
} else {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kOutOfRange,
"String must be at least %d characters long,"
" actual length of string '%s' is %d",
@@ -116,7 +116,7 @@
const std::string& str = value.GetString()->GetValue();
int length = static_cast<int>(str.size());
if (length > limit_.value) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kOutOfRange,
"String must be no more than %d character(s) "
"long, actual length of string '%s' is %d",
diff --git a/buffet/commands/prop_types.cc b/buffet/commands/prop_types.cc
index 08410cc..5a8b10f 100644
--- a/buffet/commands/prop_types.cc
+++ b/buffet/commands/prop_types.cc
@@ -86,7 +86,7 @@
const PropType* base_schema,
chromeos::ErrorPtr* error) {
if (base_schema && base_schema->GetType() != GetType()) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kPropTypeChanged,
"Redefining a property of type %s as %s",
base_schema->GetTypeAsString().c_str(),
@@ -113,7 +113,7 @@
while (!iter.IsAtEnd()) {
std::string key = iter.key();
if (processed_keys.find(key) == processed_keys.end()) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kUnknownProperty,
"Unexpected property '%s'", key.c_str());
return false;
@@ -218,7 +218,7 @@
}
bool PropType::GenerateErrorValueTypeMismatch(chromeos::ErrorPtr* error) const {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kTypeMismatch,
"Unable to convert value to type '%s'",
GetTypeAsString().c_str());
@@ -232,7 +232,7 @@
const base::ListValue* list = nullptr;
if (!value->GetListWithoutPathExpansion(commands::attributes::kOneOf_Enum,
&list)) {
- chromeos::Error::AddTo(error, errors::commands::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kTypeMismatch,
"Expecting an array");
return std::shared_ptr<Constraint>();
@@ -426,7 +426,7 @@
processed_keys->insert(kObject_Properties);
auto object_schema = std::make_shared<ObjectSchema>();
if (!object_schema->FromJson(props, base_object_schema.get(), error)) {
- chromeos::Error::AddTo(error, errors::commands::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidObjectSchema,
"Error parsing object property schema");
return false;
@@ -437,7 +437,7 @@
object_schema_.value = base_object_schema;
object_schema_.is_inherited = true;
} else {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidObjectSchema,
"Object type definition must include the "
"object schema ('%s' field not found)",
diff --git a/buffet/commands/schema_utils.cc b/buffet/commands/schema_utils.cc
index 8f64eec..8e83b1c 100644
--- a/buffet/commands/schema_utils.cc
+++ b/buffet/commands/schema_utils.cc
@@ -23,7 +23,7 @@
chromeos::ErrorPtr* error) {
std::string value_as_string;
base::JSONWriter::Write(value_in, &value_as_string);
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kTypeMismatch,
"Unable to convert value %s into %s",
value_as_string.c_str(), expected_type.c_str());
@@ -42,7 +42,7 @@
}
bool ErrorMissingProperty(chromeos::ErrorPtr* error, const char* param_name) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kPropertyMissing,
"Required parameter missing: %s", param_name);
return false;
@@ -129,7 +129,8 @@
CHECK(dict->GetWithoutPathExpansion(pair.first, ¶m_value))
<< "Unable to get parameter";
if (!value->FromJson(param_value, error)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ errors::commands::kDomain,
errors::commands::kInvalidPropValue,
"Invalid value for property '%s'",
pair.first.c_str());
@@ -153,7 +154,7 @@
std::string key = iter.key();
if (keys_processed.find(key) == keys_processed.end() &&
!object_schema->GetExtraPropertiesAllowed()) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kUnknownProperty,
"Unrecognized parameter '%s'", key.c_str());
return false;
@@ -166,7 +167,7 @@
const PropType* prop_type = pair.second->GetPropType();
CHECK(prop_type) << "Value property type must be available";
if (!prop_type->ValidateConstraints(*pair.second, error)) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidPropValue,
"Invalid value for property '%s'",
pair.first.c_str());
@@ -249,7 +250,8 @@
CHECK(prop_type) << "Value property type must be available";
auto prop_value = PropValueFromDBusVariant(prop_type, it->second, error);
if (!prop_value) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ errors::commands::kDomain,
errors::commands::kInvalidPropValue,
"Invalid value for property '%s'",
pair.first.c_str());
@@ -271,7 +273,8 @@
if (!type->GetObjectSchemaPtr()->GetExtraPropertiesAllowed()) {
for (const auto& pair : dict) {
if (keys_processed.find(pair.first) == keys_processed.end()) {
- chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ errors::commands::kDomain,
errors::commands::kUnknownProperty,
"Unrecognized property '%s'",
pair.first.c_str());
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index b925033..8fccc02 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -84,10 +84,10 @@
std::string error_code, error_message;
if (resp->GetString("error", &error_code) &&
resp->GetString("error_description", &error_message)) {
- chromeos::Error::AddTo(error, buffet::kErrorDomainOAuth2, error_code,
- error_message);
+ chromeos::Error::AddTo(error, FROM_HERE, buffet::kErrorDomainOAuth2,
+ error_code, error_message);
} else {
- chromeos::Error::AddTo(error, buffet::kErrorDomainOAuth2,
+ chromeos::Error::AddTo(error, FROM_HERE, buffet::kErrorDomainOAuth2,
"unexpected_response", "Unexpected OAuth error");
}
}
@@ -97,8 +97,8 @@
}
inline void SetUnexpectedError(chromeos::ErrorPtr* error) {
- chromeos::Error::AddTo(error, buffet::kErrorDomainGCD, "unexpected_response",
- "Unexpected GCD error");
+ chromeos::Error::AddTo(error, FROM_HERE, buffet::kErrorDomainGCD,
+ "unexpected_response", "Unexpected GCD error");
}
void ParseGCDError(const base::DictionaryValue* json,
@@ -125,7 +125,7 @@
std::string error_code, error_message;
if (error_object->GetString("reason", &error_code) &&
error_object->GetString("message", &error_message)) {
- chromeos::Error::AddTo(error, buffet::kErrorDomainGCDServer,
+ chromeos::Error::AddTo(error, FROM_HERE, buffet::kErrorDomainGCDServer,
error_code, error_message);
} else {
SetUnexpectedError(error);
@@ -264,7 +264,8 @@
device_id_.empty() ||
device_robot_account_.empty()) {
LOG(INFO) << "No valid device registration record found.";
- chromeos::Error::AddTo(error, kErrorDomainGCD, "device_not_registered",
+ chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainGCD,
+ "device_not_registered",
"No valid device registration record found");
return false;
}
@@ -302,7 +303,7 @@
access_token_.empty() ||
expires_in <= 0) {
LOG(ERROR) << "Access token unavailable.";
- chromeos::Error::AddTo(error, kErrorDomainOAuth2,
+ chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainOAuth2,
"unexpected_server_response",
"Access token unavailable");
return false;
@@ -370,7 +371,8 @@
if (!param_value.empty())
return true;
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet, "missing_parameter",
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
+ "missing_parameter",
"Parameter %s not specified",
param_name.c_str());
return false;
@@ -434,7 +436,8 @@
if (!json_resp->GetString("robotAccountEmail", &device_robot_account_) ||
!json_resp->GetString("robotAccountAuthorizationCode", &auth_code) ||
!json_resp->GetString("deviceDraft.id", &device_id_)) {
- chromeos::Error::AddTo(error, kErrorDomainGCD, "unexpected_response",
+ chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainGCD,
+ "unexpected_response",
"Device account missing in response");
return std::string();
}
@@ -460,7 +463,8 @@
access_token_.empty() ||
refresh_token_.empty() ||
expires_in <= 0) {
- chromeos::Error::AddTo(error, kErrorDomainGCD, "unexpected_response",
+ chromeos::Error::AddTo(error, FROM_HERE,
+ kErrorDomainGCD, "unexpected_response",
"Device access_token missing in response");
return std::string();
}
@@ -559,7 +563,7 @@
// TODO(antonm): Support Retry-After header.
on_retriable_failure();
} else {
- chromeos::Error::AddTo(&error, chromeos::errors::http::kDomain,
+ chromeos::Error::AddTo(&error, FROM_HERE, chromeos::errors::http::kDomain,
std::to_string(status_code),
response->GetStatusText());
PostToCallback(errorback, std::move(error));
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 9c1cd94..abe687c 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -172,7 +172,7 @@
std::unique_ptr<base::Value> value(base::JSONReader::ReadAndReturnError(
json_command, base::JSON_PARSE_RFC, nullptr, &error_message));
if (!value) {
- response->ReplyWithError(chromeos::errors::json::kDomain,
+ response->ReplyWithError(FROM_HERE, chromeos::errors::json::kDomain,
chromeos::errors::json::kParseError,
error_message);
return;
diff --git a/buffet/states/state_manager.cc b/buffet/states/state_manager.cc
index 7511928..80fdc8c 100644
--- a/buffet/states/state_manager.cc
+++ b/buffet/states/state_manager.cc
@@ -88,20 +88,20 @@
bool split = chromeos::string_utils::SplitAtFirst(
full_property_name, '.', &package_name, &property_name);
if (full_property_name.empty() || (split && property_name.empty())) {
- chromeos::Error::AddTo(error, errors::state::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, errors::state::kDomain,
errors::state::kPropertyNameMissing,
"Property name is missing");
return false;
}
if (!split || package_name.empty()) {
- chromeos::Error::AddTo(error, errors::state::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, errors::state::kDomain,
errors::state::kPackageNameMissing,
"Package name is missing in the property name");
return false;
}
StatePackage* package = FindPackage(package_name);
if (package == nullptr) {
- chromeos::Error::AddToPrintf(error, errors::state::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::state::kDomain,
errors::state::kPropertyNotDefined,
"Unknown state property package '%s'",
package_name.c_str());
@@ -126,13 +126,15 @@
while (!iter.IsAtEnd()) {
std::string package_name = iter.key();
if (package_name.empty()) {
- chromeos::Error::AddTo(error, kErrorDomainBuffet, kInvalidPackageError,
+ chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet,
+ kInvalidPackageError,
"State package name is empty");
return false;
}
const base::DictionaryValue* package_dict = nullptr;
if (!iter.value().GetAsDictionary(&package_dict)) {
- chromeos::Error::AddToPrintf(error, chromeos::errors::json::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"State package '%s' must be an object",
package_name.c_str());
@@ -158,7 +160,7 @@
return false;
std::string category = json_file_path.BaseName().RemoveExtension().value();
if (category == kDefaultCategory) {
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kInvalidCategoryError,
"Invalid state category specified in '%s'",
json_file_path.value().c_str());
@@ -166,7 +168,7 @@
}
if (!LoadStateDefinition(*json, category, error)) {
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kFileReadError,
"Failed to load file '%s'",
json_file_path.value().c_str());
@@ -182,7 +184,7 @@
if (!json)
return false;
if (!LoadStateDefinition(*json, kDefaultCategory, error)) {
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kFileReadError,
"Failed to load file '%s'",
json_file_path.value().c_str());
@@ -197,13 +199,15 @@
while (!iter.IsAtEnd()) {
std::string package_name = iter.key();
if (package_name.empty()) {
- chromeos::Error::AddTo(error, kErrorDomainBuffet, kInvalidPackageError,
+ chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet,
+ kInvalidPackageError,
"State package name is empty");
return false;
}
const base::DictionaryValue* package_dict = nullptr;
if (!iter.value().GetAsDictionary(&package_dict)) {
- chromeos::Error::AddToPrintf(error, chromeos::errors::json::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"State package '%s' must be an object",
package_name.c_str());
@@ -212,7 +216,7 @@
StatePackage* package = FindPackage(package_name);
if (package == nullptr) {
chromeos::Error::AddToPrintf(
- error, chromeos::errors::json::kDomain,
+ error, FROM_HERE, chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"Providing values for undefined state package '%s'",
package_name.c_str());
@@ -232,7 +236,7 @@
if (!json)
return false;
if (!LoadStateDefaults(*json, error)) {
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kFileReadError,
"Failed to load file '%s'",
json_file_path.value().c_str());
diff --git a/buffet/states/state_package.cc b/buffet/states/state_package.cc
index ce71c50..8893ebb 100644
--- a/buffet/states/state_package.cc
+++ b/buffet/states/state_package.cc
@@ -27,7 +27,7 @@
// Scan first to make sure we have no property redefinitions.
for (const auto& pair : schema.GetProps()) {
if (types_.GetProp(pair.first)) {
- chromeos::Error::AddToPrintf(error, errors::state::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::state::kDomain,
errors::state::kPropertyRedefinition,
"State property '%s.%s' is already defined",
name_.c_str(), pair.first.c_str());
@@ -52,7 +52,7 @@
std::string property_name = iter.key();
auto it = values_.find(property_name);
if (it == values_.end()) {
- chromeos::Error::AddToPrintf(error, errors::state::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::state::kDomain,
errors::state::kPropertyNotDefined,
"State property '%s.%s' is not defined",
name_.c_str(), property_name.c_str());
@@ -85,7 +85,7 @@
chromeos::ErrorPtr* error) const {
auto it = values_.find(property_name);
if (it == values_.end()) {
- chromeos::Error::AddToPrintf(error, errors::state::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::state::kDomain,
errors::state::kPropertyNotDefined,
"State property '%s.%s' is not defined",
name_.c_str(), property_name.c_str());
@@ -99,7 +99,7 @@
chromeos::ErrorPtr* error) {
auto it = values_.find(property_name);
if (it == values_.end()) {
- chromeos::Error::AddToPrintf(error, errors::state::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::state::kDomain,
errors::state::kPropertyNotDefined,
"State property '%s.%s' is not defined",
name_.c_str(), property_name.c_str());
diff --git a/buffet/utils.cc b/buffet/utils.cc
index 1a39984..9cd7271 100644
--- a/buffet/utils.cc
+++ b/buffet/utils.cc
@@ -23,8 +23,8 @@
std::unique_ptr<const base::DictionaryValue> result;
std::string json_string;
if (!base::ReadFileToString(json_file_path, &json_string)) {
- chromeos::errors::system::AddSystemError(error, errno);
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::errors::system::AddSystemError(error, FROM_HERE, errno);
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kFileReadError,
"Failed to read file '%s'",
json_file_path.value().c_str());
@@ -34,7 +34,8 @@
base::Value* value = base::JSONReader::ReadAndReturnError(
json_string, base::JSON_PARSE_RFC, nullptr, &error_message);
if (!value) {
- chromeos::Error::AddToPrintf(error, chromeos::errors::json::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ chromeos::errors::json::kDomain,
chromeos::errors::json::kParseError,
"Error parsing content of JSON file '%s': %s",
json_file_path.value().c_str(),
@@ -44,7 +45,8 @@
const base::DictionaryValue* dict_value = nullptr;
if (!value->GetAsDictionary(&dict_value)) {
delete value;
- chromeos::Error::AddToPrintf(error, chromeos::errors::json::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"Content of file '%s' is not a JSON object",
json_file_path.value().c_str());