Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Unified Diff: sky/engine/core/loader/CanvasImageDecoder.cpp

Issue 1170413002: Make Sky not crash when an image 404s. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sky/sdk/lib/framework/net/image_cache.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/engine/core/loader/CanvasImageDecoder.cpp
diff --git a/sky/engine/core/loader/CanvasImageDecoder.cpp b/sky/engine/core/loader/CanvasImageDecoder.cpp
index 3776f95a972e681066afd7c1d0205c78184ff7fe..6b8eed09ab222b3d461d3ae8fb5546069fc9f3f3 100644
--- a/sky/engine/core/loader/CanvasImageDecoder.cpp
+++ b/sky/engine/core/loader/CanvasImageDecoder.cpp
@@ -5,7 +5,6 @@
#include "sky/engine/config.h"
#include "sky/engine/core/loader/CanvasImageDecoder.h"
#include "sky/engine/core/painting/CanvasImage.h"
-#include "sky/engine/core/script/dom_dart_state.h"
#include "sky/engine/platform/SharedBuffer.h"
#include "sky/engine/platform/image-decoders/ImageDecoder.h"
@@ -18,8 +17,11 @@ PassRefPtr<CanvasImageDecoder> CanvasImageDecoder::create(
return adoptRef(new CanvasImageDecoder(handle.Pass(), callback));
}
-CanvasImageDecoder::CanvasImageDecoder(mojo::ScopedDataPipeConsumerHandle handle, PassOwnPtr<ImageDecoderCallback> callback)
+CanvasImageDecoder::CanvasImageDecoder(
+ mojo::ScopedDataPipeConsumerHandle handle,
+ PassOwnPtr<ImageDecoderCallback> callback)
: callback_(callback) {
+ CHECK(callback_);
buffer_ = SharedBuffer::create();
drainer_ = adoptPtr(new mojo::common::DataPipeDrainer(this, handle.Pass()));
}
@@ -35,14 +37,21 @@ void CanvasImageDecoder::OnDataComplete() {
OwnPtr<ImageDecoder> decoder =
ImageDecoder::create(*buffer_.get(), ImageSource::AlphaPremultiplied,
ImageSource::GammaAndColorProfileIgnored);
+ // decoder can be null if the buffer we was empty and we couldn't even guess
+ // what type of image to decode.
+ if (!decoder) {
+ callback_->handleEvent(nullptr);
+ return;
+ }
decoder->setData(buffer_.get(), true);
- if (!decoder->failed() && decoder->frameCount() > 0) {
- RefPtr<CanvasImage> resultImage = CanvasImage::create();
- resultImage->setBitmap(decoder->frameBufferAtIndex(0)->getSkBitmap());
- callback_->handleEvent(resultImage.get());
- } else {
+ if (decoder->failed() || decoder->frameCount() == 0) {
callback_->handleEvent(nullptr);
+ return;
}
+
+ RefPtr<CanvasImage> resultImage = CanvasImage::create();
+ resultImage->setBitmap(decoder->frameBufferAtIndex(0)->getSkBitmap());
+ callback_->handleEvent(resultImage.get());
}
} // namespace blink
« no previous file with comments | « no previous file | sky/sdk/lib/framework/net/image_cache.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698