dom/file/FileHelper.h

branch
TOR_BUG_9701
changeset 10
ac0c01689b40
equal deleted inserted replaced
-1:000000000000 0:eb13cb8c1ed1
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/. */
6
7 #ifndef mozilla_dom_file_filehelper_h__
8 #define mozilla_dom_file_filehelper_h__
9
10 #include "FileCommon.h"
11
12 #include "nsIRequestObserver.h"
13
14 class nsIFileStorage;
15
16 BEGIN_FILE_NAMESPACE
17
18 class FileHelper;
19 class FileRequest;
20 class FileOutputStreamWrapper;
21 class LockedFile;
22
23 class FileHelperListener
24 {
25 public:
26 NS_IMETHOD_(MozExternalRefCountType)
27 AddRef() = 0;
28
29 NS_IMETHOD_(MozExternalRefCountType)
30 Release() = 0;
31
32 virtual void
33 OnFileHelperComplete(FileHelper* aFileHelper) = 0;
34 };
35
36 /**
37 * Must be subclassed. The subclass must implement DoAsyncRun. It may then
38 * choose to implement GetSuccessResult to properly set the result of the
39 * success event. Call Enqueue to start the file operation.
40 */
41 class FileHelper : public nsIRequestObserver
42 {
43 friend class FileRequest;
44 friend class FileOutputStreamWrapper;
45
46 public:
47 NS_DECL_THREADSAFE_ISUPPORTS
48 NS_DECL_NSIREQUESTOBSERVER
49
50 nsresult
51 Enqueue();
52
53 nsresult
54 AsyncRun(FileHelperListener* aListener);
55
56 void
57 OnStreamProgress(uint64_t aProgress, uint64_t aProgressMax);
58
59 void
60 OnStreamClose();
61
62 void
63 OnStreamDestroy();
64
65 static LockedFile*
66 GetCurrentLockedFile();
67
68 protected:
69 FileHelper(LockedFile* aLockedFile, FileRequest* aRequest);
70
71 virtual ~FileHelper();
72
73 virtual nsresult
74 DoAsyncRun(nsISupports* aStream) = 0;
75
76 virtual nsresult
77 GetSuccessResult(JSContext* aCx, JS::MutableHandle<JS::Value> aVal);
78
79 virtual void
80 ReleaseObjects();
81
82 void
83 Finish();
84
85 nsCOMPtr<nsIFileStorage> mFileStorage;
86 nsRefPtr<LockedFile> mLockedFile;
87 nsRefPtr<FileRequest> mFileRequest;
88
89 nsRefPtr<FileHelperListener> mListener;
90 nsCOMPtr<nsIRequest> mRequest;
91
92 private:
93 nsresult mResultCode;
94 bool mFinished;
95 };
96
97 END_FILE_NAMESPACE
98
99 #endif // mozilla_dom_file_filehelper_h__

mercurial