Index: chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc |
diff --git a/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc |
index e0bacf14bd46fad5da88d084758252abce291dda..a3be126a901a5e73718450ab82d6cd45b95d7766 100644 |
--- a/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc |
+++ b/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc |
@@ -59,6 +59,7 @@ SelectFileDialog::FileTypeInfo GetUserImageFileTypeInfo() { |
ChangePictureOptionsHandler::ChangePictureOptionsHandler() |
: previous_image_data_url_(chrome::kAboutBlankURL), |
+ previous_image_index_(User::kInvalidImageIndex), |
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, |
content::NotificationService::AllSources()); |
@@ -112,8 +113,8 @@ void ChangePictureOptionsHandler::RegisterMessages() { |
web_ui_->RegisterMessageCallback("takePhoto", |
base::Bind(&ChangePictureOptionsHandler::HandleTakePhoto, |
base::Unretained(this))); |
- web_ui_->RegisterMessageCallback("getSelectedImage", |
- base::Bind(&ChangePictureOptionsHandler::HandleGetSelectedImage, |
+ web_ui_->RegisterMessageCallback("onPageShown", |
+ base::Bind(&ChangePictureOptionsHandler::HandleOnPageShown, |
base::Unretained(this))); |
web_ui_->RegisterMessageCallback("selectImage", |
base::Bind(&ChangePictureOptionsHandler::HandleSelectImage, |
@@ -165,15 +166,12 @@ void ChangePictureOptionsHandler::HandleTakePhoto(const ListValue* args) { |
window->Show(); |
} |
-void ChangePictureOptionsHandler::HandleGetSelectedImage( |
+void ChangePictureOptionsHandler::HandleOnPageShown( |
const base::ListValue* args) { |
- // TODO(ivankr): rename this function as it has become much bigger |
- // than just querying the currently selected image. |
DCHECK(args && args->empty()); |
CheckCameraPresence(); |
SendSelectedImage(); |
- // Fetch user's profile picture again to see if it has changed. |
- UserManager::Get()->DownloadProfileImage(); |
+ UpdateProfileImage(); |
} |
void ChangePictureOptionsHandler::SendSelectedImage() { |
@@ -181,12 +179,6 @@ void ChangePictureOptionsHandler::SendSelectedImage() { |
DCHECK(!user.email().empty()); |
previous_image_index_ = user.image_index(); |
- if (previous_image_index_ == User::kInvalidImageIndex) { |
- // TODO(ivankr): this may happen if user image hasn't completed loading |
- // from file yet. |
- previous_image_index_ = 0; |
- } |
- |
switch (previous_image_index_) { |
case User::kExternalImageIndex: { |
// User has image from camera/file, record it and add to the image list. |
@@ -197,11 +189,7 @@ void ChangePictureOptionsHandler::SendSelectedImage() { |
} |
case User::kProfileImageIndex: { |
// User has his/her Profile image as the current image. |
- base::StringValue image_data_url( |
- web_ui_util::GetImageDataUrl(user.image())); |
- base::FundamentalValue select(true); |
- web_ui_->CallJavascriptFunction("ChangePictureOptions.setProfileImage", |
- image_data_url, select); |
+ SendProfileImage(user.image(), true); |
break; |
} |
default: { |
@@ -215,6 +203,26 @@ void ChangePictureOptionsHandler::SendSelectedImage() { |
} |
} |
+void ChangePictureOptionsHandler::SendProfileImage(const SkBitmap& image, |
+ bool should_select) { |
+ base::StringValue data_url(web_ui_util::GetImageDataUrl(image)); |
+ base::FundamentalValue select(should_select); |
+ web_ui_->CallJavascriptFunction("ChangePictureOptions.setProfileImage", |
+ data_url, select); |
+} |
+ |
+void ChangePictureOptionsHandler::UpdateProfileImage() { |
+ UserManager* user_manager = UserManager::Get(); |
+ |
+ // If we have a downloaded profile image and haven't sent it in |
+ // |SendSelectedImage|, send it now (without selecting). |
+ if (previous_image_index_ != User::kProfileImageIndex && |
+ !user_manager->downloaded_profile_image().empty()) |
+ SendProfileImage(user_manager->downloaded_profile_image(), false); |
+ |
+ user_manager->DownloadProfileImage(); |
+} |
+ |
void ChangePictureOptionsHandler::HandleSelectImage(const ListValue* args) { |
std::string image_url; |
if (!args || |
@@ -230,8 +238,6 @@ void ChangePictureOptionsHandler::HandleSelectImage(const ListValue* args) { |
const User& user = user_manager->logged_in_user(); |
int image_index = User::kInvalidImageIndex; |
- // TODO(ivankr): set profile image from downloaded_profile_image() here. |
- |
if (StartsWithASCII(image_url, chrome::kChromeUIUserImageURL, false)) { |
// Image from file/camera uses kChromeUIUserImageURL as URL while |
// current profile image always has a full data URL. |
@@ -314,12 +320,7 @@ void ChangePictureOptionsHandler::Observe( |
OptionsPageUIHandler::Observe(type, source, details); |
if (type == chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED) { |
// User profile image has been updated. |
- std::string data_url = web_ui_util::GetImageDataUrl( |
- *content::Details<const SkBitmap>(details).ptr()); |
- base::StringValue data_url_value(data_url); |
- base::FundamentalValue select(false); |
- web_ui_->CallJavascriptFunction("ChangePictureOptions.setProfileImage", |
- data_url_value, select); |
+ SendProfileImage(*content::Details<const SkBitmap>(details).ptr(), false); |
} |
} |