blob: c3aa2c204198bde80762958f1724625a6c5f0a23 [file] [log] [blame]
// 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_UI_AUTOFILL_NEXT_IDLE_BARRIER_H_
#define CHROME_BROWSER_UI_AUTOFILL_NEXT_IDLE_BARRIER_H_
#include <memory>
#include "base/time/time.h"
namespace autofill {
class NextIdleBarrier {
public:
NextIdleBarrier();
NextIdleBarrier(const NextIdleBarrier&) = delete;
NextIdleBarrier(NextIdleBarrier&&);
NextIdleBarrier& operator=(const NextIdleBarrier&) = delete;
NextIdleBarrier& operator=(NextIdleBarrier&&);
~NextIdleBarrier();
// Returns a `NextIdleBarrier` that is evaluated after `delay`. That is, its
// value becomes `true` once the `delay` has passed and the UI thread has
// become idle afterwards.
static NextIdleBarrier CreateNextIdleBarrierWithDelay(base::TimeDelta delay);
// Indicates whether the barrier has been passed, i.e. whether the UI thread
// has been idle at least once.
bool value() const;
private:
struct Data;
// Container for the value and a callback list subscription. It is wrapped in
// its own struct and allocated on the heap to ensure that it remains alive
// and keeps the same memory address even if the parent `NextIdleTimeTicks` is
// move-assigned.
std::unique_ptr<Data> data_;
};
} // namespace autofill
#endif // CHROME_BROWSER_UI_AUTOFILL_NEXT_IDLE_BARRIER_H_