| // Copyright 2018 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. |
| |
| #ifndef COMPONENTS_STORAGE_MONITOR_MTP_MANAGER_CLIENT_CHROMEOS_H_ |
| #define COMPONENTS_STORAGE_MONITOR_MTP_MANAGER_CLIENT_CHROMEOS_H_ |
| |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| #include "base/memory/weak_ptr.h" |
| #include "components/storage_monitor/storage_monitor.h" |
| #include "mojo/public/cpp/bindings/associated_receiver.h" |
| #include "services/device/public/mojom/mtp_manager.mojom.h" |
| |
| namespace base { |
| class FilePath; |
| } |
| |
| namespace storage_monitor { |
| |
| // This client listens for MTP storage attachment and detachment events |
| // from MtpManager and forwards them to StorageMonitor. |
| class MtpManagerClientChromeOS : public device::mojom::MtpManagerClient { |
| public: |
| MtpManagerClientChromeOS(StorageMonitor::Receiver* receiver, |
| device::mojom::MtpManager* mtp_manager); |
| ~MtpManagerClientChromeOS() override; |
| |
| // Finds the storage that contains |path| and populates |storage_info|. |
| // Returns false if unable to find the storage. |
| bool GetStorageInfoForPath(const base::FilePath& path, |
| StorageInfo* storage_info) const; |
| |
| void EjectDevice(const std::string& device_id, |
| base::Callback<void(StorageMonitor::EjectStatus)> callback); |
| |
| protected: |
| // device::mojom::MtpManagerClient implementation. |
| // Exposed for unit tests. |
| void StorageAttached(device::mojom::MtpStorageInfoPtr storage_info) override; |
| void StorageDetached(const std::string& storage_name) override; |
| |
| private: |
| // Mapping of storage location and MTP storage info object. |
| using StorageLocationToInfoMap = std::map<std::string, StorageInfo>; |
| |
| // Enumerate existing MTP storage devices. |
| void OnReceivedStorages( |
| std::vector<device::mojom::MtpStorageInfoPtr> storage_info_list); |
| |
| // Find the |storage_map_| key for the record with this |device_id|. Returns |
| // true on success, false on failure. |
| bool GetLocationForDeviceId(const std::string& device_id, |
| std::string* location) const; |
| |
| // Map of all attached MTP devices. |
| StorageLocationToInfoMap storage_map_; |
| |
| // Pointer to the MTP manager. Not owned. Client must ensure the MTP |
| // manager outlives this object. |
| device::mojom::MtpManager* const mtp_manager_; |
| |
| mojo::AssociatedReceiver<device::mojom::MtpManagerClient> receiver_{this}; |
| |
| // The notifications object to use to signal newly attached devices. |
| // Guaranteed to outlive this class. |
| StorageMonitor::Receiver* const notifications_; |
| |
| base::WeakPtrFactory<MtpManagerClientChromeOS> weak_ptr_factory_{this}; |
| |
| DISALLOW_COPY_AND_ASSIGN(MtpManagerClientChromeOS); |
| }; |
| |
| } // namespace storage_monitor |
| |
| #endif // COMPONENTS_STORAGE_MONITOR_MTP_MANAGER_CLIENT_CHROMEOS_H_ |