// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module blink.mojom;
import "third_party/blink/public/mojom/blob/blob.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";
enum WebPrintingMultipleDocumentHandling {
kSeparateDocumentsCollatedCopies,
kSeparateDocumentsUncollatedCopies
};
enum WebPrintingSides {
kOneSided,
kTwoSidedLongEdge,
kTwoSidedShortEdge
};
enum WebPrintColorMode {
kColor,
kMonochrome
};
enum WebPrintingOrientationRequested {
kPortrait,
kLandscape,
};
// Corresponds to the printer-state IPP field.
// Reports the current state of the printer.
enum WebPrinterState {
kIdle,
kProcessing,
kStopped,
};
// Corresponds to the printer-state-reason IPP field.
// Reports the reasons related to the current state of the printer.
enum WebPrinterStateReason {
// All values for this enum listed below are IPP constants from RFC8011:
// https://www.rfc-editor.org/rfc/rfc8011.html#section-5.4.12
kNone,
kOther,
kConnectingToDevice,
kCoverOpen,
kDeveloperEmpty,
kDeveloperLow,
kDoorOpen,
kFuserOverTemp,
kFuserUnderTemp,
kInputTrayMissing,
kInterlockOpen,
kInterpreterResourceUnavailable,
kMarkerSupplyEmpty,
kMarkerSupplyLow,
kMarkerWasteAlmostFull,
kMarkerWasteFull,
kMediaEmpty,
kMediaJam,
kMediaLow,
kMediaNeeded,
kMovingToPaused,
kOpcLifeOver,
kOpcNearEol,
kOutputAreaAlmostFull,
kOutputAreaFull,
kOutputTrayMissing,
kPaused,
kShutdown,
kSpoolAreaFull,
kStoppedPartly,
kStopping,
kTimedOut,
kTonerEmpty,
kTonerLow,
// Non-standard CUPS extensions.
// See https://github.com/apple/cups/blob/master/backend/ipp.c for details.
kCupsPkiExpired,
};
// Basic description of a single printer.
struct WebPrinterInfo {
string printer_name;
pending_remote<WebPrinter> printer_remote;
};
struct WebPrintingRange {
uint32 from;
uint32 to;
};
union WebPrintingMediaSizeDimension {
WebPrintingRange range;
uint32 value;
};
// Each media size dimension can be either a fixed value or a range.
// Examples from the IPP spec:
//
// /* ISO A4 transparency only from manual feed */
// media-size={
// x-dimension=21000
// y-dimension=29700
// }
//
// /* Custom sizes from 3x5 to 8.5x14 inches */
// media-size={
// x-dimension=7620-21590
// y-dimension=12700-35560
// }
//
// Dimensions are specified in PWG units (hundredths of millimeters).
struct WebPrintingMediaSize {
WebPrintingMediaSizeDimension x_dimension;
WebPrintingMediaSizeDimension y_dimension;
};
// Represents the media-col entry of printer attributes. See §6.3.1 in
// https://ftp.pwg.org/pub/pwg/candidates/cs-ippjobext21-20230210-5100.7.pdf
struct WebPrintingMediaCollection {
WebPrintingMediaSize media_size;
string media_size_name;
};
// Detailed description of a single printer.
// Attribute names & values are largely modelled according to the
// `Printer Description` collection of IANA Internet Printing Protocol
// registrations, which can be found at:
// https://www.iana.org/assignments/ipp-registrations/ipp-registrations.xhtml
struct WebPrinterAttributes {
uint32 copies_default;
WebPrintingRange copies_supported;
WebPrintingMediaCollection media_col_default;
array<WebPrintingMediaCollection> media_col_database;
// Represents the media-source entry of printer attributes. See §6.3.1.17 in
// https://ftp.pwg.org/pub/pwg/candidates/cs-ippjobext21-20230210-5100.7.pdf
string? media_source_default;
array<string> media_source_supported;
WebPrintingMultipleDocumentHandling multiple_document_handling_default;
array<WebPrintingMultipleDocumentHandling> multiple_document_handling_supported;
WebPrintingOrientationRequested orientation_requested_default;
array<WebPrintingOrientationRequested> orientation_requested_supported;
gfx.mojom.Size printer_resolution_default;
array<gfx.mojom.Size> printer_resolution_supported;
WebPrintColorMode print_color_mode_default;
array<WebPrintColorMode> print_color_mode_supported;
WebPrinterState printer_state;
string printer_state_message;
array<WebPrinterStateReason> printer_state_reasons;
WebPrintingSides? sides_default;
array<WebPrintingSides> sides_supported;
};
// Represents the requested media-col entry for a print job. Note that this
// struct slightly differs from WebPrintingMediaCollection and thus is defined
// separately:
// * `media_size` dimensions are defined as values instead of ranges;
// * `media_size_name` is omitted (callers are supposed to pass `media_size`).
struct WebPrintingMediaCollectionRequested {
gfx.mojom.Size media_size;
};
// Detailed description of a single printer.
// Attribute names & values are largely modelled according to the
// `Job Template` collection of IANA Internet Printing Protocol
// registrations, which can be found at:
// https://www.iana.org/assignments/ipp-registrations/ipp-registrations.xhtml
struct WebPrintJobTemplateAttributes {
string job_name;
uint32 copies;
WebPrintingMediaCollectionRequested? media_col;
// Represents the media-source entry of printer attributes. See §6.3.1.17 in
// https://ftp.pwg.org/pub/pwg/candidates/cs-ippjobext21-20230210-5100.7.pdf
string? media_source;
WebPrintingMultipleDocumentHandling? multiple_document_handling;
WebPrintingOrientationRequested? orientation_requested;
gfx.mojom.Size? printer_resolution;
WebPrintColorMode? print_color_mode;
WebPrintingSides? sides;
};
enum WebPrintJobState {
kPending,
kProcessing,
kCompleted,
kCanceled,
kAborted,
};
struct WebPrintJobUpdate {
WebPrintJobState state;
uint32 pages_printed = 0;
};
// Informs the renderer of changes to a particular print job.
interface WebPrintJobStateObserver {
// Dispatches an update notification.
OnWebPrintJobUpdate(WebPrintJobUpdate update);
};
// Allows the renderer to control a particular job.
interface WebPrintJobController {
// Requests the browser to cancel the job.
Cancel();
};
struct WebPrintJobInfo {
string job_name;
uint32 job_pages;
pending_receiver<WebPrintJobStateObserver> observer;
pending_remote<WebPrintJobController> controller;
};
enum GetPrintersError {
kUserPermissionDenied,
};
union GetPrintersResult {
array<WebPrinterInfo> printers;
GetPrintersError error;
};
enum WebPrinterFetchError {
kPrinterUnreachable,
kUserPermissionDenied,
};
union WebPrinterFetchResult {
WebPrinterAttributes printer_attributes;
WebPrinterFetchError error;
};
enum WebPrintError {
kPrinterUnreachable,
kDocumentMalformed,
kPrintJobTemplateAttributesMismatch,
kUserPermissionDenied,
};
union WebPrintResult {
WebPrintJobInfo print_job_info;
WebPrintError error;
};
// Interface for interactions with a particular printer from the render process.
// The implementation is responsible for checking access permissions.
interface WebPrinter {
// Fetches full attributes of this printer.
FetchAttributes() => (WebPrinterFetchResult result);
// Sends a print job to a printer.
Print(pending_remote<blink.mojom.Blob> document,
WebPrintJobTemplateAttributes attributes) => (WebPrintResult result);
};
// Interface for accessing printers from the render process.
// The implementation is responsible for checking access permissions.
interface WebPrintingService {
// Returns a list of local printers for this device.
GetPrinters() => (GetPrintersResult result);
};