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 file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef mozilla_dom_devicestorage_DeviceStorageRequestParent_h
7 #define mozilla_dom_devicestorage_DeviceStorageRequestParent_h
9 #include "mozilla/Attributes.h"
10 #include "mozilla/dom/devicestorage/PDeviceStorageRequestParent.h"
11 #include "mozilla/dom/ContentChild.h"
12 #include "mozilla/dom/ContentParent.h"
14 #include "nsThreadUtils.h"
15 #include "nsDeviceStorage.h"
20 namespace devicestorage
{
22 class DeviceStorageRequestParent
: public PDeviceStorageRequestParent
25 explicit DeviceStorageRequestParent(const DeviceStorageParams
& aParams
);
27 NS_IMETHOD_(MozExternalRefCountType
) AddRef();
28 NS_IMETHOD_(MozExternalRefCountType
) Release();
30 bool EnsureRequiredPermissions(mozilla::dom::ContentParent
* aParent
);
33 virtual void ActorDestroy(ActorDestroyReason
);
36 ~DeviceStorageRequestParent();
39 ThreadSafeAutoRefCnt mRefCnt
;
41 DeviceStorageParams mParams
;
43 class CancelableRunnable
: public nsRunnable
46 explicit CancelableRunnable(DeviceStorageRequestParent
* aParent
)
49 mCanceled
= !(mParent
->AddRunnable(this));
52 virtual ~CancelableRunnable() {
55 NS_IMETHOD
Run() MOZ_OVERRIDE
{
59 mParent
->RemoveRunnable(this);
68 virtual nsresult
CancelableRun() = 0;
71 nsRefPtr
<DeviceStorageRequestParent
> mParent
;
76 class PostErrorEvent
: public CancelableRunnable
79 PostErrorEvent(DeviceStorageRequestParent
* aParent
, const char* aError
);
80 virtual ~PostErrorEvent();
81 virtual nsresult
CancelableRun();
86 class PostSuccessEvent
: public CancelableRunnable
89 explicit PostSuccessEvent(DeviceStorageRequestParent
* aParent
);
90 virtual ~PostSuccessEvent();
91 virtual nsresult
CancelableRun();
94 class PostBlobSuccessEvent
: public CancelableRunnable
97 PostBlobSuccessEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
, uint32_t aLength
, nsACString
& aMimeType
, uint64_t aLastModifiedDate
);
98 virtual ~PostBlobSuccessEvent();
99 virtual nsresult
CancelableRun();
102 uint64_t mLastModificationDate
;
103 nsRefPtr
<DeviceStorageFile
> mFile
;
107 class PostEnumerationSuccessEvent
: public CancelableRunnable
110 PostEnumerationSuccessEvent(DeviceStorageRequestParent
* aParent
,
111 const nsAString
& aStorageType
,
112 const nsAString
& aRelPath
,
113 InfallibleTArray
<DeviceStorageFileValue
>& aPaths
);
114 virtual ~PostEnumerationSuccessEvent();
115 virtual nsresult
CancelableRun();
117 const nsString mStorageType
;
118 const nsString mRelPath
;
119 InfallibleTArray
<DeviceStorageFileValue
> mPaths
;
122 class CreateFdEvent
: public CancelableRunnable
125 CreateFdEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
126 virtual ~CreateFdEvent();
127 virtual nsresult
CancelableRun();
129 nsRefPtr
<DeviceStorageFile
> mFile
;
132 class WriteFileEvent
: public CancelableRunnable
135 WriteFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
,
136 nsIInputStream
* aInputStream
, int32_t aRequestType
);
137 virtual ~WriteFileEvent();
138 virtual nsresult
CancelableRun();
140 nsRefPtr
<DeviceStorageFile
> mFile
;
141 nsCOMPtr
<nsIInputStream
> mInputStream
;
142 int32_t mRequestType
;
145 class DeleteFileEvent
: public CancelableRunnable
148 DeleteFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
149 virtual ~DeleteFileEvent();
150 virtual nsresult
CancelableRun();
152 nsRefPtr
<DeviceStorageFile
> mFile
;
155 class FreeSpaceFileEvent
: public CancelableRunnable
158 FreeSpaceFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
159 virtual ~FreeSpaceFileEvent();
160 virtual nsresult
CancelableRun();
162 nsRefPtr
<DeviceStorageFile
> mFile
;
165 class UsedSpaceFileEvent
: public CancelableRunnable
168 UsedSpaceFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
169 virtual ~UsedSpaceFileEvent();
170 virtual nsresult
CancelableRun();
172 nsRefPtr
<DeviceStorageFile
> mFile
;
175 class ReadFileEvent
: public CancelableRunnable
178 ReadFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
179 virtual ~ReadFileEvent();
180 virtual nsresult
CancelableRun();
182 nsRefPtr
<DeviceStorageFile
> mFile
;
186 class EnumerateFileEvent
: public CancelableRunnable
189 EnumerateFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
, uint64_t aSince
);
190 virtual ~EnumerateFileEvent();
191 virtual nsresult
CancelableRun();
193 nsRefPtr
<DeviceStorageFile
> mFile
;
197 class PostPathResultEvent
: public CancelableRunnable
200 PostPathResultEvent(DeviceStorageRequestParent
* aParent
, const nsAString
& aPath
);
201 virtual ~PostPathResultEvent();
202 virtual nsresult
CancelableRun();
204 nsRefPtr
<DeviceStorageFile
> mFile
;
208 class PostFileDescriptorResultEvent
: public CancelableRunnable
211 PostFileDescriptorResultEvent(DeviceStorageRequestParent
* aParent
,
212 const FileDescriptor
& aFileDescriptor
);
213 virtual ~PostFileDescriptorResultEvent();
214 virtual nsresult
CancelableRun();
216 nsRefPtr
<DeviceStorageFile
> mFile
;
217 FileDescriptor mFileDescriptor
;
220 class PostFreeSpaceResultEvent
: public CancelableRunnable
223 PostFreeSpaceResultEvent(DeviceStorageRequestParent
* aParent
,
224 uint64_t aFreeSpace
);
225 virtual ~PostFreeSpaceResultEvent();
226 virtual nsresult
CancelableRun();
231 class PostUsedSpaceResultEvent
: public CancelableRunnable
234 PostUsedSpaceResultEvent(DeviceStorageRequestParent
* aParent
,
235 const nsAString
& aType
,
236 uint64_t aUsedSpace
);
237 virtual ~PostUsedSpaceResultEvent();
238 virtual nsresult
CancelableRun();
244 class PostAvailableResultEvent
: public CancelableRunnable
247 PostAvailableResultEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
248 virtual ~PostAvailableResultEvent();
249 virtual nsresult
CancelableRun();
251 nsRefPtr
<DeviceStorageFile
> mFile
;
254 class PostStatusResultEvent
: public CancelableRunnable
257 PostStatusResultEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
258 virtual ~PostStatusResultEvent();
259 virtual nsresult
CancelableRun();
261 nsRefPtr
<DeviceStorageFile
> mFile
;
264 class PostFormatResultEvent
: public CancelableRunnable
267 PostFormatResultEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
268 virtual ~PostFormatResultEvent();
269 virtual nsresult
CancelableRun();
271 nsRefPtr
<DeviceStorageFile
> mFile
;
274 class PostMountResultEvent
: public CancelableRunnable
277 PostMountResultEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
278 virtual ~PostMountResultEvent();
279 virtual nsresult
CancelableRun();
281 nsRefPtr
<DeviceStorageFile
> mFile
;
284 class PostUnmountResultEvent
: public CancelableRunnable
287 PostUnmountResultEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
288 virtual ~PostUnmountResultEvent();
289 virtual nsresult
CancelableRun();
291 nsRefPtr
<DeviceStorageFile
> mFile
;
295 bool AddRunnable(CancelableRunnable
* aRunnable
) {
296 MutexAutoLock
lock(mMutex
);
300 mRunnables
.AppendElement(aRunnable
);
304 void RemoveRunnable(CancelableRunnable
* aRunnable
) {
305 MutexAutoLock
lock(mMutex
);
306 mRunnables
.RemoveElement(aRunnable
);
310 bool mActorDestoryed
;
311 nsTArray
<nsRefPtr
<CancelableRunnable
> > mRunnables
;
314 } // namespace devicestorage
316 } // namespace mozilla