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