OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/options/chromeos/change_picture_options_handle
r.h" | 5 #include "chrome/browser/ui/webui/options/chromeos/change_picture_options_handle
r.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" |
11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
15 #include "base/values.h" | 15 #include "base/values.h" |
16 #include "chrome/browser/chrome_notification_types.h" | 16 #include "chrome/browser/chrome_notification_types.h" |
17 #include "chrome/browser/chromeos/camera_presence_notifier.h" | 17 #include "chrome/browser/chromeos/camera_presence_notifier.h" |
18 #include "chrome/browser/chromeos/login/users/avatar/user_image_manager.h" | 18 #include "chrome/browser/chromeos/login/users/avatar/user_image_manager.h" |
19 #include "chrome/browser/chromeos/login/users/user_manager.h" | 19 #include "chrome/browser/chromeos/login/users/user_manager.h" |
20 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 20 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
21 #include "chrome/browser/ui/browser_finder.h" | 21 #include "chrome/browser/ui/browser_finder.h" |
22 #include "chrome/browser/ui/browser_window.h" | 22 #include "chrome/browser/ui/browser_window.h" |
23 #include "chrome/browser/ui/chrome_select_file_policy.h" | 23 #include "chrome/browser/ui/chrome_select_file_policy.h" |
24 #include "chrome/common/chrome_paths.h" | 24 #include "chrome/common/chrome_paths.h" |
25 #include "chrome/common/chrome_switches.h" | 25 #include "chrome/common/chrome_switches.h" |
26 #include "chrome/common/url_constants.h" | 26 #include "chrome/common/url_constants.h" |
27 #include "chromeos/audio/chromeos_sounds.h" | 27 #include "chromeos/audio/chromeos_sounds.h" |
| 28 #include "components/user_manager/user.h" |
28 #include "components/user_manager/user_image/default_user_images.h" | 29 #include "components/user_manager/user_image/default_user_images.h" |
29 #include "components/user_manager/user_image/user_image.h" | 30 #include "components/user_manager/user_image/user_image.h" |
30 #include "content/public/browser/browser_thread.h" | 31 #include "content/public/browser/browser_thread.h" |
31 #include "content/public/browser/notification_service.h" | 32 #include "content/public/browser/notification_service.h" |
32 #include "content/public/browser/web_ui.h" | 33 #include "content/public/browser/web_ui.h" |
33 #include "content/public/common/url_constants.h" | 34 #include "content/public/common/url_constants.h" |
34 #include "grit/browser_resources.h" | 35 #include "grit/browser_resources.h" |
35 #include "grit/generated_resources.h" | 36 #include "grit/generated_resources.h" |
36 #include "grit/theme_resources.h" | 37 #include "grit/theme_resources.h" |
37 #include "net/base/data_url.h" | 38 #include "net/base/data_url.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 return file_type_info; | 71 return file_type_info; |
71 } | 72 } |
72 | 73 |
73 // Time histogram suffix for profile image download. | 74 // Time histogram suffix for profile image download. |
74 const char kProfileDownloadReason[] = "Preferences"; | 75 const char kProfileDownloadReason[] = "Preferences"; |
75 | 76 |
76 } // namespace | 77 } // namespace |
77 | 78 |
78 ChangePictureOptionsHandler::ChangePictureOptionsHandler() | 79 ChangePictureOptionsHandler::ChangePictureOptionsHandler() |
79 : previous_image_url_(url::kAboutBlankURL), | 80 : previous_image_url_(url::kAboutBlankURL), |
80 previous_image_index_(User::kInvalidImageIndex) { | 81 previous_image_index_(user_manager::User::USER_IMAGE_INVALID) { |
81 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, | 82 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, |
82 content::NotificationService::AllSources()); | 83 content::NotificationService::AllSources()); |
83 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, | 84 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, |
84 content::NotificationService::AllSources()); | 85 content::NotificationService::AllSources()); |
85 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, | 86 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
86 content::NotificationService::AllSources()); | 87 content::NotificationService::AllSources()); |
87 | 88 |
88 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 89 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
89 media::SoundsManager* manager = media::SoundsManager::Get(); | 90 media::SoundsManager* manager = media::SoundsManager::Get(); |
90 manager->Initialize(SOUND_OBJECT_DELETE, | 91 manager->Initialize(SOUND_OBJECT_DELETE, |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 UpdateProfileImage(); | 261 UpdateProfileImage(); |
261 CameraPresenceNotifier::GetInstance()->AddObserver(this); | 262 CameraPresenceNotifier::GetInstance()->AddObserver(this); |
262 } | 263 } |
263 | 264 |
264 void ChangePictureOptionsHandler::HandlePageHidden( | 265 void ChangePictureOptionsHandler::HandlePageHidden( |
265 const base::ListValue* args) { | 266 const base::ListValue* args) { |
266 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); | 267 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); |
267 } | 268 } |
268 | 269 |
269 void ChangePictureOptionsHandler::SendSelectedImage() { | 270 void ChangePictureOptionsHandler::SendSelectedImage() { |
270 const User* user = GetUser(); | 271 const user_manager::User* user = GetUser(); |
271 DCHECK(!user->email().empty()); | 272 DCHECK(!user->email().empty()); |
272 | 273 |
273 previous_image_index_ = user->image_index(); | 274 previous_image_index_ = user->image_index(); |
274 switch (previous_image_index_) { | 275 switch (previous_image_index_) { |
275 case User::kExternalImageIndex: { | 276 case user_manager::User::USER_IMAGE_EXTERNAL: { |
276 // User has image from camera/file, record it and add to the image list. | 277 // User has image from camera/file, record it and add to the image list. |
277 previous_image_ = user->GetImage(); | 278 previous_image_ = user->GetImage(); |
278 SendOldImage(webui::GetBitmapDataUrl(*previous_image_.bitmap())); | 279 SendOldImage(webui::GetBitmapDataUrl(*previous_image_.bitmap())); |
279 break; | 280 break; |
280 } | 281 } |
281 case User::kProfileImageIndex: { | 282 case user_manager::User::USER_IMAGE_PROFILE: { |
282 // User has his/her Profile image as the current image. | 283 // User has his/her Profile image as the current image. |
283 SendProfileImage(user->GetImage(), true); | 284 SendProfileImage(user->GetImage(), true); |
284 break; | 285 break; |
285 } | 286 } |
286 default: { | 287 default: { |
287 DCHECK(previous_image_index_ >= 0 && | 288 DCHECK(previous_image_index_ >= 0 && |
288 previous_image_index_ < user_manager::kDefaultImagesCount); | 289 previous_image_index_ < user_manager::kDefaultImagesCount); |
289 if (previous_image_index_ >= user_manager::kFirstDefaultImageIndex) { | 290 if (previous_image_index_ >= user_manager::kFirstDefaultImageIndex) { |
290 // User has image from the current set of default images. | 291 // User has image from the current set of default images. |
291 base::StringValue image_url( | 292 base::StringValue image_url( |
(...skipping 15 matching lines...) Expand all Loading... |
307 base::FundamentalValue select(should_select); | 308 base::FundamentalValue select(should_select); |
308 web_ui()->CallJavascriptFunction("ChangePictureOptions.setProfileImage", | 309 web_ui()->CallJavascriptFunction("ChangePictureOptions.setProfileImage", |
309 data_url, select); | 310 data_url, select); |
310 } | 311 } |
311 | 312 |
312 void ChangePictureOptionsHandler::UpdateProfileImage() { | 313 void ChangePictureOptionsHandler::UpdateProfileImage() { |
313 UserImageManager* user_image_manager = | 314 UserImageManager* user_image_manager = |
314 UserManager::Get()->GetUserImageManager(GetUser()->email()); | 315 UserManager::Get()->GetUserImageManager(GetUser()->email()); |
315 // If we have a downloaded profile image and haven't sent it in | 316 // If we have a downloaded profile image and haven't sent it in |
316 // |SendSelectedImage|, send it now (without selecting). | 317 // |SendSelectedImage|, send it now (without selecting). |
317 if (previous_image_index_ != User::kProfileImageIndex && | 318 if (previous_image_index_ != user_manager::User::USER_IMAGE_PROFILE && |
318 !user_image_manager->DownloadedProfileImage().isNull()) | 319 !user_image_manager->DownloadedProfileImage().isNull()) |
319 SendProfileImage(user_image_manager->DownloadedProfileImage(), false); | 320 SendProfileImage(user_image_manager->DownloadedProfileImage(), false); |
320 | 321 |
321 user_image_manager->DownloadProfileImage(kProfileDownloadReason); | 322 user_image_manager->DownloadProfileImage(kProfileDownloadReason); |
322 } | 323 } |
323 | 324 |
324 void ChangePictureOptionsHandler::SendOldImage(const std::string& image_url) { | 325 void ChangePictureOptionsHandler::SendOldImage(const std::string& image_url) { |
325 previous_image_url_ = image_url; | 326 previous_image_url_ = image_url; |
326 base::StringValue url(image_url); | 327 base::StringValue url(image_url); |
327 web_ui()->CallJavascriptFunction("ChangePictureOptions.setOldImage", url); | 328 web_ui()->CallJavascriptFunction("ChangePictureOptions.setOldImage", url); |
328 } | 329 } |
329 | 330 |
330 void ChangePictureOptionsHandler::HandleSelectImage( | 331 void ChangePictureOptionsHandler::HandleSelectImage( |
331 const base::ListValue* args) { | 332 const base::ListValue* args) { |
332 std::string image_url; | 333 std::string image_url; |
333 std::string image_type; | 334 std::string image_type; |
334 if (!args || | 335 if (!args || |
335 args->GetSize() != 2 || | 336 args->GetSize() != 2 || |
336 !args->GetString(0, &image_url) || | 337 !args->GetString(0, &image_url) || |
337 !args->GetString(1, &image_type)) { | 338 !args->GetString(1, &image_type)) { |
338 NOTREACHED(); | 339 NOTREACHED(); |
339 return; | 340 return; |
340 } | 341 } |
341 DCHECK(!image_url.empty()); | 342 DCHECK(!image_url.empty()); |
342 DCHECK(!image_type.empty()); | 343 DCHECK(!image_type.empty()); |
343 | 344 |
344 UserImageManager* user_image_manager = | 345 UserImageManager* user_image_manager = |
345 UserManager::Get()->GetUserImageManager(GetUser()->email()); | 346 UserManager::Get()->GetUserImageManager(GetUser()->email()); |
346 int image_index = User::kInvalidImageIndex; | 347 int image_index = user_manager::User::USER_IMAGE_INVALID; |
347 bool waiting_for_camera_photo = false; | 348 bool waiting_for_camera_photo = false; |
348 | 349 |
349 if (image_type == "old") { | 350 if (image_type == "old") { |
350 // Previous image (from camera or manually uploaded) re-selected. | 351 // Previous image (from camera or manually uploaded) re-selected. |
351 DCHECK(!previous_image_.isNull()); | 352 DCHECK(!previous_image_.isNull()); |
352 user_image_manager->SaveUserImage( | 353 user_image_manager->SaveUserImage( |
353 user_manager::UserImage::CreateAndEncode(previous_image_)); | 354 user_manager::UserImage::CreateAndEncode(previous_image_)); |
354 | 355 |
355 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 356 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
356 user_manager::kHistogramImageOld, | 357 user_manager::kHistogramImageOld, |
(...skipping 15 matching lines...) Expand all Loading... |
372 DCHECK(image_decoder_.get()); | 373 DCHECK(image_decoder_.get()); |
373 waiting_for_camera_photo = true; | 374 waiting_for_camera_photo = true; |
374 VLOG(1) << "Still waiting for camera image to decode"; | 375 VLOG(1) << "Still waiting for camera image to decode"; |
375 } else { | 376 } else { |
376 SetImageFromCamera(user_photo_); | 377 SetImageFromCamera(user_photo_); |
377 } | 378 } |
378 } else if (image_type == "profile") { | 379 } else if (image_type == "profile") { |
379 // Profile image selected. Could be previous (old) user image. | 380 // Profile image selected. Could be previous (old) user image. |
380 user_image_manager->SaveUserImageFromProfileImage(); | 381 user_image_manager->SaveUserImageFromProfileImage(); |
381 | 382 |
382 if (previous_image_index_ == User::kProfileImageIndex) { | 383 if (previous_image_index_ == user_manager::User::USER_IMAGE_PROFILE) { |
383 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 384 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
384 user_manager::kHistogramImageOld, | 385 user_manager::kHistogramImageOld, |
385 user_manager::kHistogramImagesCount); | 386 user_manager::kHistogramImagesCount); |
386 VLOG(1) << "Selected old (profile) user image"; | 387 VLOG(1) << "Selected old (profile) user image"; |
387 } else { | 388 } else { |
388 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 389 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
389 user_manager::kHistogramImageFromProfile, | 390 user_manager::kHistogramImageFromProfile, |
390 user_manager::kHistogramImagesCount); | 391 user_manager::kHistogramImagesCount); |
391 VLOG(1) << "Selected profile image"; | 392 VLOG(1) << "Selected profile image"; |
392 } | 393 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 void ChangePictureOptionsHandler::Observe( | 438 void ChangePictureOptionsHandler::Observe( |
438 int type, | 439 int type, |
439 const content::NotificationSource& source, | 440 const content::NotificationSource& source, |
440 const content::NotificationDetails& details) { | 441 const content::NotificationDetails& details) { |
441 if (type == chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED) { | 442 if (type == chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED) { |
442 // User profile image has been updated. | 443 // User profile image has been updated. |
443 SendProfileImage(*content::Details<const gfx::ImageSkia>(details).ptr(), | 444 SendProfileImage(*content::Details<const gfx::ImageSkia>(details).ptr(), |
444 false); | 445 false); |
445 } else if (type == chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED) { | 446 } else if (type == chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED) { |
446 // Not initialized yet. | 447 // Not initialized yet. |
447 if (previous_image_index_ == User::kInvalidImageIndex) | 448 if (previous_image_index_ == user_manager::User::USER_IMAGE_INVALID) |
448 return; | 449 return; |
449 SendSelectedImage(); | 450 SendSelectedImage(); |
450 } | 451 } |
451 } | 452 } |
452 | 453 |
453 gfx::NativeWindow ChangePictureOptionsHandler::GetBrowserWindow() const { | 454 gfx::NativeWindow ChangePictureOptionsHandler::GetBrowserWindow() const { |
454 Browser* browser = | 455 Browser* browser = |
455 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); | 456 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); |
456 return browser->window()->GetNativeWindow(); | 457 return browser->window()->GetNativeWindow(); |
457 } | 458 } |
458 | 459 |
459 void ChangePictureOptionsHandler::OnImageDecoded( | 460 void ChangePictureOptionsHandler::OnImageDecoded( |
460 const ImageDecoder* decoder, | 461 const ImageDecoder* decoder, |
461 const SkBitmap& decoded_image) { | 462 const SkBitmap& decoded_image) { |
462 DCHECK_EQ(image_decoder_.get(), decoder); | 463 DCHECK_EQ(image_decoder_.get(), decoder); |
463 image_decoder_ = NULL; | 464 image_decoder_ = NULL; |
464 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); | 465 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); |
465 SetImageFromCamera(user_photo_); | 466 SetImageFromCamera(user_photo_); |
466 } | 467 } |
467 | 468 |
468 void ChangePictureOptionsHandler::OnDecodeImageFailed( | 469 void ChangePictureOptionsHandler::OnDecodeImageFailed( |
469 const ImageDecoder* decoder) { | 470 const ImageDecoder* decoder) { |
470 NOTREACHED() << "Failed to decode PNG image from WebUI"; | 471 NOTREACHED() << "Failed to decode PNG image from WebUI"; |
471 } | 472 } |
472 | 473 |
473 User* ChangePictureOptionsHandler::GetUser() const { | 474 user_manager::User* ChangePictureOptionsHandler::GetUser() const { |
474 Profile* profile = Profile::FromWebUI(web_ui()); | 475 Profile* profile = Profile::FromWebUI(web_ui()); |
475 User* user = ProfileHelper::Get()->GetUserByProfile(profile); | 476 user_manager::User* user = ProfileHelper::Get()->GetUserByProfile(profile); |
476 if (!user) | 477 if (!user) |
477 return UserManager::Get()->GetActiveUser(); | 478 return UserManager::Get()->GetActiveUser(); |
478 return user; | 479 return user; |
479 } | 480 } |
480 | 481 |
481 } // namespace options | 482 } // namespace options |
482 } // namespace chromeos | 483 } // namespace chromeos |
OLD | NEW |