Adding Test Fixture for initial test cases for the App Remoting Test Driver. Also...
[chromium-blink-merge.git] / extensions / browser / api / usb / usb_api.h
blob8903348a3ba06b38c5c608a0d20b0d9b1b70515f
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 EXTENSIONS_BROWSER_API_USB_USB_API_H_
6 #define EXTENSIONS_BROWSER_API_USB_USB_API_H_
8 #include <string>
9 #include <vector>
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "device/usb/usb_device.h"
14 #include "device/usb/usb_device_filter.h"
15 #include "device/usb/usb_device_handle.h"
16 #include "extensions/browser/api/api_resource_manager.h"
17 #include "extensions/browser/api/async_api_function.h"
18 #include "extensions/browser/api/device_permissions_prompt.h"
19 #include "extensions/common/api/usb.h"
20 #include "net/base/io_buffer.h"
22 namespace extensions {
24 class DevicePermissionEntry;
25 class DevicePermissions;
26 class DevicePermissionsManager;
27 class UsbDeviceResource;
29 class UsbAsyncApiFunction : public AsyncApiFunction {
30 public:
31 UsbAsyncApiFunction();
33 protected:
34 ~UsbAsyncApiFunction() override;
36 // AsyncApiFunction:
37 bool PrePrepare() override;
38 bool Respond() override;
40 bool HasDevicePermission(scoped_refptr<device::UsbDevice> device);
41 scoped_refptr<device::UsbDeviceHandle> GetDeviceHandleOrCompleteWithError(
42 const extensions::core_api::usb::ConnectionHandle& input_device_handle);
43 void RemoveUsbDeviceResource(int api_resource_id);
44 void CompleteWithError(const std::string& error);
46 ApiResourceManager<UsbDeviceResource>* manager_;
47 scoped_ptr<DevicePermissions> device_permissions_;
48 scoped_refptr<DevicePermissionEntry> permission_entry_;
51 class UsbAsyncApiTransferFunction : public UsbAsyncApiFunction {
52 protected:
53 UsbAsyncApiTransferFunction();
54 ~UsbAsyncApiTransferFunction() override;
56 bool ConvertDirectionSafely(const extensions::core_api::usb::Direction& input,
57 device::UsbEndpointDirection* output);
58 bool ConvertRequestTypeSafely(
59 const extensions::core_api::usb::RequestType& input,
60 device::UsbDeviceHandle::TransferRequestType* output);
61 bool ConvertRecipientSafely(
62 const extensions::core_api::usb::Recipient& input,
63 device::UsbDeviceHandle::TransferRecipient* output);
65 void OnCompleted(device::UsbTransferStatus status,
66 scoped_refptr<net::IOBuffer> data,
67 size_t length);
70 class UsbFindDevicesFunction : public UsbAsyncApiFunction {
71 public:
72 DECLARE_EXTENSION_FUNCTION("usb.findDevices", USB_FINDDEVICES)
74 UsbFindDevicesFunction();
76 protected:
77 ~UsbFindDevicesFunction() override;
79 // AsyncApiFunction:
80 bool Prepare() override;
81 void AsyncWorkStart() override;
83 private:
84 void OpenDevices(
85 scoped_ptr<std::vector<scoped_refptr<device::UsbDevice> > > devices);
87 std::vector<scoped_refptr<device::UsbDeviceHandle> > device_handles_;
88 scoped_ptr<extensions::core_api::usb::FindDevices::Params> parameters_;
91 class UsbGetDevicesFunction : public UsbAsyncApiFunction {
92 public:
93 DECLARE_EXTENSION_FUNCTION("usb.getDevices", USB_GETDEVICES)
95 UsbGetDevicesFunction();
97 // AsyncApiFunction:
98 bool Prepare() override;
99 void AsyncWorkStart() override;
101 protected:
102 ~UsbGetDevicesFunction() override;
104 private:
105 scoped_ptr<extensions::core_api::usb::GetDevices::Params> parameters_;
108 class UsbGetUserSelectedDevicesFunction
109 : public UIThreadExtensionFunction,
110 public DevicePermissionsPrompt::Delegate {
111 public:
112 DECLARE_EXTENSION_FUNCTION("usb.getUserSelectedDevices",
113 USB_GETUSERSELECTEDDEVICES)
115 UsbGetUserSelectedDevicesFunction();
117 protected:
118 ~UsbGetUserSelectedDevicesFunction() override;
120 // ExtensionFunction:
121 ResponseAction Run() override;
123 private:
124 void OnUsbDevicesChosen(
125 const std::vector<scoped_refptr<device::UsbDevice>>& devices) override;
127 scoped_ptr<DevicePermissionsPrompt> prompt_;
128 std::vector<uint32> device_ids_;
129 std::vector<scoped_refptr<device::UsbDevice>> devices_;
130 std::vector<base::string16> serial_numbers_;
133 class UsbRequestAccessFunction : public UsbAsyncApiFunction {
134 public:
135 DECLARE_EXTENSION_FUNCTION("usb.requestAccess", USB_REQUESTACCESS)
137 UsbRequestAccessFunction();
139 // AsyncApiFunction:
140 bool Prepare() override;
141 void AsyncWorkStart() override;
143 protected:
144 ~UsbRequestAccessFunction() override;
146 private:
147 scoped_ptr<extensions::core_api::usb::RequestAccess::Params> parameters_;
150 class UsbOpenDeviceFunction : public UsbAsyncApiFunction {
151 public:
152 DECLARE_EXTENSION_FUNCTION("usb.openDevice", USB_OPENDEVICE)
154 UsbOpenDeviceFunction();
156 // AsyncApiFunction:
157 bool Prepare() override;
158 void AsyncWorkStart() override;
159 bool Respond() override;
161 protected:
162 ~UsbOpenDeviceFunction() override;
164 private:
165 void OnRequestAccessComplete(bool success);
167 DevicePermissionsManager* device_permissions_manager_;
168 scoped_refptr<device::UsbDevice> device_;
169 scoped_ptr<extensions::core_api::usb::OpenDevice::Params> parameters_;
172 class UsbSetConfigurationFunction : public UsbAsyncApiFunction {
173 public:
174 DECLARE_EXTENSION_FUNCTION("usb.setConfiguration", USB_SETCONFIGURATION)
176 UsbSetConfigurationFunction();
178 protected:
179 ~UsbSetConfigurationFunction() override;
181 // AsyncApiFunction:
182 bool Prepare() override;
183 void AsyncWorkStart() override;
185 private:
186 scoped_ptr<extensions::core_api::usb::SetConfiguration::Params> parameters_;
189 class UsbGetConfigurationFunction : public UsbAsyncApiFunction {
190 public:
191 DECLARE_EXTENSION_FUNCTION("usb.getConfiguration", USB_GETCONFIGURATION)
193 UsbGetConfigurationFunction();
195 protected:
196 ~UsbGetConfigurationFunction() override;
198 // AsyncApiFunction:
199 bool Prepare() override;
200 void AsyncWorkStart() override;
202 private:
203 scoped_ptr<extensions::core_api::usb::GetConfiguration::Params> parameters_;
206 class UsbListInterfacesFunction : public UsbAsyncApiFunction {
207 public:
208 DECLARE_EXTENSION_FUNCTION("usb.listInterfaces", USB_LISTINTERFACES)
210 UsbListInterfacesFunction();
212 protected:
213 ~UsbListInterfacesFunction() override;
215 // AsyncApiFunction:
216 bool Prepare() override;
217 void AsyncWorkStart() override;
219 private:
220 scoped_ptr<extensions::core_api::usb::ListInterfaces::Params> parameters_;
223 class UsbCloseDeviceFunction : public UsbAsyncApiFunction {
224 public:
225 DECLARE_EXTENSION_FUNCTION("usb.closeDevice", USB_CLOSEDEVICE)
227 UsbCloseDeviceFunction();
229 protected:
230 ~UsbCloseDeviceFunction() override;
232 // AsyncApiFunction:
233 bool Prepare() override;
234 void AsyncWorkStart() override;
236 private:
237 scoped_ptr<extensions::core_api::usb::CloseDevice::Params> parameters_;
240 class UsbClaimInterfaceFunction : public UsbAsyncApiFunction {
241 public:
242 DECLARE_EXTENSION_FUNCTION("usb.claimInterface", USB_CLAIMINTERFACE)
244 UsbClaimInterfaceFunction();
246 protected:
247 ~UsbClaimInterfaceFunction() override;
249 // AsyncApiFunction:
250 bool Prepare() override;
251 void AsyncWorkStart() override;
253 private:
254 scoped_ptr<extensions::core_api::usb::ClaimInterface::Params> parameters_;
257 class UsbReleaseInterfaceFunction : public UsbAsyncApiFunction {
258 public:
259 DECLARE_EXTENSION_FUNCTION("usb.releaseInterface", USB_RELEASEINTERFACE)
261 UsbReleaseInterfaceFunction();
263 protected:
264 ~UsbReleaseInterfaceFunction() override;
266 // AsyncApiFunction:
267 bool Prepare() override;
268 void AsyncWorkStart() override;
270 private:
271 scoped_ptr<extensions::core_api::usb::ReleaseInterface::Params> parameters_;
274 class UsbSetInterfaceAlternateSettingFunction : public UsbAsyncApiFunction {
275 public:
276 DECLARE_EXTENSION_FUNCTION("usb.setInterfaceAlternateSetting",
277 USB_SETINTERFACEALTERNATESETTING)
279 UsbSetInterfaceAlternateSettingFunction();
281 private:
282 ~UsbSetInterfaceAlternateSettingFunction() override;
284 // AsyncApiFunction:
285 bool Prepare() override;
286 void AsyncWorkStart() override;
288 scoped_ptr<extensions::core_api::usb::SetInterfaceAlternateSetting::Params>
289 parameters_;
292 class UsbControlTransferFunction : public UsbAsyncApiTransferFunction {
293 public:
294 DECLARE_EXTENSION_FUNCTION("usb.controlTransfer", USB_CONTROLTRANSFER)
296 UsbControlTransferFunction();
298 protected:
299 ~UsbControlTransferFunction() override;
301 // AsyncApiFunction:
302 bool Prepare() override;
303 void AsyncWorkStart() override;
305 private:
306 scoped_ptr<extensions::core_api::usb::ControlTransfer::Params> parameters_;
309 class UsbBulkTransferFunction : public UsbAsyncApiTransferFunction {
310 public:
311 DECLARE_EXTENSION_FUNCTION("usb.bulkTransfer", USB_BULKTRANSFER)
313 UsbBulkTransferFunction();
315 protected:
316 ~UsbBulkTransferFunction() override;
318 // AsyncApiFunction:
319 bool Prepare() override;
320 void AsyncWorkStart() override;
322 private:
323 scoped_ptr<extensions::core_api::usb::BulkTransfer::Params> parameters_;
326 class UsbInterruptTransferFunction : public UsbAsyncApiTransferFunction {
327 public:
328 DECLARE_EXTENSION_FUNCTION("usb.interruptTransfer", USB_INTERRUPTTRANSFER)
330 UsbInterruptTransferFunction();
332 protected:
333 ~UsbInterruptTransferFunction() override;
335 // AsyncApiFunction:
336 bool Prepare() override;
337 void AsyncWorkStart() override;
339 private:
340 scoped_ptr<extensions::core_api::usb::InterruptTransfer::Params> parameters_;
343 class UsbIsochronousTransferFunction : public UsbAsyncApiTransferFunction {
344 public:
345 DECLARE_EXTENSION_FUNCTION("usb.isochronousTransfer", USB_ISOCHRONOUSTRANSFER)
347 UsbIsochronousTransferFunction();
349 protected:
350 ~UsbIsochronousTransferFunction() override;
352 // AsyncApiFunction:
353 bool Prepare() override;
354 void AsyncWorkStart() override;
356 private:
357 scoped_ptr<extensions::core_api::usb::IsochronousTransfer::Params>
358 parameters_;
361 class UsbResetDeviceFunction : public UsbAsyncApiFunction {
362 public:
363 DECLARE_EXTENSION_FUNCTION("usb.resetDevice", USB_RESETDEVICE)
365 UsbResetDeviceFunction();
367 protected:
368 ~UsbResetDeviceFunction() override;
370 // AsyncApiFunction:
371 bool Prepare() override;
372 void AsyncWorkStart() override;
374 private:
375 scoped_ptr<extensions::core_api::usb::ResetDevice::Params> parameters_;
377 } // namespace extensions
379 #endif // EXTENSIONS_BROWSER_API_USB_USB_API_H_