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

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..d73613b1a54c3c71b4d93e9af0a5ff5588b015c9 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,20 +25,65 @@ RemovableDeviceNotificationsWindowWin*
} // namespace
+///////////////////////////////////////////////////////////////////////////
+// RemovableDeviceNotificationsWindowWin::PortableDeviceNotifications //
+// //
+// Manages portable device notification handle for //
+// RemovableDeviceNotificationsWindowWin. //
+///////////////////////////////////////////////////////////////////////////
Peter Kasting 2012/10/26 23:46:23 Nit: As in other file, I suggest: ... } // names
kmadhusu 2012/10/28 22:57:16 Done.
+class RemovableDeviceNotificationsWindowWin::PortableDeviceNotifications {
+ public:
+ // Register window handle to receive portable device notifications details.
+ explicit PortableDeviceNotifications(HWND hwnd);
+
+ // Unregisters device notifications.
+ ~PortableDeviceNotifications();
+
+ private:
+ HDEVNOTIFY notifications_;
+
+ DISALLOW_IMPLICIT_CONSTRUCTORS(PortableDeviceNotifications);
+};
+
+RemovableDeviceNotificationsWindowWin::PortableDeviceNotifications::
+PortableDeviceNotifications(HWND hwnd) {
Peter Kasting 2012/10/26 23:46:23 Nit: Indent 4
kmadhusu 2012/10/28 22:57:16 Done. Some reviewer said if the function name span
+ 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),
Peter Kasting 2012/10/26 23:46:23 Nit: I suggest: DEV_BROADCAST_DEVICEINTERFACE d
kmadhusu 2012/10/28 22:57:16 Done.
+ DBT_DEVTYP_DEVICEINTERFACE, 0,
+ dev_interface_guid};
+ notifications_ = RegisterDeviceNotification(hwnd, &db,
+ DEVICE_NOTIFY_WINDOW_HANDLE);
+}
+
+RemovableDeviceNotificationsWindowWin::PortableDeviceNotifications::
+~PortableDeviceNotifications() {
Peter Kasting 2012/10/26 23:46:23 Nit: Indent 4
kmadhusu 2012/10/28 22:57:16 Done.
+ UnregisterDeviceNotification(notifications_);
+}
+
+///////////////////////////////////////////////////////////////////////////
+// RemovableDeviceNotificationsWindowWin implementaion //
+///////////////////////////////////////////////////////////////////////////
// static
RemovableDeviceNotificationsWindowWin*
RemovableDeviceNotificationsWindowWin::Create() {
- return new RemovableDeviceNotificationsWindowWin(new VolumeMountWatcherWin());
+ return new RemovableDeviceNotificationsWindowWin(
+ new VolumeMountWatcherWin(), new PortableDeviceWatcherWin());
}
RemovableDeviceNotificationsWindowWin::
RemovableDeviceNotificationsWindowWin(
- VolumeMountWatcherWin* volume_mount_watcher)
+ 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;
}
@@ -65,11 +109,13 @@ RemovableDeviceNotificationsWindowWin::GetInstance() {
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 +125,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 +142,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 +201,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 +211,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