CallbackRunnables.h (3614B)
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_ErrorCallbackRunnable_h 8 #define mozilla_dom_ErrorCallbackRunnable_h 9 10 #include "FileSystemDirectoryEntry.h" 11 #include "mozilla/dom/BindingDeclarations.h" 12 #include "mozilla/dom/PromiseNativeHandler.h" 13 #include "nsThreadUtils.h" 14 15 class nsIGlobalObject; 16 17 namespace mozilla::dom { 18 19 class FileSystemEntriesCallback; 20 21 class EntryCallbackRunnable final : public Runnable { 22 public: 23 EntryCallbackRunnable(FileSystemEntryCallback* aCallback, 24 FileSystemEntry* aEntry); 25 26 // MOZ_CAN_RUN_SCRIPT_BOUNDARY until Runnable::Run is MOZ_CAN_RUN_SCRIPT. See 27 // bug 1535398. 28 MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHOD Run() override; 29 30 private: 31 const RefPtr<FileSystemEntryCallback> mCallback; 32 const RefPtr<FileSystemEntry> mEntry; 33 }; 34 35 class ErrorCallbackRunnable final : public Runnable { 36 public: 37 ErrorCallbackRunnable(nsIGlobalObject* aGlobalObject, 38 ErrorCallback* aCallback, nsresult aError); 39 40 // MOZ_CAN_RUN_SCRIPT_BOUNDARY until Runnable::Run is MOZ_CAN_RUN_SCRIPT. See 41 // bug 1535398. 42 MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHOD Run() override; 43 44 private: 45 nsCOMPtr<nsIGlobalObject> mGlobal; 46 const RefPtr<ErrorCallback> mCallback; 47 nsresult mError; 48 }; 49 50 class EmptyEntriesCallbackRunnable final : public Runnable { 51 public: 52 explicit EmptyEntriesCallbackRunnable(FileSystemEntriesCallback* aCallback); 53 54 // MOZ_CAN_RUN_SCRIPT_BOUNDARY until Runnable::Run is MOZ_CAN_RUN_SCRIPT. See 55 // bug 1535398. 56 MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHOD Run() override; 57 58 private: 59 const RefPtr<FileSystemEntriesCallback> mCallback; 60 }; 61 62 class GetEntryHelper final : public PromiseNativeHandler { 63 public: 64 NS_DECL_ISUPPORTS 65 66 GetEntryHelper(FileSystemDirectoryEntry* aParentEntry, Directory* aDirectory, 67 nsTArray<nsString>& aParts, FileSystem* aFileSystem, 68 FileSystemEntryCallback* aSuccessCallback, 69 ErrorCallback* aErrorCallback, 70 FileSystemDirectoryEntry::GetInternalType aType); 71 72 void Run(); 73 74 MOZ_CAN_RUN_SCRIPT 75 virtual void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue, 76 ErrorResult& aRv) override; 77 78 virtual void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue, 79 ErrorResult& aRv) override; 80 81 private: 82 ~GetEntryHelper(); 83 84 void Error(nsresult aError); 85 86 void ContinueRunning(JSObject* aObj); 87 88 MOZ_CAN_RUN_SCRIPT void CompleteOperation(JSObject* aObj); 89 90 RefPtr<FileSystemDirectoryEntry> mParentEntry; 91 RefPtr<Directory> mDirectory; 92 nsTArray<nsString> mParts; 93 RefPtr<FileSystem> mFileSystem; 94 95 const RefPtr<FileSystemEntryCallback> mSuccessCallback; 96 RefPtr<ErrorCallback> mErrorCallback; 97 98 FileSystemDirectoryEntry::GetInternalType mType; 99 }; 100 101 class FileSystemEntryCallbackHelper { 102 public: 103 static void Call( 104 nsIGlobalObject* aGlobalObject, 105 const Optional<OwningNonNull<FileSystemEntryCallback>>& aEntryCallback, 106 FileSystemEntry* aEntry); 107 }; 108 109 class ErrorCallbackHelper { 110 public: 111 static void Call(nsIGlobalObject* aGlobal, 112 const Optional<OwningNonNull<ErrorCallback>>& aErrorCallback, 113 nsresult aError); 114 }; 115 116 } // namespace mozilla::dom 117 118 #endif // mozilla_dom_CallbackRunnables_h