1/* Copyright 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/ppp_flash_browser_operations.idl,
7 *   modified Fri Aug 22 11:10:06 2014.
8 */
9
10#ifndef PPAPI_C_PRIVATE_PPP_FLASH_BROWSER_OPERATIONS_H_
11#define PPAPI_C_PRIVATE_PPP_FLASH_BROWSER_OPERATIONS_H_
12
13#include "ppapi/c/pp_bool.h"
14#include "ppapi/c/pp_macros.h"
15#include "ppapi/c/pp_stdint.h"
16
17#define PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_0 \
18    "PPP_Flash_BrowserOperations;1.0"
19#define PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2 \
20    "PPP_Flash_BrowserOperations;1.2"
21#define PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_3 \
22    "PPP_Flash_BrowserOperations;1.3"
23#define PPP_FLASH_BROWSEROPERATIONS_INTERFACE \
24    PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_3
25
26/**
27 * @file
28 * This file contains the <code>PPP_Flash_BrowserOperations</code> interface.
29 */
30
31
32/**
33 * @addtogroup Enums
34 * @{
35 */
36typedef enum {
37  PP_FLASH_BROWSEROPERATIONS_SETTINGTYPE_CAMERAMIC = 0,
38  PP_FLASH_BROWSEROPERATIONS_SETTINGTYPE_PEERNETWORKING = 1
39} PP_Flash_BrowserOperations_SettingType;
40PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Flash_BrowserOperations_SettingType, 4);
41
42typedef enum {
43  /* This value is only used with <code>SetSitePermission()</code>. */
44  PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT = 0,
45  PP_FLASH_BROWSEROPERATIONS_PERMISSION_ALLOW = 1,
46  PP_FLASH_BROWSEROPERATIONS_PERMISSION_BLOCK = 2,
47  PP_FLASH_BROWSEROPERATIONS_PERMISSION_ASK = 3
48} PP_Flash_BrowserOperations_Permission;
49PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Flash_BrowserOperations_Permission, 4);
50/**
51 * @}
52 */
53
54/**
55 * @addtogroup Structs
56 * @{
57 */
58struct PP_Flash_BrowserOperations_SiteSetting {
59  const char* site;
60  PP_Flash_BrowserOperations_Permission permission;
61};
62/**
63 * @}
64 */
65
66/**
67 * @addtogroup Typedefs
68 * @{
69 */
70typedef void (*PPB_Flash_BrowserOperations_GetSettingsCallback)(
71    void* user_data,
72    PP_Bool success,
73    PP_Flash_BrowserOperations_Permission default_permission,
74    uint32_t site_count,
75    const struct PP_Flash_BrowserOperations_SiteSetting sites[]);
76/**
77 * @}
78 */
79
80/**
81 * @addtogroup Interfaces
82 * @{
83 */
84/**
85 * This interface allows the browser to request the plugin do things.
86 */
87struct PPP_Flash_BrowserOperations_1_3 {
88  /**
89   * This function allows the plugin to implement the "Clear site data" feature.
90   *
91   * @param[in] plugin_data_path String containing the directory where the
92   * plugin data is
93   * stored. On UTF16 systems (Windows), this will be encoded as UTF-8. It will
94   * be an absolute path and will not have a directory separator (slash) at the
95   * end.
96   * @param[in] site String specifying which site to clear the data for. This
97   * will be null to clear data for all sites.
98   * @param[in] flags Currently always 0 in Chrome to clear all data. This may
99   * be extended in the future to clear only specific types of data.
100   * @param[in] max_age The maximum age in seconds to clear data for. This
101   * allows the plugin to implement "clear past hour" and "clear past data",
102   * etc.
103   *
104   * @return PP_TRUE on success, PP_FALSE on failure.
105   *
106   * See also the NPP_ClearSiteData function in NPAPI.
107   * https://wiki.mozilla.org/NPAPI:ClearSiteData
108   */
109  PP_Bool (*ClearSiteData)(const char* plugin_data_path,
110                           const char* site,
111                           uint64_t flags,
112                           uint64_t max_age);
113  /**
114   * Requests the plugin to deauthorize content licenses. It prevents Flash from
115   * playing protected content, such as movies and music the user may have
116   * rented or purchased.
117   *
118   * @param[in] plugin_data_path String containing the directory where the
119   * plugin settings are stored.
120   *
121   * @return <code>PP_TRUE</code> on success, <code>PP_FALSE</code> on failure.
122   */
123  PP_Bool (*DeauthorizeContentLicenses)(const char* plugin_data_path);
124  /**
125   * Gets permission settings. <code>callback</code> will be called exactly once
126   * to return the settings.
127   *
128   * @param[in] plugin_data_path String containing the directory where the
129   * plugin settings are stored.
130   * @param[in] setting_type What type of setting to retrieve.
131   * @param[in] callback The callback to return retrieved data.
132   * @param[inout] user_data An opaque pointer that will be passed to
133   * <code>callback</code>.
134   */
135  void (*GetPermissionSettings)(
136      const char* plugin_data_path,
137      PP_Flash_BrowserOperations_SettingType setting_type,
138      PPB_Flash_BrowserOperations_GetSettingsCallback callback,
139      void* user_data);
140  /**
141   * Sets default permission. It applies to all sites except those with
142   * site-specific settings.
143   *
144   * @param[in] plugin_data_path String containing the directory where the
145   * plugin settings are stored.
146   * @param[in] setting_type What type of setting to set.
147   * @param[in] permission The default permission.
148   * @param[in] clear_site_specific Whether to remove all site-specific
149   * settings.
150   *
151   * @return <code>PP_TRUE</code> on success, <code>PP_FALSE</code> on failure.
152   */
153  PP_Bool (*SetDefaultPermission)(
154      const char* plugin_data_path,
155      PP_Flash_BrowserOperations_SettingType setting_type,
156      PP_Flash_BrowserOperations_Permission permission,
157      PP_Bool clear_site_specific);
158  /**
159   * Sets site-specific permission. If a site has already got site-specific
160   * permission and it is not in <code>sites</code>, it won't be affected.
161   *
162   * @param[in] plugin_data_path String containing the directory where the
163   * plugin settings are stored.
164   * @param[in] setting_type What type of setting to set.
165   * @param[in] site_count How many items are there in <code>sites</code>.
166   * @param[in] sites The site-specific settings. If a site is specified with
167   * <code>PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT</code> permission, it
168   * will be removed from the site-specific list.
169   *
170   * @return <code>PP_TRUE</code> on success, <code>PP_FALSE</code> on failure.
171   */
172  PP_Bool (*SetSitePermission)(
173      const char* plugin_data_path,
174      PP_Flash_BrowserOperations_SettingType setting_type,
175      uint32_t site_count,
176      const struct PP_Flash_BrowserOperations_SiteSetting sites[]);
177  /**
178   * Returns a list of sites that have stored data, for use with the
179   * "Clear site data" feature.
180   *
181   * @param[in] plugin_data_path String containing the directory where the
182   * plugin data is stored.
183   * @param[out] sites A NULL-terminated array of sites that have stored data.
184   * Use FreeSiteList on the array when done.
185   *
186   * See also the NPP_GetSitesWithData function in NPAPI:
187   * https://wiki.mozilla.org/NPAPI:ClearSiteData
188   */
189  void (*GetSitesWithData)(const char* plugin_data_path, char*** sites);
190  /**
191   * Frees the list of sites returned by GetSitesWithData.
192   *
193   * @param[in] sites A NULL-terminated array of strings.
194   */
195  void (*FreeSiteList)(char* sites[]);
196};
197
198typedef struct PPP_Flash_BrowserOperations_1_3 PPP_Flash_BrowserOperations;
199
200struct PPP_Flash_BrowserOperations_1_0 {
201  PP_Bool (*ClearSiteData)(const char* plugin_data_path,
202                           const char* site,
203                           uint64_t flags,
204                           uint64_t max_age);
205};
206
207struct PPP_Flash_BrowserOperations_1_2 {
208  PP_Bool (*ClearSiteData)(const char* plugin_data_path,
209                           const char* site,
210                           uint64_t flags,
211                           uint64_t max_age);
212  PP_Bool (*DeauthorizeContentLicenses)(const char* plugin_data_path);
213  void (*GetPermissionSettings)(
214      const char* plugin_data_path,
215      PP_Flash_BrowserOperations_SettingType setting_type,
216      PPB_Flash_BrowserOperations_GetSettingsCallback callback,
217      void* user_data);
218  PP_Bool (*SetDefaultPermission)(
219      const char* plugin_data_path,
220      PP_Flash_BrowserOperations_SettingType setting_type,
221      PP_Flash_BrowserOperations_Permission permission,
222      PP_Bool clear_site_specific);
223  PP_Bool (*SetSitePermission)(
224      const char* plugin_data_path,
225      PP_Flash_BrowserOperations_SettingType setting_type,
226      uint32_t site_count,
227      const struct PP_Flash_BrowserOperations_SiteSetting sites[]);
228};
229/**
230 * @}
231 */
232
233#endif  /* PPAPI_C_PRIVATE_PPP_FLASH_BROWSER_OPERATIONS_H_ */
234
235