OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/options2/chromeos/change_picture_options_handl
er.h" | 5 #include "chrome/browser/ui/webui/options2/chromeos/change_picture_options_handl
er.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 web_ui()->RegisterMessageCallback("onChangePicturePageInitialized", | 129 web_ui()->RegisterMessageCallback("onChangePicturePageInitialized", |
130 base::Bind(&ChangePictureOptionsHandler::HandlePageInitialized, | 130 base::Bind(&ChangePictureOptionsHandler::HandlePageInitialized, |
131 base::Unretained(this))); | 131 base::Unretained(this))); |
132 web_ui()->RegisterMessageCallback("selectImage", | 132 web_ui()->RegisterMessageCallback("selectImage", |
133 base::Bind(&ChangePictureOptionsHandler::HandleSelectImage, | 133 base::Bind(&ChangePictureOptionsHandler::HandleSelectImage, |
134 base::Unretained(this))); | 134 base::Unretained(this))); |
135 } | 135 } |
136 | 136 |
137 void ChangePictureOptionsHandler::SendDefaultImages() { | 137 void ChangePictureOptionsHandler::SendDefaultImages() { |
138 ListValue image_urls; | 138 ListValue image_urls; |
139 for (int i = 0; i < kDefaultImagesCount; ++i) { | 139 for (int i = kFirstDefaultImageIndex; i < kDefaultImagesCount; ++i) { |
140 image_urls.Append(new StringValue(GetDefaultImageUrl(i))); | 140 image_urls.Append(new StringValue(GetDefaultImageUrl(i))); |
141 } | 141 } |
142 web_ui()->CallJavascriptFunction("ChangePictureOptions.setDefaultImages", | 142 web_ui()->CallJavascriptFunction("ChangePictureOptions.setDefaultImages", |
143 image_urls); | 143 image_urls); |
144 } | 144 } |
145 | 145 |
146 void ChangePictureOptionsHandler::HandleChooseFile(const ListValue* args) { | 146 void ChangePictureOptionsHandler::HandleChooseFile(const ListValue* args) { |
147 DCHECK(args && args->empty()); | 147 DCHECK(args && args->empty()); |
148 select_file_dialog_ = ui::SelectFileDialog::Create( | 148 select_file_dialog_ = ui::SelectFileDialog::Create( |
149 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); | 149 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 break; | 244 break; |
245 } | 245 } |
246 case User::kProfileImageIndex: { | 246 case User::kProfileImageIndex: { |
247 // User has his/her Profile image as the current image. | 247 // User has his/her Profile image as the current image. |
248 SendProfileImage(user.image(), true); | 248 SendProfileImage(user.image(), true); |
249 break; | 249 break; |
250 } | 250 } |
251 default: { | 251 default: { |
252 DCHECK(previous_image_index_ >= 0 && | 252 DCHECK(previous_image_index_ >= 0 && |
253 previous_image_index_ < kDefaultImagesCount); | 253 previous_image_index_ < kDefaultImagesCount); |
254 // User has image from the set of default images. | 254 if (previous_image_index_ >= kFirstDefaultImageIndex) { |
255 base::StringValue image_url(GetDefaultImageUrl(previous_image_index_)); | 255 // User has image from the current set of default images. |
256 web_ui()->CallJavascriptFunction("ChangePictureOptions.setSelectedImage", | 256 base::StringValue image_url(GetDefaultImageUrl(previous_image_index_)); |
257 image_url); | 257 web_ui()->CallJavascriptFunction( |
| 258 "ChangePictureOptions.setSelectedImage", image_url); |
| 259 } else { |
| 260 // User has an old default image, so present it in the same manner as a |
| 261 // previous image from file. |
| 262 web_ui()->CallJavascriptFunction("ChangePictureOptions.setOldImage"); |
| 263 } |
258 } | 264 } |
259 } | 265 } |
260 } | 266 } |
261 | 267 |
262 void ChangePictureOptionsHandler::SendProfileImage(const gfx::ImageSkia& image, | 268 void ChangePictureOptionsHandler::SendProfileImage(const gfx::ImageSkia& image, |
263 bool should_select) { | 269 bool should_select) { |
264 base::StringValue data_url(web_ui_util::GetImageDataUrl(image)); | 270 base::StringValue data_url(web_ui_util::GetImageDataUrl(image)); |
265 base::FundamentalValue select(should_select); | 271 base::FundamentalValue select(should_select); |
266 web_ui()->CallJavascriptFunction("ChangePictureOptions.setProfileImage", | 272 web_ui()->CallJavascriptFunction("ChangePictureOptions.setProfileImage", |
267 data_url, select); | 273 data_url, select); |
(...skipping 20 matching lines...) Expand all Loading... |
288 return; | 294 return; |
289 } | 295 } |
290 DCHECK(!image_url.empty()); | 296 DCHECK(!image_url.empty()); |
291 | 297 |
292 UserManager* user_manager = UserManager::Get(); | 298 UserManager* user_manager = UserManager::Get(); |
293 const User& user = user_manager->GetLoggedInUser(); | 299 const User& user = user_manager->GetLoggedInUser(); |
294 int image_index = User::kInvalidImageIndex; | 300 int image_index = User::kInvalidImageIndex; |
295 bool waiting_for_camera_photo = false; | 301 bool waiting_for_camera_photo = false; |
296 | 302 |
297 if (StartsWithASCII(image_url, chrome::kChromeUIUserImageURL, false)) { | 303 if (StartsWithASCII(image_url, chrome::kChromeUIUserImageURL, false)) { |
298 // Image from file/camera uses kChromeUIUserImageURL as URL while | 304 // Image from file/camera uses |kChromeUIUserImageURL| as URL while |
299 // current profile image always has a full data URL. | 305 // current profile image always has a full data URL. |
300 // This way transition from (current profile image) to | 306 // This way transition from (current profile image) to |
301 // (profile image, current image from file) is easier. | 307 // (profile image, current image from file) is easier. |
| 308 // Also, old (not available for selection any more) default images use |
| 309 // this URL, too. |
302 | 310 |
303 DCHECK(!previous_image_.empty()); | 311 if (previous_image_index_ == User::kExternalImageIndex) { |
304 user_manager->SaveUserImage(user.email(), | 312 DCHECK(!previous_image_.empty()); |
305 UserImage::CreateAndEncode(previous_image_)); | 313 user_manager->SaveUserImage(user.email(), |
| 314 UserImage::CreateAndEncode(previous_image_)); |
| 315 } else { |
| 316 DCHECK(previous_image_index_ >= 0 && |
| 317 previous_image_index_ < kFirstDefaultImageIndex); |
| 318 user_manager->SaveUserDefaultImageIndex(user.email(), |
| 319 previous_image_index_); |
| 320 } |
306 | 321 |
307 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 322 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
308 kHistogramImageOld, | 323 kHistogramImageOld, |
309 kHistogramImagesCount); | 324 kHistogramImagesCount); |
310 VLOG(1) << "Selected old user image"; | 325 VLOG(1) << "Selected old user image"; |
311 } else if (IsDefaultImageUrl(image_url, &image_index)) { | 326 } else if (IsDefaultImageUrl(image_url, &image_index)) { |
312 // One of the default user images. | 327 // One of the default user images. |
313 user_manager->SaveUserDefaultImageIndex(user.email(), image_index); | 328 user_manager->SaveUserDefaultImageIndex(user.email(), image_index); |
314 | 329 |
315 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 330 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
316 image_index, | 331 GetDefaultImageHistogramValue(image_index), |
317 kHistogramImagesCount); | 332 kHistogramImagesCount); |
318 VLOG(1) << "Selected default user image: " << image_index; | 333 VLOG(1) << "Selected default user image: " << image_index; |
319 } else if (image_url == user_photo_data_url_) { | 334 } else if (image_url == user_photo_data_url_) { |
320 // Camera image is selected. | 335 // Camera image is selected. |
321 if (user_photo_.empty()) { | 336 if (user_photo_.empty()) { |
322 DCHECK(image_decoder_.get()); | 337 DCHECK(image_decoder_.get()); |
323 waiting_for_camera_photo = true; | 338 waiting_for_camera_photo = true; |
324 VLOG(1) << "Still waiting for camera image to decode"; | 339 VLOG(1) << "Still waiting for camera image to decode"; |
325 } else { | 340 } else { |
326 OnPhotoAccepted(user_photo_); | 341 OnPhotoAccepted(user_photo_); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 OnPhotoAccepted(user_photo_); | 435 OnPhotoAccepted(user_photo_); |
421 } | 436 } |
422 | 437 |
423 void ChangePictureOptionsHandler::OnDecodeImageFailed( | 438 void ChangePictureOptionsHandler::OnDecodeImageFailed( |
424 const ImageDecoder* decoder) { | 439 const ImageDecoder* decoder) { |
425 NOTREACHED() << "Failed to decode PNG image from WebUI"; | 440 NOTREACHED() << "Failed to decode PNG image from WebUI"; |
426 } | 441 } |
427 | 442 |
428 } // namespace options2 | 443 } // namespace options2 |
429 } // namespace chromeos | 444 } // namespace chromeos |
OLD | NEW |