/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/**
 * Definition of the PPP_Printing interface.
 */

// Note: This version should always match the PPB_Printing_Dev interface.
label Chrome {
  M21 = 0.6
};

/**
 * Specifies a contiguous range of page numbers to be printed.
 * The page numbers use a zero-based index.
 */
[assert_size(8)]
struct PP_PrintPageNumberRange_Dev {
  uint32_t first_page_number;
  uint32_t last_page_number;
};

interface PPP_Printing_Dev {
  /**
   *  Returns a bit field representing the supported print output formats.  For
   *  example, if only PDF and PostScript are supported,
   *  QuerySupportedFormats returns a value equivalent to:
   *  (PP_PRINTOUTPUTFORMAT_PDF | PP_PRINTOUTPUTFORMAT_POSTSCRIPT)
   */
  uint32_t QuerySupportedFormats([in] PP_Instance instance);

  /**
   * Begins a print session with the given print settings. Calls to PrintPages
   * can only be made after a successful call to Begin. Returns the number of
   * pages required for the print output at the given page size (0 indicates
   * a failure).
   */
  int32_t Begin([in] PP_Instance instance,
                [in] PP_PrintSettings_Dev print_settings);

  /**
   * Prints the specified pages using the format specified in Begin.
   * Returns a PPB_Buffer resource that represents the printed output. Returns
   * 0 on failure.
   */
  PP_Resource PrintPages([in] PP_Instance instance,
                         [in] PP_PrintPageNumberRange_Dev page_ranges,
                         [in] uint32_t page_range_count);

  /** Ends the print session. Further calls to PrintPages will fail. */
  void End([in] PP_Instance instance);

  /**
   *  Returns true if the current content should be printed into the full page
   *  and not scaled down to fit within the printer's printable area.
   */
  PP_Bool IsScalingDisabled([in] PP_Instance instance);
};
