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

Unified Diff: chrome/browser/ui/cocoa/extensions/browser_action_button.mm

Issue 10806058: Move icon fallbacks into ExtensionAction. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Windows support Created 8 years, 5 months 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
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 0ab34116a3837320678197f9b9a3d2f60f996fcf..f1ae3b495c65b189fd012a6e1f585075f7961353 100644
--- a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm
+++ b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm
@@ -50,7 +50,8 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver,
ExtensionImageTrackerBridge(BrowserActionButton* owner,
const Extension* extension)
: owner_(owner),
- tracker_(this) {
+ tracker_(this),
+ extension_(extension) {
// 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();
@@ -59,12 +60,6 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver,
gfx::Size(Extension::kBrowserActionIconMaxSize,
Extension::kBrowserActionIconMaxSize),
ImageLoadingTracker::DONT_CACHE);
- } else {
- // Set the icon to be the default extensions icon.
- SkBitmap bm = *ResourceBundle::GetSharedInstance().GetBitmapNamed(
- IDR_EXTENSIONS_FAVICON);
- [owner_ setDefaultIcon:gfx::SkBitmapToNSImage(bm)];
- [owner_ updateState];
Jeffrey Yasskin 2012/07/25 19:45:26 This updateState call is provided by the function
}
registrar_.Add(
this, chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED,
@@ -73,12 +68,16 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver,
~ExtensionImageTrackerBridge() {}
+ const ExtensionAction::PathToIconCache& loaded_icons() const {
+ return loaded_icons_;
+ }
+
// ImageLoadingTracker::Observer implementation.
void OnImageLoaded(const gfx::Image& image,
const std::string& extension_id,
int index) OVERRIDE {
if (!image.IsEmpty())
- [owner_ setDefaultIcon:image.ToNSImage()];
+ loaded_icons_[extension_->browser_action()->default_icon_path()] = image;
[owner_ updateState];
}
@@ -99,6 +98,12 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver,
// Loads the button's icons for us on the file thread.
ImageLoadingTracker tracker_;
+ // The extension whose images we're loading.
+ const Extension* const extension_;
not at google - send to devlin 2012/07/26 02:29:44 We only ever access extension_->browser_action(),
Jeffrey Yasskin 2012/07/26 21:11:47 Good point. Turned this into the browser action.
+
+ // Icons loaded from paths. Currently just the browser action's default icon.
+ ExtensionAction::PathToIconCache loaded_icons_;
+
// Used for registering to receive notifications and automatic clean up.
content::NotificationRegistrar registrar_;
@@ -241,14 +246,6 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver,
}
}
-- (void)setDefaultIcon:(NSImage*)image {
- defaultIcon_.reset([image retain]);
-}
-
-- (void)setTabSpecificIcon:(NSImage*)image {
- tabSpecificIcon_.reset([image retain]);
-}
-
- (void)updateState {
if (tabId_ < 0)
return;
@@ -260,12 +257,10 @@ class ExtensionImageTrackerBridge : public content::NotificationObserver,
[self setToolTip:base::SysUTF8ToNSString(tooltip)];
}
- SkBitmap image = extension_->browser_action()->GetIcon(tabId_);
- if (!image.isNull()) {
- [self setTabSpecificIcon:gfx::SkBitmapToNSImage(image)];
- [self setImage:tabSpecificIcon_];
- } else if (defaultIcon_) {
- [self setImage:defaultIcon_];
+ gfx::Image image = extension_->browser_action()->GetIcon(
+ tabId_, imageLoadingBridge_->loaded_icons());
+ if (!image.IsEmpty()) {
+ [self setImage:image.ToNSImage()];
not at google - send to devlin 2012/07/26 02:29:44 nit: no {}
Jeffrey Yasskin 2012/07/26 21:11:47 Done.
}
[[self cell] setTabId:tabId_];

Powered by Google App Engine
This is Rietveld 408576698