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..f4b09093f1bcc1ac4be2a351927d05afae76b794 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,9 @@ |
#include <utility> |
#include "base/logging.h" |
+#include "base/memory/ptr_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 +20,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 +40,20 @@ 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; |
+ |
+ auto reader = base::MakeUnique<ArcDocumentsProviderFileStreamReader>(offset); |
+ |
+ base::FilePath path; |
+ ArcDocumentsProviderRoot* root = roots_.ParseAndLookup(url, &path); |
+ if (!root) { |
+ reader->SetContentUrl(GURL()); |
+ return std::move(reader); |
+ } |
+ |
+ root->ResolveToContentUrl( |
+ path, base::Bind(&ArcDocumentsProviderFileStreamReader::SetContentUrl, |
+ reader->GetWeakPtr())); |
+ return std::move(reader); |
} |
std::unique_ptr<storage::FileStreamWriter> |
@@ -62,7 +77,7 @@ void ArcDocumentsProviderBackendDelegate::GetRedirectURLForContents( |
const storage::FileSystemURL& url, |
const storage::URLCallback& callback) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- NOTIMPLEMENTED(); // TODO(crbug.com/671511): Implement this function. |
+ NOTREACHED(); // Never called by chromeos::FileSystemBackend. |
callback.Run(GURL()); |
} |