15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_SERVICE_ON_WORKER_H_ 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_SERVICE_ON_WORKER_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/ref_counted.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/weak_ptr.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/sequence_checker.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/drive/drive_service_interface.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace base { 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass SingleThreadTaskRunner; 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass SequencedTaskRunner; 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace sync_file_system { 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace drive_backend { 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass DriveServiceWrapper; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// This class wraps a part of DriveServiceInterface class to post actual 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// tasks to DriveServiceWrapper which lives in another thread. 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Each method wraps corresponding name method of DriveServiceInterface. 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// See comments in drive_service_interface.h for details. 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass DriveServiceOnWorker : public drive::DriveServiceInterface { 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DriveServiceOnWorker( 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::WeakPtr<DriveServiceWrapper>& wrapper, 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::SingleThreadTaskRunner* ui_task_runner, 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::SequencedTaskRunner* worker_task_runner); 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~DriveServiceOnWorker(); 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback AddNewDirectory( 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& parent_resource_id, 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& directory_title, 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const AddNewDirectoryOptions& options, 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileResourceCallback& callback) OVERRIDE; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback DeleteResource( 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& etag, 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::EntryActionCallback& callback) OVERRIDE; 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback DownloadFile( 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::FilePath& local_cache_path, 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::DownloadActionCallback& download_action_callback, 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::GetContentCallback& get_content_callback, 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::ProgressCallback& progress_callback) OVERRIDE; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback GetAboutResource( 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::AboutResourceCallback& callback) OVERRIDE; 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback GetChangeList( 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int64 start_changestamp, 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const google_apis::ChangeListCallback& callback) OVERRIDE; 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback GetRemainingChangeList( 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const GURL& next_link, 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const google_apis::ChangeListCallback& callback) OVERRIDE; 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual std::string GetRootResourceId() const OVERRIDE; 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback GetRemainingFileList( 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const GURL& next_link, 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileListCallback& callback) OVERRIDE; 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual google_apis::CancelCallback GetFileResource( 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileResourceCallback& callback) OVERRIDE; 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual google_apis::CancelCallback GetFileListInDirectory( 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& directory_resource_id, 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileListCallback& callback) OVERRIDE; 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback RemoveResourceFromDirectory( 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& parent_resource_id, 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::EntryActionCallback& callback) OVERRIDE; 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback SearchByTitle( 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& title, 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& directory_resource_id, 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileListCallback& callback) OVERRIDE; 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool HasRefreshToken() const OVERRIDE; 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Following virtual methods are expected not to be accessed at all. 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void Initialize(const std::string& account_id) OVERRIDE; 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void AddObserver(drive::DriveServiceObserver* observer) OVERRIDE; 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void RemoveObserver(drive::DriveServiceObserver* observer) OVERRIDE; 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool CanSendRequest() const OVERRIDE; 955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool HasAccessToken() const OVERRIDE; 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void RequestAccessToken( 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::AuthStatusCallback& callback) OVERRIDE; 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void ClearAccessToken() OVERRIDE; 995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void ClearRefreshToken() OVERRIDE; 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual google_apis::CancelCallback GetAllFileList( 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileListCallback& callback) OVERRIDE; 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback Search( 1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& search_query, 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileListCallback& callback) OVERRIDE; 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback GetShareUrl( 1065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 1075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const GURL& embed_origin, 1085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::GetShareUrlCallback& callback) OVERRIDE; 1095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback GetAppList( 1105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::AppListCallback& callback) OVERRIDE; 1115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback TrashResource( 1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 1135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::EntryActionCallback& callback) OVERRIDE; 1145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback CopyResource( 1155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 1165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& parent_resource_id, 1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& new_title, 1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::Time& last_modified, 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileResourceCallback& callback) OVERRIDE; 1205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback UpdateResource( 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& parent_resource_id, 1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& new_title, 1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::Time& last_modified, 1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::Time& last_viewed_by_me, 12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::FileResourceCallback& callback) OVERRIDE; 1275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback AddResourceToDirectory( 1285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& parent_resource_id, 1295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 1305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::EntryActionCallback& callback) OVERRIDE; 1315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback InitiateUploadNewFile( 1325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& content_type, 1335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int64 content_length, 1345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& parent_resource_id, 1355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& title, 1365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const InitiateUploadNewFileOptions& options, 1375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::InitiateUploadCallback& callback) OVERRIDE; 1385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback InitiateUploadExistingFile( 1395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& content_type, 1405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int64 content_length, 1415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 1425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const InitiateUploadExistingFileOptions& options, 1435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::InitiateUploadCallback& callback) OVERRIDE; 1445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback ResumeUpload( 1455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const GURL& upload_url, 1465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int64 start_position, 1475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int64 end_position, 1485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int64 content_length, 1495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& content_type, 1505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::FilePath& local_file_path, 15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::drive::UploadRangeCallback& callback, 1525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::ProgressCallback& progress_callback) OVERRIDE; 1535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback GetUploadStatus( 1545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const GURL& upload_url, 1555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int64 content_length, 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google_apis::drive::UploadRangeCallback& callback) OVERRIDE; 1575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback AuthorizeApp( 1585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 1595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& app_id, 1605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::AuthorizeAppCallback& callback) OVERRIDE; 1615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback UninstallApp( 1625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& app_id, 1635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::EntryActionCallback& callback) OVERRIDE; 1645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual google_apis::CancelCallback AddPermission( 1655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& resource_id, 1665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& email, 1675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu google_apis::drive::PermissionRole role, 1685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const google_apis::EntryActionCallback& callback) OVERRIDE; 1695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 1715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::WeakPtr<DriveServiceWrapper> wrapper_; 1725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; 1735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; 1745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::SequenceChecker sequence_checker_; 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(DriveServiceOnWorker); 1785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 1795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace drive_backend 1815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace sync_file_system 1825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_SERVICE_ON_WORKER_H_ 184