| Index: chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.cc
|
| diff --git a/chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.cc b/chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.cc
|
| index a191e75f4e9f3b19e12e49205a8734264116145e..ed606a4368d5d378e9ea578a82b46206759961ec 100644
|
| --- a/chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.cc
|
| +++ b/chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/bind.h"
|
| #include "base/files/file_path.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "chrome/browser/chromeos/drive/file_system_interface.h"
|
| #include "chrome/browser/chromeos/drive/file_system_util.h"
|
| #include "chrome/browser/chromeos/drive/fileapi/async_file_util.h"
|
| #include "chrome/browser/chromeos/drive/fileapi/fileapi_worker.h"
|
| @@ -22,6 +23,46 @@
|
| using content::BrowserThread;
|
|
|
| namespace drive {
|
| +namespace {
|
| +
|
| +// Called on the UI thread after GetRedirectURLForContentsOnUIThread. Obtains
|
| +// the browser URL from |entry|. |callback| will be called on the IO thread.
|
| +void GetRedirectURLForContentsOnUIThreadWithResourceEntry(
|
| + const storage::URLCallback& callback,
|
| + FileError error,
|
| + scoped_ptr<ResourceEntry> entry) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| + GURL url;
|
| + if (error == FILE_ERROR_OK && entry->has_file_specific_info() &&
|
| + entry->file_specific_info().is_hosted_document()) {
|
| + url = GURL(entry->file_specific_info().alternate_url());
|
| + }
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE, base::Bind(callback, url));
|
| +}
|
| +
|
| +// Called on the UI thread after
|
| +// FileSystemBackendDelegate::GetRedirectURLForContents. Requestes to obtain
|
| +// ResourceEntry for the |url|.
|
| +void GetRedirectURLForContentsOnUIThread(
|
| + const storage::FileSystemURL& url,
|
| + const storage::URLCallback& callback) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| + FileSystemInterface* const file_system =
|
| + fileapi_internal::GetFileSystemFromUrl(url);
|
| + if (!file_system) {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE, base::Bind(callback, GURL()));
|
| + return;
|
| + }
|
| + const base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url);
|
| + file_system->GetResourceEntry(
|
| + file_path,
|
| + base::Bind(&GetRedirectURLForContentsOnUIThreadWithResourceEntry,
|
| + callback));
|
| +}
|
| +
|
| +} // namespace
|
|
|
| FileSystemBackendDelegate::FileSystemBackendDelegate()
|
| : async_file_util_(new internal::AsyncFileUtil) {
|
| @@ -86,4 +127,14 @@ storage::WatcherManager* FileSystemBackendDelegate::GetWatcherManager(
|
| return NULL;
|
| }
|
|
|
| +void FileSystemBackendDelegate::GetRedirectURLForContents(
|
| + const storage::FileSystemURL& url,
|
| + const storage::URLCallback& callback) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI,
|
| + FROM_HERE,
|
| + base::Bind(&GetRedirectURLForContentsOnUIThread, url, callback));
|
| +}
|
| +
|
| } // namespace drive
|
|
|