Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9921)

Unified Diff: chrome/browser/chromeos/gdata/gdata_operations.cc

Issue 10920091: Move Drive API files to google_apis directory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reflect comments Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
deleted file mode 100644
index a4471e14f230432be7ffa78a97c51326c1f7eafd..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/gdata/gdata_operations.cc
+++ /dev/null
@@ -1,1017 +0,0 @@
-// 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 "chrome/browser/chromeos/gdata/gdata_operations.h"
-
-#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"
-#include "net/base/escape.h"
-#include "net/http/http_util.h"
-#include "third_party/libxml/chromium/libxml_utils.h"
-
-using net::URLFetcher;
-
-namespace {
-
-// etag matching header.
-const char kIfMatchAllHeader[] = "If-Match: *";
-const char kIfMatchHeaderFormat[] = "If-Match: %s";
-
-// URL requesting documents list that belong to the authenticated user only
-// (handled with '/-/mine' part).
-const char kGetDocumentListURLForAllDocuments[] =
- "https://docs.google.com/feeds/default/private/full/-/mine";
-
-// URL requesting documents list in a particular directory specified by "%s"
-// that belong to the authenticated user only (handled with '/-/mine' part).
-const char kGetDocumentListURLForDirectoryFormat[] =
- "https://docs.google.com/feeds/default/private/full/%s/contents/-/mine";
-
-// URL requesting documents list of changes to documents collections.
-const char kGetChangesListURL[] =
- "https://docs.google.com/feeds/default/private/changes";
-
-// Root document list url.
-const char kDocumentListRootURL[] =
- "https://docs.google.com/feeds/default/private/full";
-
-// URL requesting single document entry whose resource id is specified by "%s".
-const char kGetDocumentEntryURLFormat[] =
- "https://docs.google.com/feeds/default/private/full/%s";
-
-// Metadata feed with things like user quota.
-const char kAccountMetadataURL[] =
- "https://docs.google.com/feeds/metadata/default";
-
-// 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";
-
-const char kUploadContentRange[] = "Content-Range: bytes ";
-const char kUploadContentType[] = "X-Upload-Content-Type: ";
-const char kUploadContentLength[] = "X-Upload-Content-Length: ";
-
-#ifndef NDEBUG
-// Use smaller 'page' size while debugging to ensure we hit feed reload
-// almost always. Be careful not to use something too small on account that
-// have many items because server side 503 error might kick in.
-const int kMaxDocumentsPerFeed = 500;
-const int kMaxDocumentsPerSearchFeed = 50;
-#else
-const int kMaxDocumentsPerFeed = 500;
-const int kMaxDocumentsPerSearchFeed = 50;
-#endif
-
-const char kFeedField[] = "feed";
-
-// Templates for file uploading.
-const char kUploadParamConvertKey[] = "convert";
-const char kUploadParamConvertValue[] = "false";
-const char kUploadResponseLocation[] = "location";
-const char kUploadResponseRange[] = "range";
-
-// Adds additional parameters for API version, output content type and to show
-// folders in the feed are added to document feed URLs.
-GURL AddStandardUrlParams(const GURL& url) {
- GURL result =
- chrome_common_net::AppendOrReplaceQueryParameter(url, "v", "3");
- result =
- chrome_common_net::AppendOrReplaceQueryParameter(result, "alt", "json");
- return result;
-}
-
-// Adds additional parameters to metadata feed to include installed 3rd party
-// applications.
-GURL AddMetadataUrlParams(const GURL& url) {
- GURL result = AddStandardUrlParams(url);
- result = chrome_common_net::AppendOrReplaceQueryParameter(
- result, "include-installed-apps", "true");
- return result;
-}
-
-// Adds additional parameters for API version, output content type and to show
-// folders in the feed are added to document feed URLs.
-GURL AddFeedUrlParams(const GURL& url,
- int num_items_to_fetch,
- int changestamp,
- const std::string& search_string) {
- GURL result = AddStandardUrlParams(url);
- result = chrome_common_net::AppendOrReplaceQueryParameter(
- result,
- "showfolders",
- "true");
- result = chrome_common_net::AppendOrReplaceQueryParameter(
- result,
- "max-results",
- base::StringPrintf("%d", num_items_to_fetch));
- result = chrome_common_net::AppendOrReplaceQueryParameter(
- result, "include-installed-apps", "true");
-
- if (changestamp) {
- result = chrome_common_net::AppendQueryParameter(
- result,
- "start-index",
- base::StringPrintf("%d", changestamp));
- }
-
- if (!search_string.empty()) {
- result = chrome_common_net::AppendOrReplaceQueryParameter(
- result, "q", search_string);
- }
- return result;
-}
-
-// Formats a URL for getting document list. If |directory_resource_id| is
-// empty, returns a URL for fetching all documents. If it's given, returns a
-// URL for fetching documents in a particular directory.
-GURL FormatDocumentListURL(const std::string& directory_resource_id) {
- if (directory_resource_id.empty())
- return GURL(kGetDocumentListURLForAllDocuments);
-
- return GURL(base::StringPrintf(kGetDocumentListURLForDirectoryFormat,
- net::EscapePath(
- directory_resource_id).c_str()));
-}
-
-} // namespace
-
-namespace gdata {
-
-//============================ Structs ===========================
-
-ResumeUploadResponse::ResumeUploadResponse(GDataErrorCode code,
- int64 start_range_received,
- int64 end_range_received)
- : code(code),
- start_range_received(start_range_received),
- end_range_received(end_range_received) {
-}
-
-ResumeUploadResponse::~ResumeUploadResponse() {
-}
-
-InitiateUploadParams::InitiateUploadParams(
- UploadMode upload_mode,
- const std::string& title,
- const std::string& content_type,
- int64 content_length,
- const GURL& upload_location,
- const FilePath& virtual_path)
- : upload_mode(upload_mode),
- title(title),
- content_type(content_type),
- content_length(content_length),
- upload_location(upload_location),
- virtual_path(virtual_path) {
-}
-
-InitiateUploadParams::~InitiateUploadParams() {
-}
-
-ResumeUploadParams::ResumeUploadParams(
- UploadMode upload_mode,
- int64 start_range,
- int64 end_range,
- int64 content_length,
- const std::string& content_type,
- scoped_refptr<net::IOBuffer> buf,
- const GURL& upload_location,
- const FilePath& virtual_path) : upload_mode(upload_mode),
- start_range(start_range),
- end_range(end_range),
- content_length(content_length),
- content_type(content_type),
- buf(buf),
- upload_location(upload_location),
- virtual_path(virtual_path) {
-}
-
-ResumeUploadParams::~ResumeUploadParams() {
-}
-
-//============================ GetDocumentsOperation ===========================
-
-GetDocumentsOperation::GetDocumentsOperation(
- OperationRegistry* registry,
- const GURL& url,
- int start_changestamp,
- const std::string& search_string,
- const std::string& directory_resource_id,
- const GetDataCallback& callback)
- : GetDataOperation(registry, callback),
- override_url_(url),
- start_changestamp_(start_changestamp),
- search_string_(search_string),
- directory_resource_id_(directory_resource_id) {
-}
-
-GetDocumentsOperation::~GetDocumentsOperation() {}
-
-GURL GetDocumentsOperation::GetURL() const {
- int max_docs = search_string_.empty() ? kMaxDocumentsPerFeed :
- kMaxDocumentsPerSearchFeed;
-
- if (!override_url_.is_empty())
- return AddFeedUrlParams(override_url_,
- max_docs,
- 0,
- search_string_);
-
- if (start_changestamp_ == 0) {
- return AddFeedUrlParams(FormatDocumentListURL(directory_resource_id_),
- max_docs,
- 0,
- search_string_);
- }
-
- return AddFeedUrlParams(GURL(kGetChangesListURL),
- kMaxDocumentsPerFeed,
- start_changestamp_,
- std::string());
-}
-
-//============================ GetDocumentEntryOperation =======================
-
-GetDocumentEntryOperation::GetDocumentEntryOperation(
- OperationRegistry* registry,
- const std::string& resource_id,
- const GetDataCallback& callback)
- : GetDataOperation(registry, callback),
- resource_id_(resource_id) {
-}
-
-GetDocumentEntryOperation::~GetDocumentEntryOperation() {}
-
-GURL GetDocumentEntryOperation::GetURL() const {
- GURL result = GURL(base::StringPrintf(kGetDocumentEntryURLFormat,
- net::EscapePath(resource_id_).c_str()));
- return AddStandardUrlParams(result);
-}
-
-//========================= GetAccountMetadataOperation ========================
-
-GetAccountMetadataOperation::GetAccountMetadataOperation(
- OperationRegistry* registry,
- const GetDataCallback& callback)
- : GetDataOperation(registry, callback) {
-}
-
-GetAccountMetadataOperation::~GetAccountMetadataOperation() {}
-
-GURL GetAccountMetadataOperation::GetURL() const {
- return AddMetadataUrlParams(GURL(kAccountMetadataURL));
-}
-
-//============================ DownloadFileOperation ===========================
-
-DownloadFileOperation::DownloadFileOperation(
- OperationRegistry* registry,
- const DownloadActionCallback& download_action_callback,
- const GetContentCallback& get_content_callback,
- const GURL& document_url,
- const FilePath& virtual_path,
- const FilePath& output_file_path)
- : UrlFetchOperationBase(registry,
- OperationRegistry::OPERATION_DOWNLOAD,
- virtual_path),
- download_action_callback_(download_action_callback),
- get_content_callback_(get_content_callback),
- document_url_(document_url) {
- // Make sure we download the content into a temp file.
- if (output_file_path.empty())
- save_temp_file_ = true;
- else
- output_file_path_ = output_file_path;
-}
-
-DownloadFileOperation::~DownloadFileOperation() {}
-
-// Overridden from UrlFetchOperationBase.
-GURL DownloadFileOperation::GetURL() const {
- return document_url_;
-}
-
-void DownloadFileOperation::OnURLFetchDownloadProgress(const URLFetcher* source,
- int64 current,
- int64 total) {
- NotifyProgress(current, total);
-}
-
-bool DownloadFileOperation::ShouldSendDownloadData() {
- return !get_content_callback_.is_null();
-}
-
-void DownloadFileOperation::OnURLFetchDownloadData(
- const URLFetcher* source,
- scoped_ptr<std::string> download_data) {
- if (!get_content_callback_.is_null())
- get_content_callback_.Run(HTTP_SUCCESS, download_data.Pass());
-}
-
-void DownloadFileOperation::ProcessURLFetchResults(const URLFetcher* source) {
- GDataErrorCode code = GetErrorCode(source);
-
- // Take over the ownership of the the downloaded temp file.
- FilePath temp_file;
- if (code == HTTP_SUCCESS &&
- !source->GetResponseAsFilePath(true, // take_ownership
- &temp_file)) {
- code = GDATA_FILE_ERROR;
- }
-
- if (!download_action_callback_.is_null())
- download_action_callback_.Run(code, document_url_, temp_file);
- OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS);
-}
-
-void DownloadFileOperation::RunCallbackOnPrematureFailure(GDataErrorCode code) {
- if (!download_action_callback_.is_null())
- download_action_callback_.Run(code, document_url_, FilePath());
-}
-
-//=========================== DeleteDocumentOperation ==========================
-
-DeleteDocumentOperation::DeleteDocumentOperation(
- OperationRegistry* registry,
- const EntryActionCallback& callback,
- const GURL& document_url)
- : EntryActionOperation(registry, callback, document_url) {
-}
-
-DeleteDocumentOperation::~DeleteDocumentOperation() {}
-
-GURL DeleteDocumentOperation::GetURL() const {
- return AddStandardUrlParams(document_url());
-}
-
-URLFetcher::RequestType DeleteDocumentOperation::GetRequestType() const {
- return URLFetcher::DELETE_REQUEST;
-}
-
-std::vector<std::string>
-DeleteDocumentOperation::GetExtraRequestHeaders() const {
- std::vector<std::string> headers;
- headers.push_back(kIfMatchAllHeader);
- return headers;
-}
-
-//========================== CreateDirectoryOperation ==========================
-
-CreateDirectoryOperation::CreateDirectoryOperation(
- OperationRegistry* registry,
- const GetDataCallback& callback,
- const GURL& parent_content_url,
- const FilePath::StringType& directory_name)
- : GetDataOperation(registry, callback),
- parent_content_url_(parent_content_url),
- directory_name_(directory_name) {
-}
-
-CreateDirectoryOperation::~CreateDirectoryOperation() {}
-
-GURL CreateDirectoryOperation::GetURL() const {
- if (!parent_content_url_.is_empty())
- return AddStandardUrlParams(parent_content_url_);
-
- return AddStandardUrlParams(GURL(kDocumentListRootURL));
-}
-
-URLFetcher::RequestType
-CreateDirectoryOperation::GetRequestType() const {
- return URLFetcher::POST;
-}
-
-bool CreateDirectoryOperation::GetContentData(std::string* upload_content_type,
- std::string* upload_content) {
- upload_content_type->assign("application/atom+xml");
- XmlWriter xml_writer;
- xml_writer.StartWriting();
- xml_writer.StartElement("entry");
- xml_writer.AddAttribute("xmlns", "http://www.w3.org/2005/Atom");
-
- xml_writer.StartElement("category");
- xml_writer.AddAttribute("scheme",
- "http://schemas.google.com/g/2005#kind");
- xml_writer.AddAttribute("term",
- "http://schemas.google.com/docs/2007#folder");
- xml_writer.EndElement(); // Ends "category" element.
-
- xml_writer.WriteElement("title", FilePath(directory_name_).AsUTF8Unsafe());
-
- xml_writer.EndElement(); // Ends "entry" element.
- xml_writer.StopWriting();
- upload_content->assign(xml_writer.GetWrittenString());
- DVLOG(1) << "CreateDirectory data: " << *upload_content_type << ", ["
- << *upload_content << "]";
- return true;
-}
-
-//============================ CopyDocumentOperation ===========================
-
-CopyDocumentOperation::CopyDocumentOperation(
- OperationRegistry* registry,
- const GetDataCallback& callback,
- const std::string& resource_id,
- const FilePath::StringType& new_name)
- : GetDataOperation(registry, callback),
- resource_id_(resource_id),
- new_name_(new_name) {
-}
-
-CopyDocumentOperation::~CopyDocumentOperation() {}
-
-URLFetcher::RequestType CopyDocumentOperation::GetRequestType() const {
- return URLFetcher::POST;
-}
-
-GURL CopyDocumentOperation::GetURL() const {
- return AddStandardUrlParams(GURL(kDocumentListRootURL));
-}
-
-bool CopyDocumentOperation::GetContentData(std::string* upload_content_type,
- std::string* upload_content) {
- upload_content_type->assign("application/atom+xml");
- XmlWriter xml_writer;
- xml_writer.StartWriting();
- xml_writer.StartElement("entry");
- xml_writer.AddAttribute("xmlns", "http://www.w3.org/2005/Atom");
-
- xml_writer.WriteElement("id", resource_id_);
- xml_writer.WriteElement("title", FilePath(new_name_).AsUTF8Unsafe());
-
- xml_writer.EndElement(); // Ends "entry" element.
- xml_writer.StopWriting();
- upload_content->assign(xml_writer.GetWrittenString());
- DVLOG(1) << "CopyDocumentOperation data: " << *upload_content_type << ", ["
- << *upload_content << "]";
- return true;
-}
-
-//=========================== RenameResourceOperation ==========================
-
-RenameResourceOperation::RenameResourceOperation(
- OperationRegistry* registry,
- const EntryActionCallback& callback,
- const GURL& document_url,
- const FilePath::StringType& new_name)
- : EntryActionOperation(registry, callback, document_url),
- new_name_(new_name) {
-}
-
-RenameResourceOperation::~RenameResourceOperation() {}
-
-URLFetcher::RequestType RenameResourceOperation::GetRequestType() const {
- return URLFetcher::PUT;
-}
-
-std::vector<std::string>
-RenameResourceOperation::GetExtraRequestHeaders() const {
- std::vector<std::string> headers;
- headers.push_back(kIfMatchAllHeader);
- return headers;
-}
-
-GURL RenameResourceOperation::GetURL() const {
- return AddStandardUrlParams(document_url());
-}
-
-bool RenameResourceOperation::GetContentData(std::string* upload_content_type,
- std::string* upload_content) {
- upload_content_type->assign("application/atom+xml");
- XmlWriter xml_writer;
- xml_writer.StartWriting();
- xml_writer.StartElement("entry");
- xml_writer.AddAttribute("xmlns", "http://www.w3.org/2005/Atom");
-
- xml_writer.WriteElement("title", FilePath(new_name_).AsUTF8Unsafe());
-
- xml_writer.EndElement(); // Ends "entry" element.
- xml_writer.StopWriting();
- upload_content->assign(xml_writer.GetWrittenString());
- DVLOG(1) << "RenameResourceOperation data: " << *upload_content_type << ", ["
- << *upload_content << "]";
- return true;
-}
-
-//=========================== AuthorizeAppOperation ==========================
-
-AuthorizeAppsOperation::AuthorizeAppsOperation(
- OperationRegistry* registry,
- const GetDataCallback& callback,
- const GURL& document_url,
- const std::string& app_id)
- : GetDataOperation(registry, callback),
- app_id_(app_id),
- document_url_(document_url) {
-}
-
-AuthorizeAppsOperation::~AuthorizeAppsOperation() {}
-
-URLFetcher::RequestType AuthorizeAppsOperation::GetRequestType() const {
- return URLFetcher::PUT;
-}
-
-std::vector<std::string>
-AuthorizeAppsOperation::GetExtraRequestHeaders() const {
- std::vector<std::string> headers;
- headers.push_back(kIfMatchAllHeader);
- return headers;
-}
-
-void AuthorizeAppsOperation::ProcessURLFetchResults(const URLFetcher* source) {
- std::string data;
- source->GetResponseAsString(&data);
- GetDataOperation::ProcessURLFetchResults(source);
-}
-
-bool AuthorizeAppsOperation::GetContentData(std::string* upload_content_type,
- std::string* upload_content) {
- upload_content_type->assign("application/atom+xml");
- XmlWriter xml_writer;
- xml_writer.StartWriting();
- xml_writer.StartElement("entry");
- xml_writer.AddAttribute("xmlns", "http://www.w3.org/2005/Atom");
- xml_writer.AddAttribute("xmlns:docs", "http://schemas.google.com/docs/2007");
- xml_writer.WriteElement("docs:authorizedApp", app_id_);
-
- xml_writer.EndElement(); // Ends "entry" element.
- xml_writer.StopWriting();
- upload_content->assign(xml_writer.GetWrittenString());
- DVLOG(1) << "AuthorizeAppOperation data: " << *upload_content_type << ", ["
- << *upload_content << "]";
- return true;
-}
-
-void AuthorizeAppsOperation::ParseResponse(
- GDataErrorCode fetch_error_code,
- const std::string& data) {
- // Parse entry XML.
- XmlReader xml_reader;
- scoped_ptr<DocumentEntry> entry;
- if (xml_reader.Load(data)) {
- while (xml_reader.Read()) {
- if (xml_reader.NodeName() == DocumentEntry::GetEntryNodeName()) {
- entry.reset(DocumentEntry::CreateFromXml(&xml_reader));
- break;
- }
- }
- }
-
- // From the response, we create a list of the links returned, since those
- // are the only things we are interested in.
- scoped_ptr<base::ListValue> link_list(new ListValue);
- const ScopedVector<Link>& feed_links = entry->links();
- for (ScopedVector<Link>::const_iterator iter = feed_links.begin();
- iter != feed_links.end(); ++iter) {
- if ((*iter)->type() == Link::LINK_OPEN_WITH) {
- base::DictionaryValue* link = new DictionaryValue;
- link->SetString(std::string("href"), (*iter)->href().spec());
- link->SetString(std::string("mime_type"), (*iter)->mime_type());
- link->SetString(std::string("title"), (*iter)->title());
- link->SetString(std::string("app_id"), (*iter)->app_id());
- link_list->Append(link);
- }
- }
-
- RunCallback(fetch_error_code, link_list.PassAs<base::Value>());
- const bool success = true;
- OnProcessURLFetchResultsComplete(success);
-}
-
-GURL AuthorizeAppsOperation::GetURL() const {
- return document_url_;
-}
-
-//======================= AddResourceToDirectoryOperation ======================
-
-AddResourceToDirectoryOperation::AddResourceToDirectoryOperation(
- OperationRegistry* registry,
- const EntryActionCallback& callback,
- const GURL& parent_content_url,
- const GURL& document_url)
- : EntryActionOperation(registry, callback, document_url),
- parent_content_url_(parent_content_url) {
-}
-
-AddResourceToDirectoryOperation::~AddResourceToDirectoryOperation() {}
-
-GURL AddResourceToDirectoryOperation::GetURL() const {
- if (!parent_content_url_.is_empty())
- return AddStandardUrlParams(parent_content_url_);
-
- return AddStandardUrlParams(GURL(kDocumentListRootURL));
-}
-
-URLFetcher::RequestType
-AddResourceToDirectoryOperation::GetRequestType() const {
- return URLFetcher::POST;
-}
-
-bool AddResourceToDirectoryOperation::GetContentData(
- std::string* upload_content_type, std::string* upload_content) {
- upload_content_type->assign("application/atom+xml");
- XmlWriter xml_writer;
- xml_writer.StartWriting();
- xml_writer.StartElement("entry");
- xml_writer.AddAttribute("xmlns", "http://www.w3.org/2005/Atom");
-
- xml_writer.WriteElement("id", document_url().spec());
-
- xml_writer.EndElement(); // Ends "entry" element.
- xml_writer.StopWriting();
- upload_content->assign(xml_writer.GetWrittenString());
- DVLOG(1) << "AddResourceToDirectoryOperation data: " << *upload_content_type
- << ", [" << *upload_content << "]";
- return true;
-}
-
-//==================== RemoveResourceFromDirectoryOperation ====================
-
-RemoveResourceFromDirectoryOperation::RemoveResourceFromDirectoryOperation(
- OperationRegistry* registry,
- const EntryActionCallback& callback,
- const GURL& parent_content_url,
- const GURL& document_url,
- const std::string& document_resource_id)
- : EntryActionOperation(registry, callback, document_url),
- resource_id_(document_resource_id),
- parent_content_url_(parent_content_url) {
-}
-
-RemoveResourceFromDirectoryOperation::~RemoveResourceFromDirectoryOperation() {
-}
-
-GURL RemoveResourceFromDirectoryOperation::GetURL() const {
- std::string escaped_resource_id = net::EscapePath(resource_id_);
- GURL edit_url(base::StringPrintf("%s/%s",
- parent_content_url_.spec().c_str(),
- escaped_resource_id.c_str()));
- return AddStandardUrlParams(edit_url);
-}
-
-URLFetcher::RequestType
-RemoveResourceFromDirectoryOperation::GetRequestType() const {
- return URLFetcher::DELETE_REQUEST;
-}
-
-std::vector<std::string>
-RemoveResourceFromDirectoryOperation::GetExtraRequestHeaders() const {
- std::vector<std::string> headers;
- headers.push_back(kIfMatchAllHeader);
- return headers;
-}
-
-//=========================== InitiateUploadOperation ==========================
-
-InitiateUploadOperation::InitiateUploadOperation(
- OperationRegistry* registry,
- const InitiateUploadCallback& callback,
- const InitiateUploadParams& params)
- : UrlFetchOperationBase(registry,
- OperationRegistry::OPERATION_UPLOAD,
- params.virtual_path),
- callback_(callback),
- params_(params),
- initiate_upload_url_(chrome_common_net::AppendOrReplaceQueryParameter(
- params.upload_location,
- kUploadParamConvertKey,
- kUploadParamConvertValue)) {
-}
-
-InitiateUploadOperation::~InitiateUploadOperation() {}
-
-GURL InitiateUploadOperation::GetURL() const {
- return initiate_upload_url_;
-}
-
-void InitiateUploadOperation::ProcessURLFetchResults(
- const URLFetcher* source) {
- GDataErrorCode code = GetErrorCode(source);
-
- std::string upload_location;
- if (code == HTTP_SUCCESS) {
- // Retrieve value of the first "Location" header.
- source->GetResponseHeaders()->EnumerateHeader(NULL,
- kUploadResponseLocation,
- &upload_location);
- }
- VLOG(1) << "Got response for [" << params_.title
- << "]: code=" << code
- << ", location=[" << upload_location << "]";
-
- if (!callback_.is_null())
- callback_.Run(code, GURL(upload_location));
- OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS);
-}
-
-void InitiateUploadOperation::NotifySuccessToOperationRegistry() {
- NotifySuspend();
-}
-
-void InitiateUploadOperation::RunCallbackOnPrematureFailure(
- GDataErrorCode code) {
- if (!callback_.is_null())
- callback_.Run(code, GURL());
-}
-
-URLFetcher::RequestType InitiateUploadOperation::GetRequestType() const {
- if (params_.upload_mode == UPLOAD_NEW_FILE)
- return URLFetcher::POST;
-
- DCHECK_EQ(UPLOAD_EXISTING_FILE, params_.upload_mode);
- return URLFetcher::PUT;
-}
-
-std::vector<std::string>
-InitiateUploadOperation::GetExtraRequestHeaders() const {
- std::vector<std::string> headers;
- if (!params_.content_type.empty())
- headers.push_back(kUploadContentType + params_.content_type);
-
- headers.push_back(
- kUploadContentLength + base::Int64ToString(params_.content_length));
-
- if (params_.upload_mode == UPLOAD_EXISTING_FILE)
- headers.push_back("If-Match: *");
-
- return headers;
-}
-
-bool InitiateUploadOperation::GetContentData(std::string* upload_content_type,
- std::string* upload_content) {
- if (params_.upload_mode == UPLOAD_EXISTING_FILE) {
- // When uploading an existing file, the body is empty as we don't modify
- // the metadata.
- *upload_content = "";
- // Even though the body is empty, Content-Type should be set to
- // "text/plain". Otherwise, the server won't accept.
- *upload_content_type = "text/plain";
- return true;
- }
-
- DCHECK_EQ(UPLOAD_NEW_FILE, params_.upload_mode);
- upload_content_type->assign("application/atom+xml");
- XmlWriter xml_writer;
- xml_writer.StartWriting();
- xml_writer.StartElement("entry");
- xml_writer.AddAttribute("xmlns", "http://www.w3.org/2005/Atom");
- xml_writer.AddAttribute("xmlns:docs",
- "http://schemas.google.com/docs/2007");
- xml_writer.WriteElement("title", params_.title);
- xml_writer.EndElement(); // Ends "entry" element.
- xml_writer.StopWriting();
- upload_content->assign(xml_writer.GetWrittenString());
- DVLOG(1) << "Upload data: " << *upload_content_type << ", ["
- << *upload_content << "]";
- return true;
-}
-
-//============================ ResumeUploadOperation ===========================
-
-ResumeUploadOperation::ResumeUploadOperation(
- OperationRegistry* registry,
- const ResumeUploadCallback& callback,
- const ResumeUploadParams& params)
- : UrlFetchOperationBase(registry,
- OperationRegistry::OPERATION_UPLOAD,
- params.virtual_path),
- callback_(callback),
- params_(params),
- last_chunk_completed_(false) {
-}
-
-ResumeUploadOperation::~ResumeUploadOperation() {}
-
-GURL ResumeUploadOperation::GetURL() const {
- return params_.upload_location;
-}
-
-void ResumeUploadOperation::ProcessURLFetchResults(const URLFetcher* source) {
- GDataErrorCode code = GetErrorCode(source);
- net::HttpResponseHeaders* hdrs = source->GetResponseHeaders();
- int64 start_range_received = -1;
- int64 end_range_received = -1;
- scoped_ptr<DocumentEntry> entry;
-
- if (code == HTTP_RESUME_INCOMPLETE) {
- // Retrieve value of the first "Range" header.
- std::string range_received;
- hdrs->EnumerateHeader(NULL, kUploadResponseRange, &range_received);
- if (!range_received.empty()) { // Parse the range header.
- std::vector<net::HttpByteRange> ranges;
- if (net::HttpUtil::ParseRangeHeader(range_received, &ranges) &&
- !ranges.empty() ) {
- // We only care about the first start-end pair in the range.
- start_range_received = ranges[0].first_byte_position();
- end_range_received = ranges[0].last_byte_position();
- }
- }
- DVLOG(1) << "Got response for [" << params_.virtual_path.value()
- << "]: code=" << code
- << ", range_hdr=[" << range_received
- << "], range_parsed=" << start_range_received
- << "," << end_range_received;
- } else {
- // There might be explanation of unexpected error code in response.
- std::string response_content;
- source->GetResponseAsString(&response_content);
- DVLOG(1) << "Got response for [" << params_.virtual_path.value()
- << "]: code=" << code
- << ", content=[\n" << response_content << "\n]";
-
- // Parse entry XML.
- XmlReader xml_reader;
- if (xml_reader.Load(response_content)) {
- while (xml_reader.Read()) {
- if (xml_reader.NodeName() == DocumentEntry::GetEntryNodeName()) {
- entry.reset(DocumentEntry::CreateFromXml(&xml_reader));
- break;
- }
- }
- }
- if (!entry.get())
- LOG(WARNING) << "Invalid entry received on upload:\n" << response_content;
- }
-
- if (!callback_.is_null()) {
- callback_.Run(ResumeUploadResponse(code,
- start_range_received,
- end_range_received),
- entry.Pass());
- }
-
- // For a new file, HTTP_CREATED is returned.
- // For an existing file, HTTP_SUCCESS is returned.
- if ((params_.upload_mode == UPLOAD_NEW_FILE && code == HTTP_CREATED) ||
- (params_.upload_mode == UPLOAD_EXISTING_FILE && code == HTTP_SUCCESS)) {
- last_chunk_completed_ = true;
- }
-
- OnProcessURLFetchResultsComplete(
- last_chunk_completed_ || code == HTTP_RESUME_INCOMPLETE);
-}
-
-void ResumeUploadOperation::NotifyStartToOperationRegistry() {
- NotifyResume();
-}
-
-void ResumeUploadOperation::NotifySuccessToOperationRegistry() {
- if (last_chunk_completed_)
- NotifyFinish(OperationRegistry::OPERATION_COMPLETED);
- else
- NotifySuspend();
-}
-
-void ResumeUploadOperation::RunCallbackOnPrematureFailure(GDataErrorCode code) {
- scoped_ptr<DocumentEntry> entry;
- if (!callback_.is_null())
- callback_.Run(ResumeUploadResponse(code, 0, 0), entry.Pass());
-}
-
-URLFetcher::RequestType ResumeUploadOperation::GetRequestType() const {
- return URLFetcher::PUT;
-}
-
-std::vector<std::string> ResumeUploadOperation::GetExtraRequestHeaders() const {
- if (params_.content_length == 0) {
- // For uploading an empty document, just PUT an empty content.
- DCHECK_EQ(params_.start_range, 0);
- DCHECK_EQ(params_.end_range, -1);
- return std::vector<std::string>();
- }
-
- // The header looks like
- // Content-Range: bytes <start_range>-<end_range>/<content_length>
- // for example:
- // Content-Range: bytes 7864320-8388607/13851821
- // Use * for unknown/streaming content length.
- DCHECK_GE(params_.start_range, 0);
- DCHECK_GE(params_.end_range, 0);
- DCHECK_GE(params_.content_length, -1);
-
- std::vector<std::string> headers;
- headers.push_back(
- std::string(kUploadContentRange) +
- base::Int64ToString(params_.start_range) + "-" +
- base::Int64ToString(params_.end_range) + "/" +
- (params_.content_length == -1 ? "*" :
- base::Int64ToString(params_.content_length)));
- return headers;
-}
-
-bool ResumeUploadOperation::GetContentData(std::string* upload_content_type,
- std::string* upload_content) {
- *upload_content_type = params_.content_type;
- *upload_content = std::string(params_.buf->data(),
- params_.end_range - params_.start_range + 1);
- return true;
-}
-
-void ResumeUploadOperation::OnURLFetchUploadProgress(
- const URLFetcher* source, int64 current, int64 total) {
- // Adjust the progress values according to the range currently uploaded.
- NotifyProgress(params_.start_range + current, params_.content_length);
-}
-
-//========================== GetContactGroupsOperation =========================
-
-GetContactGroupsOperation::GetContactGroupsOperation(
- OperationRegistry* registry,
- const GetDataCallback& callback)
- : GetDataOperation(registry, callback) {
-}
-
-GetContactGroupsOperation::~GetContactGroupsOperation() {}
-
-GURL GetContactGroupsOperation::GetURL() const {
- return !feed_url_for_testing_.is_empty() ?
- feed_url_for_testing_ :
- GURL(kGetContactGroupsURL);
-}
-
-//============================ GetContactsOperation ============================
-
-GetContactsOperation::GetContactsOperation(OperationRegistry* registry,
- const std::string& group_id,
- const base::Time& min_update_time,
- const GetDataCallback& callback)
- : GetDataOperation(registry, callback),
- group_id_(group_id),
- 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 (!group_id_.empty()) {
- url = chrome_common_net::AppendQueryParameter(
- url, kGetContactsGroupParam, group_id_);
- }
- 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(
- OperationRegistry* registry,
- const GURL& photo_url,
- const GetContentCallback& callback)
- : UrlFetchOperationBase(registry),
- photo_url_(photo_url),
- callback_(callback) {
-}
-
-GetContactPhotoOperation::~GetContactPhotoOperation() {}
-
-GURL GetContactPhotoOperation::GetURL() const {
- return photo_url_;
-}
-
-void 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());
- OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS);
-}
-
-void GetContactPhotoOperation::RunCallbackOnPrematureFailure(
- GDataErrorCode code) {
- scoped_ptr<std::string> data(new std::string);
- callback_.Run(code, data.Pass());
-}
-
-} // namespace gdata
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_operations.h ('k') | chrome/browser/chromeos/gdata/gdata_operations_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698