| Index: third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
|
| diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
|
| index a4764783512a1b4ae7ef8c0c1a07366a06bb4bdd..d4f25b595a2087f97f2e0247a94283e2d2539743 100644
|
| --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
|
| @@ -406,6 +406,15 @@ void ImageResourceContent::NotifyStartLoad() {
|
| content_status_ = ResourceStatus::kPending;
|
| }
|
|
|
| +void ImageResourceContent::AsyncLoadCompleted(const blink::Image* image) {
|
| + if (image_ != image)
|
| + return;
|
| + CHECK_EQ(size_available_, Image::kSizeAvailableAndLoadingAsynchronously);
|
| + size_available_ = Image::kSizeAvailable;
|
| + UpdateToLoadedContentStatus(ResourceStatus::kCached);
|
| + NotifyObservers(kShouldNotifyFinish);
|
| +}
|
| +
|
| ImageResourceContent::UpdateImageResult ImageResourceContent::UpdateImage(
|
| PassRefPtr<SharedBuffer> data,
|
| ResourceStatus status,
|
| @@ -446,6 +455,9 @@ ImageResourceContent::UpdateImageResult ImageResourceContent::UpdateImage(
|
| image_ = CreateImage();
|
| DCHECK(image_);
|
| size_available_ = image_->SetData(std::move(data), all_data_received);
|
| + DCHECK(all_data_received ||
|
| + size_available_ !=
|
| + Image::kSizeAvailableAndLoadingAsynchronously);
|
| }
|
|
|
| // Go ahead and tell our observers to try to draw if we have either
|
| @@ -469,11 +481,18 @@ ImageResourceContent::UpdateImageResult ImageResourceContent::UpdateImage(
|
| break;
|
| }
|
|
|
| + DCHECK(all_data_received ||
|
| + size_available_ != Image::kSizeAvailableAndLoadingAsynchronously);
|
| +
|
| // Notifies the observers.
|
| // It would be nice to only redraw the decoded band of the image, but with the
|
| // current design (decoding delayed until painting) that seems hard.
|
| -
|
| - if (all_data_received) {
|
| + //
|
| + // In the case of kSizeAvailableAndLoadingAsynchronously, we are waiting for
|
| + // SVG image completion, and thus we notify observers of kDoNotNotifyFinish
|
| + // here, and will notify observers of finish later in AsyncLoadCompleted().
|
| + if (all_data_received &&
|
| + size_available_ != Image::kSizeAvailableAndLoadingAsynchronously) {
|
| UpdateToLoadedContentStatus(status);
|
| NotifyObservers(kShouldNotifyFinish);
|
| } else {
|
|
|