Index: chrome/browser/chromeos/drive/file_system.cc |
diff --git a/chrome/browser/chromeos/drive/file_system.cc b/chrome/browser/chromeos/drive/file_system.cc |
deleted file mode 100644 |
index faf230d7dc1ef69c81b6beac0ad7828e35113189..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/drive/file_system.cc |
+++ /dev/null |
@@ -1,1060 +0,0 @@ |
-// 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. |
- |
-#include "chrome/browser/chromeos/drive/file_system.h" |
- |
-#include "base/bind.h" |
-#include "base/files/file_util.h" |
-#include "base/prefs/pref_service.h" |
-#include "chrome/browser/chromeos/drive/directory_loader.h" |
-#include "chrome/browser/chromeos/drive/file_system_observer.h" |
-#include "chrome/browser/chromeos/drive/remove_stale_cache_files.h" |
-#include "chrome/browser/chromeos/drive/search_metadata.h" |
-#include "chrome/browser/chromeos/drive/sync_client.h" |
-#include "components/drive/change_list_loader.h" |
-#include "components/drive/drive.pb.h" |
-#include "components/drive/drive_pref_names.h" |
-#include "components/drive/file_cache.h" |
-#include "components/drive/file_change.h" |
-#include "components/drive/file_system/copy_operation.h" |
-#include "components/drive/file_system/create_directory_operation.h" |
-#include "components/drive/file_system/create_file_operation.h" |
-#include "components/drive/file_system/download_operation.h" |
-#include "components/drive/file_system/get_file_for_saving_operation.h" |
-#include "components/drive/file_system/move_operation.h" |
-#include "components/drive/file_system/open_file_operation.h" |
-#include "components/drive/file_system/remove_operation.h" |
-#include "components/drive/file_system/search_operation.h" |
-#include "components/drive/file_system/set_property_operation.h" |
-#include "components/drive/file_system/touch_operation.h" |
-#include "components/drive/file_system/truncate_operation.h" |
-#include "components/drive/file_system_core_util.h" |
-#include "components/drive/job_scheduler.h" |
-#include "components/drive/resource_entry_conversion.h" |
-#include "google_apis/drive/drive_api_parser.h" |
- |
-namespace drive { |
-namespace { |
- |
-// Gets a ResourceEntry from the metadata, and overwrites its file info when the |
-// cached file is dirty. |
-FileError GetLocallyStoredResourceEntry( |
- internal::ResourceMetadata* resource_metadata, |
- internal::FileCache* cache, |
- const base::FilePath& file_path, |
- ResourceEntry* entry) { |
- std::string local_id; |
- FileError error = resource_metadata->GetIdByPath(file_path, &local_id); |
- if (error != FILE_ERROR_OK) |
- return error; |
- |
- error = resource_metadata->GetResourceEntryById(local_id, entry); |
- if (error != FILE_ERROR_OK) |
- return error; |
- |
- // For entries that will never be cached, use the original resource entry |
- // as is. |
- if (!entry->has_file_specific_info() || |
- entry->file_specific_info().is_hosted_document()) |
- return FILE_ERROR_OK; |
- |
- // When cache is not found, use the original resource entry as is. |
- if (!entry->file_specific_info().has_cache_state()) |
- return FILE_ERROR_OK; |
- |
- // When cache is non-dirty and obsolete (old hash), use the original entry. |
- if (!entry->file_specific_info().cache_state().is_dirty() && |
- entry->file_specific_info().md5() != |
- entry->file_specific_info().cache_state().md5()) |
- return FILE_ERROR_OK; |
- |
- // If there's a valid cache, obtain the file info from the cache file itself. |
- base::FilePath local_cache_path; |
- error = cache->GetFile(local_id, &local_cache_path); |
- if (error != FILE_ERROR_OK) |
- return error; |
- |
- base::File::Info file_info; |
- if (!base::GetFileInfo(local_cache_path, &file_info)) |
- return FILE_ERROR_NOT_FOUND; |
- |
- entry->mutable_file_info()->set_size(file_info.size); |
- return FILE_ERROR_OK; |
-} |
- |
-// Runs the callback with parameters. |
-void RunGetResourceEntryCallback(const GetResourceEntryCallback& callback, |
- scoped_ptr<ResourceEntry> entry, |
- FileError error) { |
- DCHECK(!callback.is_null()); |
- |
- if (error != FILE_ERROR_OK) |
- entry.reset(); |
- callback.Run(error, entry.Pass()); |
-} |
- |
-// Used to implement Pin(). |
-FileError PinInternal(internal::ResourceMetadata* resource_metadata, |
- internal::FileCache* cache, |
- const base::FilePath& file_path, |
- std::string* local_id) { |
- FileError error = resource_metadata->GetIdByPath(file_path, local_id); |
- if (error != FILE_ERROR_OK) |
- return error; |
- |
- ResourceEntry entry; |
- error = resource_metadata->GetResourceEntryById(*local_id, &entry); |
- if (error != FILE_ERROR_OK) |
- return error; |
- |
- // TODO(hashimoto): Support pinning directories. crbug.com/127831 |
- if (entry.file_info().is_directory()) |
- return FILE_ERROR_NOT_A_FILE; |
- |
- return cache->Pin(*local_id); |
-} |
- |
-// Used to implement Unpin(). |
-FileError UnpinInternal(internal::ResourceMetadata* resource_metadata, |
- internal::FileCache* cache, |
- const base::FilePath& file_path, |
- std::string* local_id) { |
- FileError error = resource_metadata->GetIdByPath(file_path, local_id); |
- if (error != FILE_ERROR_OK) |
- return error; |
- |
- return cache->Unpin(*local_id); |
-} |
- |
-// Used to implement MarkCacheFileAsMounted(). |
-FileError MarkCacheFileAsMountedInternal( |
- internal::ResourceMetadata* resource_metadata, |
- internal::FileCache* cache, |
- const base::FilePath& drive_file_path, |
- base::FilePath* cache_file_path) { |
- std::string local_id; |
- FileError error = resource_metadata->GetIdByPath(drive_file_path, &local_id); |
- if (error != FILE_ERROR_OK) |
- return error; |
- |
- return cache->MarkAsMounted(local_id, cache_file_path); |
-} |
- |
-// Runs the callback with arguments. |
-void RunMarkMountedCallback(const MarkMountedCallback& callback, |
- base::FilePath* cache_file_path, |
- FileError error) { |
- DCHECK(!callback.is_null()); |
- callback.Run(error, *cache_file_path); |
-} |
- |
-// Callback for ResourceMetadata::GetLargestChangestamp. |
-// |callback| must not be null. |
-void OnGetLargestChangestamp( |
- FileSystemMetadata metadata, // Will be modified. |
- const GetFilesystemMetadataCallback& callback, |
- const int64* largest_changestamp, |
- FileError error) { |
- DCHECK(!callback.is_null()); |
- |
- metadata.largest_changestamp = *largest_changestamp; |
- callback.Run(metadata); |
-} |
- |
-// Thin adapter to map GetFileCallback to FileOperationCallback. |
-void GetFileCallbackToFileOperationCallbackAdapter( |
- const FileOperationCallback& callback, |
- FileError error, |
- const base::FilePath& unused_file_path, |
- scoped_ptr<ResourceEntry> unused_entry) { |
- callback.Run(error); |
-} |
- |
-// Clears |resource_metadata| and |cache|. |
-FileError ResetOnBlockingPool(internal::ResourceMetadata* resource_metadata, |
- internal::FileCache* cache) { |
- FileError error = resource_metadata->Reset(); |
- if (error != FILE_ERROR_OK) |
- return error; |
- return cache->ClearAll() ? FILE_ERROR_OK : FILE_ERROR_FAILED; |
-} |
- |
-// Part of GetPathFromResourceId(). |
-// Obtains |file_path| from |resource_id|. The function should be run on the |
-// blocking pool. |
-FileError GetPathFromResourceIdOnBlockingPool( |
- internal::ResourceMetadata* resource_metadata, |
- const std::string& resource_id, |
- base::FilePath* file_path) { |
- std::string local_id; |
- const FileError error = |
- resource_metadata->GetIdByResourceId(resource_id, &local_id); |
- if (error != FILE_ERROR_OK) |
- return error; |
- return resource_metadata->GetFilePath(local_id, file_path); |
-} |
- |
-// Part of GetPathFromResourceId(). |
-// Called when GetPathFromResourceIdInBlockingPool is complete. |
-void GetPathFromResourceIdAfterGetPath(base::FilePath* file_path, |
- const GetFilePathCallback& callback, |
- FileError error) { |
- callback.Run(error, *file_path); |
-} |
- |
-bool FreeDiskSpaceIfNeededForOnBlockingPool(internal::FileCache* cache, |
- int64 num_bytes) { |
- return cache->FreeDiskSpaceIfNeededFor(num_bytes); |
-} |
- |
-uint64_t CalculateEvictableCacheSizeOnBlockingPool(internal::FileCache* cache) { |
- return cache->CalculateEvictableCacheSize(); |
-} |
- |
-// Excludes hosted documents from the given entries. |
-// Used to implement ReadDirectory(). |
-void FilterHostedDocuments(const ReadDirectoryEntriesCallback& callback, |
- scoped_ptr<ResourceEntryVector> entries) { |
- DCHECK(!callback.is_null()); |
- |
- if (entries) { |
- // TODO(kinaba): Stop handling hide_hosted_docs here. crbug.com/256520. |
- scoped_ptr<ResourceEntryVector> filtered(new ResourceEntryVector); |
- for (size_t i = 0; i < entries->size(); ++i) { |
- if (entries->at(i).file_specific_info().is_hosted_document()) { |
- continue; |
- } |
- filtered->push_back(entries->at(i)); |
- } |
- entries.swap(filtered); |
- } |
- callback.Run(entries.Pass()); |
-} |
- |
-// Adapter for using FileOperationCallback as google_apis::EntryActionCallback. |
-void RunFileOperationCallbackAsEntryActionCallback( |
- const FileOperationCallback& callback, |
- google_apis::DriveApiErrorCode error) { |
- callback.Run(GDataToFileError(error)); |
-} |
- |
-// Checks if the |entry|'s hash is included in |hashes|. |
-bool CheckHashes(const std::set<std::string>& hashes, |
- const ResourceEntry& entry) { |
- return hashes.find(entry.file_specific_info().md5()) != hashes.end(); |
-} |
- |
-// Runs |callback| with |error| and the list of HashAndFilePath obtained from |
-// |original_result|. |
-void RunSearchByHashesCallback( |
- const SearchByHashesCallback& callback, |
- FileError error, |
- scoped_ptr<MetadataSearchResultVector> original_result) { |
- std::vector<HashAndFilePath> result; |
- if (error != FILE_ERROR_OK) { |
- callback.Run(error, result); |
- return; |
- } |
- for (const auto& search_result : *original_result) { |
- HashAndFilePath hash_and_path; |
- hash_and_path.hash = search_result.md5; |
- hash_and_path.path = search_result.path; |
- result.push_back(hash_and_path); |
- } |
- callback.Run(FILE_ERROR_OK, result); |
-} |
- |
-} // namespace |
- |
-struct FileSystem::CreateDirectoryParams { |
- base::FilePath directory_path; |
- bool is_exclusive; |
- bool is_recursive; |
- FileOperationCallback callback; |
-}; |
- |
-FileSystem::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) |
- : pref_service_(pref_service), |
- logger_(logger), |
- cache_(cache), |
- scheduler_(scheduler), |
- resource_metadata_(resource_metadata), |
- last_update_check_error_(FILE_ERROR_OK), |
- blocking_task_runner_(blocking_task_runner), |
- file_task_runner_(file_task_runner), |
- temporary_file_directory_(temporary_file_directory), |
- weak_ptr_factory_(this) { |
- ResetComponents(); |
-} |
- |
-FileSystem::~FileSystem() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- directory_loader_->RemoveObserver(this); |
- change_list_loader_->RemoveObserver(this); |
-} |
- |
-void FileSystem::Reset(const FileOperationCallback& callback) { |
- // Discard the current loader and operation objects and renew them. This is to |
- // avoid that changes initiated before the metadata reset is applied after the |
- // reset, which may cause an inconsistent state. |
- // TODO(kinaba): callbacks held in the subcomponents are discarded. We might |
- // want to have a way to abort and flush callbacks in in-flight operations. |
- ResetComponents(); |
- |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&ResetOnBlockingPool, resource_metadata_, cache_), |
- callback); |
-} |
- |
-void FileSystem::ResetComponents() { |
- file_system::OperationDelegate* delegate = this; |
- |
- about_resource_loader_.reset(new internal::AboutResourceLoader(scheduler_)); |
- loader_controller_.reset(new internal::LoaderController); |
- change_list_loader_.reset(new internal::ChangeListLoader( |
- logger_, |
- blocking_task_runner_.get(), |
- resource_metadata_, |
- scheduler_, |
- about_resource_loader_.get(), |
- loader_controller_.get())); |
- change_list_loader_->AddObserver(this); |
- directory_loader_.reset(new internal::DirectoryLoader( |
- logger_, |
- blocking_task_runner_.get(), |
- resource_metadata_, |
- scheduler_, |
- about_resource_loader_.get(), |
- loader_controller_.get())); |
- directory_loader_->AddObserver(this); |
- |
- sync_client_.reset(new internal::SyncClient(blocking_task_runner_.get(), |
- delegate, |
- scheduler_, |
- resource_metadata_, |
- cache_, |
- loader_controller_.get(), |
- temporary_file_directory_)); |
- |
- copy_operation_.reset( |
- new file_system::CopyOperation(blocking_task_runner_.get(), |
- delegate, |
- scheduler_, |
- resource_metadata_, |
- cache_)); |
- create_directory_operation_.reset(new file_system::CreateDirectoryOperation( |
- blocking_task_runner_.get(), delegate, resource_metadata_)); |
- create_file_operation_.reset( |
- new file_system::CreateFileOperation(blocking_task_runner_.get(), |
- delegate, |
- resource_metadata_)); |
- move_operation_.reset( |
- new file_system::MoveOperation(blocking_task_runner_.get(), |
- delegate, |
- resource_metadata_)); |
- open_file_operation_.reset( |
- new file_system::OpenFileOperation(blocking_task_runner_.get(), |
- delegate, |
- scheduler_, |
- resource_metadata_, |
- cache_, |
- temporary_file_directory_)); |
- remove_operation_.reset( |
- new file_system::RemoveOperation(blocking_task_runner_.get(), |
- delegate, |
- resource_metadata_, |
- cache_)); |
- touch_operation_.reset(new file_system::TouchOperation( |
- blocking_task_runner_.get(), delegate, resource_metadata_)); |
- truncate_operation_.reset( |
- new file_system::TruncateOperation(blocking_task_runner_.get(), |
- delegate, |
- scheduler_, |
- resource_metadata_, |
- cache_, |
- temporary_file_directory_)); |
- download_operation_.reset( |
- new file_system::DownloadOperation(blocking_task_runner_.get(), |
- delegate, |
- scheduler_, |
- resource_metadata_, |
- cache_, |
- temporary_file_directory_)); |
- search_operation_.reset(new file_system::SearchOperation( |
- blocking_task_runner_.get(), scheduler_, resource_metadata_, |
- loader_controller_.get())); |
- get_file_for_saving_operation_.reset( |
- new file_system::GetFileForSavingOperation( |
- logger_, blocking_task_runner_.get(), file_task_runner_.get(), |
- delegate, scheduler_, resource_metadata_, cache_, |
- temporary_file_directory_)); |
- set_property_operation_.reset(new file_system::SetPropertyOperation( |
- blocking_task_runner_.get(), delegate, resource_metadata_)); |
-} |
- |
-void FileSystem::CheckForUpdates() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DVLOG(1) << "CheckForUpdates"; |
- |
- change_list_loader_->CheckForUpdates( |
- base::Bind(&FileSystem::OnUpdateChecked, weak_ptr_factory_.GetWeakPtr())); |
-} |
- |
-void FileSystem::OnUpdateChecked(FileError error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DVLOG(1) << "CheckForUpdates finished: " << FileErrorToString(error); |
- last_update_check_time_ = base::Time::Now(); |
- last_update_check_error_ = error; |
-} |
- |
-void FileSystem::AddObserver(FileSystemObserver* observer) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- observers_.AddObserver(observer); |
-} |
- |
-void FileSystem::RemoveObserver(FileSystemObserver* observer) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- observers_.RemoveObserver(observer); |
-} |
- |
-void FileSystem::TransferFileFromLocalToRemote( |
- const base::FilePath& local_src_file_path, |
- const base::FilePath& remote_dest_file_path, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- copy_operation_->TransferFileFromLocalToRemote(local_src_file_path, |
- remote_dest_file_path, |
- callback); |
-} |
- |
-void FileSystem::Copy(const base::FilePath& src_file_path, |
- const base::FilePath& dest_file_path, |
- bool preserve_last_modified, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- copy_operation_->Copy( |
- src_file_path, dest_file_path, preserve_last_modified, callback); |
-} |
- |
-void FileSystem::Move(const base::FilePath& src_file_path, |
- const base::FilePath& dest_file_path, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- move_operation_->Move(src_file_path, dest_file_path, callback); |
-} |
- |
-void FileSystem::Remove(const base::FilePath& file_path, |
- bool is_recursive, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- remove_operation_->Remove(file_path, is_recursive, callback); |
-} |
- |
-void FileSystem::CreateDirectory( |
- const base::FilePath& directory_path, |
- bool is_exclusive, |
- bool is_recursive, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- CreateDirectoryParams params; |
- params.directory_path = directory_path; |
- params.is_exclusive = is_exclusive; |
- params.is_recursive = is_recursive; |
- params.callback = callback; |
- |
- // Ensure its parent directory is loaded to the local metadata. |
- ReadDirectory(directory_path.DirName(), |
- ReadDirectoryEntriesCallback(), |
- base::Bind(&FileSystem::CreateDirectoryAfterRead, |
- weak_ptr_factory_.GetWeakPtr(), params)); |
-} |
- |
-void FileSystem::CreateDirectoryAfterRead(const CreateDirectoryParams& params, |
- FileError error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!params.callback.is_null()); |
- |
- DVLOG_IF(1, error != FILE_ERROR_OK) << "ReadDirectory failed. " |
- << FileErrorToString(error); |
- |
- create_directory_operation_->CreateDirectory( |
- params.directory_path, params.is_exclusive, params.is_recursive, |
- params.callback); |
-} |
- |
-void FileSystem::CreateFile(const base::FilePath& file_path, |
- bool is_exclusive, |
- const std::string& mime_type, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- create_file_operation_->CreateFile( |
- file_path, is_exclusive, mime_type, callback); |
-} |
- |
-void FileSystem::TouchFile(const base::FilePath& file_path, |
- const base::Time& last_access_time, |
- const base::Time& last_modified_time, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- touch_operation_->TouchFile( |
- file_path, last_access_time, last_modified_time, callback); |
-} |
- |
-void FileSystem::TruncateFile(const base::FilePath& file_path, |
- int64 length, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- truncate_operation_->Truncate(file_path, length, callback); |
-} |
- |
-void FileSystem::Pin(const base::FilePath& file_path, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- std::string* local_id = new std::string; |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&PinInternal, resource_metadata_, cache_, file_path, local_id), |
- base::Bind(&FileSystem::FinishPin, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback, |
- base::Owned(local_id))); |
-} |
- |
-void FileSystem::FinishPin(const FileOperationCallback& callback, |
- const std::string* local_id, |
- FileError error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- if (error == FILE_ERROR_OK) |
- sync_client_->AddFetchTask(*local_id); |
- callback.Run(error); |
-} |
- |
-void FileSystem::Unpin(const base::FilePath& file_path, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- std::string* local_id = new std::string; |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind( |
- &UnpinInternal, resource_metadata_, cache_, file_path, local_id), |
- base::Bind(&FileSystem::FinishUnpin, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback, |
- base::Owned(local_id))); |
-} |
- |
-void FileSystem::FinishUnpin(const FileOperationCallback& callback, |
- const std::string* local_id, |
- FileError error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- if (error == FILE_ERROR_OK) |
- sync_client_->RemoveFetchTask(*local_id); |
- callback.Run(error); |
-} |
- |
-void FileSystem::GetFile(const base::FilePath& file_path, |
- const GetFileCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- download_operation_->EnsureFileDownloadedByPath( |
- file_path, |
- ClientContext(USER_INITIATED), |
- GetFileContentInitializedCallback(), |
- google_apis::GetContentCallback(), |
- callback); |
-} |
- |
-void FileSystem::GetFileForSaving(const base::FilePath& file_path, |
- const GetFileCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- get_file_for_saving_operation_->GetFileForSaving(file_path, callback); |
-} |
- |
-base::Closure FileSystem::GetFileContent( |
- const base::FilePath& file_path, |
- const GetFileContentInitializedCallback& initialized_callback, |
- const google_apis::GetContentCallback& get_content_callback, |
- const FileOperationCallback& completion_callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!initialized_callback.is_null()); |
- DCHECK(!get_content_callback.is_null()); |
- DCHECK(!completion_callback.is_null()); |
- |
- return download_operation_->EnsureFileDownloadedByPath( |
- file_path, |
- ClientContext(USER_INITIATED), |
- initialized_callback, |
- get_content_callback, |
- base::Bind(&GetFileCallbackToFileOperationCallbackAdapter, |
- completion_callback)); |
-} |
- |
-void FileSystem::GetResourceEntry( |
- const base::FilePath& file_path, |
- const GetResourceEntryCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- ReadDirectory(file_path.DirName(), |
- ReadDirectoryEntriesCallback(), |
- base::Bind(&FileSystem::GetResourceEntryAfterRead, |
- weak_ptr_factory_.GetWeakPtr(), |
- file_path, |
- callback)); |
-} |
- |
-void FileSystem::GetResourceEntryAfterRead( |
- const base::FilePath& file_path, |
- const GetResourceEntryCallback& callback, |
- FileError error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- DVLOG_IF(1, error != FILE_ERROR_OK) << "ReadDirectory failed. " |
- << FileErrorToString(error); |
- |
- scoped_ptr<ResourceEntry> entry(new ResourceEntry); |
- ResourceEntry* entry_ptr = entry.get(); |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&GetLocallyStoredResourceEntry, |
- resource_metadata_, |
- cache_, |
- file_path, |
- entry_ptr), |
- base::Bind(&RunGetResourceEntryCallback, callback, base::Passed(&entry))); |
-} |
- |
-void FileSystem::ReadDirectory( |
- const base::FilePath& directory_path, |
- const ReadDirectoryEntriesCallback& entries_callback_in, |
- const FileOperationCallback& completion_callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!completion_callback.is_null()); |
- |
- const bool hide_hosted_docs = |
- pref_service_->GetBoolean(prefs::kDisableDriveHostedFiles); |
- ReadDirectoryEntriesCallback entries_callback = entries_callback_in; |
- if (!entries_callback.is_null() && hide_hosted_docs) |
- entries_callback = base::Bind(&FilterHostedDocuments, entries_callback); |
- |
- directory_loader_->ReadDirectory( |
- directory_path, entries_callback, completion_callback); |
- |
- // Also start loading all of the user's contents. |
- change_list_loader_->LoadIfNeeded( |
- base::Bind(&util::EmptyFileOperationCallback)); |
-} |
- |
-void FileSystem::GetAvailableSpace( |
- const GetAvailableSpaceCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- about_resource_loader_->GetAboutResource( |
- base::Bind(&FileSystem::OnGetAboutResource, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback)); |
-} |
- |
-void FileSystem::OnGetAboutResource( |
- const GetAvailableSpaceCallback& callback, |
- google_apis::DriveApiErrorCode status, |
- scoped_ptr<google_apis::AboutResource> about_resource) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- FileError error = GDataToFileError(status); |
- if (error != FILE_ERROR_OK) { |
- callback.Run(error, -1, -1); |
- return; |
- } |
- DCHECK(about_resource); |
- |
- callback.Run(FILE_ERROR_OK, about_resource->quota_bytes_total(), |
- about_resource->quota_bytes_used_aggregate()); |
-} |
- |
-void FileSystem::GetShareUrl(const base::FilePath& file_path, |
- const GURL& embed_origin, |
- const GetShareUrlCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- // Resolve the resource id. |
- ResourceEntry* entry = new ResourceEntry; |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath, |
- base::Unretained(resource_metadata_), |
- file_path, |
- entry), |
- base::Bind(&FileSystem::GetShareUrlAfterGetResourceEntry, |
- weak_ptr_factory_.GetWeakPtr(), |
- file_path, |
- embed_origin, |
- callback, |
- base::Owned(entry))); |
-} |
- |
-void FileSystem::GetShareUrlAfterGetResourceEntry( |
- const base::FilePath& file_path, |
- const GURL& embed_origin, |
- const GetShareUrlCallback& callback, |
- ResourceEntry* entry, |
- FileError error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- if (error != FILE_ERROR_OK) { |
- callback.Run(error, GURL()); |
- return; |
- } |
- if (entry->resource_id().empty()) { |
- // This entry does not exist on the server. Just return. |
- callback.Run(FILE_ERROR_FAILED, GURL()); |
- return; |
- } |
- |
- scheduler_->GetShareUrl( |
- entry->resource_id(), |
- embed_origin, |
- ClientContext(USER_INITIATED), |
- base::Bind(&FileSystem::OnGetResourceEntryForGetShareUrl, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback)); |
-} |
- |
-void FileSystem::OnGetResourceEntryForGetShareUrl( |
- const GetShareUrlCallback& callback, |
- google_apis::DriveApiErrorCode status, |
- const GURL& share_url) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- FileError error = GDataToFileError(status); |
- if (error != FILE_ERROR_OK) { |
- callback.Run(error, GURL()); |
- return; |
- } |
- |
- if (share_url.is_empty()) { |
- callback.Run(FILE_ERROR_FAILED, GURL()); |
- return; |
- } |
- |
- callback.Run(FILE_ERROR_OK, share_url); |
-} |
- |
-void FileSystem::Search(const std::string& search_query, |
- const GURL& next_link, |
- const SearchCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- search_operation_->Search(search_query, next_link, callback); |
-} |
- |
-void FileSystem::SearchMetadata(const std::string& query, |
- int options, |
- int at_most_num_matches, |
- const SearchMetadataCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- // TODO(satorux): Stop handling hide_hosted_docs here. crbug.com/256520. |
- if (pref_service_->GetBoolean(prefs::kDisableDriveHostedFiles)) |
- options |= SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS; |
- |
- drive::internal::SearchMetadata( |
- blocking_task_runner_, resource_metadata_, query, |
- base::Bind(&drive::internal::MatchesType, options), at_most_num_matches, |
- callback); |
-} |
- |
-void FileSystem::SearchByHashes(const std::set<std::string>& hashes, |
- const SearchByHashesCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- drive::internal::SearchMetadata( |
- blocking_task_runner_, resource_metadata_, |
- /* any file name */ "", base::Bind(&CheckHashes, hashes), |
- std::numeric_limits<size_t>::max(), |
- base::Bind(&RunSearchByHashesCallback, callback)); |
-} |
- |
-void FileSystem::OnFileChangedByOperation(const FileChange& changed_files) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- FOR_EACH_OBSERVER( |
- FileSystemObserver, observers_, OnFileChanged(changed_files)); |
-} |
- |
-void FileSystem::OnEntryUpdatedByOperation(const ClientContext& context, |
- const std::string& local_id) { |
- sync_client_->AddUpdateTask(context, local_id); |
-} |
- |
-void FileSystem::OnDriveSyncError(file_system::DriveSyncErrorType type, |
- const std::string& local_id) { |
- base::FilePath* file_path = new base::FilePath; |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&internal::ResourceMetadata::GetFilePath, |
- base::Unretained(resource_metadata_), |
- local_id, |
- file_path), |
- base::Bind(&FileSystem::OnDriveSyncErrorAfterGetFilePath, |
- weak_ptr_factory_.GetWeakPtr(), |
- type, |
- base::Owned(file_path))); |
-} |
- |
-void FileSystem::OnDriveSyncErrorAfterGetFilePath( |
- file_system::DriveSyncErrorType type, |
- const base::FilePath* file_path, |
- FileError error) { |
- if (error != FILE_ERROR_OK) |
- return; |
- FOR_EACH_OBSERVER(FileSystemObserver, |
- observers_, |
- OnDriveSyncError(type, *file_path)); |
-} |
- |
-bool FileSystem::WaitForSyncComplete(const std::string& local_id, |
- const FileOperationCallback& callback) { |
- return sync_client_->WaitForUpdateTaskToComplete(local_id, callback); |
-} |
- |
-void FileSystem::OnDirectoryReloaded(const base::FilePath& directory_path) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- FOR_EACH_OBSERVER( |
- FileSystemObserver, observers_, OnDirectoryChanged(directory_path)); |
-} |
- |
-void FileSystem::OnFileChanged(const FileChange& changed_files) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- FOR_EACH_OBSERVER( |
- FileSystemObserver, observers_, OnFileChanged(changed_files)); |
-} |
- |
-void FileSystem::OnLoadFromServerComplete() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- sync_client_->StartCheckingExistingPinnedFiles(); |
-} |
- |
-void FileSystem::OnInitialLoadComplete() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- blocking_task_runner_->PostTask(FROM_HERE, |
- base::Bind(&internal::RemoveStaleCacheFiles, |
- cache_, |
- resource_metadata_)); |
- sync_client_->StartProcessingBacklog(); |
-} |
- |
-void FileSystem::GetMetadata( |
- const GetFilesystemMetadataCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- FileSystemMetadata metadata; |
- metadata.refreshing = change_list_loader_->IsRefreshing(); |
- |
- // Metadata related to delta update. |
- metadata.last_update_check_time = last_update_check_time_; |
- metadata.last_update_check_error = last_update_check_error_; |
- |
- int64* largest_changestamp = new int64(0); |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&internal::ResourceMetadata::GetLargestChangestamp, |
- base::Unretained(resource_metadata_), |
- largest_changestamp), |
- base::Bind(&OnGetLargestChangestamp, |
- metadata, |
- callback, |
- base::Owned(largest_changestamp))); |
-} |
- |
-void FileSystem::MarkCacheFileAsMounted( |
- const base::FilePath& drive_file_path, |
- const MarkMountedCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- base::FilePath* cache_file_path = new base::FilePath; |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&MarkCacheFileAsMountedInternal, |
- resource_metadata_, |
- cache_, |
- drive_file_path, |
- cache_file_path), |
- base::Bind( |
- &RunMarkMountedCallback, callback, base::Owned(cache_file_path))); |
-} |
- |
-void FileSystem::MarkCacheFileAsUnmounted( |
- const base::FilePath& cache_file_path, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- if (!cache_->IsUnderFileCacheDirectory(cache_file_path)) { |
- callback.Run(FILE_ERROR_FAILED); |
- return; |
- } |
- |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&internal::FileCache::MarkAsUnmounted, |
- base::Unretained(cache_), |
- cache_file_path), |
- callback); |
-} |
- |
-void FileSystem::AddPermission(const base::FilePath& drive_file_path, |
- const std::string& email, |
- google_apis::drive::PermissionRole role, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- // Resolve the resource id. |
- ResourceEntry* const entry = new ResourceEntry; |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath, |
- base::Unretained(resource_metadata_), |
- drive_file_path, |
- entry), |
- base::Bind(&FileSystem::AddPermissionAfterGetResourceEntry, |
- weak_ptr_factory_.GetWeakPtr(), |
- email, |
- role, |
- callback, |
- base::Owned(entry))); |
-} |
- |
-void FileSystem::AddPermissionAfterGetResourceEntry( |
- const std::string& email, |
- google_apis::drive::PermissionRole role, |
- const FileOperationCallback& callback, |
- ResourceEntry* entry, |
- FileError error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- if (error != FILE_ERROR_OK) { |
- callback.Run(error); |
- return; |
- } |
- |
- scheduler_->AddPermission( |
- entry->resource_id(), |
- email, |
- role, |
- base::Bind(&RunFileOperationCallbackAsEntryActionCallback, callback)); |
-} |
- |
-void FileSystem::SetProperty( |
- const base::FilePath& drive_file_path, |
- google_apis::drive::Property::Visibility visibility, |
- const std::string& key, |
- const std::string& value, |
- const FileOperationCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- set_property_operation_->SetProperty(drive_file_path, visibility, key, value, |
- callback); |
-} |
- |
-void FileSystem::OpenFile(const base::FilePath& file_path, |
- OpenMode open_mode, |
- const std::string& mime_type, |
- const OpenFileCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- open_file_operation_->OpenFile(file_path, open_mode, mime_type, callback); |
-} |
- |
-void FileSystem::GetPathFromResourceId(const std::string& resource_id, |
- const GetFilePathCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- base::FilePath* const file_path = new base::FilePath(); |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&GetPathFromResourceIdOnBlockingPool, |
- resource_metadata_, |
- resource_id, |
- file_path), |
- base::Bind(&GetPathFromResourceIdAfterGetPath, |
- base::Owned(file_path), |
- callback)); |
-} |
- |
-void FileSystem::FreeDiskSpaceIfNeededFor( |
- int64 num_bytes, |
- const FreeDiskSpaceCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), FROM_HERE, |
- base::Bind(&FreeDiskSpaceIfNeededForOnBlockingPool, cache_, num_bytes), |
- callback); |
-} |
- |
-void FileSystem::CalculateEvictableCacheSize( |
- const EvictableCacheSizeCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- base::PostTaskAndReplyWithResult( |
- blocking_task_runner_.get(), FROM_HERE, |
- base::Bind(&CalculateEvictableCacheSizeOnBlockingPool, cache_), callback); |
-} |
-} // namespace drive |