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

Unified Diff: chrome/browser/system_monitor/removable_device_notifications_window_win.cc

Issue 11088012: [Win, MediaGallery] Enumerate and handle mtp device attach/detach events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed review comments Created 8 years, 2 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/system_monitor/removable_device_notifications_window_win.cc
diff --git a/chrome/browser/system_monitor/removable_device_notifications_window_win.cc b/chrome/browser/system_monitor/removable_device_notifications_window_win.cc
index 74250b9ba9b7fcdbd60b32d7ce2615fcc7342c4d..30f8190a7268d2e4935e2cf4a99ef40c6e0d5c50 100644
--- a/chrome/browser/system_monitor/removable_device_notifications_window_win.cc
+++ b/chrome/browser/system_monitor/removable_device_notifications_window_win.cc
@@ -8,12 +8,11 @@
#include <dbt.h>
#include <fileapi.h>
-#include "base/file_path.h"
#include "base/win/wrapped_window_proc.h"
#include "chrome/browser/system_monitor/media_storage_util.h"
-
-using base::SystemMonitor;
-using base::win::WrappedWindowProc;
+#include "chrome/browser/system_monitor/portable_device_watcher_win.h"
+#include "chrome/browser/system_monitor/removable_device_constants.h"
+#include "chrome/browser/system_monitor/volume_mount_watcher_win.h"
namespace chrome {
@@ -26,26 +25,68 @@ RemovableDeviceNotificationsWindowWin*
} // namespace
+// RemovableDeviceNotificationsWindowWin::PortableDeviceNotifications ---------
Peter Kasting 2012/10/29 21:57:19 Why make this a separate class instead of simply p
kmadhusu 2012/10/30 01:29:24 Done. Removed this helper class. Made code changes
+class RemovableDeviceNotificationsWindowWin::PortableDeviceNotifications {
Peter Kasting 2012/10/29 21:57:19 Nit: Add blank line. Consider also adding a blank
kmadhusu 2012/10/30 01:29:24 -NA-
+ public:
+ // Register window handle to receive portable device notifications details.
Peter Kasting 2012/10/29 21:57:19 Nit: Register window handle -> Registers |hwnd|
kmadhusu 2012/10/30 01:29:24 Done.
+ explicit PortableDeviceNotifications(HWND hwnd);
+
+ // Unregisters device notifications.
+ ~PortableDeviceNotifications();
+
+ private:
+ HDEVNOTIFY notifications_;
+
+ DISALLOW_IMPLICIT_CONSTRUCTORS(PortableDeviceNotifications);
+};
+
+RemovableDeviceNotificationsWindowWin::PortableDeviceNotifications::
+ PortableDeviceNotifications(HWND hwnd) {
+ GUID dev_interface_guid = GUID_NULL;
+ HRESULT hr = CLSIDFromString(kWPDDevInterfaceGUID, &dev_interface_guid);
+ if (FAILED(hr))
+ return;
+ DEV_BROADCAST_DEVICEINTERFACE db = {
+ sizeof(DEV_BROADCAST_DEVICEINTERFACE),
+ DBT_DEVTYP_DEVICEINTERFACE,
+ 0,
+ dev_interface_guid
+ };
+ notifications_ = RegisterDeviceNotification(hwnd, &db,
+ DEVICE_NOTIFY_WINDOW_HANDLE);
+}
+
+RemovableDeviceNotificationsWindowWin::PortableDeviceNotifications::
+ ~PortableDeviceNotifications() {
+ UnregisterDeviceNotification(notifications_);
+}
+
+// RemovableDeviceNotificationsWindowWin implementaion -----------------------
Peter Kasting 2012/10/29 21:57:19 Nit: remove "implementation"
kmadhusu 2012/10/30 01:29:24 Done.
+
// static
RemovableDeviceNotificationsWindowWin*
-RemovableDeviceNotificationsWindowWin::Create() {
- return new RemovableDeviceNotificationsWindowWin(new VolumeMountWatcherWin());
+ RemovableDeviceNotificationsWindowWin::Create() {
+ return new RemovableDeviceNotificationsWindowWin(
+ new VolumeMountWatcherWin(), new PortableDeviceWatcherWin());
}
RemovableDeviceNotificationsWindowWin::
-RemovableDeviceNotificationsWindowWin(
- VolumeMountWatcherWin* volume_mount_watcher)
+ RemovableDeviceNotificationsWindowWin(
+ VolumeMountWatcherWin* volume_mount_watcher,
+ PortableDeviceWatcherWin* portable_device_watcher)
: window_class_(0),
instance_(NULL),
window_(NULL),
- volume_mount_watcher_(volume_mount_watcher) {
+ volume_mount_watcher_(volume_mount_watcher),
+ portable_device_watcher_(portable_device_watcher) {
DCHECK(volume_mount_watcher_);
+ DCHECK(portable_device_watcher_);
DCHECK(!g_removable_device_notifications_window_win);
g_removable_device_notifications_window_win = this;
}
RemovableDeviceNotificationsWindowWin::
-~RemovableDeviceNotificationsWindowWin() {
+ ~RemovableDeviceNotificationsWindowWin() {
if (window_)
DestroyWindow(window_);
@@ -58,18 +99,20 @@ RemovableDeviceNotificationsWindowWin::
// static
RemovableDeviceNotificationsWindowWin*
-RemovableDeviceNotificationsWindowWin::GetInstance() {
+ RemovableDeviceNotificationsWindowWin::GetInstance() {
DCHECK(g_removable_device_notifications_window_win);
return g_removable_device_notifications_window_win;
}
void RemovableDeviceNotificationsWindowWin::Init() {
volume_mount_watcher_->Init();
+ portable_device_watcher_->Init();
WNDCLASSEX window_class;
base::win::InitializeWindowClass(
kWindowClassName,
- &WrappedWindowProc<RemovableDeviceNotificationsWindowWin::WndProcThunk>,
+ &base::win::WrappedWindowProc<
+ RemovableDeviceNotificationsWindowWin::WndProcThunk>,
0, 0, 0, NULL, NULL, NULL, NULL, NULL,
&window_class);
instance_ = window_class.hInstance;
@@ -79,6 +122,8 @@ void RemovableDeviceNotificationsWindowWin::Init() {
window_ = CreateWindow(MAKEINTATOM(window_class_), 0, 0, 0, 0, 0, 0, 0, 0,
instance_, 0);
SetWindowLongPtr(window_, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(this));
+ portable_device_notifications_.reset(
+ new PortableDeviceNotifications(window_));
}
bool RemovableDeviceNotificationsWindowWin::GetDeviceInfoForPath(
@@ -94,11 +139,11 @@ bool RemovableDeviceNotificationsWindowWin::GetDeviceInfoForPath(
// To compute the device id, the device type is needed. For removable
// devices, that requires knowing if there's a DCIM directory, which would
// require bouncing over to the file thread. Instead, just iterate the
- // devices in SystemMonitor.
+ // devices in base::SystemMonitor.
std::string device_id;
if (removable) {
- std::vector<SystemMonitor::RemovableStorageInfo> attached_devices =
- SystemMonitor::Get()->GetAttachedRemovableStorage();
+ std::vector<base::SystemMonitor::RemovableStorageInfo> attached_devices =
+ base::SystemMonitor::Get()->GetAttachedRemovableStorage();
bool found = false;
for (size_t i = 0; i < attached_devices.size(); i++) {
MediaStorageUtil::Type type;
@@ -153,6 +198,9 @@ LRESULT CALLBACK RemovableDeviceNotificationsWindowWin::WndProc(
bool RemovableDeviceNotificationsWindowWin::GetDeviceInfo(
const FilePath& device_path, string16* device_location,
std::string* unique_id, string16* name, bool* removable) {
+ // TODO(kmadhusu) Implement PortableDeviceWatcherWin::GetDeviceInfo()
+ // function when we have the functionality to add a sub directory of
+ // portable device as a media gallery.
return volume_mount_watcher_->GetDeviceInfo(device_path, device_location,
unique_id, name, removable);
}
@@ -160,6 +208,7 @@ bool RemovableDeviceNotificationsWindowWin::GetDeviceInfo(
void RemovableDeviceNotificationsWindowWin::OnDeviceChange(UINT event_type,
LPARAM data) {
volume_mount_watcher_->OnWindowMessage(event_type, data);
+ portable_device_watcher_->OnWindowMessage(event_type, data);
}
} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698