1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_UI_COCOA_DOWNLOAD_DOWNLOAD_ITEM_MAC_H_ 6#define CHROME_BROWSER_UI_COCOA_DOWNLOAD_DOWNLOAD_ITEM_MAC_H_ 7#pragma once 8 9#import <Cocoa/Cocoa.h> 10 11#include "base/memory/scoped_nsobject.h" 12#include "base/memory/scoped_ptr.h" 13#include "chrome/browser/download/download_item.h" 14#include "chrome/browser/download/download_manager.h" 15#include "chrome/browser/icon_manager.h" 16#include "content/browser/cancelable_request.h" 17 18class BaseDownloadItemModel; 19@class DownloadItemController; 20 21namespace gfx{ 22class Image; 23} 24 25// A class that bridges the visible mac download items to chromium's download 26// model. The owning object (DownloadItemController) must explicitly call 27// |LoadIcon| if it wants to display the icon associated with this download. 28 29class DownloadItemMac : DownloadItem::Observer { 30 public: 31 // DownloadItemMac takes ownership of |download_model|. 32 DownloadItemMac(BaseDownloadItemModel* download_model, 33 DownloadItemController* controller); 34 35 // Destructor. 36 ~DownloadItemMac(); 37 38 // DownloadItem::Observer implementation 39 virtual void OnDownloadUpdated(DownloadItem* download); 40 virtual void OnDownloadOpened(DownloadItem* download); 41 42 BaseDownloadItemModel* download_model() { return download_model_.get(); } 43 44 // Asynchronous icon loading support. 45 void LoadIcon(); 46 47 private: 48 // Callback for asynchronous icon loading. 49 void OnExtractIconComplete(IconManager::Handle handle, 50 gfx::Image* icon_bitmap); 51 52 // The download item model we represent. 53 scoped_ptr<BaseDownloadItemModel> download_model_; 54 55 // The objective-c controller object. 56 DownloadItemController* item_controller_; // weak, owns us. 57 58 // For canceling an in progress icon request. 59 CancelableRequestConsumerT<int, 0> icon_consumer_; 60 61 // Stores the last known path where the file will be saved. 62 FilePath lastFilePath_; 63 64 DISALLOW_COPY_AND_ASSIGN(DownloadItemMac); 65}; 66 67#endif // CHROME_BROWSER_UI_COCOA_DOWNLOAD_DOWNLOAD_ITEM_MAC_H_ 68