OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/browser/api/usb/usb_api.h" | 5 #include "extensions/browser/api/usb/usb_api.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 case device::USB_TRANSFER_OVERFLOW: | 235 case device::USB_TRANSFER_OVERFLOW: |
236 return kErrorOverflow; | 236 return kErrorOverflow; |
237 case device::USB_TRANSFER_LENGTH_SHORT: | 237 case device::USB_TRANSFER_LENGTH_SHORT: |
238 return kErrorTransferLength; | 238 return kErrorTransferLength; |
239 default: | 239 default: |
240 NOTREACHED(); | 240 NOTREACHED(); |
241 return ""; | 241 return ""; |
242 } | 242 } |
243 } | 243 } |
244 | 244 |
245 #if defined(OS_CHROMEOS) | |
246 void RequestUsbDevicesAccessHelper( | 245 void RequestUsbDevicesAccessHelper( |
247 ScopedDeviceVector devices, | 246 ScopedDeviceVector devices, |
248 std::vector<scoped_refptr<UsbDevice> >::iterator i, | 247 std::vector<scoped_refptr<UsbDevice> >::iterator i, |
249 int interface_id, | 248 int interface_id, |
250 const base::Callback<void(ScopedDeviceVector result)>& callback, | 249 const base::Callback<void(ScopedDeviceVector result)>& callback, |
251 bool success) { | 250 bool success) { |
252 if (success) { | 251 if (success) { |
253 ++i; | 252 ++i; |
254 } else { | 253 } else { |
255 i = devices->erase(i); | 254 i = devices->erase(i); |
(...skipping 19 matching lines...) Expand all Loading... |
275 return; | 274 return; |
276 } | 275 } |
277 std::vector<scoped_refptr<UsbDevice> >::iterator i = devices->begin(); | 276 std::vector<scoped_refptr<UsbDevice> >::iterator i = devices->begin(); |
278 (*i)->RequestUsbAccess(interface_id, | 277 (*i)->RequestUsbAccess(interface_id, |
279 base::Bind(RequestUsbDevicesAccessHelper, | 278 base::Bind(RequestUsbDevicesAccessHelper, |
280 base::Passed(devices.Pass()), | 279 base::Passed(devices.Pass()), |
281 i, | 280 i, |
282 interface_id, | 281 interface_id, |
283 callback)); | 282 callback)); |
284 } | 283 } |
285 #endif // OS_CHROMEOS | |
286 | 284 |
287 base::DictionaryValue* CreateTransferInfo(UsbTransferStatus status, | 285 base::DictionaryValue* CreateTransferInfo(UsbTransferStatus status, |
288 scoped_refptr<net::IOBuffer> data, | 286 scoped_refptr<net::IOBuffer> data, |
289 size_t length) { | 287 size_t length) { |
290 base::DictionaryValue* result = new base::DictionaryValue(); | 288 base::DictionaryValue* result = new base::DictionaryValue(); |
291 result->SetInteger(kResultCodeKey, status); | 289 result->SetInteger(kResultCodeKey, status); |
292 result->Set(kDataKey, | 290 result->Set(kDataKey, |
293 base::BinaryValue::CreateWithCopiedBuffer(data->data(), length)); | 291 base::BinaryValue::CreateWithCopiedBuffer(data->data(), length)); |
294 return result; | 292 return result; |
295 } | 293 } |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 service->GetDevices(devices.get()); | 591 service->GetDevices(devices.get()); |
594 | 592 |
595 for (DeviceVector::iterator it = devices->begin(); it != devices->end();) { | 593 for (DeviceVector::iterator it = devices->begin(); it != devices->end();) { |
596 if ((*it)->vendor_id() != vendor_id || (*it)->product_id() != product_id) { | 594 if ((*it)->vendor_id() != vendor_id || (*it)->product_id() != product_id) { |
597 it = devices->erase(it); | 595 it = devices->erase(it); |
598 } else { | 596 } else { |
599 ++it; | 597 ++it; |
600 } | 598 } |
601 } | 599 } |
602 | 600 |
603 #if defined(OS_CHROMEOS) | |
604 RequestUsbDevicesAccess( | 601 RequestUsbDevicesAccess( |
605 devices.Pass(), | 602 devices.Pass(), |
606 interface_id, | 603 interface_id, |
607 base::Bind(&UsbFindDevicesFunction::OpenDevices, this)); | 604 base::Bind(&UsbFindDevicesFunction::OpenDevices, this)); |
608 #else | |
609 OpenDevices(devices.Pass()); | |
610 #endif // OS_CHROMEOS | |
611 } | 605 } |
612 | 606 |
613 void UsbFindDevicesFunction::OpenDevices(ScopedDeviceVector devices) { | 607 void UsbFindDevicesFunction::OpenDevices(ScopedDeviceVector devices) { |
614 base::ListValue* result = new base::ListValue(); | 608 base::ListValue* result = new base::ListValue(); |
615 | 609 |
616 for (size_t i = 0; i < devices->size(); ++i) { | 610 for (size_t i = 0; i < devices->size(); ++i) { |
617 scoped_refptr<UsbDeviceHandle> device_handle = devices->at(i)->Open(); | 611 scoped_refptr<UsbDeviceHandle> device_handle = devices->at(i)->Open(); |
618 if (device_handle.get()) | 612 if (device_handle.get()) |
619 device_handles_.push_back(device_handle); | 613 device_handles_.push_back(device_handle); |
620 } | 614 } |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 return; | 779 return; |
786 } | 780 } |
787 | 781 |
788 if (!HasDevicePermission(device_)) { | 782 if (!HasDevicePermission(device_)) { |
789 // This function must act as if there is no such device. Otherwise it can be | 783 // This function must act as if there is no such device. Otherwise it can be |
790 // used to fingerprint unauthorized devices. | 784 // used to fingerprint unauthorized devices. |
791 CompleteWithError(kErrorNoDevice); | 785 CompleteWithError(kErrorNoDevice); |
792 return; | 786 return; |
793 } | 787 } |
794 | 788 |
795 #if defined(OS_CHROMEOS) | |
796 device_->RequestUsbAccess( | 789 device_->RequestUsbAccess( |
797 -1, /* any interface, unused by the permission broker */ | 790 -1, /* any interface, unused by the permission broker */ |
798 base::Bind(&UsbOpenDeviceFunction::OnRequestAccessComplete, this)); | 791 base::Bind(&UsbOpenDeviceFunction::OnRequestAccessComplete, this)); |
799 #else | |
800 OnRequestAccessComplete(true); | |
801 #endif // OS_CHROMEOS | |
802 } | 792 } |
803 | 793 |
804 void UsbOpenDeviceFunction::OnRequestAccessComplete(bool success) { | 794 void UsbOpenDeviceFunction::OnRequestAccessComplete(bool success) { |
805 if (!success) { | 795 if (!success) { |
806 SetError(kErrorPermissionDenied); | 796 SetError(kErrorPermissionDenied); |
807 AsyncWorkCompleted(); | 797 AsyncWorkCompleted(); |
808 return; | 798 return; |
809 } | 799 } |
810 | 800 |
811 scoped_refptr<UsbDeviceHandle> handle = device_->Open(); | 801 scoped_refptr<UsbDeviceHandle> handle = device_->Open(); |
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 SetResult(new base::FundamentalValue(false)); | 1265 SetResult(new base::FundamentalValue(false)); |
1276 CompleteWithError(kErrorResetDevice); | 1266 CompleteWithError(kErrorResetDevice); |
1277 return; | 1267 return; |
1278 } | 1268 } |
1279 | 1269 |
1280 SetResult(new base::FundamentalValue(true)); | 1270 SetResult(new base::FundamentalValue(true)); |
1281 AsyncWorkCompleted(); | 1271 AsyncWorkCompleted(); |
1282 } | 1272 } |
1283 | 1273 |
1284 } // namespace extensions | 1274 } // namespace extensions |
OLD | NEW |