chromium/printing/mojom/print.mojom

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module printing.mojom;

// Print job color mode values.
[Stable, Extensible]
enum ColorModel {
  [Default] kUnknownColorModel,
  kGray,
  kColor,
  kCMYK,
  kCMY,
  kKCMY,
  kCMYPlusK,  // kCMYPlusK represents CMY+K.
  kBlack,
  kGrayscale,
  kRGB,
  kRGB16,
  kRGBA,
  kColorModeColor,              // Used in Samsung printer PPDs.
  kColorModeMonochrome,         // Used in Samsung printer PPDs.
  kHPColorColor,                // Used in HP color printer PPDs.
  kHPColorBlack,                // Used in HP color printer PPDs.
  kPrintoutModeNormal,          // Used in Foomatic PPDs.
  kPrintoutModeNormalGray,      // Used in Foomatic PPDs.
  kProcessColorModelCMYK,       // Used in Canon printer PPDs.
  kProcessColorModelGreyscale,  // Used in Canon printer PPDs.
  kProcessColorModelRGB,        // Used in Canon printer PPDs
  kBrotherCUPSColor,            // Used in Brother color laser printer PPDs.
  kBrotherCUPSMono,             // Used in Brother color laser printer PPDs.
  kBrotherBRScript3Color,       // Used in Brother BRScript3 color printer PPDs.
  kBrotherBRScript3Black,       // Used in Brother BRScript3 color printer PPDs.
  kEpsonInkColor,               // Used in Epson printer PPDs.
  kEpsonInkMono,                // Used in Epson printer PPDs.
  kSharpARCModeCMColor,         // Used in Sharp printer PPDs.
  kSharpARCModeCMBW,            // Used in Sharp printer PPDs.
  kXeroxXRXColorAutomatic,      // Used in Xerox printer PPDs.
  kXeroxXRXColorBW,             // Used in Xerox printer PPDs.
  kColorModelLast = kXeroxXRXColorBW,  // Obsolete, do not use
  [MinVersion=1] kCanonCNColorModeColor,       // Used in Canon printer PPDs.
  [MinVersion=1] kCanonCNColorModeMono,        // Used in Canon printer PPDs.
  [MinVersion=1] kCanonCNIJGrayScaleOne,       // Used in Canon printer PPDs.
  [MinVersion=1] kCanonCNIJGrayScaleZero,      // Used in Canon printer PPDs.
  // Used in Konica Minolta printer PPDs.
  [MinVersion=1] kKonicaMinoltaSelectColorColor,
  [MinVersion=1] kKonicaMinoltaSelectColorGrayscale,
  [MinVersion=1] kOkiOKControlColor,           // Used in Oki printer PPDs.
  [MinVersion=1] kOkiOKControlGray,            // Used in Oki printer PPDs.
  // Used in Xerox printer PPDs.
  [MinVersion=1] kXeroxXROutputColorPrintAsColor,
  [MinVersion=1] kXeroxXROutputColorPrintAsGrayscale,
  [MinVersion=2] kHpPjlColorAsGrayNo,   // Used in HP printer PPDs.
  [MinVersion=2] kHpPjlColorAsGrayYes,  // Used in HP printer PPDs.
};

// Print job duplex mode values.
[Stable, Extensible]
enum DuplexMode {
  [Default] kUnknownDuplexMode = -1,
  kSimplex,
  kLongEdge,
  kShortEdge,
};

// Struct that holds margin and content area sizes of a page. Units are
// arbitrary and can be chosen by the programmer.
struct PageSizeMargins {
  double content_width;
  double content_height;
  double margin_top;
  double margin_right;
  double margin_bottom;
  double margin_left;
};

// CSS @page page-orientation descriptor values.
enum PageOrientation { kUpright, kRotateLeft, kRotateRight };

// Describes whether to reduce/enlarge/retain the print contents to fit the
// printable area.
enum PrintScalingOption {
  // Prints the upper left of a page without scaling. Crop the page contents
  // that don't fit on the paper.
  kNone,
  // Reduces or enlarges each page to fit the printable area of the selected
  // printer paper size.
  kFitToPrintableArea,
  // Print output page size is same as the actual source page size. Do not
  // scale/center/fit to printable area.
  kSourceSize,
  // Reduces or enlarges each page to fit the selected printer paper size.
  kFitToPaper,
  // Center each page on paper. If the page is larger than the selected printer
  // paper size, it will be scaled down to fit. Note that the page will never be
  // scaled *up*. If it's not larger than the paper, it will just be centered.
  kCenterShrinkToFitPaper,
};

// Document type that Skia graphics library generates.
enum SkiaDocumentType {
  // PDF document type.
  kPDF,
  // MultiPictureDocument type
  kMSKP,
  // XPS document type.
  [EnableIf=is_win]
  kXPS,
};

// Metafile data type encapsulated by a player.
enum MetafileDataType {
  kPDF,
  [EnableIf=is_win]
  kEMF,
  [EnableIf=is_win]
  kPostScriptEmf,
};

// What kind of document outline to generate.
enum GenerateDocumentOutline {
  kNone,
  kFromAccessibilityTreeHeaders,
};

// What kind of margins to use.
[Stable, Extensible]
enum MarginType {
  // Default varies depending on headers being enabled or not
  [Default] kDefaultMargins,
  kNoMargins,
  kPrintableAreaMargins,
  kCustomMargins,
};

// Allowed printing modes as a bitmask.
// This is used in pref file and should never change.
[Stable, Extensible, EnableIf=is_chromeos]
enum ColorModeRestriction {
  [Default] kUnset = 0x0,
  kMonochrome = 0x1,
  kColor = 0x2,
};

// Allowed duplex modes as a bitmask.
// This is used in pref file and should never change.
[Stable, Extensible, EnableIf=is_chromeos]
enum DuplexModeRestriction {
  [Default] kUnset = 0x0,
  kSimplex = 0x1,
  kLongEdge = 0x2,
  kShortEdge = 0x4,
  kDuplex = 0x6,
};

// Allowed PIN printing modes.
// This is used in pref file and should never change.
[Stable, Extensible, EnableIf=is_chromeos]
enum PinModeRestriction {
  [Default] kUnset = 0,
  kPin = 1,
  kNoPin = 2,
};

// Result codes distilled from system error codes.
enum ResultCode {
  kSuccess,
  // Generic code for uncategorized errors.
  kFailed,
  // Insufficient permissions to perform the operation.
  kAccessDenied,
  // Operation was canceled.
  kCanceled,
};

// Matches print_preview.PrinterType in
// chrome/browser/resources/print_preview/data/destination_match.ts
[Stable, Extensible]
enum PrinterType {
  kPrivetDeprecated,
  kExtension,
  kPdf,
  kLocal,
  kCloudDeprecated
};

[EnableIf=is_win]
enum PrinterLanguageType {
  kNone = 0,
  kTextOnly,
  kXps,
  kPostscriptLevel2,
  kPostscriptLevel3,
};

// Corresponds to `printing::PageRange` in printing/page_range.h.
struct PageRange {
  uint32 from;
  uint32 to;
};

// Corresponds to the 'client-info' IPP attribute.
// For optional fields, missing values correspond to the 'no-value' IPP
// out-of-band value.
[Stable, EnableIf=is_chromeos]
struct IppClientInfo {
  [Stable, Extensible]
  enum ClientType {
    kApplication = 3,
    kOperatingSystem = 4,
    kDriver = 5,
    [Default] kOther = 6,
  };
  ClientType client_type;
  string client_name;
  string? client_patches;
  string client_string_version;
  string? client_version;
};