| 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 |