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 |
index 3665383d7290dd1fdeb6b8635e7ede6a08e25e78..244b3428fbf2192f3aed41e3b8846053c530e590 100644 |
--- a/chrome/browser/chromeos/drive/file_system.cc |
+++ b/chrome/browser/chromeos/drive/file_system.cc |
@@ -693,7 +693,7 @@ void FileSystem::OnGetAboutResource( |
void FileSystem::GetShareUrl(const base::FilePath& file_path, |
const GURL& embed_origin, |
- const GetShareUrlCallback& callback) { |
+ const GetUrlCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!callback.is_null()); |
@@ -717,7 +717,7 @@ void FileSystem::GetShareUrl(const base::FilePath& file_path, |
void FileSystem::GetShareUrlAfterGetResourceEntry( |
const base::FilePath& file_path, |
const GURL& embed_origin, |
- const GetShareUrlCallback& callback, |
+ const GetUrlCallback& callback, |
ResourceEntry* entry, |
FileError error) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
@@ -743,7 +743,7 @@ void FileSystem::GetShareUrlAfterGetResourceEntry( |
} |
void FileSystem::OnGetResourceEntryForGetShareUrl( |
- const GetShareUrlCallback& callback, |
+ const GetUrlCallback& callback, |
google_apis::GDataErrorCode status, |
const GURL& share_url) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
@@ -763,6 +763,73 @@ void FileSystem::OnGetResourceEntryForGetShareUrl( |
callback.Run(FILE_ERROR_OK, share_url); |
} |
+void FileSystem::GetDownloadUrl(const base::FilePath& file_path, |
+ const GetUrlCallback& callback) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ 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::GetDownloadUrlAfterGetResourceEntry, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ file_path, |
+ callback, |
+ base::Owned(entry))); |
+} |
+ |
+void FileSystem::GetDownloadUrlAfterGetResourceEntry( |
+ const base::FilePath& file_path, |
+ const GetUrlCallback& callback, |
+ ResourceEntry* entry, |
+ FileError error) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ 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_->GetFileResource( |
+ entry->resource_id(), |
+ base::Bind(&FileSystem::OnGetFileResourceForGetDownloadUrl, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ callback)); |
+} |
+ |
+void FileSystem::OnGetFileResourceForGetDownloadUrl( |
+ const GetUrlCallback& callback, |
+ google_apis::GDataErrorCode status, |
+ scoped_ptr<google_apis::FileResource> file_resource) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ DCHECK(!callback.is_null()); |
+ |
+ FileError error = GDataToFileError(status); |
+ if (error != FILE_ERROR_OK) { |
+ callback.Run(error, GURL()); |
+ return; |
+ } |
+ |
+ if (file_resource->download_url().is_empty()) { |
+ callback.Run(FILE_ERROR_FAILED, GURL()); |
+ return; |
+ } |
+ |
+ callback.Run(FILE_ERROR_OK, file_resource->download_url()); |
+} |
+ |
void FileSystem::Search(const std::string& search_query, |
const GURL& next_link, |
const SearchCallback& callback) { |