Commit b23b52d6 authored by Collin Baker's avatar Collin Baker Committed by Chromium LUCI CQ

Fix DCHECK on attempt to crop blank thumbnail

ThumbnailImage::CropPreviewImage relies on the supplied thumbnail
having non-null image data. A null thumbnail was passed when ClearData
was called.

It is not necessary to crop a null thumbnail, so avoid calling it when
the thumbnail is null.

Fixed: 1168483
Change-Id: I89de21fb69f49069c44db54f4e82f80c3afa7da8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2641156Reviewed-by: default avatarDana Fried <dfried@chromium.org>
Commit-Queue: Dana Fried <dfried@chromium.org>
Auto-Submit: Collin Baker <collinbaker@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845590}
parent 8f31d976
......@@ -181,9 +181,12 @@ void ThumbnailImage::NotifyUncompressedDataObservers(base::Token thumbnail_id,
for (Subscription* subscription : subscribers_) {
auto size_hint = subscription->size_hint_;
if (subscription->uncompressed_image_callback_)
subscription->uncompressed_image_callback_.Run(
size_hint ? CropPreviewImage(image, *size_hint) : image);
if (subscription->uncompressed_image_callback_) {
auto cropped_image = size_hint && !image.isNull()
? CropPreviewImage(image, *size_hint)
: image;
subscription->uncompressed_image_callback_.Run(cropped_image);
}
}
}
......
......@@ -368,3 +368,29 @@ TEST_F(ThumbnailImageTest, UnsubscribeAfterDelegateDestroyed) {
delegate.reset();
subscription.reset();
}
// Ensures subscribers with a size hint get notified correctly on
// thumbnail clear. Regression test for crbug.com/1168483 where
// CropPreviewImage was called on blank thumbnails resulting in a
// DCHECK.
TEST_F(ThumbnailImageTest, DoesNotCropBlankThumbnails) {
auto image = base::MakeRefCounted<ThumbnailImage>(this);
std::unique_ptr<Subscription> subscription = image->Subscribe();
subscription->SetSizeHint(
gfx::Size(kTestBitmapWidth / 2, kTestBitmapHeight / 2));
CallbackWaiter uncompressed_image_waiter;
subscription->SetUncompressedImageCallback(
IgnoreArgs<gfx::ImageSkia>(uncompressed_image_waiter.callback()));
SkBitmap bitmap = CreateBitmap(kTestBitmapWidth, kTestBitmapHeight);
image->AssignSkBitmap(bitmap, base::nullopt);
uncompressed_image_waiter.Wait();
EXPECT_TRUE(uncompressed_image_waiter.called());
uncompressed_image_waiter.Reset();
image->ClearData();
uncompressed_image_waiter.Wait();
EXPECT_TRUE(uncompressed_image_waiter.called());
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment