Index: chrome/browser/ui/views/browser_action_view.cc |
diff --git a/chrome/browser/ui/views/browser_action_view.cc b/chrome/browser/ui/views/browser_action_view.cc |
index 2d8ac71a5a86f8dc8fcf8512b408b21eb46b9042..f7774ccbba5c32efd7f3b571d4c19d8ca83a15a0 100644 |
--- a/chrome/browser/ui/views/browser_action_view.cc |
+++ b/chrome/browser/ui/views/browser_action_view.cc |
@@ -62,7 +62,7 @@ gfx::ImageSkia BrowserActionView::GetIconWithBadge() { |
const ExtensionAction* action = button_->extension()->browser_action(); |
gfx::Size spacing(0, ToolbarView::kVertSpacing); |
- gfx::ImageSkia icon = *action->GetIcon(tab_id).ToImageSkia(); |
+ gfx::ImageSkia icon = *button_->icon_factory().GetIcon(tab_id).ToImageSkia(); |
if (!button_->IsEnabled(tab_id)) |
icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25); |
return action->GetIconWithBadge(icon, tab_id, spacing); |
@@ -111,7 +111,8 @@ BrowserActionButton::BrowserActionButton(const Extension* extension, |
browser_(browser), |
browser_action_(extension->browser_action()), |
extension_(extension), |
- ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)), |
+ ALLOW_THIS_IN_INITIALIZER_LIST( |
+ icon_factory_(extension, extension->browser_action(), this)), |
delegate_(delegate), |
context_menu_(NULL), |
called_registered_extension_command_(false) { |
@@ -145,21 +146,6 @@ void BrowserActionButton::Destroy() { |
void BrowserActionButton::ViewHierarchyChanged( |
bool is_add, View* parent, View* child) { |
- if (is_add && child == this) { |
- // 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 relative_path = browser_action_->default_icon_path(); |
- if (!relative_path.empty()) { |
- // LoadImage is not guaranteed to be synchronous, so we might see the |
- // callback OnImageLoaded execute immediately. It (through UpdateState) |
- // expects parent() to return the owner for this button, so this |
- // function is as early as we can start this request. |
- tracker_.LoadImage(extension_, extension_->GetResource(relative_path), |
- gfx::Size(Extension::kBrowserActionIconMaxSize, |
- Extension::kBrowserActionIconMaxSize), |
- ImageLoadingTracker::DONT_CACHE); |
- } |
- } |
if (is_add && !called_registered_extension_command_ && GetFocusManager()) { |
MaybeRegisterExtensionCommand(); |
@@ -214,16 +200,6 @@ void BrowserActionButton::ShowContextMenuForView(View* source, |
context_menu_ = NULL; |
} |
-void BrowserActionButton::OnImageLoaded(const gfx::Image& image, |
- const std::string& extension_id, |
- int index) { |
- browser_action_->CacheIcon(image); |
- |
- // Call back to UpdateState() because a more specific icon might have been set |
- // while the load was outstanding. |
- UpdateState(); |
-} |
- |
void BrowserActionButton::UpdateState() { |
int tab_id = delegate_->GetCurrentTabId(); |
if (tab_id < 0) |
@@ -239,7 +215,7 @@ void BrowserActionButton::UpdateState() { |
views::CustomButton::BS_NORMAL); |
} |
- gfx::ImageSkia icon = *browser_action()->GetIcon(tab_id).ToImageSkia(); |
+ gfx::ImageSkia icon = *icon_factory_.GetIcon(tab_id).ToImageSkia(); |
if (!icon.isNull()) { |
if (!browser_action()->GetIsVisible(tab_id)) |
@@ -308,6 +284,10 @@ void BrowserActionButton::Observe(int type, |
} |
} |
+void BrowserActionButton::OnIconUpdated() { |
+ UpdateState(); |
+} |
+ |
bool BrowserActionButton::Activate() { |
if (!IsPopup()) |
return true; |