| 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..31ddd615c18a9e06fdb5739fc0e915a3e4ac9dd3 100644
|
| --- a/extensions/browser/extension_icon_image.cc
|
| +++ b/extensions/browser/extension_icon_image.cc
|
| @@ -11,6 +11,7 @@
|
| #include "extensions/browser/image_loader.h"
|
| #include "extensions/browser/notification_types.h"
|
| #include "extensions/common/extension.h"
|
| +#include "ui/base/layout.h"
|
| #include "ui/gfx/canvas.h"
|
| #include "ui/gfx/geometry/size.h"
|
| #include "ui/gfx/geometry/size_conversions.h"
|
| @@ -223,7 +224,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 (!ui::IsSupportedScale(rep.scale()))
|
| + image_skia_.RemoveRepresentation(rep.scale());
|
| + }
|
| +
|
| image_skia_.RemoveRepresentation(scale);
|
| image_skia_.AddRepresentation(rep);
|
|
|
|
|