summaryrefslogtreecommitdiffstats
path: root/uriloader/base/nsITransfer.idl
blob: 54c59cd3968b9a559e97f9eb3fccc69248ab2ca8 (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
/* -*- 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 "nsIWebProgressListener2.idl"

interface nsIArray;
interface nsIURI;
interface nsICancelable;
interface nsIMIMEInfo;
interface nsIFile;
interface nsIReferrerInfo;
interface nsIHttpChannel;
webidl BrowsingContext;

[scriptable, uuid(37ec75d3-97ad-4da8-afaa-eabe5b4afd73)]
interface nsITransfer : nsIWebProgressListener2 {

    const unsigned long DOWNLOAD_ACCEPTABLE = 0;
    const unsigned long DOWNLOAD_FORBIDDEN = 1;
    const unsigned long DOWNLOAD_POTENTIALLY_UNSAFE = 2;

    /**
     * Initializes the transfer with certain properties.  This function must
     * be called prior to accessing any properties on this interface.
     *
     * @param aSource The source URI of the transfer. Must not be null.
     *
     * @param aSourceOriginalURI The original URI of the transfer in case
     *                           aSource is a blob URL. Can be null.
     *
     * @param aTarget The target URI of the transfer. Must not be null.
     *
     * @param aDisplayName The user-readable description of the transfer.
     *                     Can be empty.
     *
     * @param aMIMEInfo The MIME info associated with the target,
     *                  including MIME type and helper app when appropriate.
     *                  This parameter is optional.
     *
     * @param startTime Time when the download started (ie, when the first
     *                  response from the server was received)
     *                  XXX presumably wbp and exthandler do this differently
     *
     * @param aTempFile The location of a temporary file; i.e. a file in which
     *                  the received data will be stored, but which is not
     *                  equal to the target file. (will be moved to the real
     *                  target by the caller, when the download is finished)
     *                  May be null.
     *
     * @param aCancelable An object that can be used to abort the download.
     *                    Must not be null.
     *                    Implementations are expected to hold a strong
     *                    reference to this object until the download is
     *                    finished, at which point they should release the
     *                    reference.
     *
     * @param aIsPrivate Used to determine the privacy status of the new transfer.
     *                   If true, indicates that the transfer was initiated from
     *                   a source that desires privacy.
     *
     * @param aDownloadClassification Indicates wheter the download is unwanted,
     *                                should be considered dangerous or insecure.
     *
     * @param aReferrerInfo The Referrer this download is started with
     *
     * @param aOpenDownloadsListOnStart true (default) - Open downloads panel.
     *                                  false - Only show an icon indicator.
     *                                  This parameter is optional.
     */
    void init(in nsIURI aSource,
              in nsIURI aSourceOriginalURI,
              in nsIURI aTarget,
              in AString aDisplayName,
              in nsIMIMEInfo aMIMEInfo,
              in PRTime startTime,
              in nsIFile aTempFile,
              in nsICancelable aCancelable,
              in boolean aIsPrivate,
              in long aDownloadClassification,
              in nsIReferrerInfo aReferrerInfo,
              [optional] in boolean aOpenDownloadsListOnStart);

    /**
     * Same as init, but allows for passing the browsingContext
     * which will allow for opening the download with the same
     * userContextId and auth header.
     *
     * @param aBrowsingContext BrowsingContext of the initiating document.
     *
     * @param aHandleInternally Set to true if the download should be opened within
     *                          the browser.
     * @param aHttpChannel Channel of the initiating document.
     */
    void initWithBrowsingContext(in nsIURI aSource,
                                  in nsIURI aTarget,
                                    in AString aDisplayName,
                                    in nsIMIMEInfo aMIMEInfo,
                                    in PRTime startTime,
                                    in nsIFile aTempFile,
                                    in nsICancelable aCancelable,
                                    in boolean aIsPrivate,
                                    in long aDownloadClassification,
                                    in nsIReferrerInfo aReferrerInfo,
                                    [optional] in boolean aOpenDownloadsListOnStart,
                                    in BrowsingContext aBrowsingContext,
                                    in boolean aHandleInternally,
                                    in nsIHttpChannel aHttpChannel);


    /*
     * Used to notify the transfer object of the hash of the downloaded file.
     * Must be called on the main thread, only after the download has finished
     * successfully.
     * @param aHash The SHA-256 hash in raw bytes of the downloaded file.
     */
    void setSha256Hash(in ACString aHash);

    /*
     * Used to notify the transfer object of the signature of the downloaded
     * file.  Must be called on the main thread, only after the download has
     * finished successfully.
     * @param aSignatureInfo The Array of Array of Array of bytes
     *        certificates of the downloaded file.
     */
    void setSignatureInfo(in Array<Array<Array<uint8_t> > > aSignatureInfo);

    /*
     * Used to notify the transfer object of the redirects associated with the
     * channel that terminated in the downloaded file.  Must be called on the
     * main thread, only after the download has finished successfully.
     * @param aRedirects The nsIArray of nsIPrincipal of redirected URIs
     *        associated with the downloaded file.
     */
    void setRedirects(in nsIArray aRedirects);
};

%{C++
/**
 * A component with this contract ID will be created each time a download is
 * started, and nsITransfer::Init will be called on it and an observer will be set.
 *
 * Notifications of the download progress will happen via
 * nsIWebProgressListener/nsIWebProgressListener2.
 *
 * INTERFACES THAT MUST BE IMPLEMENTED:
 *   nsITransfer
 *   nsIWebProgressListener
 *   nsIWebProgressListener2
 *
 * XXX move this to nsEmbedCID.h once the interfaces (and the contract ID) are
 * frozen.
 */
#define NS_TRANSFER_CONTRACTID "@mozilla.org/transfer;1"
%}