1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "google_apis/drive/gdata_contacts_requests.h" 6 7#include "google_apis/drive/time_util.h" 8#include "net/base/url_util.h" 9#include "url/gurl.h" 10 11namespace google_apis { 12 13namespace { 14 15// URL requesting all contact groups. 16const char kGetContactGroupsURL[] = 17 "https://www.google.com/m8/feeds/groups/default/full?alt=json"; 18 19// URL requesting all contacts. 20// TODO(derat): Per https://goo.gl/AufHP, "The feed may not contain all of the 21// user's contacts, because there's a default limit on the number of results 22// returned." Decide if 10000 is reasonable or not. 23const char kGetContactsURL[] = 24 "https://www.google.com/m8/feeds/contacts/default/full" 25 "?alt=json&showdeleted=true&max-results=10000"; 26 27// Query parameter optionally appended to |kGetContactsURL| to return contacts 28// from a specific group (as opposed to all contacts). 29const char kGetContactsGroupParam[] = "group"; 30 31// Query parameter optionally appended to |kGetContactsURL| to return only 32// recently-updated contacts. 33const char kGetContactsUpdatedMinParam[] = "updated-min"; 34 35} // namespace 36 37//========================== GetContactGroupsRequest ========================= 38 39GetContactGroupsRequest::GetContactGroupsRequest( 40 RequestSender* runner, 41 const GetDataCallback& callback) 42 : GetDataRequest(runner, callback) { 43} 44 45GetContactGroupsRequest::~GetContactGroupsRequest() {} 46 47GURL GetContactGroupsRequest::GetURL() const { 48 return !feed_url_for_testing_.is_empty() ? 49 feed_url_for_testing_ : 50 GURL(kGetContactGroupsURL); 51} 52 53//============================ GetContactsRequest ============================ 54 55GetContactsRequest::GetContactsRequest( 56 RequestSender* runner, 57 const std::string& group_id, 58 const base::Time& min_update_time, 59 const GetDataCallback& callback) 60 : GetDataRequest(runner, callback), 61 group_id_(group_id), 62 min_update_time_(min_update_time) { 63} 64 65GetContactsRequest::~GetContactsRequest() {} 66 67GURL GetContactsRequest::GetURL() const { 68 if (!feed_url_for_testing_.is_empty()) 69 return GURL(feed_url_for_testing_); 70 71 GURL url(kGetContactsURL); 72 73 if (!group_id_.empty()) { 74 url = net::AppendQueryParameter(url, kGetContactsGroupParam, group_id_); 75 } 76 if (!min_update_time_.is_null()) { 77 std::string time_rfc3339 = util::FormatTimeAsString(min_update_time_); 78 url = net::AppendQueryParameter( 79 url, kGetContactsUpdatedMinParam, time_rfc3339); 80 } 81 return url; 82} 83 84//========================== GetContactPhotoRequest ========================== 85 86GetContactPhotoRequest::GetContactPhotoRequest( 87 RequestSender* runner, 88 const GURL& photo_url, 89 const GetContentCallback& callback) 90 : UrlFetchRequestBase(runner), 91 photo_url_(photo_url), 92 callback_(callback) { 93} 94 95GetContactPhotoRequest::~GetContactPhotoRequest() {} 96 97GURL GetContactPhotoRequest::GetURL() const { 98 return photo_url_; 99} 100 101void GetContactPhotoRequest::ProcessURLFetchResults( 102 const net::URLFetcher* source) { 103 GDataErrorCode code = GetErrorCode(); 104 scoped_ptr<std::string> data(new std::string(response_writer()->data())); 105 callback_.Run(code, data.Pass()); 106 OnProcessURLFetchResultsComplete(); 107} 108 109void GetContactPhotoRequest::RunCallbackOnPrematureFailure( 110 GDataErrorCode code) { 111 scoped_ptr<std::string> data(new std::string); 112 callback_.Run(code, data.Pass()); 113} 114 115} // namespace google_apis 116