15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_FAKE_DRIVE_SERVICE_HELPER_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_FAKE_DRIVE_SERVICE_HELPER_H_
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string>
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/files/scoped_temp_dir.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/drive/drive_uploader.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/drive/fake_drive_service.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_wapi_parser.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace base {
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FilePath;
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace sync_file_system {
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace drive_backend {
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FakeDriveServiceHelper {
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FakeDriveServiceHelper(drive::FakeDriveService* fake_drive_service,
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         drive::DriveUploaderInterface* drive_uploader,
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         const std::string& sync_root_folder_title);
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~FakeDriveServiceHelper();
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode AddOrphanedFolder(
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& title,
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      std::string* folder_id);
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode AddFolder(
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& parent_folder_id,
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& title,
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      std::string* folder_id);
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode AddFile(
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& parent_folder_id,
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& title,
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& content,
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      std::string* file_id);
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode UpdateFile(
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& file_id,
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& content);
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  google_apis::GDataErrorCode DeleteResource(
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& file_id);
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  google_apis::GDataErrorCode TrashResource(
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& file_id);
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  google_apis::GDataErrorCode UpdateModificationTime(
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& file_id,
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::Time& modification_time);
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  google_apis::GDataErrorCode RenameResource(
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& file_id,
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& new_title);
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  google_apis::GDataErrorCode AddResourceToDirectory(
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& parent_folder_id,
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& file_id);
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  google_apis::GDataErrorCode RemoveResourceFromDirectory(
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& parent_folder_id,
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& file_id);
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode GetSyncRootFolderID(
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      std::string* sync_root_folder_id);
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode ListFilesInFolder(
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& folder_id,
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ScopedVector<google_apis::ResourceEntry>* entries);
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode SearchByTitle(
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& folder_id,
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& title,
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ScopedVector<google_apis::ResourceEntry>* entries);
6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  google_apis::GDataErrorCode GetFileResource(
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& file_id,
7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      scoped_ptr<google_apis::FileResource>* entry);
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode ReadFile(
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& file_id,
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      std::string* file_content);
758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  google_apis::GDataErrorCode GetAboutResource(
768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      scoped_ptr<google_apis::AboutResource>* about_resource);
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::FilePath base_dir_path() { return base_dir_.path(); }
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::GDataErrorCode CompleteListing(
8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      scoped_ptr<google_apis::FileList> list,
8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      ScopedVector<google_apis::ResourceEntry>* entries);
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void Initialize();
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::FilePath WriteToTempFile(const std::string& content);
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::ScopedTempDir base_dir_;
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::FilePath temp_dir_;
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Not own.
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  drive::FakeDriveService* fake_drive_service_;
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  drive::DriveUploaderInterface* drive_uploader_;
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string sync_root_folder_title_;
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace drive_backend
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace sync_file_system
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_FAKE_DRIVE_SERVICE_HELPER_H_
103