Home | History | Annotate | Download | only in file_manager
      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 file system related API functions.
      6 
      7 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_FILE_SYSTEM_H_
      8 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_FILE_SYSTEM_H_
      9 
     10 #include <string>
     11 
     12 #include "chrome/browser/chromeos/drive/file_errors.h"
     13 #include "chrome/browser/chromeos/extensions/file_manager/private_api_base.h"
     14 
     15 class GURL;
     16 
     17 namespace base {
     18 class FilePath;
     19 }
     20 
     21 namespace storage {
     22 class FileSystemContext;
     23 }
     24 
     25 namespace file_manager {
     26 namespace util {
     27 struct EntryDefinition;
     28 typedef std::vector<EntryDefinition> EntryDefinitionList;
     29 }  // namespace util
     30 }  // namespace file_manager
     31 
     32 namespace extensions {
     33 
     34 // Implements the chrome.fileManagerPrivate.requestFileSystem method.
     35 class FileManagerPrivateRequestFileSystemFunction
     36     : public LoggedAsyncExtensionFunction {
     37  public:
     38   DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.requestFileSystem",
     39                              FILEMANAGERPRIVATE_REQUESTFILESYSTEM)
     40 
     41  protected:
     42   virtual ~FileManagerPrivateRequestFileSystemFunction() {}
     43 
     44   // AsyncExtensionFunction overrides.
     45   virtual bool RunAsync() OVERRIDE;
     46 
     47  private:
     48   void RespondSuccessOnUIThread(const std::string& name,
     49                                 const GURL& root_url);
     50   void RespondFailedOnUIThread(base::File::Error error_code);
     51 
     52   // Called when something goes wrong. Records the error to |error_| per the
     53   // error code and reports that the private API function failed.
     54   void DidFail(base::File::Error error_code);
     55 
     56   // Sets up file system access permissions to the extension identified by
     57   // |child_id|.
     58   bool SetupFileSystemAccessPermissions(
     59       scoped_refptr<storage::FileSystemContext> file_system_context,
     60       int child_id,
     61       Profile* profile,
     62       scoped_refptr<const extensions::Extension> extension);
     63 
     64   // Called when the entry definition is computed.
     65   void OnEntryDefinition(
     66       const file_manager::util::EntryDefinition& entry_definition);
     67 };
     68 
     69 // Base class for FileManagerPrivateAddFileWatchFunction and
     70 // FileManagerPrivateRemoveFileWatchFunction. Although it's called "FileWatch",
     71 // the class and its sub classes are used only for watching changes in
     72 // directories.
     73 class FileWatchFunctionBase : public LoggedAsyncExtensionFunction {
     74  protected:
     75   virtual ~FileWatchFunctionBase() {}
     76 
     77   // Performs a file watch operation (ex. adds or removes a file watch).
     78   virtual void PerformFileWatchOperation(
     79       const base::FilePath& local_path,
     80       const base::FilePath& virtual_path,
     81       const std::string& extension_id) = 0;
     82 
     83   // AsyncExtensionFunction overrides.
     84   virtual bool RunAsync() OVERRIDE;
     85 
     86   // Calls SendResponse() with |success| converted to base::Value.
     87   void Respond(bool success);
     88 };
     89 
     90 // Implements the chrome.fileManagerPrivate.addFileWatch method.
     91 // Starts watching changes in directories.
     92 class FileManagerPrivateAddFileWatchFunction : public FileWatchFunctionBase {
     93  public:
     94   DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.addFileWatch",
     95                              FILEMANAGERPRIVATE_ADDFILEWATCH)
     96 
     97  protected:
     98   virtual ~FileManagerPrivateAddFileWatchFunction() {}
     99 
    100   // FileWatchFunctionBase override.
    101   virtual void PerformFileWatchOperation(
    102       const base::FilePath& local_path,
    103       const base::FilePath& virtual_path,
    104       const std::string& extension_id) OVERRIDE;
    105 };
    106 
    107 
    108 // Implements the chrome.fileManagerPrivate.removeFileWatch method.
    109 // Stops watching changes in directories.
    110 class FileManagerPrivateRemoveFileWatchFunction : public FileWatchFunctionBase {
    111  public:
    112   DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.removeFileWatch",
    113                              FILEMANAGERPRIVATE_REMOVEFILEWATCH)
    114 
    115  protected:
    116   virtual ~FileManagerPrivateRemoveFileWatchFunction() {}
    117 
    118   // FileWatchFunctionBase override.
    119   virtual void PerformFileWatchOperation(
    120       const base::FilePath& local_path,
    121       const base::FilePath& virtual_path,
    122       const std::string& extension_id) OVERRIDE;
    123 };
    124 
    125 // Implements the chrome.fileManagerPrivate.getSizeStats method.
    126 class FileManagerPrivateGetSizeStatsFunction
    127     : public LoggedAsyncExtensionFunction {
    128  public:
    129   DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.getSizeStats",
    130                              FILEMANAGERPRIVATE_GETSIZESTATS)
    131 
    132  protected:
    133   virtual ~FileManagerPrivateGetSizeStatsFunction() {}
    134 
    135   // AsyncExtensionFunction overrides.
    136   virtual bool RunAsync() OVERRIDE;
    137 
    138  private:
    139   void GetDriveAvailableSpaceCallback(drive::FileError error,
    140                                       int64 bytes_total,
    141                                       int64 bytes_used);
    142 
    143   void GetSizeStatsCallback(const uint64* total_size,
    144                             const uint64* remaining_size);
    145 };
    146 
    147 // Implements the chrome.fileManagerPrivate.validatePathNameLength method.
    148 class FileManagerPrivateValidatePathNameLengthFunction
    149     : public LoggedAsyncExtensionFunction {
    150  public:
    151   DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.validatePathNameLength",
    152                              FILEMANAGERPRIVATE_VALIDATEPATHNAMELENGTH)
    153 
    154  protected:
    155   virtual ~FileManagerPrivateValidatePathNameLengthFunction() {}
    156 
    157   void OnFilePathLimitRetrieved(size_t current_length, size_t max_length);
    158 
    159   // AsyncExtensionFunction overrides.
    160   virtual bool RunAsync() OVERRIDE;
    161 };
    162 
    163 // Implements the chrome.fileManagerPrivate.formatVolume method.
    164 // Formats Volume given its mount path.
    165 class FileManagerPrivateFormatVolumeFunction
    166     : public LoggedAsyncExtensionFunction {
    167  public:
    168   DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.formatVolume",
    169                              FILEMANAGERPRIVATE_FORMATVOLUME)
    170 
    171  protected:
    172   virtual ~FileManagerPrivateFormatVolumeFunction() {}
    173 
    174   // AsyncExtensionFunction overrides.
    175   virtual bool RunAsync() OVERRIDE;
    176 };
    177 
    178 // Implements the chrome.fileManagerPrivate.startCopy method.
    179 class FileManagerPrivateStartCopyFunction
    180     : public LoggedAsyncExtensionFunction {
    181  public:
    182   DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.startCopy",
    183                              FILEMANAGERPRIVATE_STARTCOPY)
    184 
    185  protected:
    186   virtual ~FileManagerPrivateStartCopyFunction() {}
    187 
    188   // AsyncExtensionFunction overrides.
    189   virtual bool RunAsync() OVERRIDE;
    190 
    191  private:
    192   // Part of RunAsync(). Called after Copy() is started on IO thread.
    193   void RunAfterStartCopy(int operation_id);
    194 };
    195 
    196 // Implements the chrome.fileManagerPrivate.cancelCopy method.
    197 class FileManagerPrivateCancelCopyFunction
    198     : public LoggedAsyncExtensionFunction {
    199  public:
    200   DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.cancelCopy",
    201                              FILEMANAGERPRIVATE_CANCELCOPY)
    202 
    203  protected:
    204   virtual ~FileManagerPrivateCancelCopyFunction() {}
    205 
    206   // AsyncExtensionFunction overrides.
    207   virtual bool RunAsync() OVERRIDE;
    208 };
    209 
    210 // Implements the chrome.fileManagerPrivateInternal.resolveIsolatedEntries
    211 // method.
    212 class FileManagerPrivateInternalResolveIsolatedEntriesFunction
    213     : public ChromeAsyncExtensionFunction {
    214  public:
    215   DECLARE_EXTENSION_FUNCTION(
    216       "fileManagerPrivateInternal.resolveIsolatedEntries",
    217       FILEMANAGERPRIVATE_RESOLVEISOLATEDENTRIES)
    218 
    219  protected:
    220   virtual ~FileManagerPrivateInternalResolveIsolatedEntriesFunction() {}
    221 
    222   // AsyncExtensionFunction overrides.
    223   virtual bool RunAsync() OVERRIDE;
    224 
    225  private:
    226   void RunAsyncAfterConvertFileDefinitionListToEntryDefinitionList(scoped_ptr<
    227       file_manager::util::EntryDefinitionList> entry_definition_list);
    228 };
    229 
    230 }  // namespace extensions
    231 
    232 #endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_FILE_SYSTEM_H_
    233