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..8a63aed4687f8859684580959b1798d648c2d900 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 UI thread after GetRedirectURLForBrowserTabOnUIThread. |
+// Obtains the browser URL from |entry|. |
mtomasz
2014/09/04 06:18:51
nit: Can we add that callback is called on IO thre
hirono
2014/09/04 07:15:38
Done.
|
+void GetRedirectURLForBrowserTabOnUIThreadWithResourceEntry( |
+ 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 UI thread after |
+// FileSystemBackendDelegate::GetRedirectURLForBrowserTab. |
+// Requestes to obtain ResourceEntry for the |url|. |
mtomasz
2014/09/04 06:18:51
nit: Can we add that the callback is called on IO
hirono
2014/09/04 07:15:38
Done.
|
+void GetRedirectURLForBrowserTabOnUIThread( |
+ 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(&GetRedirectURLForBrowserTabOnUIThreadWithResourceEntry, |
+ callback)); |
+} |
+ |
+} // namespace |
FileSystemBackendDelegate::FileSystemBackendDelegate() |
: async_file_util_(new internal::AsyncFileUtil) { |
@@ -86,4 +127,14 @@ storage::WatcherManager* FileSystemBackendDelegate::GetWatcherManager( |
return NULL; |
} |
+void FileSystemBackendDelegate::GetRedirectURLForBrowserTab( |
+ const storage::FileSystemURL& url, |
+ const storage::URLCallback& callback) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, |
+ FROM_HERE, |
+ base::Bind(&GetRedirectURLForBrowserTabOnUIThread, url, callback)); |
+} |
+ |
} // namespace drive |