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_DOWNLOADER_H_ 6 #define SYNC_INTERNAL_API_PUBLIC_ATTACHMENTS_ATTACHMENT_DOWNLOADER_H_ 7 8 #include "base/callback.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "google_apis/gaia/oauth2_token_service_request.h" 11 #include "sync/api/attachments/attachment.h" 12 #include "sync/base/sync_export.h" 13 14 namespace net { 15 class URLRequestContextGetter; 16 } // namespace net 17 18 namespace syncer { 19 20 // AttachmentDownloader is responsible for downloading attachments from server. 21 class SYNC_EXPORT AttachmentDownloader { 22 public: 23 // The result of a DownloadAttachment operation. 24 enum DownloadResult { 25 DOWNLOAD_SUCCESS, // No error, attachment was downloaded 26 // successfully. 27 DOWNLOAD_TRANSIENT_ERROR, // A transient error occurred, try again later. 28 DOWNLOAD_UNSPECIFIED_ERROR, // An unspecified error occurred. 29 }; 30 31 typedef base::Callback<void(const DownloadResult&, scoped_ptr<Attachment>)> 32 DownloadCallback; 33 34 virtual ~AttachmentDownloader(); 35 36 // Download attachment referred by |attachment_id| and invoke |callback| when 37 // done. 38 // 39 // |callback| will receive a DownloadResult code and an Attachment object. If 40 // DownloadResult is not DOWNLOAD_SUCCESS then attachment pointer is NULL. 41 virtual void DownloadAttachment(const AttachmentId& attachment_id, 42 const DownloadCallback& callback) = 0; 43 44 // Create instance of AttachmentDownloaderImpl. 45 // |sync_service_url| is the URL of the sync service. 46 // 47 // |url_request_context_getter| provides a URLRequestContext. 48 // 49 // |account_id| is the account id to use for downloads. 50 // 51 // |scopes| is the set of scopes to use for downloads. 52 // 53 // |token_service_provider| provides an OAuth2 token service. 54 static scoped_ptr<AttachmentDownloader> Create( 55 const GURL& sync_service_url, 56 const scoped_refptr<net::URLRequestContextGetter>& 57 url_request_context_getter, 58 const std::string& account_id, 59 const OAuth2TokenService::ScopeSet scopes, 60 const scoped_refptr<OAuth2TokenServiceRequest::TokenServiceProvider>& 61 token_service_provider); 62 }; 63 64 } // namespace syncer 65 66 #endif // SYNC_INTERNAL_API_PUBLIC_ATTACHMENTS_ATTACHMENT_DOWNLOADER_H_ 67