chromium/chrome/common/extensions/api/printing_metrics.idl

// 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.printingMetrics</code> API to fetch data about
// printing usage.
[platforms=("chromeos", "lacros"),
 implemented_in="chrome/browser/chromeos/extensions/printing_metrics/printing_metrics_api.h"]
namespace printingMetrics {
  // The source of the print job.
  enum PrintJobSource {
    // Specifies that the job was created from the Print Preview page
    // initiated by the user.
    PRINT_PREVIEW,

    // Specifies that the job was created from an Android App.
    ANDROID_APP,

    // Specifies that the job was created by extension via Chrome API.
    EXTENSION,

    // Specifies that the job was created by an Isolated Web App via API.
    ISOLATED_WEB_APP
  };

  // Specifies the final status of the print job.
  enum PrintJobStatus {
    // Specifies that the print job was interrupted due to some error.
   FAILED,

   // Specifies that the print job was canceled by the user or via API.
   CANCELED,

   // Specifies that the print job was printed without any errors.
   PRINTED
  };

  // The source of the printer.
  enum PrinterSource {
    // Specifies that the printer was added by user.
    USER,

    // Specifies that the printer was added via policy.
    POLICY
  };

  enum ColorMode {
    // Specifies that black and white mode was used.
    BLACK_AND_WHITE,

    // Specifies that color mode was used.
    COLOR
  };

  enum DuplexMode {
    // Specifies that one-sided printing was used.
    ONE_SIDED,

    // Specifies that two-sided printing was used, flipping on long edge.
    TWO_SIDED_LONG_EDGE,

    // Specifies that two-sided printing was used, flipping on short edge.
    TWO_SIDED_SHORT_EDGE
  };

  // The size of requested media.
  dictionary MediaSize {
    // Width (in micrometers) of the media used for printing.
    long width;

    // Height (in micrometers) of the media used for printing.
    long height;

    // Vendor-provided ID, e.g. "iso_a3_297x420mm" or "na_index-3x5_3x5in".
    // Possible values are values of "media" IPP attribute and can be found on
    // <a href="https://www.iana.org/assignments/ipp-registrations/ipp-registrations.xhtml">
    // IANA page</a> .
    DOMString vendorId;
  };

  // The requested settings of print job.
  dictionary PrintSettings {
    // The requested color mode.
    ColorMode color;

    // The requested duplex mode.
    DuplexMode duplex;

    // The requested media size.
    MediaSize mediaSize;

    // The requested number of copies.
    long copies;
  };

  // The printer info.
  dictionary Printer {
    // Displayed name of the printer.
    DOMString name;

    // The full path for the printer.
    // Contains protocol, hostname, port, and queue.
    DOMString uri;

    // The source of the printer.
    PrinterSource source;
  };

  // Print job information.
  dictionary PrintJobInfo {
    // The ID of the job.
    DOMString id;

    // The title of the document which was printed.
    DOMString title;

    // Source showing who initiated the print job.
    PrintJobSource source;

    // ID of source. Null if source is PRINT_PREVIEW or ANDROID_APP.
    DOMString? sourceId;

    // The final status of the job.
    PrintJobStatus status;

    // The job creation time (in milliseconds past the Unix epoch).
    double creationTime;

    // The job completion time (in milliseconds past the Unix epoch).
    double completionTime;

    // The info about the printer which printed the document.
    Printer printer;

    // The settings of the print job.
    PrintSettings settings;

    // The number of pages in the document.
    long numberOfPages;

    // The status of the printer.
    printing.PrinterStatus printer_status;
  };

  callback GetPrintJobsCallback = void(PrintJobInfo[] jobs);

  interface Functions {
    // Returns the list of the finished print jobs.
    static void getPrintJobs(GetPrintJobsCallback callback);
  };

  interface Events {
    // Event fired when the print job is finished.
    // This includes any of termination statuses: FAILED, CANCELED and PRINTED.
    static void onPrintJobFinished(PrintJobInfo jobInfo);
  };
};