Index: chrome/browser/media_gallery/media_device_manager.cc |
=================================================================== |
--- chrome/browser/media_gallery/media_device_manager.cc (revision 0) |
+++ chrome/browser/media_gallery/media_device_manager.cc (revision 0) |
@@ -0,0 +1,138 @@ |
+// 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. |
+ |
+// MediaDeviceManager implementation. |
+ |
+#include "chrome/browser/media_gallery/media_device_manager.h" |
+ |
+#include <map> |
+ |
+#include "base/compiler_specific.h" |
+#include "base/file_path.h" |
+#include "base/system_monitor/system_monitor.h" |
+ |
+#if defined(OS_WIN) |
+#include "chrome/browser/media_gallery/media_device_notifications_window_win.h" |
+#elif defined(OS_LINUX) |
+#include "chrome/browser/media_gallery/media_device_notifications_linux.h" |
+#endif |
+ |
+namespace chrome { |
+ |
+/* |
+ * MediaDeviceManagerImpl |
+ */ |
+class MediaDeviceManager::MediaDeviceManagerImpl |
+ : public base::SystemMonitor::DevicesChangedObserver { |
+ public: |
+ MediaDeviceManagerImpl(); |
+ virtual ~MediaDeviceManagerImpl(); |
+ |
+ void GetDevices(std::vector<MediaDeviceManager::MediaDeviceInfo>* results); |
+ |
+ // DevicesChangedObserver implementation. |
+ virtual void OnMediaDeviceAttached( |
+ const base::SystemMonitor::DeviceIdType& id, |
+ const std::string& name, |
+ const FilePath& path) OVERRIDE; |
+ virtual void OnMediaDeviceDetached( |
+ const base::SystemMonitor::DeviceIdType& id) OVERRIDE; |
+ |
+ private: |
+ typedef std::map<base::SystemMonitor::DeviceIdType, |
+ MediaDeviceManager::MediaDeviceInfo> DeviceMap; |
+ |
+#if defined(OS_WIN) |
vandebo (ex-Chrome)
2012/05/17 21:17:08
Can we have a single Init method that is defined d
|
+ void InitWin(); |
+#elif defined(OS_LINUX) |
+ void InitLinux(); |
+#endif |
+ |
+#if defined(OS_WIN) |
+ scoped_ptr<MediaDeviceNotificationsWindowWin> |
+ media_device_notifications_window_; |
vandebo (ex-Chrome)
2012/05/17 21:17:08
If we keep this, lets use the same name across pla
|
+#elif defined(OS_LINUX) |
+ scoped_refptr<MediaDeviceNotificationsLinux> |
+ media_device_notifications_linux_; |
+#endif |
+ |
+ DeviceMap device_map_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MediaDeviceManagerImpl); |
+}; |
+ |
+MediaDeviceManager::MediaDeviceManagerImpl::MediaDeviceManagerImpl() { |
+#if defined(OS_WIN) |
+ InitWin(); |
+#elif defined(OS_LINUX) |
+ InitLinux(); |
+#endif |
+ base::SystemMonitor::Get()->AddDevicesChangedObserver(this); |
+} |
+ |
+MediaDeviceManager::MediaDeviceManagerImpl::~MediaDeviceManagerImpl() { |
+ base::SystemMonitor::Get()->RemoveDevicesChangedObserver(this); |
+} |
+ |
+void MediaDeviceManager::MediaDeviceManagerImpl::GetDevices( |
+ std::vector<MediaDeviceManager::MediaDeviceInfo>* results) { |
+ for (DeviceMap::const_iterator it = device_map_.begin(); |
+ it != device_map_.end(); |
+ ++it) { |
+ results->push_back(it->second); |
+ } |
+} |
+ |
+void MediaDeviceManager::MediaDeviceManagerImpl::OnMediaDeviceAttached( |
+ const base::SystemMonitor::DeviceIdType& id, |
+ const std::string& name, |
+ const FilePath& path) { |
+ if (device_map_.find(id) != device_map_.end()) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ device_map_.insert(std::make_pair(id, std::make_pair(name, path))); |
+} |
+ |
+void MediaDeviceManager::MediaDeviceManagerImpl::OnMediaDeviceDetached( |
+ const base::SystemMonitor::DeviceIdType& id) { |
+ DeviceMap::iterator it = device_map_.find(id); |
+ if (it == device_map_.end()) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ device_map_.erase(it); |
+} |
+ |
+#if defined(OS_WIN) |
+void MediaDeviceManager::MediaDeviceManagerImpl::InitWin() { |
+ media_device_notifications_window_.reset( |
+ new chrome::MediaDeviceNotificationsWindowWin()); |
+} |
+#elif defined(OS_LINUX) |
+void MediaDeviceManager::MediaDeviceManagerImpl::InitLinux() { |
+ const FilePath kDefaultMtabPath("/etc/mtab"); |
+ media_device_notifications_linux_ = |
+ new chrome::MediaDeviceNotificationsLinux(kDefaultMtabPath); |
+ media_device_notifications_linux_->Init(); |
+} |
+#endif |
+ |
+/* |
+ * MediaDeviceManager |
+ */ |
+ |
+MediaDeviceManager::MediaDeviceManager() { |
vandebo (ex-Chrome)
2012/05/17 21:17:08
Use initialization list?
|
+ impl_.reset(new MediaDeviceManagerImpl()); |
+} |
+ |
+MediaDeviceManager::~MediaDeviceManager() { |
+} |
+ |
+void MediaDeviceManager::GetDevices(std::vector<MediaDeviceInfo>* results) { |
+ return impl_->GetDevices(results); |
+} |
+ |
+} // namespace chrome |
Property changes on: chrome/browser/media_gallery/media_device_manager.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |