home *** CD-ROM | disk | FTP | other *** search
/ Freelog 121 / FreelogMagazineJuilletAout2014-No121.iso / Internet / Waterfox / Waterfox.exe / components / DownloadsUI.js < prev    next >
Text File  |  2010-01-01  |  5KB  |  129 lines

  1. /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* vim: set ts=2 et sw=2 tw=80 filetype=javascript: */
  3. /* This Source Code Form is subject to the terms of the Mozilla Public
  4.  * License, v. 2.0. If a copy of the MPL was not distributed with this
  5.  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  6.  
  7. /**
  8.  * This component implements the nsIDownloadManagerUI interface and opens the
  9.  * Downloads view for the most recent browser window when requested.
  10.  */
  11.  
  12. "use strict";
  13.  
  14. ////////////////////////////////////////////////////////////////////////////////
  15. //// Globals
  16.  
  17. const Cc = Components.classes;
  18. const Ci = Components.interfaces;
  19. const Cu = Components.utils;
  20. const Cr = Components.results;
  21.  
  22. Cu.import("resource://gre/modules/Services.jsm");
  23. Cu.import("resource://gre/modules/XPCOMUtils.jsm");
  24.  
  25. XPCOMUtils.defineLazyModuleGetter(this, "DownloadsCommon",
  26.                                   "resource:///modules/DownloadsCommon.jsm");
  27. XPCOMUtils.defineLazyServiceGetter(this, "gBrowserGlue",
  28.                                    "@mozilla.org/browser/browserglue;1",
  29.                                    "nsIBrowserGlue");
  30. XPCOMUtils.defineLazyModuleGetter(this, "RecentWindow",
  31.                                   "resource:///modules/RecentWindow.jsm");
  32. XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
  33.                                   "resource://gre/modules/PrivateBrowsingUtils.jsm");
  34.  
  35. ////////////////////////////////////////////////////////////////////////////////
  36. //// DownloadsUI
  37.  
  38. function DownloadsUI()
  39. {
  40. }
  41.  
  42. DownloadsUI.prototype = {
  43.   classID: Components.ID("{4d99321e-d156-455b-81f7-e7aa2308134f}"),
  44.  
  45.   _xpcom_factory: XPCOMUtils.generateSingletonFactory(DownloadsUI),
  46.  
  47.   //////////////////////////////////////////////////////////////////////////////
  48.   //// nsISupports
  49.  
  50.   QueryInterface: XPCOMUtils.generateQI([Ci.nsIDownloadManagerUI]),
  51.  
  52.   //////////////////////////////////////////////////////////////////////////////
  53.   //// nsIDownloadManagerUI
  54.  
  55.   show: function DUI_show(aWindowContext, aDownload, aReason, aUsePrivateUI)
  56.   {
  57.     if (!aReason) {
  58.       aReason = Ci.nsIDownloadManagerUI.REASON_USER_INTERACTED;
  59.     }
  60.  
  61.     if (aReason == Ci.nsIDownloadManagerUI.REASON_NEW_DOWNLOAD) {
  62.       const kMinimized = Ci.nsIDOMChromeWindow.STATE_MINIMIZED;
  63.       let browserWin = gBrowserGlue.getMostRecentBrowserWindow();
  64.  
  65.       if (!browserWin || browserWin.windowState == kMinimized) {
  66.         this._showDownloadManagerUI(aWindowContext, aUsePrivateUI);
  67.       }
  68.       else {
  69.         // If the indicator is visible, then new download notifications are
  70.         // already handled by the panel service.
  71.         browserWin.DownloadsButton.checkIsVisible(function(isVisible) {
  72.           if (!isVisible) {
  73.             this._showDownloadManagerUI(aWindowContext, aUsePrivateUI);
  74.           }
  75.         }.bind(this));
  76.       }
  77.     } else {
  78.       this._showDownloadManagerUI(aWindowContext, aUsePrivateUI);
  79.     }
  80.   },
  81.  
  82.   get visible() true,
  83.  
  84.   getAttention: function () {},
  85.  
  86.   //////////////////////////////////////////////////////////////////////////////
  87.   //// Private
  88.  
  89.   /**
  90.    * Helper function that opens the download manager UI.
  91.    */
  92.   _showDownloadManagerUI: function (aWindowContext, aUsePrivateUI)
  93.   {
  94.     // If we weren't given a window context, try to find a browser window
  95.     // to use as our parent - and if that doesn't work, error out and give up.
  96.     let parentWindow = aWindowContext;
  97.     if (!parentWindow) {
  98.       parentWindow = RecentWindow.getMostRecentBrowserWindow({ private: !!aUsePrivateUI });
  99.       if (!parentWindow) {
  100.         Components.utils.reportError(
  101.           "Couldn't find a browser window to open the Places Downloads View " +
  102.           "from.");
  103.         return;
  104.       }
  105.     }
  106.  
  107.     // If window is private then show it in a tab.
  108.     if (PrivateBrowsingUtils.isWindowPrivate(parentWindow)) {
  109.       parentWindow.openUILinkIn("about:downloads", "tab");
  110.       return;
  111.     } else {
  112.       let organizer = Services.wm.getMostRecentWindow("Places:Organizer");
  113.       if (!organizer) {
  114.         parentWindow.openDialog("chrome://browser/content/places/places.xul",
  115.                                 "", "chrome,toolbar=yes,dialog=no,resizable",
  116.                                 "Downloads");
  117.       } else {
  118.         organizer.PlacesOrganizer.selectLeftPaneQuery("Downloads");
  119.         organizer.focus();
  120.       }
  121.     }
  122.   }
  123. };
  124.  
  125. ////////////////////////////////////////////////////////////////////////////////
  126. //// Module
  127.  
  128. this.NSGetFactory = XPCOMUtils.generateNSGetFactory([DownloadsUI]);
  129.