// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_SERVICE_WORKER_EVENT_QUEUE_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_SERVICE_WORKER_EVENT_QUEUE_H_ #include <optional> #include <set> #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/task/sequenced_task_runner.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "third_party/blink/public/mojom/service_worker/service_worker.mojom-blink.h" #include "third_party/blink/public/mojom/service_worker/service_worker_event_status.mojom-blink-forward.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/allow_discouraged_type.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h" #include "third_party/blink/renderer/platform/wtf/deque.h" #include "third_party/blink/renderer/platform/wtf/hash_map.h" namespace base { class TickClock; } // namespace base namespace blink { // ServiceWorkerEventQueue manages events dispatched on ServiceWorkerGlobalScope // and their timeouts. // // There are two types of timeouts: the long standing event timeout // and the idle timeout. // // 1) Event timeout: when an event starts, StartEvent() records the expiration // time of the event (kEventTimeout). If EndEvent() has not been called within // the timeout time, |abort_callback| passed to StartEvent() is called with // status TIMEOUT. Additionally, the |idle_delay_| is set to zero to shut down // the worker as soon as possible since the worker may have gone into bad state. // 2) Idle timeout: when a certain time has passed (|idle_delay_|) since all of // events have ended, ServiceWorkerEventQueue calls the |idle_callback_|. // Idle callbacks are called on the |task_runner| passed by the constructor. // Note that the implementation assumes the task runner is provided by // ServiceWorkerGlobalScope, and the lifetime of the task runner is shorter than // |this|. // // The lifetime of ServiceWorkerEventQueue is the same with the worker // thread. If ServiceWorkerEventQueue is destructed while there are inflight // events, all |abort_callback|s will be immediately called with status ABORTED. class MODULES_EXPORT ServiceWorkerEventQueue { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_SERVICE_WORKER_EVENT_QUEUE_H_