/* 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 "nsISupports.idl"
interface nsIInterfaceRequestor;
interface nsIDownload;

[scriptable, uuid(0c76d4cf-0b06-4c1a-9bea-520c7bbdba99)]
interface nsIDownloadManagerUI : nsISupports {
  /**
   * The reason that should be passed when the user requests to show the
   * download manager's UI.
   */
  const short REASON_USER_INTERACTED = 0;

  /**
   * The reason that should be passed to the show method when we are displaying
   * the UI because a new download is being added to it.
   */
  const short REASON_NEW_DOWNLOAD = 1;

 /**
  * Shows the Download Manager's UI to the user.
  *
  * @param [optional] aWindowContext
  *        The parent window context to show the UI.
  * @param [optional] aDownload
  *        The download to be preselected upon opening.
  * @param [optional] aReason
  *        The reason to show the download manager's UI.  This defaults to
  *        REASON_USER_INTERACTED, and should be one of the previously listed
  *        constants.
  * @param [optional] aUsePrivateUI
  *        Pass true as this argument to hint to the implementation that it
  *        should only display private downloads in the UI, if possible.
  */
  void show([optional] in nsIInterfaceRequestor aWindowContext,
            [optional] in nsIDownload aDownload,
            [optional] in short aReason,
            [optional] in boolean aUsePrivateUI);

 /**
  * Indicates if the UI is visible or not.
  */
  readonly attribute boolean visible;

 /**
  * Brings attention to the UI if it is already visible
  *
  * @throws NS_ERROR_UNEXPECTED if the UI is not visible.
  */
  void getAttention();
};