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: |