Index: chrome/browser/chromeos/gdata/gdata.cc |
=================================================================== |
--- chrome/browser/chromeos/gdata/gdata.cc (revision 126063) |
+++ chrome/browser/chromeos/gdata/gdata.cc (working copy) |
@@ -35,6 +35,7 @@ |
#include "content/public/browser/notification_details.h" |
#include "content/public/browser/notification_source.h" |
#include "content/public/browser/notification_types.h" |
+#include "net/base/escape.h" |
#include "net/base/file_stream.h" |
#include "net/base/load_flags.h" |
#include "net/http/http_response_headers.h" |
@@ -334,9 +335,12 @@ |
// Overridden from GDataOperationInterface. |
virtual void Start(const std::string& auth_token) OVERRIDE { |
DCHECK(!auth_token.empty()); |
+ |
GURL url = GetURL(); |
- url_fetcher_.reset(URLFetcher::Create( |
- url, GetRequestType(), this)); |
+ DCHECK(!url.is_empty()); |
+ DVLOG(1) << "URL: " << url.spec(); |
+ |
+ url_fetcher_.reset(URLFetcher::Create(url, GetRequestType(), this)); |
url_fetcher_->SetRequestContext(profile_->GetRequestContext()); |
// Always set flags to neither send nor save cookies. |
url_fetcher_->SetLoadFlags( |
@@ -356,7 +360,7 @@ |
std::vector<std::string> headers = GetExtraRequestHeaders(); |
for (size_t i = 0; i < headers.size(); ++i) { |
url_fetcher_->AddExtraRequestHeader(headers[i]); |
- DVLOG(1) << "Extra header " << headers[i]; |
+ DVLOG(1) << "Extra header: " << headers[i]; |
} |
// Set upload data if available. |
@@ -784,6 +788,258 @@ |
return true; |
} |
+//=========================== CopyDocumentOperation ============================ |
+ |
+// Operation for making a copy of a document. |
+class CopyDocumentOperation : public GetDataOperation { |
+ public: |
+ CopyDocumentOperation(GDataOperationRegistry* registry, |
+ Profile* profile, |
+ const GetDataCallback& callback, |
+ const GURL& document_url, |
+ const FilePath::StringType& new_name); |
satorux1
2012/03/12 17:48:24
just fyi: matter of taste, but for small classes l
Ben Chan
2012/03/13 00:29:21
I had a discussion with Zel that we would like to
|
+ virtual ~CopyDocumentOperation() {} |
+ |
+ private: |
+ // Overridden from GetDataOperation. |
+ virtual URLFetcher::RequestType GetRequestType() const OVERRIDE; |
+ |
+ // Overridden from UrlFetchOperation. |
+ virtual GURL GetURL() const OVERRIDE; |
+ virtual bool GetContentData(std::string* upload_content_type, |
+ std::string* upload_content) OVERRIDE; |
+ |
+ GURL document_url_; |
+ FilePath::StringType new_name_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CopyDocumentOperation); |
+}; |
+ |
+CopyDocumentOperation::CopyDocumentOperation( |
+ GDataOperationRegistry* registry, |
+ Profile* profile, |
+ const GetDataCallback& callback, |
+ const GURL& document_url, |
+ const FilePath::StringType& new_name) |
+ : GetDataOperation(registry, profile, callback), |
+ document_url_(document_url), |
+ new_name_(new_name) { |
+} |
+ |
+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", document_url_.spec()); |
+ xml_writer.WriteElement("title", new_name_); |
+ |
+ 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 ========================== |
+ |
+class RenameResourceOperation : public EntryActionOperation { |
+ public: |
+ RenameResourceOperation(GDataOperationRegistry* registry, |
+ Profile* profile, |
+ const EntryActionCallback& callback, |
+ const GURL& document_url, |
+ const FilePath::StringType& new_name); |
+ virtual ~RenameResourceOperation() {} |
+ |
+ private: |
+ // Overridden from EntryActionOperation. |
+ virtual URLFetcher::RequestType GetRequestType() const OVERRIDE; |
+ virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; |
+ |
+ // Overridden from UrlFetchOperation. |
+ virtual bool GetContentData(std::string* upload_content_type, |
+ std::string* upload_content) OVERRIDE; |
+ |
+ FilePath::StringType new_name_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RenameResourceOperation); |
+}; |
+ |
+RenameResourceOperation::RenameResourceOperation( |
+ GDataOperationRegistry* registry, |
+ Profile* profile, |
+ const EntryActionCallback& callback, |
+ const GURL& document_url, |
+ const FilePath::StringType& new_name) |
+ : EntryActionOperation(registry, profile, callback, document_url), |
+ new_name_(new_name) { |
+} |
+ |
+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; |
+} |
+ |
+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", new_name_); |
+ |
+ 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; |
+} |
+ |
+//=========================== AddResourceToDirectoryOperation ================== |
+ |
+class AddResourceToDirectoryOperation : public EntryActionOperation { |
+ public: |
+ AddResourceToDirectoryOperation(GDataOperationRegistry* registry, |
+ Profile* profile, |
+ const EntryActionCallback& callback, |
+ const GURL& parent_content_url, |
+ const GURL& document_url); |
+ virtual ~AddResourceToDirectoryOperation() {} |
+ |
+ private: |
+ // Overridden from EntryActionOperation. |
+ virtual GURL GetURL() const OVERRIDE; |
+ |
+ // Overridden from UrlFetchOperation. |
+ virtual URLFetcher::RequestType GetRequestType() const OVERRIDE; |
+ virtual bool GetContentData(std::string* upload_content_type, |
+ std::string* upload_content) OVERRIDE; |
+ |
+ const GURL parent_content_url_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AddResourceToDirectoryOperation); |
+}; |
+ |
+AddResourceToDirectoryOperation::AddResourceToDirectoryOperation( |
+ GDataOperationRegistry* registry, |
+ Profile* profile, |
+ const EntryActionCallback& callback, |
+ const GURL& parent_content_url, |
+ const GURL& document_url) |
+ : EntryActionOperation(registry, profile, callback, document_url), |
+ parent_content_url_(parent_content_url) { |
+} |
+ |
+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 ============= |
+ |
+class RemoveResourceFromDirectoryOperation : public EntryActionOperation { |
+ public: |
+ RemoveResourceFromDirectoryOperation(GDataOperationRegistry* registry, |
+ Profile* profile, |
+ const EntryActionCallback& callback, |
+ const GURL& parent_content_url, |
+ const GURL& document_url, |
+ const std::string& resource_id); |
+ virtual ~RemoveResourceFromDirectoryOperation() {} |
+ |
+ private: |
+ // Overridden from EntryActionOperation. |
+ virtual GURL GetURL() const OVERRIDE; |
+ |
+ // Overridden from UrlFetchOperation. |
+ virtual URLFetcher::RequestType GetRequestType() const OVERRIDE; |
+ virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; |
+ |
+ const std::string resource_id_; |
+ const GURL parent_content_url_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RemoveResourceFromDirectoryOperation); |
+}; |
+ |
+RemoveResourceFromDirectoryOperation::RemoveResourceFromDirectoryOperation( |
+ GDataOperationRegistry* registry, |
+ Profile* profile, |
+ const EntryActionCallback& callback, |
+ const GURL& parent_content_url, |
+ const GURL& document_url, |
+ const std::string& document_resource_id) |
+ : EntryActionOperation(registry, profile, callback, document_url), |
+ resource_id_(document_resource_id), |
+ parent_content_url_(parent_content_url) { |
+} |
+ |
+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; |
zel
2012/03/12 20:40:40
will this delete the file completely or just remov
Ben Chan
2012/03/13 00:29:21
It only removes the file from collection, not the
|
+} |
+ |
+std::vector<std::string> |
+RemoveResourceFromDirectoryOperation::GetExtraRequestHeaders() const { |
+ std::vector<std::string> headers; |
+ headers.push_back(kIfMatchAllHeader); |
+ return headers; |
+} |
+ |
//=========================== InitiateUploadOperation ========================== |
class InitiateUploadOperation |
@@ -1203,6 +1459,48 @@ |
directory_name)); |
} |
+void DocumentsService::CopyDocument(const GURL& document_url, |
+ const FilePath::StringType& new_name, |
+ const GetDataCallback& callback) { |
+ StartOperationOnUIThread( |
+ new CopyDocumentOperation(operation_registry_.get(), profile_, callback, |
+ document_url, new_name)); |
+} |
+ |
+void DocumentsService::RenameResource(const GURL& resource_url, |
+ const FilePath::StringType& new_name, |
+ const EntryActionCallback& callback) { |
+ StartOperationOnUIThread( |
+ new RenameResourceOperation(operation_registry_.get(), profile_, callback, |
+ resource_url, new_name)); |
+} |
+ |
+void DocumentsService::AddResourceToDirectory( |
+ const GURL& parent_content_url, |
+ const GURL& resource_url, |
+ const EntryActionCallback& callback) { |
+ StartOperationOnUIThread( |
+ new AddResourceToDirectoryOperation(operation_registry_.get(), |
+ profile_, |
+ callback, |
+ parent_content_url, |
+ resource_url)); |
+} |
+ |
+void DocumentsService::RemoveResourceFromDirectory( |
+ const GURL& parent_content_url, |
+ const GURL& resource_url, |
+ const std::string& resource_id, |
+ const EntryActionCallback& callback) { |
+ StartOperationOnUIThread( |
+ new RemoveResourceFromDirectoryOperation(operation_registry_.get(), |
+ profile_, |
+ callback, |
+ parent_content_url, |
+ resource_url, |
+ resource_id)); |
+} |
+ |
void DocumentsService::InitiateUpload(const InitiateUploadParams& params, |
const InitiateUploadCallback& callback) { |
if (params.resumable_create_media_link.is_empty()) { |