summaryrefslogtreecommitdiffstats
path: root/components/drive/file_system.h
diff options
context:
space:
mode:
Diffstat (limited to 'components/drive/file_system.h')
-rw-r--r--components/drive/file_system.h311
1 files changed, 311 insertions, 0 deletions
diff --git a/components/drive/file_system.h b/components/drive/file_system.h
new file mode 100644
index 0000000..0c143842
--- /dev/null
+++ b/components/drive/file_system.h
@@ -0,0 +1,311 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_DRIVE_FILE_SYSTEM_H_
+#define COMPONENTS_DRIVE_FILE_SYSTEM_H_
+
+#include <string>
+#include <vector>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "base/threading/thread_checker.h"
+#include "components/drive/change_list_loader_observer.h"
+#include "components/drive/file_system/operation_delegate.h"
+#include "components/drive/file_system_interface.h"
+#include "google_apis/drive/drive_api_error_codes.h"
+
+class PrefService;
+
+namespace base {
+class SequencedTaskRunner;
+} // namespace base
+
+namespace google_apis {
+class AboutResource;
+class ResourceEntry;
+} // namespace google_apis
+
+namespace drive {
+struct ClientContext;
+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
+
+namespace file_system {
+class CopyOperation;
+class CreateDirectoryOperation;
+class CreateFileOperation;
+class DownloadOperation;
+class GetFileForSavingOperation;
+class MoveOperation;
+class OpenFileOperation;
+class RemoveOperation;
+class SearchOperation;
+class SetPropertyOperation;
+class TouchOperation;
+class TruncateOperation;
+} // namespace file_system
+
+// The production implementation of FileSystemInterface.
+class FileSystem : public FileSystemInterface,
+ public internal::ChangeListLoaderObserver,
+ public file_system::OperationDelegate {
+ public:
+ FileSystem(PrefService* pref_service,
+ EventLogger* logger,
+ internal::FileCache* cache,
+ JobScheduler* scheduler,
+ internal::ResourceMetadata* resource_metadata,
+ base::SequencedTaskRunner* blocking_task_runner,
+ base::SingleThreadTaskRunner* file_task_runner,
+ const base::FilePath& temporary_file_directory);
+ ~FileSystem() override;
+
+ // FileSystemInterface overrides.
+ void AddObserver(FileSystemObserver* observer) override;
+ void RemoveObserver(FileSystemObserver* observer) override;
+ void CheckForUpdates() override;
+ void Search(const std::string& search_query,
+ const GURL& next_link,
+ const SearchCallback& callback) override;
+ void SearchMetadata(const std::string& query,
+ int options,
+ int at_most_num_matches,
+ const SearchMetadataCallback& callback) override;
+ void SearchByHashes(const std::set<std::string>& hashes,
+ const SearchByHashesCallback& callback) override;
+ void TransferFileFromLocalToRemote(
+ const base::FilePath& local_src_file_path,
+ const base::FilePath& remote_dest_file_path,
+ const FileOperationCallback& callback) override;
+ void OpenFile(const base::FilePath& file_path,
+ OpenMode open_mode,
+ const std::string& mime_type,
+ const OpenFileCallback& callback) override;
+ void Copy(const base::FilePath& src_file_path,
+ const base::FilePath& dest_file_path,
+ bool preserve_last_modified,
+ const FileOperationCallback& callback) override;
+ void Move(const base::FilePath& src_file_path,
+ const base::FilePath& dest_file_path,
+ const FileOperationCallback& callback) override;
+ void Remove(const base::FilePath& file_path,
+ bool is_recursive,
+ const FileOperationCallback& callback) override;
+ void CreateDirectory(const base::FilePath& directory_path,
+ bool is_exclusive,
+ bool is_recursive,
+ const FileOperationCallback& callback) override;
+ void CreateFile(const base::FilePath& file_path,
+ bool is_exclusive,
+ const std::string& mime_type,
+ const FileOperationCallback& callback) override;
+ void TouchFile(const base::FilePath& file_path,
+ const base::Time& last_access_time,
+ const base::Time& last_modified_time,
+ const FileOperationCallback& callback) override;
+ void TruncateFile(const base::FilePath& file_path,
+ int64 length,
+ const FileOperationCallback& callback) override;
+ void Pin(const base::FilePath& file_path,
+ const FileOperationCallback& callback) override;
+ void Unpin(const base::FilePath& file_path,
+ const FileOperationCallback& callback) override;
+ void GetFile(const base::FilePath& file_path,
+ const GetFileCallback& callback) override;
+ void GetFileForSaving(const base::FilePath& file_path,
+ const GetFileCallback& callback) override;
+ base::Closure GetFileContent(
+ const base::FilePath& file_path,
+ const GetFileContentInitializedCallback& initialized_callback,
+ const google_apis::GetContentCallback& get_content_callback,
+ const FileOperationCallback& completion_callback) override;
+ void GetResourceEntry(const base::FilePath& file_path,
+ const GetResourceEntryCallback& callback) override;
+ void ReadDirectory(const base::FilePath& directory_path,
+ const ReadDirectoryEntriesCallback& entries_callback,
+ const FileOperationCallback& completion_callback) override;
+ void GetAvailableSpace(const GetAvailableSpaceCallback& callback) override;
+ void GetShareUrl(const base::FilePath& file_path,
+ const GURL& embed_origin,
+ const GetShareUrlCallback& callback) override;
+ void GetMetadata(const GetFilesystemMetadataCallback& callback) override;
+ void MarkCacheFileAsMounted(const base::FilePath& drive_file_path,
+ const MarkMountedCallback& callback) override;
+ void MarkCacheFileAsUnmounted(const base::FilePath& cache_file_path,
+ const FileOperationCallback& callback) override;
+ void AddPermission(const base::FilePath& drive_file_path,
+ const std::string& email,
+ google_apis::drive::PermissionRole role,
+ const FileOperationCallback& callback) override;
+ void SetProperty(const base::FilePath& drive_file_path,
+ google_apis::drive::Property::Visibility visibility,
+ const std::string& key,
+ const std::string& value,
+ const FileOperationCallback& callback) override;
+ void Reset(const FileOperationCallback& callback) override;
+ void GetPathFromResourceId(const std::string& resource_id,
+ const GetFilePathCallback& callback) override;
+ void FreeDiskSpaceIfNeededFor(int64 num_bytes,
+ const FreeDiskSpaceCallback& callback) override;
+ void CalculateEvictableCacheSize(
+ const EvictableCacheSizeCallback& callback) override;
+
+ // file_system::OperationDelegate overrides.
+ void OnFileChangedByOperation(const FileChange& changed_files) override;
+ void OnEntryUpdatedByOperation(const ClientContext& context,
+ const std::string& local_id) override;
+ void OnDriveSyncError(file_system::DriveSyncErrorType type,
+ const std::string& local_id) override;
+ bool WaitForSyncComplete(const std::string& local_id,
+ const FileOperationCallback& callback) override;
+
+ // ChangeListLoader::Observer overrides.
+ // Used to propagate events from ChangeListLoader.
+ void OnDirectoryReloaded(const base::FilePath& directory_path) override;
+ void OnFileChanged(const FileChange& changed_files) override;
+ void OnLoadFromServerComplete() override;
+ void OnInitialLoadComplete() override;
+
+ // Used by tests.
+ internal::ChangeListLoader* change_list_loader_for_testing() {
+ return change_list_loader_.get();
+ }
+ 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 ReadDirectory()
+ // is called and made sure that the resource metadata is loaded.
+ void CreateDirectoryAfterRead(const CreateDirectoryParams& params,
+ FileError error);
+
+ void FinishPin(const FileOperationCallback& callback,
+ const std::string* local_id,
+ FileError error);
+
+ void FinishUnpin(const FileOperationCallback& callback,
+ const std::string* local_id,
+ FileError error);
+
+ // Callback for handling about resource fetch.
+ void OnGetAboutResource(
+ const GetAvailableSpaceCallback& callback,
+ google_apis::DriveApiErrorCode status,
+ scoped_ptr<google_apis::AboutResource> about_resource);
+
+ // Part of CheckForUpdates(). Called when
+ // ChangeListLoader::CheckForUpdates() is complete.
+ void OnUpdateChecked(FileError error);
+
+ // Part of GetResourceEntry().
+ // Called when ReadDirectory() is complete.
+ void GetResourceEntryAfterRead(const base::FilePath& file_path,
+ const GetResourceEntryCallback& callback,
+ FileError error);
+
+ // 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,
+ ResourceEntry* entry,
+ FileError error);
+ void OnGetResourceEntryForGetShareUrl(const GetShareUrlCallback& callback,
+ google_apis::DriveApiErrorCode 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* file_path,
+ FileError error);
+
+ // Used to get Drive related preferences.
+ PrefService* pref_service_;
+
+ // Sub components owned by DriveIntegrationService.
+ EventLogger* logger_;
+ internal::FileCache* cache_;
+ JobScheduler* scheduler_;
+ internal::ResourceMetadata* resource_metadata_;
+
+ // Time of the last update check.
+ base::Time last_update_check_time_;
+
+ // Error of the last update check.
+ FileError last_update_check_error_;
+
+ // 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_;
+
+ base::ObserverList<FileSystemObserver> observers_;
+
+ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
+
+ base::FilePath temporary_file_directory_;
+
+ // Implementation of each file system operation.
+ scoped_ptr<file_system::CopyOperation> copy_operation_;
+ scoped_ptr<file_system::CreateDirectoryOperation> create_directory_operation_;
+ scoped_ptr<file_system::CreateFileOperation> create_file_operation_;
+ scoped_ptr<file_system::MoveOperation> move_operation_;
+ scoped_ptr<file_system::OpenFileOperation> open_file_operation_;
+ scoped_ptr<file_system::RemoveOperation> remove_operation_;
+ scoped_ptr<file_system::TouchOperation> touch_operation_;
+ scoped_ptr<file_system::TruncateOperation> truncate_operation_;
+ scoped_ptr<file_system::DownloadOperation> download_operation_;
+ scoped_ptr<file_system::SearchOperation> search_operation_;
+ scoped_ptr<file_system::GetFileForSavingOperation>
+ get_file_for_saving_operation_;
+ scoped_ptr<file_system::SetPropertyOperation> set_property_operation_;
+
+ base::ThreadChecker thread_checker_;
+
+ // Note: This should remain the last member so it'll be destroyed and
+ // invalidate the weak pointers before any other members are destroyed.
+ base::WeakPtrFactory<FileSystem> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(FileSystem);
+};
+
+} // namespace drive
+
+#endif // COMPONENTS_DRIVE_FILE_SYSTEM_H_