Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(812)

Unified Diff: chrome/browser/profiles/profile_downloader.cc

Issue 8510069: Make ProfileImageDownloader available to non-chromeos code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix build Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/profiles/profile_downloader.h ('k') | chrome/browser/profiles/profile_downloader_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/profiles/profile_downloader.cc
diff --git a/chrome/browser/chromeos/login/profile_image_downloader.cc b/chrome/browser/profiles/profile_downloader.cc
similarity index 76%
rename from chrome/browser/chromeos/login/profile_image_downloader.cc
rename to chrome/browser/profiles/profile_downloader.cc
index 475d94896d5b3eb5aa46fa4c06f2bc9b426514f8..468cc8cb95d2309df82b22a923b0f153f51bd8c5 100644
--- a/chrome/browser/chromeos/login/profile_image_downloader.cc
+++ b/chrome/browser/profiles/profile_downloader.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/chromeos/login/profile_image_downloader.h"
+#include "chrome/browser/profiles/profile_downloader.h"
#include <string>
#include <vector>
@@ -13,10 +13,9 @@
#include "base/string_split.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
-#include "chrome/browser/chromeos/login/helper.h"
-#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/net/gaia/token_service.h"
-#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_downloader_delegate.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/net/gaia/gaia_constants.h"
#include "content/public/browser/browser_thread.h"
@@ -31,8 +30,6 @@
using content::BrowserThread;
-namespace chromeos {
-
namespace {
// Template for optional authorization header.
@@ -43,6 +40,9 @@ const char kUserEntryURL[] =
"http://picasaweb.google.com/data/entry/api/user/default?alt=json";
// Path in JSON dictionary to user's photo thumbnail URL.
const char kPhotoThumbnailURLPath[] = "entry.gphoto$thumbnail.$t";
+
+const char kNickNamePath[] = "entry.gphoto$nickname.$t";
+
// Path format for specifying thumbnail's size.
const char kThumbnailSizeFormat[] = "s%d-c";
// Default Picasa thumbnail size.
@@ -74,8 +74,14 @@ const int kPhotoVersionPathComponentIndex = 3;
} // namespace
-std::string ProfileImageDownloader::GetProfileImageURL(
- const std::string& data) const {
+bool ProfileDownloader::GetProfileNickNameAndImageURL(const std::string& data,
+ string16* nick_name,
+ std::string* url) const {
+ DCHECK(nick_name);
+ DCHECK(url);
+ *nick_name = string16();
+ *url = std::string();
+
int error_code = -1;
std::string error_message;
scoped_ptr<base::Value> root_value(base::JSONReader::ReadAndReturnError(
@@ -83,22 +89,28 @@ std::string ProfileImageDownloader::GetProfileImageURL(
if (!root_value.get()) {
LOG(ERROR) << "Error while parsing Picasa user entry response: "
<< error_message;
- return std::string();
+ return false;
}
if (!root_value->IsType(base::Value::TYPE_DICTIONARY)) {
LOG(ERROR) << "JSON root is not a dictionary: "
<< root_value->GetType();
- return std::string();
+ return false;
}
base::DictionaryValue* root_dictionary =
static_cast<base::DictionaryValue*>(root_value.get());
+ if (!root_dictionary->GetString(kNickNamePath, nick_name)) {
+ LOG(ERROR) << "Can't find nick name path in JSON data: "
+ << data;
+ return false;
+ }
+
std::string thumbnail_url_string;
if (!root_dictionary->GetString(
kPhotoThumbnailURLPath, &thumbnail_url_string)) {
LOG(ERROR) << "Can't find thumbnail path in JSON data: "
<< data;
- return std::string();
+ return false;
}
// Try to change the size of thumbnail we are going to get.
@@ -106,8 +118,9 @@ std::string ProfileImageDownloader::GetProfileImageURL(
// http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s64-c/1234567890.jpg
std::string default_thumbnail_size_path_component(
base::StringPrintf(kThumbnailSizeFormat, kDefaultThumbnailSize));
+ int image_size = delegate_->GetDesiredImageSideLength();
std::string new_thumbnail_size_path_component(
- base::StringPrintf(kThumbnailSizeFormat, login::kUserImageSize));
+ base::StringPrintf(kThumbnailSizeFormat, image_size));
size_t thumbnail_size_pos =
thumbnail_url_string.find(default_thumbnail_size_path_component);
if (thumbnail_size_pos != std::string::npos) {
@@ -128,14 +141,13 @@ std::string ProfileImageDownloader::GetProfileImageURL(
GURL thumbnail_url(thumbnail_url_string);
if (!thumbnail_url.is_valid()) {
LOG(ERROR) << "Thumbnail URL is not valid: " << thumbnail_url_string;
- return std::string();
+ return false;
}
- return thumbnail_url.spec();
+ *url = thumbnail_url.spec();
+ return true;
}
-bool ProfileImageDownloader::IsDefaultProfileImageURL(
- const std::string& url) const {
-
+bool ProfileDownloader::IsDefaultProfileImageURL(const std::string& url) const {
GURL image_url_object(url);
DCHECK(image_url_object.is_valid());
VLOG(1) << "URL to check for default image: " << image_url_object.spec();
@@ -159,21 +171,20 @@ bool ProfileImageDownloader::IsDefaultProfileImageURL(
photo_version == kDefaultGooglePlusPhotoVersion));
}
-ProfileImageDownloader::ProfileImageDownloader(Delegate* delegate)
+ProfileDownloader::ProfileDownloader(ProfileDownloaderDelegate* delegate)
: delegate_(delegate) {
+ DCHECK(delegate_);
}
-void ProfileImageDownloader::Start() {
- VLOG(1) << "Starting profile image downloader...";
+void ProfileDownloader::Start() {
+ VLOG(1) << "Starting profile downloader...";
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- TokenService* service =
- ProfileManager::GetDefaultProfile()->GetTokenService();
+ TokenService* service = delegate_->GetBrowserProfile()->GetTokenService();
if (!service) {
// This can happen in some test paths.
LOG(WARNING) << "User has no token service";
- if (delegate_)
- delegate_->OnDownloadFailure();
+ delegate_->OnDownloadComplete(this, false);
return;
}
if (service->HasTokenForService(GaiaConstants::kPicasaService)) {
@@ -190,15 +201,20 @@ void ProfileImageDownloader::Start() {
}
}
-void ProfileImageDownloader::StartFetchingImage() {
- std::string email = UserManager::Get()->logged_in_user().email();
- if (email.empty())
- return;
+const string16& ProfileDownloader::GetProfileFullName() const {
+ return profile_full_name_;
+}
+
+const SkBitmap& ProfileDownloader::GetProfilePicture() const {
+ return profile_picture_;
+}
+
+void ProfileDownloader::StartFetchingImage() {
VLOG(1) << "Fetching user entry with token: " << auth_token_;
user_entry_fetcher_.reset(content::URLFetcher::Create(
GURL(kUserEntryURL), content::URLFetcher::GET, this));
user_entry_fetcher_->SetRequestContext(
- ProfileManager::GetDefaultProfile()->GetRequestContext());
+ delegate_->GetBrowserProfile()->GetRequestContext());
if (!auth_token_.empty()) {
user_entry_fetcher_->SetExtraRequestHeaders(
base::StringPrintf(kAuthorizationHeader, auth_token_.c_str()));
@@ -206,10 +222,9 @@ void ProfileImageDownloader::StartFetchingImage() {
user_entry_fetcher_->Start();
}
-ProfileImageDownloader::~ProfileImageDownloader() {}
+ProfileDownloader::~ProfileDownloader() {}
-void ProfileImageDownloader::OnURLFetchComplete(
- const content::URLFetcher* source) {
+void ProfileDownloader::OnURLFetchComplete(const content::URLFetcher* source) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
std::string data;
source->GetResponseAsString(&data);
@@ -217,28 +232,25 @@ void ProfileImageDownloader::OnURLFetchComplete(
LOG(ERROR) << "Response code is " << source->GetResponseCode();
LOG(ERROR) << "Url is " << source->GetURL().spec();
LOG(ERROR) << "Data is " << data;
- if (delegate_)
- delegate_->OnDownloadFailure();
+ delegate_->OnDownloadComplete(this, false);
return;
}
if (source == user_entry_fetcher_.get()) {
- std::string image_url = GetProfileImageURL(data);
- if (image_url.empty()) {
- if (delegate_)
- delegate_->OnDownloadFailure();
+ std::string image_url;
+ if (!GetProfileNickNameAndImageURL(data, &profile_full_name_, &image_url)) {
+ delegate_->OnDownloadComplete(this, false);
return;
}
if (IsDefaultProfileImageURL(image_url)) {
- if (delegate_)
- delegate_->OnDownloadDefaultImage();
+ delegate_->OnDownloadComplete(this, true);
return;
}
VLOG(1) << "Fetching profile image from " << image_url;
profile_image_fetcher_.reset(content::URLFetcher::Create(
GURL(image_url), content::URLFetcher::GET, this));
profile_image_fetcher_->SetRequestContext(
- ProfileManager::GetDefaultProfile()->GetRequestContext());
+ delegate_->GetBrowserProfile()->GetRequestContext());
if (!auth_token_.empty()) {
profile_image_fetcher_->SetExtraRequestHeaders(
base::StringPrintf(kAuthorizationHeader, auth_token_.c_str()));
@@ -252,25 +264,24 @@ void ProfileImageDownloader::OnURLFetchComplete(
}
}
-void ProfileImageDownloader::OnImageDecoded(const ImageDecoder* decoder,
- const SkBitmap& decoded_image) {
+void ProfileDownloader::OnImageDecoded(const ImageDecoder* decoder,
+ const SkBitmap& decoded_image) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- SkBitmap resized_image = skia::ImageOperations::Resize(
+ int image_size = delegate_->GetDesiredImageSideLength();
+ profile_picture_ = skia::ImageOperations::Resize(
decoded_image,
skia::ImageOperations::RESIZE_BEST,
- login::kUserImageSize,
- login::kUserImageSize);
- if (delegate_)
- delegate_->OnDownloadSuccess(resized_image);
+ image_size,
+ image_size);
+ delegate_->OnDownloadComplete(this, true);
}
-void ProfileImageDownloader::OnDecodeImageFailed(const ImageDecoder* decoder) {
+void ProfileDownloader::OnDecodeImageFailed(const ImageDecoder* decoder) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (delegate_)
- delegate_->OnDownloadFailure();
+ delegate_->OnDownloadComplete(this, false);
}
-void ProfileImageDownloader::Observe(
+void ProfileDownloader::Observe(
int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
@@ -287,11 +298,8 @@ void ProfileImageDownloader::Observe(
}
} else {
if (token_details->service() == GaiaConstants::kPicasaService) {
- LOG(WARNING) << "ProfileImageDownloader: token request failed";
- if (delegate_)
- delegate_->OnDownloadFailure();
+ LOG(WARNING) << "ProfileDownloader: token request failed";
+ delegate_->OnDownloadComplete(this, false);
}
}
}
-
-} // namespace chromeos
« no previous file with comments | « chrome/browser/profiles/profile_downloader.h ('k') | chrome/browser/profiles/profile_downloader_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698