summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorkaiwang@chromium.org <kaiwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-05 20:26:17 +0000
committerkaiwang@chromium.org <kaiwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-05 20:26:17 +0000
commitc189698a31f985fd4fc0989e8fba4e3d009975c7 (patch)
tree42ab0ac1c54a8894f9107254516841d56acf57cc /chrome
parentc1bf78e353678cd033daaa23279db5199f9a1040 (diff)
downloadchromium_src-c189698a31f985fd4fc0989e8fba4e3d009975c7.zip
chromium_src-c189698a31f985fd4fc0989e8fba4e3d009975c7.tar.gz
chromium_src-c189698a31f985fd4fc0989e8fba4e3d009975c7.tar.bz2
Convert IconManager to use new CancelableTaskTracker
BUG=155883 Review URL: https://chromiumcodereview.appspot.com/11441006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171296 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/api/downloads/downloads_api.cc18
-rw-r--r--chrome/browser/icon_manager.cc51
-rw-r--r--chrome/browser/icon_manager.h36
-rw-r--r--chrome/browser/ui/cocoa/download/download_item_mac.h7
-rw-r--r--chrome/browser/ui/cocoa/download/download_item_mac.mm10
-rw-r--r--chrome/browser/ui/gtk/download/download_item_gtk.cc19
-rw-r--r--chrome/browser/ui/gtk/download/download_item_gtk.h9
-rw-r--r--chrome/browser/ui/views/download/download_item_view.cc9
-rw-r--r--chrome/browser/ui/views/download/download_item_view.h4
-rw-r--r--chrome/browser/ui/webui/fileicon_source.cc32
-rw-r--r--chrome/browser/ui/webui/fileicon_source.h14
11 files changed, 108 insertions, 101 deletions
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index 9ee1954..b9d24cf 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -38,6 +38,7 @@
#include "chrome/browser/renderer_host/chrome_render_message_filter.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/webui/web_ui_util.h"
+#include "chrome/common/cancelable_task_tracker.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/extensions/api/downloads.h"
#include "content/public/browser/download_interrupt_reasons.h"
@@ -228,9 +229,9 @@ class DownloadFileIconExtractorImpl : public DownloadFileIconExtractor {
IconLoader::IconSize icon_size,
IconURLCallback callback) OVERRIDE;
private:
- void OnIconLoadComplete(IconManager::Handle handle, gfx::Image* icon);
+ void OnIconLoadComplete(gfx::Image* icon);
- CancelableRequestConsumer cancelable_consumer_;
+ CancelableTaskTracker cancelable_task_tracker_;
IconURLCallback callback_;
};
@@ -244,16 +245,15 @@ bool DownloadFileIconExtractorImpl::ExtractIconURLForPath(
// request, in which case the associated icon may also have changed.
// Therefore, for the moment we always call LoadIcon instead of attempting
// a LookupIcon.
- im->LoadIcon(
- path, icon_size, &cancelable_consumer_,
- base::Bind(&DownloadFileIconExtractorImpl::OnIconLoadComplete,
- base::Unretained(this)));
+ im->LoadIcon(path,
+ icon_size,
+ base::Bind(&DownloadFileIconExtractorImpl::OnIconLoadComplete,
+ base::Unretained(this)),
+ &cancelable_task_tracker_);
return true;
}
-void DownloadFileIconExtractorImpl::OnIconLoadComplete(
- IconManager::Handle handle,
- gfx::Image* icon) {
+void DownloadFileIconExtractorImpl::OnIconLoadComplete(gfx::Image* icon) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
std::string url;
if (icon)
diff --git a/chrome/browser/icon_manager.cc b/chrome/browser/icon_manager.cc
index e22ccef..2f1444e 100644
--- a/chrome/browser/icon_manager.cc
+++ b/chrome/browser/icon_manager.cc
@@ -4,14 +4,29 @@
#include "chrome/browser/icon_manager.h"
+#include "base/bind.h"
#include "base/file_util.h"
#include "base/memory/scoped_ptr.h"
#include "base/stl_util.h"
+#include "base/task_runner.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
+namespace {
+
+void RunCallbackIfNotCanceled(
+ const CancelableTaskTracker::IsCanceledCallback& is_canceled,
+ const IconManager::IconRequestCallback& callback,
+ gfx::Image* image) {
+ if (is_canceled.Run())
+ return;
+ callback.Run(image);
+}
+
+} // namespace
+
struct IconManager::ClientRequest {
- scoped_refptr<IconRequest> request;
+ IconRequestCallback callback;
IconGroupID group;
IconLoader::IconSize size;
};
@@ -33,29 +48,34 @@ gfx::Image* IconManager::LookupIcon(const FilePath& file_name,
return NULL;
}
-IconManager::Handle IconManager::LoadIcon(
+CancelableTaskTracker::TaskId IconManager::LoadIcon(
const FilePath& file_name,
IconLoader::IconSize size,
- CancelableRequestConsumerBase* consumer,
- const IconRequestCallback& callback) {
+ const IconRequestCallback& callback,
+ CancelableTaskTracker* tracker) {
IconGroupID group = GetGroupIDFromFilepath(file_name);
- IconRequest* request = new IconRequest(callback);
- AddRequest(request, consumer);
IconLoader* loader = new IconLoader(group, size, this);
loader->AddRef();
loader->Start();
- ClientRequest client_request = { request, group, size };
+
+ CancelableTaskTracker::IsCanceledCallback is_canceled;
+ CancelableTaskTracker::TaskId id = tracker->NewTrackedTaskId(&is_canceled);
+ IconRequestCallback callback_runner = base::Bind(
+ &RunCallbackIfNotCanceled, is_canceled, callback);
+
+ ClientRequest client_request = { callback_runner, group, size };
requests_[loader] = client_request;
- return request->handle();
+ return id;
}
// IconLoader::Delegate implementation -----------------------------------------
-bool IconManager::OnImageLoaded(IconLoader* source, gfx::Image* result) {
- ClientRequests::iterator rit = requests_.find(source);
+bool IconManager::OnImageLoaded(IconLoader* loader, gfx::Image* result) {
+ ClientRequests::iterator rit = requests_.find(loader);
+
// Balances the AddRef() in LoadIcon().
- source->Release();
+ loader->Release();
// Look up our client state.
if (rit == requests_.end()) {
@@ -63,11 +83,7 @@ bool IconManager::OnImageLoaded(IconLoader* source, gfx::Image* result) {
return false; // Return false to indicate result should be deleted.
}
- ClientRequest client_request = rit->second;
- if (client_request.request->canceled()) {
- requests_.erase(rit);
- return false; // Return false to indicate result should be deleted.
- }
+ const ClientRequest& client_request = rit->second;
// Cache the bitmap. Watch out: |result| or the cached bitmap may be NULL to
// indicate a current or past failure.
@@ -82,8 +98,7 @@ bool IconManager::OnImageLoaded(IconLoader* source, gfx::Image* result) {
}
// Inform our client that the request has completed.
- IconRequest* icon_request = client_request.request;
- icon_request->ForwardResult(icon_request->handle(), result);
+ client_request.callback.Run(result);
requests_.erase(rit);
return true; // Indicates we took ownership of result.
diff --git a/chrome/browser/icon_manager.h b/chrome/browser/icon_manager.h
index f02b9aa..d6e17d4 100644
--- a/chrome/browser/icon_manager.h
+++ b/chrome/browser/icon_manager.h
@@ -47,15 +47,13 @@
#include <map>
-#include "base/hash_tables.h"
-#include "chrome/browser/common/cancelable_request.h"
#include "chrome/browser/icon_loader.h"
+#include "chrome/common/cancelable_task_tracker.h"
#include "ui/gfx/image/image.h"
class FilePath;
-class IconManager : public IconLoader::Delegate,
- public CancelableRequestProvider {
+class IconManager : public IconLoader::Delegate {
public:
IconManager();
virtual ~IconManager();
@@ -65,25 +63,27 @@ class IconManager : public IconLoader::Delegate,
// it via 'LoadIcon'. The returned bitmap is owned by the IconManager and must
// not be free'd by the caller. If the caller needs to modify the icon, it
// must make a copy and modify the copy.
- gfx::Image* LookupIcon(const FilePath& file_name,
- IconLoader::IconSize size);
+ gfx::Image* LookupIcon(const FilePath& file_name, IconLoader::IconSize size);
- typedef CancelableRequestProvider::Handle Handle;
- typedef base::Callback<void(Handle, gfx::Image*)> IconRequestCallback;
+ typedef base::Callback<void(gfx::Image*)> IconRequestCallback;
// Asynchronous call to lookup and return the icon associated with file. The
- // work is done on the file thread, with the callbacks running on the UI
- // thread. The return value is the 'request_id' that will be passed to the
- // client in the callback. Note: this does *not* check the cache.
+ // work is done on the file thread, with the callbacks running on the thread
+ // this function is called.
//
- // WATCH OUT: The returned bitmap pointer may be NULL if decoding failed.
- Handle LoadIcon(const FilePath& file_name,
- IconLoader::IconSize size,
- CancelableRequestConsumerBase* consumer,
- const IconRequestCallback& callback);
+ // Note:
+ // 1. This does *not* check the cache.
+ // 2. The returned bitmap pointer is *not* owned by callback. So callback
+ // should never keep it or delete it.
+ // 3. The gfx::Image pointer passed to the callback may be NULL if decoding
+ // failed.
+ CancelableTaskTracker::TaskId LoadIcon(const FilePath& file_name,
+ IconLoader::IconSize size,
+ const IconRequestCallback& callback,
+ CancelableTaskTracker* tracker);
// IconLoader::Delegate interface.
- virtual bool OnImageLoaded(IconLoader* source, gfx::Image* result) OVERRIDE;
+ virtual bool OnImageLoaded(IconLoader* loader, gfx::Image* result) OVERRIDE;
// Get the identifying string for the given file. The implementation
// is in icon_manager_[platform].cc.
@@ -103,8 +103,6 @@ class IconManager : public IconLoader::Delegate,
typedef std::map<CacheKey, gfx::Image*> IconMap;
IconMap icon_cache_;
- typedef CancelableRequest<IconRequestCallback> IconRequest;
-
// Asynchronous requests that have not yet been completed.
struct ClientRequest;
typedef std::map<IconLoader*, ClientRequest> ClientRequests;
diff --git a/chrome/browser/ui/cocoa/download/download_item_mac.h b/chrome/browser/ui/cocoa/download/download_item_mac.h
index f1b5d77..b82c16d 100644
--- a/chrome/browser/ui/cocoa/download/download_item_mac.h
+++ b/chrome/browser/ui/cocoa/download/download_item_mac.h
@@ -9,8 +9,8 @@
#include "base/memory/scoped_nsobject.h"
#include "base/memory/scoped_ptr.h"
-#include "chrome/browser/common/cancelable_request.h"
#include "chrome/browser/icon_manager.h"
+#include "chrome/common/cancelable_task_tracker.h"
#include "content/public/browser/download_item.h"
#include "content/public/browser/download_manager.h"
@@ -46,8 +46,7 @@ class DownloadItemMac : content::DownloadItem::Observer {
private:
// Callback for asynchronous icon loading.
- void OnExtractIconComplete(IconManager::Handle handle,
- gfx::Image* icon_bitmap);
+ void OnExtractIconComplete(gfx::Image* icon_bitmap);
// The download item model we represent.
scoped_ptr<DownloadItemModel> download_model_;
@@ -56,7 +55,7 @@ class DownloadItemMac : content::DownloadItem::Observer {
DownloadItemController* item_controller_; // weak, owns us.
// For canceling an in progress icon request.
- CancelableRequestConsumerT<int, 0> icon_consumer_;
+ CancelableTaskTracker cancelable_task_tracker_;
// Stores the last known path where the file will be saved.
FilePath lastFilePath_;
diff --git a/chrome/browser/ui/cocoa/download/download_item_mac.mm b/chrome/browser/ui/cocoa/download/download_item_mac.mm
index 4e69a60..2b17c08 100644
--- a/chrome/browser/ui/cocoa/download/download_item_mac.mm
+++ b/chrome/browser/ui/cocoa/download/download_item_mac.mm
@@ -23,7 +23,6 @@ DownloadItemMac::DownloadItemMac(DownloadItemModel* download_model,
DownloadItemMac::~DownloadItemMac() {
download_model_->download()->RemoveObserver(this);
- icon_consumer_.CancelAllRequests();
}
void DownloadItemMac::OnDownloadUpdated(content::DownloadItem* download) {
@@ -89,13 +88,14 @@ void DownloadItemMac::LoadIcon() {
}
// The icon isn't cached, load it asynchronously.
- icon_manager->LoadIcon(file, IconLoader::ALL, &icon_consumer_,
+ icon_manager->LoadIcon(file,
+ IconLoader::ALL,
base::Bind(&DownloadItemMac::OnExtractIconComplete,
- base::Unretained(this)));
+ base::Unretained(this)),
+ &cancelable_task_tracker_);
}
-void DownloadItemMac::OnExtractIconComplete(IconManager::Handle handle,
- gfx::Image* icon) {
+void DownloadItemMac::OnExtractIconComplete(gfx::Image* icon) {
if (!icon)
return;
[item_controller_ setIcon:icon->ToNSImage()];
diff --git a/chrome/browser/ui/gtk/download/download_item_gtk.cc b/chrome/browser/ui/gtk/download/download_item_gtk.cc
index 2c7bc55..c2d5ad3 100644
--- a/chrome/browser/ui/gtk/download/download_item_gtk.cc
+++ b/chrome/browser/ui/gtk/download/download_item_gtk.cc
@@ -283,7 +283,6 @@ DownloadItemGtk::~DownloadItemGtk() {
if (menu_.get())
menu_.reset();
- icon_consumer_.CancelAllRequests();
StopDownloadProgress();
get_download()->RemoveObserver(this);
@@ -452,30 +451,30 @@ void DownloadItemGtk::StopDownloadProgress() {
// Icon loading functions.
-void DownloadItemGtk::OnLoadSmallIconComplete(IconManager::Handle handle,
- gfx::Image* image) {
+void DownloadItemGtk::OnLoadSmallIconComplete(gfx::Image* image) {
icon_small_ = image;
gtk_widget_queue_draw(progress_area_.get());
}
-void DownloadItemGtk::OnLoadLargeIconComplete(IconManager::Handle handle,
- gfx::Image* image) {
+void DownloadItemGtk::OnLoadLargeIconComplete(gfx::Image* image) {
icon_large_ = image;
DownloadItemDrag::SetSource(body_.get(), get_download(), icon_large_);
}
void DownloadItemGtk::LoadIcon() {
- icon_consumer_.CancelAllRequests();
+ cancelable_task_tracker_.TryCancelAll();
IconManager* im = g_browser_process->icon_manager();
icon_filepath_ = get_download()->GetUserVerifiedFilePath();
im->LoadIcon(icon_filepath_,
- IconLoader::SMALL, &icon_consumer_,
+ IconLoader::SMALL,
base::Bind(&DownloadItemGtk::OnLoadSmallIconComplete,
- base::Unretained(this)));
+ base::Unretained(this)),
+ &cancelable_task_tracker_);
im->LoadIcon(icon_filepath_,
- IconLoader::LARGE, &icon_consumer_,
+ IconLoader::LARGE,
base::Bind(&DownloadItemGtk::OnLoadLargeIconComplete,
- base::Unretained(this)));
+ base::Unretained(this)),
+ &cancelable_task_tracker_);
}
void DownloadItemGtk::UpdateTooltip() {
diff --git a/chrome/browser/ui/gtk/download/download_item_gtk.h b/chrome/browser/ui/gtk/download/download_item_gtk.h
index 0150583..0efcab4 100644
--- a/chrome/browser/ui/gtk/download/download_item_gtk.h
+++ b/chrome/browser/ui/gtk/download/download_item_gtk.h
@@ -15,6 +15,7 @@
#include "base/time.h"
#include "base/timer.h"
#include "chrome/browser/icon_manager.h"
+#include "chrome/common/cancelable_task_tracker.h"
#include "content/public/browser/download_item.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
@@ -63,10 +64,8 @@ class DownloadItemGtk : public content::DownloadItem::Observer,
// Called when the icon manager has finished loading the icon. We take
// ownership of |icon_bitmap|.
- void OnLoadSmallIconComplete(IconManager::Handle handle,
- gfx::Image* image);
- void OnLoadLargeIconComplete(IconManager::Handle handle,
- gfx::Image* image);
+ void OnLoadSmallIconComplete(gfx::Image* image);
+ void OnLoadLargeIconComplete(gfx::Image* image);
// Returns the DownloadItem model object belonging to this item.
content::DownloadItem* get_download();
@@ -236,7 +235,7 @@ class DownloadItemGtk : public content::DownloadItem::Observer,
base::Time creation_time_;
// For canceling an in progress icon request.
- CancelableRequestConsumerT<int, 0> icon_consumer_;
+ CancelableTaskTracker cancelable_task_tracker_;
// Indicates when the download has completed, so we don't redo
// on-completion actions.
diff --git a/chrome/browser/ui/views/download/download_item_view.cc b/chrome/browser/ui/views/download/download_item_view.cc
index 2fe55db..6325ef9 100644
--- a/chrome/browser/ui/views/download/download_item_view.cc
+++ b/chrome/browser/ui/views/download/download_item_view.cc
@@ -217,7 +217,6 @@ DownloadItemView::DownloadItemView(DownloadItem* download,
}
DownloadItemView::~DownloadItemView() {
- icon_consumer_.CancelAllRequests();
StopDownloadProgress();
download_->RemoveObserver(this);
}
@@ -243,8 +242,7 @@ void DownloadItemView::StopDownloadProgress() {
progress_timer_.Stop();
}
-void DownloadItemView::OnExtractIconComplete(IconManager::Handle handle,
- gfx::Image* icon_bitmap) {
+void DownloadItemView::OnExtractIconComplete(gfx::Image* icon_bitmap) {
if (icon_bitmap)
parent()->SchedulePaint();
}
@@ -856,9 +854,10 @@ void DownloadItemView::LoadIcon() {
IconManager* im = g_browser_process->icon_manager();
last_download_item_path_ = download_->GetUserVerifiedFilePath();
im->LoadIcon(last_download_item_path_,
- IconLoader::SMALL, &icon_consumer_,
+ IconLoader::SMALL,
base::Bind(&DownloadItemView::OnExtractIconComplete,
- base::Unretained(this)));
+ base::Unretained(this)),
+ &cancelable_task_tracker_);
}
void DownloadItemView::LoadIconIfItemPathChanged() {
diff --git a/chrome/browser/ui/views/download/download_item_view.h b/chrome/browser/ui/views/download/download_item_view.h
index f4d91b2..b4e1ead 100644
--- a/chrome/browser/ui/views/download/download_item_view.h
+++ b/chrome/browser/ui/views/download/download_item_view.h
@@ -69,7 +69,7 @@ class DownloadItemView : public views::ButtonListener,
void StopDownloadProgress();
// IconManager::Client interface.
- void OnExtractIconComplete(IconManager::Handle handle, gfx::Image* icon);
+ void OnExtractIconComplete(gfx::Image* icon);
// Returns the DownloadItem model object belonging to this item.
content::DownloadItem* download() const { return download_; }
@@ -281,7 +281,7 @@ class DownloadItemView : public views::ButtonListener,
gfx::Point drag_start_point_;
// For canceling an in progress icon request.
- CancelableRequestConsumerT<int, 0> icon_consumer_;
+ CancelableTaskTracker cancelable_task_tracker_;
// A model class to control the status text we display and the cancel
// behavior.
diff --git a/chrome/browser/ui/webui/fileicon_source.cc b/chrome/browser/ui/webui/fileicon_source.cc
index 8f8a80d..4ca7e81 100644
--- a/chrome/browser/ui/webui/fileicon_source.cc
+++ b/chrome/browser/ui/webui/fileicon_source.cc
@@ -5,9 +5,11 @@
#include "chrome/browser/ui/webui/fileicon_source.h"
#include "base/basictypes.h"
+#include "base/bind.h"
#include "base/callback.h"
#include "base/file_path.h"
#include "base/memory/ref_counted_memory.h"
+#include "base/message_loop.h"
#include "base/string_split.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
@@ -91,9 +93,7 @@ void ParseQueryParams(const std::string& query,
FileIconSource::FileIconSource()
: DataSource(kFileIconPath, MessageLoop::current()) {}
-FileIconSource::~FileIconSource() {
- cancelable_consumer_.CancelAllRequests();
-}
+FileIconSource::~FileIconSource() {}
void FileIconSource::FetchFileIcon(const FilePath& path,
ui::ScaleFactor scale_factor,
@@ -110,17 +110,17 @@ void FileIconSource::FetchFileIcon(const FilePath& path,
SendResponse(request_id, icon_data);
} else {
- // Icon was not in cache, go fetch it slowly.
- IconManager::Handle h = im->LoadIcon(
- path, icon_size, &cancelable_consumer_,
- base::Bind(&FileIconSource::OnFileIconDataAvailable,
- base::Unretained(this)));
-
// Attach the ChromeURLDataManager request ID to the history request.
IconRequestDetails details;
details.request_id = request_id;
details.scale_factor = scale_factor;
- cancelable_consumer_.SetClientData(im, h, details);
+
+ // Icon was not in cache, go fetch it slowly.
+ im->LoadIcon(path,
+ icon_size,
+ base::Bind(&FileIconSource::OnFileIconDataAvailable,
+ base::Unretained(this), details),
+ &cancelable_task_tracker_);
}
}
@@ -141,17 +141,15 @@ std::string FileIconSource::GetMimeType(const std::string&) const {
return std::string();
}
-void FileIconSource::OnFileIconDataAvailable(IconManager::Handle handle,
+void FileIconSource::OnFileIconDataAvailable(const IconRequestDetails& details,
gfx::Image* icon) {
- IconManager* im = g_browser_process->icon_manager();
- IconRequestDetails details = cancelable_consumer_.GetClientData(im, handle);
-
if (icon) {
scoped_refptr<base::RefCountedBytes> icon_data(new base::RefCountedBytes);
gfx::PNGCodec::EncodeBGRASkBitmap(
- icon->ToImageSkia()->GetRepresentation(
- details.scale_factor).sk_bitmap(),
- false, &icon_data->data());
+ icon->ToImageSkia()->GetRepresentation(details.scale_factor)
+ .sk_bitmap(),
+ false,
+ &icon_data->data());
SendResponse(details.request_id, icon_data);
} else {
diff --git a/chrome/browser/ui/webui/fileicon_source.h b/chrome/browser/ui/webui/fileicon_source.h
index c9194a9..ef43f84 100644
--- a/chrome/browser/ui/webui/fileicon_source.h
+++ b/chrome/browser/ui/webui/fileicon_source.h
@@ -10,6 +10,7 @@
#include "base/file_path.h"
#include "chrome/browser/icon_manager.h"
#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
+#include "chrome/common/cancelable_task_tracker.h"
#include "ui/base/layout.h"
namespace gfx {
@@ -30,11 +31,6 @@ class FileIconSource : public ChromeURLDataManager::DataSource {
virtual std::string GetMimeType(const std::string&) const OVERRIDE;
- // Called when favicon data is available from the history backend.
- void OnFileIconDataAvailable(
- IconManager::Handle request_handle,
- gfx::Image* icon);
-
protected:
virtual ~FileIconSource();
@@ -56,8 +52,12 @@ class FileIconSource : public ChromeURLDataManager::DataSource {
ui::ScaleFactor scale_factor;
};
- // Consumer for requesting file icons.
- CancelableRequestConsumerTSimple<IconRequestDetails> cancelable_consumer_;
+ // Called when favicon data is available from the history backend.
+ void OnFileIconDataAvailable(const IconRequestDetails& details,
+ gfx::Image* icon);
+
+ // Tracks tasks requesting file icons.
+ CancelableTaskTracker cancelable_task_tracker_;
DISALLOW_COPY_AND_ASSIGN(FileIconSource);
};