1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef nsTransferable_h__
7 #define nsTransferable_h__
9 #include "nsICookieJarSettings.h"
10 #include "nsIFormatConverter.h"
11 #include "nsITransferable.h"
15 #include "nsIPrincipal.h"
16 #include "nsIReferrerInfo.h"
18 #include "mozilla/Maybe.h"
20 class nsIMutableArray
;
25 // Holds a flavor (a mime type) that describes the data and the associated data.
28 explicit DataStruct(const char* aFlavor
)
29 : mCacheFD(nullptr), mFlavor(aFlavor
) {}
30 DataStruct(DataStruct
&& aRHS
);
33 const nsCString
& GetFlavor() const { return mFlavor
; }
34 void SetData(nsISupports
* aData
, bool aIsPrivateData
);
35 void GetData(nsISupports
** aData
);
37 bool IsDataAvailable() const { return mData
|| mCacheFD
; }
41 // The size of data over which we write the data to disk rather than
42 // keep it around in memory.
43 kLargeDatasetSize
= 1000000 // 1 million bytes
46 nsresult
WriteCache(void* aData
, uint32_t aDataLen
);
47 nsresult
ReadCache(nsISupports
** aData
);
49 // mData OR mCacheFD should be used, not both.
50 nsCOMPtr
<nsISupports
> mData
; // OWNER - some varient of primitive wrapper
52 const nsCString mFlavor
;
55 DataStruct(const DataStruct
&) = delete;
56 DataStruct
& operator=(const DataStruct
&) = delete;
60 * XP Transferable wrapper
63 class nsTransferable
: public nsITransferable
{
69 NS_DECL_NSITRANSFERABLE
72 virtual ~nsTransferable();
74 // Get flavors w/out converter
75 void GetTransferDataFlavors(nsTArray
<nsCString
>& aFlavors
);
77 // Find index for data with the matching flavor in mDataArray.
78 mozilla::Maybe
<size_t> FindDataFlavor(const char* aFlavor
);
80 nsTArray
<DataStruct
> mDataArray
;
81 nsCOMPtr
<nsIFormatConverter
> mFormatConv
;
83 nsCOMPtr
<nsIPrincipal
> mRequestingPrincipal
;
84 nsContentPolicyType mContentPolicyType
;
85 nsCOMPtr
<nsICookieJarSettings
> mCookieJarSettings
;
86 nsCOMPtr
<nsIReferrerInfo
> mReferrerInfo
;
92 #endif // nsTransferable_h__