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

Unified Diff: chrome/browser/chromeos/app_mode/kiosk_app_data.cc

Issue 931993002: Make image_decoder a Leaky LazyInstance (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Get rid of IDMap Created 5 years, 9 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
Index: chrome/browser/chromeos/app_mode/kiosk_app_data.cc
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_data.cc b/chrome/browser/chromeos/app_mode/kiosk_app_data.cc
index af29edac943f459ecd0bcea887a279dc0328157e..c654c3394ac8d88eb3b9a9c83f7f09e039a3e3d9 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_data.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_data.cc
@@ -191,7 +191,7 @@ class KioskAppData::CrxLoader : public extensions::SandboxedUnpackerClient {
// KioskAppData::IconLoader
// Loads locally stored icon data and decode it.
-class KioskAppData::IconLoader : public ImageDecoder::Delegate {
+class KioskAppData::IconLoader {
public:
enum LoadResult {
SUCCESS,
@@ -219,7 +219,30 @@ class KioskAppData::IconLoader : public ImageDecoder::Delegate {
private:
friend class base::RefCountedThreadSafe<IconLoader>;
- ~IconLoader() override {}
+ ~IconLoader() {}
+
+ class IconImageRequest : public ImageDecoder::ImageRequest {
+ public:
+ IconImageRequest(const scoped_refptr<base::SequencedTaskRunner>& t,
dcheng 2015/03/23 11:52:08 FWIW, some reviewers might prefer this be named a
Theresa 2015/03/23 17:33:09 Done.
+ IconLoader* icon_loader)
+ : ImageRequest(t), icon_loader_(icon_loader) {}
+
+ void OnImageDecoded(const SkBitmap& decoded_image) override {
+ icon_loader_->icon_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image);
+ icon_loader_->icon_.MakeThreadSafe();
+ icon_loader_->ReportResultOnBlockingPool(SUCCESS);
+ delete this;
+ }
+
+ void OnDecodeImageFailed() override {
+ icon_loader_->ReportResultOnBlockingPool(FAILED_TO_DECODE);
+ delete this;
+ }
+
+ private:
+ ~IconImageRequest() override {}
+ IconLoader* icon_loader_;
+ };
// Loads the icon from locally stored |icon_path_| on the blocking pool
void LoadOnBlockingPool() {
@@ -232,9 +255,9 @@ class KioskAppData::IconLoader : public ImageDecoder::Delegate {
}
raw_icon_ = base::RefCountedString::TakeString(&data);
- scoped_refptr<ImageDecoder> image_decoder = new ImageDecoder(
- this, raw_icon_->data(), ImageDecoder::DEFAULT_CODEC);
- image_decoder->Start(task_runner_);
+ IconImageRequest* image_request = new IconImageRequest(task_runner_, this);
+ ImageDecoder::Start(image_request, raw_icon_->data(),
+ ImageDecoder::DEFAULT_CODEC, false);
}
void ReportResultOnBlockingPool(LoadResult result) {
@@ -265,18 +288,6 @@ class KioskAppData::IconLoader : public ImageDecoder::Delegate {
delete this;
}
- // ImageDecoder::Delegate overrides:
- void OnImageDecoded(const ImageDecoder* decoder,
- const SkBitmap& decoded_image) override {
- icon_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image);
- icon_.MakeThreadSafe();
- ReportResultOnBlockingPool(SUCCESS);
- }
-
- void OnDecodeImageFailed(const ImageDecoder* decoder) override {
- ReportResultOnBlockingPool(FAILED_TO_DECODE);
- }
-
base::WeakPtr<KioskAppData> client_;
base::FilePath icon_path_;
@@ -307,7 +318,6 @@ class KioskAppData::WebstoreDataParser
new extensions::WebstoreInstallHelper(this,
app_id,
manifest,
- "", // No icon data.
icon_url,
context_getter);
webstore_helper->Start();

Powered by Google App Engine
This is Rietveld 408576698