Bug 1904139 - Don't re-initialize platform font list from GetDefaultFont. r=jfkthame
[gecko.git] / netwerk / base / nsIBackgroundFileSaver.idl
blobd9a5ba20a5954ad4979b66294d843f1c9874cbf1
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
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "nsISupports.idl"
9 interface nsIArray;
10 interface nsIBackgroundFileSaverObserver;
11 interface nsIFile;
13 /**
14 * Allows saving data to a file, while handling all the input/output on a
15 * background thread, including the initial file name assignment and any
16 * subsequent renaming of the target file.
18 * This interface is designed for file downloads. Generally, they start in the
19 * temporary directory, while the user is selecting the final name. Then, they
20 * are moved to the chosen target directory with a ".part" extension appended to
21 * the file name. Finally, they are renamed when the download is completed.
23 * Components implementing both nsIBackgroundFileSaver and nsIStreamListener
24 * allow data to be fed using an implementation of OnDataAvailable that never
25 * blocks the calling thread. They suspend the request that drives the stream
26 * listener in case too much data is being fed, and resume it when the data has
27 * been written. Calling OnStopRequest does not necessarily close the target
28 * file, and the Finish method must be called to complete the operation.
30 * Components implementing both nsIBackgroundFileSaver and nsIAsyncOutputStream
31 * allow data to be fed directly to the non-blocking output stream, that however
32 * may return NS_BASE_STREAM_WOULD_BLOCK in case too much data is being fed.
33 * Closing the output stream does not necessarily close the target file, and the
34 * Finish method must be called to complete the operation.
36 * @remarks Implementations may require the consumer to always call Finish. If
37 * the object reference is released without calling Finish, a memory
38 * leak may occur, and the target file might be kept locked. All
39 * public methods of the interface may only be called from the main
40 * thread.
42 [scriptable, uuid(c43544a4-682c-4262-b407-2453d26e660d)]
43 interface nsIBackgroundFileSaver : nsISupports
45 /**
46 * This observer receives notifications when the target file name changes and
47 * when the operation completes, successfully or not.
49 * @remarks A strong reference to the observer is held. Notification events
50 * are dispatched to the thread that created the object that
51 * implements nsIBackgroundFileSaver.
53 attribute nsIBackgroundFileSaverObserver observer;
55 /**
56 * An Array of Array of Array of bytes, representing a chain of
57 * X.509 certificates, the last of which signed the downloaded file.
58 * Each list may belong to a different signer and contain certificates
59 * all the way up to the root.
61 * @throws NS_ERROR_NOT_AVAILABLE
62 * In case this is called before the onSaveComplete method has been
63 * called to notify success, or enableSignatureInfo has not been
64 * called.
66 readonly attribute Array<Array<Array<uint8_t> > > signatureInfo;
68 /**
69 * The SHA-256 hash, in raw bytes, associated with the data that was saved.
71 * In case the enableAppend method has been called, the hash computation
72 * includes the contents of the existing file, if any.
74 * @throws NS_ERROR_NOT_AVAILABLE
75 * In case the enableSha256 method has not been called, or before the
76 * onSaveComplete method has been called to notify success.
78 readonly attribute ACString sha256Hash;
80 /**
81 * Instructs the component to compute the signatureInfo of the target file,
82 * and make it available in the signatureInfo property.
84 * @remarks This must be set on the main thread before the first call to
85 * setTarget.
87 void enableSignatureInfo();
89 /**
90 * Instructs the component to compute the SHA-256 hash of the target file, and
91 * make it available in the sha256Hash property.
93 * @remarks This must be set on the main thread before the first call to
94 * setTarget.
96 void enableSha256();
98 /**
99 * Instructs the component to append data to the initial target file, that
100 * will be specified by the first call to the setTarget method, instead of
101 * overwriting the file.
103 * If the initial target file does not exist, this method has no effect.
105 * @remarks This must be set on the main thread before the first call to
106 * setTarget.
108 void enableAppend();
111 * Sets the name of the output file to be written. The target can be changed
112 * after data has already been fed, in which case the existing file will be
113 * moved to the new destination.
115 * In case the specified file already exists, and this method is called for
116 * the first time, the file may be either overwritten or appended to, based on
117 * whether the enableAppend method was called. Subsequent calls always
118 * overwrite the specified target file with the previously saved data.
120 * No file will be written until this function is called at least once. It's
121 * recommended not to feed any data until the output file is set.
123 * If an input/output error occurs with the specified file, the save operation
124 * fails. Failure is notified asynchronously through the observer.
126 * @param aTarget
127 * New output file to be written.
128 * @param aKeepPartial
129 * Indicates whether aFile should be kept as partially completed,
130 * rather than deleted, if the operation fails or is canceled. This is
131 * generally set for downloads that use temporary ".part" files.
133 void setTarget(in nsIFile aTarget, in boolean aKeepPartial);
136 * Terminates access to the output file, then notifies the observer with the
137 * specified status code. A failure code will force the operation to be
138 * canceled, in which case the output file will be deleted if requested.
140 * This forces the involved streams to be closed, thus no more data should be
141 * fed to the component after this method has been called.
143 * This is the last method that should be called on this object, and the
144 * target file name cannot be changed anymore after this method has been
145 * called. Conversely, before calling this method, the file can still be
146 * renamed even if all the data has been fed.
148 * @param aStatus
149 * Result code that determines whether the operation should succeed or
150 * be canceled, and is notified to the observer. If the operation
151 * fails meanwhile for other reasons, or the observer has been already
152 * notified of completion, this status code is ignored.
154 void finish(in nsresult aStatus);
157 [scriptable, uuid(ee7058c3-6e54-4411-b76b-3ce87b76fcb6)]
158 interface nsIBackgroundFileSaverObserver : nsISupports
161 * Called when the name of the output file has been determined. This function
162 * may be called more than once if the target file is renamed while saving.
164 * @param aSaver
165 * Reference to the object that raised the notification.
166 * @param aTarget
167 * Name of the file that is being written.
169 void onTargetChange(in nsIBackgroundFileSaver aSaver, in nsIFile aTarget);
172 * Called when the operation completed, and the target file has been closed.
173 * If the operation succeeded, the target file is ready to be used, otherwise
174 * it might have been already deleted.
176 * @param aSaver
177 * Reference to the object that raised the notification.
178 * @param aStatus
179 * Result code that determines whether the operation succeeded or
180 * failed, as well as the failure reason.
182 void onSaveComplete(in nsIBackgroundFileSaver aSaver, in nsresult aStatus);