1// Copyright 2014 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#ifndef SYNC_INTERNAL_API_PUBLIC_ATTACHMENTS_ATTACHMENT_UPLOADER_H_ 6#define SYNC_INTERNAL_API_PUBLIC_ATTACHMENTS_ATTACHMENT_UPLOADER_H_ 7 8#include "base/basictypes.h" 9#include "base/callback.h" 10#include "base/memory/scoped_ptr.h" 11#include "sync/api/attachments/attachment.h" 12#include "sync/base/sync_export.h" 13 14namespace syncer { 15 16// AttachmentUploader is responsible for uploading attachments to the server. 17class SYNC_EXPORT AttachmentUploader { 18 public: 19 // The result of an UploadAttachment operation. 20 enum UploadResult { 21 UPLOAD_SUCCESS, // No error, attachment was uploaded 22 // successfully. 23 UPLOAD_TRANSIENT_ERROR, // A transient error occurred, try again later. 24 UPLOAD_UNSPECIFIED_ERROR, // An unspecified error occurred. 25 }; 26 27 typedef base::Callback<void(const UploadResult&, const AttachmentId&)> 28 UploadCallback; 29 30 AttachmentUploader(); 31 virtual ~AttachmentUploader(); 32 33 // Upload |attachment| and invoke |callback| when done. 34 // 35 // |callback| will be invoked when the operation has completed (successfully 36 // or otherwise). 37 // 38 // |callback| will receive an UploadResult code and the AttachmentId of the 39 // newly uploaded attachment. 40 virtual void UploadAttachment(const Attachment& attachment, 41 const UploadCallback& callback) = 0; 42}; 43 44} // namespace syncer 45 46#endif // SYNC_INTERNAL_API_PUBLIC_ATTACHMENTS_ATTACHMENT_UPLOADER_H_ 47