OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/extensions/api/usb/usb_api.h" | 5 #include "chrome/browser/extensions/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 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 CompleteWithError(kErrorNoDevice); | 443 CompleteWithError(kErrorNoDevice); |
444 return; | 444 return; |
445 } | 445 } |
446 | 446 |
447 service->FindDevices(vendor_id, product_id, &devices_, base::Bind( | 447 service->FindDevices(vendor_id, product_id, &devices_, base::Bind( |
448 &UsbFindDevicesFunction::OnCompleted, this)); | 448 &UsbFindDevicesFunction::OnCompleted, this)); |
449 } | 449 } |
450 | 450 |
451 void UsbFindDevicesFunction::OnCompleted() { | 451 void UsbFindDevicesFunction::OnCompleted() { |
452 for (size_t i = 0; i < devices_.size(); ++i) { | 452 for (size_t i = 0; i < devices_.size(); ++i) { |
453 UsbDevice* const device = devices_[i]; | 453 UsbDevice* const device = devices_[i].get(); |
454 UsbDeviceResource* const resource = new UsbDeviceResource( | 454 UsbDeviceResource* const resource = |
455 extension_->id(), device); | 455 new UsbDeviceResource(extension_->id(), device); |
456 | 456 |
457 Device js_device; | 457 Device js_device; |
458 result_->Append(PopulateDevice(manager_->Add(resource), | 458 result_->Append(PopulateDevice(manager_->Add(resource), |
459 parameters_->options.vendor_id, | 459 parameters_->options.vendor_id, |
460 parameters_->options.product_id)); | 460 parameters_->options.product_id)); |
461 } | 461 } |
462 | 462 |
463 SetResult(result_.release()); | 463 SetResult(result_.release()); |
464 AsyncWorkCompleted(); | 464 AsyncWorkCompleted(); |
465 } | 465 } |
(...skipping 10 matching lines...) Expand all Loading... |
476 | 476 |
477 void UsbListInterfacesFunction::AsyncWorkStart() { | 477 void UsbListInterfacesFunction::AsyncWorkStart() { |
478 UsbDeviceResource* const resource = GetUsbDeviceResource( | 478 UsbDeviceResource* const resource = GetUsbDeviceResource( |
479 parameters_->device.handle); | 479 parameters_->device.handle); |
480 if (!resource) { | 480 if (!resource) { |
481 CompleteWithError(kErrorNoDevice); | 481 CompleteWithError(kErrorNoDevice); |
482 return; | 482 return; |
483 } | 483 } |
484 | 484 |
485 config_ = new UsbConfigDescriptor(); | 485 config_ = new UsbConfigDescriptor(); |
486 resource->device()->ListInterfaces(config_, base::Bind( | 486 resource->device()->ListInterfaces( |
487 &UsbListInterfacesFunction::OnCompleted, this)); | 487 config_.get(), base::Bind(&UsbListInterfacesFunction::OnCompleted, this)); |
488 } | 488 } |
489 | 489 |
490 void UsbListInterfacesFunction::OnCompleted(bool success) { | 490 void UsbListInterfacesFunction::OnCompleted(bool success) { |
491 if (!success) { | 491 if (!success) { |
492 SetError(kErrorCannotListInterfaces); | 492 SetError(kErrorCannotListInterfaces); |
493 AsyncWorkCompleted(); | 493 AsyncWorkCompleted(); |
494 return; | 494 return; |
495 } | 495 } |
496 | 496 |
497 result_.reset(new base::ListValue()); | 497 result_.reset(new base::ListValue()); |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
736 return; | 736 return; |
737 } | 737 } |
738 | 738 |
739 if (!GetTransferSize(transfer, &size)) { | 739 if (!GetTransferSize(transfer, &size)) { |
740 CompleteWithError(kErrorInvalidTransferLength); | 740 CompleteWithError(kErrorInvalidTransferLength); |
741 return; | 741 return; |
742 } | 742 } |
743 | 743 |
744 scoped_refptr<net::IOBuffer> buffer = CreateBufferForTransfer( | 744 scoped_refptr<net::IOBuffer> buffer = CreateBufferForTransfer( |
745 transfer, direction, size); | 745 transfer, direction, size); |
746 if (!buffer) { | 746 if (!buffer.get()) { |
747 CompleteWithError(kErrorMalformedParameters); | 747 CompleteWithError(kErrorMalformedParameters); |
748 return; | 748 return; |
749 } | 749 } |
750 | 750 |
751 resource->device()->ControlTransfer(direction, request_type, recipient, | 751 resource->device()->ControlTransfer( |
752 transfer.request, transfer.value, transfer.index, buffer, size, 0, | 752 direction, |
| 753 request_type, |
| 754 recipient, |
| 755 transfer.request, |
| 756 transfer.value, |
| 757 transfer.index, |
| 758 buffer.get(), |
| 759 size, |
| 760 0, |
753 base::Bind(&UsbControlTransferFunction::OnCompleted, this)); | 761 base::Bind(&UsbControlTransferFunction::OnCompleted, this)); |
754 } | 762 } |
755 | 763 |
756 UsbBulkTransferFunction::UsbBulkTransferFunction() {} | 764 UsbBulkTransferFunction::UsbBulkTransferFunction() {} |
757 | 765 |
758 UsbBulkTransferFunction::~UsbBulkTransferFunction() {} | 766 UsbBulkTransferFunction::~UsbBulkTransferFunction() {} |
759 | 767 |
760 bool UsbBulkTransferFunction::Prepare() { | 768 bool UsbBulkTransferFunction::Prepare() { |
761 parameters_ = BulkTransfer::Params::Create(*args_); | 769 parameters_ = BulkTransfer::Params::Create(*args_); |
762 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 770 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
(...skipping 18 matching lines...) Expand all Loading... |
781 return; | 789 return; |
782 } | 790 } |
783 | 791 |
784 if (!GetTransferSize(transfer, &size)) { | 792 if (!GetTransferSize(transfer, &size)) { |
785 CompleteWithError(kErrorInvalidTransferLength); | 793 CompleteWithError(kErrorInvalidTransferLength); |
786 return; | 794 return; |
787 } | 795 } |
788 | 796 |
789 scoped_refptr<net::IOBuffer> buffer = CreateBufferForTransfer( | 797 scoped_refptr<net::IOBuffer> buffer = CreateBufferForTransfer( |
790 transfer, direction, size); | 798 transfer, direction, size); |
791 if (!buffer) { | 799 if (!buffer.get()) { |
792 CompleteWithError(kErrorMalformedParameters); | 800 CompleteWithError(kErrorMalformedParameters); |
793 return; | 801 return; |
794 } | 802 } |
795 | 803 |
796 resource->device()->BulkTransfer(direction, transfer.endpoint, | 804 resource->device() |
797 buffer, size, 0, base::Bind(&UsbBulkTransferFunction::OnCompleted, this)); | 805 ->BulkTransfer(direction, |
| 806 transfer.endpoint, |
| 807 buffer.get(), |
| 808 size, |
| 809 0, |
| 810 base::Bind(&UsbBulkTransferFunction::OnCompleted, this)); |
798 } | 811 } |
799 | 812 |
800 UsbInterruptTransferFunction::UsbInterruptTransferFunction() {} | 813 UsbInterruptTransferFunction::UsbInterruptTransferFunction() {} |
801 | 814 |
802 UsbInterruptTransferFunction::~UsbInterruptTransferFunction() {} | 815 UsbInterruptTransferFunction::~UsbInterruptTransferFunction() {} |
803 | 816 |
804 bool UsbInterruptTransferFunction::Prepare() { | 817 bool UsbInterruptTransferFunction::Prepare() { |
805 parameters_ = InterruptTransfer::Params::Create(*args_); | 818 parameters_ = InterruptTransfer::Params::Create(*args_); |
806 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 819 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
807 return true; | 820 return true; |
(...skipping 17 matching lines...) Expand all Loading... |
825 return; | 838 return; |
826 } | 839 } |
827 | 840 |
828 if (!GetTransferSize(transfer, &size)) { | 841 if (!GetTransferSize(transfer, &size)) { |
829 CompleteWithError(kErrorInvalidTransferLength); | 842 CompleteWithError(kErrorInvalidTransferLength); |
830 return; | 843 return; |
831 } | 844 } |
832 | 845 |
833 scoped_refptr<net::IOBuffer> buffer = CreateBufferForTransfer( | 846 scoped_refptr<net::IOBuffer> buffer = CreateBufferForTransfer( |
834 transfer, direction, size); | 847 transfer, direction, size); |
835 if (!buffer) { | 848 if (!buffer.get()) { |
836 CompleteWithError(kErrorMalformedParameters); | 849 CompleteWithError(kErrorMalformedParameters); |
837 return; | 850 return; |
838 } | 851 } |
839 | 852 |
840 resource->device()->InterruptTransfer(direction, transfer.endpoint, buffer, | 853 resource->device()->InterruptTransfer( |
841 size, 0, base::Bind(&UsbInterruptTransferFunction::OnCompleted, this)); | 854 direction, |
| 855 transfer.endpoint, |
| 856 buffer.get(), |
| 857 size, |
| 858 0, |
| 859 base::Bind(&UsbInterruptTransferFunction::OnCompleted, this)); |
842 } | 860 } |
843 | 861 |
844 UsbIsochronousTransferFunction::UsbIsochronousTransferFunction() {} | 862 UsbIsochronousTransferFunction::UsbIsochronousTransferFunction() {} |
845 | 863 |
846 UsbIsochronousTransferFunction::~UsbIsochronousTransferFunction() {} | 864 UsbIsochronousTransferFunction::~UsbIsochronousTransferFunction() {} |
847 | 865 |
848 bool UsbIsochronousTransferFunction::Prepare() { | 866 bool UsbIsochronousTransferFunction::Prepare() { |
849 parameters_ = IsochronousTransfer::Params::Create(*args_); | 867 parameters_ = IsochronousTransfer::Params::Create(*args_); |
850 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 868 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
851 return true; | 869 return true; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
885 } | 903 } |
886 unsigned int packet_length = transfer.packet_length; | 904 unsigned int packet_length = transfer.packet_length; |
887 const uint64 total_length = packets * packet_length; | 905 const uint64 total_length = packets * packet_length; |
888 if (packets > size || total_length > size) { | 906 if (packets > size || total_length > size) { |
889 CompleteWithError(kErrorTransferLength); | 907 CompleteWithError(kErrorTransferLength); |
890 return; | 908 return; |
891 } | 909 } |
892 | 910 |
893 scoped_refptr<net::IOBuffer> buffer = CreateBufferForTransfer( | 911 scoped_refptr<net::IOBuffer> buffer = CreateBufferForTransfer( |
894 generic_transfer, direction, size); | 912 generic_transfer, direction, size); |
895 if (!buffer) { | 913 if (!buffer.get()) { |
896 CompleteWithError(kErrorMalformedParameters); | 914 CompleteWithError(kErrorMalformedParameters); |
897 return; | 915 return; |
898 } | 916 } |
899 | 917 |
900 resource->device()->IsochronousTransfer(direction, generic_transfer.endpoint, | 918 resource->device()->IsochronousTransfer( |
901 buffer, size, packets, packet_length, 0, base::Bind( | 919 direction, |
902 &UsbIsochronousTransferFunction::OnCompleted, this)); | 920 generic_transfer.endpoint, |
| 921 buffer.get(), |
| 922 size, |
| 923 packets, |
| 924 packet_length, |
| 925 0, |
| 926 base::Bind(&UsbIsochronousTransferFunction::OnCompleted, this)); |
903 } | 927 } |
904 | 928 |
905 UsbResetDeviceFunction::UsbResetDeviceFunction() {} | 929 UsbResetDeviceFunction::UsbResetDeviceFunction() {} |
906 | 930 |
907 UsbResetDeviceFunction::~UsbResetDeviceFunction() {} | 931 UsbResetDeviceFunction::~UsbResetDeviceFunction() {} |
908 | 932 |
909 bool UsbResetDeviceFunction::Prepare() { | 933 bool UsbResetDeviceFunction::Prepare() { |
910 parameters_ = ResetDevice::Params::Create(*args_); | 934 parameters_ = ResetDevice::Params::Create(*args_); |
911 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 935 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
912 return true; | 936 return true; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 } | 983 } |
960 | 984 |
961 void UsbResetDeviceFunction::OnError() { | 985 void UsbResetDeviceFunction::OnError() { |
962 RemoveUsbDeviceResource(parameters_->device.handle); | 986 RemoveUsbDeviceResource(parameters_->device.handle); |
963 SetError(kErrorResetDevice); | 987 SetError(kErrorResetDevice); |
964 SetResult(Value::CreateBooleanValue(false)); | 988 SetResult(Value::CreateBooleanValue(false)); |
965 AsyncWorkCompleted(); | 989 AsyncWorkCompleted(); |
966 } | 990 } |
967 | 991 |
968 } // namespace extensions | 992 } // namespace extensions |
OLD | NEW |