1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef PPAPI_C_PRIVATE_PPB_PDF_H_
6#define PPAPI_C_PRIVATE_PPB_PDF_H_
7
8#include "ppapi/c/dev/ppb_font_dev.h"
9#include "ppapi/c/pp_bool.h"
10#include "ppapi/c/pp_instance.h"
11#include "ppapi/c/pp_resource.h"
12#include "ppapi/c/pp_var.h"
13#include "ppapi/c/private/pp_private_font_charset.h"
14
15#define PPB_PDF_INTERFACE "PPB_PDF;1"
16
17// From the public PPB_Font_Dev file.
18struct PP_FontDescription_Dev;
19
20typedef enum {
21  PP_RESOURCESTRING_PDFGETPASSWORD = 0,
22  PP_RESOURCESTRING_PDFLOADING = 1,
23  PP_RESOURCESTRING_PDFLOAD_FAILED = 2,
24  PP_RESOURCESTRING_PDFPROGRESSLOADING = 3
25} PP_ResourceString;
26
27typedef enum {
28  PP_RESOURCEIMAGE_PDF_BUTTON_FTP = 0,
29  PP_RESOURCEIMAGE_PDF_BUTTON_FTP_HOVER = 1,
30  PP_RESOURCEIMAGE_PDF_BUTTON_FTP_PRESSED = 2,
31  PP_RESOURCEIMAGE_PDF_BUTTON_FTW = 3,
32  PP_RESOURCEIMAGE_PDF_BUTTON_FTW_HOVER = 4,
33  PP_RESOURCEIMAGE_PDF_BUTTON_FTW_PRESSED = 5,
34  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN = 6,
35  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN_HOVER = 7,
36  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN_PRESSED = 8,
37  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMOUT = 9,
38  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMOUT_HOVER = 10,
39  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMOUT_PRESSED = 11,
40  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_0 = 12,
41  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_1 = 13,
42  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_2 = 14,
43  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_3 = 15,
44  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_4 = 16,
45  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_5 = 17,
46  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_6 = 18,
47  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_7 = 19,
48  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_8 = 20,
49  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_9 = 21,
50  PP_RESOURCEIMAGE_PDF_BUTTON_THUMBNAIL_NUM_BACKGROUND = 22,
51  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_0 = 23,
52  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_1 = 24,
53  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_2 = 25,
54  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_3 = 26,
55  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_4 = 27,
56  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_5 = 28,
57  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_6 = 29,
58  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_7 = 30,
59  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_8 = 31,
60  PP_RESOURCEIMAGE_PDF_PROGRESS_BAR_BACKGROUND = 32,
61  PP_RESOURCEIMAGE_PDF_PAGE_DROPSHADOW = 33,
62  PP_RESOURCEIMAGE_PDF_BUTTON_SAVE = 34,
63  PP_RESOURCEIMAGE_PDF_BUTTON_SAVE_HOVER = 35,
64  PP_RESOURCEIMAGE_PDF_BUTTON_SAVE_PRESSED = 36,
65  PP_RESOURCEIMAGE_PDF_BUTTON_PRINT = 37,
66  PP_RESOURCEIMAGE_PDF_BUTTON_PRINT_HOVER = 38,
67  PP_RESOURCEIMAGE_PDF_BUTTON_PRINT_PRESSED = 39,
68  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN_END = 40,
69  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN_END_HOVER = 41,
70  PP_RESOURCEIMAGE_PDF_BUTTON_ZOOMIN_END_PRESSED = 42,
71  PP_RESOURCEIMAGE_PDF_PAN_SCROLL_ICON = 43,
72  PP_RESOURCEIMAGE_PDF_PAGE_INDICATOR_BACKGROUND = 44,
73  PP_RESOURCEIMAGE_PDF_BUTTON_PRINT_DISABLED = 45
74} PP_ResourceImage;
75
76typedef enum {
77  PP_PDFFEATURE_HIDPI = 0,
78  PP_PDFFEATURE_PRINTING = 1
79} PP_PDFFeature;
80
81struct PP_PrivateFontFileDescription {
82  const char* face;
83  uint32_t weight;
84  bool italic;
85};
86
87struct PP_PrivateFindResult {
88  int start_index;
89  int length;
90};
91
92struct PPB_PDF {
93  // Returns a localized string.
94  struct PP_Var (*GetLocalizedString)(PP_Instance instance,
95                                      PP_ResourceString string_id);
96
97  // Returns a resource image.
98  PP_Resource (*GetResourceImage)(PP_Instance instance,
99                                  PP_ResourceImage image_id);
100
101  // Returns a resource identifying a font file corresponding to the given font
102  // request after applying the browser-specific fallback.
103  //
104  // Currently Linux-only.
105  PP_Resource (*GetFontFileWithFallback)(
106      PP_Instance instance,
107      const struct PP_BrowserFont_Trusted_Description* description,
108      PP_PrivateFontCharset charset);
109
110  // Given a resource previously returned by GetFontFileWithFallback, returns
111  // a pointer to the requested font table. Linux only.
112  bool (*GetFontTableForPrivateFontFile)(PP_Resource font_file,
113                                         uint32_t table,
114                                         void* output,
115                                         uint32_t* output_length);
116
117  // Search the given string using ICU.  Use PPB_Core's MemFree on results when
118  // done.
119  void (*SearchString)(
120     PP_Instance instance,
121     const unsigned short* string,
122     const unsigned short* term,
123     bool case_sensitive,
124     struct PP_PrivateFindResult** results,
125     int* count);
126
127  // Since WebFrame doesn't know about PPAPI requests, it'll think the page has
128  // finished loading even if there are outstanding requests by the plugin.
129  // Take this out once WebFrame knows about requests by PPAPI plugins.
130  void (*DidStartLoading)(PP_Instance instance);
131  void (*DidStopLoading)(PP_Instance instance);
132
133  // Sets content restriction for a full-page plugin (i.e. can't copy/print).
134  // The value is a bitfield of ContentRestriction enums.
135  void (*SetContentRestriction)(PP_Instance instance, int restrictions);
136
137  // Use UMA so we know average pdf page count.
138  void (*HistogramPDFPageCount)(PP_Instance instance, int count);
139
140  // Notifies the browser that the given action has been performed.
141  void (*UserMetricsRecordAction)(PP_Instance instance, struct PP_Var action);
142
143  // Notifies the browser that the PDF has an unsupported feature.
144  void (*HasUnsupportedFeature)(PP_Instance instance);
145
146  // Invoke SaveAs... dialog, similar to the right-click or wrench menu.
147  void (*SaveAs)(PP_Instance instance);
148
149  // Invoke Print dialog for plugin.
150  void (*Print)(PP_Instance instance);
151
152  PP_Bool(*IsFeatureEnabled)(PP_Instance instance, PP_PDFFeature feature);
153
154  // Returns a resource image appropriate for a device with |scale| density.
155  // Returns 0 (NULL resource) if there is no resource at that scale
156  PP_Resource (*GetResourceImageForScale)(PP_Instance instance,
157                                          PP_ResourceImage image_id,
158                                          float scale);
159
160  // Invoke password dialog for plugin.
161  struct PP_Var (*ModalPromptForPassword)(PP_Instance instance,
162                                          struct PP_Var message);
163
164  // Returns PP_TRUE if the plugin is out of process.
165  PP_Bool (*IsOutOfProcess)(PP_Instance instance);
166
167  // Sets the selected text of the plugin.
168  void(*SetSelectedText)(PP_Instance instance, const char* selected_text);
169
170  // Sets the link currently under the cursor.
171  void (*SetLinkUnderCursor)(PP_Instance instance, const char* url);
172};
173
174#endif  // PPAPI_C_PRIVATE_PPB_PDF_H_
175