diff options
author | paul@chromium.org <paul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-22 19:20:45 +0000 |
---|---|---|
committer | paul@chromium.org <paul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-22 19:20:45 +0000 |
commit | 25ebbf4a2894b6b60350cf22740a0ba7ad9ee7c3 (patch) | |
tree | 49ff36ea57d4603ac6b77156150c942af162c6df /chrome/browser/cocoa/download_item_mac.mm | |
parent | 95fe32f45f41ffd496466bc938968cabae2bad59 (diff) | |
download | chromium_src-25ebbf4a2894b6b60350cf22740a0ba7ad9ee7c3.zip chromium_src-25ebbf4a2894b6b60350cf22740a0ba7ad9ee7c3.tar.gz chromium_src-25ebbf4a2894b6b60350cf22740a0ba7ad9ee7c3.tar.bz2 |
Load Mac download shelf icons asynchronously.
BUG=16226 (http://crbug.com/16226)
TEST=none.
Review URL: http://codereview.chromium.org/155831
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21305 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/download_item_mac.mm')
-rw-r--r-- | chrome/browser/cocoa/download_item_mac.mm | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/download_item_mac.mm b/chrome/browser/cocoa/download_item_mac.mm index d3e12a9..357c902 100644 --- a/chrome/browser/cocoa/download_item_mac.mm +++ b/chrome/browser/cocoa/download_item_mac.mm @@ -4,8 +4,10 @@ #include "chrome/browser/cocoa/download_item_mac.h" +#include "chrome/browser/browser_process.h" #import "chrome/browser/cocoa/download_item_controller.h" #include "chrome/browser/download/download_item_model.h" +#include "skia/ext/skia_utils_mac.h" // DownloadItemMac ------------------------------------------------------------- @@ -17,6 +19,7 @@ DownloadItemMac::DownloadItemMac(BaseDownloadItemModel* download_model, DownloadItemMac::~DownloadItemMac() { download_model_->download()->RemoveObserver(this); + icon_consumer_.CancelAllRequests(); } void DownloadItemMac::OnDownloadUpdated(DownloadItem* download) { @@ -35,3 +38,34 @@ void DownloadItemMac::OnDownloadUpdated(DownloadItem* download) { NOTREACHED(); } } + +void DownloadItemMac::LoadIcon() { + IconManager* icon_manager = g_browser_process->icon_manager(); + if (!icon_manager) { + NOTREACHED(); + return; + } + + // We may already have this particular image cached. + FilePath file = download_model_->download()->full_path(); + SkBitmap* icon_bitmap = icon_manager->LookupIcon(file, IconLoader::SMALL); + if (icon_bitmap) { + NSImage* icon = gfx::SkBitmapToNSImage(*icon_bitmap); + [item_controller_ setIcon:icon]; + return; + } + + // The icon isn't cached, load it asynchronously. + icon_manager->LoadIcon(file, IconLoader::NORMAL, &icon_consumer_, + NewCallback(this, + &DownloadItemMac::OnExtractIconComplete)); +} + +void DownloadItemMac::OnExtractIconComplete(IconManager::Handle handle, + SkBitmap* icon_bitmap) { + if (!icon_bitmap) + return; + + NSImage* icon = gfx::SkBitmapToNSImage(*icon_bitmap); + [item_controller_ setIcon:icon]; +} |