Chromium Code Reviews| Index: chrome/browser/chromeos/arc/fileapi/arc_documents_provider_backend_delegate.cc |
| diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_backend_delegate.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_backend_delegate.cc |
| index 6572b4c6050203801703db1a3bd0d5399d0cbcd8..3b05c55f95b04157c95fb66e3530d2b7f81effe6 100644 |
| --- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_backend_delegate.cc |
| +++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_backend_delegate.cc |
| @@ -7,6 +7,10 @@ |
| #include <utility> |
| #include "base/logging.h" |
| +#include "base/memory/ptr_util.h" |
| +#include "chrome/browser/chromeos/arc/fileapi/arc_content_file_system_url_util.h" |
| +#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_file_stream_reader.h" |
| +#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "storage/browser/fileapi/file_stream_reader.h" |
| #include "storage/browser/fileapi/file_stream_writer.h" |
| @@ -17,7 +21,7 @@ using content::BrowserThread; |
| namespace arc { |
| ArcDocumentsProviderBackendDelegate::ArcDocumentsProviderBackendDelegate() |
| - : async_file_util_(&roots_) {} |
| + : async_file_util_(&roots_), weak_ptr_factory_(this) {} |
| ArcDocumentsProviderBackendDelegate::~ArcDocumentsProviderBackendDelegate() { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| @@ -37,8 +41,21 @@ ArcDocumentsProviderBackendDelegate::CreateFileStreamReader( |
| const base::Time& expected_modification_time, |
| storage::FileSystemContext* context) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| - NOTIMPLEMENTED(); // TODO(crbug.com/671511): Implement this function. |
| - return nullptr; |
| + |
| + std::unique_ptr<ArcDocumentsProviderFileStreamReader> reader = |
|
hidehiko
2016/12/18 14:29:18
Optional: I'd recommend to use "auto", because of
Shuhei Takahashi
2016/12/19 03:05:56
Sure, changed to use auto.
|
| + base::MakeUnique<ArcDocumentsProviderFileStreamReader>(offset); |
| + |
| + base::FilePath path; |
| + ArcDocumentsProviderRoot* root = roots_.ParseAndLookup(url, &path); |
| + if (!root) { |
| + reader->SetContentUrl(GURL()); |
| + return std::move(reader); |
|
Luis Héctor Chávez
2016/12/17 00:05:26
Huh, why did the pessimizing move warning not trig
Shuhei Takahashi
2016/12/17 00:23:09
I'm not sure why, but returning std::unique_ptr<De
hidehiko
2016/12/18 14:29:18
IIUC, it's C++11 spec about copy elision.
cf) htt
Shuhei Takahashi
2016/12/19 03:05:55
I know that spec but I was wondering why gcc 5.x a
|
| + } |
| + |
| + root->ResolveToContentUrl( |
| + path, base::Bind(&ArcDocumentsProviderFileStreamReader::SetContentUrl, |
| + reader->GetWeakPtr())); |
| + return std::move(reader); |
| } |
| std::unique_ptr<storage::FileStreamWriter> |
| @@ -62,8 +79,26 @@ void ArcDocumentsProviderBackendDelegate::GetRedirectURLForContents( |
| const storage::FileSystemURL& url, |
| const storage::URLCallback& callback) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| - NOTIMPLEMENTED(); // TODO(crbug.com/671511): Implement this function. |
| - callback.Run(GURL()); |
| + |
| + base::FilePath path; |
| + ArcDocumentsProviderRoot* root = roots_.ParseAndLookup(url, &path); |
| + if (!root) { |
| + callback.Run(GURL()); |
| + return; |
| + } |
| + |
| + root->ResolveToContentUrl( |
| + path, base::Bind(&ArcDocumentsProviderBackendDelegate:: |
| + GetRedirectURLForContentsWithContentUrl, |
| + weak_ptr_factory_.GetWeakPtr(), callback)); |
| +} |
| + |
| +void ArcDocumentsProviderBackendDelegate:: |
| + GetRedirectURLForContentsWithContentUrl( |
| + const storage::URLCallback& callback, |
| + const GURL& content_url) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + callback.Run(ArcUrlToExternalFileUrl(content_url)); |
| } |
| } // namespace arc |