1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// found in the LICENSE file.
4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)//
5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// This file provides Drive specific API functions.
6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_DRIVE_H_
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_DRIVE_H_
9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h"
12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/drive/file_errors.h"
13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system_interface.h"
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/extensions/file_manager/private_api_base.h"
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/file_manager/fileapi_util.h"
16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace drive {
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class FileCacheEntry;
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class ResourceEntry;
20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)struct SearchResultInfo;
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace google_apis {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass AuthService;
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace extensions {
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace api {
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace file_manager_private {
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct EntryProperties;
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace file_manager_private
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace api
34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Retrieves property information for an entry and returns it as a dictionary.
36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// On error, returns a dictionary with the key "error" set to the error number
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// (base::File::Error).
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateGetEntryPropertiesFunction
39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : public LoggedAsyncExtensionFunction {
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getEntryProperties",
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_GETENTRYPROPERTIES)
43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FileManagerPrivateGetEntryPropertiesFunction();
45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateGetEntryPropertiesFunction();
48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // AsyncExtensionFunction overrides.
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool RunAsync() OVERRIDE;
51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private:
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void CompleteGetEntryProperties(
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      size_t index,
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      scoped_ptr<api::file_manager_private::EntryProperties> properties,
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::File::Error error);
57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  size_t processed_count_;
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<linked_ptr<api::file_manager_private::EntryProperties> >
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      properties_list_;
61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Implements the chrome.fileManagerPrivate.pinDriveFile method.
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivatePinDriveFileFunction
65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : public LoggedAsyncExtensionFunction {
66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.pinDriveFile",
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_PINDRIVEFILE)
69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivatePinDriveFileFunction() {}
72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
73a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // AsyncExtensionFunction overrides.
74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool RunAsync() OVERRIDE;
75a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
76a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private:
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Callback for RunAsync().
78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void OnPinStateSet(drive::FileError error);
79a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Implements the chrome.fileManagerPrivate.cancelFileTransfers method.
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateCancelFileTransfersFunction
83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : public LoggedAsyncExtensionFunction {
84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.cancelFileTransfers",
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_CANCELFILETRANSFERS)
87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateCancelFileTransfersFunction() {}
90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // AsyncExtensionFunction overrides.
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool RunAsync() OVERRIDE;
93a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateSearchDriveFunction
96424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : public LoggedAsyncExtensionFunction {
97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  typedef std::vector<drive::SearchResultInfo> SearchResultInfoList;
99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.searchDrive",
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_SEARCHDRIVE)
102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateSearchDriveFunction() {}
105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool RunAsync() OVERRIDE;
107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private:
109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Callback for Search().
110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void OnSearch(drive::FileError error,
11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                const GURL& next_link,
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                scoped_ptr<std::vector<drive::SearchResultInfo> > result_paths);
113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Called when |result_paths| in OnSearch() are converted to a list of
115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // entry definitions.
116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void OnEntryDefinitionList(
117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const GURL& next_link,
118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<SearchResultInfoList> search_result_info_list,
119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<file_manager::util::EntryDefinitionList>
120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          entry_definition_list);
121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Similar to FileManagerPrivateSearchDriveFunction but this one is used for
124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// searching drive metadata which is stored locally.
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateSearchDriveMetadataFunction
126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : public LoggedAsyncExtensionFunction {
127a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.searchDriveMetadata",
1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_SEARCHDRIVEMETADATA)
130a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateSearchDriveMetadataFunction() {}
133a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool RunAsync() OVERRIDE;
135a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
136a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private:
137a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Callback for SearchMetadata();
138a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void OnSearchMetadata(drive::FileError error,
139a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                        scoped_ptr<drive::MetadataSearchResultVector> results);
140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Called when |results| in OnSearchMetadata() are converted to a list of
142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // entry definitions.
143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void OnEntryDefinitionList(
144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<drive::MetadataSearchResultVector> search_result_info_list,
145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<file_manager::util::EntryDefinitionList>
146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          entry_definition_list);
147a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
148a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Implements the chrome.fileManagerPrivate.getDriveConnectionState method.
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateGetDriveConnectionStateFunction
1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    : public ChromeSyncExtensionFunction {
152a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
153a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  DECLARE_EXTENSION_FUNCTION(
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "fileManagerPrivate.getDriveConnectionState",
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      FILEMANAGERPRIVATE_GETDRIVECONNECTIONSTATE);
156a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
157a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateGetDriveConnectionStateFunction() {}
159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual bool RunSync() OVERRIDE;
161a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
162a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Implements the chrome.fileManagerPrivate.requestAccessToken method.
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateRequestAccessTokenFunction
165424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : public LoggedAsyncExtensionFunction {
166a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.requestAccessToken",
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_REQUESTACCESSTOKEN)
169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
170a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateRequestAccessTokenFunction() {}
172a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
173a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // AsyncExtensionFunction overrides.
174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool RunAsync() OVERRIDE;
175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Callback with a cached auth token (if available) or a fetched one.
177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void OnAccessTokenFetched(google_apis::GDataErrorCode code,
178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                            const std::string& access_token);
179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
180a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Implements the chrome.fileManagerPrivate.getShareUrl method.
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateGetShareUrlFunction
183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : public LoggedAsyncExtensionFunction {
184a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getShareUrl",
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_GETSHAREURL)
187a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
188a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateGetShareUrlFunction() {}
190a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
191a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // AsyncExtensionFunction overrides.
192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool RunAsync() OVERRIDE;
193a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
194a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Callback with an url to the sharing dialog as |share_url|, called by
195a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // FileSystem::GetShareUrl.
196a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void OnGetShareUrl(drive::FileError error, const GURL& share_url);
197a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
198a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Implements the chrome.fileManagerPrivate.requestDriveShare method.
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateRequestDriveShareFunction
20123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    : public LoggedAsyncExtensionFunction {
20223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public:
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.requestDriveShare",
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_REQUESTDRIVESHARE);
20523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
20623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) protected:
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateRequestDriveShareFunction() {}
208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool RunAsync() OVERRIDE;
20923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
21023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private:
21123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Called back after the drive file system operation is finished.
21223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  void OnAddPermission(drive::FileError error);
21323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)};
21423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Implements the chrome.fileManagerPrivate.getDownloadUrl method.
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FileManagerPrivateGetDownloadUrlFunction
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : public LoggedAsyncExtensionFunction {
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FileManagerPrivateGetDownloadUrlFunction();
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getDownloadUrl",
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             FILEMANAGERPRIVATE_GETDOWNLOADURL)
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected:
2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FileManagerPrivateGetDownloadUrlFunction();
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // AsyncExtensionFunction overrides.
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool RunAsync() OVERRIDE;
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnGetResourceEntry(drive::FileError error,
231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                          scoped_ptr<drive::ResourceEntry> entry);
232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Callback with an |access_token|, called by
234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // drive::DriveReadonlyTokenFetcher.
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnTokenFetched(google_apis::GDataErrorCode code,
236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                      const std::string& access_token);
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::string download_url_;
240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<google_apis::AuthService> auth_service_;
241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}  // namespace extensions
244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_DRIVE_H_
246