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

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: Fix a few comments 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 // static 60 // static
61 UserImageScreen* UserImageScreen::Get(ScreenManager* manager) { 61 UserImageScreen* UserImageScreen::Get(ScreenManager* manager) {
62 return static_cast<UserImageScreen*>( 62 return static_cast<UserImageScreen*>(
63 manager->GetScreen(WizardController::kUserImageScreenName)); 63 manager->GetScreen(WizardController::kUserImageScreenName));
64 } 64 }
65 65
66 UserImageScreen::UserImageScreen(BaseScreenDelegate* base_screen_delegate, 66 UserImageScreen::UserImageScreen(BaseScreenDelegate* base_screen_delegate,
67 UserImageView* view) 67 UserImageView* view)
68 : UserImageModel(base_screen_delegate), 68 : UserImageModel(base_screen_delegate),
69 ImageRequest(
70 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)),
69 view_(view), 71 view_(view),
70 accept_photo_after_decoding_(false), 72 accept_photo_after_decoding_(false),
71 selected_image_(user_manager::User::USER_IMAGE_INVALID), 73 selected_image_(user_manager::User::USER_IMAGE_INVALID),
72 is_screen_ready_(false), 74 is_screen_ready_(false),
73 user_has_selected_image_(false) { 75 user_has_selected_image_(false) {
74 if (view_) 76 if (view_)
75 view_->Bind(*this); 77 view_->Bind(*this);
76 notification_registrar_.Add(this, 78 notification_registrar_.Add(this,
77 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, 79 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED,
78 content::NotificationService::AllSources()); 80 content::NotificationService::AllSources());
79 notification_registrar_.Add(this, 81 notification_registrar_.Add(this,
80 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, 82 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED,
81 content::NotificationService::AllSources()); 83 content::NotificationService::AllSources());
82 notification_registrar_.Add(this, 84 notification_registrar_.Add(this,
83 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, 85 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
84 content::NotificationService::AllSources()); 86 content::NotificationService::AllSources());
85 GetContextEditor().SetString(kContextKeyProfilePictureDataURL, std::string()); 87 GetContextEditor().SetString(kContextKeyProfilePictureDataURL, std::string());
86 } 88 }
87 89
88 UserImageScreen::~UserImageScreen() { 90 UserImageScreen::~UserImageScreen() {
89 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); 91 CameraPresenceNotifier::GetInstance()->RemoveObserver(this);
90 if (view_) 92 if (view_)
91 view_->Unbind(); 93 view_->Unbind();
92 if (image_decoder_.get())
93 image_decoder_->set_delegate(NULL);
94 } 94 }
95 95
96 void UserImageScreen::OnScreenReady() { 96 void UserImageScreen::OnScreenReady() {
97 is_screen_ready_ = true; 97 is_screen_ready_ = true;
98 if (!IsWaitingForSync()) 98 if (!IsWaitingForSync())
99 HideCurtain(); 99 HideCurtain();
100 } 100 }
101 101
102 void UserImageScreen::OnPhotoTaken(const std::string& raw_data) { 102 void UserImageScreen::OnPhotoTaken(const std::string& raw_data) {
103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
104 user_photo_ = gfx::ImageSkia(); 104 user_photo_ = gfx::ImageSkia();
105 if (image_decoder_.get()) 105 ImageDecoder::Cancel(this);
106 image_decoder_->set_delegate(NULL); 106 ImageDecoder::Start(this, raw_data);
107 image_decoder_ = new ImageDecoder(this, raw_data,
108 ImageDecoder::DEFAULT_CODEC);
109 scoped_refptr<base::MessageLoopProxy> task_runner =
110 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
111 image_decoder_->Start(task_runner);
112 } 107 }
113 108
114 void UserImageScreen::OnCameraPresenceCheckDone(bool is_camera_present) { 109 void UserImageScreen::OnCameraPresenceCheckDone(bool is_camera_present) {
115 GetContextEditor().SetBoolean(kContextKeyIsCameraPresent, is_camera_present); 110 GetContextEditor().SetBoolean(kContextKeyIsCameraPresent, is_camera_present);
116 } 111 }
117 112
118 void UserImageScreen::HideCurtain() { 113 void UserImageScreen::HideCurtain() {
119 if (view_) 114 if (view_)
120 view_->HideCurtain(); 115 view_->HideCurtain();
121 } 116 }
122 117
123 void UserImageScreen::OnImageDecoded(const ImageDecoder* decoder, 118 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); 119 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image);
127 if (accept_photo_after_decoding_) 120 if (accept_photo_after_decoding_)
128 OnImageAccepted(); 121 OnImageAccepted();
129 } 122 }
130 123
131 void UserImageScreen::OnDecodeImageFailed(const ImageDecoder* decoder) { 124 void UserImageScreen::OnDecodeImageFailed() {
132 NOTREACHED() << "Failed to decode PNG image from WebUI"; 125 NOTREACHED() << "Failed to decode PNG image from WebUI";
133 } 126 }
134 127
135 void UserImageScreen::OnInitialSync(bool local_image_updated) { 128 void UserImageScreen::OnInitialSync(bool local_image_updated) {
136 DCHECK(sync_timer_); 129 DCHECK(sync_timer_);
137 if (!local_image_updated) { 130 if (!local_image_updated) {
138 sync_timer_.reset(); 131 sync_timer_.reset();
139 GetSyncObserver()->RemoveObserver(this); 132 GetSyncObserver()->RemoveObserver(this);
140 if (is_screen_ready_) 133 if (is_screen_ready_)
141 HideCurtain(); 134 HideCurtain();
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 338
346 void UserImageScreen::ExitScreen() { 339 void UserImageScreen::ExitScreen() {
347 policy_registrar_.reset(); 340 policy_registrar_.reset();
348 sync_timer_.reset(); 341 sync_timer_.reset();
349 if (UserImageSyncObserver* sync_observer = GetSyncObserver()) 342 if (UserImageSyncObserver* sync_observer = GetSyncObserver())
350 sync_observer->RemoveObserver(this); 343 sync_observer->RemoveObserver(this);
351 Finish(BaseScreenDelegate::USER_IMAGE_SELECTED); 344 Finish(BaseScreenDelegate::USER_IMAGE_SELECTED);
352 } 345 }
353 346
354 } // namespace chromeos 347 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698