DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (c68fe15a81fc)

VCS Links

Line Code
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 176 177 178 179 180 181 182 183 184
/* -*- 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;
webidl BrowsingContext;

[ptr] native ExternalAppHandlerPtr(nsExternalAppHandler);
%{C++
class nsExternalAppHandler;
%}

/**
 * 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.
   * @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);
  
  /**
   * 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.
   * Replaces doContent for native code, and uses BrowsingContext.
   *
   * @param aMimeContentType The content type of the incoming data
   * @param aRequest The request corresponding to the incoming data
   * @param aContentContext The BrowsingContext that the request was initiated
   *  by. Used for closing the window if we opened one specifically for this download.
   * @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.
   */
  [noscript] ExternalAppHandlerPtr createListener (in ACString aMimeContentType,
                                                   in nsIRequest aRequest,
                                                   in BrowsingContext 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.
   * NOTE: This will release the reference to the nsIHelperAppLauncherDialog.
   */
  void promptForSaveDestination();

  /**
   * Tell the launcher that we will want to open the file.
   * NOTE: This will release the reference to the nsIHelperAppLauncherDialog.
   * @param aHandleInternally TRUE if we should handle opening this internally.
   */
  void launchWithApplication(in boolean aHandleInternally);

  /**
   * 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;

  /**
   * The browsingContext ID of the launcher's source
   */
  readonly attribute uint64_t browsingContextId;
};