1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef mozilla_dom_file_filehelper_h__
8 #define mozilla_dom_file_filehelper_h__
10 #include "FileCommon.h"
12 #include "nsIRequestObserver.h"
13 #include "nsThreadUtils.h"
21 class FileOutputStreamWrapper
;
24 class FileHelperListener
34 OnFileHelperComplete(FileHelper
* aFileHelper
) = 0;
38 * Must be subclassed. The subclass must implement DoAsyncRun. It may then
39 * choose to implement GetSuccessResult to properly set the result of the
40 * success event. Call Enqueue to start the file operation.
42 class FileHelper
: public nsIRequestObserver
44 friend class FileRequest
;
45 friend class FileOutputStreamWrapper
;
49 NS_DECL_NSIREQUESTOBSERVER
55 AsyncRun(FileHelperListener
* aListener
);
58 OnStreamProgress(uint64_t aProgress
, uint64_t aProgressMax
);
63 NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
70 NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
75 GetCurrentLockedFile();
78 FileHelper(LockedFile
* aLockedFile
, FileRequest
* aRequest
);
80 virtual ~FileHelper();
83 DoAsyncRun(nsISupports
* aStream
) = 0;
86 GetSuccessResult(JSContext
* aCx
, JS::Value
* aVal
);
94 nsCOMPtr
<nsIFileStorage
> mFileStorage
;
95 nsRefPtr
<LockedFile
> mLockedFile
;
96 nsRefPtr
<FileRequest
> mFileRequest
;
98 nsRefPtr
<FileHelperListener
> mListener
;
99 nsCOMPtr
<nsIRequest
> mRequest
;
102 nsresult mResultCode
;
108 #endif // mozilla_dom_file_filehelper_h__