summaryrefslogtreecommitdiff
path: root/toolkit/components/downloads/nsIDownload.idl
blob: 47eb487808565c614cdff9a075d1ff169f065e63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsITransfer.idl"

interface nsIURI;
interface nsIFile;
interface nsIObserver;
interface nsICancelable;
interface nsIWebProgressListener;
interface nsIMIMEInfo;

/**
 * Represents a download object.
 *
 * @note This object is no longer updated once it enters a completed state.
 *       Completed states are the following:  
 *       nsIDownloadManager::DOWNLOAD_FINISHED  
 *       nsIDownloadManager::DOWNLOAD_FAILED  
 *       nsIDownloadManager::DOWNLOAD_CANCELED 
 *       nsIDownloadManager::DOWNLOAD_BLOCKED_PARENTAL 
 *       nsIDownloadManager::DOWNLOAD_DIRTY 
 *       nsIDownloadManager::DOWNLOAD_BLOCKED_POLICY 
 */
[scriptable, uuid(2258f465-656e-4566-87cb-f791dbaf0322)]
interface nsIDownload : nsITransfer {
    
    /**
     * The target of a download is always a file on the local file system.
     */
    readonly attribute nsIFile targetFile;

    /**
     * The percentage of transfer completed.
     * If the file size is unknown it'll be -1 here.
     */
    readonly attribute long percentComplete;

    /**
     * The amount of bytes downloaded so far.
     */
    readonly attribute long long amountTransferred;

    /**
     * The size of file in bytes.
     * Unknown size is represented by -1.
     */
    readonly attribute long long size;
    
    /**
     * The source of the transfer.
     */
    readonly attribute nsIURI source;
    
    /**
     * The target of the transfer.
     */
    readonly attribute nsIURI target;
 
    /**
     * Object that can be used to cancel the download.
     * Will be null after the download is finished.
     */
    readonly attribute nsICancelable cancelable;

    /**
     * The user-readable description of the transfer.
     */
    readonly attribute AString displayName;

    /**
     * The time a transfer was started.
     */
    readonly attribute long long startTime;

    /**
     * The speed of the transfer in bytes/sec.
     */
    readonly attribute double speed;

    /**
     * Optional. If set, it will contain the target's relevant MIME information.
     * This includes its MIME Type, helper app, and whether that helper should be
     * executed.
     */
    readonly attribute nsIMIMEInfo MIMEInfo;

    /**
     * The id of the download that is stored in the database - not globally unique.
     * For example, a private download and a public one might have identical ids.
     * Can only be safely used for direct database manipulation in the database that
     * contains this download. Use the guid property instead for safe, database-agnostic
     * searching and manipulation.
     *
     * @deprecated
     */
    readonly attribute unsigned long id;

    /**
     * The guid of the download that is stored in the database.
     * Has the form of twelve alphanumeric characters.
     */
    readonly attribute ACString guid;

    /**
     * The state of the download.
     * @see nsIDownloadManager and nsIXPInstallManagerUI
     */
    readonly attribute short state;

    /**
     * The referrer uri of the download.  This is only valid for HTTP downloads,
     * and can be null.
     */
    readonly attribute nsIURI referrer;

    /**
     * Indicates if the download can be resumed after being paused or not.  This
     * is only the case if the download is over HTTP/1.1 or FTP and if the
     * server supports it.
     */
    readonly attribute boolean resumable;

    /**
     * Indicates if the download was initiated from a context marked as private,
     * controlling whether it should be stored in a permanent manner or not.
     */
    readonly attribute boolean isPrivate;

    /**
     * Cancel this download if it's currently in progress.
     */
    void cancel();

    /**
     * Pause this download if it is in progress.
     *
     * @throws NS_ERROR_UNEXPECTED if it cannot be paused.
     */
    void pause();

    /**
     * Resume this download if it is paused.
     *
     * @throws NS_ERROR_UNEXPECTED if it cannot be resumed or is not paused.
     */
    void resume();

    /**
     * Instruct the download manager to remove this download. Whereas
     * cancel simply cancels the transfer, but retains information about it,
     * remove removes all knowledge of it.
     *
     * @see nsIDownloadManager.removeDownload for more detail
     * @throws NS_ERROR_FAILURE if the download is active.
     */
    void remove();

    /**
     * Instruct the download manager to retry this failed download
     * @throws NS_ERROR_NOT_AVAILABLE if the download is not known.
     * @throws NS_ERROR_FAILURE if the download is not in the following states:
     *         nsIDownloadManager::DOWNLOAD_CANCELED
     *         nsIDownloadManager::DOWNLOAD_FAILED
     */
    void retry();
};

%{C++
// {b02be33b-d47c-4bd3-afd9-402a942426b0}
#define NS_DOWNLOAD_CID \
  { 0xb02be33b, 0xd47c, 0x4bd3, { 0xaf, 0xd9, 0x40, 0x2a, 0x94, 0x24, 0x26, 0xb0 } }
%}