summaryrefslogtreecommitdiff
path: root/chromium/google_apis/drive/gdata_contacts_requests.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/google_apis/drive/gdata_contacts_requests.cc')
-rw-r--r--chromium/google_apis/drive/gdata_contacts_requests.cc115
1 files changed, 115 insertions, 0 deletions
diff --git a/chromium/google_apis/drive/gdata_contacts_requests.cc b/chromium/google_apis/drive/gdata_contacts_requests.cc
new file mode 100644
index 00000000000..11419af449b
--- /dev/null
+++ b/chromium/google_apis/drive/gdata_contacts_requests.cc
@@ -0,0 +1,115 @@
+// Copyright (c) 2012 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 "google_apis/drive/gdata_contacts_requests.h"
+
+#include "google_apis/drive/time_util.h"
+#include "net/base/url_util.h"
+#include "url/gurl.h"
+
+namespace google_apis {
+
+namespace {
+
+// URL requesting all contact groups.
+const char kGetContactGroupsURL[] =
+ "https://www.google.com/m8/feeds/groups/default/full?alt=json";
+
+// 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 contacts
+// from a specific group (as opposed to all contacts).
+const char kGetContactsGroupParam[] = "group";
+
+// Query parameter optionally appended to |kGetContactsURL| to return only
+// recently-updated contacts.
+const char kGetContactsUpdatedMinParam[] = "updated-min";
+
+} // namespace
+
+//========================== GetContactGroupsRequest =========================
+
+GetContactGroupsRequest::GetContactGroupsRequest(
+ RequestSender* runner,
+ const GetDataCallback& callback)
+ : GetDataRequest(runner, callback) {
+}
+
+GetContactGroupsRequest::~GetContactGroupsRequest() {}
+
+GURL GetContactGroupsRequest::GetURL() const {
+ return !feed_url_for_testing_.is_empty() ?
+ feed_url_for_testing_ :
+ GURL(kGetContactGroupsURL);
+}
+
+//============================ GetContactsRequest ============================
+
+GetContactsRequest::GetContactsRequest(
+ RequestSender* runner,
+ const std::string& group_id,
+ const base::Time& min_update_time,
+ const GetDataCallback& callback)
+ : GetDataRequest(runner, callback),
+ group_id_(group_id),
+ min_update_time_(min_update_time) {
+}
+
+GetContactsRequest::~GetContactsRequest() {}
+
+GURL GetContactsRequest::GetURL() const {
+ if (!feed_url_for_testing_.is_empty())
+ return GURL(feed_url_for_testing_);
+
+ GURL url(kGetContactsURL);
+
+ if (!group_id_.empty()) {
+ url = net::AppendQueryParameter(url, kGetContactsGroupParam, group_id_);
+ }
+ if (!min_update_time_.is_null()) {
+ std::string time_rfc3339 = util::FormatTimeAsString(min_update_time_);
+ url = net::AppendQueryParameter(
+ url, kGetContactsUpdatedMinParam, time_rfc3339);
+ }
+ return url;
+}
+
+//========================== GetContactPhotoRequest ==========================
+
+GetContactPhotoRequest::GetContactPhotoRequest(
+ RequestSender* runner,
+ const GURL& photo_url,
+ const GetContentCallback& callback)
+ : UrlFetchRequestBase(runner),
+ photo_url_(photo_url),
+ callback_(callback) {
+}
+
+GetContactPhotoRequest::~GetContactPhotoRequest() {}
+
+GURL GetContactPhotoRequest::GetURL() const {
+ return photo_url_;
+}
+
+void GetContactPhotoRequest::ProcessURLFetchResults(
+ const net::URLFetcher* source) {
+ GDataErrorCode code = GetErrorCode();
+ scoped_ptr<std::string> data(new std::string(response_writer()->data()));
+ callback_.Run(code, data.Pass());
+ OnProcessURLFetchResultsComplete();
+}
+
+void GetContactPhotoRequest::RunCallbackOnPrematureFailure(
+ GDataErrorCode code) {
+ scoped_ptr<std::string> data(new std::string);
+ callback_.Run(code, data.Pass());
+}
+
+} // namespace google_apis