| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |