summaryrefslogtreecommitdiffstats
path: root/widget/nsITransferable.idl
blob: 0a8419c4bb53174c3a8cdd80b7cd2de73be9f23a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsIArray.idl"
#include "nsISupports.idl"
#include "nsIFormatConverter.idl"
#include "nsIContentPolicy.idl"

interface nsICookieJarSettings;
interface nsIPrincipal;
interface nsIReferrerInfo;

%{ C++

// Internal formats must have their second part starting with 'x-moz-',
// for example text/x-moz-internaltype. These cannot be assigned by
// unprivileged content but all other types can.
#define kInternal_Mimetype_Prefix   u"/x-moz-"_ns

// these probably shouldn't live here, but in some central repository shared
// by the entire app.
#define kTextMime                   "text/plain"
#define kRTFMime                    "text/rtf"
#define kMozTextInternal            "text/x-moz-text-internal"  // text data which isn't suppoed to be parsed by other apps.
#define kHTMLMime                   "text/html"
#define kAOLMailMime                "AOLMAIL"
#define kPNGImageMime               "image/png"
#define kJPEGImageMime              "image/jpeg"
#define kJPGImageMime               "image/jpg"
#define kGIFImageMime               "image/gif"
#define kFileMime                   "application/x-moz-file"

#define kURLMime                    "text/x-moz-url"        // data contains url\ntitle
#define kURLDataMime                "text/x-moz-url-data"   // data contains url only
#define kURLDescriptionMime         "text/x-moz-url-desc"   // data contains description
#define kURLPrivateMime             "text/x-moz-url-priv"   // same as kURLDataMime but for private uses
#define kNativeImageMime            "application/x-moz-nativeimage"
#define kNativeHTMLMime             "application/x-moz-nativehtml"

// These are used to indicate the context for a fragment of HTML source, such
// that some parent structure and style can be preserved. kHTMLContext
// contains the serialized ancestor elements, whereas kHTMLInfo are numbers
// identifying where in the context the fragment was from.
#define kHTMLContext   "text/_moz_htmlcontext"
#define kHTMLInfo      "text/_moz_htmlinfo"

// Holds the MIME type from the image request. This is used to ensure the
// local application handler for the request's MIME type accepts images with
// the given filename extension (from kFilePromiseDestFilename). When the
// image is dragged out, we replace the extension with a compatible extension.
#define kImageRequestMime           "text/x-moz-requestmime"

// the source URL for a file promise
#define kFilePromiseURLMime         "application/x-moz-file-promise-url"
// the destination filename for a file promise
#define kFilePromiseDestFilename    "application/x-moz-file-promise-dest-filename"
// a dataless flavor used to interact with the OS during file drags
#define kFilePromiseMime            "application/x-moz-file-promise"
// a synthetic flavor, put into the transferable once we know the destination directory of a file drag
#define kFilePromiseDirectoryMime   "application/x-moz-file-promise-dir"

#define kCustomTypesMime "application/x-moz-custom-clipdata"

#define kPDFJSMime "application/pdfjs"

%}


/**
  * nsIFlavorDataProvider allows a flavor to 'promise' data later,
  * supplying the data lazily.
  *
  * To use it, call setTransferData, passing the flavor string and
  * a nsIFlavorDataProvider QI'd to nsISupports.
  *
  * When someone calls getTransferData later, if the data size is
  * stored as 0, the nsISupports will be QI'd to nsIFlavorDataProvider,
  * and its getFlavorData called.
  *
  */
interface nsITransferable;
interface nsILoadContext;

[scriptable, uuid(7E225E5F-711C-11D7-9FAE-000393636592)]
interface nsIFlavorDataProvider : nsISupports
{

  /**
    * Retrieve the data from this data provider.
    *
    * @param  aTransferable (in parameter) the transferable we're being called for.
    * @param  aFlavor (in parameter) the flavor of data to retrieve
    * @param  aData the data. Some variant of class in nsISupportsPrimitives.idl
    */
  void getFlavorData(in nsITransferable aTransferable, in string aFlavor, out nsISupports aData);
};


[scriptable, builtinclass, uuid(97e0c418-1c1e-4106-bad1-9fcb11dff2fe)]
interface nsITransferable : nsISupports
{
  /**
   * Initializes a transferable object.  This should be called on all
   * transferable objects.  Failure to do so will result in fatal assertions in
   * debug builds.
   *
   * The load context is used to track whether the transferable is storing privacy-
   * sensitive information.
   *
   * To get the appropriate load context in Javascript callers, one needs to get
   * to the document that the transferable corresponds to, and then get the load
   * context from the document like this:
   *
   * var loadContext = doc.defaultView.docShell
   *                                  .QueryInterface(Ci.nsILoadContext);
   *
   * In C++ callers, if you have the corresponding document, you can just call
   * Document::GetLoadContext to get to the load context object.
   *
   * @param aContext the load context associated with the transferable object.
   *        This can be set to null if a load context is not available.
   */
  void init(in nsILoadContext aContext);

  /**
    * Computes a list of flavors that the transferable can export, either
    * through intrinsic knowledge or output data converters.
    */
  Array<ACString> flavorsTransferableCanExport();

  /**
    * Given a flavor retrieve the data.
    *
    * @param  aFlavor (in parameter) the flavor of data to retrieve
    * @param  aData the data. Some variant of class in nsISupportsPrimitives.idl
    */
  [must_use] void getTransferData(in string aFlavor, out nsISupports aData);

  /**
    * Returns the first flavor which has data.
    *
    * @param  aFlavor (out parameter) the flavor of data that was retrieved
    * @param  aData the data. Some variant of class in nsISupportsPrimitives.idl
    */
  void getAnyTransferData(out ACString aFlavor, out nsISupports aData);

    ///////////////////////////////
    // Setter part of interface
    ///////////////////////////////

  /**
    * Computes a list of flavors that the transferable can
    * accept into it, either through intrinsic knowledge or input data converters.
    *
    */
  Array<ACString> flavorsTransferableCanImport();

  /**
    * Sets the data in the transferable with the specified flavor. The transferable
    * will maintain its own copy the data, so it is not necessary to do that beforehand.
    *
    * @param  aFlavor the flavor of data that is being set
    * @param  aData the data, either some variant of class in nsISupportsPrimitives.idl,
    *         an nsIFile, or an nsIFlavorDataProvider (see above)
    */
  void setTransferData(in string aFlavor, in nsISupports aData);

  /**
   * Removes the data from all flavors.
   */
  void clearAllData();

  /**
    * Add the data flavor, indicating that this transferable
    * can receive this type of flavor
    *
    * @param  aDataFlavor a new data flavor to handle
    */
  void addDataFlavor ( in string aDataFlavor ) ;

  /**
    * Removes the data flavor matching the given one (string compare) and the data
    * that goes along with it.
    *
    * @param  aDataFlavor a data flavor to remove
    */
  void removeDataFlavor ( in string aDataFlavor ) ;

  attribute nsIFormatConverter converter;

  /**
   * Use of the SetIsPrivateData() method generated by isPrivateData attribute should
   * be avoided as much as possible because the value set may not reflect the status
   * of the context in which the transferable was created.
   */
  [notxpcom, nostdcall] attribute boolean isPrivateData;

  /**
   * The principal associated with this transferable. This could be either the
   * node principal of the source DOM node from which this transferable was
   * created, or the principal of the global from which this transferable was
   * created.
   * XXXedgar: Rename it to something more generic, bug 1867636.
   */
  [notxpcom, nostdcall] attribute nsIPrincipal requestingPrincipal;

  /**
   * the contentPolicyType for this transferable.
   */
  [notxpcom, nostdcall] attribute nsContentPolicyType contentPolicyType;

  /**
   * The cookieJarSettings of the source dom node this transferable was created
   * from.
   */
  [notxpcom, nostdcall] attribute nsICookieJarSettings cookieJarSettings;

  /**
   * Used for initializing the referrer when downloading a file promise.
   */
  [notxpcom, nostdcall] attribute nsIReferrerInfo referrerInfo;
};