Chromium Code Reviews| Index: chrome/browser/chromeos/arc/fileapi/arc_file_system_instance_util.cc |
| diff --git a/chrome/browser/chromeos/arc/fileapi/arc_file_system_instance_util.cc b/chrome/browser/chromeos/arc/fileapi/arc_file_system_instance_util.cc |
| index c2b4deba99e804f1112892774f0a942a41304837..cb13711f51dd646a05e658e839cf4b6dd933352a 100644 |
| --- a/chrome/browser/chromeos/arc/fileapi/arc_file_system_instance_util.cc |
| +++ b/chrome/browser/chromeos/arc/fileapi/arc_file_system_instance_util.cc |
| @@ -5,27 +5,32 @@ |
| #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_instance_util.h" |
| #include <string> |
| +#include <utility> |
| +#include <vector> |
| +#include "base/optional.h" |
| #include "components/arc/arc_bridge_service.h" |
| #include "components/arc/arc_service_manager.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "url/gurl.h" |
| +using content::BrowserThread; |
| + |
| namespace arc { |
| namespace file_system_instance_util { |
| namespace { |
| -constexpr uint32_t kGetFileSizeVersion = 1; |
| -constexpr uint32_t kOpenFileToReadVersion = 1; |
| +constexpr uint32_t kContentFileSystemVersion = 1; |
| +constexpr uint32_t kDocumentProviderFileSystemVersion = 2; |
| // Returns FileSystemInstance for the given |min_version|, if found. |
| // Otherwise, nullptr. |
| mojom::FileSystemInstance* GetFileSystemInstance( |
| const std::string& method_name_for_logging, |
| uint32_t min_version) { |
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| auto* arc_service_manager = arc::ArcServiceManager::Get(); |
| if (!arc_service_manager) { |
| LOG(ERROR) << "Failed to get ArcServiceManager."; |
| @@ -36,61 +41,106 @@ mojom::FileSystemInstance* GetFileSystemInstance( |
| ->GetInstanceForMethod(method_name_for_logging, min_version); |
| } |
| -void OnGetFileSize(const GetFileSizeCallback& callback, int64_t size) { |
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, |
| - base::Bind(callback, size)); |
| +template <typename T> |
| +void CallOnIOThread(const base::Callback<void(T)>& callback, T result) { |
|
Luis Héctor Chávez
2016/12/15 23:54:26
nit: PostToIOThread? You seem to be using OnXxxThr
Shuhei Takahashi
2016/12/16 05:47:14
Renamed to PostToIOThread.
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + base::Bind(callback, base::Passed(std::move(result)))); |
| } |
| void GetFileSizeOnUIThread(const GURL& arc_url, |
| const GetFileSizeCallback& callback) { |
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| auto* file_system_instance = |
| - GetFileSystemInstance("GetFileSize", kGetFileSizeVersion); |
| + GetFileSystemInstance("GetFileSize", kContentFileSystemVersion); |
| if (!file_system_instance) { |
| - OnGetFileSize(callback, -1); |
| + callback.Run(-1); |
| return; |
| } |
| - file_system_instance->GetFileSize(arc_url.spec(), |
| - base::Bind(&OnGetFileSize, callback)); |
| -} |
| - |
| -void OnOpenFileToRead(const OpenFileToReadCallback& callback, |
| - mojo::ScopedHandle handle) { |
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, |
| - base::Bind(callback, base::Passed(&handle))); |
| + file_system_instance->GetFileSize(arc_url.spec(), callback); |
| } |
| void OpenFileToReadOnUIThread(const GURL& arc_url, |
| const OpenFileToReadCallback& callback) { |
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + auto* file_system_instance = |
| + GetFileSystemInstance("OpenFileToRead", kContentFileSystemVersion); |
| + if (!file_system_instance) { |
| + callback.Run(mojo::ScopedHandle()); |
| + return; |
| + } |
| + file_system_instance->OpenFileToRead(arc_url.spec(), callback); |
| +} |
| + |
| +void GetDocumentOnUIThread(const std::string& authority, |
| + const std::string& document_id, |
| + const GetDocumentCallback& callback) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| auto* file_system_instance = |
| - GetFileSystemInstance("OpenFileToRead", kOpenFileToReadVersion); |
| + GetFileSystemInstance("GetDocument", kDocumentProviderFileSystemVersion); |
| if (!file_system_instance) { |
| - OnOpenFileToRead(callback, mojo::ScopedHandle()); |
| + callback.Run(mojom::DocumentPtr()); |
| return; |
| } |
| - file_system_instance->OpenFileToRead(arc_url.spec(), |
| - base::Bind(&OnOpenFileToRead, callback)); |
| + file_system_instance->GetDocument(authority, document_id, callback); |
| +} |
| + |
| +void GetChildDocumentsOnUIThread(const std::string& authority, |
| + const std::string& parent_document_id, |
| + const GetChildDocumentsCallback& callback) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + auto* file_system_instance = GetFileSystemInstance( |
| + "GetChildDocuments", kDocumentProviderFileSystemVersion); |
| + if (!file_system_instance) { |
| + callback.Run(base::nullopt); |
| + return; |
| + } |
| + file_system_instance->GetChildDocuments(authority, parent_document_id, |
| + callback); |
| } |
| } // namespace |
| void GetFileSizeOnIOThread(const GURL& arc_url, |
| const GetFileSizeCallback& callback) { |
| - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| - content::BrowserThread::PostTask( |
| - content::BrowserThread::UI, FROM_HERE, |
| - base::Bind(&GetFileSizeOnUIThread, arc_url, callback)); |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(&GetFileSizeOnUIThread, arc_url, |
| + base::Bind(&CallOnIOThread<int64_t>, callback))); |
| } |
| void OpenFileToReadOnIOThread(const GURL& arc_url, |
| const OpenFileToReadCallback& callback) { |
| - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| - content::BrowserThread::PostTask( |
| - content::BrowserThread::UI, FROM_HERE, |
| - base::Bind(&OpenFileToReadOnUIThread, arc_url, callback)); |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(&OpenFileToReadOnUIThread, arc_url, |
| + base::Bind(&CallOnIOThread<mojo::ScopedHandle>, callback))); |
| +} |
| + |
| +void GetDocumentOnIOThread(const std::string& authority, |
| + const std::string& document_id, |
| + const GetDocumentCallback& callback) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(&GetDocumentOnUIThread, authority, document_id, |
| + base::Bind(&CallOnIOThread<mojom::DocumentPtr>, callback))); |
| +} |
| + |
| +void GetChildDocumentsOnIOThread(const std::string& authority, |
| + const std::string& parent_document_id, |
| + const GetChildDocumentsCallback& callback) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind( |
| + &GetChildDocumentsOnUIThread, authority, parent_document_id, |
| + base::Bind( |
| + &CallOnIOThread<base::Optional<std::vector<mojom::DocumentPtr>>>, |
| + callback))); |
| } |
| } // namespace file_system_instance_util |