CanvasImageDecoder::CanvasImageDecoder( mojo::ScopedDataPipeConsumerHandle handle, PassOwnPtr<ImageDecoderCallback> callback) : callback_(callback), weak_factory_(this) { CHECK(callback_); if (!handle.is_valid()) { base::MessageLoop::current()->PostTask( FROM_HERE, base::Bind(&CanvasImageDecoder::RejectCallback, weak_factory_.GetWeakPtr())); return; } buffer_ = SharedBuffer::create(); drainer_ = adoptPtr(new mojo::common::DataPipeDrainer(this, handle.Pass())); }