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

Unified Diff: chrome/browser/ui/gtk/location_bar_view_gtk.cc

Issue 10806058: Move icon fallbacks into ExtensionAction. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move the icon cache inside ExtensionAction. 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/gtk/location_bar_view_gtk.cc
diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.cc b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
index be414627b8f49b3fa9ce06b7ddd96d2a082ff54f..7f429c4da1837ec08f31500acdea5cabf436bd4e 100644
--- a/chrome/browser/ui/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
@@ -1699,7 +1699,6 @@ LocationBarViewGtk::PageActionViewGtk::PageActionViewGtk(
ExtensionAction* page_action)
: owner_(NULL),
page_action_(page_action),
- last_icon_pixbuf_(NULL),
tracker_(this),
current_tab_id_(-1),
window_(NULL),
@@ -1755,12 +1754,6 @@ LocationBarViewGtk::PageActionViewGtk::~PageActionViewGtk() {
image_.Destroy();
event_box_.Destroy();
- for (PixbufMap::iterator iter = pixbufs_.begin(); iter != pixbufs_.end();
- ++iter) {
- g_object_unref(iter->second);
- }
- if (last_icon_pixbuf_)
- g_object_unref(last_icon_pixbuf_);
}
bool LocationBarViewGtk::PageActionViewGtk::IsVisible() {
@@ -1782,54 +1775,11 @@ void LocationBarViewGtk::PageActionViewGtk::UpdateVisibility(
page_action_->GetTitle(current_tab_id_).c_str());
// Set the image.
- // It can come from three places. In descending order of priority:
- // - The developer can set it dynamically by path or bitmap. It will be in
- // page_action_->GetIcon().
- // - The developer can set it dyanmically by index. It will be in
- // page_action_->GetIconIndex().
- // - It can be set in the manifest by path. It will be in page_action_->
- // default_icon_path().
-
- // First look for a dynamically set bitmap.
- SkBitmap icon = page_action_->GetIcon(current_tab_id_);
- GdkPixbuf* pixbuf = NULL;
- if (!icon.isNull()) {
- if (icon.pixelRef() != last_icon_skbitmap_.pixelRef()) {
- if (last_icon_pixbuf_)
- g_object_unref(last_icon_pixbuf_);
- last_icon_skbitmap_ = icon;
- last_icon_pixbuf_ = gfx::GdkPixbufFromSkBitmap(icon);
- }
- DCHECK(last_icon_pixbuf_);
- pixbuf = last_icon_pixbuf_;
- } else {
- // Otherwise look for a dynamically set index, or fall back to the
- // default path.
- int icon_index = page_action_->GetIconIndex(current_tab_id_);
- std::string icon_path = (icon_index < 0) ?
- page_action_->default_icon_path() :
- page_action_->icon_paths()->at(icon_index);
- if (!icon_path.empty()) {
- PixbufMap::iterator iter = pixbufs_.find(icon_path);
- if (iter != pixbufs_.end())
- pixbuf = iter->second;
- }
- }
- // The pixbuf might not be loaded yet.
- if (pixbuf) {
- const ExtensionAction::IconAnimation* icon_animation =
- scoped_icon_animation_observer_.icon_animation();
- if (icon_animation) {
- // Draw |pixbuf| with the fade-in |icon_animation_| applied to it.
- // Use a temporary gfx::Image to do the conversion to/from a SkBitmap.
- g_object_ref(pixbuf); // don't let gfx::Image take ownership.
- gfx::Image animated_image(
- icon_animation->Apply(*gfx::Image(pixbuf).ToSkBitmap()));
- gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()),
- animated_image.ToGdkPixbuf());
- } else {
- gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()), pixbuf);
- }
+ gfx::Image icon = page_action_->GetIcon(current_tab_id_);
+ if (!icon.IsEmpty()) {
+ GdkPixbuf* pixbuf = icon.ToGdkPixbuf();
+ DCHECK(pixbuf);
+ gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()), pixbuf);
}
}
@@ -1860,14 +1810,10 @@ void LocationBarViewGtk::PageActionViewGtk::OnImageLoaded(
// Map the index of the loaded image back to its name. If we ever get an
// index greater than the number of icons, it must be the default icon.
- if (!image.IsEmpty()) {
- GdkPixbuf* pixbuf =
- static_cast<GdkPixbuf*>(g_object_ref(image.ToGdkPixbuf()));
- if (index < static_cast<int>(page_action_->icon_paths()->size()))
- pixbufs_[page_action_->icon_paths()->at(index)] = pixbuf;
- else
- pixbufs_[page_action_->default_icon_path()] = pixbuf;
- }
+ if (index < static_cast<int>(page_action_->icon_paths()->size()))
+ page_action_->CacheIcon(page_action_->icon_paths()->at(index), image);
+ else
+ page_action_->CacheIcon(page_action_->default_icon_path(), image);
// If we have no owner, that means this class is still being constructed.
TabContents* tab_contents = owner_ ? owner_->GetTabContents() : NULL;

Powered by Google App Engine
This is Rietveld 408576698