Change ErrorCode into an enum class.
This change is needed in order for us to be able to import ErrorCode
symbols from chromeos_update_engine into chromeos_update_manager.
Unfortunately, shifting from plain 'enum' into an 'enum class' means
that the compiler treats the new class as a distinct type from int,
which in turn means that plenty of seamless arithmetic/bitwise
operations we used for manipulating error code values throughout the
code needed to be retrofitted with static_cast operators.
In the future, we should consider imposing a proper abstraction on
update engine error codes that'll prevent mingling with value encoding
directly and prevent such nastiness. It'll also make things more
coherent (types, semantics) and safer.
BUG=chromium:358329
TEST=Unit tests.
Change-Id: Ie55fa566b764cdab6c4785d995fb6daee4cb32d3
Reviewed-on: https://chromium-review.googlesource.com/203209
Tested-by: Gilad Arnold <garnold@chromium.org>
Reviewed-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Gilad Arnold <garnold@chromium.org>
diff --git a/omaha_request_action.cc b/omaha_request_action.cc
index 9e43385..5955157 100644
--- a/omaha_request_action.cc
+++ b/omaha_request_action.cc
@@ -166,7 +166,8 @@
// is not success.
string error_code;
if (event->result != OmahaEvent::kResultSuccess) {
- error_code = base::StringPrintf(" errorcode=\"%d\"", event->error_code);
+ error_code = base::StringPrintf(" errorcode=\"%d\"",
+ static_cast<int>(event->error_code));
}
app_body = base::StringPrintf(
" <event eventtype=\"%d\" eventresult=\"%d\"%s></event>\n",
@@ -412,7 +413,7 @@
if (ping_only_ &&
!ShouldPing(ping_active_days_) &&
!ShouldPing(ping_roll_call_days_)) {
- processor_->ActionComplete(this, kErrorCodeSuccess);
+ processor_->ActionComplete(this, ErrorCode::kSuccess);
return;
}
@@ -535,7 +536,7 @@
scoped_ptr<xmlXPathObject, ScopedPtrXmlXPathObjectFree>
xpath_nodeset(GetNodeSet(doc, ConstXMLStr(kUpdatecheckNodeXpath)));
if (!xpath_nodeset.get()) {
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -603,7 +604,7 @@
// Get status.
if (!xmlHasProp(update_check_node, ConstXMLStr("status"))) {
LOG(ERROR) << "Omaha Response missing status";
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -612,13 +613,13 @@
LOG(INFO) << "No update.";
output_object->update_exists = false;
SetOutputObject(*output_object);
- completer->set_code(kErrorCodeSuccess);
+ completer->set_code(ErrorCode::kSuccess);
return false;
}
if (status != "ok") {
LOG(ERROR) << "Unknown Omaha response status: " << status;
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -634,7 +635,7 @@
scoped_ptr<xmlXPathObject, ScopedPtrXmlXPathObjectFree>
xpath_nodeset(GetNodeSet(doc, ConstXMLStr(kUpdateUrlNodeXPath)));
if (!xpath_nodeset.get()) {
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -649,7 +650,7 @@
const string codebase(XmlGetProperty(url_node, "codebase"));
if (codebase.empty()) {
LOG(ERROR) << "Omaha Response URL has empty codebase";
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
output_object->payload_urls.push_back(codebase);
@@ -668,7 +669,7 @@
scoped_ptr<xmlXPathObject, ScopedPtrXmlXPathObjectFree>
xpath_nodeset(GetNodeSet(doc, ConstXMLStr(kPackageNodeXPath)));
if (!xpath_nodeset.get()) {
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -687,7 +688,7 @@
LOG(INFO) << "Omaha Response package name = " << package_name;
if (package_name.empty()) {
LOG(ERROR) << "Omaha Response has empty package name";
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -701,7 +702,7 @@
off_t size = ParseInt(XmlGetProperty(package_node, "size"));
if (size <= 0) {
LOG(ERROR) << "Omaha Response has invalid payload size: " << size;
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
output_object->size = size;
@@ -723,7 +724,7 @@
scoped_ptr<xmlXPathObject, ScopedPtrXmlXPathObjectFree>
xpath_manifest_nodeset(GetNodeSet(doc, ConstXMLStr(kManifestNodeXPath)));
if (!xpath_manifest_nodeset.get()) {
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -737,7 +738,7 @@
output_object->version = XmlGetProperty(manifest_node, kTagVersion);
if (output_object->version.empty()) {
LOG(ERROR) << "Omaha Response does not have version in manifest!";
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -748,7 +749,7 @@
scoped_ptr<xmlXPathObject, ScopedPtrXmlXPathObjectFree>
xpath_action_nodeset(GetNodeSet(doc, ConstXMLStr(kActionNodeXPath)));
if (!xpath_action_nodeset.get()) {
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -772,14 +773,14 @@
if (!pie_action_node) {
LOG(ERROR) << "Omaha Response has no postinstall event action";
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
output_object->hash = XmlGetProperty(pie_action_node, kTagSha256);
if (output_object->hash.empty()) {
LOG(ERROR) << "Omaha Response has empty sha256 value";
- completer->set_code(kErrorCodeOmahaResponseInvalid);
+ completer->set_code(ErrorCode::kOmahaResponseInvalid);
return false;
}
@@ -830,7 +831,7 @@
LOG(INFO) << "Signalling Crash Reporter.";
utils::ScheduleCrashReporterUpload();
}
- completer.set_code(kErrorCodeSuccess);
+ completer.set_code(ErrorCode::kSuccess);
return;
}
@@ -842,7 +843,7 @@
code = 999;
}
completer.set_code(static_cast<ErrorCode>(
- kErrorCodeOmahaRequestHTTPResponseBase + code));
+ static_cast<int>(ErrorCode::kOmahaRequestHTTPResponseBase) + code));
return;
}
@@ -852,8 +853,8 @@
if (!doc.get()) {
LOG(ERROR) << "Omaha response not valid XML";
completer.set_code(response_buffer_.empty() ?
- kErrorCodeOmahaRequestEmptyResponseError :
- kErrorCodeOmahaRequestXMLParseError);
+ ErrorCode::kOmahaRequestEmptyResponseError :
+ ErrorCode::kOmahaRequestXMLParseError);
return;
}
@@ -870,7 +871,7 @@
if (!HasOutputPipe()) {
// Just set success to whether or not the http transfer succeeded,
// which must be true at this point in the code.
- completer.set_code(kErrorCodeSuccess);
+ completer.set_code(ErrorCode::kSuccess);
return;
}
@@ -882,7 +883,7 @@
if (ShouldIgnoreUpdate(output_object)) {
output_object.update_exists = false;
- completer.set_code(kErrorCodeOmahaUpdateIgnoredPerPolicy);
+ completer.set_code(ErrorCode::kOmahaUpdateIgnoredPerPolicy);
return;
}
@@ -942,7 +943,7 @@
if (ShouldDeferDownload(&output_object)) {
output_object.update_exists = false;
LOG(INFO) << "Ignoring Omaha updates as updates are deferred by policy.";
- completer.set_code(kErrorCodeOmahaUpdateDeferredPerPolicy);
+ completer.set_code(ErrorCode::kOmahaUpdateDeferredPerPolicy);
return;
}
@@ -950,10 +951,10 @@
output_object.update_exists = false;
LOG(INFO) << "Ignoring Omaha updates in order to backoff our retry "
<< "attempts";
- completer.set_code(kErrorCodeOmahaUpdateDeferredForBackoff);
+ completer.set_code(ErrorCode::kOmahaUpdateDeferredForBackoff);
return;
}
- completer.set_code(kErrorCodeSuccess);
+ completer.set_code(ErrorCode::kSuccess);
}
void OmahaRequestAction::OnLookupPayloadViaP2PCompleted(const string& url) {
@@ -1303,7 +1304,7 @@
// Regular update attempt.
switch (code) {
- case kErrorCodeSuccess:
+ case ErrorCode::kSuccess:
// OK, we parsed the response successfully but that does
// necessarily mean that an update is available.
if (HasOutputPipe()) {
@@ -1319,17 +1320,17 @@
}
break;
- case kErrorCodeOmahaUpdateIgnoredPerPolicy:
+ case ErrorCode::kOmahaUpdateIgnoredPerPolicy:
result = metrics::CheckResult::kUpdateAvailable;
reaction = metrics::CheckReaction::kIgnored;
break;
- case kErrorCodeOmahaUpdateDeferredPerPolicy:
+ case ErrorCode::kOmahaUpdateDeferredPerPolicy:
result = metrics::CheckResult::kUpdateAvailable;
reaction = metrics::CheckReaction::kDeferring;
break;
- case kErrorCodeOmahaUpdateDeferredForBackoff:
+ case ErrorCode::kOmahaUpdateDeferredForBackoff:
result = metrics::CheckResult::kUpdateAvailable;
reaction = metrics::CheckReaction::kBackingOff;
break;