1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_WIN_H_
6 #define COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_WIN_H_
8 #include "base/basictypes.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "components/storage_monitor/storage_monitor.h"
17 namespace storage_monitor {
19 class PortableDeviceWatcherWin;
20 class TestStorageMonitorWin;
21 class VolumeMountWatcherWin;
23 class StorageMonitorWin : public StorageMonitor {
25 // Should only be called by browser start up code.
26 // Use StorageMonitor::GetInstance() instead.
27 // To support unit tests, this constructor takes |volume_mount_watcher| and
28 // |portable_device_watcher| objects. These params are either constructed in
29 // unit tests or in StorageMonitorWin CreateInternal() function.
30 StorageMonitorWin(VolumeMountWatcherWin* volume_mount_watcher,
31 PortableDeviceWatcherWin* portable_device_watcher);
32 virtual ~StorageMonitorWin();
34 // Must be called after the file thread is created.
35 virtual void Init() override;
38 virtual bool GetStorageInfoForPath(const base::FilePath& path,
39 StorageInfo* device_info) const override;
40 virtual bool GetMTPStorageInfoFromDeviceId(
41 const std::string& storage_device_id,
42 base::string16* device_location,
43 base::string16* storage_object_id) const override;
45 virtual void EjectDevice(
46 const std::string& device_id,
47 base::Callback<void(EjectStatus)> callback) override;
50 class PortableDeviceNotifications;
51 friend class TestStorageMonitorWin;
53 void MediaChangeNotificationRegister();
55 // Gets the removable storage information given a |device_path|. On success,
56 // returns true and fills in |info|.
57 bool GetDeviceInfo(const base::FilePath& device_path,
58 StorageInfo* info) const;
60 static LRESULT CALLBACK WndProcThunk(HWND hwnd, UINT message, WPARAM wparam,
63 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam,
66 void OnDeviceChange(UINT event_type, LPARAM data);
67 void OnMediaChange(WPARAM wparam, LPARAM lparam);
69 // The window class of |window_|.
72 // The handle of the module that contains the window procedure of |window_|.
76 // The handle of a registration for shell notifications.
77 ULONG shell_change_notify_id_;
79 // The volume mount point watcher, used to manage the mounted devices.
80 scoped_ptr<VolumeMountWatcherWin> volume_mount_watcher_;
82 // The portable device watcher, used to manage media transfer protocol
84 scoped_ptr<PortableDeviceWatcherWin> portable_device_watcher_;
86 DISALLOW_COPY_AND_ASSIGN(StorageMonitorWin);
89 } // namespace storage_monitor
91 #endif // COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_WIN_H_