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 15class GURL; 16 17namespace base { 18class FilePath; 19} 20 21namespace storage { 22class FileSystemContext; 23} 24 25namespace file_manager { 26namespace util { 27struct EntryDefinition; 28typedef std::vector<EntryDefinition> EntryDefinitionList; 29} // namespace util 30} // namespace file_manager 31 32namespace extensions { 33 34// Implements the chrome.fileManagerPrivate.requestFileSystem method. 35class 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. 73class 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. 92class 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. 110class 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. 126class 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. 148class 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. 165class 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. 179class 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. 197class 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. 212class 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