// Copyright (c) 2011 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_CHROMEOS_CAMERA_DETECTOR_H_
#define CHROME_BROWSER_CHROMEOS_CAMERA_DETECTOR_H_

#include "base/callback.h"
#include "base/macros.h"

namespace chromeos {

// Class used to check for camera presence.
class CameraDetector {
 public:
  enum CameraPresence {
    kCameraPresenceUnknown = 0,
    kCameraAbsent,
    kCameraPresent
  };

  // Returns result of the last presence check. If no check has been performed
  // yet, returns |kCameraPresenceUnknown|.
  static CameraPresence camera_presence() {
    return camera_presence_;
  }

  // Checks asynchronously for camera device presence. Only one
  // presence check can be running at a time. Calls |check_done|
  // on current thread when the check has been completed.
  static void StartPresenceCheck(const base::Closure& check_done);

 private:
  // Called back on UI thread after check has been performed.
  static void OnPresenceCheckDone(const base::Closure& callback, bool present);

  // Checks for camera presence. Runs on a thread that allows I/O.
  static bool CheckPresence();

  // Result of the last presence check.
  static CameraPresence camera_presence_;

  static bool presence_check_in_progress_;

  DISALLOW_COPY_AND_ASSIGN(CameraDetector);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_CAMERA_DETECTOR_H_
