Index: chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaImageManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaImageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaImageManager.java |
index e6af620aa71ea21d04c7892823e9617ce266c55a..bd45b9dde658b006261f38ce568c931b2cea27c9 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaImageManager.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaImageManager.java |
@@ -77,6 +77,12 @@ public class MediaImageManager implements ImageDownloadCallback { |
// The callback to be called when the pending download image request completes. |
private MediaImageCallback mCallback; |
+ // The last image src for download, used for avoiding fetching the same src when artwork is set |
+ // multiple times but the same src is chosen. |
+ // |
+ // Will be reset when initiating a new download request, and set to |null| when download failed. |
+ private String mLastImageSrc; |
+ |
/** |
* MediaImageManager constructor. |
* @param minimumSize The minimum size of images to download. |
@@ -128,11 +134,14 @@ public class MediaImageManager implements ImageDownloadCallback { |
mCallback = callback; |
MediaImage image = selectImage(images); |
if (image == null) { |
- mCallback.onImageDownloaded(null); |
- clearRequests(); |
+ onDownloadFailed(); |
return; |
} |
+ // Avoid fetching the same image twice. |
+ if (TextUtils.equals(image.getSrc(), mLastImageSrc)) return; |
+ mLastImageSrc = image.getSrc(); |
+ |
// Limit |maxBitmapSize| to |MAX_BITMAP_SIZE_FOR_DOWNLOAD| to avoid passing huge bitmaps |
// through JNI. |maxBitmapSize| does not prevent huge images to be downloaded. It is used to |
// filter/rescale the download images. See documentation of |
@@ -169,8 +178,12 @@ public class MediaImageManager implements ImageDownloadCallback { |
bestScore = newScore; |
} |
} |
- mCallback.onImageDownloaded(bestBitmap); |
- clearRequests(); |
+ if (bestBitmap != null) { |
+ mCallback.onImageDownloaded(bestBitmap); |
+ clearRequests(); |
+ } else { |
+ onDownloadFailed(); |
+ } |
} |
/** |
@@ -197,6 +210,12 @@ public class MediaImageManager implements ImageDownloadCallback { |
mCallback = null; |
} |
+ private void onDownloadFailed() { |
+ mLastImageSrc = null; |
+ mCallback.onImageDownloaded(null); |
+ clearRequests(); |
+ } |
+ |
private double getImageScore(MediaImage image) { |
if (image == null) return 0; |
if (image.getSizes().isEmpty()) return DEFAULT_IMAGE_SIZE_SCORE; |