tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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