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

Unified Diff: extensions/browser/extension_icon_image.h

Issue 885443004: [Extensions] Cache extension action icons (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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
« no previous file with comments | « chrome/browser/extensions/extension_action_unittest.cc ('k') | extensions/browser/extension_icon_image.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/extension_icon_image.h
diff --git a/extensions/browser/extension_icon_image.h b/extensions/browser/extension_icon_image.h
index 90e90cbfd5858223b93de2ae91e9fcc8dce07c26..456a1a2f7bb8a70e3fc383fa92e357411246f700 100644
--- a/extensions/browser/extension_icon_image.h
+++ b/extensions/browser/extension_icon_image.h
@@ -10,6 +10,7 @@
#include "base/basictypes.h"
#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "extensions/common/extension_icon_set.h"
@@ -33,12 +34,11 @@ namespace extensions {
// A class that provides an ImageSkia for UI code to use. It handles extension
// icon resource loading, screen scale factor change etc. UI code that uses
-// extension icon should host this class and be its observer. ExtensionIconImage
-// should be outlived by the observer. In painting code, UI code paints with the
-// ImageSkia provided by this class. If required extension icon resource is not
-// already present, this class tries to load it and calls its observer interface
-// when the image get updated. Until the resource is loaded, the UI code will be
-// provided with blank, transparent image.
+// extension icon should host this class. In painting code, UI code paints with
+// the ImageSkia provided by this class. If the required extension icon resource
+// is not already present, this class tries to load it and calls its observer
+// interface when the image get updated. Until the resource is loaded, the UI
+// code will be provided with a blank, transparent image.
// If the requested resource doesn't exist or can't be loaded and a default
// icon was supplied in the constructor, icon image will be updated with the
// default icon's resource.
@@ -56,6 +56,10 @@ class IconImage : public content::NotificationObserver {
// is loaded and added to |image|.
virtual void OnExtensionIconImageChanged(IconImage* image) = 0;
+ // Called when this object is deleted. Objects should observe this if there
+ // is a question about the lifetime of the icon image vs observer.
+ virtual void OnExtensionIconImageDestroyed(IconImage* image) {}
+
protected:
virtual ~Observer() {}
};
@@ -73,6 +77,9 @@ class IconImage : public content::NotificationObserver {
const gfx::ImageSkia& image_skia() const { return image_skia_; }
+ void AddObserver(Observer* observer);
+ void RemoveObserver(Observer* observer);
+
private:
class Source;
@@ -81,7 +88,7 @@ class IconImage : public content::NotificationObserver {
// method.
// If representation loading is asynchronous, an empty image
// representation is returned. When the representation gets loaded the
- // observer's |OnExtensionIconImageLoaded| will be called.
+ // observers' OnExtensionIconImageLoaded() will be called.
gfx::ImageSkiaRep LoadImageForScaleFactor(ui::ScaleFactor scale_factor);
void OnImageLoaded(float scale_factor, const gfx::Image& image);
@@ -96,7 +103,7 @@ class IconImage : public content::NotificationObserver {
const ExtensionIconSet& icon_set_;
const int resource_size_in_dip_;
- Observer* observer_;
+ ObserverList<Observer> observers_;
Source* source_; // Owned by ImageSkia storage.
gfx::ImageSkia image_skia_;
« no previous file with comments | « chrome/browser/extensions/extension_action_unittest.cc ('k') | extensions/browser/extension_icon_image.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698