/* -*- 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, nsresult, true>; %} interface nsIArray; native AsyncGetDataPromise(RefPtr); native AsyncDataFlavorsPromise(RefPtr); [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 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 aFlavorList, in long aWhichClipboard); };