| Index: chrome/browser/chromeos/gdata/gdata_file_system.cc
|
| diff --git a/chrome/browser/chromeos/gdata/gdata_file_system.cc b/chrome/browser/chromeos/gdata/gdata_file_system.cc
|
| index 19c54466ccc97df0c37610b86b4c224cb7b903f9..2454fae1bf68e7b536873f5e0146358dea34fc94 100644
|
| --- a/chrome/browser/chromeos/gdata/gdata_file_system.cc
|
| +++ b/chrome/browser/chromeos/gdata/gdata_file_system.cc
|
| @@ -402,13 +402,14 @@ void GDataFileSystem::StartDirectoryRefresh(
|
| void GDataFileSystem::Remove(const FilePath& file_path,
|
| bool is_recursive,
|
| const FileOperationCallback& callback) {
|
| - GURL document_url = GetDocumentUrlFromPath(file_path);
|
| - if (document_url.is_empty()) {
|
| + GDataFileBase* file_info = GetGDataFileInfoFromPath(file_path);
|
| + if (!file_info) {
|
| if (!callback.is_null()) {
|
| MessageLoop::current()->PostTask(
|
| FROM_HERE,
|
| base::Bind(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND));
|
| }
|
| + return;
|
| }
|
|
|
| BrowserThread::PostTask(
|
| @@ -416,13 +417,13 @@ void GDataFileSystem::Remove(const FilePath& file_path,
|
| base::Bind(
|
| &DocumentsService::DeleteDocument,
|
| documents_service_bound_to_ui_thread_,
|
| - document_url,
|
| + file_info->self_url(),
|
| base::Bind(&GDataFileSystem::OnRemovedDocument,
|
| file_system_bound_to_ui_thread_,
|
| callback,
|
| file_path,
|
| // MessageLoopProxy is used to run |callback| on the
|
| - // thread where Remove() was called.
|
| + // thread where this function was called.
|
| base::MessageLoopProxy::current())));
|
| }
|
|
|
| @@ -501,6 +502,37 @@ void GDataFileSystem::CreateDirectoryInternal(
|
| reply_proxy))));
|
| }
|
|
|
| +void GDataFileSystem::GetFile(const FilePath& file_path,
|
| + const GetFileCallback& callback) {
|
| + GDataFileBase* file_info = GetGDataFileInfoFromPath(file_path);
|
| + if (!file_info) {
|
| + if (!callback.is_null()) {
|
| + MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(callback,
|
| + base::PLATFORM_FILE_ERROR_NOT_FOUND,
|
| + FilePath()));
|
| + }
|
| + return;
|
| + }
|
| +
|
| + // TODO(satorux): We should get a file from the cache if it's present, but
|
| + // the caching layer is not implemented yet. For now, always download from
|
| + // the cloud.
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(
|
| + &DocumentsService::DownloadFile,
|
| + documents_service_bound_to_ui_thread_,
|
| + file_info->content_url(),
|
| + base::Bind(&GDataFileSystem::OnFileDownloaded,
|
| + file_system_bound_to_ui_thread_,
|
| + callback,
|
| + // MessageLoopProxy is used to run |callback| on the
|
| + // thread where this function was called.
|
| + base::MessageLoopProxy::current())));
|
| +}
|
| +
|
| void GDataFileSystem::UnsafeFindFileByPath(
|
| const FilePath& file_path, scoped_refptr<FindFileDelegate> delegate) {
|
| lock_.AssertAcquired();
|
| @@ -552,16 +584,17 @@ void GDataFileSystem::UnsafeFindFileByPath(
|
| delegate->OnError(base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| }
|
|
|
| -GURL GDataFileSystem::GetDocumentUrlFromPath(const FilePath& file_path) {
|
| +GDataFileBase* GDataFileSystem::GetGDataFileInfoFromPath(
|
| + const FilePath& file_path) {
|
| base::AutoLock lock(lock_);
|
| // Find directory element within the cached file system snapshot.
|
| scoped_refptr<ReadOnlyFindFileDelegate> find_delegate(
|
| new ReadOnlyFindFileDelegate());
|
| UnsafeFindFileByPath(file_path, find_delegate);
|
| if (!find_delegate->file())
|
| - return GURL();
|
| + return NULL;
|
|
|
| - return find_delegate->file()->self_url();
|
| + return find_delegate->file();
|
| }
|
|
|
| void GDataFileSystem::OnCreateDirectoryCompleted(
|
| @@ -665,6 +698,22 @@ void GDataFileSystem::OnRemovedDocument(
|
| }
|
| }
|
|
|
| +void GDataFileSystem::OnFileDownloaded(
|
| + const GetFileCallback& callback,
|
| + scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
|
| + GDataErrorCode status,
|
| + const GURL& content_url,
|
| + const FilePath& file_path) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| + base::PlatformFileError error = GDataToPlatformError(status);
|
| +
|
| + if (!callback.is_null()) {
|
| + message_loop_proxy->PostTask(FROM_HERE,
|
| + base::Bind(callback, error, file_path));
|
| + }
|
| +}
|
| +
|
| base::PlatformFileError GDataFileSystem::RemoveFileFromFileSystem(
|
| const FilePath& file_path) {
|
| // We need to lock here as well (despite FindFileByPath lock) since directory
|
|
|