Commit 40bb2d82 authored by Nikita Podguzov's avatar Nikita Podguzov Committed by Commit Bot

CUPS Printing: Move printer status conversion function to utils file

This will be used in chrome.printing API handler, so we need to get
this out of print job manager implementation.

Bug: 996785
Change-Id: I0feedff6fdd6cde4da66f5ef61a2fed7fa575b3a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1906153
Commit-Queue: Nikita Podguzov <nikitapodguzov@chromium.org>
Reviewed-by: default avatarSean Kau <skau@chromium.org>
Cr-Commit-Position: refs/heads/master@{#715002}
parent f804fadf
......@@ -2337,6 +2337,8 @@ source_set("chromeos") {
"printing/cups_proxy_service_manager_factory.h",
"printing/cups_wrapper.cc",
"printing/cups_wrapper.h",
"printing/printer_error_codes.cc",
"printing/printer_error_codes.h",
"printing/printer_info_cups.cc",
]
} else {
......
......@@ -35,7 +35,7 @@ base::WeakPtr<CupsPrintJob> CupsPrintJob::GetWeakPtr() {
}
bool CupsPrintJob::IsExpired() const {
return error_code_ == ErrorCode::PRINTER_UNREACHABLE;
return error_code_ == PrinterErrorCode::PRINTER_UNREACHABLE;
}
// static
......@@ -51,7 +51,7 @@ bool CupsPrintJob::IsJobFinished() const {
}
bool CupsPrintJob::PipelineDead() const {
return error_code_ == CupsPrintJob::ErrorCode::FILTER_FAILED;
return error_code_ == PrinterErrorCode::FILTER_FAILED;
}
} // namespace chromeos
......@@ -10,6 +10,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/printing/history/print_job_info.pb.h"
#include "chrome/browser/chromeos/printing/printer_error_codes.h"
#include "chrome/browser/printing/print_job.h"
#include "chromeos/printing/printer_configuration.h"
......@@ -30,17 +31,6 @@ class CupsPrintJob {
STATE_ERROR,
};
enum class ErrorCode {
NO_ERROR,
PAPER_JAM,
OUT_OF_PAPER,
OUT_OF_INK,
DOOR_OPEN,
PRINTER_UNREACHABLE,
FILTER_FAILED,
UNKNOWN_ERROR,
};
CupsPrintJob(const Printer& printer,
int job_id,
const std::string& document_title,
......@@ -73,14 +63,14 @@ class CupsPrintJob {
const printing::proto::PrintSettings& settings() const { return settings_; }
base::Time creation_time() const { return creation_time_; }
State state() const { return state_; }
ErrorCode error_code() const { return error_code_; }
PrinterErrorCode error_code() const { return error_code_; }
// Setters.
void set_printed_page_number(int page_number) {
printed_page_number_ = page_number;
}
void set_state(State state) { state_ = state; }
void set_error_code(ErrorCode error_code) { error_code_ = error_code; }
void set_error_code(PrinterErrorCode error_code) { error_code_ = error_code; }
// Returns true if |state_| represents a terminal state.
bool IsJobFinished() const;
......@@ -101,7 +91,7 @@ class CupsPrintJob {
const base::Time creation_time_;
State state_ = State::STATE_NONE;
ErrorCode error_code_ = ErrorCode::NO_ERROR;
PrinterErrorCode error_code_ = PrinterErrorCode::NO_ERROR;
base::WeakPtrFactory<CupsPrintJob> weak_factory_{this};
......
......@@ -26,6 +26,7 @@
#include "chrome/browser/chromeos/printing/cups_wrapper.h"
#include "chrome/browser/chromeos/printing/history/print_job_info.pb.h"
#include "chrome/browser/chromeos/printing/history/print_job_info_proto_conversions.h"
#include "chrome/browser/chromeos/printing/printer_error_codes.h"
#include "chrome/browser/printing/print_job.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
......@@ -51,7 +52,7 @@ const int kRetryMax = 6;
const char kJobCompletedWithErrors[] = "job-completed-with-errors";
using State = chromeos::CupsPrintJob::State;
using ErrorCode = chromeos::CupsPrintJob::ErrorCode;
using PrinterErrorCode = chromeos::PrinterErrorCode;
using PrinterReason = printing::PrinterStatus::PrinterReason;
......@@ -117,32 +118,6 @@ bool JobContainsReason(const ::printing::CupsJob& job,
return base::Contains(job.state_reasons, reason);
}
// Extracts an ErrorCode from PrinterStatus#reasons. Returns NO_ERROR if there
// are no reasons which indicate an error.
ErrorCode ErrorCodeFromReasons(const printing::PrinterStatus& printer_status) {
for (const auto& reason : printer_status.reasons) {
switch (reason.reason) {
case PrinterReason::MEDIA_EMPTY:
case PrinterReason::MEDIA_NEEDED:
case PrinterReason::MEDIA_LOW:
return ErrorCode::OUT_OF_PAPER;
case PrinterReason::MEDIA_JAM:
return ErrorCode::PAPER_JAM;
case PrinterReason::TONER_EMPTY:
case PrinterReason::TONER_LOW:
return ErrorCode::OUT_OF_INK;
case PrinterReason::TIMED_OUT:
return ErrorCode::PRINTER_UNREACHABLE;
case PrinterReason::DOOR_OPEN:
case PrinterReason::COVER_OPEN:
return ErrorCode::DOOR_OPEN;
default:
break;
}
}
return ErrorCode::NO_ERROR;
}
// Update the current printed page. Returns true of the page has been updated.
bool UpdateCurrentPage(const printing::CupsJob& job,
chromeos::CupsPrintJob* print_job) {
......@@ -172,8 +147,10 @@ bool UpdatePrintJob(const ::printing::PrinterStatus& printer_status,
switch (job.state) {
case ::printing::CupsJob::PROCESSING:
pages_updated = UpdateCurrentPage(job, print_job);
if (ErrorCodeFromReasons(printer_status) != ErrorCode::NO_ERROR) {
print_job->set_error_code(ErrorCodeFromReasons(printer_status));
if (chromeos::PrinterErrorCodeFromPrinterStatusReasons(printer_status) !=
PrinterErrorCode::NO_ERROR) {
print_job->set_error_code(
chromeos::PrinterErrorCodeFromPrinterStatusReasons(printer_status));
print_job->set_state(State::STATE_ERROR);
} else {
print_job->set_state(State::STATE_STARTED);
......@@ -186,7 +163,7 @@ bool UpdatePrintJob(const ::printing::PrinterStatus& printer_status,
case ::printing::CupsJob::STOPPED:
// If cups job STOPPED but with filter failure, treat as ERROR
if (JobContainsReason(job, kJobCompletedWithErrors)) {
print_job->set_error_code(ErrorCode::FILTER_FAILED);
print_job->set_error_code(PrinterErrorCode::FILTER_FAILED);
print_job->set_state(State::STATE_FAILED);
} else {
print_job->set_state(ConvertState(job.state));
......@@ -194,7 +171,8 @@ bool UpdatePrintJob(const ::printing::PrinterStatus& printer_status,
break;
case ::printing::CupsJob::ABORTED:
case ::printing::CupsJob::CANCELED:
print_job->set_error_code(ErrorCodeFromReasons(printer_status));
print_job->set_error_code(
chromeos::PrinterErrorCodeFromPrinterStatusReasons(printer_status));
FALLTHROUGH;
default:
print_job->set_state(ConvertState(job.state));
......
......@@ -15,6 +15,7 @@
#include "chrome/browser/chromeos/printing/cups_print_job_manager.h"
#include "chrome/browser/chromeos/printing/cups_print_job_manager_factory.h"
#include "chrome/browser/chromeos/printing/cups_print_job_notification_manager.h"
#include "chrome/browser/chromeos/printing/printer_error_codes.h"
#include "chrome/browser/notifications/notification_display_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_navigator.h"
......@@ -42,16 +43,16 @@ base::string16 GetNotificationTitleForError(
DCHECK_EQ(CupsPrintJob::State::STATE_ERROR, print_job->state());
switch (print_job->error_code()) {
case CupsPrintJob::ErrorCode::PAPER_JAM:
case PrinterErrorCode::PAPER_JAM:
return l10n_util::GetStringUTF16(
IDS_PRINT_JOB_PAPER_JAM_NOTIFICATION_TITLE);
case CupsPrintJob::ErrorCode::OUT_OF_INK:
case PrinterErrorCode::OUT_OF_INK:
return l10n_util::GetStringUTF16(
IDS_PRINT_JOB_OUT_OF_INK_NOTIFICATION_TITLE);
case CupsPrintJob::ErrorCode::OUT_OF_PAPER:
case PrinterErrorCode::OUT_OF_PAPER:
return l10n_util::GetStringUTF16(
IDS_PRINT_JOB_OUT_OF_PAPER_NOTIFICATION_TITLE);
case CupsPrintJob::ErrorCode::DOOR_OPEN:
case PrinterErrorCode::DOOR_OPEN:
return l10n_util::GetStringUTF16(
IDS_PRINT_JOB_DOOR_OPEN_NOTIFICATION_TITLE);
default:
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// 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 "printing/backend/cups_jobs.h"
namespace chromeos {
using PrinterReason = ::printing::PrinterStatus::PrinterReason;
PrinterErrorCode PrinterErrorCodeFromPrinterStatusReasons(
const ::printing::PrinterStatus& printer_status) {
for (const auto& reason : printer_status.reasons) {
switch (reason.reason) {
case PrinterReason::MEDIA_EMPTY:
case PrinterReason::MEDIA_NEEDED:
case PrinterReason::MEDIA_LOW:
return PrinterErrorCode::OUT_OF_PAPER;
case PrinterReason::MEDIA_JAM:
return PrinterErrorCode::PAPER_JAM;
case PrinterReason::TONER_EMPTY:
case PrinterReason::TONER_LOW:
return PrinterErrorCode::OUT_OF_INK;
case PrinterReason::TIMED_OUT:
return PrinterErrorCode::PRINTER_UNREACHABLE;
case PrinterReason::DOOR_OPEN:
case PrinterReason::COVER_OPEN:
return PrinterErrorCode::DOOR_OPEN;
default:
break;
}
}
return PrinterErrorCode::NO_ERROR;
}
} // namespace chromeos
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_PRINTING_PRINTER_ERROR_CODES_H_
#define CHROME_BROWSER_CHROMEOS_PRINTING_PRINTER_ERROR_CODES_H_
namespace printing {
struct PrinterStatus;
} // namespace printing
namespace chromeos {
enum class PrinterErrorCode {
NO_ERROR,
PAPER_JAM,
OUT_OF_PAPER,
OUT_OF_INK,
DOOR_OPEN,
PRINTER_UNREACHABLE,
FILTER_FAILED,
UNKNOWN_ERROR,
};
// Extracts an PrinterErrorCode from PrinterStatus#reasons. Returns NO_ERROR if
// there are no reasons which indicate an error.
PrinterErrorCode PrinterErrorCodeFromPrinterStatusReasons(
const ::printing::PrinterStatus& printer_status);
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_PRINTING_PRINTER_ERROR_CODES_H_
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