1/* Copyright (c) 2012 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
6/* From private/ppb_flash.idl modified Thu Apr 18 15:06:12 2013. */
7
8#ifndef PPAPI_C_PRIVATE_PPB_FLASH_H_
9#define PPAPI_C_PRIVATE_PPB_FLASH_H_
10
11#include "ppapi/c/pp_array_output.h"
12#include "ppapi/c/pp_bool.h"
13#include "ppapi/c/pp_instance.h"
14#include "ppapi/c/pp_macros.h"
15#include "ppapi/c/pp_module.h"
16#include "ppapi/c/pp_point.h"
17#include "ppapi/c/pp_rect.h"
18#include "ppapi/c/pp_resource.h"
19#include "ppapi/c/pp_size.h"
20#include "ppapi/c/pp_stdint.h"
21#include "ppapi/c/pp_time.h"
22#include "ppapi/c/pp_var.h"
23#include "ppapi/c/trusted/ppb_browser_font_trusted.h"
24
25#define PPB_FLASH_INTERFACE_12_4 "PPB_Flash;12.4"
26#define PPB_FLASH_INTERFACE_12_5 "PPB_Flash;12.5"
27#define PPB_FLASH_INTERFACE_12_6 "PPB_Flash;12.6"
28#define PPB_FLASH_INTERFACE_13_0 "PPB_Flash;13.0"
29#define PPB_FLASH_INTERFACE PPB_FLASH_INTERFACE_13_0
30
31/**
32 * @file
33 * This file contains the <code>PPB_Flash</code> interface.
34 */
35
36
37/**
38 * @addtogroup Enums
39 * @{
40 */
41typedef enum {
42  /**
43   * No restrictions on Flash LSOs.
44   */
45  PP_FLASHLSORESTRICTIONS_NONE = 1,
46  /**
47   * Don't allow access to Flash LSOs.
48   */
49  PP_FLASHLSORESTRICTIONS_BLOCK = 2,
50  /**
51   * Store Flash LSOs in memory only.
52   */
53  PP_FLASHLSORESTRICTIONS_IN_MEMORY = 3
54} PP_FlashLSORestrictions;
55PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FlashLSORestrictions, 4);
56
57typedef enum {
58  /**
59   * Specifies if the system likely supports 3D hardware acceleration.
60   *
61   * The result is a boolean PP_Var, depending on the supported nature of 3D
62   * acceleration. If querying this function returns true, the 3D system will
63   * normally use the native hardware for rendering which will be much faster.
64   *
65   * Having this set to true only means that 3D should be used to draw 2D and
66   * video elements. PP_FLASHSETTING_STAGE3D_ENABLED should be checked to
67   * determine if it's ok to use 3D for arbitrary content.
68   *
69   * In rare cases (depending on the platform) this value will be true but a
70   * created 3D context will use emulation because context initialization
71   * failed.
72   */
73  PP_FLASHSETTING_3DENABLED = 1,
74  /**
75   * Specifies if the given instance is in private/incognito/off-the-record mode
76   * (returns true) or "regular" mode (returns false). Returns an undefined
77   * PP_Var on invalid instance.
78   */
79  PP_FLASHSETTING_INCOGNITO = 2,
80  /**
81   * Specifies if arbitrary 3d commands are supported (returns true), or if 3d
82   * should only be used for drawing 2d and video (returns false).
83   *
84   * This should only be enabled if PP_FLASHSETTING_3DENABLED is true.
85   */
86  PP_FLASHSETTING_STAGE3DENABLED = 3,
87  /**
88   * Specifies the string for the language code of the UI of the browser.
89   *
90   * For example: "en-US" or "de".
91   *
92   * Returns an undefined PP_Var on invalid instance.
93   */
94  PP_FLASHSETTING_LANGUAGE = 4,
95  /**
96   * Specifies the number of CPU cores that are present on the system.
97   */
98  PP_FLASHSETTING_NUMCORES = 5,
99  /**
100   * Specifies restrictions on how flash should handle LSOs. The result is an
101   * int from <code>PP_FlashLSORestrictions</code>.
102   */
103  PP_FLASHSETTING_LSORESTRICTIONS = 6,
104  /**
105   * Specifies if the driver is reliable enough to use Shader Model 3 commands
106   * with it.
107   *
108   * This should only be enabled if PP_FLASHSETTING_STAGE3DENABLED is true.
109   */
110  PP_FLASHSETTING_STAGE3DBASELINEENABLED = 7
111} PP_FlashSetting;
112PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FlashSetting, 4);
113
114/**
115 * This enum provides keys for setting breakpad crash report data.
116 */
117typedef enum {
118  /**
119   * Specifies the document URL which contains the flash instance.
120   */
121  PP_FLASHCRASHKEY_URL = 1,
122  /**
123   * Specifies the URL of the current swf.
124   */
125  PP_FLASHCRASHKEY_RESOURCE_URL = 2
126} PP_FlashCrashKey;
127PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FlashCrashKey, 4);
128/**
129 * @}
130 */
131
132/**
133 * @addtogroup Interfaces
134 * @{
135 */
136/**
137 * The <code>PPB_Flash</code> interface contains pointers to various functions
138 * that are only needed to support Pepper Flash.
139 */
140struct PPB_Flash_13_0 {
141  /**
142   * Sets or clears the rendering hint that the given plugin instance is always
143   * on top of page content. Somewhat more optimized painting can be used in
144   * this case.
145   */
146  void (*SetInstanceAlwaysOnTop)(PP_Instance instance, PP_Bool on_top);
147  /**
148   * Draws the given pre-laid-out text. It is almost equivalent to Windows'
149   * ExtTextOut with the addition of the transformation (a 3x3 matrix given the
150   * transform to apply before drawing). It also adds the allow_subpixel_aa
151   * flag which when true, will use subpixel antialiasing if enabled in the
152   * system settings. For this to work properly, the graphics layer that the
153   * text is being drawn into must be opaque.
154   */
155  PP_Bool (*DrawGlyphs)(
156      PP_Instance instance,
157      PP_Resource pp_image_data,
158      const struct PP_BrowserFont_Trusted_Description* font_desc,
159      uint32_t color,
160      const struct PP_Point* position,
161      const struct PP_Rect* clip,
162      const float transformation[3][3],
163      PP_Bool allow_subpixel_aa,
164      uint32_t glyph_count,
165      const uint16_t glyph_indices[],
166      const struct PP_Point glyph_advances[]);
167  /**
168   * Retrieves the proxy that will be used for the given URL. The result will
169   * be a string in PAC format, or an undefined var on error.
170   */
171  struct PP_Var (*GetProxyForURL)(PP_Instance instance, const char* url);
172  /**
173   * Navigate to the URL given by the given URLRequestInfo. (This supports GETs,
174   * POSTs, and javascript: URLs.) May open a new tab if target is not "_self".
175   */
176  int32_t (*Navigate)(PP_Resource request_info,
177                      const char* target,
178                      PP_Bool from_user_action);
179  /**
180   * Retrieves the local time zone offset from GM time for the given UTC time.
181   */
182  double (*GetLocalTimeZoneOffset)(PP_Instance instance, PP_Time t);
183  /**
184   * Gets a (string) with "command-line" options for Flash; used to pass
185   * run-time debugging parameters, etc.
186   */
187  struct PP_Var (*GetCommandLineArgs)(PP_Module module);
188  /**
189   * Loads the given font in a more privileged process on Windows. Call this if
190   * Windows is giving errors for font calls. See
191   * content/renderer/font_cache_dispatcher_win.cc
192   *
193   * The parameter is a pointer to a LOGFONTW structure.
194   *
195   * On non-Windows platforms, this function does nothing.
196   */
197  void (*PreloadFontWin)(const void* logfontw);
198  /**
199   * Returns whether the given rectangle (in the plugin) is topmost, i.e., above
200   * all other web content.
201   */
202  PP_Bool (*IsRectTopmost)(PP_Instance instance, const struct PP_Rect* rect);
203  /**
204   * Indicates that there's activity and, e.g., the screensaver shouldn't kick
205   * in.
206   */
207  void (*UpdateActivity)(PP_Instance instance);
208  /**
209   * Returns the value associated with the given setting. Invalid enums will
210   * result in an undefined PP_Var return value.
211   */
212  struct PP_Var (*GetSetting)(PP_Instance instance, PP_FlashSetting setting);
213  /**
214   * Allows setting breakpad crash data which will be included in plugin crash
215   * reports. Returns PP_FALSE if crash data could not be set.
216   */
217  PP_Bool (*SetCrashData)(PP_Instance instance,
218                          PP_FlashCrashKey key,
219                          struct PP_Var value);
220  /**
221   * Enumerates video capture devices. |video_capture| is a valid
222   * PPB_VideoCapture_Dev resource. Once the operation has completed
223   * successfully, |devices| will be set up with an array of
224   * PPB_DeviceRef_Dev resources.
225   *
226   * PP_OK is returned on success and different pepper error code on failure.
227   * The ref count of the returned |devices| has already been increased by 1 for
228   * the caller.
229   *
230   * NOTE: This method is a synchronous version of |EnumerateDevices| in
231   * PPB_VideoCapture_Dev.
232   */
233  int32_t (*EnumerateVideoCaptureDevices)(PP_Instance instance,
234                                          PP_Resource video_capture,
235                                          struct PP_ArrayOutput devices);
236};
237
238typedef struct PPB_Flash_13_0 PPB_Flash;
239
240struct PPB_Flash_12_4 {
241  void (*SetInstanceAlwaysOnTop)(PP_Instance instance, PP_Bool on_top);
242  PP_Bool (*DrawGlyphs)(
243      PP_Instance instance,
244      PP_Resource pp_image_data,
245      const struct PP_BrowserFont_Trusted_Description* font_desc,
246      uint32_t color,
247      const struct PP_Point* position,
248      const struct PP_Rect* clip,
249      const float transformation[3][3],
250      PP_Bool allow_subpixel_aa,
251      uint32_t glyph_count,
252      const uint16_t glyph_indices[],
253      const struct PP_Point glyph_advances[]);
254  struct PP_Var (*GetProxyForURL)(PP_Instance instance, const char* url);
255  int32_t (*Navigate)(PP_Resource request_info,
256                      const char* target,
257                      PP_Bool from_user_action);
258  void (*RunMessageLoop)(PP_Instance instance);
259  void (*QuitMessageLoop)(PP_Instance instance);
260  double (*GetLocalTimeZoneOffset)(PP_Instance instance, PP_Time t);
261  struct PP_Var (*GetCommandLineArgs)(PP_Module module);
262  void (*PreloadFontWin)(const void* logfontw);
263  PP_Bool (*IsRectTopmost)(PP_Instance instance, const struct PP_Rect* rect);
264  int32_t (*InvokePrinting)(PP_Instance instance);
265  void (*UpdateActivity)(PP_Instance instance);
266  struct PP_Var (*GetDeviceID)(PP_Instance instance);
267  int32_t (*GetSettingInt)(PP_Instance instance, PP_FlashSetting setting);
268  struct PP_Var (*GetSetting)(PP_Instance instance, PP_FlashSetting setting);
269};
270
271struct PPB_Flash_12_5 {
272  void (*SetInstanceAlwaysOnTop)(PP_Instance instance, PP_Bool on_top);
273  PP_Bool (*DrawGlyphs)(
274      PP_Instance instance,
275      PP_Resource pp_image_data,
276      const struct PP_BrowserFont_Trusted_Description* font_desc,
277      uint32_t color,
278      const struct PP_Point* position,
279      const struct PP_Rect* clip,
280      const float transformation[3][3],
281      PP_Bool allow_subpixel_aa,
282      uint32_t glyph_count,
283      const uint16_t glyph_indices[],
284      const struct PP_Point glyph_advances[]);
285  struct PP_Var (*GetProxyForURL)(PP_Instance instance, const char* url);
286  int32_t (*Navigate)(PP_Resource request_info,
287                      const char* target,
288                      PP_Bool from_user_action);
289  void (*RunMessageLoop)(PP_Instance instance);
290  void (*QuitMessageLoop)(PP_Instance instance);
291  double (*GetLocalTimeZoneOffset)(PP_Instance instance, PP_Time t);
292  struct PP_Var (*GetCommandLineArgs)(PP_Module module);
293  void (*PreloadFontWin)(const void* logfontw);
294  PP_Bool (*IsRectTopmost)(PP_Instance instance, const struct PP_Rect* rect);
295  int32_t (*InvokePrinting)(PP_Instance instance);
296  void (*UpdateActivity)(PP_Instance instance);
297  struct PP_Var (*GetDeviceID)(PP_Instance instance);
298  int32_t (*GetSettingInt)(PP_Instance instance, PP_FlashSetting setting);
299  struct PP_Var (*GetSetting)(PP_Instance instance, PP_FlashSetting setting);
300  PP_Bool (*SetCrashData)(PP_Instance instance,
301                          PP_FlashCrashKey key,
302                          struct PP_Var value);
303};
304
305struct PPB_Flash_12_6 {
306  void (*SetInstanceAlwaysOnTop)(PP_Instance instance, PP_Bool on_top);
307  PP_Bool (*DrawGlyphs)(
308      PP_Instance instance,
309      PP_Resource pp_image_data,
310      const struct PP_BrowserFont_Trusted_Description* font_desc,
311      uint32_t color,
312      const struct PP_Point* position,
313      const struct PP_Rect* clip,
314      const float transformation[3][3],
315      PP_Bool allow_subpixel_aa,
316      uint32_t glyph_count,
317      const uint16_t glyph_indices[],
318      const struct PP_Point glyph_advances[]);
319  struct PP_Var (*GetProxyForURL)(PP_Instance instance, const char* url);
320  int32_t (*Navigate)(PP_Resource request_info,
321                      const char* target,
322                      PP_Bool from_user_action);
323  void (*RunMessageLoop)(PP_Instance instance);
324  void (*QuitMessageLoop)(PP_Instance instance);
325  double (*GetLocalTimeZoneOffset)(PP_Instance instance, PP_Time t);
326  struct PP_Var (*GetCommandLineArgs)(PP_Module module);
327  void (*PreloadFontWin)(const void* logfontw);
328  PP_Bool (*IsRectTopmost)(PP_Instance instance, const struct PP_Rect* rect);
329  int32_t (*InvokePrinting)(PP_Instance instance);
330  void (*UpdateActivity)(PP_Instance instance);
331  struct PP_Var (*GetDeviceID)(PP_Instance instance);
332  int32_t (*GetSettingInt)(PP_Instance instance, PP_FlashSetting setting);
333  struct PP_Var (*GetSetting)(PP_Instance instance, PP_FlashSetting setting);
334  PP_Bool (*SetCrashData)(PP_Instance instance,
335                          PP_FlashCrashKey key,
336                          struct PP_Var value);
337  int32_t (*EnumerateVideoCaptureDevices)(PP_Instance instance,
338                                          PP_Resource video_capture,
339                                          struct PP_ArrayOutput devices);
340};
341/**
342 * @}
343 */
344
345#endif  /* PPAPI_C_PRIVATE_PPB_FLASH_H_ */
346
347