| 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);
|
|
|