summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/download_item_mac.mm
diff options
context:
space:
mode:
authorpaul@chromium.org <paul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-22 19:20:45 +0000
committerpaul@chromium.org <paul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-22 19:20:45 +0000
commit25ebbf4a2894b6b60350cf22740a0ba7ad9ee7c3 (patch)
tree49ff36ea57d4603ac6b77156150c942af162c6df /chrome/browser/cocoa/download_item_mac.mm
parent95fe32f45f41ffd496466bc938968cabae2bad59 (diff)
downloadchromium_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.mm34
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];
+}