Index: extensions/browser/extension_icon_image.cc |
diff --git a/extensions/browser/extension_icon_image.cc b/extensions/browser/extension_icon_image.cc |
index 5ebc40017920f6190631bb21baf4fb5030308d28..cfd4fccac9df97302cda847bfd3c46e5df64f8d2 100644 |
--- a/extensions/browser/extension_icon_image.cc |
+++ b/extensions/browser/extension_icon_image.cc |
@@ -223,7 +223,21 @@ void IconImage::OnImageLoaded(float scale, const gfx::Image& image_in) { |
DCHECK(!rep.is_null()); |
DCHECK_EQ(scale, rep.scale()); |
- // Remove old representation if there is one. |
+ // Remove fractional scale image representations as they may have become |
+ // stale here. These images are generated by ImageSkia on request from |
+ // supported scales like 1x, 2x, etc. |
+ // TODO(oshima) |
+ // A better approach might be to set the |image_| member using the ImageSkia |
+ // copy from the image passed in and set the |image_skia_| member using |
+ // image_.ToImageSkia(). However that does not work correctly as the |
+ // ImageSkia from the image does not contain a source which breaks requests |
+ // for scaled images. |
+ std::vector<gfx::ImageSkiaRep> reps = image_skia_.image_reps(); |
+ for (const auto rep : reps) { |
+ if (!gfx::ImageSkia::IsSupportedScale(rep.scale())) |
+ image_skia_.RemoveRepresentation(rep.scale()); |
+ } |
+ |
image_skia_.RemoveRepresentation(scale); |
image_skia_.AddRepresentation(rep); |