Bug 1824753 [wpt PR 39216] - [FLEDGE] Add WPT test that FLEDGE is not allowed in...
[gecko.git] / dom / webscheduling / WebTaskController.cpp
blobf9d27aaa0d4136c7fc1c1caae521e0514d2cda10
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/. */
8 #include "WebTaskController.h"
9 #include "TaskSignal.h"
11 #include "mozilla/dom/TaskPriorityChangeEvent.h"
13 namespace mozilla::dom {
15 WebTaskController::WebTaskController(nsIGlobalObject* aGlobal,
16 TaskPriority aPriority)
17 : AbortController(aGlobal) {
18 MOZ_ASSERT(!mSignal);
19 mSignal = new TaskSignal(aGlobal, aPriority);
22 void WebTaskController::SetPriority(TaskPriority aPriority, ErrorResult& aRv) {
23 // https://wicg.github.io/scheduling-apis/#tasksignal-signal-priority-change
24 RefPtr<TaskSignal> taskSignal = static_cast<TaskSignal*>(mSignal.get());
25 MOZ_ASSERT(taskSignal);
26 if (taskSignal->PriorityChanging()) {
27 aRv.ThrowNotAllowedError("Signal's priority changing is true");
28 return;
31 if (taskSignal->Priority() == aPriority) {
32 return;
35 taskSignal->SetPriorityChanging(true);
37 TaskPriority previousPriority = taskSignal->Priority();
38 taskSignal->SetPriority(aPriority);
40 taskSignal->RunPriorityChangeAlgorithms();
42 TaskPriorityChangeEventInit init;
43 init.mPreviousPriority = previousPriority;
44 RefPtr<TaskPriorityChangeEvent> event = TaskPriorityChangeEvent::Constructor(
45 taskSignal, u"prioritychange"_ns, init);
47 event->SetTrusted(true);
49 taskSignal->DispatchEvent(*event);
50 taskSignal->SetPriorityChanging(false);
53 already_AddRefed<WebTaskController> WebTaskController::Constructor(
54 const GlobalObject& aGlobal, const TaskControllerInit& aInit,
55 ErrorResult& aRv) {
56 nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(aGlobal.GetAsSupports());
57 if (!global) {
58 aRv.Throw(NS_ERROR_FAILURE);
59 return nullptr;
61 RefPtr<WebTaskController> webTaskController =
62 new WebTaskController(global, aInit.mPriority);
63 return webTaskController.forget();
66 JSObject* WebTaskController::WrapObject(JSContext* aCx,
67 JS::Handle<JSObject*> aGivenProto) {
68 return TaskController_Binding::Wrap(aCx, this, aGivenProto);
70 } // namespace mozilla::dom