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