| Index: chrome/browser/chromeos/login/user_manager_impl.cc
|
| diff --git a/chrome/browser/chromeos/login/user_manager_impl.cc b/chrome/browser/chromeos/login/user_manager_impl.cc
|
| index 02ccdfc75eab7f64485893de5708216e521d600c..006b3edc6229b1c7af4251dbc5e86414047432ce 100644
|
| --- a/chrome/browser/chromeos/login/user_manager_impl.cc
|
| +++ b/chrome/browser/chromeos/login/user_manager_impl.cc
|
| @@ -74,6 +74,7 @@ const char kStubUser[] = "stub-user@example.com";
|
| // Names of nodes with info about user image.
|
| const char kImagePathNodeName[] = "path";
|
| const char kImageIndexNodeName[] = "index";
|
| +const char kImageURLNodeName[] = "url";
|
|
|
| const char kWallpaperTypeNodeName[] = "type";
|
| const char kWallpaperIndexNodeName[] = "index";
|
| @@ -590,14 +591,16 @@ std::string UserManagerImpl::GetUserDisplayEmail(
|
| void UserManagerImpl::SaveUserDefaultImageIndex(const std::string& username,
|
| int image_index) {
|
| DCHECK(image_index >= 0 && image_index < kDefaultImagesCount);
|
| - SetUserImage(username, image_index, UserImage(GetDefaultImage(image_index)));
|
| - SaveImageToLocalState(username, "", image_index, false);
|
| + SetUserImage(username, image_index, GURL(),
|
| + UserImage(GetDefaultImage(image_index)));
|
| + SaveImageToLocalState(username, "", image_index, GURL(), false);
|
| }
|
|
|
| void UserManagerImpl::SaveUserImage(const std::string& username,
|
| const UserImage& user_image) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - SaveUserImageInternal(username, User::kExternalImageIndex, user_image);
|
| + SaveUserImageInternal(username, User::kExternalImageIndex,
|
| + GURL(), user_image);
|
| }
|
|
|
| void UserManagerImpl::SetLoggedInUserCustomWallpaperLayout(
|
| @@ -646,12 +649,16 @@ void UserManagerImpl::SaveUserImageFromProfileImage(
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| if (!downloaded_profile_image_.empty()) {
|
| // Profile image has already been downloaded, so save it to file right now.
|
| - SaveUserImageInternal(username, User::kProfileImageIndex,
|
| + DCHECK(profile_image_url_.is_valid());
|
| + SaveUserImageInternal(username,
|
| + User::kProfileImageIndex, profile_image_url_,
|
| UserImage(downloaded_profile_image_));
|
| } else {
|
| // No profile image - use the stub image (gray avatar).
|
| - SetUserImage(username, User::kProfileImageIndex, UserImage(SkBitmap()));
|
| - SaveImageToLocalState(username, "", User::kProfileImageIndex, false);
|
| + SetUserImage(username, User::kProfileImageIndex,
|
| + GURL(), UserImage(SkBitmap()));
|
| + SaveImageToLocalState(username, "", User::kProfileImageIndex,
|
| + GURL(), false);
|
| }
|
| }
|
|
|
| @@ -852,7 +859,8 @@ void UserManagerImpl::EnsureUsersLoaded() {
|
| image_loader_->Start(
|
| image_path, user_image_size, true,
|
| base::Bind(&UserManagerImpl::SetUserImage,
|
| - base::Unretained(this), email, image_index));
|
| + base::Unretained(this),
|
| + email, image_index, GURL()));
|
| }
|
| } else if (prefs_images->GetDictionaryWithoutPathExpansion(
|
| email, &image_properties)) {
|
| @@ -870,14 +878,19 @@ void UserManagerImpl::EnsureUsersLoaded() {
|
| // after user logs in).
|
| DCHECK(!image_path.empty() ||
|
| image_index == User::kProfileImageIndex);
|
| + std::string image_url;
|
| + image_properties->GetString(kImageURLNodeName, &image_url);
|
| + GURL image_gurl(image_url);
|
| // Until image has been loaded, use the stub image (gray avatar).
|
| user->SetStubImage(image_index);
|
| + user->SetImageURL(image_gurl);
|
| if (!image_path.empty()) {
|
| // Load user image asynchronously.
|
| image_loader_->Start(
|
| image_path, user_image_size, true,
|
| base::Bind(&UserManagerImpl::SetUserImage,
|
| - base::Unretained(this), email, image_index));
|
| + base::Unretained(this),
|
| + email, image_index, image_gurl));
|
| }
|
| } else {
|
| NOTREACHED();
|
| @@ -1099,6 +1112,7 @@ void UserManagerImpl::SaveLoggedInUserWallpaperProperties(
|
|
|
| void UserManagerImpl::SetUserImage(const std::string& username,
|
| int image_index,
|
| + const GURL& image_url,
|
| const UserImage& user_image) {
|
| User* user = const_cast<User*>(FindUser(username));
|
| // User may have been removed by now.
|
| @@ -1112,6 +1126,7 @@ void UserManagerImpl::SetUserImage(const std::string& username,
|
| user->SetImage(user_image, image_index);
|
| else
|
| user->SetStubImage(image_index);
|
| + user->SetImageURL(image_url);
|
| // For the logged-in user with a profile picture, initialize
|
| // |downloaded_profile_picture_|.
|
| if (user == logged_in_user_ && image_index == User::kProfileImageIndex)
|
| @@ -1180,10 +1195,11 @@ void UserManagerImpl::SaveUserWallpaperProperties(const std::string& username,
|
|
|
| void UserManagerImpl::SaveUserImageInternal(const std::string& username,
|
| int image_index,
|
| + const GURL& image_url,
|
| const UserImage& user_image) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| - SetUserImage(username, image_index, user_image);
|
| + SetUserImage(username, image_index, image_url, user_image);
|
|
|
| // Ignore for ephemeral users.
|
| if (IsEphemeralUser(username))
|
| @@ -1199,7 +1215,7 @@ void UserManagerImpl::SaveUserImageInternal(const std::string& username,
|
| FROM_HERE,
|
| base::Bind(&UserManagerImpl::SaveImageToFile,
|
| base::Unretained(this),
|
| - username, user_image, image_path, image_index));
|
| + username, user_image, image_path, image_index, image_url));
|
| }
|
|
|
| void UserManagerImpl::SaveUserWallpaperInternal(const std::string& username,
|
| @@ -1296,7 +1312,8 @@ void UserManagerImpl::GenerateUserWallpaperThumbnail(
|
| void UserManagerImpl::SaveImageToFile(const std::string& username,
|
| const UserImage& user_image,
|
| const FilePath& image_path,
|
| - int image_index) {
|
| + int image_index,
|
| + const GURL& image_url) {
|
| if (!SaveBitmapToFile(user_image, image_path))
|
| return;
|
|
|
| @@ -1305,7 +1322,7 @@ void UserManagerImpl::SaveImageToFile(const std::string& username,
|
| FROM_HERE,
|
| base::Bind(&UserManagerImpl::SaveImageToLocalState,
|
| base::Unretained(this),
|
| - username, image_path.value(), image_index, true));
|
| + username, image_path.value(), image_index, image_url, true));
|
| }
|
|
|
| void UserManagerImpl::SaveWallpaperToFile(const std::string& username,
|
| @@ -1329,6 +1346,7 @@ void UserManagerImpl::SaveWallpaperToFile(const std::string& username,
|
| void UserManagerImpl::SaveImageToLocalState(const std::string& username,
|
| const std::string& image_path,
|
| int image_index,
|
| + const GURL& image_url,
|
| bool is_async) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| @@ -1353,6 +1371,12 @@ void UserManagerImpl::SaveImageToLocalState(const std::string& username,
|
| image_properties->Set(kImagePathNodeName, new StringValue(image_path));
|
| image_properties->Set(kImageIndexNodeName,
|
| new base::FundamentalValue(image_index));
|
| + if (!image_url.is_empty()) {
|
| + image_properties->Set(kImageURLNodeName,
|
| + new StringValue(image_url.spec()));
|
| + } else {
|
| + image_properties->Remove(kImageURLNodeName, NULL);
|
| + }
|
| images_update->SetWithoutPathExpansion(username, image_properties);
|
| DVLOG(1) << "Saving path to user image in Local State.";
|
|
|
| @@ -1398,6 +1422,7 @@ void UserManagerImpl::InitDownloadedProfileImage() {
|
| downloaded_profile_image_ = logged_in_user_->image();
|
| downloaded_profile_image_data_url_ =
|
| web_ui_util::GetImageDataUrl(gfx::ImageSkia(downloaded_profile_image_));
|
| + profile_image_url_ = logged_in_user_->image_url();
|
| }
|
| }
|
|
|
| @@ -1439,17 +1464,18 @@ void UserManagerImpl::CheckOwnership() {
|
| is_owner));
|
| }
|
|
|
| +// ProfileDownloaderDelegate override.
|
| int UserManagerImpl::GetDesiredImageSideLength() const {
|
| return GetCurrentUserImageSize();
|
| }
|
|
|
| -Profile* UserManagerImpl::GetBrowserProfile() {
|
| - return ProfileManager::GetDefaultProfile();
|
| +// ProfileDownloaderDelegate override.
|
| +std::string UserManagerImpl::GetCachedPictureURL() const {
|
| + return profile_image_url_.spec();
|
| }
|
|
|
| -std::string UserManagerImpl::GetCachedPictureURL() const {
|
| - // Currently the profile picture URL is not cached on ChromeOS.
|
| - return std::string();
|
| +Profile* UserManagerImpl::GetBrowserProfile() {
|
| + return ProfileManager::GetDefaultProfile();
|
| }
|
|
|
| void UserManagerImpl::OnDownloadComplete(ProfileDownloader* downloader,
|
| @@ -1495,6 +1521,7 @@ void UserManagerImpl::OnDownloadComplete(ProfileDownloader* downloader,
|
|
|
| downloaded_profile_image_data_url_ = new_image_data_url;
|
| downloaded_profile_image_ = downloader->GetProfilePicture();
|
| + profile_image_url_ = GURL(downloader->GetProfilePictureURL());
|
|
|
| if (GetLoggedInUser().image_index() == User::kProfileImageIndex) {
|
| VLOG(1) << "Updating profile image for logged-in user";
|
|
|