summaryrefslogtreecommitdiffstats
path: root/uriloader/exthandler/nsIExternalHelperAppService.idl
blob: bfdfff5ceaa8fe0d3b90210b59d7ff019d04b579 (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
/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * 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 "nsICancelable.idl"

interface nsIURI;
interface nsIRequest;
interface nsIStreamListener;
interface nsIFile;
interface nsIMIMEInfo;
interface nsIWebProgressListener2;
interface nsIInterfaceRequestor;

/**
 * The external helper app service is used for finding and launching
 * platform specific external applications for a given mime content type.
 */
[scriptable, uuid(1E4F3AE1-B737-431F-A95D-31FA8DA70199)]
interface nsIExternalHelperAppService : nsISupports
{
  /**
   * Binds an external helper application to a stream listener. The caller
   * should pump data into the returned stream listener. When the OnStopRequest
   * is issued, the stream listener implementation will launch the helper app
   * with this data.
   * @param aMimeContentType The content type of the incoming data
   * @param aRequest The request corresponding to the incoming data
   * @param aContentContext Used in processing content document refresh
   *  headers after target content is downloaded. Note in e10s land
   *  this is likely a CPOW that points to a window in the child process.
   * @param aForceSave True to always save this content to disk, regardless of
   *  nsIMIMEInfo and other such influences.
   * @param aWindowContext Used in parenting helper app dialogs, usually
   *  points to the parent browser window. This parameter may be null,
   *  in which case dialogs will be parented to aContentContext.
   * @return A nsIStreamListener which the caller should pump the data into.
   */
  nsIStreamListener doContent (in ACString aMimeContentType,
                               in nsIRequest aRequest,
                               in nsIInterfaceRequestor aContentContext,
                               in boolean aForceSave,
                               [optional] in nsIInterfaceRequestor aWindowContext); 

  /**
   * Returns true if data from a URL with this extension combination
   * is to be decoded from aEncodingType prior to saving or passing
   * off to helper apps, false otherwise.
   */
  boolean applyDecodingForExtension(in AUTF8String aExtension,
                                    in ACString aEncodingType);

};

/**
 * This is a private interface shared between external app handlers and the platform specific
 * external helper app service
 */
[scriptable, uuid(6613e2e7-feab-4e3a-bb1f-b03200d544ec)]
interface nsPIExternalAppLauncher : nsISupports
{
  /**
   * mscott --> eventually I should move this into a new service so other
   * consumers can add temporary files they want deleted on exit.
   * @param aTemporaryFile A temporary file we should delete on exit.
   */
  void deleteTemporaryFileOnExit(in nsIFile aTemporaryFile); 
  /**
   * Delete a temporary file created inside private browsing mode when
   * the private browsing mode has ended.
   */
  void deleteTemporaryPrivateFileWhenPossible(in nsIFile aTemporaryFile);
};

/**
 * A helper app launcher is a small object created to handle the launching
 * of an external application.
 *
 * Note that cancelling the load via the nsICancelable interface will release
 * the reference to the launcher dialog.
 */
[scriptable, uuid(acf2a516-7d7f-4771-8b22-6c4a559c088e)]
interface nsIHelperAppLauncher : nsICancelable
{
  /**
   * The mime info object associated with the content type this helper app
   * launcher is currently attempting to load
   */
  readonly attribute nsIMIMEInfo MIMEInfo;

  /**
   * The source uri
   */
  readonly attribute nsIURI source;

  /**
   * The suggested name for this file
   */
  readonly attribute AString suggestedFileName;

  /**
   * Saves the final destination of the file. Does not actually perform the
   * save.
   * NOTE: This will release the reference to the
   * nsIHelperAppLauncherDialog.
   */
  void saveToDisk(in nsIFile aNewFileLocation, in boolean aRememberThisPreference);

  /**
   * Remembers that aApplication should be used to launch this content. Does
   * not actually launch the application.
   * NOTE: This will release the reference to the nsIHelperAppLauncherDialog.
   * @param aApplication nsIFile corresponding to the location of the application to use.
   * @param aRememberThisPreference TRUE if we should remember this choice.
   */
  void launchWithApplication(in nsIFile aApplication, in boolean aRememberThisPreference);

  /**
   * Callback invoked by nsIHelperAppLauncherDialog::promptForSaveToFileAsync
   * after the user has chosen a file through the File Picker (or dismissed it).
   * @param aFile The file that was chosen by the user (or null if dialog was dismissed).
   */
  void saveDestinationAvailable(in nsIFile aFile);

  /**
   * The following methods are used by the progress dialog to get or set
   * information on the current helper app launcher download.
   * This reference will be released when the download is finished (after the
   * listener receives the STATE_STOP notification).
   */
  void setWebProgressListener(in nsIWebProgressListener2 aWebProgressListener);

  /**
   * The file we are saving to
   */
  readonly attribute nsIFile targetFile;

  /**
   * The executable-ness of the target file
   */
  readonly attribute boolean targetFileIsExecutable;

  /**
   * Time when the download started
   */
  readonly attribute PRTime timeDownloadStarted;

  /**
   * The download content length, or -1 if the length is not available.
   */
  readonly attribute int64_t contentLength;
};