OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/profiles/profile_downloader.h" | 5 #include "chrome/browser/profiles/profile_downloader.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 | 177 |
178 // There are at least two pairs of (ID, version) for the default photo: | 178 // There are at least two pairs of (ID, version) for the default photo: |
179 // the default Google+ profile photo and the default Picasa profile photo. | 179 // the default Google+ profile photo and the default Picasa profile photo. |
180 return ((photo_id == kPicasaPhotoId && | 180 return ((photo_id == kPicasaPhotoId && |
181 photo_version == kDefaultPicasaPhotoVersion) || | 181 photo_version == kDefaultPicasaPhotoVersion) || |
182 (photo_id == kGooglePlusPhotoId && | 182 (photo_id == kGooglePlusPhotoId && |
183 photo_version == kDefaultGooglePlusPhotoVersion)); | 183 photo_version == kDefaultGooglePlusPhotoVersion)); |
184 } | 184 } |
185 | 185 |
186 ProfileDownloader::ProfileDownloader(ProfileDownloaderDelegate* delegate) | 186 ProfileDownloader::ProfileDownloader(ProfileDownloaderDelegate* delegate) |
187 : delegate_(delegate) { | 187 : delegate_(delegate), |
| 188 picture_status_(PICTURE_FAILED) { |
188 DCHECK(delegate_); | 189 DCHECK(delegate_); |
189 } | 190 } |
190 | 191 |
191 void ProfileDownloader::Start() { | 192 void ProfileDownloader::Start() { |
192 VLOG(1) << "Starting profile downloader..."; | 193 VLOG(1) << "Starting profile downloader..."; |
193 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
194 | 195 |
195 TokenService* service = delegate_->GetBrowserProfile()->GetTokenService(); | 196 TokenService* service = delegate_->GetBrowserProfile()->GetTokenService(); |
196 if (!service) { | 197 if (!service) { |
197 // This can happen in some test paths. | 198 // This can happen in some test paths. |
(...skipping 21 matching lines...) Expand all Loading... |
219 } | 220 } |
220 | 221 |
221 string16 ProfileDownloader::GetProfileFullName() const { | 222 string16 ProfileDownloader::GetProfileFullName() const { |
222 return profile_full_name_; | 223 return profile_full_name_; |
223 } | 224 } |
224 | 225 |
225 SkBitmap ProfileDownloader::GetProfilePicture() const { | 226 SkBitmap ProfileDownloader::GetProfilePicture() const { |
226 return profile_picture_; | 227 return profile_picture_; |
227 } | 228 } |
228 | 229 |
| 230 ProfileDownloader::PictureStatus ProfileDownloader::GetProfilePictureStatus() |
| 231 const { |
| 232 return picture_status_; |
| 233 } |
| 234 |
| 235 std::string ProfileDownloader::GetProfilePictureURL() const { |
| 236 return picture_url_; |
| 237 } |
| 238 |
229 void ProfileDownloader::StartFetchingImage() { | 239 void ProfileDownloader::StartFetchingImage() { |
230 VLOG(1) << "Fetching user entry with token: " << auth_token_; | 240 VLOG(1) << "Fetching user entry with token: " << auth_token_; |
231 user_entry_fetcher_.reset(content::URLFetcher::Create( | 241 user_entry_fetcher_.reset(content::URLFetcher::Create( |
232 GURL(kUserEntryURL), content::URLFetcher::GET, this)); | 242 GURL(kUserEntryURL), content::URLFetcher::GET, this)); |
233 user_entry_fetcher_->SetRequestContext( | 243 user_entry_fetcher_->SetRequestContext( |
234 delegate_->GetBrowserProfile()->GetRequestContext()); | 244 delegate_->GetBrowserProfile()->GetRequestContext()); |
235 if (!auth_token_.empty()) { | 245 if (!auth_token_.empty()) { |
236 user_entry_fetcher_->SetExtraRequestHeaders( | 246 user_entry_fetcher_->SetExtraRequestHeaders( |
237 base::StringPrintf(GetAuthorizationHeader(), auth_token_.c_str())); | 247 base::StringPrintf(GetAuthorizationHeader(), auth_token_.c_str())); |
238 } | 248 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 return; | 283 return; |
274 } | 284 } |
275 | 285 |
276 if (source == user_entry_fetcher_.get()) { | 286 if (source == user_entry_fetcher_.get()) { |
277 std::string image_url; | 287 std::string image_url; |
278 if (!GetProfileNickNameAndImageURL(data, &profile_full_name_, &image_url)) { | 288 if (!GetProfileNickNameAndImageURL(data, &profile_full_name_, &image_url)) { |
279 delegate_->OnDownloadComplete(this, false); | 289 delegate_->OnDownloadComplete(this, false); |
280 return; | 290 return; |
281 } | 291 } |
282 if (IsDefaultProfileImageURL(image_url)) { | 292 if (IsDefaultProfileImageURL(image_url)) { |
| 293 VLOG(1) << "User has default profile picture"; |
| 294 picture_status_ = PICTURE_DEFAULT; |
| 295 delegate_->OnDownloadComplete(this, true); |
| 296 return; |
| 297 } |
| 298 if (!image_url.empty() && image_url == delegate_->GetCachedPictureURL()) { |
| 299 VLOG(1) << "Picture URL matches cached picture URL"; |
| 300 picture_status_ = PICTURE_CACHED; |
283 delegate_->OnDownloadComplete(this, true); | 301 delegate_->OnDownloadComplete(this, true); |
284 return; | 302 return; |
285 } | 303 } |
286 VLOG(1) << "Fetching profile image from " << image_url; | 304 VLOG(1) << "Fetching profile image from " << image_url; |
| 305 picture_url_ = image_url; |
287 profile_image_fetcher_.reset(content::URLFetcher::Create( | 306 profile_image_fetcher_.reset(content::URLFetcher::Create( |
288 GURL(image_url), content::URLFetcher::GET, this)); | 307 GURL(image_url), content::URLFetcher::GET, this)); |
289 profile_image_fetcher_->SetRequestContext( | 308 profile_image_fetcher_->SetRequestContext( |
290 delegate_->GetBrowserProfile()->GetRequestContext()); | 309 delegate_->GetBrowserProfile()->GetRequestContext()); |
291 if (!auth_token_.empty()) { | 310 if (!auth_token_.empty()) { |
292 profile_image_fetcher_->SetExtraRequestHeaders( | 311 profile_image_fetcher_->SetExtraRequestHeaders( |
293 base::StringPrintf(GetAuthorizationHeader(), auth_token_.c_str())); | 312 base::StringPrintf(GetAuthorizationHeader(), auth_token_.c_str())); |
294 } | 313 } |
295 profile_image_fetcher_->Start(); | 314 profile_image_fetcher_->Start(); |
296 } else if (source == profile_image_fetcher_.get()) { | 315 } else if (source == profile_image_fetcher_.get()) { |
297 VLOG(1) << "Decoding the image..."; | 316 VLOG(1) << "Decoding the image..."; |
298 scoped_refptr<ImageDecoder> image_decoder = new ImageDecoder( | 317 scoped_refptr<ImageDecoder> image_decoder = new ImageDecoder( |
299 this, data); | 318 this, data); |
300 image_decoder->Start(); | 319 image_decoder->Start(); |
301 } | 320 } |
302 } | 321 } |
303 | 322 |
304 void ProfileDownloader::OnImageDecoded(const ImageDecoder* decoder, | 323 void ProfileDownloader::OnImageDecoded(const ImageDecoder* decoder, |
305 const SkBitmap& decoded_image) { | 324 const SkBitmap& decoded_image) { |
306 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 325 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
307 int image_size = delegate_->GetDesiredImageSideLength(); | 326 int image_size = delegate_->GetDesiredImageSideLength(); |
308 profile_picture_ = skia::ImageOperations::Resize( | 327 profile_picture_ = skia::ImageOperations::Resize( |
309 decoded_image, | 328 decoded_image, |
310 skia::ImageOperations::RESIZE_BEST, | 329 skia::ImageOperations::RESIZE_BEST, |
311 image_size, | 330 image_size, |
312 image_size); | 331 image_size); |
| 332 picture_status_ = PICTURE_SUCCESS; |
313 delegate_->OnDownloadComplete(this, true); | 333 delegate_->OnDownloadComplete(this, true); |
314 } | 334 } |
315 | 335 |
316 void ProfileDownloader::OnDecodeImageFailed(const ImageDecoder* decoder) { | 336 void ProfileDownloader::OnDecodeImageFailed(const ImageDecoder* decoder) { |
317 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
318 delegate_->OnDownloadComplete(this, false); | 338 delegate_->OnDownloadComplete(this, false); |
319 } | 339 } |
320 | 340 |
321 void ProfileDownloader::Observe( | 341 void ProfileDownloader::Observe( |
322 int type, | 342 int type, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 void ProfileDownloader::OnGetTokenSuccess(const std::string& access_token) { | 374 void ProfileDownloader::OnGetTokenSuccess(const std::string& access_token) { |
355 auth_token_ = access_token; | 375 auth_token_ = access_token; |
356 StartFetchingImage(); | 376 StartFetchingImage(); |
357 } | 377 } |
358 | 378 |
359 // Callback for OAuth2AccessTokenFetcher on failure. | 379 // Callback for OAuth2AccessTokenFetcher on failure. |
360 void ProfileDownloader::OnGetTokenFailure(const GoogleServiceAuthError& error) { | 380 void ProfileDownloader::OnGetTokenFailure(const GoogleServiceAuthError& error) { |
361 LOG(WARNING) << "ProfileDownloader: token request using refresh token failed"; | 381 LOG(WARNING) << "ProfileDownloader: token request using refresh token failed"; |
362 delegate_->OnDownloadComplete(this, false); | 382 delegate_->OnDownloadComplete(this, false); |
363 } | 383 } |
OLD | NEW |