Chromium Code Reviews| Index: chrome/browser/android/logo_service.cc |
| diff --git a/chrome/browser/android/logo_service.cc b/chrome/browser/android/logo_service.cc |
| index ddcb626361050d372542a332ab237ab94479e4ed..c40d3906666ce0a6e308f341cdcf9d88880f042a 100644 |
| --- a/chrome/browser/android/logo_service.cc |
| +++ b/chrome/browser/android/logo_service.cc |
| @@ -39,38 +39,34 @@ GURL GetGoogleDoodleURL(Profile* profile) { |
| class LogoDecoderDelegate : public ImageDecoder::Delegate { |
| public: |
| LogoDecoderDelegate( |
| - const scoped_refptr<ImageDecoder>& image_decoder, |
| const base::Callback<void(const SkBitmap&)>& image_decoded_callback) |
| - : image_decoder_(image_decoder), |
| - image_decoded_callback_(image_decoded_callback), |
| + : image_decoded_callback_(image_decoded_callback), |
| weak_ptr_factory_(this) { |
| // If the ImageDecoder crashes or otherwise never completes, call |
| // OnImageDecodeTimedOut() eventually to ensure that image_decoded_callback_ |
| // is run. |
| base::MessageLoopProxy::current()->PostDelayedTask( |
| - FROM_HERE, |
| - base::Bind(&LogoDecoderDelegate::OnDecodeImageFailed, |
| - weak_ptr_factory_.GetWeakPtr(), |
| - (const ImageDecoder*) NULL), |
| + FROM_HERE, base::Bind(&LogoDecoderDelegate::OnDecodeImageFailed, |
| + weak_ptr_factory_.GetWeakPtr()), |
| base::TimeDelta::FromSeconds(kDecodeLogoTimeoutSeconds)); |
| } |
| - ~LogoDecoderDelegate() override { image_decoder_->set_delegate(NULL); } |
| + ~LogoDecoderDelegate() override { |
| + ImageDecoder::GetInstance()->RemoveDelegate(this); |
|
dcheng
2015/03/19 14:25:46
I don't know that having GetInstance() everywhere
Theresa
2015/03/19 21:54:56
Done. I agree, it's not particularly helpful to ex
|
| + } |
| // ImageDecoder::Delegate: |
| - void OnImageDecoded(const ImageDecoder* decoder, |
| - const SkBitmap& decoded_image) override { |
| + void OnImageDecoded(const SkBitmap& decoded_image) override { |
| image_decoded_callback_.Run(decoded_image); |
| delete this; |
| } |
| - void OnDecodeImageFailed(const ImageDecoder* decoder) override { |
| + void OnDecodeImageFailed() override { |
| image_decoded_callback_.Run(SkBitmap()); |
| delete this; |
| } |
| private: |
| - scoped_refptr<ImageDecoder> image_decoder_; |
| base::Callback<void(const SkBitmap&)> image_decoded_callback_; |
| base::WeakPtrFactory<LogoDecoderDelegate> weak_ptr_factory_; |
| @@ -86,14 +82,11 @@ class ChromeLogoDelegate : public search_provider_logos::LogoDelegate { |
| void DecodeUntrustedImage( |
| const scoped_refptr<base::RefCountedString>& encoded_image, |
| base::Callback<void(const SkBitmap&)> image_decoded_callback) override { |
| - scoped_refptr<ImageDecoder> image_decoder = new ImageDecoder( |
| - NULL, |
| - encoded_image->data(), |
| - ImageDecoder::DEFAULT_CODEC); |
| LogoDecoderDelegate* delegate = |
| - new LogoDecoderDelegate(image_decoder, image_decoded_callback); |
| - image_decoder->set_delegate(delegate); |
| - image_decoder->Start(base::MessageLoopProxy::current()); |
| + new LogoDecoderDelegate(image_decoded_callback); |
| + ImageDecoder::GetInstance()->Start( |
| + delegate, encoded_image->data(), ImageDecoder::DEFAULT_CODEC, |
| + base::MessageLoopProxy::current(), false); |
| } |
| private: |