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

Side by Side Diff: chrome/browser/chromeos/login/screens/user_image_screen.cc

Issue 931993002: Make image_decoder a Leaky LazyInstance (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add ImageDecoder->RemoveDelegate 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/login/screens/user_image_screen.h" 5 #include "chrome/browser/chromeos/login/screens/user_image_screen.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 notification_registrar_.Add(this, 82 notification_registrar_.Add(this,
83 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, 83 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
84 content::NotificationService::AllSources()); 84 content::NotificationService::AllSources());
85 GetContextEditor().SetString(kContextKeyProfilePictureDataURL, std::string()); 85 GetContextEditor().SetString(kContextKeyProfilePictureDataURL, std::string());
86 } 86 }
87 87
88 UserImageScreen::~UserImageScreen() { 88 UserImageScreen::~UserImageScreen() {
89 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); 89 CameraPresenceNotifier::GetInstance()->RemoveObserver(this);
90 if (view_) 90 if (view_)
91 view_->Unbind(); 91 view_->Unbind();
92 if (image_decoder_.get()) 92 ImageDecoder::GetInstance()->RemoveDelegate(this);
93 image_decoder_->set_delegate(NULL);
94 } 93 }
95 94
96 void UserImageScreen::OnScreenReady() { 95 void UserImageScreen::OnScreenReady() {
97 is_screen_ready_ = true; 96 is_screen_ready_ = true;
98 if (!IsWaitingForSync()) 97 if (!IsWaitingForSync())
99 HideCurtain(); 98 HideCurtain();
100 } 99 }
101 100
102 void UserImageScreen::OnPhotoTaken(const std::string& raw_data) { 101 void UserImageScreen::OnPhotoTaken(const std::string& raw_data) {
103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
104 user_photo_ = gfx::ImageSkia(); 103 user_photo_ = gfx::ImageSkia();
105 if (image_decoder_.get())
106 image_decoder_->set_delegate(NULL);
107 image_decoder_ = new ImageDecoder(this, raw_data,
108 ImageDecoder::DEFAULT_CODEC);
109 scoped_refptr<base::MessageLoopProxy> task_runner = 104 scoped_refptr<base::MessageLoopProxy> task_runner =
110 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); 105 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
111 image_decoder_->Start(task_runner); 106 ImageDecoder::GetInstance()->RemoveDelegate(this);
107 ImageDecoder::GetInstance()->Start(
108 this, raw_data, ImageDecoder::DEFAULT_CODEC, task_runner, false);
112 } 109 }
113 110
114 void UserImageScreen::OnCameraPresenceCheckDone(bool is_camera_present) { 111 void UserImageScreen::OnCameraPresenceCheckDone(bool is_camera_present) {
115 GetContextEditor().SetBoolean(kContextKeyIsCameraPresent, is_camera_present); 112 GetContextEditor().SetBoolean(kContextKeyIsCameraPresent, is_camera_present);
116 } 113 }
117 114
118 void UserImageScreen::HideCurtain() { 115 void UserImageScreen::HideCurtain() {
119 if (view_) 116 if (view_)
120 view_->HideCurtain(); 117 view_->HideCurtain();
121 } 118 }
122 119
123 void UserImageScreen::OnImageDecoded(const ImageDecoder* decoder, 120 void UserImageScreen::OnImageDecoded(const SkBitmap& decoded_image) {
124 const SkBitmap& decoded_image) {
125 DCHECK_EQ(image_decoder_.get(), decoder);
126 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); 121 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image);
127 if (accept_photo_after_decoding_) 122 if (accept_photo_after_decoding_)
128 OnImageAccepted(); 123 OnImageAccepted();
129 } 124 }
130 125
131 void UserImageScreen::OnDecodeImageFailed(const ImageDecoder* decoder) { 126 void UserImageScreen::OnDecodeImageFailed() {
132 NOTREACHED() << "Failed to decode PNG image from WebUI"; 127 NOTREACHED() << "Failed to decode PNG image from WebUI";
133 } 128 }
134 129
135 void UserImageScreen::OnInitialSync(bool local_image_updated) { 130 void UserImageScreen::OnInitialSync(bool local_image_updated) {
136 DCHECK(sync_timer_); 131 DCHECK(sync_timer_);
137 if (!local_image_updated) { 132 if (!local_image_updated) {
138 sync_timer_.reset(); 133 sync_timer_.reset();
139 GetSyncObserver()->RemoveObserver(this); 134 GetSyncObserver()->RemoveObserver(this);
140 if (is_screen_ready_) 135 if (is_screen_ready_)
141 HideCurtain(); 136 HideCurtain();
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 340
346 void UserImageScreen::ExitScreen() { 341 void UserImageScreen::ExitScreen() {
347 policy_registrar_.reset(); 342 policy_registrar_.reset();
348 sync_timer_.reset(); 343 sync_timer_.reset();
349 if (UserImageSyncObserver* sync_observer = GetSyncObserver()) 344 if (UserImageSyncObserver* sync_observer = GetSyncObserver())
350 sync_observer->RemoveObserver(this); 345 sync_observer->RemoveObserver(this);
351 Finish(BaseScreenDelegate::USER_IMAGE_SELECTED); 346 Finish(BaseScreenDelegate::USER_IMAGE_SELECTED);
352 } 347 }
353 348
354 } // namespace chromeos 349 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698