blob: b3d3f9f6dc31b908a52604d862d3e14c716c55d4 [file] [log] [blame]
[email protected]14625442012-08-15 12:51:421// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_DEVICE_MONITOR_MAC_H_
6#define CONTENT_BROWSER_DEVICE_MONITOR_MAC_H_
7
[email protected]14625442012-08-15 12:51:428#include "base/basictypes.h"
9#include "base/system_monitor/system_monitor.h"
[email protected]08f2c54c2014-03-12 09:27:2510#include "base/threading/thread_checker.h"
[email protected]14625442012-08-15 12:51:4211
[email protected]9396311a2013-11-07 11:49:4212namespace {
13class DeviceMonitorMacImpl;
14}
15
[email protected]14625442012-08-15 12:51:4216namespace content {
17
[email protected]9396311a2013-11-07 11:49:4218// Class to track audio/video devices removal or addition via callback to
19// base::SystemMonitor ProcessDevicesChanged(). A single object of this class
20// is created from the browser main process and lives as long as this one.
[email protected]14625442012-08-15 12:51:4221class DeviceMonitorMac {
22 public:
23 DeviceMonitorMac();
24 ~DeviceMonitorMac();
25
[email protected]08f2c54c2014-03-12 09:27:2526 // Registers the observers for the audio/video device removal, connection and
27 // suspension. The AVFoundation library is also loaded and initialised if the
[email protected]01a891d2014-04-30 06:51:4028 // OS supports it. The |device_task_runner| argument represents the thread on
29 // which device enumeration will occur.
30 void StartMonitoring(
31 const scoped_refptr<base::SingleThreadTaskRunner>& device_task_runner);
[email protected]08f2c54c2014-03-12 09:27:2532
[email protected]9396311a2013-11-07 11:49:4233 // Method called by the internal DeviceMonitorMacImpl object
34 // |device_monitor_impl_| when a device of type |type| has been added to or
35 // removed from the system. This code executes in the notification thread
36 // (QTKit or AVFoundation).
[email protected]14625442012-08-15 12:51:4237 void NotifyDeviceChanged(base::SystemMonitor::DeviceType type);
38
[email protected]9396311a2013-11-07 11:49:4239 private:
40 scoped_ptr<DeviceMonitorMacImpl> device_monitor_impl_;
41
[email protected]08f2c54c2014-03-12 09:27:2542 // |thread_checker_| is used to check that constructor and StartMonitoring()
[email protected]01a891d2014-04-30 06:51:4043 // are called in the correct thread, the UI thread, that also owns the object.
[email protected]08f2c54c2014-03-12 09:27:2544 base::ThreadChecker thread_checker_;
45
[email protected]14625442012-08-15 12:51:4246 DISALLOW_COPY_AND_ASSIGN(DeviceMonitorMac);
47};
48
49} // namespace content
50
51#endif // CONTENT_BROWSER_DEVICE_MONITOR_MAC_H_