Commit 1bf80bb5 authored by Donna Wu's avatar Donna Wu Committed by Commit Bot

Rename UsbEventRouter to UsbDeviceManager and proxy mojo interfaces.

This CL introduced a new class extensions::UsbDeviceManager and merged
it with existing extensions::UsbEventRouter. This new class will proxy
all USB mojo requests in chrome.usb extension implementation.

Bug: 716628
Change-Id: Ie296e6682dedd938e59432dd3b35f2a92fc9a69a
Reviewed-on: https://chromium-review.googlesource.com/c/1424739
Commit-Queue: Donna Wu <donna.wu@intel.com>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#626446}
parent f4003a16
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <stddef.h> #include <stddef.h>
#include <map> #include <map>
#include <memory>
#include <set> #include <set>
#include <utility> #include <utility>
#include <vector> #include <vector>
...@@ -19,11 +20,13 @@ ...@@ -19,11 +20,13 @@
#include "base/strings/string16.h" #include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/values.h" #include "base/values.h"
#include "device/usb/mojo/type_converters.h"
#include "device/usb/public/mojom/device.mojom.h"
#include "device/usb/usb_device.h" #include "device/usb/usb_device.h"
#include "extensions/browser/api/printer_provider/printer_provider_print_job.h" #include "extensions/browser/api/printer_provider/printer_provider_print_job.h"
#include "extensions/browser/api/printer_provider_internal/printer_provider_internal_api.h" #include "extensions/browser/api/printer_provider_internal/printer_provider_internal_api.h"
#include "extensions/browser/api/printer_provider_internal/printer_provider_internal_api_observer.h" #include "extensions/browser/api/printer_provider_internal/printer_provider_internal_api_observer.h"
#include "extensions/browser/api/usb/usb_guid_map.h" #include "extensions/browser/api/usb/usb_device_manager.h"
#include "extensions/browser/event_router.h" #include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_registry_observer.h" #include "extensions/browser/extension_registry_observer.h"
...@@ -655,7 +658,10 @@ void PrinterProviderAPIImpl::DispatchGetUsbPrinterInfoRequested( ...@@ -655,7 +658,10 @@ void PrinterProviderAPIImpl::DispatchGetUsbPrinterInfoRequested(
int request_id = int request_id =
pending_usb_printer_info_requests_[extension_id].Add(std::move(callback)); pending_usb_printer_info_requests_[extension_id].Add(std::move(callback));
api::usb::Device api_device; api::usb::Device api_device;
UsbGuidMap::Get(browser_context_)->GetApiDevice(device, &api_device); auto device_info = device::mojom::UsbDeviceInfo::From(*device);
DCHECK(device_info);
UsbDeviceManager::Get(browser_context_)
->GetApiDevice(*device_info, &api_device);
std::unique_ptr<base::ListValue> internal_args(new base::ListValue()); std::unique_ptr<base::ListValue> internal_args(new base::ListValue());
// Request id is not part of the public API and it will be massaged out in // Request id is not part of the public API and it will be massaged out in
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include "extensions/browser/api/printer_provider/printer_provider_api.h" #include "extensions/browser/api/printer_provider/printer_provider_api.h"
#include "extensions/browser/api/printer_provider/printer_provider_api_factory.h" #include "extensions/browser/api/printer_provider/printer_provider_api_factory.h"
#include "extensions/browser/api/printer_provider/printer_provider_print_job.h" #include "extensions/browser/api/printer_provider/printer_provider_print_job.h"
#include "extensions/browser/api/usb/usb_guid_map.h" #include "extensions/browser/api/usb/usb_device_manager.h"
#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/value_builder.h" #include "extensions/common/value_builder.h"
...@@ -768,15 +768,15 @@ IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, GetUsbPrinterInfo) { ...@@ -768,15 +768,15 @@ IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, GetUsbPrinterInfo) {
"OK", &extension_id); "OK", &extension_id);
ASSERT_FALSE(extension_id.empty()); ASSERT_FALSE(extension_id.empty());
UsbGuidMap* guid_map = UsbGuidMap::Get(browser_context()); UsbDeviceManager* device_manager = UsbDeviceManager::Get(browser_context());
std::unique_ptr<base::Value> expected_printer_info( std::unique_ptr<base::Value> expected_printer_info(
DictionaryBuilder() DictionaryBuilder()
.Set("description", "This printer is a USB device.") .Set("description", "This printer is a USB device.")
.Set("extensionId", extension_id) .Set("extensionId", extension_id)
.Set("extensionName", "Test USB printer provider") .Set("extensionName", "Test USB printer provider")
.Set("id", .Set("id", base::StringPrintf(
base::StringPrintf("%s:usbDevice-%u", extension_id.c_str(), "%s:usbDevice-%u", extension_id.c_str(),
guid_map->GetIdFromGuid(device->guid()))) device_manager->GetIdFromGuid(device->guid())))
.Set("name", "Test Printer") .Set("name", "Test Printer")
.Build()); .Build());
base::RunLoop run_loop; base::RunLoop run_loop;
......
...@@ -11,12 +11,10 @@ source_set("usb") { ...@@ -11,12 +11,10 @@ source_set("usb") {
sources = [ sources = [
"usb_api.cc", "usb_api.cc",
"usb_api.h", "usb_api.h",
"usb_device_manager.cc",
"usb_device_manager.h",
"usb_device_resource.cc", "usb_device_resource.cc",
"usb_device_resource.h", "usb_device_resource.h",
"usb_event_router.cc",
"usb_event_router.h",
"usb_guid_map.cc",
"usb_guid_map.h",
] ]
configs += [ configs += [
......
...@@ -17,7 +17,9 @@ ...@@ -17,7 +17,9 @@
#include "base/memory/ref_counted_memory.h" #include "base/memory/ref_counted_memory.h"
#include "base/values.h" #include "base/values.h"
#include "device/base/device_client.h" #include "device/base/device_client.h"
#include "device/usb/mojo/type_converters.h"
#include "device/usb/public/cpp/usb_utils.h" #include "device/usb/public/cpp/usb_utils.h"
#include "device/usb/public/mojom/device.mojom.h"
#include "device/usb/public/mojom/device_manager.mojom.h" #include "device/usb/public/mojom/device_manager.mojom.h"
#include "device/usb/usb_descriptors.h" #include "device/usb/usb_descriptors.h"
#include "device/usb/usb_device_handle.h" #include "device/usb/usb_device_handle.h"
...@@ -25,8 +27,8 @@ ...@@ -25,8 +27,8 @@
#include "extensions/browser/api/device_permissions_manager.h" #include "extensions/browser/api/device_permissions_manager.h"
#include "extensions/browser/api/device_permissions_prompt.h" #include "extensions/browser/api/device_permissions_prompt.h"
#include "extensions/browser/api/extensions_api_client.h" #include "extensions/browser/api/extensions_api_client.h"
#include "extensions/browser/api/usb/usb_device_manager.h"
#include "extensions/browser/api/usb/usb_device_resource.h" #include "extensions/browser/api/usb/usb_device_resource.h"
#include "extensions/browser/api/usb/usb_guid_map.h"
#include "extensions/browser/extension_function_constants.h" #include "extensions/browser/extension_function_constants.h"
#include "extensions/browser/extension_system.h" #include "extensions/browser/extension_system.h"
#include "extensions/common/api/usb.h" #include "extensions/common/api/usb.h"
...@@ -630,12 +632,14 @@ ExtensionFunction::ResponseAction UsbGetDevicesFunction::Run() { ...@@ -630,12 +632,14 @@ ExtensionFunction::ResponseAction UsbGetDevicesFunction::Run() {
void UsbGetDevicesFunction::OnGetDevicesComplete( void UsbGetDevicesFunction::OnGetDevicesComplete(
const std::vector<scoped_refptr<UsbDevice>>& devices) { const std::vector<scoped_refptr<UsbDevice>>& devices) {
std::unique_ptr<base::ListValue> result(new base::ListValue()); std::unique_ptr<base::ListValue> result(new base::ListValue());
UsbGuidMap* guid_map = UsbGuidMap::Get(browser_context()); UsbDeviceManager* device_manager = UsbDeviceManager::Get(browser_context());
for (const scoped_refptr<UsbDevice>& device : devices) { for (const scoped_refptr<UsbDevice>& device : devices) {
if (UsbDeviceFilterMatchesAny(filters_, *device) && if (UsbDeviceFilterMatchesAny(filters_, *device) &&
HasDevicePermission(device)) { HasDevicePermission(device)) {
Device api_device; Device api_device;
guid_map->GetApiDevice(device, &api_device); DCHECK(device);
auto device_info = device::mojom::UsbDeviceInfo::From(*device);
device_manager->GetApiDevice(*device_info, &api_device);
result->Append(api_device.ToValue()); result->Append(api_device.ToValue());
} }
} }
...@@ -691,10 +695,12 @@ ExtensionFunction::ResponseAction UsbGetUserSelectedDevicesFunction::Run() { ...@@ -691,10 +695,12 @@ ExtensionFunction::ResponseAction UsbGetUserSelectedDevicesFunction::Run() {
void UsbGetUserSelectedDevicesFunction::OnDevicesChosen( void UsbGetUserSelectedDevicesFunction::OnDevicesChosen(
const std::vector<scoped_refptr<UsbDevice>>& devices) { const std::vector<scoped_refptr<UsbDevice>>& devices) {
std::unique_ptr<base::ListValue> result(new base::ListValue()); std::unique_ptr<base::ListValue> result(new base::ListValue());
UsbGuidMap* guid_map = UsbGuidMap::Get(browser_context()); UsbDeviceManager* device_manager = UsbDeviceManager::Get(browser_context());
for (const auto& device : devices) { for (const auto& device : devices) {
Device api_device; Device api_device;
guid_map->GetApiDevice(device, &api_device); DCHECK(device);
auto device_info = device::mojom::UsbDeviceInfo::From(*device);
device_manager->GetApiDevice(*device_info, &api_device);
result->Append(api_device.ToValue()); result->Append(api_device.ToValue());
} }
...@@ -716,7 +722,7 @@ ExtensionFunction::ResponseAction UsbGetConfigurationsFunction::Run() { ...@@ -716,7 +722,7 @@ ExtensionFunction::ResponseAction UsbGetConfigurationsFunction::Run() {
} }
std::string guid; std::string guid;
if (!UsbGuidMap::Get(browser_context()) if (!UsbDeviceManager::Get(browser_context())
->GetGuidFromId(parameters->device.device, &guid)) { ->GetGuidFromId(parameters->device.device, &guid)) {
return RespondNow(Error(kErrorNoDevice)); return RespondNow(Error(kErrorNoDevice));
} }
...@@ -775,7 +781,7 @@ ExtensionFunction::ResponseAction UsbOpenDeviceFunction::Run() { ...@@ -775,7 +781,7 @@ ExtensionFunction::ResponseAction UsbOpenDeviceFunction::Run() {
} }
std::string guid; std::string guid;
if (!UsbGuidMap::Get(browser_context()) if (!UsbDeviceManager::Get(browser_context())
->GetGuidFromId(parameters->device.device, &guid)) { ->GetGuidFromId(parameters->device.device, &guid)) {
return RespondNow(Error(kErrorNoDevice)); return RespondNow(Error(kErrorNoDevice));
} }
......
// Copyright 2019 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 EXTENSIONS_BROWSER_API_USB_USB_DEVICE_MANAGER_H_
#define EXTENSIONS_BROWSER_API_USB_USB_DEVICE_MANAGER_H_
#include <map>
#include <string>
#include "base/macros.h"
#include "content/public/browser/browser_thread.h"
#include "device/usb/public/mojom/device_manager.mojom.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/browser/event_router.h"
#include "extensions/common/api/usb.h"
#include "mojo/public/cpp/bindings/associated_binding.h"
namespace extensions {
// A BrowserContext-scoped object which is registered as an observer of the
// EventRouter and UsbDeviceManager in order to manage the connection to the
// Device Service and generate device add/remove events.
class UsbDeviceManager : public BrowserContextKeyedAPI,
public EventRouter::Observer,
public device::mojom::UsbDeviceManagerClient {
public:
static UsbDeviceManager* Get(content::BrowserContext* browser_context);
// BrowserContextKeyedAPI implementation.
static BrowserContextKeyedAPIFactory<UsbDeviceManager>* GetFactoryInstance();
class Observer : public base::CheckedObserver {
public:
virtual void OnDeviceAdded(const device::mojom::UsbDeviceInfo&);
virtual void OnDeviceRemoved(const device::mojom::UsbDeviceInfo&);
virtual void OnDeviceRemovedCleanup(const device::mojom::UsbDeviceInfo&);
virtual void OnDeviceManagerConnectionError();
};
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
// Returns an ID for this device GUID. If the GUID is unknown to the
// UsbGuidMap a new ID is generated for it.
int GetIdFromGuid(const std::string& guid);
// Looks up a device GUID for a given extensions USB device ID. If the ID is
// unknown (e.g., the corresponding device was unplugged), this returns
// |false|; otherwise it returns |true|.
bool GetGuidFromId(int id, std::string* guid);
// Populates an instance of the chrome.usb.Device object from the given
// device.
void GetApiDevice(const device::mojom::UsbDeviceInfo& device_in,
api::usb::Device* device_out);
// Forward UsbDeviceManager methods.
void GetDevices(device::mojom::UsbDeviceManager::GetDevicesCallback callback);
void GetDevice(const std::string& guid,
device::mojom::UsbDeviceRequest device_request,
device::mojom::UsbDeviceClientPtr device_client);
private:
friend class BrowserContextKeyedAPIFactory<UsbDeviceManager>;
explicit UsbDeviceManager(content::BrowserContext* context);
~UsbDeviceManager() override;
// BrowserContextKeyedAPI implementation.
static const char* service_name() { return "UsbDeviceManager"; }
static const bool kServiceIsNULLWhileTesting = true;
// KeyedService implementation.
void Shutdown() override;
// EventRouter::Observer implementation.
void OnListenerAdded(const EventListenerInfo& details) override;
// UsbService::Observer implementation.
void OnDeviceAdded(device::mojom::UsbDeviceInfoPtr device_info) override;
void OnDeviceRemoved(device::mojom::UsbDeviceInfoPtr device_info) override;
void EnsureConnectionWithDeviceManager();
void SetUpDeviceManagerConnection();
void OnDeviceManagerConnectionError();
// Broadcasts a device add or remove event for the given device.
void DispatchEvent(const std::string& event_name,
const device::mojom::UsbDeviceInfo& device_info);
content::BrowserContext* const browser_context_;
// Legacy integer IDs are used in USB extensions API so we need to maps USB
// device GUIDs to integer IDs.
int next_id_ = 0;
std::map<std::string, int> guid_to_id_map_;
std::map<int, std::string> id_to_guid_map_;
// Connection to |device_manager_instance_|.
device::mojom::UsbDeviceManagerPtr device_manager_;
mojo::AssociatedBinding<device::mojom::UsbDeviceManagerClient>
client_binding_;
base::ObserverList<Observer> observer_list_;
base::WeakPtrFactory<UsbDeviceManager> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(UsbDeviceManager);
};
template <>
void BrowserContextKeyedAPIFactory<
UsbDeviceManager>::DeclareFactoryDependencies();
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_USB_USB_DEVICE_MANAGER_H_
// 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.
#ifndef EXTENSIONS_BROWSER_API_USB_USB_EVENT_ROUTER_H_
#define EXTENSIONS_BROWSER_API_USB_USB_EVENT_ROUTER_H_
#include "base/macros.h"
#include "content/public/browser/browser_thread.h"
#include "device/usb/usb_service.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/browser/event_router.h"
namespace device {
class UsbDevice;
}
namespace extensions {
// A BrowserContext-scoped object which is registered as an observer of the
// EventRouter and UsbService in order to generate device add/remove events.
class UsbEventRouter : public BrowserContextKeyedAPI,
public EventRouter::Observer,
public device::UsbService::Observer {
public:
// BrowserContextKeyedAPI implementation.
static BrowserContextKeyedAPIFactory<UsbEventRouter>* GetFactoryInstance();
private:
friend class BrowserContextKeyedAPIFactory<UsbEventRouter>;
explicit UsbEventRouter(content::BrowserContext* context);
~UsbEventRouter() override;
// BrowserContextKeyedAPI implementation.
static const char* service_name() { return "UsbEventRouter"; }
static const bool kServiceIsNULLWhileTesting = true;
// KeyedService implementation.
void Shutdown() override;
// EventRouter::Observer implementation.
void OnListenerAdded(const EventListenerInfo& details) override;
// UsbService::Observer implementation.
void OnDeviceAdded(scoped_refptr<device::UsbDevice> device) override;
void OnDeviceRemoved(scoped_refptr<device::UsbDevice> device) override;
// Broadcasts a device add or remove event for the given device.
void DispatchEvent(const std::string& event_name,
scoped_refptr<device::UsbDevice> device);
content::BrowserContext* const browser_context_;
ScopedObserver<device::UsbService, device::UsbService::Observer> observer_;
DISALLOW_COPY_AND_ASSIGN(UsbEventRouter);
};
template <>
void BrowserContextKeyedAPIFactory<
UsbEventRouter>::DeclareFactoryDependencies();
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_USB_USB_EVENT_ROUTER_H_
// 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 "extensions/browser/api/usb/usb_guid_map.h"
#include <utility>
#include "base/lazy_instance.h"
#include "base/strings/utf_string_conversions.h"
#include "device/base/device_client.h"
#include "device/usb/usb_device.h"
#include "device/usb/usb_service.h"
#include "extensions/common/api/usb.h"
namespace extensions {
namespace {
base::LazyInstance<BrowserContextKeyedAPIFactory<UsbGuidMap>>::Leaky
g_usb_guid_map_factory = LAZY_INSTANCE_INITIALIZER;
} // namespace
// static
UsbGuidMap* UsbGuidMap::Get(content::BrowserContext* browser_context) {
return BrowserContextKeyedAPIFactory<UsbGuidMap>::Get(browser_context);
}
// static
BrowserContextKeyedAPIFactory<UsbGuidMap>* UsbGuidMap::GetFactoryInstance() {
return g_usb_guid_map_factory.Pointer();
}
int UsbGuidMap::GetIdFromGuid(const std::string& guid) {
auto iter = guid_to_id_map_.find(guid);
if (iter == guid_to_id_map_.end()) {
auto result = guid_to_id_map_.insert(std::make_pair(guid, next_id_++));
DCHECK(result.second);
iter = result.first;
id_to_guid_map_.insert(std::make_pair(iter->second, guid));
}
return iter->second;
}
bool UsbGuidMap::GetGuidFromId(int id, std::string* guid) {
auto iter = id_to_guid_map_.find(id);
if (iter == id_to_guid_map_.end())
return false;
*guid = iter->second;
return true;
}
void UsbGuidMap::GetApiDevice(scoped_refptr<const device::UsbDevice> device_in,
extensions::api::usb::Device* device_out) {
device_out->device = GetIdFromGuid(device_in->guid());
device_out->vendor_id = device_in->vendor_id();
device_out->product_id = device_in->product_id();
device_out->version = device_in->device_version();
device_out->product_name = base::UTF16ToUTF8(device_in->product_string());
device_out->manufacturer_name =
base::UTF16ToUTF8(device_in->manufacturer_string());
device_out->serial_number = base::UTF16ToUTF8(device_in->serial_number());
}
UsbGuidMap::UsbGuidMap(content::BrowserContext* browser_context)
: browser_context_(browser_context), observer_(this) {
device::UsbService* service = device::DeviceClient::Get()->GetUsbService();
DCHECK(service);
observer_.Add(service);
}
UsbGuidMap::~UsbGuidMap() {
}
void UsbGuidMap::OnDeviceRemovedCleanup(
scoped_refptr<device::UsbDevice> device) {
auto iter = guid_to_id_map_.find(device->guid());
if (iter != guid_to_id_map_.end()) {
int id = iter->second;
guid_to_id_map_.erase(iter);
id_to_guid_map_.erase(id);
}
}
} // namespace extensions
// 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.
#ifndef EXTENSIONS_BROWSER_API_USB_USB_GUID_MAP_H_
#define EXTENSIONS_BROWSER_API_USB_USB_GUID_MAP_H_
#include <map>
#include <string>
#include "base/macros.h"
#include "base/scoped_observer.h"
#include "device/usb/usb_service.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/common/api/usb.h"
namespace device {
class UsbDevice;
}
namespace extensions {
// A BrowserContext-scoped object which maps USB device GUIDs to legacy integer
// IDs for use with the extensions API. This observes device removal to keep
// the mapping from growing indefinitely.
class UsbGuidMap : public BrowserContextKeyedAPI,
public device::UsbService::Observer {
public:
static UsbGuidMap* Get(content::BrowserContext* browser_context);
// BrowserContextKeyedAPI implementation.
static BrowserContextKeyedAPIFactory<UsbGuidMap>* GetFactoryInstance();
// Returns an ID for this device GUID. If the GUID is unknown to the
// UsbGuidMap a new ID is generated for it.
int GetIdFromGuid(const std::string& guid);
// Looks up a device GUID for a given extensions USB device ID. If the ID is
// unknown (e.g., the corresponding device was unplugged), this returns
// |false|; otherwise it returns |true|.
bool GetGuidFromId(int id, std::string* guid);
// Populates an instance of the chrome.usb.Device object from the given
// device.
void GetApiDevice(scoped_refptr<const device::UsbDevice> device_in,
extensions::api::usb::Device* device_out);
private:
friend class BrowserContextKeyedAPIFactory<UsbGuidMap>;
explicit UsbGuidMap(content::BrowserContext* context);
~UsbGuidMap() override;
// BrowserContextKeyedAPI implementation.
static const char* service_name() { return "UsbGuidMap"; }
static const bool kServiceIsCreatedWithBrowserContext = false;
static const bool kServiceRedirectedInIncognito = true;
// UsbService::Observer implementation.
void OnDeviceRemovedCleanup(scoped_refptr<device::UsbDevice> device) override;
content::BrowserContext* const browser_context_;
int next_id_ = 0;
std::map<std::string, int> guid_to_id_map_;
std::map<int, std::string> id_to_guid_map_;
ScopedObserver<device::UsbService, device::UsbService::Observer> observer_;
DISALLOW_COPY_AND_ASSIGN(UsbGuidMap);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_USB_USB_GUID_MAP_H_
...@@ -32,9 +32,8 @@ ...@@ -32,9 +32,8 @@
#include "extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.h" #include "extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.h"
#include "extensions/browser/api/storage/storage_frontend.h" #include "extensions/browser/api/storage/storage_frontend.h"
#include "extensions/browser/api/system_info/system_info_api.h" #include "extensions/browser/api/system_info/system_info_api.h"
#include "extensions/browser/api/usb/usb_device_manager.h"
#include "extensions/browser/api/usb/usb_device_resource.h" #include "extensions/browser/api/usb/usb_device_resource.h"
#include "extensions/browser/api/usb/usb_event_router.h"
#include "extensions/browser/api/usb/usb_guid_map.h"
#include "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_private_api.h" #include "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_private_api.h"
#include "extensions/browser/api/web_request/web_request_api.h" #include "extensions/browser/api/web_request/web_request_api.h"
#include "extensions/browser/api/webcam_private/webcam_private_api.h" #include "extensions/browser/api/webcam_private/webcam_private_api.h"
...@@ -97,8 +96,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() { ...@@ -97,8 +96,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
SystemPowerSourceAPI::GetFactoryInstance(); SystemPowerSourceAPI::GetFactoryInstance();
#endif #endif
UsbEventRouter::GetFactoryInstance(); UsbDeviceManager::GetFactoryInstance();
UsbGuidMap::GetFactoryInstance();
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
VirtualKeyboardAPI::GetFactoryInstance(); VirtualKeyboardAPI::GetFactoryInstance();
WebcamPrivateAPI::GetFactoryInstance(); WebcamPrivateAPI::GetFactoryInstance();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment