Refactor SharedMemory::Create and fix a rare file leak.
[chromium-blink-merge.git] / chrome / browser / drive / drive_service_interface.h
blob9fa23835c5ca4d24ff1c4d964abc099c7605dcc0
1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_DRIVE_DRIVE_SERVICE_INTERFACE_H_
6 #define CHROME_BROWSER_DRIVE_DRIVE_SERVICE_INTERFACE_H_
8 #include <string>
10 #include "base/time/time.h"
11 #include "google_apis/drive/auth_service_interface.h"
12 #include "google_apis/drive/base_requests.h"
13 #include "google_apis/drive/drive_api_requests.h"
14 #include "google_apis/drive/drive_common_callbacks.h"
16 namespace base {
17 class Time;
20 namespace drive {
22 // Observer interface for DriveServiceInterface.
23 class DriveServiceObserver {
24 public:
25 // Triggered when the service gets ready to send requests.
26 virtual void OnReadyToSendRequests() {}
28 // Called when the refresh token was found to be invalid.
29 virtual void OnRefreshTokenInvalid() {}
31 protected:
32 virtual ~DriveServiceObserver() {}
35 // Optional parameters for AddNewDirectory().
36 struct AddNewDirectoryOptions {
37 AddNewDirectoryOptions();
38 ~AddNewDirectoryOptions();
40 // modified_date of the directory.
41 // Pass the null Time if you are not interested in setting this property.
42 base::Time modified_date;
44 // last_viewed_by_me_date of the directory.
45 // Pass the null Time if you are not interested in setting this property.
46 base::Time last_viewed_by_me_date;
48 // List of properties for a new directory.
49 google_apis::drive::Properties properties;
52 // Optional parameters for InitiateUploadNewFile() and
53 // MultipartUploadNewFile().
54 struct UploadNewFileOptions {
55 UploadNewFileOptions();
56 ~UploadNewFileOptions();
58 // modified_date of the file.
59 // Pass the null Time if you are not interested in setting this property.
60 base::Time modified_date;
62 // last_viewed_by_me_date of the file.
63 // Pass the null Time if you are not interested in setting this property.
64 base::Time last_viewed_by_me_date;
66 // List of properties for a new file.
67 google_apis::drive::Properties properties;
70 // Optional parameters for InitiateUploadExistingFile() and
71 // MultipartUploadExistingFile().
72 struct UploadExistingFileOptions {
73 UploadExistingFileOptions();
74 ~UploadExistingFileOptions();
76 // Expected ETag of the file. UPLOAD_ERROR_CONFLICT error is generated when
77 // matching fails.
78 // Pass the empty string to disable this behavior.
79 std::string etag;
81 // New parent of the file.
82 // Pass the empty string to keep the property unchanged.
83 std::string parent_resource_id;
85 // New title of the file.
86 // Pass the empty string to keep the property unchanged.
87 std::string title;
89 // New modified_date of the file.
90 // Pass the null Time if you are not interested in setting this property.
91 base::Time modified_date;
93 // New last_viewed_by_me_date of the file.
94 // Pass the null Time if you are not interested in setting this property.
95 base::Time last_viewed_by_me_date;
97 // List of new properties for an existing file (it will be merged with
98 // existing properties).
99 google_apis::drive::Properties properties;
102 // Interface where we define operations that can be sent in batch requests.
103 class DriveServiceBatchOperationsInterface {
104 public:
105 virtual ~DriveServiceBatchOperationsInterface() {}
107 // Uploads a file by a single request with multipart body. It's more efficient
108 // for small files than using |InitiateUploadNewFile| and |ResumeUpload|.
109 // |content_type| and |content_length| should be the ones of the file to be
110 // uploaded. |callback| must not be null. |progress_callback| may be null.
111 virtual google_apis::CancelCallback MultipartUploadNewFile(
112 const std::string& content_type,
113 int64 content_length,
114 const std::string& parent_resource_id,
115 const std::string& title,
116 const base::FilePath& local_file_path,
117 const UploadNewFileOptions& options,
118 const google_apis::FileResourceCallback& callback,
119 const google_apis::ProgressCallback& progress_callback) = 0;
121 // Uploads a file by a single request with multipart body. It's more efficient
122 // for small files than using |InitiateUploadExistingFile| and |ResumeUpload|.
123 // |content_type| and |content_length| should be the ones of the file to be
124 // uploaded. |callback| must not be null. |progress_callback| may be null.
125 virtual google_apis::CancelCallback MultipartUploadExistingFile(
126 const std::string& content_type,
127 int64 content_length,
128 const std::string& resource_id,
129 const base::FilePath& local_file_path,
130 const UploadExistingFileOptions& options,
131 const google_apis::FileResourceCallback& callback,
132 const google_apis::ProgressCallback& progress_callback) = 0;
135 // Builder returned by DriveServiceInterface to build batch request.
136 class BatchRequestConfiguratorInterface
137 : public DriveServiceBatchOperationsInterface {
138 public:
139 ~BatchRequestConfiguratorInterface() override {}
141 // Commits and sends the batch request.
142 virtual void Commit() = 0;
145 // This defines an interface for sharing by DriveService and MockDriveService
146 // so that we can do testing of clients of DriveService.
148 // All functions must be called on UI thread. DriveService is built on top of
149 // URLFetcher that runs on UI thread.
150 class DriveServiceInterface : public DriveServiceBatchOperationsInterface {
151 public:
152 ~DriveServiceInterface() override {}
154 // Common service:
156 // Initializes the documents service with |account_id|.
157 virtual void Initialize(const std::string& account_id) = 0;
159 // Adds an observer.
160 virtual void AddObserver(DriveServiceObserver* observer) = 0;
162 // Removes an observer.
163 virtual void RemoveObserver(DriveServiceObserver* observer) = 0;
165 // True if ready to send requests.
166 virtual bool CanSendRequest() const = 0;
168 // Authentication service:
170 // True if OAuth2 access token is retrieved and believed to be fresh.
171 virtual bool HasAccessToken() const = 0;
173 // Gets the cached OAuth2 access token or if empty, then fetches a new one.
174 virtual void RequestAccessToken(
175 const google_apis::AuthStatusCallback& callback) = 0;
177 // True if OAuth2 refresh token is present.
178 virtual bool HasRefreshToken() const = 0;
180 // Clears OAuth2 access token.
181 virtual void ClearAccessToken() = 0;
183 // Clears OAuth2 refresh token.
184 virtual void ClearRefreshToken() = 0;
186 // Document access:
188 // Returns the resource id for the root directory.
189 virtual std::string GetRootResourceId() const = 0;
191 // Fetches a file list of the account. |callback| will be called upon
192 // completion.
193 // If the list is too long, it may be paged. In such a case, a URL to fetch
194 // remaining results will be included in the returned result. See also
195 // GetRemainingFileList.
197 // |callback| must not be null.
198 virtual google_apis::CancelCallback GetAllFileList(
199 const google_apis::FileListCallback& callback) = 0;
201 // Fetches a file list in the directory with |directory_resource_id|.
202 // |callback| will be called upon completion.
203 // If the list is too long, it may be paged. In such a case, a URL to fetch
204 // remaining results will be included in the returned result. See also
205 // GetRemainingFileList.
207 // |directory_resource_id| must not be empty.
208 // |callback| must not be null.
209 virtual google_apis::CancelCallback GetFileListInDirectory(
210 const std::string& directory_resource_id,
211 const google_apis::FileListCallback& callback) = 0;
213 // Searches the resources for the |search_query| from all the user's
214 // resources. |callback| will be called upon completion.
215 // If the list is too long, it may be paged. In such a case, a URL to fetch
216 // remaining results will be included in the returned result. See also
217 // GetRemainingFileList.
219 // |search_query| must not be empty.
220 // |callback| must not be null.
221 virtual google_apis::CancelCallback Search(
222 const std::string& search_query,
223 const google_apis::FileListCallback& callback) = 0;
225 // Searches the resources with the |title|.
226 // |directory_resource_id| is an optional parameter. If it is empty,
227 // the search target is all the existing resources. Otherwise, it is
228 // the resources directly under the directory with |directory_resource_id|.
229 // If the list is too long, it may be paged. In such a case, a URL to fetch
230 // remaining results will be included in the returned result. See also
231 // GetRemainingFileList.
233 // |title| must not be empty, and |callback| must not be null.
234 virtual google_apis::CancelCallback SearchByTitle(
235 const std::string& title,
236 const std::string& directory_resource_id,
237 const google_apis::FileListCallback& callback) = 0;
239 // Fetches change list since |start_changestamp|. |callback| will be
240 // called upon completion.
241 // If the list is too long, it may be paged. In such a case, a URL to fetch
242 // remaining results will be included in the returned result. See also
243 // GetRemainingChangeList.
245 // |callback| must not be null.
246 virtual google_apis::CancelCallback GetChangeList(
247 int64 start_changestamp,
248 const google_apis::ChangeListCallback& callback) = 0;
250 // The result of GetChangeList() may be paged.
251 // In such a case, a next link to fetch remaining result is returned.
252 // The page token can be used for this method. |callback| will be called upon
253 // completion.
255 // |next_link| must not be empty. |callback| must not be null.
256 virtual google_apis::CancelCallback GetRemainingChangeList(
257 const GURL& next_link,
258 const google_apis::ChangeListCallback& callback) = 0;
260 // The result of GetAllFileList(), GetFileListInDirectory(), Search()
261 // and SearchByTitle() may be paged. In such a case, a next link to fetch
262 // remaining result is returned. The page token can be used for this method.
263 // |callback| will be called upon completion.
265 // |next_link| must not be empty. |callback| must not be null.
266 virtual google_apis::CancelCallback GetRemainingFileList(
267 const GURL& next_link,
268 const google_apis::FileListCallback& callback) = 0;
270 // Fetches single entry metadata from server. The entry's file id equals
271 // |resource_id|.
272 // Upon completion, invokes |callback| with results on the calling thread.
273 // |callback| must not be null.
274 virtual google_apis::CancelCallback GetFileResource(
275 const std::string& resource_id,
276 const google_apis::FileResourceCallback& callback) = 0;
278 // Fetches an url for the sharing dialog for a single entry with id
279 // |resource_id|, to be embedded in a webview or an iframe with origin
280 // |embed_origin|. The url is returned via |callback| with results on the
281 // calling thread. |callback| must not be null.
282 virtual google_apis::CancelCallback GetShareUrl(
283 const std::string& resource_id,
284 const GURL& embed_origin,
285 const google_apis::GetShareUrlCallback& callback) = 0;
287 // Gets the about resource information from the server.
288 // Upon completion, invokes |callback| with results on the calling thread.
289 // |callback| must not be null.
290 virtual google_apis::CancelCallback GetAboutResource(
291 const google_apis::AboutResourceCallback& callback) = 0;
293 // Gets the application information from the server.
294 // Upon completion, invokes |callback| with results on the calling thread.
295 // |callback| must not be null.
296 virtual google_apis::CancelCallback GetAppList(
297 const google_apis::AppListCallback& callback) = 0;
299 // Permanently deletes a resource identified by its |resource_id|.
300 // If |etag| is not empty and did not match, the deletion fails with
301 // HTTP_PRECONDITION error.
302 // Upon completion, invokes |callback| with results on the calling thread.
303 // |callback| must not be null.
304 virtual google_apis::CancelCallback DeleteResource(
305 const std::string& resource_id,
306 const std::string& etag,
307 const google_apis::EntryActionCallback& callback) = 0;
309 // Trashes a resource identified by its |resource_id|.
310 // Upon completion, invokes |callback| with results on the calling thread.
311 // |callback| must not be null.
312 virtual google_apis::CancelCallback TrashResource(
313 const std::string& resource_id,
314 const google_apis::EntryActionCallback& callback) = 0;
316 // Makes a copy of a resource with |resource_id|.
317 // The new resource will be put under a directory with |parent_resource_id|,
318 // and it'll be named |new_title|.
319 // If |last_modified| is not null, the modified date of the resource on the
320 // server will be set to the date.
321 // Upon completion, invokes |callback| with results on the calling thread.
322 // |callback| must not be null.
323 virtual google_apis::CancelCallback CopyResource(
324 const std::string& resource_id,
325 const std::string& parent_resource_id,
326 const std::string& new_title,
327 const base::Time& last_modified,
328 const google_apis::FileResourceCallback& callback) = 0;
330 // Updates a resource with |resource_id| to the directory of
331 // |parent_resource_id| with renaming to |new_title|.
332 // If |last_modified| or |last_accessed| is not null, the modified/accessed
333 // date of the resource on the server will be set to the date.
334 // If |properties| are specified, then they will be set on |resource_id|.
335 // Upon completion, invokes |callback| with results on the calling thread.
336 // |callback| must not be null.
337 virtual google_apis::CancelCallback UpdateResource(
338 const std::string& resource_id,
339 const std::string& parent_resource_id,
340 const std::string& new_title,
341 const base::Time& last_modified,
342 const base::Time& last_viewed_by_me,
343 const google_apis::drive::Properties& properties,
344 const google_apis::FileResourceCallback& callback) = 0;
346 // Adds a resource (document, file, or collection) identified by its
347 // |resource_id| to a collection represented by the |parent_resource_id|.
348 // Upon completion, invokes |callback| with results on the calling thread.
349 // |callback| must not be null.
350 virtual google_apis::CancelCallback AddResourceToDirectory(
351 const std::string& parent_resource_id,
352 const std::string& resource_id,
353 const google_apis::EntryActionCallback& callback) = 0;
355 // Removes a resource (document, file, collection) identified by its
356 // |resource_id| from a collection represented by the |parent_resource_id|.
357 // Upon completion, invokes |callback| with results on the calling thread.
358 // |callback| must not be null.
359 virtual google_apis::CancelCallback RemoveResourceFromDirectory(
360 const std::string& parent_resource_id,
361 const std::string& resource_id,
362 const google_apis::EntryActionCallback& callback) = 0;
364 // Adds new collection with |directory_title| under parent directory
365 // identified with |parent_resource_id|. |parent_resource_id| can be the
366 // value returned by GetRootResourceId to represent the root directory.
367 // Upon completion, invokes |callback| and passes newly created entry on
368 // the calling thread.
369 // This function cannot be named as "CreateDirectory" as it conflicts with
370 // a macro on Windows.
371 // |callback| must not be null.
372 virtual google_apis::CancelCallback AddNewDirectory(
373 const std::string& parent_resource_id,
374 const std::string& directory_title,
375 const AddNewDirectoryOptions& options,
376 const google_apis::FileResourceCallback& callback) = 0;
378 // Downloads a file with |resourced_id|. The downloaded file will
379 // be stored at |local_cache_path| location. Upon completion, invokes
380 // |download_action_callback| with results on the calling thread.
381 // If |get_content_callback| is not empty,
382 // URLFetcherDelegate::OnURLFetchDownloadData will be called, which will in
383 // turn invoke |get_content_callback| on the calling thread.
384 // If |progress_callback| is not empty, it is invoked periodically when
385 // the download made some progress.
387 // |download_action_callback| must not be null.
388 // |get_content_callback| and |progress_callback| may be null.
389 virtual google_apis::CancelCallback DownloadFile(
390 const base::FilePath& local_cache_path,
391 const std::string& resource_id,
392 const google_apis::DownloadActionCallback& download_action_callback,
393 const google_apis::GetContentCallback& get_content_callback,
394 const google_apis::ProgressCallback& progress_callback) = 0;
396 // Initiates uploading of a new document/file.
397 // |content_type| and |content_length| should be the ones of the file to be
398 // uploaded.
399 // |callback| must not be null.
400 virtual google_apis::CancelCallback InitiateUploadNewFile(
401 const std::string& content_type,
402 int64 content_length,
403 const std::string& parent_resource_id,
404 const std::string& title,
405 const UploadNewFileOptions& options,
406 const google_apis::InitiateUploadCallback& callback) = 0;
408 // Initiates uploading of an existing document/file.
409 // |content_type| and |content_length| should be the ones of the file to be
410 // uploaded.
411 // |callback| must not be null.
412 virtual google_apis::CancelCallback InitiateUploadExistingFile(
413 const std::string& content_type,
414 int64 content_length,
415 const std::string& resource_id,
416 const UploadExistingFileOptions& options,
417 const google_apis::InitiateUploadCallback& callback) = 0;
419 // Resumes uploading of a document/file on the calling thread.
420 // |callback| must not be null. |progress_callback| may be null.
421 virtual google_apis::CancelCallback ResumeUpload(
422 const GURL& upload_url,
423 int64 start_position,
424 int64 end_position,
425 int64 content_length,
426 const std::string& content_type,
427 const base::FilePath& local_file_path,
428 const google_apis::drive::UploadRangeCallback& callback,
429 const google_apis::ProgressCallback& progress_callback) = 0;
431 // Gets the current status of the uploading to |upload_url| from the server.
432 // |drive_file_path| and |content_length| should be set to the same value
433 // which is used for ResumeUpload.
434 // |callback| must not be null.
435 virtual google_apis::CancelCallback GetUploadStatus(
436 const GURL& upload_url,
437 int64 content_length,
438 const google_apis::drive::UploadRangeCallback& callback) = 0;
440 // Authorizes a Drive app with the id |app_id| to open the given file.
441 // Upon completion, invokes |callback| with the link to open the file with
442 // the provided app. |callback| must not be null.
443 virtual google_apis::CancelCallback AuthorizeApp(
444 const std::string& resource_id,
445 const std::string& app_id,
446 const google_apis::AuthorizeAppCallback& callback) = 0;
448 // Uninstalls a Drive app with the id |app_id|. |callback| must not be null.
449 virtual google_apis::CancelCallback UninstallApp(
450 const std::string& app_id,
451 const google_apis::EntryActionCallback& callback) = 0;
453 // Authorizes the account |email| to access |resource_id| as a |role|.
454 // |callback| must not be null.
455 virtual google_apis::CancelCallback AddPermission(
456 const std::string& resource_id,
457 const std::string& email,
458 google_apis::drive::PermissionRole role,
459 const google_apis::EntryActionCallback& callback) = 0;
461 // Starts batch request and returns |BatchRequestConfigurator|.
462 virtual scoped_ptr<BatchRequestConfiguratorInterface> StartBatchRequest() = 0;
465 } // namespace drive
467 #endif // CHROME_BROWSER_DRIVE_DRIVE_SERVICE_INTERFACE_H_