/* 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.
 */

/* This file contains PPB_PDF interface. */

enum PP_ResourceString{
  PP_RESOURCESTRING_PDFGETPASSWORD = 0,
  PP_RESOURCESTRING_PDFLOADING     = 1,
  PP_RESOURCESTRING_PDFLOAD_FAILED = 2
};

enum PP_ResourceImage{
  PP_RESOURCEIMAGE_PDF_BUTTON_FTH                      = 0,
  PP_RESOURCEIMAGE_PDF_BUTTON_FTH_HOVER                = 1,
  PP_RESOURCEIMAGE_PDF_BUTTON_FTH_PRESSED              = 2,
  PP_RESOURCEIMAGE_PDF_BUTTON_FTW                      = 3,
  PP_RESOURCEIMAGE_PDF_BUTTON_FTW_HOVER                = 4,
  PP_RESOURCEIMAGE_PDF_BUTTON_FTW_PRESSED              = 5,
  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN                   = 6,
  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN_HOVER             = 7,
  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN_PRESSED           = 8,
  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMOUT                  = 9,
  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMOUT_HOVER            = 10,
  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMOUT_PRESSED          = 11,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_0              = 12,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_1              = 13,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_2              = 14,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_3              = 15,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_4              = 16,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_5              = 17,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_6              = 18,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_7              = 19,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_8              = 20,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_9              = 21,
  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_NUM_BACKGROUND = 22
};

enum PP_PrivateFontCharset {
  PP_PRIVATEFONTCHARSET_ANSI        = 0,
  PP_PRIVATEFONTCHARSET_DEFAULT     = 1,
  PP_PRIVATEFONTCHARSET_SYMBOL      = 2,
  PP_PRIVATEFONTCHARSET_MAC         = 77,
  PP_PRIVATEFONTCHARSET_SHIFTJIS    = 128,
  PP_PRIVATEFONTCHARSET_HANGUL      = 129,
  PP_PRIVATEFONTCHARSET_JOHAB       = 130,
  PP_PRIVATEFONTCHARSET_GB2312      = 134,
  PP_PRIVATEFONTCHARSET_CHINESEBIG5 = 136,
  PP_PRIVATEFONTCHARSET_GREEK       = 161,
  PP_PRIVATEFONTCHARSET_TURKISH     = 162,
  PP_PRIVATEFONTCHARSET_VIETNAMESE  = 163,
  PP_PRIVATEFONTCHARSET_HEBREW      = 177,
  PP_PRIVATEFONTCHARSET_ARABIC      = 178,
  PP_PRIVATEFONTCHARSET_BALTIC      = 186,
  PP_PRIVATEFONTCHARSET_RUSSIAN     = 204,
  PP_PRIVATEFONTCHARSET_THAI        = 222,
  PP_PRIVATEFONTCHARSET_EASTEUROPE  = 238,
  PP_PRIVATEFONTCHARSET_OEM         = 255
};

struct PP_PrivateFontFileDescription {
  str_t face;
  uint32_t weight;
  PP_Bool italic;
};

struct PP_PrivateFindResult {
  int32_t start_index;
  int32_t length;
};

interface PPB_PDF_0_1 {
  /* Returns a localized string. */
   PP_Var GetLocalizedString(
       [in] PP_Instance instance,
       [in] PP_ResourceString string_id);

  /* Returns a resource image. */
  PP_Resource GetResourceImage(
      [in] PP_Instance instance,
      [in] PP_ResourceImage image_id);

  /* Returns a resource identifying a font file corresponding to the given font
   * request after applying the browser-specific fallback.
   *
   * Currently Linux-only.
   */
  PP_Resource GetFontFileWithFallback(
      [in] PP_Instance instance,
      [in] PP_FontDescription_Dev description,
      [in] PP_PrivateFontCharset charset);

  /* Given a resource previously returned by GetFontFileWithFallback, returns
   * a pointer to the requested font table. Linux only.
   */
  PP_Bool GetFontTableForPrivateFontFile(
      [in] PP_Resource font_file,
      [in] uint32_t table,
      [out] mem_t output,
      [out] uint32_t output_length);

  /* Search the given string using ICU.  Use PPB_Core's MemFree on results when
   * done.
   */
  void SearchString(
      [in] PP_Instance instance,
      [in] mem_t string,
      [in] mem_t term,
      [in] PP_Bool case_sensitive,
      [out, size_is(count)] PP_PrivateFindResult[] results,
      [out] int32_t count);

  /* Since WebFrame doesn't know about PPAPI requests, it'll think the page has
   * finished loading even if there are outstanding requests by the plugin.
   * Take this out once WebFrame knows about requests by PPAPI plugins.
   */
  void DidStartLoading(
      [in] PP_Instance instance);
  void DidStopLoading(
      [in] PP_Instance instance);

  /* Sets content restriction for a full-page plugin (i.e. can't copy/print).
   * The value is a bitfield of ContentRestriction enums.
   */
  void SetContentRestriction(
      [in] PP_Instance instance,
      [in] int32_t restrictions);

  /* Use UMA so we know average pdf page count. */
  void HistogramPDFPageCount(
      [in] int32_t count);

  /* Notifies the browser that the given action has been performed. */
  void UserMetricsRecordAction(
      [in] PP_Var action);

  /* Notifies the browser that the PDF has an unsupported feature. */
  void HasUnsupportedFeature(
      [in] PP_Instance instance);

  /* Tells the browser to open a dialog box to receive a password from the
   * user, masking input characters. Returns the value entered by the user, or
   * an empty string if the user cancels instead.
   */
  PP_Var ModalPromptForPassword(
      [in] PP_Instance instance,
      [in] PP_Var message);

  /* Returns PP_TRUE if the plugin is out of process. */
  PP_Bool IsOutOfProcess(
      [in] PP_Instance instance);

  /* Sets the selected text of the plugin. If |selected_text| is empty, then no
   * text is selected. */
  void SetSelectedText(
      [in] PP_Instance instance,
      [in] str_t selected_text);

  /* Sets the link under the cursor. If |url| is empty, then no link is under
   * the cursor. */
  void SetLinkUnderCursor(
      [in] PP_Instance instance,
      [in] str_t url);
};
