// Copyright 2021 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef INCLUDE_V8_MICROTASKS_QUEUE_H_ #define INCLUDE_V8_MICROTASKS_QUEUE_H_ #include <stddef.h> #include <memory> #include "v8-local-handle.h" // NOLINT(build/include_directory) #include "v8-microtask.h" // NOLINT(build/include_directory) #include "v8config.h" // NOLINT(build/include_directory) namespace v8 { class Function; namespace internal { class Isolate; class MicrotaskQueue; } // namespace internal /** * Represents the microtask queue, where microtasks are stored and processed. * https://html.spec.whatwg.org/multipage/webappapis.html#microtask-queue * https://html.spec.whatwg.org/multipage/webappapis.html#enqueuejob(queuename,-job,-arguments) * https://html.spec.whatwg.org/multipage/webappapis.html#perform-a-microtask-checkpoint * * A MicrotaskQueue instance may be associated to multiple Contexts by passing * it to Context::New(), and they can be detached by Context::DetachGlobal(). * The embedder must keep the MicrotaskQueue instance alive until all associated * Contexts are gone or detached. * * Use the same instance of MicrotaskQueue for all Contexts that may access each * other synchronously. E.g. for Web embedding, use the same instance for all * origins that share the same URL scheme and eTLD+1. */ class V8_EXPORT MicrotaskQueue { … }; /** * This scope is used to control microtasks when MicrotasksPolicy::kScoped * is used on Isolate. In this mode every non-primitive call to V8 should be * done inside some MicrotasksScope. * Microtasks are executed when topmost MicrotasksScope marked as kRunMicrotasks * exits. * kDoNotRunMicrotasks should be used to annotate calls not intended to trigger * microtasks. */ class V8_EXPORT V8_NODISCARD MicrotasksScope { … }; } // namespace v8 #endif // INCLUDE_V8_MICROTASKS_QUEUE_H_