tor-browser

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

TaskSignal.h (2662B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:expandtab:shiftwidth=2:tabstop=2:
      3 */
      4 /* This Source Code Form is subject to the terms of the Mozilla Public
      5 * License, v. 2.0. If a copy of the MPL was not distributed with this
      6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      7 
      8 #ifndef mozilla_dom_TaskSignal_h
      9 #define mozilla_dom_TaskSignal_h
     10 
     11 #include "mozilla/DOMEventTargetHelper.h"
     12 #include "mozilla/dom/AbortSignal.h"
     13 #include "mozilla/dom/WebTaskSchedulingBinding.h"
     14 
     15 namespace mozilla::dom {
     16 class TaskSignal final : public AbortSignal {
     17 public:
     18  NS_DECL_ISUPPORTS_INHERITED
     19  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TaskSignal, AbortSignal)
     20 
     21  IMPL_EVENT_HANDLER(prioritychange);
     22 
     23  static already_AddRefed<TaskSignal> Create(nsIGlobalObject* aGlobalObject,
     24                                             TaskPriority aPriority);
     25 
     26  static already_AddRefed<TaskSignal> Any(
     27      GlobalObject& aGlobal,
     28      const Sequence<OwningNonNull<AbortSignal>>& aSignals,
     29      const TaskSignalAnyInit& aInit);
     30 
     31  TaskPriority Priority() const { return mPriority; }
     32 
     33  JSObject* WrapObject(JSContext* aCx,
     34                       JS::Handle<JSObject*> aGivenProto) override {
     35    return TaskSignal_Binding::Wrap(aCx, this, aGivenProto);
     36  }
     37 
     38  void SetPriority(TaskPriority aPriority) { mPriority = aPriority; }
     39 
     40  bool IsTaskSignal() const override { return true; }
     41 
     42  bool PriorityChanging() const { return mPriorityChanging; }
     43 
     44  void SetPriorityChanging(bool aPriorityChanging) {
     45    mPriorityChanging = aPriorityChanging;
     46  }
     47 
     48  void RunPriorityChangeAlgorithms();
     49 
     50  void SetWebTaskScheduler(WebTaskScheduler* aScheduler);
     51 
     52  // https://wicg.github.io/scheduling-apis/#tasksignal-has-fixed-priority
     53  bool HasFixedPriority() const { return mDependent && !mSourceTaskSignal; }
     54 
     55  nsTArray<RefPtr<TaskSignal>>& DependentTaskSignals() {
     56    return mDependentTaskSignals;
     57  }
     58 
     59 private:
     60  TaskSignal(nsIGlobalObject* aGlobal, TaskPriority aPriority)
     61      : AbortSignal(aGlobal, SignalAborted::No, JS::UndefinedHandleValue),
     62        mPriority(aPriority),
     63        mPriorityChanging(false) {
     64    AbortSignal::Init();
     65  }
     66 
     67  TaskPriority mPriority;
     68 
     69  // https://wicg.github.io/scheduling-apis/#tasksignal-priority-changing
     70  bool mPriorityChanging;
     71 
     72  nsTArray<WeakPtr<WebTaskScheduler>> mSchedulers;
     73 
     74  // https://wicg.github.io/scheduling-apis/#tasksignal-source-signal
     75  WeakPtr<TaskSignal> mSourceTaskSignal;
     76 
     77  // https://wicg.github.io/scheduling-apis/#tasksignal-dependent-signals
     78  nsTArray<RefPtr<TaskSignal>> mDependentTaskSignals;
     79 
     80  ~TaskSignal() = default;
     81 };
     82 }  // namespace mozilla::dom
     83 #endif