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 bc9de4a5666c0edb7da90190dbeee691868010b3..c73dd2ef28ce7efee16403340e8856313aba483c 100644 |
--- a/chrome/browser/chromeos/gdata/gdata_file_system.cc |
+++ b/chrome/browser/chromeos/gdata/gdata_file_system.cc |
@@ -837,14 +837,6 @@ CallbackType CreateRelayCallback(const CallbackType& callback) { |
} // namespace |
-// GDataFileProperties struct implementation. |
- |
-GDataFileProperties::GDataFileProperties() : is_hosted_document(false) { |
-} |
- |
-GDataFileProperties::~GDataFileProperties() { |
-} |
- |
// GDataFileSystem::GetDocumentsParams struct implementation. |
GDataFileSystem::GetDocumentsParams::GetDocumentsParams( |
@@ -1976,8 +1968,40 @@ void GDataFileSystem::GetFileByPathOnUIThread( |
const GetDownloadDataCallback& get_download_data_callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- GDataFileProperties file_properties; |
- if (!GetFileInfoByPath(file_path, &file_properties)) { |
+ GetFileInfoByPathAsync( |
+ file_path, |
+ base::Bind(&GDataFileSystem::OnGetFileInfoCompleteForGetFileByPath, |
+ ui_weak_ptr_, |
+ file_path, |
+ CreateRelayCallback(get_file_callback), |
+ CreateRelayCallback(get_download_data_callback))); |
+} |
+ |
+void GDataFileSystem::OnGetFileInfoCompleteForGetFileByPath( |
+ const FilePath& file_path, |
+ const GetFileCallback& get_file_callback, |
+ const GetDownloadDataCallback& get_download_data_callback, |
+ base::PlatformFileError error, |
+ scoped_ptr<GDataFileProto> file_info) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ DCHECK(!file_info->gdata_entry().resource_id().empty()); |
+ GetResolvedFileByPath(file_path, |
+ get_file_callback, |
+ get_download_data_callback, |
+ error, |
+ file_info.get()); |
+} |
+ |
+void GDataFileSystem::GetResolvedFileByPath( |
+ const FilePath& file_path, |
+ const GetFileCallback& get_file_callback, |
+ const GetDownloadDataCallback& get_download_data_callback, |
+ base::PlatformFileError error, |
+ const GDataFileProto* file_proto) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ if (error != base::PLATFORM_FILE_OK || !file_proto) { |
if (!get_file_callback.is_null()) { |
MessageLoop::current()->PostTask( |
FROM_HERE, |
@@ -1994,7 +2018,7 @@ void GDataFileSystem::GetFileByPathOnUIThread( |
// document instead of fetching the document content in one of the exported |
// formats. The JSON file contains the edit URL and resource ID of the |
// document. |
- if (file_properties.is_hosted_document) { |
+ if (file_proto->is_hosted_document()) { |
base::PlatformFileError* error = |
new base::PlatformFileError(base::PLATFORM_FILE_OK); |
FilePath* temp_file_path = new FilePath; |
@@ -2005,8 +2029,8 @@ void GDataFileSystem::GetFileByPathOnUIThread( |
base::Bind(&CreateDocumentJsonFileOnBlockingPool, |
GetCacheDirectoryPath( |
GDataCache::CACHE_TYPE_TMP_DOCUMENTS), |
- file_properties.alternate_url, |
- file_properties.resource_id, |
+ GURL(file_proto->alternate_url()), |
+ file_proto->gdata_entry().resource_id(), |
error, |
temp_file_path, |
mime_type, |
@@ -2022,22 +2046,22 @@ void GDataFileSystem::GetFileByPathOnUIThread( |
// Returns absolute path of the file if it were cached or to be cached. |
FilePath local_tmp_path = cache_->GetCacheFilePath( |
- file_properties.resource_id, |
- file_properties.file_md5, |
+ file_proto->gdata_entry().resource_id(), |
+ file_proto->file_md5(), |
GDataCache::CACHE_TYPE_TMP, |
GDataCache::CACHED_FILE_FROM_SERVER); |
GetFileFromCacheByResourceIdAndMd5( |
- file_properties.resource_id, |
- file_properties.file_md5, |
+ file_proto->gdata_entry().resource_id(), |
+ file_proto->file_md5(), |
base::Bind( |
&GDataFileSystem::OnGetFileFromCache, |
ui_weak_ptr_, |
GetFileFromCacheParams(file_path, |
local_tmp_path, |
- file_properties.content_url, |
- file_properties.resource_id, |
- file_properties.file_md5, |
- file_properties.mime_type, |
+ GURL(file_proto->gdata_entry().content_url()), |
+ file_proto->gdata_entry().resource_id(), |
+ file_proto->file_md5(), |
+ file_proto->content_mime_type(), |
get_file_callback, |
get_download_data_callback))); |
} |
@@ -2483,28 +2507,6 @@ void GDataFileSystem::OnRequestDirectoryRefresh( |
DVLOG(1) << "Directory refreshed: " << directory_path.value(); |
} |
-bool GDataFileSystem::GetFileInfoByPath( |
- const FilePath& file_path, GDataFileProperties* properties) { |
- DCHECK(properties); |
- base::AutoLock lock(lock_); |
- GDataEntry* entry = GetGDataEntryByPath(file_path); |
- if (!entry) |
- return false; |
- |
- properties->file_info = entry->file_info(); |
- properties->resource_id = entry->resource_id(); |
- |
- GDataFile* regular_file = entry->AsGDataFile(); |
- if (regular_file) { |
- properties->file_md5 = regular_file->file_md5(); |
- properties->mime_type = regular_file->content_mime_type(); |
- properties->content_url = regular_file->content_url(); |
- properties->alternate_url = regular_file->alternate_url(); |
- properties->is_hosted_document = regular_file->is_hosted_document(); |
- } |
- return true; |
-} |
- |
GDataEntry* GDataFileSystem::GetGDataEntryByPath( |
const FilePath& file_path) { |
lock_.AssertAcquired(); |
@@ -5078,21 +5080,15 @@ void GDataFileSystem::OnGetFileInfoCompleteForOpenFile( |
} |
DCHECK(!file_info->gdata_entry().resource_id().empty()); |
- |
- // TODO(kinaba): once it is cleaned up (crbug/127048), remove the indirection. |
- // Do not call GetFileByPathOnUIThread() directly for avoiding deadlock. |
- // The current method is called as a callback from GetFileInfoByPathAsync(), |
- // which is under the lock taken. |
- base::MessageLoopProxy::current()->PostTask( |
- FROM_HERE, |
- base::Bind(&GDataFileSystem::GetFileByPathOnUIThread, |
+ GetResolvedFileByPath( |
+ file_path, |
+ base::Bind(&GDataFileSystem::OnGetFileCompleteForOpenFile, |
ui_weak_ptr_, |
- file_path, |
- base::Bind(&GDataFileSystem::OnGetFileCompleteForOpenFile, |
- ui_weak_ptr_, |
- callback, |
- base::Passed(&file_info)), |
- GetDownloadDataCallback())); |
+ callback, |
+ base::Passed(&file_info)), |
+ GetDownloadDataCallback(), |
+ error, |
+ file_info.get()); |
} |
void GDataFileSystem::OnGetFileCompleteForOpenFile( |
@@ -5181,21 +5177,13 @@ void GDataFileSystem::OnGetFileInfoCompleteForCloseFile( |
// if the file has not been modified. Come up with a way to detect the |
// intactness effectively, or provide a method for user to declare it when |
// calling CloseFile(). |
- |
- // TODO(kinaba): once it is cleaned up (crbug/127048), remove the indirection. |
- // Do not call CommitDirtyInCache() directly for avoiding deadlock. |
- // The current method is called as a callback from GetFileInfoByPathAsync(), |
- // which is under the lock taken. |
- base::MessageLoopProxy::current()->PostTask( |
- FROM_HERE, |
+ CommitDirtyInCache( |
+ file_info->gdata_entry().resource_id(), |
+ file_info->file_md5(), |
base::Bind( |
- &GDataFileSystem::CommitDirtyInCache, |
+ &GDataFileSystem::OnCommitDirtyInCacheCompleteForCloseFile, |
ui_weak_ptr_, |
- file_info->gdata_entry().resource_id(), |
- file_info->file_md5(), |
- base::Bind(&GDataFileSystem::OnCommitDirtyInCacheCompleteForCloseFile, |
- ui_weak_ptr_, |
- callback))); |
+ callback)); |
} |
void GDataFileSystem::OnCommitDirtyInCacheCompleteForCloseFile( |