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 mozilla_dom_MultipartFileImpl_h
7 #define mozilla_dom_MultipartFileImpl_h
9 #include "mozilla/Attributes.h"
10 #include "mozilla/CheckedInt.h"
11 #include "mozilla/ErrorResult.h"
12 #include "mozilla/dom/File.h"
13 #include "mozilla/dom/BlobBinding.h"
14 #include "mozilla/dom/FileBinding.h"
17 using namespace mozilla
;
18 using namespace mozilla::dom
;
20 class MultipartFileImpl MOZ_FINAL
: public FileImplBase
23 NS_DECL_ISUPPORTS_INHERITED
26 MultipartFileImpl(const nsTArray
<nsRefPtr
<FileImpl
>>& aBlobImpls
,
27 const nsAString
& aName
,
28 const nsAString
& aContentType
)
29 : FileImplBase(aName
, aContentType
, UINT64_MAX
),
30 mBlobImpls(aBlobImpls
),
33 SetLengthAndModifiedDate();
37 MultipartFileImpl(const nsTArray
<nsRefPtr
<FileImpl
>>& aBlobImpls
,
38 const nsAString
& aContentType
)
39 : FileImplBase(aContentType
, UINT64_MAX
),
40 mBlobImpls(aBlobImpls
),
43 SetLengthAndModifiedDate();
46 // Create as a file to be later initialized
47 explicit MultipartFileImpl(const nsAString
& aName
)
48 : FileImplBase(aName
, EmptyString(), UINT64_MAX
),
53 // Create as a blob to be later initialized
55 : FileImplBase(EmptyString(), UINT64_MAX
),
60 void InitializeBlob();
64 const Sequence
<OwningArrayBufferOrArrayBufferViewOrBlobOrString
>& aData
,
65 const nsAString
& aContentType
,
69 void InitializeChromeFile(File
& aData
,
70 const ChromeFilePropertyBag
& aBag
,
73 void InitializeChromeFile(nsPIDOMWindow
* aWindow
,
74 const nsAString
& aData
,
75 const ChromeFilePropertyBag
& aBag
,
78 void InitializeChromeFile(nsPIDOMWindow
* aWindow
,
80 const ChromeFilePropertyBag
& aBag
,
84 virtual already_AddRefed
<FileImpl
>
85 CreateSlice(uint64_t aStart
, uint64_t aLength
,
86 const nsAString
& aContentType
,
87 ErrorResult
& aRv
) MOZ_OVERRIDE
;
89 virtual uint64_t GetSize(ErrorResult
& aRv
) MOZ_OVERRIDE
94 virtual nsresult
GetInternalStream(nsIInputStream
** aInputStream
) MOZ_OVERRIDE
;
96 virtual const nsTArray
<nsRefPtr
<FileImpl
>>* GetSubBlobImpls() const MOZ_OVERRIDE
101 virtual void GetMozFullPathInternal(nsAString
& aFullPath
,
102 ErrorResult
& aRv
) MOZ_OVERRIDE
;
105 SetMutable(bool aMutable
) MOZ_OVERRIDE
;
107 void SetName(const nsAString
& aName
)
112 void SetFromNsIFile(bool aValue
)
114 mIsFromNsIFile
= aValue
;
117 virtual bool MayBeClonedToOtherThreads() const MOZ_OVERRIDE
;
120 virtual ~MultipartFileImpl() {}
122 void SetLengthAndModifiedDate();
124 nsTArray
<nsRefPtr
<FileImpl
>> mBlobImpls
;
128 #endif // mozilla_dom_MultipartFileImpl_h