| OLD | NEW |
| 1 // Copyright (c) 2013 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/options/chromeos/change_picture_options_handle
r.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" |
| 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" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 38 #include "net/base/data_url.h" | 38 #include "net/base/data_url.h" |
| 39 #include "ui/base/l10n/l10n_util.h" | 39 #include "ui/base/l10n/l10n_util.h" |
| 40 #include "ui/base/resource/resource_bundle.h" | 40 #include "ui/base/resource/resource_bundle.h" |
| 41 #include "ui/base/webui/web_ui_util.h" | 41 #include "ui/base/webui/web_ui_util.h" |
| 42 #include "ui/views/widget/widget.h" | 42 #include "ui/views/widget/widget.h" |
| 43 #include "url/gurl.h" | 43 #include "url/gurl.h" |
| 44 | 44 |
| 45 using content::BrowserThread; | 45 using content::BrowserThread; |
| 46 | 46 |
| 47 namespace chromeos { | 47 namespace chromeos { |
| 48 namespace options { | 48 namespace settings { |
| 49 | 49 |
| 50 namespace { | 50 namespace { |
| 51 | 51 |
| 52 // Returns info about extensions for files we support as user images. | 52 // Returns info about extensions for files we support as user images. |
| 53 ui::SelectFileDialog::FileTypeInfo GetUserImageFileTypeInfo() { | 53 ui::SelectFileDialog::FileTypeInfo GetUserImageFileTypeInfo() { |
| 54 ui::SelectFileDialog::FileTypeInfo file_type_info; | 54 ui::SelectFileDialog::FileTypeInfo file_type_info; |
| 55 file_type_info.extensions.resize(1); | 55 file_type_info.extensions.resize(1); |
| 56 | 56 |
| 57 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("bmp")); | 57 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("bmp")); |
| 58 | 58 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 69 l10n_util::GetStringUTF16(IDS_IMAGE_FILES); | 69 l10n_util::GetStringUTF16(IDS_IMAGE_FILES); |
| 70 | 70 |
| 71 return file_type_info; | 71 return file_type_info; |
| 72 } | 72 } |
| 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 ChangePictureOptionsHandler::ChangePictureOptionsHandler() | 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 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, | 83 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, |
| 83 content::NotificationService::AllSources()); | 84 content::NotificationService::AllSources()); |
| 84 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, | 85 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, |
| 85 content::NotificationService::AllSources()); | 86 content::NotificationService::AllSources()); |
| 86 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, | 87 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
| 87 content::NotificationService::AllSources()); | 88 content::NotificationService::AllSources()); |
| 88 | 89 |
| 89 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 90 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 90 media::SoundsManager* manager = media::SoundsManager::Get(); | 91 media::SoundsManager* manager = media::SoundsManager::Get(); |
| 91 manager->Initialize(SOUND_OBJECT_DELETE, | 92 manager->Initialize(SOUND_OBJECT_DELETE, |
| 92 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); | 93 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); |
| 93 manager->Initialize(SOUND_CAMERA_SNAP, | 94 manager->Initialize(SOUND_CAMERA_SNAP, |
| 94 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); | 95 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); |
| 95 } | 96 } |
| 96 | 97 |
| 97 ChangePictureOptionsHandler::~ChangePictureOptionsHandler() { | 98 ChangePictureHandler::~ChangePictureHandler() { |
| 98 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); | |
| 99 if (select_file_dialog_.get()) | 99 if (select_file_dialog_.get()) |
| 100 select_file_dialog_->ListenerDestroyed(); | 100 select_file_dialog_->ListenerDestroyed(); |
| 101 } | 101 } |
| 102 | 102 |
| 103 void ChangePictureOptionsHandler::GetLocalizedValues( | 103 void ChangePictureHandler::RegisterMessages() { |
| 104 base::DictionaryValue* localized_strings) { | 104 web_ui()->RegisterMessageCallback( |
| 105 DCHECK(localized_strings); | 105 "chooseFile", base::Bind(&ChangePictureHandler::HandleChooseFile, |
| 106 localized_strings->SetString("changePicturePage", | 106 base::Unretained(this))); |
| 107 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TITLE)); | 107 web_ui()->RegisterMessageCallback( |
| 108 localized_strings->SetString("changePicturePageDescription", | 108 "takePhoto", base::Bind(&ChangePictureHandler::HandleTakePhoto, |
| 109 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT)); | 109 base::Unretained(this))); |
| 110 localized_strings->SetString("takePhoto", | 110 web_ui()->RegisterMessageCallback( |
| 111 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_TAKE_PHOTO)); | 111 "photoTaken", base::Bind(&ChangePictureHandler::HandlePhotoTaken, |
| 112 localized_strings->SetString("discardPhoto", | 112 base::Unretained(this))); |
| 113 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DISCARD_PHOTO)); | 113 web_ui()->RegisterMessageCallback( |
| 114 localized_strings->SetString("flipPhoto", | 114 "discardPhoto", base::Bind(&ChangePictureHandler::HandleDiscardPhoto, |
| 115 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_FLIP_PHOTO)); | 115 base::Unretained(this))); |
| 116 localized_strings->SetString("chooseFile", | 116 web_ui()->RegisterMessageCallback( |
| 117 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_CHOOSE_FILE)); | 117 "onChangePicturePageInitialized", |
| 118 localized_strings->SetString("profilePhoto", | 118 base::Bind(&ChangePictureHandler::HandlePageInitialized, |
| 119 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_PROFILE_PHOTO)); | 119 base::Unretained(this))); |
| 120 localized_strings->SetString("profilePhotoLoading", | 120 web_ui()->RegisterMessageCallback( |
| 121 l10n_util::GetStringUTF16( | 121 "selectImage", base::Bind(&ChangePictureHandler::HandleSelectImage, |
| 122 IDS_OPTIONS_CHANGE_PICTURE_PROFILE_LOADING_PHOTO)); | 122 base::Unretained(this))); |
| 123 localized_strings->SetString("previewAltText", | |
| 124 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_PREVIEW_ALT)); | |
| 125 localized_strings->SetString("authorCredit", | |
| 126 l10n_util::GetStringUTF16(IDS_OPTIONS_SET_WALLPAPER_AUTHOR_TEXT)); | |
| 127 localized_strings->SetString("photoFromCamera", | |
| 128 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_PHOTO_FROM_CAMERA)); | |
| 129 localized_strings->SetString("photoFlippedAccessibleText", | |
| 130 l10n_util::GetStringUTF16(IDS_OPTIONS_PHOTO_FLIP_ACCESSIBLE_TEXT)); | |
| 131 localized_strings->SetString("photoFlippedBackAccessibleText", | |
| 132 l10n_util::GetStringUTF16(IDS_OPTIONS_PHOTO_FLIPBACK_ACCESSIBLE_TEXT)); | |
| 133 localized_strings->SetString("photoCaptureAccessibleText", | |
| 134 l10n_util::GetStringUTF16(IDS_OPTIONS_PHOTO_CAPTURE_ACCESSIBLE_TEXT)); | |
| 135 localized_strings->SetString("photoDiscardAccessibleText", | |
| 136 l10n_util::GetStringUTF16(IDS_OPTIONS_PHOTO_DISCARD_ACCESSIBLE_TEXT)); | |
| 137 } | 123 } |
| 138 | 124 |
| 139 void ChangePictureOptionsHandler::RegisterMessages() { | 125 void ChangePictureHandler::SendDefaultImages() { |
| 140 web_ui()->RegisterMessageCallback("chooseFile", | |
| 141 base::Bind(&ChangePictureOptionsHandler::HandleChooseFile, | |
| 142 base::Unretained(this))); | |
| 143 web_ui()->RegisterMessageCallback("takePhoto", | |
| 144 base::Bind(&ChangePictureOptionsHandler::HandleTakePhoto, | |
| 145 base::Unretained(this))); | |
| 146 web_ui()->RegisterMessageCallback("photoTaken", | |
| 147 base::Bind(&ChangePictureOptionsHandler::HandlePhotoTaken, | |
| 148 base::Unretained(this))); | |
| 149 web_ui()->RegisterMessageCallback("discardPhoto", | |
| 150 base::Bind(&ChangePictureOptionsHandler::HandleDiscardPhoto, | |
| 151 base::Unretained(this))); | |
| 152 web_ui()->RegisterMessageCallback("onChangePicturePageShown", | |
| 153 base::Bind(&ChangePictureOptionsHandler::HandlePageShown, | |
| 154 base::Unretained(this))); | |
| 155 web_ui()->RegisterMessageCallback("onChangePicturePageHidden", | |
| 156 base::Bind(&ChangePictureOptionsHandler::HandlePageHidden, | |
| 157 base::Unretained(this))); | |
| 158 web_ui()->RegisterMessageCallback("onChangePicturePageInitialized", | |
| 159 base::Bind(&ChangePictureOptionsHandler::HandlePageInitialized, | |
| 160 base::Unretained(this))); | |
| 161 web_ui()->RegisterMessageCallback("selectImage", | |
| 162 base::Bind(&ChangePictureOptionsHandler::HandleSelectImage, | |
| 163 base::Unretained(this))); | |
| 164 } | |
| 165 | |
| 166 void ChangePictureOptionsHandler::SendDefaultImages() { | |
| 167 base::ListValue image_urls; | 126 base::ListValue image_urls; |
| 168 for (int i = default_user_image::kFirstDefaultImageIndex; | 127 for (int i = default_user_image::kFirstDefaultImageIndex; |
| 169 i < default_user_image::kDefaultImagesCount; ++i) { | 128 i < default_user_image::kDefaultImagesCount; ++i) { |
| 170 scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue); | 129 scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue); |
| 171 image_data->SetString("url", default_user_image::GetDefaultImageUrl(i)); | 130 image_data->SetString("url", default_user_image::GetDefaultImageUrl(i)); |
| 172 image_data->SetString("author", | 131 image_data->SetString("author", |
| 173 l10n_util::GetStringUTF16( | 132 l10n_util::GetStringUTF16( |
| 174 default_user_image::kDefaultImageAuthorIDs[i])); | 133 default_user_image::kDefaultImageAuthorIDs[i])); |
| 175 image_data->SetString("website", | 134 image_data->SetString("website", |
| 176 l10n_util::GetStringUTF16( | 135 l10n_util::GetStringUTF16( |
| 177 default_user_image::kDefaultImageWebsiteIDs[i])); | 136 default_user_image::kDefaultImageWebsiteIDs[i])); |
| 178 image_data->SetString("title", | 137 image_data->SetString("title", |
| 179 default_user_image::GetDefaultImageDescription(i)); | 138 default_user_image::GetDefaultImageDescription(i)); |
| 180 image_urls.Append(image_data.release()); | 139 image_urls.Append(image_data.release()); |
| 181 } | 140 } |
| 182 web_ui()->CallJavascriptFunction("ChangePictureOptions.setDefaultImages", | 141 web_ui()->CallJavascriptFunction( |
| 183 image_urls); | 142 "settings.ChangePicturePage.receiveDefaultImages", image_urls); |
| 184 } | 143 } |
| 185 | 144 |
| 186 void ChangePictureOptionsHandler::HandleChooseFile( | 145 void ChangePictureHandler::HandleChooseFile(const base::ListValue* args) { |
| 187 const base::ListValue* args) { | |
| 188 DCHECK(args && args->empty()); | 146 DCHECK(args && args->empty()); |
| 189 select_file_dialog_ = ui::SelectFileDialog::Create( | 147 select_file_dialog_ = ui::SelectFileDialog::Create( |
| 190 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); | 148 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
| 191 | 149 |
| 192 base::FilePath downloads_path; | 150 base::FilePath downloads_path; |
| 193 if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &downloads_path)) { | 151 if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &downloads_path)) { |
| 194 NOTREACHED(); | 152 NOTREACHED(); |
| 195 return; | 153 return; |
| 196 } | 154 } |
| 197 | 155 |
| 198 // Static so we initialize it only once. | 156 // Static so we initialize it only once. |
| 199 CR_DEFINE_STATIC_LOCAL(ui::SelectFileDialog::FileTypeInfo, file_type_info, | 157 CR_DEFINE_STATIC_LOCAL(ui::SelectFileDialog::FileTypeInfo, file_type_info, |
| 200 (GetUserImageFileTypeInfo())); | 158 (GetUserImageFileTypeInfo())); |
| 201 | 159 |
| 202 select_file_dialog_->SelectFile( | 160 select_file_dialog_->SelectFile( |
| 203 ui::SelectFileDialog::SELECT_OPEN_FILE, | 161 ui::SelectFileDialog::SELECT_OPEN_FILE, |
| 204 l10n_util::GetStringUTF16(IDS_DOWNLOAD_TITLE), | 162 l10n_util::GetStringUTF16(IDS_DOWNLOAD_TITLE), downloads_path, |
| 205 downloads_path, | 163 &file_type_info, 0, FILE_PATH_LITERAL(""), GetBrowserWindow(), NULL); |
| 206 &file_type_info, | |
| 207 0, | |
| 208 FILE_PATH_LITERAL(""), | |
| 209 GetBrowserWindow(), | |
| 210 NULL); | |
| 211 } | 164 } |
| 212 | 165 |
| 213 void ChangePictureOptionsHandler::HandleTakePhoto( | 166 void ChangePictureHandler::HandleTakePhoto(const base::ListValue* args) { |
| 214 const base::ListValue* args) { | |
| 215 DCHECK(args->empty()); | 167 DCHECK(args->empty()); |
| 216 ash::PlaySystemSoundIfSpokenFeedback(SOUND_CAMERA_SNAP); | 168 ash::PlaySystemSoundIfSpokenFeedback(SOUND_CAMERA_SNAP); |
| 217 } | 169 } |
| 218 | 170 |
| 219 void ChangePictureOptionsHandler::HandleDiscardPhoto( | 171 void ChangePictureHandler::HandleDiscardPhoto(const base::ListValue* args) { |
| 220 const base::ListValue* args) { | |
| 221 DCHECK(args->empty()); | 172 DCHECK(args->empty()); |
| 222 ash::PlaySystemSoundIfSpokenFeedback(SOUND_OBJECT_DELETE); | 173 ash::PlaySystemSoundIfSpokenFeedback(SOUND_OBJECT_DELETE); |
| 223 } | 174 } |
| 224 | 175 |
| 225 void ChangePictureOptionsHandler::HandlePhotoTaken( | 176 void ChangePictureHandler::HandlePhotoTaken(const base::ListValue* args) { |
| 226 const base::ListValue* args) { | |
| 227 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 177 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 228 std::string image_url; | 178 std::string image_url; |
| 229 if (!args || args->GetSize() != 1 || !args->GetString(0, &image_url)) | 179 if (!args || args->GetSize() != 1 || !args->GetString(0, &image_url)) |
| 230 NOTREACHED(); | 180 NOTREACHED(); |
| 231 DCHECK(!image_url.empty()); | 181 DCHECK(!image_url.empty()); |
| 232 | 182 |
| 233 std::string mime_type, charset, raw_data; | 183 std::string mime_type, charset, raw_data; |
| 234 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) | 184 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) |
| 235 NOTREACHED(); | 185 NOTREACHED(); |
| 236 DCHECK_EQ("image/png", mime_type); | 186 DCHECK_EQ("image/png", mime_type); |
| 237 | 187 |
| 238 user_photo_ = gfx::ImageSkia(); | 188 user_photo_ = gfx::ImageSkia(); |
| 239 user_photo_data_url_ = image_url; | 189 user_photo_data_url_ = image_url; |
| 240 | 190 |
| 241 ImageDecoder::Cancel(this); | 191 ImageDecoder::Cancel(this); |
| 242 ImageDecoder::Start(this, raw_data); | 192 ImageDecoder::Start(this, raw_data); |
| 243 } | 193 } |
| 244 | 194 |
| 245 void ChangePictureOptionsHandler::HandlePageInitialized( | 195 void ChangePictureHandler::HandlePageInitialized(const base::ListValue* args) { |
| 246 const base::ListValue* args) { | |
| 247 DCHECK(args && args->empty()); | 196 DCHECK(args && args->empty()); |
| 197 |
| 198 CameraPresenceNotifier* camera = CameraPresenceNotifier::GetInstance(); |
| 199 if (!camera_observer_.IsObserving(camera)) |
| 200 camera_observer_.Add(camera); |
| 201 |
| 248 SendDefaultImages(); | 202 SendDefaultImages(); |
| 203 SendSelectedImage(); |
| 204 UpdateProfileImage(); |
| 249 } | 205 } |
| 250 | 206 |
| 251 void ChangePictureOptionsHandler::HandlePageShown(const base::ListValue* args) { | 207 void ChangePictureHandler::SendSelectedImage() { |
| 252 DCHECK(args && args->empty()); | |
| 253 SendSelectedImage(); | |
| 254 UpdateProfileImage(); | |
| 255 CameraPresenceNotifier::GetInstance()->AddObserver(this); | |
| 256 } | |
| 257 | |
| 258 void ChangePictureOptionsHandler::HandlePageHidden( | |
| 259 const base::ListValue* args) { | |
| 260 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); | |
| 261 } | |
| 262 | |
| 263 void ChangePictureOptionsHandler::SendSelectedImage() { | |
| 264 const user_manager::User* user = GetUser(); | 208 const user_manager::User* user = GetUser(); |
| 265 DCHECK(!user->email().empty()); | 209 DCHECK(!user->email().empty()); |
| 266 | 210 |
| 267 previous_image_index_ = user->image_index(); | 211 previous_image_index_ = user->image_index(); |
| 268 switch (previous_image_index_) { | 212 switch (previous_image_index_) { |
| 269 case user_manager::User::USER_IMAGE_EXTERNAL: { | 213 case user_manager::User::USER_IMAGE_EXTERNAL: { |
| 270 // User has image from camera/file, record it and add to the image list. | 214 // User has image from camera/file, record it and add to the image list. |
| 271 previous_image_ = user->GetImage(); | 215 previous_image_ = user->GetImage(); |
| 272 SendOldImage(webui::GetBitmapDataUrl(*previous_image_.bitmap())); | 216 SendOldImage(webui::GetBitmapDataUrl(*previous_image_.bitmap())); |
| 273 break; | 217 break; |
| 274 } | 218 } |
| 275 case user_manager::User::USER_IMAGE_PROFILE: { | 219 case user_manager::User::USER_IMAGE_PROFILE: { |
| 276 // User has his/her Profile image as the current image. | 220 // User has his/her Profile image as the current image. |
| 277 SendProfileImage(user->GetImage(), true); | 221 SendProfileImage(user->GetImage(), true); |
| 278 break; | 222 break; |
| 279 } | 223 } |
| 280 default: { | 224 default: { |
| 281 DCHECK(previous_image_index_ >= 0 && | 225 DCHECK(previous_image_index_ >= 0 && |
| 282 previous_image_index_ < default_user_image::kDefaultImagesCount); | 226 previous_image_index_ < default_user_image::kDefaultImagesCount); |
| 283 if (previous_image_index_ >= | 227 if (previous_image_index_ >= |
| 284 default_user_image::kFirstDefaultImageIndex) { | 228 default_user_image::kFirstDefaultImageIndex) { |
| 285 // User has image from the current set of default images. | 229 // User has image from the current set of default images. |
| 286 base::StringValue image_url( | 230 base::StringValue image_url( |
| 287 default_user_image::GetDefaultImageUrl(previous_image_index_)); | 231 default_user_image::GetDefaultImageUrl(previous_image_index_)); |
| 288 web_ui()->CallJavascriptFunction( | 232 web_ui()->CallJavascriptFunction( |
| 289 "ChangePictureOptions.setSelectedImage", image_url); | 233 "settings.ChangePicturePage.receiveSelectedImage", image_url); |
| 290 } else { | 234 } else { |
| 291 // User has an old default image, so present it in the same manner as a | 235 // User has an old default image, so present it in the same manner as a |
| 292 // previous image from file. | 236 // previous image from file. |
| 293 SendOldImage( | 237 SendOldImage( |
| 294 default_user_image::GetDefaultImageUrl(previous_image_index_)); | 238 default_user_image::GetDefaultImageUrl(previous_image_index_)); |
| 295 } | 239 } |
| 296 } | 240 } |
| 297 } | 241 } |
| 298 } | 242 } |
| 299 | 243 |
| 300 void ChangePictureOptionsHandler::SendProfileImage(const gfx::ImageSkia& image, | 244 void ChangePictureHandler::SendProfileImage(const gfx::ImageSkia& image, |
| 301 bool should_select) { | 245 bool should_select) { |
| 302 base::StringValue data_url(webui::GetBitmapDataUrl(*image.bitmap())); | 246 base::StringValue data_url(webui::GetBitmapDataUrl(*image.bitmap())); |
| 303 base::FundamentalValue select(should_select); | 247 base::FundamentalValue select(should_select); |
| 304 web_ui()->CallJavascriptFunction("ChangePictureOptions.setProfileImage", | 248 web_ui()->CallJavascriptFunction( |
| 305 data_url, select); | 249 "settings.ChangePicturePage.receiveProfileImage", data_url, select); |
| 306 } | 250 } |
| 307 | 251 |
| 308 void ChangePictureOptionsHandler::UpdateProfileImage() { | 252 void ChangePictureHandler::UpdateProfileImage() { |
| 309 UserImageManager* user_image_manager = | 253 UserImageManager* user_image_manager = |
| 310 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); | 254 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); |
| 311 // If we have a downloaded profile image and haven't sent it in | 255 // If we have a downloaded profile image and haven't sent it in |
| 312 // |SendSelectedImage|, send it now (without selecting). | 256 // |SendSelectedImage|, send it now (without selecting). |
| 313 if (previous_image_index_ != user_manager::User::USER_IMAGE_PROFILE && | 257 if (previous_image_index_ != user_manager::User::USER_IMAGE_PROFILE && |
| 314 !user_image_manager->DownloadedProfileImage().isNull()) | 258 !user_image_manager->DownloadedProfileImage().isNull()) |
| 315 SendProfileImage(user_image_manager->DownloadedProfileImage(), false); | 259 SendProfileImage(user_image_manager->DownloadedProfileImage(), false); |
| 316 | 260 |
| 317 user_image_manager->DownloadProfileImage(kProfileDownloadReason); | 261 user_image_manager->DownloadProfileImage(kProfileDownloadReason); |
| 318 } | 262 } |
| 319 | 263 |
| 320 void ChangePictureOptionsHandler::SendOldImage(const std::string& image_url) { | 264 void ChangePictureHandler::SendOldImage(const std::string& image_url) { |
| 321 previous_image_url_ = image_url; | 265 previous_image_url_ = image_url; |
| 322 base::StringValue url(image_url); | 266 base::StringValue url(image_url); |
| 323 web_ui()->CallJavascriptFunction("ChangePictureOptions.setOldImage", url); | 267 web_ui()->CallJavascriptFunction("settings.ChangePicturePage.receiveOldImage", |
| 268 url); |
| 324 } | 269 } |
| 325 | 270 |
| 326 void ChangePictureOptionsHandler::HandleSelectImage( | 271 void ChangePictureHandler::HandleSelectImage(const base::ListValue* args) { |
| 327 const base::ListValue* args) { | |
| 328 std::string image_url; | 272 std::string image_url; |
| 329 std::string image_type; | 273 std::string image_type; |
| 330 if (!args || | 274 if (!args || args->GetSize() != 2 || !args->GetString(0, &image_url) || |
| 331 args->GetSize() != 2 || | |
| 332 !args->GetString(0, &image_url) || | |
| 333 !args->GetString(1, &image_type)) { | 275 !args->GetString(1, &image_type)) { |
| 334 NOTREACHED(); | 276 NOTREACHED(); |
| 335 return; | 277 return; |
| 336 } | 278 } |
| 337 DCHECK(!image_url.empty()); | 279 DCHECK(!image_url.empty()); |
| 338 DCHECK(!image_type.empty()); | 280 DCHECK(!image_type.empty()); |
| 339 | 281 |
| 340 UserImageManager* user_image_manager = | 282 UserImageManager* user_image_manager = |
| 341 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); | 283 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); |
| 342 int image_index = user_manager::User::USER_IMAGE_INVALID; | 284 int image_index = user_manager::User::USER_IMAGE_INVALID; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 } | 329 } |
| 388 } else { | 330 } else { |
| 389 NOTREACHED() << "Unexpected image type: " << image_type; | 331 NOTREACHED() << "Unexpected image type: " << image_type; |
| 390 } | 332 } |
| 391 | 333 |
| 392 // Ignore the result of the previous decoding if it's no longer needed. | 334 // Ignore the result of the previous decoding if it's no longer needed. |
| 393 if (!waiting_for_camera_photo) | 335 if (!waiting_for_camera_photo) |
| 394 ImageDecoder::Cancel(this); | 336 ImageDecoder::Cancel(this); |
| 395 } | 337 } |
| 396 | 338 |
| 397 void ChangePictureOptionsHandler::FileSelected(const base::FilePath& path, | 339 void ChangePictureHandler::FileSelected(const base::FilePath& path, |
| 398 int index, | 340 int index, |
| 399 void* params) { | 341 void* params) { |
| 400 ChromeUserManager::Get() | 342 ChromeUserManager::Get() |
| 401 ->GetUserImageManager(GetUser()->GetAccountId()) | 343 ->GetUserImageManager(GetUser()->GetAccountId()) |
| 402 ->SaveUserImageFromFile(path); | 344 ->SaveUserImageFromFile(path); |
| 403 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 345 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
| 404 default_user_image::kHistogramImageFromFile, | 346 default_user_image::kHistogramImageFromFile, |
| 405 default_user_image::kHistogramImagesCount); | 347 default_user_image::kHistogramImagesCount); |
| 406 VLOG(1) << "Selected image from file"; | 348 VLOG(1) << "Selected image from file"; |
| 407 } | 349 } |
| 408 | 350 |
| 409 void ChangePictureOptionsHandler::SetImageFromCamera( | 351 void ChangePictureHandler::SetImageFromCamera(const gfx::ImageSkia& photo) { |
| 410 const gfx::ImageSkia& photo) { | |
| 411 ChromeUserManager::Get() | 352 ChromeUserManager::Get() |
| 412 ->GetUserImageManager(GetUser()->GetAccountId()) | 353 ->GetUserImageManager(GetUser()->GetAccountId()) |
| 413 ->SaveUserImage(user_manager::UserImage::CreateAndEncode(photo)); | 354 ->SaveUserImage(user_manager::UserImage::CreateAndEncode(photo)); |
| 414 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 355 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
| 415 default_user_image::kHistogramImageFromCamera, | 356 default_user_image::kHistogramImageFromCamera, |
| 416 default_user_image::kHistogramImagesCount); | 357 default_user_image::kHistogramImagesCount); |
| 417 VLOG(1) << "Selected camera photo"; | 358 VLOG(1) << "Selected camera photo"; |
| 418 } | 359 } |
| 419 | 360 |
| 420 void ChangePictureOptionsHandler::SetCameraPresent(bool present) { | 361 void ChangePictureHandler::SetCameraPresent(bool present) { |
| 421 base::FundamentalValue present_value(present); | 362 base::FundamentalValue present_value(present); |
| 422 | 363 |
| 423 web_ui()->CallJavascriptFunction("ChangePictureOptions.setCameraPresent", | 364 web_ui()->CallJavascriptFunction( |
| 424 present_value); | 365 "settings.ChangePicturePage.receiveCameraPresence", present_value); |
| 425 } | 366 } |
| 426 | 367 |
| 427 void ChangePictureOptionsHandler::OnCameraPresenceCheckDone( | 368 void ChangePictureHandler::OnCameraPresenceCheckDone(bool is_camera_present) { |
| 428 bool is_camera_present) { | |
| 429 SetCameraPresent(is_camera_present); | 369 SetCameraPresent(is_camera_present); |
| 430 } | 370 } |
| 431 | 371 |
| 432 void ChangePictureOptionsHandler::Observe( | 372 void ChangePictureHandler::Observe( |
| 433 int type, | 373 int type, |
| 434 const content::NotificationSource& source, | 374 const content::NotificationSource& source, |
| 435 const content::NotificationDetails& details) { | 375 const content::NotificationDetails& details) { |
| 436 if (type == chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED) { | 376 if (type == chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED) { |
| 437 // User profile image has been updated. | 377 // User profile image has been updated. |
| 438 SendProfileImage(*content::Details<const gfx::ImageSkia>(details).ptr(), | 378 SendProfileImage(*content::Details<const gfx::ImageSkia>(details).ptr(), |
| 439 false); | 379 false); |
| 440 } else if (type == chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED) { | 380 } else if (type == chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED) { |
| 441 // Not initialized yet. | 381 // Not initialized yet. |
| 442 if (previous_image_index_ == user_manager::User::USER_IMAGE_INVALID) | 382 if (previous_image_index_ == user_manager::User::USER_IMAGE_INVALID) |
| 443 return; | 383 return; |
| 444 SendSelectedImage(); | 384 SendSelectedImage(); |
| 445 } | 385 } |
| 446 } | 386 } |
| 447 | 387 |
| 448 gfx::NativeWindow ChangePictureOptionsHandler::GetBrowserWindow() const { | 388 gfx::NativeWindow ChangePictureHandler::GetBrowserWindow() const { |
| 449 Browser* browser = | 389 Browser* browser = |
| 450 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); | 390 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); |
| 451 return browser->window()->GetNativeWindow(); | 391 return browser->window()->GetNativeWindow(); |
| 452 } | 392 } |
| 453 | 393 |
| 454 void ChangePictureOptionsHandler::OnImageDecoded( | 394 void ChangePictureHandler::OnImageDecoded(const SkBitmap& decoded_image) { |
| 455 const SkBitmap& decoded_image) { | |
| 456 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); | 395 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); |
| 457 SetImageFromCamera(user_photo_); | 396 SetImageFromCamera(user_photo_); |
| 458 } | 397 } |
| 459 | 398 |
| 460 void ChangePictureOptionsHandler::OnDecodeImageFailed() { | 399 void ChangePictureHandler::OnDecodeImageFailed() { |
| 461 NOTREACHED() << "Failed to decode PNG image from WebUI"; | 400 NOTREACHED() << "Failed to decode PNG image from WebUI"; |
| 462 } | 401 } |
| 463 | 402 |
| 464 const user_manager::User* ChangePictureOptionsHandler::GetUser() const { | 403 const user_manager::User* ChangePictureHandler::GetUser() const { |
| 465 Profile* profile = Profile::FromWebUI(web_ui()); | 404 Profile* profile = Profile::FromWebUI(web_ui()); |
| 466 const user_manager::User* user = | 405 const user_manager::User* user = |
| 467 ProfileHelper::Get()->GetUserByProfile(profile); | 406 ProfileHelper::Get()->GetUserByProfile(profile); |
| 468 if (!user) | 407 if (!user) |
| 469 return user_manager::UserManager::Get()->GetActiveUser(); | 408 return user_manager::UserManager::Get()->GetActiveUser(); |
| 470 return user; | 409 return user; |
| 471 } | 410 } |
| 472 | 411 |
| 473 } // namespace options | 412 } // namespace settings |
| 474 } // namespace chromeos | 413 } // namespace chromeos |
| OLD | NEW |