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