Index: device/devices_app/usb/device_manager_impl.cc |
diff --git a/device/devices_app/usb/device_manager_impl.cc b/device/devices_app/usb/device_manager_impl.cc |
deleted file mode 100644 |
index b3f77843aad0d755c92b85a4d22889f6efeb45ca..0000000000000000000000000000000000000000 |
--- a/device/devices_app/usb/device_manager_impl.cc |
+++ /dev/null |
@@ -1,228 +0,0 @@ |
-// Copyright 2015 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. |
- |
-#include "device/devices_app/usb/device_manager_impl.h" |
- |
-#include <stddef.h> |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/location.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/stl_util.h" |
-#include "device/core/device_client.h" |
-#include "device/devices_app/usb/device_impl.h" |
-#include "device/devices_app/usb/public/interfaces/device.mojom.h" |
-#include "device/devices_app/usb/type_converters.h" |
-#include "device/usb/usb_device.h" |
-#include "device/usb/usb_device_filter.h" |
-#include "device/usb/usb_service.h" |
-#include "mojo/public/cpp/bindings/array.h" |
-#include "mojo/public/cpp/bindings/interface_request.h" |
- |
-namespace device { |
-namespace usb { |
- |
-namespace { |
- |
-using DeviceList = DeviceManagerImpl::DeviceList; |
-using DeviceMap = DeviceManagerImpl::DeviceMap; |
- |
-void FilterAndConvertDevicesAndThen( |
- const DeviceMap& devices, |
- const DeviceManagerImpl::GetDevicesCallback& callback, |
- mojo::Array<mojo::String> allowed_guids) { |
- mojo::Array<DeviceInfoPtr> allowed_devices(allowed_guids.size()); |
- for (size_t i = 0; i < allowed_guids.size(); ++i) { |
- const auto it = devices.find(allowed_guids[i]); |
- DCHECK(it != devices.end()); |
- allowed_devices[i] = DeviceInfo::From(*it->second); |
- } |
- |
- callback.Run(std::move(allowed_devices)); |
-} |
- |
-} // namespace |
- |
-// static |
-void DeviceManagerImpl::Create(PermissionProviderPtr permission_provider, |
- mojo::InterfaceRequest<DeviceManager> request) { |
- // The created object is owned by its binding. |
- new DeviceManagerImpl(std::move(permission_provider), std::move(request)); |
-} |
- |
-DeviceManagerImpl::DeviceManagerImpl( |
- PermissionProviderPtr permission_provider, |
- mojo::InterfaceRequest<DeviceManager> request) |
- : permission_provider_(std::move(permission_provider)), |
- observer_(this), |
- binding_(this, std::move(request)), |
- weak_factory_(this) { |
- // This object owns itself and will be destroyed if either the message pipe |
- // it is bound to is closed or the PermissionProvider it depends on is |
- // unavailable. |
- binding_.set_connection_error_handler([this]() { delete this; }); |
- permission_provider_.set_connection_error_handler([this]() { delete this; }); |
- |
- DCHECK(DeviceClient::Get()); |
- usb_service_ = DeviceClient::Get()->GetUsbService(); |
- if (usb_service_) |
- observer_.Add(usb_service_); |
-} |
- |
-DeviceManagerImpl::~DeviceManagerImpl() { |
- connection_error_handler_.Run(); |
-} |
- |
-void DeviceManagerImpl::GetDevices(EnumerationOptionsPtr options, |
- const GetDevicesCallback& callback) { |
- if (!usb_service_) { |
- mojo::Array<DeviceInfoPtr> no_devices; |
- callback.Run(std::move(no_devices)); |
- return; |
- } |
- |
- usb_service_->GetDevices(base::Bind(&DeviceManagerImpl::OnGetDevices, |
- weak_factory_.GetWeakPtr(), |
- base::Passed(&options), callback)); |
-} |
- |
-void DeviceManagerImpl::GetDeviceChanges( |
- const GetDeviceChangesCallback& callback) { |
- device_change_callbacks_.push(callback); |
- MaybeRunDeviceChangesCallback(); |
-} |
- |
-void DeviceManagerImpl::GetDevice( |
- const mojo::String& guid, |
- mojo::InterfaceRequest<Device> device_request) { |
- if (!usb_service_) |
- return; |
- |
- scoped_refptr<UsbDevice> device = usb_service_->GetDevice(guid); |
- if (!device) |
- return; |
- |
- mojo::Array<DeviceInfoPtr> requested_devices(1); |
- requested_devices[0] = DeviceInfo::From(*device); |
- permission_provider_->HasDevicePermission( |
- std::move(requested_devices), |
- base::Bind(&DeviceManagerImpl::OnGetDevicePermissionCheckComplete, |
- base::Unretained(this), device, |
- base::Passed(&device_request))); |
-} |
- |
-void DeviceManagerImpl::OnGetDevicePermissionCheckComplete( |
- scoped_refptr<UsbDevice> device, |
- mojo::InterfaceRequest<Device> device_request, |
- mojo::Array<mojo::String> allowed_guids) { |
- if (allowed_guids.size() == 0) |
- return; |
- |
- DCHECK(allowed_guids.size() == 1); |
- PermissionProviderPtr permission_provider; |
- permission_provider_->Bind(mojo::GetProxy(&permission_provider)); |
- new DeviceImpl(device, std::move(permission_provider), |
- std::move(device_request)); |
-} |
- |
-void DeviceManagerImpl::OnGetDevices(EnumerationOptionsPtr options, |
- const GetDevicesCallback& callback, |
- const DeviceList& devices) { |
- std::vector<UsbDeviceFilter> filters; |
- if (options) |
- filters = options->filters.To<std::vector<UsbDeviceFilter>>(); |
- |
- std::map<std::string, scoped_refptr<UsbDevice>> device_map; |
- mojo::Array<DeviceInfoPtr> requested_devices(0); |
- for (const auto& device : devices) { |
- if (filters.empty() || UsbDeviceFilter::MatchesAny(device, filters)) { |
- device_map[device->guid()] = device; |
- requested_devices.push_back(DeviceInfo::From(*device)); |
- } |
- } |
- |
- permission_provider_->HasDevicePermission( |
- std::move(requested_devices), |
- base::Bind(&FilterAndConvertDevicesAndThen, device_map, callback)); |
-} |
- |
-void DeviceManagerImpl::OnDeviceAdded(scoped_refptr<UsbDevice> device) { |
- DCHECK(!ContainsKey(devices_removed_, device->guid())); |
- devices_added_[device->guid()] = device; |
- MaybeRunDeviceChangesCallback(); |
-} |
- |
-void DeviceManagerImpl::OnDeviceRemoved(scoped_refptr<UsbDevice> device) { |
- if (devices_added_.erase(device->guid()) == 0) |
- devices_removed_[device->guid()] = device; |
- MaybeRunDeviceChangesCallback(); |
-} |
- |
-void DeviceManagerImpl::WillDestroyUsbService() { |
- observer_.RemoveAll(); |
- usb_service_ = nullptr; |
-} |
- |
-void DeviceManagerImpl::MaybeRunDeviceChangesCallback() { |
- if (!permission_request_pending_ && !device_change_callbacks_.empty()) { |
- DeviceMap devices_added; |
- devices_added.swap(devices_added_); |
- DeviceMap devices_removed; |
- devices_removed.swap(devices_removed_); |
- |
- mojo::Array<DeviceInfoPtr> requested_devices(devices_added.size() + |
- devices_removed.size()); |
- { |
- size_t i = 0; |
- for (const auto& map_entry : devices_added) |
- requested_devices[i++] = DeviceInfo::From(*map_entry.second); |
- for (const auto& map_entry : devices_removed) |
- requested_devices[i++] = DeviceInfo::From(*map_entry.second); |
- } |
- |
- permission_request_pending_ = true; |
- permission_provider_->HasDevicePermission( |
- std::move(requested_devices), |
- base::Bind(&DeviceManagerImpl::OnEnumerationPermissionCheckComplete, |
- base::Unretained(this), devices_added, devices_removed)); |
- } |
-} |
- |
-void DeviceManagerImpl::OnEnumerationPermissionCheckComplete( |
- const DeviceMap& devices_added, |
- const DeviceMap& devices_removed, |
- mojo::Array<mojo::String> allowed_guids) { |
- permission_request_pending_ = false; |
- |
- if (allowed_guids.size() > 0) { |
- DeviceChangeNotificationPtr notification = DeviceChangeNotification::New(); |
- notification->devices_added.resize(0); |
- notification->devices_removed.resize(0); |
- |
- for (size_t i = 0; i < allowed_guids.size(); ++i) { |
- const mojo::String& guid = allowed_guids[i]; |
- auto it = devices_added.find(guid); |
- if (it != devices_added.end()) { |
- DCHECK(!ContainsKey(devices_removed, guid)); |
- notification->devices_added.push_back(DeviceInfo::From(*it->second)); |
- } else { |
- it = devices_removed.find(guid); |
- DCHECK(it != devices_removed.end()); |
- notification->devices_removed.push_back(DeviceInfo::From(*it->second)); |
- } |
- } |
- |
- DCHECK(!device_change_callbacks_.empty()); |
- const GetDeviceChangesCallback& callback = device_change_callbacks_.front(); |
- callback.Run(std::move(notification)); |
- device_change_callbacks_.pop(); |
- } |
- |
- if (devices_added_.size() > 0 || !devices_removed_.empty()) |
- MaybeRunDeviceChangesCallback(); |
-} |
- |
-} // namespace usb |
-} // namespace device |