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_clipboard.idl modified Thu Jan 23 10:16:39 2014. */
7
8#ifndef PPAPI_C_PRIVATE_PPB_FLASH_CLIPBOARD_H_
9#define PPAPI_C_PRIVATE_PPB_FLASH_CLIPBOARD_H_
10
11#include "ppapi/c/pp_bool.h"
12#include "ppapi/c/pp_instance.h"
13#include "ppapi/c/pp_macros.h"
14#include "ppapi/c/pp_stdint.h"
15#include "ppapi/c/pp_var.h"
16
17#define PPB_FLASH_CLIPBOARD_INTERFACE_4_0 "PPB_Flash_Clipboard;4.0"
18#define PPB_FLASH_CLIPBOARD_INTERFACE_5_0 "PPB_Flash_Clipboard;5.0"
19#define PPB_FLASH_CLIPBOARD_INTERFACE_5_1 "PPB_Flash_Clipboard;5.1"
20#define PPB_FLASH_CLIPBOARD_INTERFACE PPB_FLASH_CLIPBOARD_INTERFACE_5_1
21
22/**
23 * @file
24 * This file defines the private <code>PPB_Flash_Clipboard</code> API used by
25 * Pepper Flash for reading and writing to the clipboard.
26 */
27
28
29/**
30 * @addtogroup Enums
31 * @{
32 */
33/**
34 * This enumeration contains the types of clipboards that can be accessed.
35 * These types correspond to clipboard types in WebKit.
36 */
37typedef enum {
38  /** The standard clipboard. */
39  PP_FLASH_CLIPBOARD_TYPE_STANDARD = 0,
40  /** The selection clipboard (e.g., on Linux). */
41  PP_FLASH_CLIPBOARD_TYPE_SELECTION = 1
42} PP_Flash_Clipboard_Type;
43PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Flash_Clipboard_Type, 4);
44
45/**
46 * This enumeration contains the predefined clipboard data formats.
47 */
48typedef enum {
49  /** Indicates an invalid or unsupported clipboard data format. */
50  PP_FLASH_CLIPBOARD_FORMAT_INVALID = 0,
51  /**
52   * Indicates plaintext clipboard data. The format expected/returned is a
53   * <code>PP_VARTYPE_STRING</code>.
54   */
55  PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT = 1,
56  /**
57   * Indicates HTML clipboard data. The format expected/returned is a
58   * <code>PP_VARTYPE_STRING</code>.
59   */
60  PP_FLASH_CLIPBOARD_FORMAT_HTML = 2,
61  /**
62   * Indicates RTF clipboard data. The format expected/returned is a
63   * <code>PP_VARTYPE_ARRAY_BUFFER</code>.
64   */
65  PP_FLASH_CLIPBOARD_FORMAT_RTF = 3
66} PP_Flash_Clipboard_Format;
67PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Flash_Clipboard_Format, 4);
68/**
69 * @}
70 */
71
72/**
73 * @addtogroup Interfaces
74 * @{
75 */
76/**
77 * The <code>PPB_Flash_Clipboard</code> interface contains pointers to functions
78 * used by Pepper Flash to access the clipboard.
79 *
80 */
81struct PPB_Flash_Clipboard_5_1 {
82  /**
83   * Registers a custom clipboard format. The format is identified by a
84   * string. An id identifying the format will be returned if the format is
85   * successfully registered, which can be used to read/write data of that
86   * format. If the format has already been registered, the id associated with
87   * that format will be returned. If the format fails to be registered
88   * <code>PP_FLASH_CLIPBOARD_FORMAT_INVALID</code> will be returned.
89   *
90   * All custom data should be read/written as <code>PP_Var</code> array
91   * buffers. The clipboard format is pepper-specific meaning that although the
92   * data will be stored on the system clipboard, it can only be accessed in a
93   * sensible way by using the pepper API. Data stored in custom formats can
94   * be safely shared between different applications that use pepper.
95   */
96  uint32_t (*RegisterCustomFormat)(PP_Instance instance_id,
97                                   const char* format_name);
98  /**
99   * Checks whether a given data format is available from the given clipboard.
100   * Returns true if the given format is available from the given clipboard.
101   */
102  PP_Bool (*IsFormatAvailable)(PP_Instance instance_id,
103                               PP_Flash_Clipboard_Type clipboard_type,
104                               uint32_t format);
105  /**
106   * Reads data in the given <code>format</code> from the clipboard. An
107   * undefined <code>PP_Var</code> is returned if there is an error in reading
108   * the clipboard data and a null <code>PP_Var</code> is returned if there is
109   * no data of the specified <code>format</code> to read.
110   */
111  struct PP_Var (*ReadData)(PP_Instance instance_id,
112                            PP_Flash_Clipboard_Type clipboard_type,
113                            uint32_t format);
114  /**
115   * Writes the given array of data items to the clipboard. All existing
116   * clipboard data in any format is erased before writing this data. Thus,
117   * passing an array of size 0 has the effect of clearing the clipboard without
118   * writing any data. Each data item in the array should have a different
119   * <code>PP_Flash_Clipboard_Format</code>. If multiple data items have the
120   * same format, only the last item with that format will be written.
121   * If there is an error writing any of the items in the array to the
122   * clipboard, none will be written and an error code is returned.
123   * The error code will be <code>PP_ERROR_NOSPACE</code> if the value is
124   * too large to be written, <code>PP_ERROR_BADARGUMENT</code> if a PP_Var
125   * cannot be converted into the format supplied or <code>PP_FAILED</code>
126   * if the format is not supported.
127   */
128  int32_t (*WriteData)(PP_Instance instance_id,
129                       PP_Flash_Clipboard_Type clipboard_type,
130                       uint32_t data_item_count,
131                       const uint32_t formats[],
132                       const struct PP_Var data_items[]);
133  /**
134   * Gets a sequence number which uniquely identifies clipboard state. This can
135   * be used to version the data on the clipboard and determine whether it has
136   * changed. The sequence number will be placed in |sequence_number| and
137   * PP_TRUE returned if the sequence number was retrieved successfully.
138   */
139  PP_Bool (*GetSequenceNumber)(PP_Instance instance_id,
140                               PP_Flash_Clipboard_Type clipboard_type,
141                               uint64_t* sequence_number);
142};
143
144typedef struct PPB_Flash_Clipboard_5_1 PPB_Flash_Clipboard;
145
146struct PPB_Flash_Clipboard_4_0 {
147  PP_Bool (*IsFormatAvailable)(PP_Instance instance_id,
148                               PP_Flash_Clipboard_Type clipboard_type,
149                               PP_Flash_Clipboard_Format format);
150  struct PP_Var (*ReadData)(PP_Instance instance_id,
151                            PP_Flash_Clipboard_Type clipboard_type,
152                            PP_Flash_Clipboard_Format format);
153  int32_t (*WriteData)(PP_Instance instance_id,
154                       PP_Flash_Clipboard_Type clipboard_type,
155                       uint32_t data_item_count,
156                       const PP_Flash_Clipboard_Format formats[],
157                       const struct PP_Var data_items[]);
158};
159
160struct PPB_Flash_Clipboard_5_0 {
161  uint32_t (*RegisterCustomFormat)(PP_Instance instance_id,
162                                   const char* format_name);
163  PP_Bool (*IsFormatAvailable)(PP_Instance instance_id,
164                               PP_Flash_Clipboard_Type clipboard_type,
165                               uint32_t format);
166  struct PP_Var (*ReadData)(PP_Instance instance_id,
167                            PP_Flash_Clipboard_Type clipboard_type,
168                            uint32_t format);
169  int32_t (*WriteData)(PP_Instance instance_id,
170                       PP_Flash_Clipboard_Type clipboard_type,
171                       uint32_t data_item_count,
172                       const uint32_t formats[],
173                       const struct PP_Var data_items[]);
174};
175/**
176 * @}
177 */
178
179#endif  /* PPAPI_C_PRIVATE_PPB_FLASH_CLIPBOARD_H_ */
180
181