summaryrefslogtreecommitdiffstats
path: root/widget/nsIClipboard.idl
blob: 9f8d15d0943362d446b35ecbc8e9a79f0b2c755b (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
/* -*- 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 "nsISupports.idl"
#include "nsITransferable.idl"
#include "nsIClipboardOwner.idl"

%{C++
#include "mozilla/MozPromise.h"

using DataFlavorsPromise = mozilla::MozPromise<nsTArray<nsCString>, nsresult, true>;
%}

interface nsIArray;

native AsyncGetDataPromise(RefPtr<mozilla::GenericPromise>);
native AsyncDataFlavorsPromise(RefPtr<DataFlavorsPromise>);

[scriptable, builtinclass, uuid(801e2318-c8fa-11ed-afa1-0242ac120002)]
interface nsIAsyncSetClipboardData : nsISupports {
  /**
   * Provide the data for the set request.
   *
   * @param  aTransferable
   *         The transferable contains the data to be written.
   * @param  aOwner [optional]
   *         The owner of the transferable.
   */
  void setData(in nsITransferable aTransferable, [optional] in nsIClipboardOwner aOwner);

  /**
   * Abort the request to set data.
   *
   * @param  aReason
   *         The reason for the abort, can not be NS_OK.
   */
  void abort(in nsresult aReason);
};

[scriptable, uuid(78f7c18e-c8fa-11ed-afa1-0242ac120002)]
interface nsIAsyncSetClipboardDataCallback : nsISupports
{
  /**
   * Indicates that the clipboard asyncSetData request has either succeeded or
   * been canceled.
   *
   * @param  aResult
   *         The result of the request. NS_OK if successful, or another value
   *         that indicates the reason for failure or cancellation.
   */
  void onComplete(in nsresult aResult);
};

[scriptable, builtinclass, uuid(ceaa0047-647f-4b8e-ad1c-aff9fa62aa51)]
interface nsIClipboard : nsISupports
{
    const long kSelectionClipboard = 0;
    const long kGlobalClipboard = 1;
    const long kFindClipboard = 2;
    // Used to cache current selection on (nsClipboard) for macOS service menu.
    const long kSelectionCache = 3;

%{ C++
    static const uint32_t kClipboardTypeCount = kSelectionCache + 1;
%}

   /**
    * Given a transferable, set the data on the native clipboard
    *
    * @param  aTransferable The transferable
    * @param  anOwner The owner of the transferable
    * @param  aWhichClipboard Specifies the clipboard to which this operation applies.
    * @result NS_Ok if no errors
    */

    void setData ( in nsITransferable aTransferable, in nsIClipboardOwner anOwner,
                    in long aWhichClipboard ) ;

    /**
     * Requests setting data to the native clipboard. The acutal set occur
     * when the data is provided by calling nsIAsyncSetClipboardData::setData().
     * The result will be notified by nsIClipboardCallback. A new set request
     * will cancel any prior pending requests, if any exist.
     *
     * @param  aWhichClipboard
     *         Specifies the clipboard to which this operation applies.
     * @param  aCallback [optional]
     *         The callback object that will be notified upon completion.
     * @return nsIAsyncSetClipboardData
     *         The write request object. The actual write will occur when the
     *         data is provided by calling nsIAsyncSetClipboardData::setData().
     */
    nsIAsyncSetClipboardData asyncSetData(in long aWhichClipboard,
                                          [optional] in nsIAsyncSetClipboardDataCallback aCallback);

   /**
    * Filters the flavors aTransferable can import (see
    * `nsITransferable::flavorsTransferableCanImport`) and gets the data for the
    * first flavor. That data is set for aTransferable.
    *
    * @param  aTransferable The transferable
    * @param  aWhichClipboard Specifies the clipboard to which this operation applies.
    * @result NS_OK if no errors
    */

    void getData ( in nsITransferable aTransferable, in long aWhichClipboard ) ;

   /**
    * This empties the clipboard and notifies the clipboard owner.
    * This empties the "logical" clipboard. It does not clear the native clipboard.
    *
    * @param  aWhichClipboard Specifies the clipboard to which this operation applies.
    * @result NS_OK if successful.
    */

    void emptyClipboard ( in long aWhichClipboard ) ;

   /**
    * This provides a way to give correct UI feedback about, for instance, a paste
    * should be allowed. It does _NOT_ actually retreive the data and should be a very
    * inexpensive call. All it does is check if there is data on the clipboard matching
    * any of the flavors in the given list.
    *
    * @param  aFlavorList     An array of ASCII strings.
    * @param  aWhichClipboard Specifies the clipboard to which this operation applies.
    * @outResult - if data is present matching one of
    * @result NS_OK if successful.
    */
    boolean hasDataMatchingFlavors ( in Array<ACString> aFlavorList,
                                     in long aWhichClipboard ) ;

    /**
     * Allows clients to determine if the implementation supports the concept of a
     * separate clipboard.
     *
     * @param aWhichClipboard  Specifies the clipboard to which this operation applies.
     * @outResult  true if the implementaion supports specific clipboard type.
     * @result  NS_OK if successful.
     */
    [infallible]
    boolean isClipboardTypeSupported(in long aWhichClipboard);

    /**
     * Filters the flavors aTransferable can import (see
     * `nsITransferable::flavorsTransferableCanImport`) and gets the data for the
     * first flavor. That data is set for aTransferable.
     *
     * @param  aTransferable   The transferable
     * @param  aWhichClipboard Specifies the clipboard to which this operation applies.
     * @return MozPromise      The returned promise will resolve when the data is ready or reject
     *                         if any error occurs.
     */
    [noscript, notxpcom, nostdcall]
    AsyncGetDataPromise asyncGetData(in nsITransferable aTransferable, in long aWhichClipboard);

    /**
     * Check if there is data on the clipboard matching each of the flavors in the
     * given list.
     *
     * @param  aFlavorList     An array of ASCII strings.
     * @param  aWhichClipboard Specifies the clipboard to which this operation applies.
     * @return MozPromise      The returned promise will resolve with the list of matched flavors
     *                         when the check is completed or reject if any error occurs.
     */
    [noscript, notxpcom, nostdcall]
    AsyncDataFlavorsPromise asyncHasDataMatchingFlavors(in Array<ACString> aFlavorList, in long aWhichClipboard);
};