GetDirectoryListingTask.h (3038B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef mozilla_dom_GetDirectoryListing_h 8 #define mozilla_dom_GetDirectoryListing_h 9 10 #include "mozilla/dom/Directory.h" 11 #include "mozilla/dom/FileSystemTaskBase.h" 12 13 namespace mozilla { 14 class ErrorResult; 15 16 namespace dom { 17 18 class BlobImpl; 19 class FileSystemGetDirectoryListingParams; 20 class OwningFileOrDirectory; 21 22 class GetDirectoryListingTaskChild final : public FileSystemTaskChildBase { 23 public: 24 static already_AddRefed<GetDirectoryListingTaskChild> Create( 25 FileSystemBase* aFileSystem, Directory* aDirectory, nsIFile* aTargetPath, 26 const nsAString& aFilters, ErrorResult& aRv); 27 28 virtual ~GetDirectoryListingTaskChild(); 29 30 already_AddRefed<Promise> GetPromise(); 31 32 private: 33 // If aDirectoryOnly is set, we should ensure that the target is a directory. 34 GetDirectoryListingTaskChild(nsIGlobalObject* aGlobalObject, 35 FileSystemBase* aFileSystem, 36 Directory* aDirectory, nsIFile* aTargetPath, 37 const nsAString& aFilters); 38 39 virtual FileSystemParams GetRequestParams(const nsString& aSerializedDOMPath, 40 ErrorResult& aRv) const override; 41 42 virtual void SetSuccessRequestResult(const FileSystemResponseValue& aValue, 43 ErrorResult& aRv) override; 44 45 virtual void HandlerCallback() override; 46 47 RefPtr<Promise> mPromise; 48 RefPtr<Directory> mDirectory; 49 nsCOMPtr<nsIFile> mTargetPath; 50 nsString mFilters; 51 52 FallibleTArray<OwningFileOrDirectory> mTargetData; 53 }; 54 55 class GetDirectoryListingTaskParent final : public FileSystemTaskParentBase { 56 public: 57 static already_AddRefed<GetDirectoryListingTaskParent> Create( 58 FileSystemBase* aFileSystem, 59 const FileSystemGetDirectoryListingParams& aParam, 60 FileSystemRequestParent* aParent, ErrorResult& aRv); 61 62 nsresult GetTargetPath(nsAString& aPath) const override; 63 64 private: 65 GetDirectoryListingTaskParent( 66 FileSystemBase* aFileSystem, 67 const FileSystemGetDirectoryListingParams& aParam, 68 FileSystemRequestParent* aParent); 69 70 virtual FileSystemResponseValue GetSuccessRequestResult( 71 ErrorResult& aRv) const override; 72 73 virtual nsresult IOWork() override; 74 75 virtual nsresult MainThreadWork() override; 76 77 virtual bool MainThreadNeeded() const override; 78 79 nsCOMPtr<nsIFile> mTargetPath; 80 nsString mDOMPath; 81 nsString mFilters; 82 83 struct FileOrDirectoryPath { 84 nsString mPath; 85 86 // Set on the main-thread 87 nsString mContentType; 88 89 enum { eFilePath, eDirectoryPath } mType; 90 }; 91 92 FallibleTArray<FileOrDirectoryPath> mTargetData; 93 }; 94 95 } // namespace dom 96 } // namespace mozilla 97 98 #endif // mozilla_dom_GetDirectoryListing_h