Chromium Code Reviews| Index: chrome/browser/ui/cocoa/extensions/browser_action_button.mm |
| diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm |
| index a2d31c39a4acf592091d48d5701ac242876f58e6..3207926335a72ea19b7c31ce422cc3191fb0b4e9 100644 |
| --- a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm |
| +++ b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm |
| @@ -9,7 +9,7 @@ |
| #include "base/logging.h" |
| #include "base/sys_string_conversions.h" |
| -#include "chrome/browser/extensions/image_loading_tracker.h" |
| +#include "chrome/browser/extensions/extension_action_icon_factory.h" |
| #include "chrome/browser/ui/cocoa/extensions/extension_action_context_menu.h" |
| #import "chrome/browser/ui/cocoa/image_utils.h" |
| #include "chrome/common/chrome_notification_types.h" |
| @@ -44,35 +44,24 @@ const CGFloat kAnimationDuration = 0.2; |
| // A helper class to bridge the asynchronous Skia bitmap loading mechanism to |
| // the extension's button. |
| -class ExtensionImageTrackerBridge : public content::NotificationObserver, |
| - public ImageLoadingTracker::Observer { |
| +class ExtensionActionIconFactoryBridge |
| + : public content::NotificationObserver, |
| + public ExtensionActionIconFactory::Observer { |
| public: |
| - ExtensionImageTrackerBridge(BrowserActionButton* owner, |
| - const Extension* extension) |
| + ExtensionActionIconFactoryBridge(BrowserActionButton* owner, |
| + const Extension* extension) |
| : owner_(owner), |
| - tracker_(this), |
| + icon_factory_(extension, this), |
| browser_action_(extension->browser_action()) { |
| - // The Browser Action API does not allow the default icon path to be |
| - // changed at runtime, so we can load this now and cache it. |
| - std::string path = extension->browser_action()->default_icon_path(); |
| - if (!path.empty()) { |
| - tracker_.LoadImage(extension, extension->GetResource(path), |
| - gfx::Size(Extension::kBrowserActionIconMaxSize, |
| - Extension::kBrowserActionIconMaxSize), |
| - ImageLoadingTracker::DONT_CACHE); |
| - } |
| registrar_.Add( |
| this, chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED, |
| content::Source<ExtensionAction>(browser_action_)); |
| } |
| - ~ExtensionImageTrackerBridge() {} |
| + ~ExtensionActionIconFactoryBridge() {} |
|
Robert Sesek
2012/08/30 19:08:21
Should be virtual (yikes that it wasn't before!)
tbarzic
2012/08/30 20:48:40
Done.
|
| // ImageLoadingTracker::Observer implementation. |
| - void OnImageLoaded(const gfx::Image& image, |
| - const std::string& extension_id, |
| - int index) OVERRIDE { |
| - browser_action_->CacheIcon(browser_action_->default_icon_path(), image); |
| + void OnIconUpdated() OVERRIDE { |
| [owner_ updateState]; |
| } |
| @@ -86,12 +75,16 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver, |
| NOTREACHED(); |
| } |
| + ExtensionActionIconFactory* icon_factory() { return &icon_factory_; } |
|
Robert Sesek
2012/08/30 19:08:21
const method
tbarzic
2012/08/30 20:48:40
the method is not really const (since it returns n
|
| + |
| private: |
| // Weak. Owns us. |
| BrowserActionButton* owner_; |
| - // Loads the button's icons for us on the file thread. |
| - ImageLoadingTracker tracker_; |
| + // The object that browser action will use to create icon for us. |
| + // It may load icon asynchronously (in which case initial icon returned by |
| + // the action will be blank), so we have to observe it for icon's updates. |
| + ExtensionActionIconFactory icon_factory_; |
| // The browser action whose images we're loading. |
| ExtensionAction* const browser_action_; |
| @@ -99,7 +92,7 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver, |
| // Used for registering to receive notifications and automatic clean up. |
| content::NotificationRegistrar registrar_; |
| - DISALLOW_COPY_AND_ASSIGN(ExtensionImageTrackerBridge); |
| + DISALLOW_COPY_AND_ASSIGN(ExtensionActionIconFactoryBridge); |
| }; |
| @interface BrowserActionCell (Internals) |
| @@ -149,7 +142,8 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver, |
| tabId_ = tabId; |
| extension_ = extension; |
| - imageLoadingBridge_.reset(new ExtensionImageTrackerBridge(self, extension)); |
| + iconFactoryBridge_.reset( |
| + new ExtensionActionIconFactoryBridge(self, extension)); |
| moveAnimation_.reset([[NSViewAnimation alloc] init]); |
| [moveAnimation_ gtm_setDuration:kAnimationDuration |
| @@ -249,7 +243,9 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver, |
| [self setToolTip:base::SysUTF8ToNSString(tooltip)]; |
| } |
| - gfx::Image image = extension_->browser_action()->GetIcon(tabId_); |
| + gfx::Image image = |
| + extension_->browser_action()->GetIcon(tabId_, |
| + iconFactoryBridge_->icon_factory()); |
| if (!image.IsEmpty()) |
| [self setImage:image.ToNSImage()]; |