// 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.
// Use the <code>chrome.printing</code> API to send print jobs to printers
// installed on Chromebook.
[platforms=("chromeos", "lacros"),
implemented_in="chrome/browser/extensions/api/printing/printing_api.h"]
namespace printing {
dictionary SubmitJobRequest {
// The print job to be submitted.
// The only supported content type is "application/pdf", and the
// <a href="https://developers.google.com/cloud-print/docs/cdd#cjt">Cloud Job Ticket</a>
// shouldn't include <code>FitToPageTicketItem</code>,
// <code>PageRangeTicketItem</code>, <code>ReverseOrderTicketItem</code>
// and <code>VendorTicketItem</code> fields since they are
// irrelevant for native printing. All other fields must be present.
printerProvider.PrintJob job;
// Used internally to store the blob uuid after parameter customization and
// shouldn't be populated by the extension.
[nodoc] DOMString? documentBlobUuid;
};
// The status of $(ref:submitJob) request.
enum SubmitJobStatus {
// Sent print job request is accepted.
OK,
// Sent print job request is rejected by the user.
USER_REJECTED
};
// Response for $(ref:submitJob) request.
dictionary SubmitJobResponse {
// The status of the request.
SubmitJobStatus status;
// The id of created print job. This is a unique identifier among all print
// jobs on the device. If status is not OK, jobId will be null.
DOMString? jobId;
};
// The source of the printer.
enum PrinterSource {
// Printer was added by user.
USER,
// Printer was added via policy.
POLICY
};
// Description of the printer.
dictionary Printer {
// The printer's identifier; guaranteed to be unique among printers on the
// device.
DOMString id;
// The name of the printer.
DOMString name;
// The human-readable description of the printer.
DOMString description;
// The printer URI. This can be used by extensions to choose the printer for
// the user.
DOMString uri;
// The source of the printer (user or policy configured).
PrinterSource source;
// The flag which shows whether the printer fits
// <a href="https://chromium.org/administrators/policy-list-3#DefaultPrinterSelection">
// DefaultPrinterSelection</a> rules.
// Note that several printers could be flagged.
boolean isDefault;
// The value showing how recent the printer was used for printing from
// Chrome. The lower the value is the more recent the printer was used. The
// minimum value is 0. Missing value indicates that the printer wasn't used
// recently. This value is guaranteed to be unique amongst printers.
long? recentlyUsedRank;
};
// The status of the printer.
enum PrinterStatus {
// The door of the printer is open. Printer still accepts print jobs.
DOOR_OPEN,
// The tray of the printer is missing. Printer still accepts print jobs.
TRAY_MISSING,
// The printer is out of ink. Printer still accepts print jobs.
OUT_OF_INK,
// The printer is out of paper. Printer still accepts print jobs.
OUT_OF_PAPER,
// The output area of the printer (e.g. tray) is full. Printer still accepts
// print jobs.
OUTPUT_FULL,
// The printer has a paper jam. Printer still accepts print jobs.
PAPER_JAM,
// Some generic issue. Printer still accepts print jobs.
GENERIC_ISSUE,
// The printer is stopped and doesn't print but still accepts print jobs.
STOPPED,
// The printer is unreachable and doesn't accept print jobs.
UNREACHABLE,
// The SSL certificate is expired. Printer accepts jobs but they fail.
EXPIRED_CERTIFICATE,
// The printer is available.
AVAILABLE
};
// Response for $(ref:getPrinterInfo) request.
dictionary GetPrinterInfoResponse {
// Printer capabilities in
// <a href="https://developers.google.com/cloud-print/docs/cdd#cdd">
// CDD format</a>.
// The property may be missing.
object? capabilities;
// The status of the printer.
PrinterStatus status;
};
// Status of the print job.
enum JobStatus {
// Print job is received on Chrome side but was not processed yet.
PENDING,
// Print job is sent for printing.
IN_PROGRESS,
// Print job was interrupted due to some error.
FAILED,
// Print job was canceled by the user or via API.
CANCELED,
// Print job was printed without any errors.
PRINTED
};
callback SubmitJobCallback = void(SubmitJobResponse response);
callback CancelJobCallback = void();
callback GetPrintersCallback = void(Printer[] printers);
callback GetPrinterInfoCallback = void(GetPrinterInfoResponse response);
interface Functions {
// Submits the job for printing. If the extension is not listed in
// the <a href="https://chromeenterprise.google/policies/#PrintingAPIExtensionsAllowlist">
// <code>PrintingAPIExtensionsAllowlist</code></a> policy,
// the user is prompted to accept the print job.<br/>
// Before Chrome 120, this function did not return a promise.
static void submitJob(
SubmitJobRequest request,
SubmitJobCallback callback);
// Cancels previously submitted job.
// |jobId|: The id of the print job to cancel. This should be the same id
// received in a $(ref:SubmitJobResponse).
static void cancelJob(
DOMString jobId,
CancelJobCallback callback);
// Returns the list of available printers on the device. This includes
// manually added, enterprise and discovered printers.
static void getPrinters(GetPrintersCallback callback);
// Returns the status and capabilities of the printer in
// <a href="https://developers.google.com/cloud-print/docs/cdd#cdd">
// CDD format</a>.
// This call will fail with a runtime error if no printers with given id are
// installed.
static void getPrinterInfo(
DOMString printerId,
GetPrinterInfoCallback callback);
};
interface Properties {
// The maximum number of times that $(ref:submitJob) can be called per
// minute.
[value=40] static long MAX_SUBMIT_JOB_CALLS_PER_MINUTE();
// The maximum number of times that $(ref:getPrinterInfo) can be called per
// minute.
[value=20] static long MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE();
};
interface Events {
// Event fired when the status of the job is changed.
// This is only fired for the jobs created by this extension.
static void onJobStatusChanged(DOMString jobId, JobStatus status);
};
};