Index: chrome/browser/extensions/tab_helper.cc |
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc |
index 88f85508404e5bcb67694bfd86b741c413a27e70..8fe31dd4c9c3cf4af65669cb6428e67581960061 100644 |
--- a/chrome/browser/extensions/tab_helper.cc |
+++ b/chrome/browser/extensions/tab_helper.cc |
@@ -11,6 +11,7 @@ |
#include "chrome/browser/extensions/extension_action_manager.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/extension_tab_util.h" |
+#include "chrome/browser/extensions/image_loader.h" |
#include "chrome/browser/extensions/page_action_controller.h" |
#include "chrome/browser/extensions/script_badge_controller.h" |
#include "chrome/browser/extensions/script_bubble_controller.h" |
@@ -82,7 +83,8 @@ TabHelper::TabHelper(content::WebContents* web_contents) |
this)), |
pending_web_app_action_(NONE), |
script_executor_(new ScriptExecutor(web_contents, |
- &script_execution_observers_)) { |
+ &script_execution_observers_)), |
+ ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_ptr_factory_(this)) { |
// The ActiveTabPermissionManager requires a session ID; ensure this |
// WebContents has one. |
SessionTabHelper::CreateForWebContents(web_contents); |
@@ -432,18 +434,22 @@ const Extension* TabHelper::GetExtension(const std::string& extension_app_id) { |
void TabHelper::UpdateExtensionAppIcon(const Extension* extension) { |
extension_app_icon_.reset(); |
+ // Ensure previously enqueued callbacks are ignored. |
+ image_loader_ptr_factory_.InvalidateWeakPtrs(); |
+ // Enqueue OnImageLoaded callback. |
if (extension) { |
- extension_app_image_loader_.reset(new ImageLoadingTracker(this)); |
- extension_app_image_loader_->LoadImage( |
+ Profile* profile = |
+ Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
+ extensions::ImageLoader* loader = extensions::ImageLoader::Get(profile); |
+ loader->LoadImageAsync( |
extension, |
extension->GetIconResource(extension_misc::EXTENSION_ICON_SMALLISH, |
ExtensionIconSet::MATCH_EXACTLY), |
gfx::Size(extension_misc::EXTENSION_ICON_SMALLISH, |
extension_misc::EXTENSION_ICON_SMALLISH), |
- ImageLoadingTracker::CACHE); |
- } else { |
- extension_app_image_loader_.reset(NULL); |
+ base::Bind(&TabHelper::OnImageLoaded, |
+ image_loader_ptr_factory_.GetWeakPtr())); |
} |
} |
@@ -452,9 +458,7 @@ void TabHelper::SetAppIcon(const SkBitmap& app_icon) { |
web_contents()->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TITLE); |
} |
-void TabHelper::OnImageLoaded(const gfx::Image& image, |
- const std::string& extension_id, |
- int index) { |
+void TabHelper::OnImageLoaded(const gfx::Image& image) { |
if (!image.IsEmpty()) { |
extension_app_icon_ = *image.ToSkBitmap(); |
web_contents()->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TAB); |