Index: chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h |
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h |
index 41135c9e0c255c8eef3c49e1278c1ad11362bc45..de30a7477b8665dd5d702df176c4a7637bb812dd 100644 |
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h |
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h |
@@ -5,10 +5,16 @@ |
#ifndef CHROME_BROWSER_CHROMEOS_ARC_FILEAPI_ARC_DOCUMENTS_PROVIDER_ROOT_H_ |
#define CHROME_BROWSER_CHROMEOS_ARC_FILEAPI_ARC_DOCUMENTS_PROVIDER_ROOT_H_ |
+#include <map> |
#include <string> |
+#include <vector> |
+#include "base/callback_forward.h" |
#include "base/files/file_path.h" |
#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/optional.h" |
+#include "components/arc/common/file_system.mojom.h" |
#include "storage/browser/fileapi/async_file_util.h" |
namespace arc { |
@@ -16,6 +22,8 @@ namespace arc { |
// Represents a file system root in Android Documents Provider. |
// |
// All methods must be called on the IO thread. |
+// If this object is deleted while there are in-flight operations, callbacks |
+// for those operations will be never called. |
class ArcDocumentsProviderRoot { |
public: |
using GetFileInfoCallback = storage::AsyncFileUtil::GetFileInfoCallback; |
@@ -35,6 +43,60 @@ class ArcDocumentsProviderRoot { |
const ReadDirectoryCallback& callback); |
private: |
+ // Thin representation of a document in documents provider. |
+ struct ThinDocument { |
+ std::string document_id; |
+ bool is_directory; |
+ }; |
+ |
+ // Mapping from a file name to a ThinDocument. |
+ using NameToThinDocumentMap = |
+ std::map<base::FilePath::StringType, ThinDocument>; |
+ |
+ using ResolveToDocumentIdCallback = |
+ base::Callback<void(const std::string& document_id)>; |
+ using ReadDirectoryInternalCallback = |
+ base::Callback<void(base::File::Error error, |
+ NameToThinDocumentMap mapping)>; |
+ |
+ void GetFileInfoWithDocumentId(const GetFileInfoCallback& callback, |
+ const std::string& document_id); |
+ void GetFileInfoWithDocument(const GetFileInfoCallback& callback, |
+ mojom::DocumentPtr document); |
+ |
+ void ReadDirectoryWithDocumentId(const ReadDirectoryCallback& callback, |
+ const std::string& document_id); |
+ void ReadDirectoryWithNameToThinDocumentMap( |
+ const ReadDirectoryCallback& callback, |
+ base::File::Error error, |
+ NameToThinDocumentMap mapping); |
+ |
+ // Resolves |path| to a document ID. Failures are indicated by an empty |
+ // document ID. |
+ void ResolveToDocumentId(const base::FilePath& path, |
+ const ResolveToDocumentIdCallback& callback); |
+ void ResolveToDocumentIdRecursively( |
+ const std::string& document_id, |
+ const std::vector<base::FilePath::StringType>& components, |
+ const ResolveToDocumentIdCallback& callback); |
+ void ResolveToDocumentIdRecursivelyWithNameToThinDocumentMap( |
+ const std::vector<base::FilePath::StringType>& components, |
+ const ResolveToDocumentIdCallback& callback, |
+ base::File::Error error, |
+ NameToThinDocumentMap mapping); |
+ |
+ // Enumerates child documents of a directory specified by |document_id|. |
+ // The result is returned as a NameToThinDocumentMap. |
+ void ReadDirectoryInternal(const std::string& document_id, |
+ const ReadDirectoryInternalCallback& callback); |
+ void ReadDirectoryInternalWithChildDocuments( |
+ const ReadDirectoryInternalCallback& callback, |
+ base::Optional<std::vector<mojom::DocumentPtr>> maybe_children); |
+ |
+ const std::string authority_; |
+ const std::string root_document_id_; |
+ base::WeakPtrFactory<ArcDocumentsProviderRoot> weak_ptr_factory_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ArcDocumentsProviderRoot); |
}; |