Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Unified Diff: chrome/browser/icon_manager.cc

Issue 11441006: Convert IconManager to use new CancelableTaskTracker (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase and fix mac compiling Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/icon_manager.h ('k') | chrome/browser/ui/cocoa/download/download_item_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/icon_manager.cc
diff --git a/chrome/browser/icon_manager.cc b/chrome/browser/icon_manager.cc
index e22ccefe34dd220a9f134706eefc43da864100c1..2f1444e83d0d7e999d93a9e818c95fc0ea4db953 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.
« no previous file with comments | « chrome/browser/icon_manager.h ('k') | chrome/browser/ui/cocoa/download/download_item_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698