Commit 2a03afcf authored by Piotr Pawliczek's avatar Piotr Pawliczek Committed by Commit Bot

Support for new error codes in debugd/CupsResult

This patch adds support for new error codes defined in CL:2420496 and
translates them to chromeos::PrinterSetupResult values. It also unifies
error messages attached to chromeos::PrinterSetupResult values.

BUG=chromium:1069844,chromium:1123268
TEST=tested on atlas as a part of larger patch

Change-Id: I5eab4139a4a0dbdc878ef79de23ed35dca94cdb5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2420497
Commit-Queue: Piotr Pawliczek <pawliczek@chromium.org>
Reviewed-by: default avatarSean Kau <skau@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Reviewed-by: default avatarTrent Apted <tapted@chromium.org>
Cr-Commit-Position: refs/heads/master@{#811512}
parent 97e96963
......@@ -52,15 +52,36 @@ PrinterSetupResult PrinterSetupResultFromDbusResultCode(const Printer& printer,
case debugd::CupsResult::CUPS_INVALID_PPD:
PRINTER_LOG(EVENT) << printer.make_and_model() << " PPD Invalid";
return PrinterSetupResult::kInvalidPpd;
case debugd::CupsResult::CUPS_AUTOCONF_FAILURE:
PRINTER_LOG(EVENT) << printer.make_and_model() << " Autoconf failed";
// There are other reasons autoconf fails but this is the most likely.
return PrinterSetupResult::kPrinterUnreachable;
case debugd::CupsResult::CUPS_LPADMIN_FAILURE:
// Printers should always be configurable by lpadmin.
PRINTER_LOG(ERROR) << printer.make_and_model()
<< " lpadmin could not add the printer";
<< " lpadmin-manual failed";
return PrinterSetupResult::kFatalError;
case debugd::CupsResult::CUPS_AUTOCONF_FAILURE:
PRINTER_LOG(EVENT) << printer.make_and_model()
<< " lpadmin-autoconf failed";
return PrinterSetupResult::kFatalError;
case debugd::CupsResult::CUPS_BAD_URI:
PRINTER_LOG(EVENT) << printer.make_and_model() << " Bad URI";
return PrinterSetupResult::kBadUri;
case debugd::CupsResult::CUPS_IO_ERROR:
PRINTER_LOG(EVENT) << printer.make_and_model() << " I/O error";
return PrinterSetupResult::kIoError;
case debugd::CupsResult::CUPS_MEMORY_ALLOC_ERROR:
PRINTER_LOG(EVENT) << printer.make_and_model()
<< " Memory allocation error";
return PrinterSetupResult::kMemoryAllocationError;
case debugd::CupsResult::CUPS_PRINTER_UNREACHABLE:
PRINTER_LOG(EVENT) << printer.make_and_model()
<< " Printer is ureachable";
return PrinterSetupResult::kPrinterUnreachable;
case debugd::CupsResult::CUPS_PRINTER_WRONG_RESPONSE:
PRINTER_LOG(EVENT) << printer.make_and_model()
<< " Unexpected response from printer";
return PrinterSetupResult::kPrinterSentWrongResponse;
case debugd::CupsResult::CUPS_PRINTER_NOT_AUTOCONF:
PRINTER_LOG(EVENT) << printer.make_and_model()
<< "Printer is not autoconfigurable";
return PrinterSetupResult::kPrinterIsNotAutoconfigurable;
case debugd::CupsResult::CUPS_FATAL:
default:
// We have no idea. It must be fatal.
......@@ -248,56 +269,58 @@ GURL PrinterConfigurer::GeneratePrinterEulaUrl(const std::string& license) {
return eula_url.ReplaceComponents(replacements);
}
std::ostream& operator<<(std::ostream& out, const PrinterSetupResult& result) {
std::string ResultCodeToMessage(const PrinterSetupResult result) {
switch (result) {
case kFatalError:
out << "fatal error";
break;
case kSuccess:
out << "add success";
break;
case kEditSuccess:
out << "edit success";
break;
case kPrinterUnreachable:
out << "printer unreachable";
break;
case kDbusError:
out << "failed to connect over dbus";
break;
case kNativePrintersNotAllowed:
out << "native printers denied by policy";
break;
case kInvalidPrinterUpdate:
out << "printer edits would make printer unusable";
break;
case kComponentUnavailable:
out << "component driver was requested but installation failed.";
break;
case kPpdTooLarge:
out << "PPD too large";
break;
case kInvalidPpd:
out << "PPD rejected by cupstestppd";
break;
case kPpdNotFound:
out << "could not find PPD";
break;
case kPpdUnretrievable:
out << "failed to download PPD";
break;
case kDbusNoReply:
out << "no reply from debugd";
break;
case kDbusTimeout:
out << "timeout in D-Bus";
break;
case kMaxValue:
out << "unexpected result";
break;
// Success.
case PrinterSetupResult::kSuccess:
return "Printer successfully configured.";
case PrinterSetupResult::kEditSuccess:
return "Printer successfully updated.";
// Invalid configuration.
case PrinterSetupResult::kNativePrintersNotAllowed:
return "Unable to add or edit printer due to enterprise policy.";
case PrinterSetupResult::kBadUri:
return "Invalid URI.";
case PrinterSetupResult::kInvalidPrinterUpdate:
return "Requested printer changes would make printer unusable.";
// Problem with a printer.
case PrinterSetupResult::kPrinterUnreachable:
return "Could not contact printer for configuration.";
case PrinterSetupResult::kPrinterSentWrongResponse:
return "Printer sent unexpected response.";
case PrinterSetupResult::kPrinterIsNotAutoconfigurable:
return "Printer is not autoconfigurable.";
// Problem with a PPD file.
case PrinterSetupResult::kPpdTooLarge:
return "PPD is too large.";
case PrinterSetupResult::kInvalidPpd:
return "Provided PPD is invalid.";
case PrinterSetupResult::kPpdNotFound:
return "Could not locate requested PPD. Check printer configuration.";
case PrinterSetupResult::kPpdUnretrievable:
return "Could not retrieve PPD from server. Check Internet connection.";
// Cannot load a required compomonent.
case PrinterSetupResult::kComponentUnavailable:
return "Could not install component.";
// Problem with D-Bus.
case PrinterSetupResult::kDbusError:
return "D-Bus error occurred. Reboot required.";
case PrinterSetupResult::kDbusNoReply:
return "Couldn't talk to debugd over D-Bus.";
case PrinterSetupResult::kDbusTimeout:
return "Timed out trying to reach debugd over D-Bus.";
// Problem reported by OS.
case PrinterSetupResult::kIoError:
return "I/O error occurred.";
case PrinterSetupResult::kMemoryAllocationError:
return "Memory allocation error occurred.";
// Unknown problem.
case PrinterSetupResult::kFatalError:
return "Unknown error occurred.";
// This is not supposed to happen.
case PrinterSetupResult::kMaxValue:
return "The error code is invalid.";
}
return out;
}
} // namespace chromeos
......@@ -28,14 +28,20 @@ enum PrinterSetupResult {
kNativePrintersNotAllowed = 4, // Tried adding/editing printers policy set
kInvalidPrinterUpdate = 5, // Tried updating printer with invalid values
kComponentUnavailable = 6, // Could not install component
kEditSuccess = 7, // Printer editted successfully
// Space left for additional errors
kEditSuccess = 7, // Printer edited successfully
kPrinterSentWrongResponse = 8, // Printer sent unexpected response
kPrinterIsNotAutoconfigurable = 9, // Printer requires PPD
// PPD errors
kPpdTooLarge = 10, // PPD exceeds size limit
kInvalidPpd = 11, // PPD rejected by cupstestppd
kPpdNotFound = 12, // Could not find PPD
kPpdUnretrievable = 13, // Could not download PPD
// Other errors
kIoError = 14, // I/O error in CUPS
kMemoryAllocationError = 15, // Memory allocation error in Cups
kBadUri = 16, // Printer's URI is incorrect
// Space left for additional errors
// Specific DBus errors. This must stay in sync with the DbusLibraryError
......@@ -95,8 +101,8 @@ class PrinterConfigurer {
DISALLOW_COPY_AND_ASSIGN(PrinterConfigurer);
};
// Stream operator for ease of logging |result|.
std::ostream& operator<<(std::ostream& out, const PrinterSetupResult& result);
// Return a message for |result| that can be used in device-log.
std::string ResultCodeToMessage(const PrinterSetupResult result);
} // namespace chromeos
......
......@@ -302,31 +302,33 @@ void LocalPrinterHandlerChromeos::HandlePrinterSetup(
FetchCapabilities(printer, GetNativePrinterPolicies(), std::move(cb));
return;
}
case chromeos::PrinterSetupResult::kPrinterUnreachable:
case chromeos::PrinterSetupResult::kPrinterSentWrongResponse:
case chromeos::PrinterSetupResult::kPpdNotFound:
LOG(WARNING) << "Could not find PPD. Check printer configuration.";
// Prompt user to update configuration.
// TODO(skau): Fill me in
break;
case chromeos::PrinterSetupResult::kPpdUnretrievable:
LOG(WARNING) << "Could not download PPD. Check Internet connection.";
// Could not download PPD. Connect to Internet.
// Prompt user to update configuration or check internet connection.
// TODO(skau): Fill me in
LOG(WARNING) << ResultCodeToMessage(result);
break;
case chromeos::PrinterSetupResult::kPrinterUnreachable:
case chromeos::PrinterSetupResult::kFatalError:
case chromeos::PrinterSetupResult::kDbusError:
case chromeos::PrinterSetupResult::kComponentUnavailable:
case chromeos::PrinterSetupResult::kNativePrintersNotAllowed:
case chromeos::PrinterSetupResult::kPpdTooLarge:
case chromeos::PrinterSetupResult::kInvalidPpd:
case chromeos::PrinterSetupResult::kFatalError:
case chromeos::PrinterSetupResult::kNativePrintersNotAllowed:
case chromeos::PrinterSetupResult::kInvalidPrinterUpdate:
case chromeos::PrinterSetupResult::kIoError:
case chromeos::PrinterSetupResult::kMemoryAllocationError:
case chromeos::PrinterSetupResult::kBadUri:
case chromeos::PrinterSetupResult::kDbusNoReply:
case chromeos::PrinterSetupResult::kDbusTimeout:
case chromeos::PrinterSetupResult::kEditSuccess:
LOG(ERROR) << "Unexpected error in printer setup. " << result;
LOG(ERROR) << ResultCodeToMessage(result);
break;
case chromeos::PrinterSetupResult::kInvalidPrinterUpdate:
case chromeos::PrinterSetupResult::kEditSuccess:
case chromeos::PrinterSetupResult::kPrinterIsNotAutoconfigurable:
case chromeos::PrinterSetupResult::kComponentUnavailable:
case chromeos::PrinterSetupResult::kMaxValue:
NOTREACHED() << "This value is not expected";
LOG(ERROR) << "Unexpected error in printer setup: "
<< ResultCodeToMessage(result);
break;
}
......
......@@ -761,47 +761,30 @@ void CupsPrintersHandler::OnAddedOrEditedPrinterCommon(
}
return;
case PrinterSetupResult::kEditSuccess:
PRINTER_LOG(USER) << "Printer updated";
PRINTER_LOG(USER) << ResultCodeToMessage(result_code);
printers_manager_->SavePrinter(printer);
return;
case PrinterSetupResult::kPpdNotFound:
PRINTER_LOG(ERROR) << "Could not locate requested PPD";
break;
case PrinterSetupResult::kNativePrintersNotAllowed:
case PrinterSetupResult::kBadUri:
case PrinterSetupResult::kInvalidPrinterUpdate:
case PrinterSetupResult::kPrinterUnreachable:
case PrinterSetupResult::kPrinterSentWrongResponse:
case PrinterSetupResult::kPrinterIsNotAutoconfigurable:
case PrinterSetupResult::kPpdTooLarge:
PRINTER_LOG(ERROR) << "PPD is too large";
break;
case PrinterSetupResult::kPpdUnretrievable:
PRINTER_LOG(ERROR) << "Could not retrieve PPD from server";
break;
case PrinterSetupResult::kInvalidPpd:
PRINTER_LOG(ERROR) << "Provided PPD is invalid.";
break;
case PrinterSetupResult::kPrinterUnreachable:
PRINTER_LOG(ERROR) << "Could not contact printer for configuration";
break;
case PrinterSetupResult::kComponentUnavailable:
LOG(WARNING) << "Could not install component";
break;
case PrinterSetupResult::kPpdNotFound:
case PrinterSetupResult::kPpdUnretrievable:
case PrinterSetupResult::kDbusError:
case PrinterSetupResult::kFatalError:
PRINTER_LOG(ERROR) << "Unrecoverable error. Reboot required.";
break;
case PrinterSetupResult::kNativePrintersNotAllowed:
PRINTER_LOG(ERROR)
<< "Unable to add or edit printer due to enterprise policy.";
break;
case PrinterSetupResult::kInvalidPrinterUpdate:
PRINTER_LOG(ERROR)
<< "Requested printer changes would make printer unusable";
break;
case PrinterSetupResult::kDbusNoReply:
PRINTER_LOG(ERROR) << "Couldn't talk to debugd over D-Bus.";
break;
case PrinterSetupResult::kDbusTimeout:
PRINTER_LOG(ERROR) << "Timed out trying to reach debugd over D-Bus.";
case PrinterSetupResult::kIoError:
case PrinterSetupResult::kMemoryAllocationError:
case PrinterSetupResult::kFatalError:
PRINTER_LOG(ERROR) << ResultCodeToMessage(result_code);
break;
case PrinterSetupResult::kComponentUnavailable:
case PrinterSetupResult::kMaxValue:
NOTREACHED() << "This is not an expected value";
NOTREACHED() << ResultCodeToMessage(result_code);
break;
}
// Log an event that tells us this printer setup failed, so we can get
......
......@@ -58411,10 +58411,15 @@ Called by update_net_trust_anchors.py.-->
<int value="5" label="Invalid values are used to update printer"/>
<int value="6" label="Could not install component"/>
<int value="7" label="Edit success"/>
<int value="8" label="Printer sent unexpected response"/>
<int value="9" label="Printer requires PPD"/>
<int value="10" label="PPD exceeds size limit"/>
<int value="11" label="PPD Rejected by cupstestppd"/>
<int value="12" label="Could not find PPD"/>
<int value="13" label="Failed to download PPD"/>
<int value="14" label="I/O error in CUPS"/>
<int value="15" label="Memory allocation error in Cups"/>
<int value="16" label="Printer's URI is incorrect"/>
<int value="64" label="No reply from debugd over D-Bus"/>
<int value="65" label="Generic D-Bus timeout"/>
</enum>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment