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

Side by Side Diff: chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc

Issue 1961183002: MD Settings: Update some Settings handlers to use new JS lifecycle management. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/ui/webui/settings/chromeos/change_picture_handler.h" 5 #include "chrome/browser/ui/webui/settings/chromeos/change_picture_handler.h"
6 6
7 #include "ash/audio/sounds.h" 7 #include "ash/audio/sounds.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 73
74 // Time histogram suffix for profile image download. 74 // Time histogram suffix for profile image download.
75 const char kProfileDownloadReason[] = "Preferences"; 75 const char kProfileDownloadReason[] = "Preferences";
76 76
77 } // namespace 77 } // namespace
78 78
79 ChangePictureHandler::ChangePictureHandler() 79 ChangePictureHandler::ChangePictureHandler()
80 : previous_image_url_(url::kAboutBlankURL), 80 : previous_image_url_(url::kAboutBlankURL),
81 previous_image_index_(user_manager::User::USER_IMAGE_INVALID), 81 previous_image_index_(user_manager::User::USER_IMAGE_INVALID),
82 camera_observer_(this) { 82 camera_observer_(this) {
83 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED,
84 content::NotificationService::AllSources());
85 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED,
86 content::NotificationService::AllSources());
87 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
88 content::NotificationService::AllSources());
89
90 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 83 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
91 media::SoundsManager* manager = media::SoundsManager::Get(); 84 media::SoundsManager* manager = media::SoundsManager::Get();
92 manager->Initialize(SOUND_OBJECT_DELETE, 85 manager->Initialize(SOUND_OBJECT_DELETE,
93 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); 86 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV));
94 manager->Initialize(SOUND_CAMERA_SNAP, 87 manager->Initialize(SOUND_CAMERA_SNAP,
95 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); 88 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV));
96 } 89 }
97 90
98 ChangePictureHandler::~ChangePictureHandler() { 91 ChangePictureHandler::~ChangePictureHandler() {
99 if (select_file_dialog_.get()) 92 if (select_file_dialog_.get())
(...skipping 12 matching lines...) Expand all
112 base::Unretained(this))); 105 base::Unretained(this)));
113 web_ui()->RegisterMessageCallback( 106 web_ui()->RegisterMessageCallback(
114 "onChangePicturePageInitialized", 107 "onChangePicturePageInitialized",
115 base::Bind(&ChangePictureHandler::HandlePageInitialized, 108 base::Bind(&ChangePictureHandler::HandlePageInitialized,
116 base::Unretained(this))); 109 base::Unretained(this)));
117 web_ui()->RegisterMessageCallback( 110 web_ui()->RegisterMessageCallback(
118 "selectImage", base::Bind(&ChangePictureHandler::HandleSelectImage, 111 "selectImage", base::Bind(&ChangePictureHandler::HandleSelectImage,
119 base::Unretained(this))); 112 base::Unretained(this)));
120 } 113 }
121 114
115 void ChangePictureHandler::OnJavascriptAllowed() {
116 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED,
117 content::NotificationService::AllSources());
118 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED,
119 content::NotificationService::AllSources());
120 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
121 content::NotificationService::AllSources());
122 }
123
124 void ChangePictureHandler::OnJavascriptDisallowed() {
125 registrar_.RemoveAll();
126 }
127
122 void ChangePictureHandler::SendDefaultImages() { 128 void ChangePictureHandler::SendDefaultImages() {
123 base::ListValue image_urls; 129 base::ListValue image_urls;
124 for (int i = default_user_image::kFirstDefaultImageIndex; 130 for (int i = default_user_image::kFirstDefaultImageIndex;
125 i < default_user_image::kDefaultImagesCount; ++i) { 131 i < default_user_image::kDefaultImagesCount; ++i) {
126 std::unique_ptr<base::DictionaryValue> image_data( 132 std::unique_ptr<base::DictionaryValue> image_data(
127 new base::DictionaryValue); 133 new base::DictionaryValue);
128 image_data->SetString("url", default_user_image::GetDefaultImageUrl(i)); 134 image_data->SetString("url", default_user_image::GetDefaultImageUrl(i));
129 image_data->SetString("author", 135 image_data->SetString("author",
130 l10n_util::GetStringUTF16( 136 l10n_util::GetStringUTF16(
131 default_user_image::kDefaultImageAuthorIDs[i])); 137 default_user_image::kDefaultImageAuthorIDs[i]));
132 image_data->SetString("website", 138 image_data->SetString("website",
133 l10n_util::GetStringUTF16( 139 l10n_util::GetStringUTF16(
134 default_user_image::kDefaultImageWebsiteIDs[i])); 140 default_user_image::kDefaultImageWebsiteIDs[i]));
135 image_data->SetString("title", 141 image_data->SetString("title",
136 default_user_image::GetDefaultImageDescription(i)); 142 default_user_image::GetDefaultImageDescription(i));
137 image_urls.Append(image_data.release()); 143 image_urls.Append(image_data.release());
138 } 144 }
139 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback", 145 CallJavascriptFunction("cr.webUIListenerCallback",
140 base::StringValue("default-images-changed"), 146 base::StringValue("default-images-changed"),
141 image_urls); 147 image_urls);
142 } 148 }
143 149
144 void ChangePictureHandler::HandleChooseFile(const base::ListValue* args) { 150 void ChangePictureHandler::HandleChooseFile(const base::ListValue* args) {
145 DCHECK(args && args->empty()); 151 DCHECK(args && args->empty());
146 select_file_dialog_ = ui::SelectFileDialog::Create( 152 select_file_dialog_ = ui::SelectFileDialog::Create(
147 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); 153 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
148 154
149 base::FilePath downloads_path; 155 base::FilePath downloads_path;
150 if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &downloads_path)) { 156 if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &downloads_path)) {
151 NOTREACHED(); 157 NOTREACHED();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 user_photo_ = gfx::ImageSkia(); 190 user_photo_ = gfx::ImageSkia();
185 user_photo_data_url_ = image_url; 191 user_photo_data_url_ = image_url;
186 192
187 ImageDecoder::Cancel(this); 193 ImageDecoder::Cancel(this);
188 ImageDecoder::Start(this, raw_data); 194 ImageDecoder::Start(this, raw_data);
189 } 195 }
190 196
191 void ChangePictureHandler::HandlePageInitialized(const base::ListValue* args) { 197 void ChangePictureHandler::HandlePageInitialized(const base::ListValue* args) {
192 DCHECK(args && args->empty()); 198 DCHECK(args && args->empty());
193 199
200 AllowJavascript();
201
194 CameraPresenceNotifier* camera = CameraPresenceNotifier::GetInstance(); 202 CameraPresenceNotifier* camera = CameraPresenceNotifier::GetInstance();
195 if (!camera_observer_.IsObserving(camera)) 203 if (!camera_observer_.IsObserving(camera))
196 camera_observer_.Add(camera); 204 camera_observer_.Add(camera);
197 205
198 SendDefaultImages(); 206 SendDefaultImages();
199 SendSelectedImage(); 207 SendSelectedImage();
200 UpdateProfileImage(); 208 UpdateProfileImage();
201 } 209 }
202 210
203 void ChangePictureHandler::SendSelectedImage() { 211 void ChangePictureHandler::SendSelectedImage() {
(...skipping 14 matching lines...) Expand all
218 break; 226 break;
219 } 227 }
220 default: { 228 default: {
221 DCHECK(previous_image_index_ >= 0 && 229 DCHECK(previous_image_index_ >= 0 &&
222 previous_image_index_ < default_user_image::kDefaultImagesCount); 230 previous_image_index_ < default_user_image::kDefaultImagesCount);
223 if (previous_image_index_ >= 231 if (previous_image_index_ >=
224 default_user_image::kFirstDefaultImageIndex) { 232 default_user_image::kFirstDefaultImageIndex) {
225 // User has image from the current set of default images. 233 // User has image from the current set of default images.
226 base::StringValue image_url( 234 base::StringValue image_url(
227 default_user_image::GetDefaultImageUrl(previous_image_index_)); 235 default_user_image::GetDefaultImageUrl(previous_image_index_));
228 web_ui()->CallJavascriptFunction( 236 CallJavascriptFunction("cr.webUIListenerCallback",
229 "cr.webUIListenerCallback", 237 base::StringValue("selected-image-changed"),
230 base::StringValue("selected-image-changed"), image_url); 238 image_url);
231 } else { 239 } else {
232 // User has an old default image, so present it in the same manner as a 240 // User has an old default image, so present it in the same manner as a
233 // previous image from file. 241 // previous image from file.
234 SendOldImage( 242 SendOldImage(
235 default_user_image::GetDefaultImageUrl(previous_image_index_)); 243 default_user_image::GetDefaultImageUrl(previous_image_index_));
236 } 244 }
237 } 245 }
238 } 246 }
239 } 247 }
240 248
241 void ChangePictureHandler::SendProfileImage(const gfx::ImageSkia& image, 249 void ChangePictureHandler::SendProfileImage(const gfx::ImageSkia& image,
242 bool should_select) { 250 bool should_select) {
243 base::StringValue data_url(webui::GetBitmapDataUrl(*image.bitmap())); 251 base::StringValue data_url(webui::GetBitmapDataUrl(*image.bitmap()));
244 base::FundamentalValue select(should_select); 252 base::FundamentalValue select(should_select);
245 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback", 253 CallJavascriptFunction("cr.webUIListenerCallback",
246 base::StringValue("profile-image-changed"), 254 base::StringValue("profile-image-changed"), data_url,
247 data_url, select); 255 select);
248 } 256 }
249 257
250 void ChangePictureHandler::UpdateProfileImage() { 258 void ChangePictureHandler::UpdateProfileImage() {
251 UserImageManager* user_image_manager = 259 UserImageManager* user_image_manager =
252 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); 260 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId());
253 // If we have a downloaded profile image and haven't sent it in 261 // If we have a downloaded profile image and haven't sent it in
254 // |SendSelectedImage|, send it now (without selecting). 262 // |SendSelectedImage|, send it now (without selecting).
255 if (previous_image_index_ != user_manager::User::USER_IMAGE_PROFILE && 263 if (previous_image_index_ != user_manager::User::USER_IMAGE_PROFILE &&
256 !user_image_manager->DownloadedProfileImage().isNull()) 264 !user_image_manager->DownloadedProfileImage().isNull())
257 SendProfileImage(user_image_manager->DownloadedProfileImage(), false); 265 SendProfileImage(user_image_manager->DownloadedProfileImage(), false);
258 266
259 user_image_manager->DownloadProfileImage(kProfileDownloadReason); 267 user_image_manager->DownloadProfileImage(kProfileDownloadReason);
260 } 268 }
261 269
262 void ChangePictureHandler::SendOldImage(const std::string& image_url) { 270 void ChangePictureHandler::SendOldImage(const std::string& image_url) {
263 previous_image_url_ = image_url; 271 previous_image_url_ = image_url;
264 base::StringValue url(image_url); 272 base::StringValue url(image_url);
265 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback", 273 CallJavascriptFunction("cr.webUIListenerCallback",
266 base::StringValue("old-image-changed"), url); 274 base::StringValue("old-image-changed"), url);
267 } 275 }
268 276
269 void ChangePictureHandler::HandleSelectImage(const base::ListValue* args) { 277 void ChangePictureHandler::HandleSelectImage(const base::ListValue* args) {
270 std::string image_url; 278 std::string image_url;
271 std::string image_type; 279 std::string image_type;
272 if (!args || args->GetSize() != 2 || !args->GetString(0, &image_url) || 280 if (!args || args->GetSize() != 2 || !args->GetString(0, &image_url) ||
273 !args->GetString(1, &image_type)) { 281 !args->GetString(1, &image_type)) {
274 NOTREACHED(); 282 NOTREACHED();
275 return; 283 return;
276 } 284 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 ChromeUserManager::Get() 358 ChromeUserManager::Get()
351 ->GetUserImageManager(GetUser()->GetAccountId()) 359 ->GetUserImageManager(GetUser()->GetAccountId())
352 ->SaveUserImage(user_manager::UserImage::CreateAndEncode(photo)); 360 ->SaveUserImage(user_manager::UserImage::CreateAndEncode(photo));
353 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", 361 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice",
354 default_user_image::kHistogramImageFromCamera, 362 default_user_image::kHistogramImageFromCamera,
355 default_user_image::kHistogramImagesCount); 363 default_user_image::kHistogramImagesCount);
356 VLOG(1) << "Selected camera photo"; 364 VLOG(1) << "Selected camera photo";
357 } 365 }
358 366
359 void ChangePictureHandler::SetCameraPresent(bool present) { 367 void ChangePictureHandler::SetCameraPresent(bool present) {
360 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback", 368 CallJavascriptFunction("cr.webUIListenerCallback",
361 base::StringValue("camera-presence-changed"), 369 base::StringValue("camera-presence-changed"),
362 base::FundamentalValue(present)); 370 base::FundamentalValue(present));
363 } 371 }
364 372
365 void ChangePictureHandler::OnCameraPresenceCheckDone(bool is_camera_present) { 373 void ChangePictureHandler::OnCameraPresenceCheckDone(bool is_camera_present) {
366 SetCameraPresent(is_camera_present); 374 SetCameraPresent(is_camera_present);
367 } 375 }
368 376
369 void ChangePictureHandler::Observe( 377 void ChangePictureHandler::Observe(
370 int type, 378 int type,
371 const content::NotificationSource& source, 379 const content::NotificationSource& source,
372 const content::NotificationDetails& details) { 380 const content::NotificationDetails& details) {
(...skipping 28 matching lines...) Expand all
401 Profile* profile = Profile::FromWebUI(web_ui()); 409 Profile* profile = Profile::FromWebUI(web_ui());
402 const user_manager::User* user = 410 const user_manager::User* user =
403 ProfileHelper::Get()->GetUserByProfile(profile); 411 ProfileHelper::Get()->GetUserByProfile(profile);
404 if (!user) 412 if (!user)
405 return user_manager::UserManager::Get()->GetActiveUser(); 413 return user_manager::UserManager::Get()->GetActiveUser();
406 return user; 414 return user;
407 } 415 }
408 416
409 } // namespace settings 417 } // namespace settings
410 } // namespace chromeos 418 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698