| Index: chrome/browser/chromeos/gdata/gdata_operations.cc
|
| diff --git a/chrome/browser/chromeos/gdata/gdata_operations.cc b/chrome/browser/chromeos/gdata/gdata_operations.cc
|
| index e0057eb392b823f9288ef945bfcda7c37497b55f..45c59fdde68a6011b98636d2f61bf4c5c23f00aa 100644
|
| --- a/chrome/browser/chromeos/gdata/gdata_operations.cc
|
| +++ b/chrome/browser/chromeos/gdata/gdata_operations.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/string_number_conversions.h"
|
| #include "base/stringprintf.h"
|
| #include "base/values.h"
|
| +#include "chrome/browser/chromeos/gdata/gdata_util.h"
|
| #include "chrome/browser/chromeos/gdata/gdata_wapi_parser.h"
|
| #include "chrome/common/net/url_util.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -48,6 +49,18 @@ const char kGetDocumentEntryURLFormat[] =
|
| const char kAccountMetadataURL[] =
|
| "https://docs.google.com/feeds/metadata/default";
|
|
|
| +// URL requesting all contacts.
|
| +// TODO(derat): Per https://goo.gl/AufHP, "The feed may not contain all of the
|
| +// user's contacts, because there's a default limit on the number of results
|
| +// returned." Decide if 10000 is reasonable or not.
|
| +const char kGetContactsURL[] =
|
| + "https://www.google.com/m8/feeds/contacts/default/full"
|
| + "?alt=json&showdeleted=true&max-results=10000";
|
| +
|
| +// Query parameter optionally appended to |kGetContactsURL| to return only
|
| +// recently-updated contacts.
|
| +const char kGetContactsUpdatedMinParam[] = "updated-min";
|
| +
|
| const char kUploadContentRange[] = "Content-Range: bytes ";
|
| const char kUploadContentType[] = "X-Upload-Content-Type: ";
|
| const char kUploadContentLength[] = "X-Upload-Content-Length: ";
|
| @@ -875,4 +888,62 @@ void ResumeUploadOperation::OnURLFetchUploadProgress(
|
| NotifyProgress(params_.start_range + current, params_.content_length);
|
| }
|
|
|
| +//============================ GetContactsOperation ============================
|
| +
|
| +GetContactsOperation::GetContactsOperation(GDataOperationRegistry* registry,
|
| + Profile* profile,
|
| + const base::Time& min_update_time,
|
| + const GetDataCallback& callback)
|
| + : GetDataOperation(registry, profile, callback),
|
| + min_update_time_(min_update_time) {
|
| +}
|
| +
|
| +GetContactsOperation::~GetContactsOperation() {}
|
| +
|
| +GURL GetContactsOperation::GetURL() const {
|
| + if (!feed_url_for_testing_.is_empty())
|
| + return GURL(feed_url_for_testing_);
|
| +
|
| + GURL url(kGetContactsURL);
|
| + if (!min_update_time_.is_null()) {
|
| + std::string time_rfc3339 = util::FormatTimeAsString(min_update_time_);
|
| + url = chrome_common_net::AppendQueryParameter(
|
| + url, kGetContactsUpdatedMinParam, time_rfc3339);
|
| + }
|
| + return url;
|
| +}
|
| +
|
| +//========================== GetContactPhotoOperation ==========================
|
| +
|
| +GetContactPhotoOperation::GetContactPhotoOperation(
|
| + GDataOperationRegistry* registry,
|
| + Profile* profile,
|
| + const GURL& photo_url,
|
| + const GetDownloadDataCallback& callback)
|
| + : UrlFetchOperationBase(registry, profile),
|
| + photo_url_(photo_url),
|
| + callback_(callback) {
|
| +}
|
| +
|
| +GetContactPhotoOperation::~GetContactPhotoOperation() {}
|
| +
|
| +GURL GetContactPhotoOperation::GetURL() const {
|
| + return photo_url_;
|
| +}
|
| +
|
| +bool GetContactPhotoOperation::ProcessURLFetchResults(
|
| + const net::URLFetcher* source) {
|
| + GDataErrorCode code = static_cast<GDataErrorCode>(source->GetResponseCode());
|
| + scoped_ptr<std::string> data(new std::string);
|
| + source->GetResponseAsString(data.get());
|
| + callback_.Run(code, data.Pass());
|
| + return code == HTTP_SUCCESS;
|
| +}
|
| +
|
| +void GetContactPhotoOperation::RunCallbackOnPrematureFailure(
|
| + GDataErrorCode code) {
|
| + scoped_ptr<std::string> data(new std::string);
|
| + callback_.Run(code, data.Pass());
|
| +}
|
| +
|
| } // namespace gdata
|
|
|