// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef EXTENSIONS_BROWSER_TASK_QUEUE_UTIL_H_
#define EXTENSIONS_BROWSER_TASK_QUEUE_UTIL_H_

namespace content {
class BrowserContext;
}  // namespace content

namespace extensions {
class Extension;
class LazyContextId;
class LazyContextTaskQueue;

// Determines the correct task queue for `context_id`.
LazyContextTaskQueue* GetTaskQueueForLazyContextId(
    const LazyContextId& context_id);

// Activates the service worker task queue for `browser_context` and
// `extension`. This must be called only once when an extension is loaded
// and before queueing any tasks.
//
// This is called for all extensions, not just for service worker-based
// ones.
void ActivateTaskQueueForExtension(content::BrowserContext* browser_context,
                                   const Extension* extension);

// Deactivates the service worker task queue for `browser_context` and
// `extension`. This should be called when the extension is unloaded. Once
// it completes, it's safe to call ActivateTaskQueueForExtension if the
// extension is reloaded.
//
// This is called for all extensions, not just for service worker-based
// ones.
void DeactivateTaskQueueForExtension(content::BrowserContext* browser_context,
                                     const Extension* extension);

}  // namespace extensions

#endif  // EXTENSIONS_BROWSER_TASK_QUEUE_UTIL_H_
