Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: chrome/browser/media_gallery/media_device_manager.cc

Issue 10332190: Add SystemMonitor::GetMediaDevices() (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix win Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698