Thu, 15 Jan 2015 21:03:48 +0100
Integrate friendly tips from Tor colleagues to make (or not) 4.5 alpha 3;
This includes removal of overloaded (but unused) methods, and addition of
a overlooked call to DataStruct::SetData(nsISupports, uint32_t, bool.)
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 nsDOMFileReader_h__
7 #define nsDOMFileReader_h__
9 #include "mozilla/Attributes.h"
10 #include "nsISupportsUtils.h"
11 #include "nsString.h"
12 #include "nsWeakReference.h"
13 #include "nsIStreamListener.h"
14 #include "nsIInterfaceRequestor.h"
15 #include "nsJSUtils.h"
16 #include "nsTArray.h"
17 #include "nsIJSNativeInitializer.h"
18 #include "prtime.h"
19 #include "nsITimer.h"
21 #include "nsIDOMFile.h"
22 #include "nsIDOMFileReader.h"
23 #include "nsIDOMFileList.h"
24 #include "nsIInputStream.h"
25 #include "nsCOMPtr.h"
26 #include "nsIStreamLoader.h"
27 #include "nsIChannel.h"
29 #include "FileIOObject.h"
31 class nsDOMFileReader : public mozilla::dom::FileIOObject,
32 public nsIDOMFileReader,
33 public nsIInterfaceRequestor,
34 public nsSupportsWeakReference
35 {
36 typedef mozilla::ErrorResult ErrorResult;
37 typedef mozilla::dom::GlobalObject GlobalObject;
38 public:
39 nsDOMFileReader();
40 virtual ~nsDOMFileReader();
42 NS_DECL_ISUPPORTS_INHERITED
44 NS_DECL_NSIDOMFILEREADER
46 NS_REALLY_FORWARD_NSIDOMEVENTTARGET(mozilla::DOMEventTargetHelper)
48 // nsIInterfaceRequestor
49 NS_DECL_NSIINTERFACEREQUESTOR
51 // FileIOObject overrides
52 virtual void DoAbort(nsAString& aEvent) MOZ_OVERRIDE;
53 NS_IMETHOD DoOnStopRequest(nsIRequest* aRequest, nsISupports* aContext,
54 nsresult aStatus, nsAString& aSuccessEvent,
55 nsAString& aTerminationEvent) MOZ_OVERRIDE;
56 NS_IMETHOD DoOnDataAvailable(nsIRequest* aRequest, nsISupports* aContext,
57 nsIInputStream* aInputStream, uint64_t aOffset,
58 uint32_t aCount) MOZ_OVERRIDE;
60 nsPIDOMWindow* GetParentObject() const
61 {
62 return GetOwner();
63 }
64 virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
66 // WebIDL
67 static already_AddRefed<nsDOMFileReader>
68 Constructor(const GlobalObject& aGlobal, ErrorResult& aRv);
69 void ReadAsArrayBuffer(JSContext* aCx, nsIDOMBlob* aBlob, ErrorResult& aRv)
70 {
71 MOZ_ASSERT(aBlob);
72 ReadFileContent(aCx, aBlob, EmptyString(), FILE_AS_ARRAYBUFFER, aRv);
73 }
74 void ReadAsText(nsIDOMBlob* aBlob, const nsAString& aLabel, ErrorResult& aRv)
75 {
76 MOZ_ASSERT(aBlob);
77 ReadFileContent(nullptr, aBlob, aLabel, FILE_AS_TEXT, aRv);
78 }
79 void ReadAsDataURL(nsIDOMBlob* aBlob, ErrorResult& aRv)
80 {
81 MOZ_ASSERT(aBlob);
82 ReadFileContent(nullptr, aBlob, EmptyString(), FILE_AS_DATAURL, aRv);
83 }
85 using FileIOObject::Abort;
87 // Inherited ReadyState().
89 void GetResult(JSContext* aCx, JS::MutableHandle<JS::Value> aResult,
90 ErrorResult& aRv);
92 using FileIOObject::GetError;
94 IMPL_EVENT_HANDLER(loadstart)
95 using FileIOObject::GetOnprogress;
96 using FileIOObject::SetOnprogress;
97 IMPL_EVENT_HANDLER(load)
98 using FileIOObject::GetOnabort;
99 using FileIOObject::SetOnabort;
100 using FileIOObject::GetOnerror;
101 using FileIOObject::SetOnerror;
102 IMPL_EVENT_HANDLER(loadend)
104 void ReadAsBinaryString(nsIDOMBlob* aBlob, ErrorResult& aRv)
105 {
106 MOZ_ASSERT(aBlob);
107 ReadFileContent(nullptr, aBlob, EmptyString(), FILE_AS_BINARY, aRv);
108 }
111 nsresult Init();
113 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(nsDOMFileReader,
114 FileIOObject)
115 void RootResultArrayBuffer();
117 protected:
118 enum eDataFormat {
119 FILE_AS_ARRAYBUFFER,
120 FILE_AS_BINARY,
121 FILE_AS_TEXT,
122 FILE_AS_DATAURL
123 };
125 void ReadFileContent(JSContext* aCx, nsIDOMBlob* aBlob,
126 const nsAString &aCharset, eDataFormat aDataFormat,
127 ErrorResult& aRv);
128 nsresult GetAsText(nsIDOMBlob *aFile, const nsACString &aCharset,
129 const char *aFileData, uint32_t aDataLen, nsAString &aResult);
130 nsresult GetAsDataURL(nsIDOMBlob *aFile, const char *aFileData, uint32_t aDataLen, nsAString &aResult);
132 void FreeFileData() {
133 moz_free(mFileData);
134 mFileData = nullptr;
135 mDataLen = 0;
136 }
138 char *mFileData;
139 nsCOMPtr<nsIDOMBlob> mFile;
140 nsCString mCharset;
141 uint32_t mDataLen;
143 eDataFormat mDataFormat;
145 nsString mResult;
146 nsCOMPtr<nsIPrincipal> mPrincipal;
148 JS::Heap<JSObject*> mResultArrayBuffer;
149 };
151 #endif