#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "chrome/browser/chromeos/drive/change_list_loader_observer.h"
-#include "chrome/browser/chromeos/drive/file_system/operation_observer.h"
+#include "chrome/browser/chromeos/drive/file_system/operation_delegate.h"
#include "chrome/browser/chromeos/drive/file_system_interface.h"
#include "google_apis/drive/gdata_errorcode.h"
namespace drive {
class DriveServiceInterface;
+class EventLogger;
class FileCacheEntry;
class FileSystemObserver;
class JobScheduler;
namespace internal {
+class AboutResourceLoader;
class ChangeListLoader;
+class DirectoryLoader;
class FileCache;
+class LoaderController;
class ResourceMetadata;
class SyncClient;
} // namespace internal
class GetFileForSavingOperation;
class MoveOperation;
class OpenFileOperation;
-class OperationObserver;
class RemoveOperation;
class SearchOperation;
class TouchOperation;
// The production implementation of FileSystemInterface.
class FileSystem : public FileSystemInterface,
public internal::ChangeListLoaderObserver,
- public file_system::OperationObserver {
+ public file_system::OperationDelegate {
public:
FileSystem(PrefService* pref_service,
+ EventLogger* logger,
internal::FileCache* cache,
DriveServiceInterface* drive_service,
JobScheduler* scheduler,
virtual ~FileSystem();
// FileSystemInterface overrides.
- virtual void AddObserver(FileSystemObserver* observer) OVERRIDE;
- virtual void RemoveObserver(FileSystemObserver* observer) OVERRIDE;
- virtual void CheckForUpdates() OVERRIDE;
+ virtual void AddObserver(FileSystemObserver* observer) override;
+ virtual void RemoveObserver(FileSystemObserver* observer) override;
+ virtual void CheckForUpdates() override;
virtual void Search(const std::string& search_query,
const GURL& next_link,
- const SearchCallback& callback) OVERRIDE;
+ const SearchCallback& callback) override;
virtual void SearchMetadata(const std::string& query,
int options,
int at_most_num_matches,
- const SearchMetadataCallback& callback) OVERRIDE;
+ const SearchMetadataCallback& callback) override;
virtual void TransferFileFromLocalToRemote(
const base::FilePath& local_src_file_path,
const base::FilePath& remote_dest_file_path,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void OpenFile(const base::FilePath& file_path,
OpenMode open_mode,
const std::string& mime_type,
- const OpenFileCallback& callback) OVERRIDE;
+ const OpenFileCallback& callback) override;
virtual void Copy(const base::FilePath& src_file_path,
const base::FilePath& dest_file_path,
bool preserve_last_modified,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void Move(const base::FilePath& src_file_path,
const base::FilePath& dest_file_path,
- bool preserve_last_modified,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void Remove(const base::FilePath& file_path,
bool is_recursive,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void CreateDirectory(const base::FilePath& directory_path,
bool is_exclusive,
bool is_recursive,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void CreateFile(const base::FilePath& file_path,
bool is_exclusive,
const std::string& mime_type,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void TouchFile(const base::FilePath& file_path,
const base::Time& last_access_time,
const base::Time& last_modified_time,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void TruncateFile(const base::FilePath& file_path,
int64 length,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void Pin(const base::FilePath& file_path,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void Unpin(const base::FilePath& file_path,
- const FileOperationCallback& callback) OVERRIDE;
+ const FileOperationCallback& callback) override;
virtual void GetFile(const base::FilePath& file_path,
- const GetFileCallback& callback) OVERRIDE;
+ const GetFileCallback& callback) override;
virtual void GetFileForSaving(const base::FilePath& file_path,
- const GetFileCallback& callback) OVERRIDE;
- virtual void GetFileContent(
+ const GetFileCallback& callback) override;
+ virtual base::Closure GetFileContent(
const base::FilePath& file_path,
const GetFileContentInitializedCallback& initialized_callback,
const google_apis::GetContentCallback& get_content_callback,
- const FileOperationCallback& completion_callback) OVERRIDE;
+ const FileOperationCallback& completion_callback) override;
virtual void GetResourceEntry(
const base::FilePath& file_path,
- const GetResourceEntryCallback& callback) OVERRIDE;
+ const GetResourceEntryCallback& callback) override;
virtual void ReadDirectory(
const base::FilePath& directory_path,
- const ReadDirectoryCallback& callback) OVERRIDE;
+ const ReadDirectoryEntriesCallback& entries_callback,
+ const FileOperationCallback& completion_callback) override;
virtual void GetAvailableSpace(
- const GetAvailableSpaceCallback& callback) OVERRIDE;
+ const GetAvailableSpaceCallback& callback) override;
virtual void GetShareUrl(
const base::FilePath& file_path,
const GURL& embed_origin,
- const GetShareUrlCallback& callback) OVERRIDE;
+ const GetShareUrlCallback& callback) override;
virtual void GetMetadata(
- const GetFilesystemMetadataCallback& callback) OVERRIDE;
+ const GetFilesystemMetadataCallback& callback) override;
virtual void MarkCacheFileAsMounted(
const base::FilePath& drive_file_path,
- const MarkMountedCallback& callback) OVERRIDE;
+ const MarkMountedCallback& callback) override;
virtual void MarkCacheFileAsUnmounted(
const base::FilePath& cache_file_path,
- const FileOperationCallback& callback) OVERRIDE;
- virtual void GetCacheEntry(
- const base::FilePath& drive_file_path,
- const GetCacheEntryCallback& callback) OVERRIDE;
- virtual void Reset(const FileOperationCallback& callback) OVERRIDE;
-
- // file_system::OperationObserver overrides.
- virtual void OnDirectoryChangedByOperation(
- const base::FilePath& directory_path) OVERRIDE;
- virtual void OnEntryUpdatedByOperation(const std::string& local_id) OVERRIDE;
+ const FileOperationCallback& callback) override;
+ virtual void AddPermission(const base::FilePath& drive_file_path,
+ const std::string& email,
+ google_apis::drive::PermissionRole role,
+ const FileOperationCallback& callback) override;
+ virtual void Reset(const FileOperationCallback& callback) override;
+ virtual void GetPathFromResourceId(const std::string& resource_id,
+ const GetFilePathCallback& callback)
+ override;
+
+ // file_system::OperationDelegate overrides.
+ virtual void OnFileChangedByOperation(
+ const FileChange& changed_files) override;
+ virtual void OnEntryUpdatedByOperation(const std::string& local_id) override;
virtual void OnDriveSyncError(file_system::DriveSyncErrorType type,
- const std::string& local_id) OVERRIDE;
+ const std::string& local_id) override;
+ virtual bool WaitForSyncComplete(
+ const std::string& local_id,
+ const FileOperationCallback& callback) override;
// ChangeListLoader::Observer overrides.
// Used to propagate events from ChangeListLoader.
- virtual void OnDirectoryChanged(
- const base::FilePath& directory_path) OVERRIDE;
- virtual void OnLoadFromServerComplete() OVERRIDE;
- virtual void OnInitialLoadComplete() OVERRIDE;
+ virtual void OnDirectoryReloaded(
+ const base::FilePath& directory_path) override;
+ virtual void OnFileChanged(const FileChange& changed_files) override;
+ virtual void OnLoadFromServerComplete() override;
+ virtual void OnInitialLoadComplete() override;
// Used by tests.
internal::ChangeListLoader* change_list_loader_for_testing() {
internal::SyncClient* sync_client_for_testing() { return sync_client_.get(); }
private:
+ struct CreateDirectoryParams;
+
// Used for initialization and Reset(). (Re-)initializes sub components that
// need to be recreated during the reset of resource metadata and the cache.
void ResetComponents();
- // Part of CreateDirectory(). Called after ChangeListLoader::LoadIfNeeded()
+ // Part of CreateDirectory(). Called after ReadDirectory()
// is called and made sure that the resource metadata is loaded.
- void CreateDirectoryAfterLoad(const base::FilePath& directory_path,
- bool is_exclusive,
- bool is_recursive,
- const FileOperationCallback& callback,
- FileError load_error);
+ void CreateDirectoryAfterRead(const CreateDirectoryParams& params,
+ FileError error);
void FinishPin(const FileOperationCallback& callback,
const std::string* local_id,
void OnUpdateChecked(FileError error);
// Part of GetResourceEntry().
- // Called when LoadDirectoryIfNeeded() is complete.
- void GetResourceEntryAfterLoad(const base::FilePath& file_path,
+ // Called when ReadDirectory() is complete.
+ void GetResourceEntryAfterRead(const base::FilePath& file_path,
const GetResourceEntryCallback& callback,
FileError error);
- // Part of ReadDirectory()
- // 1) Called when LoadDirectoryIfNeeded() is complete.
- // 2) Called when ResourceMetadata::ReadDirectory() is complete.
- // |callback| must not be null.
- void ReadDirectoryAfterLoad(const base::FilePath& directory_path,
- const ReadDirectoryCallback& callback,
- FileError error);
- void ReadDirectoryAfterRead(const base::FilePath& directory_path,
- const ReadDirectoryCallback& callback,
- FileError error,
- scoped_ptr<ResourceEntryVector> entries);
-
// Part of GetShareUrl. Resolves the resource entry to get the resource it,
// and then uses it to ask for the share url. |callback| must not be null.
- void GetShareUrlAfterGetResourceEntry(
- const base::FilePath& file_path,
- const GURL& embed_origin,
- const GetShareUrlCallback& callback,
- FileError error,
- scoped_ptr<ResourceEntry> entry);
- void OnGetResourceEntryForGetShareUrl(
- const GetShareUrlCallback& callback,
- google_apis::GDataErrorCode status,
- const GURL& share_url);
+ void GetShareUrlAfterGetResourceEntry(const base::FilePath& file_path,
+ const GURL& embed_origin,
+ const GetShareUrlCallback& callback,
+ ResourceEntry* entry,
+ FileError error);
+ void OnGetResourceEntryForGetShareUrl(const GetShareUrlCallback& callback,
+ google_apis::GDataErrorCode status,
+ const GURL& share_url);
+ // Part of AddPermission.
+ void AddPermissionAfterGetResourceEntry(
+ const std::string& email,
+ google_apis::drive::PermissionRole role,
+ const FileOperationCallback& callback,
+ ResourceEntry* entry,
+ FileError error);
// Part of OnDriveSyncError().
virtual void OnDriveSyncErrorAfterGetFilePath(
file_system::DriveSyncErrorType type,
- const base::FilePath& fiepath);
+ const base::FilePath* file_path,
+ FileError error);
// Used to get Drive related preferences.
PrefService* pref_service_;
// Sub components owned by DriveIntegrationService.
+ EventLogger* logger_;
internal::FileCache* cache_;
DriveServiceInterface* drive_service_;
JobScheduler* scheduler_;
// Error of the last update check.
FileError last_update_check_error_;
- scoped_ptr<internal::SyncClient> sync_client_;
+ // Used to load about resource.
+ scoped_ptr<internal::AboutResourceLoader> about_resource_loader_;
+
+ // Used to control ChangeListLoader.
+ scoped_ptr<internal::LoaderController> loader_controller_;
// The loader is used to load the change lists.
scoped_ptr<internal::ChangeListLoader> change_list_loader_;
+ scoped_ptr<internal::DirectoryLoader> directory_loader_;
+
+ scoped_ptr<internal::SyncClient> sync_client_;
+
ObserverList<FileSystemObserver> observers_;
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;