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, ...@@ -52,15 +52,36 @@ PrinterSetupResult PrinterSetupResultFromDbusResultCode(const Printer& printer,
case debugd::CupsResult::CUPS_INVALID_PPD: case debugd::CupsResult::CUPS_INVALID_PPD:
PRINTER_LOG(EVENT) << printer.make_and_model() << " PPD Invalid"; PRINTER_LOG(EVENT) << printer.make_and_model() << " PPD Invalid";
return PrinterSetupResult::kInvalidPpd; 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: case debugd::CupsResult::CUPS_LPADMIN_FAILURE:
// Printers should always be configurable by lpadmin.
PRINTER_LOG(ERROR) << printer.make_and_model() PRINTER_LOG(ERROR) << printer.make_and_model()
<< " lpadmin could not add the printer"; << " lpadmin-manual failed";
return PrinterSetupResult::kFatalError; 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: case debugd::CupsResult::CUPS_FATAL:
default: default:
// We have no idea. It must be fatal. // We have no idea. It must be fatal.
...@@ -248,56 +269,58 @@ GURL PrinterConfigurer::GeneratePrinterEulaUrl(const std::string& license) { ...@@ -248,56 +269,58 @@ GURL PrinterConfigurer::GeneratePrinterEulaUrl(const std::string& license) {
return eula_url.ReplaceComponents(replacements); return eula_url.ReplaceComponents(replacements);
} }
std::ostream& operator<<(std::ostream& out, const PrinterSetupResult& result) { std::string ResultCodeToMessage(const PrinterSetupResult result) {
switch (result) { switch (result) {
case kFatalError: // Success.
out << "fatal error"; case PrinterSetupResult::kSuccess:
break; return "Printer successfully configured.";
case kSuccess: case PrinterSetupResult::kEditSuccess:
out << "add success"; return "Printer successfully updated.";
break; // Invalid configuration.
case kEditSuccess: case PrinterSetupResult::kNativePrintersNotAllowed:
out << "edit success"; return "Unable to add or edit printer due to enterprise policy.";
break; case PrinterSetupResult::kBadUri:
case kPrinterUnreachable: return "Invalid URI.";
out << "printer unreachable"; case PrinterSetupResult::kInvalidPrinterUpdate:
break; return "Requested printer changes would make printer unusable.";
case kDbusError: // Problem with a printer.
out << "failed to connect over dbus"; case PrinterSetupResult::kPrinterUnreachable:
break; return "Could not contact printer for configuration.";
case kNativePrintersNotAllowed: case PrinterSetupResult::kPrinterSentWrongResponse:
out << "native printers denied by policy"; return "Printer sent unexpected response.";
break; case PrinterSetupResult::kPrinterIsNotAutoconfigurable:
case kInvalidPrinterUpdate: return "Printer is not autoconfigurable.";
out << "printer edits would make printer unusable"; // Problem with a PPD file.
break; case PrinterSetupResult::kPpdTooLarge:
case kComponentUnavailable: return "PPD is too large.";
out << "component driver was requested but installation failed."; case PrinterSetupResult::kInvalidPpd:
break; return "Provided PPD is invalid.";
case kPpdTooLarge: case PrinterSetupResult::kPpdNotFound:
out << "PPD too large"; return "Could not locate requested PPD. Check printer configuration.";
break; case PrinterSetupResult::kPpdUnretrievable:
case kInvalidPpd: return "Could not retrieve PPD from server. Check Internet connection.";
out << "PPD rejected by cupstestppd"; // Cannot load a required compomonent.
break; case PrinterSetupResult::kComponentUnavailable:
case kPpdNotFound: return "Could not install component.";
out << "could not find PPD"; // Problem with D-Bus.
break; case PrinterSetupResult::kDbusError:
case kPpdUnretrievable: return "D-Bus error occurred. Reboot required.";
out << "failed to download PPD"; case PrinterSetupResult::kDbusNoReply:
break; return "Couldn't talk to debugd over D-Bus.";
case kDbusNoReply: case PrinterSetupResult::kDbusTimeout:
out << "no reply from debugd"; return "Timed out trying to reach debugd over D-Bus.";
break; // Problem reported by OS.
case kDbusTimeout: case PrinterSetupResult::kIoError:
out << "timeout in D-Bus"; return "I/O error occurred.";
break; case PrinterSetupResult::kMemoryAllocationError:
case kMaxValue: return "Memory allocation error occurred.";
out << "unexpected result"; // Unknown problem.
break; 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 } // namespace chromeos
...@@ -28,14 +28,20 @@ enum PrinterSetupResult { ...@@ -28,14 +28,20 @@ enum PrinterSetupResult {
kNativePrintersNotAllowed = 4, // Tried adding/editing printers policy set kNativePrintersNotAllowed = 4, // Tried adding/editing printers policy set
kInvalidPrinterUpdate = 5, // Tried updating printer with invalid values kInvalidPrinterUpdate = 5, // Tried updating printer with invalid values
kComponentUnavailable = 6, // Could not install component kComponentUnavailable = 6, // Could not install component
kEditSuccess = 7, // Printer editted successfully kEditSuccess = 7, // Printer edited successfully
// Space left for additional errors kPrinterSentWrongResponse = 8, // Printer sent unexpected response
kPrinterIsNotAutoconfigurable = 9, // Printer requires PPD
// PPD errors // PPD errors
kPpdTooLarge = 10, // PPD exceeds size limit kPpdTooLarge = 10, // PPD exceeds size limit
kInvalidPpd = 11, // PPD rejected by cupstestppd kInvalidPpd = 11, // PPD rejected by cupstestppd
kPpdNotFound = 12, // Could not find PPD kPpdNotFound = 12, // Could not find PPD
kPpdUnretrievable = 13, // Could not download 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 // Space left for additional errors
// Specific DBus errors. This must stay in sync with the DbusLibraryError // Specific DBus errors. This must stay in sync with the DbusLibraryError
...@@ -95,8 +101,8 @@ class PrinterConfigurer { ...@@ -95,8 +101,8 @@ class PrinterConfigurer {
DISALLOW_COPY_AND_ASSIGN(PrinterConfigurer); DISALLOW_COPY_AND_ASSIGN(PrinterConfigurer);
}; };
// Stream operator for ease of logging |result|. // Return a message for |result| that can be used in device-log.
std::ostream& operator<<(std::ostream& out, const PrinterSetupResult& result); std::string ResultCodeToMessage(const PrinterSetupResult result);
} // namespace chromeos } // namespace chromeos
......
...@@ -302,31 +302,33 @@ void LocalPrinterHandlerChromeos::HandlePrinterSetup( ...@@ -302,31 +302,33 @@ void LocalPrinterHandlerChromeos::HandlePrinterSetup(
FetchCapabilities(printer, GetNativePrinterPolicies(), std::move(cb)); FetchCapabilities(printer, GetNativePrinterPolicies(), std::move(cb));
return; return;
} }
case chromeos::PrinterSetupResult::kPrinterUnreachable:
case chromeos::PrinterSetupResult::kPrinterSentWrongResponse:
case chromeos::PrinterSetupResult::kPpdNotFound: 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: case chromeos::PrinterSetupResult::kPpdUnretrievable:
LOG(WARNING) << "Could not download PPD. Check Internet connection."; // Prompt user to update configuration or check internet connection.
// Could not download PPD. Connect to Internet.
// TODO(skau): Fill me in // TODO(skau): Fill me in
LOG(WARNING) << ResultCodeToMessage(result);
break; break;
case chromeos::PrinterSetupResult::kPrinterUnreachable: case chromeos::PrinterSetupResult::kFatalError:
case chromeos::PrinterSetupResult::kDbusError: case chromeos::PrinterSetupResult::kDbusError:
case chromeos::PrinterSetupResult::kComponentUnavailable: case chromeos::PrinterSetupResult::kNativePrintersNotAllowed:
case chromeos::PrinterSetupResult::kPpdTooLarge: case chromeos::PrinterSetupResult::kPpdTooLarge:
case chromeos::PrinterSetupResult::kInvalidPpd: case chromeos::PrinterSetupResult::kInvalidPpd:
case chromeos::PrinterSetupResult::kFatalError: case chromeos::PrinterSetupResult::kIoError:
case chromeos::PrinterSetupResult::kNativePrintersNotAllowed: case chromeos::PrinterSetupResult::kMemoryAllocationError:
case chromeos::PrinterSetupResult::kInvalidPrinterUpdate: case chromeos::PrinterSetupResult::kBadUri:
case chromeos::PrinterSetupResult::kDbusNoReply: case chromeos::PrinterSetupResult::kDbusNoReply:
case chromeos::PrinterSetupResult::kDbusTimeout: case chromeos::PrinterSetupResult::kDbusTimeout:
case chromeos::PrinterSetupResult::kEditSuccess: LOG(ERROR) << ResultCodeToMessage(result);
LOG(ERROR) << "Unexpected error in printer setup. " << result;
break; break;
case chromeos::PrinterSetupResult::kInvalidPrinterUpdate:
case chromeos::PrinterSetupResult::kEditSuccess:
case chromeos::PrinterSetupResult::kPrinterIsNotAutoconfigurable:
case chromeos::PrinterSetupResult::kComponentUnavailable:
case chromeos::PrinterSetupResult::kMaxValue: case chromeos::PrinterSetupResult::kMaxValue:
NOTREACHED() << "This value is not expected"; LOG(ERROR) << "Unexpected error in printer setup: "
<< ResultCodeToMessage(result);
break; break;
} }
......
...@@ -761,47 +761,30 @@ void CupsPrintersHandler::OnAddedOrEditedPrinterCommon( ...@@ -761,47 +761,30 @@ void CupsPrintersHandler::OnAddedOrEditedPrinterCommon(
} }
return; return;
case PrinterSetupResult::kEditSuccess: case PrinterSetupResult::kEditSuccess:
PRINTER_LOG(USER) << "Printer updated"; PRINTER_LOG(USER) << ResultCodeToMessage(result_code);
printers_manager_->SavePrinter(printer); printers_manager_->SavePrinter(printer);
return; return;
case PrinterSetupResult::kPpdNotFound: case PrinterSetupResult::kNativePrintersNotAllowed:
PRINTER_LOG(ERROR) << "Could not locate requested PPD"; case PrinterSetupResult::kBadUri:
break; case PrinterSetupResult::kInvalidPrinterUpdate:
case PrinterSetupResult::kPrinterUnreachable:
case PrinterSetupResult::kPrinterSentWrongResponse:
case PrinterSetupResult::kPrinterIsNotAutoconfigurable:
case PrinterSetupResult::kPpdTooLarge: 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: case PrinterSetupResult::kInvalidPpd:
PRINTER_LOG(ERROR) << "Provided PPD is invalid."; case PrinterSetupResult::kPpdNotFound:
break; case PrinterSetupResult::kPpdUnretrievable:
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::kDbusError: 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: case PrinterSetupResult::kDbusNoReply:
PRINTER_LOG(ERROR) << "Couldn't talk to debugd over D-Bus.";
break;
case PrinterSetupResult::kDbusTimeout: 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; break;
case PrinterSetupResult::kComponentUnavailable:
case PrinterSetupResult::kMaxValue: case PrinterSetupResult::kMaxValue:
NOTREACHED() << "This is not an expected value"; NOTREACHED() << ResultCodeToMessage(result_code);
break; break;
} }
// Log an event that tells us this printer setup failed, so we can get // 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.--> ...@@ -58411,10 +58411,15 @@ Called by update_net_trust_anchors.py.-->
<int value="5" label="Invalid values are used to update printer"/> <int value="5" label="Invalid values are used to update printer"/>
<int value="6" label="Could not install component"/> <int value="6" label="Could not install component"/>
<int value="7" label="Edit success"/> <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="10" label="PPD exceeds size limit"/>
<int value="11" label="PPD Rejected by cupstestppd"/> <int value="11" label="PPD Rejected by cupstestppd"/>
<int value="12" label="Could not find PPD"/> <int value="12" label="Could not find PPD"/>
<int value="13" label="Failed to download 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="64" label="No reply from debugd over D-Bus"/>
<int value="65" label="Generic D-Bus timeout"/> <int value="65" label="Generic D-Bus timeout"/>
</enum> </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