// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// 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/image_downloader.h"
#include <vector>
#include "base/logging.h"
#include "base/message_loop.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
#include "content/browser/browser_thread.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/net/url_fetcher.h"
namespace chromeos {
namespace {
// Template for optional authorization header.
const char kAuthorizationHeader[] = "Authorization: GoogleLogin auth=%s";
} // namespace
ImageDownloader::ImageDownloader(ImageDecoder::Delegate* delegate,
const GURL& image_url,
const std::string& auth_token)
: delegate_(delegate) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
image_fetcher_.reset(new URLFetcher(GURL(image_url), URLFetcher::GET, this));
image_fetcher_->set_request_context(
ProfileManager::GetDefaultProfile()->GetRequestContext());
if (!auth_token.empty()) {
image_fetcher_->set_extra_request_headers(
base::StringPrintf(kAuthorizationHeader, auth_token.c_str()));
}
image_fetcher_->Start();
}
void ImageDownloader::OnURLFetchComplete(const URLFetcher* source,
const GURL& url,
const net::URLRequestStatus& status,
int response_code,
const ResponseCookies& cookies,
const std::string& data) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (response_code != 200) {
LOG(ERROR) << "Response code is " << response_code;
LOG(ERROR) << "Url is " << url.spec();
LOG(ERROR) << "Data is " << data;
MessageLoop::current()->DeleteSoon(FROM_HERE, this);
return;
}
VLOG(1) << "Decoding the image...";
scoped_refptr<ImageDecoder> image_decoder = new ImageDecoder(delegate_, data);
image_decoder->Start();
MessageLoop::current()->DeleteSoon(FROM_HERE, this);
}
} // namespace chromeos