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

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

Issue 8772055: Use Google Plus API to get profile information (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: log Created 9 years 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 | « no previous file | no next file » | 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/profiles/profile_downloader.cc b/chrome/browser/profiles/profile_downloader.cc
index 5ffc5f3c9faa7d224da154cf9329d1695108d605..5faceadf560aa1bd94513639a243323d3f1085bd 100644
--- a/chrome/browser/profiles/profile_downloader.cc
+++ b/chrome/browser/profiles/profile_downloader.cc
@@ -38,21 +38,21 @@ namespace {
const char kAuthorizationHeader[] =
"Authorization: Bearer %s";
-// URL requesting Picasa API for user info.
+// URL requesting user info.
const char kUserEntryURL[] =
- "http://picasaweb.google.com/data/entry/api/user/default?alt=json";
+ "https://www.googleapis.com/oauth2/v1/userinfo?alt=json";
-// OAuth scope for the Picasa API.
-const char kPicasaScope[] = "http://picasaweb.google.com/data/";
+// OAuth scope for the user info API.
+const char kAPIScope[] = "https://www.googleapis.com/auth/userinfo.profile";
// Path in JSON dictionary to user's photo thumbnail URL.
-const char kPhotoThumbnailURLPath[] = "entry.gphoto$thumbnail.$t";
+const char kPhotoThumbnailURLPath[] = "picture";
-const char kNickNamePath[] = "entry.gphoto$nickname.$t";
+const char kNickNamePath[] = "name";
// Path format for specifying thumbnail's size.
const char kThumbnailSizeFormat[] = "s%d-c";
-// Default Picasa thumbnail size.
+// Default thumbnail size.
const int kDefaultThumbnailSize = 64;
// Separator of URL path components.
@@ -70,8 +70,8 @@ const char kGooglePlusPhotoId[] = "AAAAAAAAAAI";
// Photo version of the default Google+ profile picture (base64 of 0).
const char kDefaultGooglePlusPhotoVersion[] = "AAAAAAAAAAA";
-// Number of path components in profile picture URL.
-const size_t kProfileImageURLPathComponentsCount = 7;
+// The minimum number of path components in profile picture URL.
+const size_t kProfileImageURLPathComponentsCount = 6;
// Index of path component with photo ID.
const int kPhotoIdPathComponentIndex = 2;
@@ -79,6 +79,46 @@ const int kPhotoIdPathComponentIndex = 2;
// Index of path component with photo version.
const int kPhotoVersionPathComponentIndex = 3;
+bool GetImageURLWithSize(const GURL& old_url, int size, GURL* new_url) {
Munjal (Google) 2011/12/03 06:02:33 Would be nice to add a comment about what this fun
sail 2011/12/04 01:48:53 Done.
+ DCHECK(new_url);
+ std::vector<std::string> components;
+ base::SplitString(old_url.path(), kURLPathSeparator, &components);
+ if (components.size() == 0)
+ return false;
+
+ std::string old_spec = old_url.spec();
Munjal (Google) 2011/12/03 06:02:33 Nit: const std::string& old_spec
sail 2011/12/04 01:48:53 Done.
+ std::string default_size_component(
+ base::StringPrintf(kThumbnailSizeFormat, kDefaultThumbnailSize));
+ std::string new_size_component(
+ base::StringPrintf(kThumbnailSizeFormat, size));
+
+ // Check if a thumbnail size is already specified in the URL, e.g.,
+ // http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s64-c/1234567890.jpg
+ size_t pos = old_spec.find(default_size_component);
+ if (pos != std::string::npos) {
+ size_t end = pos + default_size_component.size();
+ std::string new_spec = old_spec.substr(0, pos) + new_size_component +
+ old_spec.substr(end, old_spec.size() - end);
Munjal (Google) 2011/12/03 06:02:33 Nit: You can skip the second parameter to substr s
sail 2011/12/04 01:48:53 Done.
+ *new_url = GURL(new_spec);
+ return new_url->is_valid();
+ }
+
+ // A thubmnail size is not already embedded in the URL so insert it before
+ // the last component.
+ std::string file_name = old_url.ExtractFileName();
Munjal (Google) 2011/12/03 06:02:33 Nit: const std::string& file_name
sail 2011/12/04 01:48:53 Done.
+ pos = old_spec.find(file_name);
+ if (pos != std::string::npos) {
Munjal (Google) 2011/12/03 06:02:33 Would it ever happen that pos is npos given that f
sail 2011/12/04 01:48:53 Good point. The file name can be empty so I replac
+ std::string new_spec = old_spec.substr(0, pos) + new_size_component +
+ old_spec.substr(pos - 1, old_spec.size() - pos + 1);
Munjal (Google) 2011/12/03 06:02:33 Nit: Same comment about skipping second arg to sub
sail 2011/12/04 01:48:53 Done.
+ *new_url = GURL(new_spec);
+ return new_url->is_valid();
+ }
Munjal (Google) 2011/12/03 06:02:33 Looking at the two code paths here, it seems like
sail 2011/12/04 01:48:53 Done.
+
+ // We can't set the image size, just use the default size.
+ *new_url = old_url;
+ return true;
+}
Munjal (Google) 2011/12/03 06:02:33 It will be nice to add some unit tests for this me
sail 2011/12/04 01:48:53 Done.
+
} // namespace
bool ProfileDownloader::GetProfileNickNameAndImageURL(const std::string& data,
@@ -112,45 +152,21 @@ bool ProfileDownloader::GetProfileNickNameAndImageURL(const std::string& data,
return false;
}
- std::string thumbnail_url_string;
- if (!root_dictionary->GetString(
- kPhotoThumbnailURLPath, &thumbnail_url_string)) {
+ std::string url_string;
+ if (!root_dictionary->GetString(kPhotoThumbnailURLPath, &url_string)) {
LOG(ERROR) << "Can't find thumbnail path in JSON data: "
<< data;
return false;
}
- // Try to change the size of thumbnail we are going to get.
- // Typical URL looks like this:
- // http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s64-c/1234567890.jpg
- std::string default_thumbnail_size_path_component(
- base::StringPrintf(kThumbnailSizeFormat, kDefaultThumbnailSize));
+ GURL new_url;
int image_size = delegate_->GetDesiredImageSideLength();
- std::string new_thumbnail_size_path_component(
- 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) {
- size_t thumbnail_size_end =
- thumbnail_size_pos + default_thumbnail_size_path_component.size();
- thumbnail_url_string =
- thumbnail_url_string.substr(0, thumbnail_size_pos) +
- new_thumbnail_size_path_component +
- thumbnail_url_string.substr(
- thumbnail_size_end,
- thumbnail_url_string.size() - thumbnail_size_end);
- } else {
- LOG(WARNING) << "Hasn't found thumbnail size part in image URL: "
- << thumbnail_url_string;
- // Use the thumbnail URL we have.
- }
-
- GURL thumbnail_url(thumbnail_url_string);
- if (!thumbnail_url.is_valid()) {
- LOG(ERROR) << "Thumbnail URL is not valid: " << thumbnail_url_string;
+ if (!GetImageURLWithSize(GURL(url_string), image_size, &new_url)) {
+ LOG(ERROR) << "GetImageURLWithSize failed for url: " << url_string;
return false;
}
- *url = thumbnail_url.spec();
+
+ *url = new_url.spec();
return true;
}
@@ -163,7 +179,7 @@ bool ProfileDownloader::IsDefaultProfileImageURL(const std::string& url) const {
kURLPathSeparator,
&path_components);
- if (path_components.size() != kProfileImageURLPathComponentsCount)
+ if (path_components.size() < kProfileImageURLPathComponentsCount)
return false;
const std::string& photo_id = path_components[kPhotoIdPathComponentIndex];
@@ -243,7 +259,7 @@ void ProfileDownloader::StartFetchingOAuth2AccessToken() {
DCHECK(!service->GetOAuth2LoginRefreshToken().empty());
std::vector<std::string> scopes;
- scopes.push_back(kPicasaScope);
+ scopes.push_back(kAPIScope);
oauth2_access_token_fetcher_.reset(new OAuth2AccessTokenFetcher(
this, delegate_->GetBrowserProfile()->GetRequestContext()));
oauth2_access_token_fetcher_->Start(
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698