Bumping manifests a=b2g-bump
[gecko.git] / dom / base / MultipartFileImpl.h
blob9ed65921b80fa16a9f53e2e2b61bf46068a3e96f
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"
15 #include <algorithm>
17 using namespace mozilla;
18 using namespace mozilla::dom;
20 class MultipartFileImpl MOZ_FINAL : public FileImplBase
22 public:
23 NS_DECL_ISUPPORTS_INHERITED
25 // Create as a file
26 MultipartFileImpl(const nsTArray<nsRefPtr<FileImpl>>& aBlobImpls,
27 const nsAString& aName,
28 const nsAString& aContentType)
29 : FileImplBase(aName, aContentType, UINT64_MAX),
30 mBlobImpls(aBlobImpls),
31 mIsFromNsIFile(false)
33 SetLengthAndModifiedDate();
36 // Create as a blob
37 MultipartFileImpl(const nsTArray<nsRefPtr<FileImpl>>& aBlobImpls,
38 const nsAString& aContentType)
39 : FileImplBase(aContentType, UINT64_MAX),
40 mBlobImpls(aBlobImpls),
41 mIsFromNsIFile(false)
43 SetLengthAndModifiedDate();
46 // Create as a file to be later initialized
47 explicit MultipartFileImpl(const nsAString& aName)
48 : FileImplBase(aName, EmptyString(), UINT64_MAX),
49 mIsFromNsIFile(false)
53 // Create as a blob to be later initialized
54 MultipartFileImpl()
55 : FileImplBase(EmptyString(), UINT64_MAX),
56 mIsFromNsIFile(false)
60 void InitializeBlob();
62 void InitializeBlob(
63 JSContext* aCx,
64 const Sequence<OwningArrayBufferOrArrayBufferViewOrBlobOrString>& aData,
65 const nsAString& aContentType,
66 bool aNativeEOL,
67 ErrorResult& aRv);
69 void InitializeChromeFile(File& aData,
70 const ChromeFilePropertyBag& aBag,
71 ErrorResult& aRv);
73 void InitializeChromeFile(nsPIDOMWindow* aWindow,
74 const nsAString& aData,
75 const ChromeFilePropertyBag& aBag,
76 ErrorResult& aRv);
78 void InitializeChromeFile(nsPIDOMWindow* aWindow,
79 nsIFile* aData,
80 const ChromeFilePropertyBag& aBag,
81 bool aIsFromNsIFile,
82 ErrorResult& aRv);
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
91 return mLength;
94 virtual nsresult GetInternalStream(nsIInputStream** aInputStream) MOZ_OVERRIDE;
96 virtual const nsTArray<nsRefPtr<FileImpl>>* GetSubBlobImpls() const MOZ_OVERRIDE
98 return &mBlobImpls;
101 virtual void GetMozFullPathInternal(nsAString& aFullPath,
102 ErrorResult& aRv) MOZ_OVERRIDE;
104 virtual nsresult
105 SetMutable(bool aMutable) MOZ_OVERRIDE;
107 void SetName(const nsAString& aName)
109 mName = aName;
112 void SetFromNsIFile(bool aValue)
114 mIsFromNsIFile = aValue;
117 virtual bool MayBeClonedToOtherThreads() const MOZ_OVERRIDE;
119 protected:
120 virtual ~MultipartFileImpl() {}
122 void SetLengthAndModifiedDate();
124 nsTArray<nsRefPtr<FileImpl>> mBlobImpls;
125 bool mIsFromNsIFile;
128 #endif // mozilla_dom_MultipartFileImpl_h