chromium/chrome/browser/ash/crosapi/browser_action_queue.h

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

#ifndef CHROME_BROWSER_ASH_CROSAPI_BROWSER_ACTION_QUEUE_H_
#define CHROME_BROWSER_ASH_CROSAPI_BROWSER_ACTION_QUEUE_H_

#include <memory>

#include "base/containers/queue.h"

namespace crosapi {

namespace mojom {
enum class CreationResult;
}  // namespace mojom

class BrowserAction;

// A queue of queueable actions.
class BrowserActionQueue {
 public:
  BrowserActionQueue();
  ~BrowserActionQueue();
  // Enqueues |action| if it is queueable. Cancels it otherwise.
  void PushOrCancel(std::unique_ptr<BrowserAction> action,
                    mojom::CreationResult cancel_reason);
  void Push(std::unique_ptr<BrowserAction> action);
  std::unique_ptr<BrowserAction> Pop();
  bool IsEmpty() const;
  void Clear();

 private:
  base::queue<std::unique_ptr<BrowserAction>> actions_;
};

}  // namespace crosapi

#endif  // CHROME_BROWSER_ASH_CROSAPI_BROWSER_ACTION_QUEUE_H_