1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_GOOGLE_APIS_FAKE_DRIVE_SERVICE_H_
#define CHROME_BROWSER_GOOGLE_APIS_FAKE_DRIVE_SERVICE_H_
#include "base/values.h"
#include "chrome/browser/google_apis/drive_service_interface.h"
namespace google_apis {
// This class implements a fake DriveService which acts like a real Drive
// service. The fake service works as follows:
//
// 1) Load JSON files and construct the in-memory resource list.
// 2) Return valid responses based on the the in-memory resource list.
// 3) Update the in-memory resource list by operations like DeleteResource().
class FakeDriveService : public DriveServiceInterface {
public:
FakeDriveService();
virtual ~FakeDriveService();
// Loads the resource list for WAPI. Returns true on success.
bool LoadResourceListForWapi(const std::string& relative_path);
// Loads the account metadata for WAPI. Returns true on success. Also adds
// the largest changestamp in the account metadata to the existing
// entries. The changestamp information will be used to generate change
// lists in GetResourceList() when non-zero |start_changestamp| is
// specified.
bool LoadAccountMetadataForWapi(const std::string& relative_path);
// Loads the app list for Drive API. Returns true on success.
bool LoadAppListForDriveApi(const std::string& relative_path);
// Changes the offline state. All functions fail with GDATA_NO_CONNECTION
// when offline. By default the offline state is false.
void set_offline(bool offline) { offline_ = offline; }
// Changes the default max results returned from GetResourceList().
// By default, it's set to 0, which is unlimited.
void set_default_max_results(int default_max_results) {
default_max_results_ = default_max_results;
}
// Returns the largest changestamp, which starts from 0 by default. See
// also comments at LoadAccountMetadataForWapi().
int64 largest_changestamp() const { return largest_changestamp_; }
// Returns the number of times the resource list is successfully loaded by
// GetResourceList().
int resource_list_load_count() const { return resource_list_load_count_; }
// Returns the number of times the account metadata is successfully loaded
// by GetAccountMetadata().
int account_metadata_load_count() const {
return account_metadata_load_count_;
}
// Returns the (fake) URL for the link.
static GURL GetFakeLinkUrl(const std::string& resource_id);
// DriveServiceInterface Overrides
virtual void Initialize(Profile* profile) OVERRIDE;
virtual void AddObserver(DriveServiceObserver* observer) OVERRIDE;
virtual void RemoveObserver(DriveServiceObserver* observer) OVERRIDE;
virtual bool CanStartOperation() const OVERRIDE;
virtual void CancelAll() OVERRIDE;
virtual bool CancelForFilePath(const base::FilePath& file_path) OVERRIDE;
virtual OperationProgressStatusList GetProgressStatusList() const OVERRIDE;
virtual std::string GetRootResourceId() const OVERRIDE;
virtual bool HasAccessToken() const OVERRIDE;
virtual bool HasRefreshToken() const OVERRIDE;
virtual void ClearAccessToken() OVERRIDE;
virtual void ClearRefreshToken() OVERRIDE;
// See the comment for EntryMatchWidthQuery() in .cc file for details about
// the supported search query types.
virtual void GetResourceList(
const GURL& feed_url,
int64 start_changestamp,
const std::string& search_query,
bool shared_with_me,
const std::string& directory_resource_id,
const GetResourceListCallback& callback) OVERRIDE;
virtual void GetResourceEntry(
const std::string& resource_id,
const GetResourceEntryCallback& callback) OVERRIDE;
virtual void GetAccountMetadata(
const GetAccountMetadataCallback& callback) OVERRIDE;
virtual void GetAppList(const GetAppListCallback& callback) OVERRIDE;
virtual void DeleteResource(const std::string& resource_id,
const std::string& etag,
const EntryActionCallback& callback) OVERRIDE;
virtual void DownloadFile(
const base::FilePath& virtual_path,
const base::FilePath& local_cache_path,
const GURL& download_url,
const DownloadActionCallback& download_action_callback,
const GetContentCallback& get_content_callback) OVERRIDE;
// The new resource ID for the copied document will look like
// |resource_id| + "_copied".
virtual void CopyHostedDocument(
const std::string& resource_id,
const std::string& new_name,
const GetResourceEntryCallback& callback) OVERRIDE;
virtual void RenameResource(const std::string& resource_id,
const std::string& new_name,
const EntryActionCallback& callback) OVERRIDE;
virtual void AddResourceToDirectory(
const std::string& parent_resource_id,
const std::string& resource_id,
const EntryActionCallback& callback) OVERRIDE;
virtual void RemoveResourceFromDirectory(
const std::string& parent_resource_id,
const std::string& resource_id,
const EntryActionCallback& callback) OVERRIDE;
virtual void AddNewDirectory(
const std::string& parent_resource_id,
const std::string& directory_name,
const GetResourceEntryCallback& callback) OVERRIDE;
virtual void InitiateUploadNewFile(
const base::FilePath& drive_file_path,
const std::string& content_type,
int64 content_length,
const GURL& parent_upload_url,
const std::string& title,
const InitiateUploadCallback& callback) OVERRIDE;
virtual void InitiateUploadExistingFile(
const base::FilePath& drive_file_path,
const std::string& content_type,
int64 content_length,
const GURL& upload_url,
const std::string& etag,
const InitiateUploadCallback& callback) OVERRIDE;
virtual void ResumeUpload(const ResumeUploadParams& params,
const UploadRangeCallback& callback) OVERRIDE;
virtual void GetUploadStatus(
UploadMode upload_mode,
const base::FilePath& drive_file_path,
const GURL& upload_url,
int64 content_length,
const UploadRangeCallback& callback) OVERRIDE;
virtual void AuthorizeApp(const GURL& edit_url,
const std::string& app_id,
const AuthorizeAppCallback& callback) OVERRIDE;
private:
// Returns a pointer to the entry that matches |resource_id|, or NULL if
// not found.
base::DictionaryValue* FindEntryByResourceId(const std::string& resource_id);
// Returns a pointer to the entry that matches |content_url|, or NULL if
// not found.
base::DictionaryValue* FindEntryByContentUrl(const GURL& content_url);
// Returns a pointer to the entry that matches |upload_url|, or NULL if
// not found.
base::DictionaryValue* FindEntryByUploadUrl(const GURL& upload_url);
// Returns a new resource ID, which looks like "resource_id_<num>" where
// <num> is a monotonically increasing number starting from 1.
std::string GetNewResourceId();
// Increments |largest_changestamp_| and adds the new changestamp to
// |entry|.
void AddNewChangestamp(base::DictionaryValue* entry);
scoped_ptr<base::Value> resource_list_value_;
scoped_ptr<base::Value> account_metadata_value_;
scoped_ptr<base::Value> app_info_value_;
int64 largest_changestamp_;
int default_max_results_;
int resource_id_count_;
int resource_list_load_count_;
int account_metadata_load_count_;
bool offline_;
DISALLOW_COPY_AND_ASSIGN(FakeDriveService);
};
} // namespace google_apis
#endif // CHROME_BROWSER_GOOGLE_APIS_FAKE_DRIVE_SERVICE_H_
|