blob: 8edf4e2406899effd4f8a6aca6691c6c0dca23b5 [file] [log] [blame]
// 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/ash/crosapi/print_job_info_idl_conversions.h"
#include "base/notreached.h"
#include "base/numerics/safe_conversions.h"
#include "chrome/browser/extensions/api/printing/printing_api.h"
#include "chrome/common/extensions/api/printing.h"
namespace proto = ::ash::printing::proto;
namespace extensions {
namespace idl = api::printing_metrics;
namespace {
idl::ColorMode ColorModeProtoToIdl(proto::PrintSettings_ColorMode color_proto) {
switch (color_proto) {
case proto::PrintSettings_ColorMode_BLACK_AND_WHITE:
return idl::COLOR_MODE_BLACK_AND_WHITE;
case proto::PrintSettings_ColorMode_COLOR:
return idl::COLOR_MODE_COLOR;
default:
NOTREACHED();
}
return idl::COLOR_MODE_BLACK_AND_WHITE;
}
idl::DuplexMode DuplexModeProtoToIdl(
proto::PrintSettings_DuplexMode duplex_proto) {
switch (duplex_proto) {
case proto::PrintSettings_DuplexMode_ONE_SIDED:
return idl::DUPLEX_MODE_ONE_SIDED;
case proto::PrintSettings_DuplexMode_TWO_SIDED_LONG_EDGE:
return idl::DUPLEX_MODE_TWO_SIDED_LONG_EDGE;
case proto::PrintSettings_DuplexMode_TWO_SIDED_SHORT_EDGE:
return idl::DUPLEX_MODE_TWO_SIDED_SHORT_EDGE;
default:
NOTREACHED();
}
return idl::DUPLEX_MODE_ONE_SIDED;
}
idl::MediaSize MediaSizeProtoToIdl(const proto::MediaSize& media_size_proto) {
idl::MediaSize media_size;
media_size.width = media_size_proto.width();
media_size.height = media_size_proto.height();
media_size.vendor_id = media_size_proto.vendor_id();
return media_size;
}
idl::PrintSettings PrintSettingsProtoToIdl(
const proto::PrintSettings& settings_proto) {
idl::PrintSettings settings;
settings.color = ColorModeProtoToIdl(settings_proto.color());
settings.duplex = DuplexModeProtoToIdl(settings_proto.duplex());
settings.media_size = MediaSizeProtoToIdl(settings_proto.media_size());
settings.copies = settings_proto.copies();
return settings;
}
idl::PrintJobSource PrintJobSourceProtoToIdl(
proto::PrintJobInfo_PrintJobSource print_job_source_proto) {
switch (print_job_source_proto) {
case proto::PrintJobInfo_PrintJobSource_PRINT_PREVIEW:
case proto::PrintJobInfo_PrintJobSource_PRINT_PREVIEW_INCOGNITO:
return idl::PRINT_JOB_SOURCE_PRINT_PREVIEW;
case proto::PrintJobInfo_PrintJobSource_ARC:
return idl::PRINT_JOB_SOURCE_ANDROID_APP;
case proto::PrintJobInfo_PrintJobSource_EXTENSION:
return idl::PRINT_JOB_SOURCE_EXTENSION;
default:
NOTREACHED();
}
return idl::PRINT_JOB_SOURCE_PRINT_PREVIEW;
}
idl::PrintJobStatus PrintJobStatusProtoToIdl(
proto::PrintJobInfo_PrintJobStatus print_job_status_proto) {
switch (print_job_status_proto) {
case proto::PrintJobInfo_PrintJobStatus_FAILED:
return idl::PRINT_JOB_STATUS_FAILED;
case proto::PrintJobInfo_PrintJobStatus_CANCELED:
return idl::PRINT_JOB_STATUS_CANCELED;
case proto::PrintJobInfo_PrintJobStatus_PRINTED:
return idl::PRINT_JOB_STATUS_PRINTED;
default:
NOTREACHED();
}
return idl::PRINT_JOB_STATUS_FAILED;
}
idl::PrinterSource PrinterSourceProtoToIdl(
proto::Printer_PrinterSource printer_source_proto) {
switch (printer_source_proto) {
case proto::Printer_PrinterSource_USER:
return idl::PRINTER_SOURCE_USER;
case proto::Printer_PrinterSource_POLICY:
return idl::PRINTER_SOURCE_POLICY;
default:
NOTREACHED();
}
return idl::PRINTER_SOURCE_USER;
}
idl::Printer PrinterProtoToIdl(const proto::Printer& printer_proto) {
idl::Printer printer;
printer.name = printer_proto.name();
printer.uri = printer_proto.uri();
printer.source = PrinterSourceProtoToIdl(printer_proto.source());
return printer;
}
api::printing::PrinterStatus PrinterErrorCodeToIdl(
proto::PrintJobInfo_PrinterErrorCode error_code_proto) {
switch (error_code_proto) {
case proto::PrintJobInfo_PrinterErrorCode_NO_ERROR:
return api::printing::PRINTER_STATUS_AVAILABLE;
case proto::PrintJobInfo_PrinterErrorCode_PAPER_JAM:
return api::printing::PRINTER_STATUS_PAPER_JAM;
case proto::PrintJobInfo_PrinterErrorCode_OUT_OF_PAPER:
return api::printing::PRINTER_STATUS_OUT_OF_PAPER;
case proto::PrintJobInfo_PrinterErrorCode_OUT_OF_INK:
return api::printing::PRINTER_STATUS_OUT_OF_INK;
case proto::PrintJobInfo_PrinterErrorCode_DOOR_OPEN:
return api::printing::PRINTER_STATUS_DOOR_OPEN;
case proto::PrintJobInfo_PrinterErrorCode_PRINTER_UNREACHABLE:
return api::printing::PRINTER_STATUS_UNREACHABLE;
case proto::PrintJobInfo_PrinterErrorCode_TRAY_MISSING:
return api::printing::PRINTER_STATUS_TRAY_MISSING;
case proto::PrintJobInfo_PrinterErrorCode_OUTPUT_FULL:
return api::printing::PRINTER_STATUS_OUTPUT_FULL;
case proto::PrintJobInfo_PrinterErrorCode_STOPPED:
return api::printing::PRINTER_STATUS_STOPPED;
case proto::PrintJobInfo_PrinterErrorCode_FILTER_FAILED:
case proto::PrintJobInfo_PrinterErrorCode_UNKNOWN_ERROR:
case proto::PrintJobInfo_PrinterErrorCode_CLIENT_UNAUTHORIZED:
return api::printing::PRINTER_STATUS_GENERIC_ISSUE;
case proto::PrintJobInfo_PrinterErrorCode_EXPIRED_CERTIFICATE:
return api::printing::PRINTER_STATUS_EXPIRED_CERTIFICATE;
case proto::
PrintJobInfo_PrinterErrorCode_PrintJobInfo_PrinterErrorCode_INT_MIN_SENTINEL_DO_NOT_USE_:
case proto::
PrintJobInfo_PrinterErrorCode_PrintJobInfo_PrinterErrorCode_INT_MAX_SENTINEL_DO_NOT_USE_:
NOTREACHED();
return api::printing::PRINTER_STATUS_GENERIC_ISSUE;
}
return api::printing::PRINTER_STATUS_GENERIC_ISSUE;
}
} // namespace
idl::PrintJobInfo PrintJobInfoProtoToIdl(
const proto::PrintJobInfo& print_job_info_proto) {
idl::PrintJobInfo print_job_info;
print_job_info.id = print_job_info_proto.id();
print_job_info.title = print_job_info_proto.title();
print_job_info.source =
PrintJobSourceProtoToIdl(print_job_info_proto.source());
print_job_info.status =
PrintJobStatusProtoToIdl(print_job_info_proto.status());
print_job_info.creation_time =
base::checked_cast<double>(print_job_info_proto.creation_time());
print_job_info.completion_time =
base::checked_cast<double>(print_job_info_proto.completion_time());
print_job_info.printer = PrinterProtoToIdl(print_job_info_proto.printer());
print_job_info.printer_status =
PrinterErrorCodeToIdl(print_job_info_proto.printer_error_code());
print_job_info.settings =
PrintSettingsProtoToIdl(print_job_info_proto.settings());
print_job_info.number_of_pages = print_job_info_proto.number_of_pages();
return print_job_info;
}
} // namespace extensions