1// Copyright 2013 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 CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_V1_FAKE_API_UTIL_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_V1_FAKE_API_UTIL_H_
7
8#include <map>
9#include <string>
10
11#include "chrome/browser/sync_file_system/drive_backend_v1/api_util_interface.h"
12#include "chrome/browser/sync_file_system/sync_file_type.h"
13#include "google_apis/drive/drive_api_parser.h"
14#include "google_apis/drive/gdata_wapi_parser.h"
15#include "google_apis/drive/gdata_wapi_url_generator.h"
16
17class GURL;
18class Profile;
19
20namespace google_apis {
21class ResourceEntry;
22}
23
24namespace sync_file_system {
25namespace drive_backend {
26
27class FakeAPIUtil : public APIUtilInterface {
28 public:
29  struct RemoteResource {
30    std::string parent_resource_id;
31    std::string parent_title;
32    std::string title;
33    std::string resource_id;
34    std::string md5_checksum;
35    SyncFileType type;
36    bool deleted;
37    int64 changestamp;
38
39    RemoteResource();
40    RemoteResource(const std::string& parent_resource_id,
41                   const std::string& parent_title,
42                   const std::string& title,
43                   const std::string& resource_id,
44                   const std::string& md5_checksum,
45                   SyncFileType type,
46                   bool deleted,
47                   int64 changestamp);
48    ~RemoteResource();
49  };
50
51  struct RemoteResourceComparator {
52    // Returns lexicographical order referring all members.
53    bool operator()(const RemoteResource& left, const RemoteResource& right);
54  };
55
56  typedef std::map<std::string, RemoteResource> RemoteResourceByResourceId;
57
58  FakeAPIUtil();
59  virtual ~FakeAPIUtil();
60
61  // APIUtilInterface overrides.
62  virtual void AddObserver(APIUtilObserver* observer) OVERRIDE;
63  virtual void RemoveObserver(APIUtilObserver* observer) OVERRIDE;
64  virtual void GetDriveDirectoryForSyncRoot(
65      const ResourceIdCallback& callback) OVERRIDE;
66  virtual void GetDriveDirectoryForOrigin(
67      const std::string& sync_root_resource_id,
68      const GURL& origin,
69      const ResourceIdCallback& callback) OVERRIDE;
70  virtual void GetLargestChangeStamp(
71      const ChangeStampCallback& callback) OVERRIDE;
72  virtual void GetResourceEntry(const std::string& resource_id,
73                                const ResourceEntryCallback& callback) OVERRIDE;
74  virtual void ListFiles(const std::string& directory_resource_id,
75                         const ResourceListCallback& callback) OVERRIDE;
76  virtual void ListChanges(int64 start_changestamp,
77                           const ResourceListCallback& callback) OVERRIDE;
78  virtual void ContinueListing(const GURL& next_link,
79                               const ResourceListCallback& callback) OVERRIDE;
80  virtual void DownloadFile(const std::string& resource_id,
81                            const std::string& local_file_md5,
82                            const DownloadFileCallback& callback) OVERRIDE;
83  virtual void UploadNewFile(const std::string& directory_resource_id,
84                             const base::FilePath& local_file_path,
85                             const std::string& title,
86                             const UploadFileCallback& callback) OVERRIDE;
87  virtual void UploadExistingFile(const std::string& resource_id,
88                                  const std::string& remote_file_md5,
89                                  const base::FilePath& local_file_path,
90                                  const UploadFileCallback& callback) OVERRIDE;
91  virtual void CreateDirectory(const std::string& parent_resource_id,
92                               const std::string& title,
93                               const ResourceIdCallback& callback) OVERRIDE;
94  virtual bool IsAuthenticated() const OVERRIDE;
95  virtual void DeleteFile(const std::string& resource_id,
96                          const std::string& remote_file_md5,
97                          const GDataErrorCallback& callback) OVERRIDE;
98  virtual void EnsureSyncRootIsNotInMyDrive(
99      const std::string& sync_root_resource_id) OVERRIDE;
100
101  void PushRemoteChange(const std::string& parent_resource_id,
102                        const std::string& parent_title,
103                        const std::string& title,
104                        const std::string& resource_id,
105                        const std::string& md5,
106                        SyncFileType type,
107                        bool deleted);
108
109  const RemoteResourceByResourceId& remote_resources() const {
110    return remote_resources_;
111  }
112
113 private:
114  struct ChangeStampComparator;
115  RemoteResourceByResourceId remote_resources_;
116
117  scoped_ptr<google_apis::ResourceEntry> CreateResourceEntry(
118      const RemoteResource& resource_id) const;
119  GURL ResourceIdToResourceLink(const std::string& resource_id) const;
120
121  int64 largest_changestamp_;
122  google_apis::GDataWapiUrlGenerator url_generator_;
123
124  DISALLOW_COPY_AND_ASSIGN(FakeAPIUtil);
125};
126
127}  // namespace drive_backend
128}  // namespace sync_file_system
129
130#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_V1_FAKE_API_UTIL_H_
131