#ifndef CONTENT_COMMON_PROCESS_VISIBILITY_TRACKER_H_
#define CONTENT_COMMON_PROCESS_VISIBILITY_TRACKER_H_
#include <optional>
#include "base/memory/scoped_refptr.h"
#include "base/no_destructor.h"
#include "base/observer_list_threadsafe.h"
#include "base/sequence_checker.h"
#include "base/synchronization/lock.h"
#include "base/thread_annotations.h"
#include "content/common/content_export.h"
namespace content {
class CONTENT_EXPORT ProcessVisibilityTracker {
public:
static ProcessVisibilityTracker* GetInstance();
class ProcessVisibilityObserver : public base::CheckedObserver {
public:
virtual void OnVisibilityChanged(bool visible) = 0;
};
void OnProcessVisibilityChanged(bool visible);
void AddObserver(ProcessVisibilityObserver* observer);
void RemoveObserver(ProcessVisibilityObserver* observer);
private:
friend class base::NoDestructor<ProcessVisibilityTracker>;
ProcessVisibilityTracker();
~ProcessVisibilityTracker();
base::Lock lock_;
std::optional<bool> is_visible_ GUARDED_BY(lock_);
scoped_refptr<base::ObserverListThreadSafe<ProcessVisibilityObserver>>
observers_ GUARDED_BY(lock_);
SEQUENCE_CHECKER(main_thread_);
};
}
#endif