Home | History | Annotate | Download | only in attachments
      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_SERVICE_H_
      6 #define SYNC_INTERNAL_API_PUBLIC_ATTACHMENTS_ATTACHMENT_SERVICE_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/callback.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "base/memory/weak_ptr.h"
     12 #include "sync/api/attachments/attachment.h"
     13 #include "sync/base/sync_export.h"
     14 
     15 namespace syncer {
     16 
     17 class AttachmentStore;
     18 class SyncData;
     19 
     20 // AttachmentService is responsible for managing a model type's attachments.
     21 //
     22 // Outside of sync code, AttachmentService shouldn't be used directly. Instead
     23 // use the functionality provided by SyncData and SyncChangeProcessor.
     24 //
     25 // Destroying this object does not necessarily cancel outstanding async
     26 // operations. If you need cancel like semantics, use WeakPtr in the callbacks.
     27 class SYNC_EXPORT AttachmentService {
     28  public:
     29   // The result of a GetOrDownloadAttachments operation.
     30   enum GetOrDownloadResult {
     31     GET_SUCCESS,            // No error, all attachments returned.
     32     GET_UNSPECIFIED_ERROR,  // An unspecified error occurred.
     33   };
     34 
     35   typedef base::Callback<
     36       void(const GetOrDownloadResult&, scoped_ptr<AttachmentMap> attachments)>
     37       GetOrDownloadCallback;
     38 
     39   // The result of a DropAttachments operation.
     40   enum DropResult {
     41     DROP_SUCCESS,            // No error, all attachments dropped.
     42     DROP_UNSPECIFIED_ERROR,  // An unspecified error occurred. Some or all
     43                              // attachments may not have been dropped.
     44   };
     45 
     46   typedef base::Callback<void(const DropResult&)> DropCallback;
     47 
     48   // An interface that embedder code implements to be notified about different
     49   // events that originate from AttachmentService.
     50   // This interface will be called from the same thread AttachmentService was
     51   // created and called.
     52   class Delegate {
     53    public:
     54     virtual ~Delegate() {}
     55 
     56     // Attachment is uploaded to server and attachment_id is updated with server
     57     // url.
     58     virtual void OnAttachmentUploaded(const AttachmentId& attachment_id) = 0;
     59   };
     60 
     61   AttachmentService();
     62   virtual ~AttachmentService();
     63 
     64   // Return a pointer to the AttachmentStore owned by this object.
     65   //
     66   // May return NULL.
     67   virtual AttachmentStore* GetStore() = 0;
     68 
     69   // See SyncData::GetOrDownloadAttachments.
     70   virtual void GetOrDownloadAttachments(
     71       const AttachmentIdList& attachment_ids,
     72       const GetOrDownloadCallback& callback) = 0;
     73 
     74   // See SyncData::DropAttachments.
     75   virtual void DropAttachments(const AttachmentIdList& attachment_ids,
     76                                const DropCallback& callback) = 0;
     77 
     78   // Schedules the attachments identified by |attachment_ids| to be uploaded to
     79   // the server.
     80   //
     81   // Assumes the attachments are already in the attachment store.
     82   //
     83   // A request to upload attachments is persistent in that uploads will be
     84   // automatically retried if transient errors occur.
     85   //
     86   // A request to upload attachments does not persist across restarts of Chrome.
     87   //
     88   // Invokes OnAttachmentUploaded on the Delegate (if provided).
     89   virtual void UploadAttachments(const AttachmentIdSet& attachment_ids) = 0;
     90 };
     91 
     92 }  // namespace syncer
     93 
     94 #endif  // SYNC_INTERNAL_API_PUBLIC_ATTACHMENTS_ATTACHMENT_SERVICE_H_
     95