123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copyright (c) 2012 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 BASE_SYSTEM_SYSTEM_MONITOR_H_
- #define BASE_SYSTEM_SYSTEM_MONITOR_H_
- #include "base/base_export.h"
- #include "base/macros.h"
- #include "base/memory/ref_counted.h"
- #include "base/observer_list_threadsafe.h"
- #include "build/build_config.h"
- namespace base {
- // Class for monitoring various system-related subsystems
- // such as power management, network status, etc.
- // TODO(mbelshe): Add support beyond just power management.
- class BASE_EXPORT SystemMonitor {
- public:
- // Type of devices whose change need to be monitored, such as add/remove.
- enum DeviceType {
- DEVTYPE_AUDIO, // Audio device, e.g., microphone.
- DEVTYPE_VIDEO_CAPTURE, // Video capture device, e.g., webcam.
- DEVTYPE_UNKNOWN, // Other devices.
- };
- // Create SystemMonitor. Only one SystemMonitor instance per application
- // is allowed.
- SystemMonitor();
- ~SystemMonitor();
- // Get the application-wide SystemMonitor (if not present, returns NULL).
- static SystemMonitor* Get();
- class BASE_EXPORT DevicesChangedObserver {
- public:
- // Notification that the devices connected to the system have changed.
- // This is only implemented on Windows currently.
- virtual void OnDevicesChanged(DeviceType device_type) {}
- protected:
- virtual ~DevicesChangedObserver() = default;
- };
- // Add a new observer.
- // Can be called from any thread.
- // Must not be called from within a notification callback.
- void AddDevicesChangedObserver(DevicesChangedObserver* obs);
- // Remove an existing observer.
- // Can be called from any thread.
- // Must not be called from within a notification callback.
- void RemoveDevicesChangedObserver(DevicesChangedObserver* obs);
- // The ProcessFoo() style methods are a broken pattern and should not
- // be copied. Any significant addition to this class is blocked on
- // refactoring to improve the state of affairs. See http://crbug.com/149059
- // Cross-platform handling of a device change event.
- void ProcessDevicesChanged(DeviceType device_type);
- private:
- // Functions to trigger notifications.
- void NotifyDevicesChanged(DeviceType device_type);
- scoped_refptr<ObserverListThreadSafe<DevicesChangedObserver>>
- devices_changed_observer_list_;
- DISALLOW_COPY_AND_ASSIGN(SystemMonitor);
- };
- } // namespace base
- #endif // BASE_SYSTEM_SYSTEM_MONITOR_H_
|