Index: extensions/browser/extension_icon_image.cc |
diff --git a/extensions/browser/extension_icon_image.cc b/extensions/browser/extension_icon_image.cc |
index 8e3f9576e08fbf15ccc11ff8c755790f6cddc635..5f237fff5cd9d4c8c0c929511c2472f20e786e58 100644 |
--- a/extensions/browser/extension_icon_image.cc |
+++ b/extensions/browser/extension_icon_image.cc |
@@ -134,13 +134,14 @@ IconImage::IconImage( |
extension_(extension), |
icon_set_(icon_set), |
resource_size_in_dip_(resource_size_in_dip), |
- observer_(observer), |
source_(NULL), |
default_icon_(gfx::ImageSkiaOperations::CreateResizedImage( |
default_icon, |
skia::ImageOperations::RESIZE_BEST, |
gfx::Size(resource_size_in_dip, resource_size_in_dip))), |
weak_ptr_factory_(this) { |
+ if (observer) |
+ AddObserver(observer); |
gfx::Size resource_size(resource_size_in_dip, resource_size_in_dip); |
source_ = new Source(this, resource_size); |
image_skia_ = gfx::ImageSkia(source_, resource_size); |
@@ -150,7 +151,16 @@ IconImage::IconImage( |
content::NotificationService::AllSources()); |
} |
+void IconImage::AddObserver(Observer* observer) { |
+ observers_.AddObserver(observer); |
+} |
+ |
+void IconImage::RemoveObserver(Observer* observer) { |
+ observers_.RemoveObserver(observer); |
+} |
+ |
IconImage::~IconImage() { |
+ FOR_EACH_OBSERVER(Observer, observers_, OnExtensionIconImageDestroyed(this)); |
source_->ResetHost(); |
} |
@@ -216,8 +226,7 @@ void IconImage::OnImageLoaded(float scale, const gfx::Image& image_in) { |
image_skia_.RemoveRepresentation(scale); |
image_skia_.AddRepresentation(rep); |
- if (observer_) |
- observer_->OnExtensionIconImageChanged(this); |
+ FOR_EACH_OBSERVER(Observer, observers_, OnExtensionIconImageChanged(this)); |
} |
void IconImage::Observe(int type, |