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 DeviceStorageRequestParent(const DeviceStorageParams
& aParams
);
27 NS_IMETHOD_(nsrefcnt
) AddRef();
28 NS_IMETHOD_(nsrefcnt
) 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 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 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 WriteFileEvent
: public CancelableRunnable
125 WriteFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
, nsIInputStream
* aInputStream
);
126 virtual ~WriteFileEvent();
127 virtual nsresult
CancelableRun();
129 nsRefPtr
<DeviceStorageFile
> mFile
;
130 nsCOMPtr
<nsIInputStream
> mInputStream
;
133 class DeleteFileEvent
: public CancelableRunnable
136 DeleteFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
137 virtual ~DeleteFileEvent();
138 virtual nsresult
CancelableRun();
140 nsRefPtr
<DeviceStorageFile
> mFile
;
143 class FreeSpaceFileEvent
: public CancelableRunnable
146 FreeSpaceFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
147 virtual ~FreeSpaceFileEvent();
148 virtual nsresult
CancelableRun();
150 nsRefPtr
<DeviceStorageFile
> mFile
;
153 class UsedSpaceFileEvent
: public CancelableRunnable
156 UsedSpaceFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
157 virtual ~UsedSpaceFileEvent();
158 virtual nsresult
CancelableRun();
160 nsRefPtr
<DeviceStorageFile
> mFile
;
163 class ReadFileEvent
: public CancelableRunnable
166 ReadFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
167 virtual ~ReadFileEvent();
168 virtual nsresult
CancelableRun();
170 nsRefPtr
<DeviceStorageFile
> mFile
;
174 class EnumerateFileEvent
: public CancelableRunnable
177 EnumerateFileEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
, uint64_t aSince
);
178 virtual ~EnumerateFileEvent();
179 virtual nsresult
CancelableRun();
181 nsRefPtr
<DeviceStorageFile
> mFile
;
185 class PostPathResultEvent
: public CancelableRunnable
188 PostPathResultEvent(DeviceStorageRequestParent
* aParent
, const nsAString
& aPath
);
189 virtual ~PostPathResultEvent();
190 virtual nsresult
CancelableRun();
192 nsRefPtr
<DeviceStorageFile
> mFile
;
196 class PostFreeSpaceResultEvent
: public CancelableRunnable
199 PostFreeSpaceResultEvent(DeviceStorageRequestParent
* aParent
,
200 uint64_t aFreeSpace
);
201 virtual ~PostFreeSpaceResultEvent();
202 virtual nsresult
CancelableRun();
207 class PostUsedSpaceResultEvent
: public CancelableRunnable
210 PostUsedSpaceResultEvent(DeviceStorageRequestParent
* aParent
,
211 const nsAString
& aType
,
212 uint64_t aUsedSpace
);
213 virtual ~PostUsedSpaceResultEvent();
214 virtual nsresult
CancelableRun();
220 class PostAvailableResultEvent
: public CancelableRunnable
223 PostAvailableResultEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
224 virtual ~PostAvailableResultEvent();
225 virtual nsresult
CancelableRun();
227 nsRefPtr
<DeviceStorageFile
> mFile
;
230 class PostFormatResultEvent
: public CancelableRunnable
233 PostFormatResultEvent(DeviceStorageRequestParent
* aParent
, DeviceStorageFile
* aFile
);
234 virtual ~PostFormatResultEvent();
235 virtual nsresult
CancelableRun();
237 nsRefPtr
<DeviceStorageFile
> mFile
;
241 bool AddRunnable(CancelableRunnable
* aRunnable
) {
242 MutexAutoLock
lock(mMutex
);
246 mRunnables
.AppendElement(aRunnable
);
250 void RemoveRunnable(CancelableRunnable
* aRunnable
) {
251 MutexAutoLock
lock(mMutex
);
252 mRunnables
.RemoveElement(aRunnable
);
256 bool mActorDestoryed
;
257 nsTArray
<nsRefPtr
<CancelableRunnable
> > mRunnables
;
260 } // namespace devicestorage
262 } // namespace mozilla