| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/chromeos/printing/printer_error_codes.h" |
| |
| #include "chromeos/components/print_management/mojom/printing_manager.mojom.h" |
| #include "printing/backend/cups_jobs.h" |
| #include "printing/printer_status.h" |
| |
| namespace chromeos { |
| |
| namespace { |
| |
| #ifndef STATIC_ASSERT_ENUM |
| #define STATIC_ASSERT_ENUM(a, b) \ |
| static_assert(static_cast<int>(a) == static_cast<int>(b), \ |
| "mismatching enums: " #a) |
| #endif |
| |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::NO_ERROR, |
| printing::printing_manager::mojom::PrinterErrorCode::kNoError); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::PAPER_JAM, |
| printing::printing_manager::mojom::PrinterErrorCode::kPaperJam); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::OUT_OF_PAPER, |
| printing::printing_manager::mojom::PrinterErrorCode::kOutOfPaper); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::OUT_OF_INK, |
| printing::printing_manager::mojom::PrinterErrorCode::kOutOfInk); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::DOOR_OPEN, |
| printing::printing_manager::mojom::PrinterErrorCode::kDoorOpen); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::PRINTER_UNREACHABLE, |
| printing::printing_manager::mojom::PrinterErrorCode::kPrinterUnreachable); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::TRAY_MISSING, |
| printing::printing_manager::mojom::PrinterErrorCode::kTrayMissing); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::OUTPUT_FULL, |
| printing::printing_manager::mojom::PrinterErrorCode::kOutputFull); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::STOPPED, |
| printing::printing_manager::mojom::PrinterErrorCode::kStopped); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::FILTER_FAILED, |
| printing::printing_manager::mojom::PrinterErrorCode::kFilterFailed); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::UNKNOWN_ERROR, |
| printing::printing_manager::mojom::PrinterErrorCode::kUnknownError); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::CLIENT_UNAUTHORIZED, |
| printing::printing_manager::mojom::PrinterErrorCode::kClientUnauthorized); |
| STATIC_ASSERT_ENUM( |
| PrinterErrorCode::EXPIRED_CERTIFICATE, |
| printing::printing_manager::mojom::PrinterErrorCode::kExpiredCertificate); |
| } // namespace |
| |
| using PrinterReason = ::printing::PrinterStatus::PrinterReason; |
| |
| PrinterErrorCode PrinterErrorCodeFromPrinterStatusReasons( |
| const ::printing::PrinterStatus& printer_status) { |
| for (const auto& reason : printer_status.reasons) { |
| if (reason.severity != PrinterReason::Severity::kError && |
| reason.severity != PrinterReason::Severity::kWarning) { |
| continue; |
| } |
| |
| switch (reason.reason) { |
| case PrinterReason::Reason::kMediaEmpty: |
| case PrinterReason::Reason::kMediaNeeded: |
| return PrinterErrorCode::OUT_OF_PAPER; |
| case PrinterReason::Reason::kMediaJam: |
| return PrinterErrorCode::PAPER_JAM; |
| case PrinterReason::Reason::kTonerEmpty: |
| case PrinterReason::Reason::kDeveloperEmpty: |
| case PrinterReason::Reason::kMarkerSupplyEmpty: |
| case PrinterReason::Reason::kMarkerWasteFull: |
| return PrinterErrorCode::OUT_OF_INK; |
| case PrinterReason::Reason::kTimedOut: |
| case PrinterReason::Reason::kShutdown: |
| return PrinterErrorCode::PRINTER_UNREACHABLE; |
| case PrinterReason::Reason::kDoorOpen: |
| case PrinterReason::Reason::kCoverOpen: |
| case PrinterReason::Reason::kInterlockOpen: |
| return PrinterErrorCode::DOOR_OPEN; |
| case PrinterReason::Reason::kInputTrayMissing: |
| case PrinterReason::Reason::kOutputTrayMissing: |
| return PrinterErrorCode::TRAY_MISSING; |
| case PrinterReason::Reason::kOutputAreaFull: |
| case PrinterReason::Reason::kOutputAreaAlmostFull: |
| return PrinterErrorCode::OUTPUT_FULL; |
| case PrinterReason::Reason::kStopping: |
| case PrinterReason::Reason::kStoppedPartly: |
| case PrinterReason::Reason::kPaused: |
| case PrinterReason::Reason::kMovingToPaused: |
| return PrinterErrorCode::STOPPED; |
| case PrinterReason::Reason::kCupsPkiExpired: |
| return PrinterErrorCode::EXPIRED_CERTIFICATE; |
| case PrinterReason::Reason::kMediaLow: |
| case PrinterReason::Reason::kTonerLow: |
| case PrinterReason::Reason::kDeveloperLow: |
| case PrinterReason::Reason::kMarkerSupplyLow: |
| case PrinterReason::Reason::kMarkerWasteAlmostFull: |
| default: |
| break; |
| } |
| } |
| return PrinterErrorCode::NO_ERROR; |
| } |
| |
| } // namespace chromeos |