private_api_drive.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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// This file provides Drive specific API functions.
6
7#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_DRIVE_H_
8#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_DRIVE_H_
9
10#include "chrome/browser/chromeos/drive/file_errors.h"
11#include "chrome/browser/chromeos/drive/file_system_interface.h"
12#include "chrome/browser/chromeos/extensions/file_manager/private_api_base.h"
13#include "chrome/browser/chromeos/file_manager/fileapi_util.h"
14
15namespace drive {
16class FileCacheEntry;
17class ResourceEntry;
18struct SearchResultInfo;
19}
20
21namespace extensions {
22
23namespace api {
24namespace file_browser_private {
25struct DriveEntryProperties;
26}  // namespace file_browser_private
27}  // namespace api
28
29// Retrieves property information for an entry and returns it as a dictionary.
30// On error, returns a dictionary with the key "error" set to the error number
31// (drive::FileError).
32class FileBrowserPrivateGetDriveEntryPropertiesFunction
33    : public LoggedAsyncExtensionFunction {
34 public:
35  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.getDriveEntryProperties",
36                             FILEBROWSERPRIVATE_GETDRIVEFILEPROPERTIES)
37
38  FileBrowserPrivateGetDriveEntryPropertiesFunction();
39
40 protected:
41  virtual ~FileBrowserPrivateGetDriveEntryPropertiesFunction();
42
43  // AsyncExtensionFunction overrides.
44  virtual bool RunImpl() OVERRIDE;
45
46 private:
47  void CompleteGetFileProperties(drive::FileError error);
48
49  size_t processed_count_;
50  std::vector<linked_ptr<api::file_browser_private::DriveEntryProperties> >
51      properties_list_;
52};
53
54// Implements the chrome.fileBrowserPrivate.pinDriveFile method.
55class FileBrowserPrivatePinDriveFileFunction
56    : public LoggedAsyncExtensionFunction {
57 public:
58  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.pinDriveFile",
59                             FILEBROWSERPRIVATE_PINDRIVEFILE)
60
61 protected:
62  virtual ~FileBrowserPrivatePinDriveFileFunction() {}
63
64  // AsyncExtensionFunction overrides.
65  virtual bool RunImpl() OVERRIDE;
66
67 private:
68  // Callback for RunImpl().
69  void OnPinStateSet(drive::FileError error);
70};
71
72// Get drive files for the given list of file URLs. Initiate downloading of
73// drive files if these are not cached. Return a list of local file names.
74// This function puts empty strings instead of local paths for files could
75// not be obtained. For instance, this can happen if the user specifies a new
76// file name to save a file on drive. There may be other reasons to fail. The
77// file manager should check if the local paths returned from getDriveFiles()
78// contain empty paths.
79// TODO(satorux): Should we propagate error types to the JavaScript layer?
80class FileBrowserPrivateGetDriveFilesFunction
81    : public LoggedAsyncExtensionFunction {
82 public:
83  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.getDriveFiles",
84                             FILEBROWSERPRIVATE_GETDRIVEFILES)
85
86  FileBrowserPrivateGetDriveFilesFunction();
87
88 protected:
89  virtual ~FileBrowserPrivateGetDriveFilesFunction();
90
91  // AsyncExtensionFunction overrides.
92  virtual bool RunImpl() OVERRIDE;
93
94 private:
95  // Gets the file on the top of the |remaining_drive_paths_| or sends the
96  // response if the queue is empty.
97  void GetFileOrSendResponse();
98
99  // Called by FileSystem::GetFile(). Pops the file from
100  // |remaining_drive_paths_|, and calls GetFileOrSendResponse().
101  void OnFileReady(drive::FileError error,
102                   const base::FilePath& local_path,
103                   scoped_ptr<drive::ResourceEntry> entry);
104
105  std::queue<base::FilePath> remaining_drive_paths_;
106  std::vector<std::string> local_paths_;
107};
108
109// Implements the chrome.fileBrowserPrivate.cancelFileTransfers method.
110class FileBrowserPrivateCancelFileTransfersFunction
111    : public LoggedAsyncExtensionFunction {
112 public:
113  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.cancelFileTransfers",
114                             FILEBROWSERPRIVATE_CANCELFILETRANSFERS)
115
116 protected:
117  virtual ~FileBrowserPrivateCancelFileTransfersFunction() {}
118
119  // AsyncExtensionFunction overrides.
120  virtual bool RunImpl() OVERRIDE;
121};
122
123class FileBrowserPrivateSearchDriveFunction
124    : public LoggedAsyncExtensionFunction {
125 public:
126  typedef std::vector<drive::SearchResultInfo> SearchResultInfoList;
127
128  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.searchDrive",
129                             FILEBROWSERPRIVATE_SEARCHDRIVE)
130
131 protected:
132  virtual ~FileBrowserPrivateSearchDriveFunction() {}
133
134  virtual bool RunImpl() OVERRIDE;
135
136 private:
137  // Callback for Search().
138  void OnSearch(drive::FileError error,
139                const GURL& next_link,
140                scoped_ptr<std::vector<drive::SearchResultInfo> > result_paths);
141
142  // Called when |result_paths| in OnSearch() are converted to a list of
143  // entry definitions.
144  void OnEntryDefinitionList(
145      const GURL& next_link,
146      scoped_ptr<SearchResultInfoList> search_result_info_list,
147      scoped_ptr<file_manager::util::EntryDefinitionList>
148          entry_definition_list);
149};
150
151// Similar to FileBrowserPrivateSearchDriveFunction but this one is used for
152// searching drive metadata which is stored locally.
153class FileBrowserPrivateSearchDriveMetadataFunction
154    : public LoggedAsyncExtensionFunction {
155 public:
156  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.searchDriveMetadata",
157                             FILEBROWSERPRIVATE_SEARCHDRIVEMETADATA)
158
159 protected:
160  virtual ~FileBrowserPrivateSearchDriveMetadataFunction() {}
161
162  virtual bool RunImpl() OVERRIDE;
163
164 private:
165  // Callback for SearchMetadata();
166  void OnSearchMetadata(drive::FileError error,
167                        scoped_ptr<drive::MetadataSearchResultVector> results);
168
169  // Called when |results| in OnSearchMetadata() are converted to a list of
170  // entry definitions.
171  void OnEntryDefinitionList(
172      scoped_ptr<drive::MetadataSearchResultVector> search_result_info_list,
173      scoped_ptr<file_manager::util::EntryDefinitionList>
174          entry_definition_list);
175};
176
177// Implements the chrome.fileBrowserPrivate.getDriveConnectionState method.
178class FileBrowserPrivateGetDriveConnectionStateFunction
179    : public ChromeSyncExtensionFunction {
180 public:
181  DECLARE_EXTENSION_FUNCTION(
182      "fileBrowserPrivate.getDriveConnectionState",
183      FILEBROWSERPRIVATE_GETDRIVECONNECTIONSTATE);
184
185 protected:
186  virtual ~FileBrowserPrivateGetDriveConnectionStateFunction() {}
187
188  virtual bool RunImpl() OVERRIDE;
189};
190
191// Implements the chrome.fileBrowserPrivate.requestAccessToken method.
192class FileBrowserPrivateRequestAccessTokenFunction
193    : public LoggedAsyncExtensionFunction {
194 public:
195  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.requestAccessToken",
196                             FILEBROWSERPRIVATE_REQUESTACCESSTOKEN)
197
198 protected:
199  virtual ~FileBrowserPrivateRequestAccessTokenFunction() {}
200
201  // AsyncExtensionFunction overrides.
202  virtual bool RunImpl() OVERRIDE;
203
204  // Callback with a cached auth token (if available) or a fetched one.
205  void OnAccessTokenFetched(google_apis::GDataErrorCode code,
206                            const std::string& access_token);
207};
208
209// Implements the chrome.fileBrowserPrivate.getShareUrl method.
210class FileBrowserPrivateGetShareUrlFunction
211    : public LoggedAsyncExtensionFunction {
212 public:
213  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.getShareUrl",
214                             FILEBROWSERPRIVATE_GETSHAREURL)
215
216 protected:
217  virtual ~FileBrowserPrivateGetShareUrlFunction() {}
218
219  // AsyncExtensionFunction overrides.
220  virtual bool RunImpl() OVERRIDE;
221
222  // Callback with an url to the sharing dialog as |share_url|, called by
223  // FileSystem::GetShareUrl.
224  void OnGetShareUrl(drive::FileError error, const GURL& share_url);
225};
226
227// Implements the chrome.fileBrowserPrivate.requestDriveShare method.
228class FileBrowserPrivateRequestDriveShareFunction
229    : public LoggedAsyncExtensionFunction {
230 public:
231  DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.requestDriveShare",
232                             FILEBROWSERPRIVATE_REQUESTDRIVESHARE);
233
234 protected:
235  virtual ~FileBrowserPrivateRequestDriveShareFunction() {}
236  virtual bool RunImpl() OVERRIDE;
237
238 private:
239  // Called back after the drive file system operation is finished.
240  void OnAddPermission(drive::FileError error);
241};
242
243}  // namespace extensions
244
245#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_DRIVE_H_
246