// Copyright 2017 The Chromium 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 CHROME_BROWSER_SCOPED_VISIBILITY_TRACKER_H_
#define CHROME_BROWSER_SCOPED_VISIBILITY_TRACKER_H_

#include <memory>

#include "base/time/time.h"

namespace base {
class TickClock;
}  // namespace base

// This class tracks the total time it is visible, based on receiving
// OnShown/OnHidden notifications, which are logically idempotent.
class ScopedVisibilityTracker {
 public:
  // |tick_clock| must outlive this object.
  ScopedVisibilityTracker(const base::TickClock* tick_clock, bool is_shown);
  ~ScopedVisibilityTracker();

  void OnShown();
  void OnHidden();

  base::TimeDelta GetForegroundDuration() const;

  bool currently_in_foreground() const { return currently_in_foreground_; }

 private:
  void Update(bool in_foreground);

  const base::TickClock* tick_clock_;

  base::TimeTicks last_time_shown_;
  base::TimeDelta foreground_duration_;
  bool currently_in_foreground_ = false;
};

#endif  // CHROME_BROWSER_SCOPED_VISIBILITY_TRACKER_H_
