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 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 | 481 |
482 void UsbListInterfacesFunction::AsyncWorkStart() { | 482 void UsbListInterfacesFunction::AsyncWorkStart() { |
483 UsbDeviceResource* const resource = GetUsbDeviceResource( | 483 UsbDeviceResource* const resource = GetUsbDeviceResource( |
484 parameters_->device.handle); | 484 parameters_->device.handle); |
485 if (!resource) { | 485 if (!resource) { |
486 CompleteWithError(kErrorNoDevice); | 486 CompleteWithError(kErrorNoDevice); |
487 return; | 487 return; |
488 } | 488 } |
489 | 489 |
490 config_ = new UsbConfigDescriptor(); | 490 config_ = new UsbConfigDescriptor(); |
491 resource->device()->ListInterfaces( | 491 BrowserThread::PostTaskAndReplyWithResult( |
492 config_.get(), base::Bind(&UsbListInterfacesFunction::OnCompleted, this)); | 492 BrowserThread::FILE, |
| 493 FROM_HERE, |
| 494 base::Bind(&UsbDeviceHandle::ListInterfaces, |
| 495 resource->device(), |
| 496 config_), |
| 497 base::Bind(&UsbListInterfacesFunction::OnCompleted, this)); |
493 } | 498 } |
494 | 499 |
495 void UsbListInterfacesFunction::OnCompleted(bool success) { | 500 void UsbListInterfacesFunction::OnCompleted(bool success) { |
496 if (!success) { | 501 if (!success) { |
497 SetError(kErrorCannotListInterfaces); | 502 SetError(kErrorCannotListInterfaces); |
498 AsyncWorkCompleted(); | 503 AsyncWorkCompleted(); |
499 return; | 504 return; |
500 } | 505 } |
501 | 506 |
502 result_.reset(new base::ListValue()); | 507 result_.reset(new base::ListValue()); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
605 } | 610 } |
606 | 611 |
607 void UsbCloseDeviceFunction::AsyncWorkStart() { | 612 void UsbCloseDeviceFunction::AsyncWorkStart() { |
608 UsbDeviceResource* const resource = GetUsbDeviceResource( | 613 UsbDeviceResource* const resource = GetUsbDeviceResource( |
609 parameters_->device.handle); | 614 parameters_->device.handle); |
610 if (!resource) { | 615 if (!resource) { |
611 CompleteWithError(kErrorNoDevice); | 616 CompleteWithError(kErrorNoDevice); |
612 return; | 617 return; |
613 } | 618 } |
614 | 619 |
615 resource->device()->Close(base::Bind(&UsbCloseDeviceFunction::OnCompleted, | 620 BrowserThread::PostTaskAndReply( |
616 this)); | 621 BrowserThread::FILE, |
| 622 FROM_HERE, |
| 623 base::Bind(&UsbDeviceHandle::Close, resource->device()), |
| 624 base::Bind(&UsbCloseDeviceFunction::OnCompleted, this)); |
617 RemoveUsbDeviceResource(parameters_->device.handle); | 625 RemoveUsbDeviceResource(parameters_->device.handle); |
618 } | 626 } |
619 | 627 |
620 void UsbCloseDeviceFunction::OnCompleted() { | 628 void UsbCloseDeviceFunction::OnCompleted() { |
621 AsyncWorkCompleted(); | 629 AsyncWorkCompleted(); |
622 } | 630 } |
623 | 631 |
624 UsbClaimInterfaceFunction::UsbClaimInterfaceFunction() {} | 632 UsbClaimInterfaceFunction::UsbClaimInterfaceFunction() {} |
625 | 633 |
626 UsbClaimInterfaceFunction::~UsbClaimInterfaceFunction() {} | 634 UsbClaimInterfaceFunction::~UsbClaimInterfaceFunction() {} |
627 | 635 |
628 bool UsbClaimInterfaceFunction::Prepare() { | 636 bool UsbClaimInterfaceFunction::Prepare() { |
629 parameters_ = ClaimInterface::Params::Create(*args_); | 637 parameters_ = ClaimInterface::Params::Create(*args_); |
630 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 638 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
631 return true; | 639 return true; |
632 } | 640 } |
633 | 641 |
634 void UsbClaimInterfaceFunction::AsyncWorkStart() { | 642 void UsbClaimInterfaceFunction::AsyncWorkStart() { |
635 UsbDeviceResource* resource = | 643 UsbDeviceResource* resource = |
636 GetUsbDeviceResource(parameters_->device.handle); | 644 GetUsbDeviceResource(parameters_->device.handle); |
637 if (!resource) { | 645 if (!resource) { |
638 CompleteWithError(kErrorNoDevice); | 646 CompleteWithError(kErrorNoDevice); |
639 return; | 647 return; |
640 } | 648 } |
641 | 649 |
642 resource->device()->ClaimInterface(parameters_->interface_number, | 650 BrowserThread::PostTaskAndReplyWithResult( |
| 651 BrowserThread::FILE, |
| 652 FROM_HERE, |
| 653 base::Bind(&UsbDeviceHandle::ClaimInterface, |
| 654 resource->device(), |
| 655 parameters_->interface_number), |
643 base::Bind(&UsbClaimInterfaceFunction::OnCompleted, this)); | 656 base::Bind(&UsbClaimInterfaceFunction::OnCompleted, this)); |
644 } | 657 } |
645 | 658 |
646 void UsbClaimInterfaceFunction::OnCompleted(bool success) { | 659 void UsbClaimInterfaceFunction::OnCompleted(bool success) { |
647 if (!success) | 660 if (!success) |
648 SetError(kErrorCannotClaimInterface); | 661 SetError(kErrorCannotClaimInterface); |
649 AsyncWorkCompleted(); | 662 AsyncWorkCompleted(); |
650 } | 663 } |
651 | 664 |
652 UsbReleaseInterfaceFunction::UsbReleaseInterfaceFunction() {} | 665 UsbReleaseInterfaceFunction::UsbReleaseInterfaceFunction() {} |
653 | 666 |
654 UsbReleaseInterfaceFunction::~UsbReleaseInterfaceFunction() {} | 667 UsbReleaseInterfaceFunction::~UsbReleaseInterfaceFunction() {} |
655 | 668 |
656 bool UsbReleaseInterfaceFunction::Prepare() { | 669 bool UsbReleaseInterfaceFunction::Prepare() { |
657 parameters_ = ReleaseInterface::Params::Create(*args_); | 670 parameters_ = ReleaseInterface::Params::Create(*args_); |
658 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 671 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
659 return true; | 672 return true; |
660 } | 673 } |
661 | 674 |
662 void UsbReleaseInterfaceFunction::AsyncWorkStart() { | 675 void UsbReleaseInterfaceFunction::AsyncWorkStart() { |
663 UsbDeviceResource* resource = | 676 UsbDeviceResource* resource = |
664 GetUsbDeviceResource(parameters_->device.handle); | 677 GetUsbDeviceResource(parameters_->device.handle); |
665 if (!resource) { | 678 if (!resource) { |
666 CompleteWithError(kErrorNoDevice); | 679 CompleteWithError(kErrorNoDevice); |
667 return; | 680 return; |
668 } | 681 } |
669 | 682 |
670 resource->device()->ReleaseInterface(parameters_->interface_number, | 683 BrowserThread::PostTaskAndReplyWithResult( |
| 684 BrowserThread::FILE, |
| 685 FROM_HERE, |
| 686 base::Bind(&UsbDeviceHandle::ReleaseInterface, |
| 687 resource->device(), |
| 688 parameters_->interface_number), |
671 base::Bind(&UsbReleaseInterfaceFunction::OnCompleted, this)); | 689 base::Bind(&UsbReleaseInterfaceFunction::OnCompleted, this)); |
672 } | 690 } |
673 | 691 |
674 void UsbReleaseInterfaceFunction::OnCompleted(bool success) { | 692 void UsbReleaseInterfaceFunction::OnCompleted(bool success) { |
675 if (!success) | 693 if (!success) |
676 SetError(kErrorCannotReleaseInterface); | 694 SetError(kErrorCannotReleaseInterface); |
677 AsyncWorkCompleted(); | 695 AsyncWorkCompleted(); |
678 } | 696 } |
679 | 697 |
680 UsbSetInterfaceAlternateSettingFunction:: | 698 UsbSetInterfaceAlternateSettingFunction:: |
681 UsbSetInterfaceAlternateSettingFunction() {} | 699 UsbSetInterfaceAlternateSettingFunction() {} |
682 | 700 |
683 UsbSetInterfaceAlternateSettingFunction:: | 701 UsbSetInterfaceAlternateSettingFunction:: |
684 ~UsbSetInterfaceAlternateSettingFunction() {} | 702 ~UsbSetInterfaceAlternateSettingFunction() {} |
685 | 703 |
686 bool UsbSetInterfaceAlternateSettingFunction::Prepare() { | 704 bool UsbSetInterfaceAlternateSettingFunction::Prepare() { |
687 parameters_ = SetInterfaceAlternateSetting::Params::Create(*args_); | 705 parameters_ = SetInterfaceAlternateSetting::Params::Create(*args_); |
688 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 706 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
689 return true; | 707 return true; |
690 } | 708 } |
691 | 709 |
692 void UsbSetInterfaceAlternateSettingFunction::AsyncWorkStart() { | 710 void UsbSetInterfaceAlternateSettingFunction::AsyncWorkStart() { |
693 UsbDeviceResource* resource = | 711 UsbDeviceResource* resource = |
694 GetUsbDeviceResource(parameters_->device.handle); | 712 GetUsbDeviceResource(parameters_->device.handle); |
695 if (!resource) { | 713 if (!resource) { |
696 CompleteWithError(kErrorNoDevice); | 714 CompleteWithError(kErrorNoDevice); |
697 return; | 715 return; |
698 } | 716 } |
699 | 717 |
700 resource->device()->SetInterfaceAlternateSetting( | 718 BrowserThread::PostTaskAndReplyWithResult( |
701 parameters_->interface_number, | 719 BrowserThread::FILE, |
702 parameters_->alternate_setting, | 720 FROM_HERE, |
| 721 base::Bind(&UsbDeviceHandle::SetInterfaceAlternateSetting, |
| 722 resource->device(), |
| 723 parameters_->interface_number, |
| 724 parameters_->alternate_setting), |
703 base::Bind(&UsbSetInterfaceAlternateSettingFunction::OnCompleted, this)); | 725 base::Bind(&UsbSetInterfaceAlternateSettingFunction::OnCompleted, this)); |
704 } | 726 } |
705 | 727 |
706 void UsbSetInterfaceAlternateSettingFunction::OnCompleted(bool success) { | 728 void UsbSetInterfaceAlternateSettingFunction::OnCompleted(bool success) { |
707 if (!success) | 729 if (!success) |
708 SetError(kErrorCannotSetInterfaceAlternateSetting); | 730 SetError(kErrorCannotSetInterfaceAlternateSetting); |
709 AsyncWorkCompleted(); | 731 AsyncWorkCompleted(); |
710 } | 732 } |
711 | 733 |
712 UsbControlTransferFunction::UsbControlTransferFunction() {} | 734 UsbControlTransferFunction::UsbControlTransferFunction() {} |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 return; | 971 return; |
950 } | 972 } |
951 | 973 |
952 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 974 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
953 base::Bind(&UsbResetDeviceFunction::OnStartResest, | 975 base::Bind(&UsbResetDeviceFunction::OnStartResest, |
954 this, resource)); | 976 this, resource)); |
955 } | 977 } |
956 | 978 |
957 void UsbResetDeviceFunction::OnStartResest(UsbDeviceResource* resource) { | 979 void UsbResetDeviceFunction::OnStartResest(UsbDeviceResource* resource) { |
958 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 980 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
959 resource->device()->ResetDevice( | 981 OnCompletedFileThread(resource->device()->ResetDevice()); |
960 base::Bind(&UsbResetDeviceFunction::OnCompletedFileThread, this)); | |
961 } | 982 } |
962 | 983 |
963 void UsbResetDeviceFunction::OnCompletedFileThread(bool success) { | 984 void UsbResetDeviceFunction::OnCompletedFileThread(bool success) { |
964 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 985 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
965 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 986 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
966 base::Bind(&UsbResetDeviceFunction::OnCompleted, | 987 base::Bind(&UsbResetDeviceFunction::OnCompleted, |
967 this, success)); | 988 this, success)); |
968 return; | 989 return; |
969 } | 990 } |
970 | 991 |
971 void UsbResetDeviceFunction::OnCompleted(bool success) { | 992 void UsbResetDeviceFunction::OnCompleted(bool success) { |
972 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 993 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
973 if (!success) { | 994 if (!success) { |
974 UsbDeviceResource* const resource = GetUsbDeviceResource( | 995 UsbDeviceResource* const resource = GetUsbDeviceResource( |
975 parameters_->device.handle); | 996 parameters_->device.handle); |
976 if (!resource) { | 997 if (!resource) { |
977 CompleteWithError(kErrorNoDevice); | 998 CompleteWithError(kErrorNoDevice); |
978 return; | 999 return; |
979 } | 1000 } |
980 // Close the device now because the handle is invalid after an | 1001 // Close the device now because the handle is invalid after an |
981 // unsuccessful reset. | 1002 // unsuccessful reset. |
982 resource->device()->Close( | 1003 BrowserThread::PostTaskAndReply( |
983 base::Bind(&UsbResetDeviceFunction::OnError, this)); | 1004 BrowserThread::FILE, |
| 1005 FROM_HERE, |
| 1006 base::Bind(&UsbDeviceHandle::Close, |
| 1007 resource->device()), |
| 1008 base::Bind(&UsbResetDeviceFunction::OnError, this)); |
984 return; | 1009 return; |
985 } | 1010 } |
986 SetResult(Value::CreateBooleanValue(true)); | 1011 SetResult(Value::CreateBooleanValue(true)); |
987 AsyncWorkCompleted(); | 1012 AsyncWorkCompleted(); |
988 } | 1013 } |
989 | 1014 |
990 void UsbResetDeviceFunction::OnError() { | 1015 void UsbResetDeviceFunction::OnError() { |
991 RemoveUsbDeviceResource(parameters_->device.handle); | 1016 RemoveUsbDeviceResource(parameters_->device.handle); |
992 SetError(kErrorResetDevice); | 1017 SetError(kErrorResetDevice); |
993 SetResult(Value::CreateBooleanValue(false)); | 1018 SetResult(Value::CreateBooleanValue(false)); |
994 AsyncWorkCompleted(); | 1019 AsyncWorkCompleted(); |
995 } | 1020 } |
996 | 1021 |
997 } // namespace extensions | 1022 } // namespace extensions |
OLD | NEW |