Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Side by Side Diff: third_party/WebKit/Source/modules/webusb/USBDevice.cpp

Issue 2821723002: Move classes in the device.usb Mojo namespace to device.mojom (Closed)
Patch Set: mcasas@ nits Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "modules/webusb/USBDevice.h" 5 #include "modules/webusb/USBDevice.h"
6 6
7 #include "bindings/core/v8/ScriptPromise.h" 7 #include "bindings/core/v8/ScriptPromise.h"
8 #include "bindings/core/v8/ScriptPromiseResolver.h" 8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "bindings/core/v8/ToV8ForCore.h" 9 #include "bindings/core/v8/ToV8ForCore.h"
10 #include "core/dom/DOMArrayBuffer.h" 10 #include "core/dom/DOMArrayBuffer.h"
11 #include "core/dom/DOMArrayBufferView.h" 11 #include "core/dom/DOMArrayBufferView.h"
12 #include "core/dom/DOMException.h" 12 #include "core/dom/DOMException.h"
13 #include "core/dom/ExceptionCode.h" 13 #include "core/dom/ExceptionCode.h"
14 #include "modules/webusb/USBConfiguration.h" 14 #include "modules/webusb/USBConfiguration.h"
15 #include "modules/webusb/USBControlTransferParameters.h" 15 #include "modules/webusb/USBControlTransferParameters.h"
16 #include "modules/webusb/USBInTransferResult.h" 16 #include "modules/webusb/USBInTransferResult.h"
17 #include "modules/webusb/USBIsochronousInTransferResult.h" 17 #include "modules/webusb/USBIsochronousInTransferResult.h"
18 #include "modules/webusb/USBIsochronousOutTransferResult.h" 18 #include "modules/webusb/USBIsochronousOutTransferResult.h"
19 #include "modules/webusb/USBOutTransferResult.h" 19 #include "modules/webusb/USBOutTransferResult.h"
20 #include "platform/mojo/MojoHelper.h" 20 #include "platform/mojo/MojoHelper.h"
21 #include "platform/wtf/Assertions.h" 21 #include "platform/wtf/Assertions.h"
22 #include "public/platform/Platform.h" 22 #include "public/platform/Platform.h"
23 23
24 namespace usb = device::usb::blink; 24 using device::mojom::blink::UsbControlTransferParamsPtr;
25 using device::mojom::blink::UsbControlTransferType;
26 using device::mojom::blink::UsbControlTransferRecipient;
27 using device::mojom::blink::UsbDeviceInfoPtr;
28 using device::mojom::blink::UsbDevicePtr;
29 using device::mojom::blink::UsbIsochronousPacketPtr;
30 using device::mojom::blink::UsbOpenDeviceError;
31 using device::mojom::blink::UsbTransferDirection;
32 using device::mojom::blink::UsbTransferStatus;
25 33
26 namespace blink { 34 namespace blink {
27 35
28 namespace { 36 namespace {
29 37
30 const char kDeviceStateChangeInProgress[] = 38 const char kDeviceStateChangeInProgress[] =
31 "An operation that changes the device state is in progress."; 39 "An operation that changes the device state is in progress.";
32 const char kDeviceUnavailable[] = "Device unavailable."; 40 const char kDeviceUnavailable[] = "Device unavailable.";
33 const char kInterfaceNotFound[] = 41 const char kInterfaceNotFound[] =
34 "The interface number provided is not supported by the device in its " 42 "The interface number provided is not supported by the device in its "
35 "current configuration."; 43 "current configuration.";
36 const char kInterfaceStateChangeInProgress[] = 44 const char kInterfaceStateChangeInProgress[] =
37 "An operation that changes interface state is in progress."; 45 "An operation that changes interface state is in progress.";
38 const char kOpenRequired[] = "The device must be opened first."; 46 const char kOpenRequired[] = "The device must be opened first.";
39 47
40 DOMException* ConvertFatalTransferStatus(const usb::TransferStatus& status) { 48 DOMException* ConvertFatalTransferStatus(const UsbTransferStatus& status) {
41 switch (status) { 49 switch (status) {
42 case usb::TransferStatus::TRANSFER_ERROR: 50 case UsbTransferStatus::TRANSFER_ERROR:
43 return DOMException::Create(kNetworkError, 51 return DOMException::Create(kNetworkError,
44 "A transfer error has occured."); 52 "A transfer error has occured.");
45 case usb::TransferStatus::PERMISSION_DENIED: 53 case UsbTransferStatus::PERMISSION_DENIED:
46 return DOMException::Create(kSecurityError, 54 return DOMException::Create(kSecurityError,
47 "The transfer was not allowed."); 55 "The transfer was not allowed.");
48 case usb::TransferStatus::TIMEOUT: 56 case UsbTransferStatus::TIMEOUT:
49 return DOMException::Create(kTimeoutError, "The transfer timed out."); 57 return DOMException::Create(kTimeoutError, "The transfer timed out.");
50 case usb::TransferStatus::CANCELLED: 58 case UsbTransferStatus::CANCELLED:
51 return DOMException::Create(kAbortError, "The transfer was cancelled."); 59 return DOMException::Create(kAbortError, "The transfer was cancelled.");
52 case usb::TransferStatus::DISCONNECT: 60 case UsbTransferStatus::DISCONNECT:
53 return DOMException::Create(kNotFoundError, kDeviceUnavailable); 61 return DOMException::Create(kNotFoundError, kDeviceUnavailable);
54 case usb::TransferStatus::COMPLETED: 62 case UsbTransferStatus::COMPLETED:
55 case usb::TransferStatus::STALLED: 63 case UsbTransferStatus::STALLED:
56 case usb::TransferStatus::BABBLE: 64 case UsbTransferStatus::BABBLE:
57 case usb::TransferStatus::SHORT_PACKET: 65 case UsbTransferStatus::SHORT_PACKET:
58 return nullptr; 66 return nullptr;
59 default: 67 default:
60 ASSERT_NOT_REACHED(); 68 ASSERT_NOT_REACHED();
61 return nullptr; 69 return nullptr;
62 } 70 }
63 } 71 }
64 72
65 String ConvertTransferStatus(const usb::TransferStatus& status) { 73 String ConvertTransferStatus(const UsbTransferStatus& status) {
66 switch (status) { 74 switch (status) {
67 case usb::TransferStatus::COMPLETED: 75 case UsbTransferStatus::COMPLETED:
68 case usb::TransferStatus::SHORT_PACKET: 76 case UsbTransferStatus::SHORT_PACKET:
69 return "ok"; 77 return "ok";
70 case usb::TransferStatus::STALLED: 78 case UsbTransferStatus::STALLED:
71 return "stall"; 79 return "stall";
72 case usb::TransferStatus::BABBLE: 80 case UsbTransferStatus::BABBLE:
73 return "babble"; 81 return "babble";
74 default: 82 default:
75 ASSERT_NOT_REACHED(); 83 ASSERT_NOT_REACHED();
76 return ""; 84 return "";
77 } 85 }
78 } 86 }
79 87
80 Vector<uint8_t> ConvertBufferSource( 88 Vector<uint8_t> ConvertBufferSource(
81 const ArrayBufferOrArrayBufferView& buffer) { 89 const ArrayBufferOrArrayBufferView& buffer) {
82 ASSERT(!buffer.isNull()); 90 ASSERT(!buffer.isNull());
83 Vector<uint8_t> vector; 91 Vector<uint8_t> vector;
84 if (buffer.isArrayBuffer()) 92 if (buffer.isArrayBuffer())
85 vector.Append(static_cast<uint8_t*>(buffer.getAsArrayBuffer()->Data()), 93 vector.Append(static_cast<uint8_t*>(buffer.getAsArrayBuffer()->Data()),
86 buffer.getAsArrayBuffer()->ByteLength()); 94 buffer.getAsArrayBuffer()->ByteLength());
87 else 95 else
88 vector.Append(static_cast<uint8_t*>( 96 vector.Append(static_cast<uint8_t*>(
89 buffer.getAsArrayBufferView().View()->BaseAddress()), 97 buffer.getAsArrayBufferView().View()->BaseAddress()),
90 buffer.getAsArrayBufferView().View()->byteLength()); 98 buffer.getAsArrayBufferView().View()->byteLength());
91 return vector; 99 return vector;
92 } 100 }
93 101
94 } // namespace 102 } // namespace
95 103
96 USBDevice::USBDevice(usb::DeviceInfoPtr device_info, 104 USBDevice::USBDevice(UsbDeviceInfoPtr device_info,
97 usb::DevicePtr device, 105 UsbDevicePtr device,
98 ExecutionContext* context) 106 ExecutionContext* context)
99 : ContextLifecycleObserver(context), 107 : ContextLifecycleObserver(context),
100 device_info_(std::move(device_info)), 108 device_info_(std::move(device_info)),
101 device_(std::move(device)), 109 device_(std::move(device)),
102 opened_(false), 110 opened_(false),
103 device_state_change_in_progress_(false), 111 device_state_change_in_progress_(false),
104 configuration_index_(-1) { 112 configuration_index_(-1) {
105 if (device_) { 113 if (device_) {
106 device_.set_connection_error_handler(ConvertToBaseCallback( 114 device_.set_connection_error_handler(ConvertToBaseCallback(
107 WTF::Bind(&USBDevice::OnConnectionError, WrapWeakPersistent(this)))); 115 WTF::Bind(&USBDevice::OnConnectionError, WrapWeakPersistent(this))));
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 } 581 }
574 582
575 bool USBDevice::AnyInterfaceChangeInProgress() const { 583 bool USBDevice::AnyInterfaceChangeInProgress() const {
576 for (size_t i = 0; i < interface_state_change_in_progress_.size(); ++i) { 584 for (size_t i = 0; i < interface_state_change_in_progress_.size(); ++i) {
577 if (interface_state_change_in_progress_.QuickGet(i)) 585 if (interface_state_change_in_progress_.QuickGet(i))
578 return true; 586 return true;
579 } 587 }
580 return false; 588 return false;
581 } 589 }
582 590
583 usb::ControlTransferParamsPtr USBDevice::ConvertControlTransferParameters( 591 UsbControlTransferParamsPtr USBDevice::ConvertControlTransferParameters(
584 const USBControlTransferParameters& parameters, 592 const USBControlTransferParameters& parameters,
585 ScriptPromiseResolver* resolver) const { 593 ScriptPromiseResolver* resolver) const {
586 auto mojo_parameters = usb::ControlTransferParams::New(); 594 auto mojo_parameters = device::mojom::blink::UsbControlTransferParams::New();
587 595
588 if (parameters.requestType() == "standard") { 596 if (parameters.requestType() == "standard") {
589 mojo_parameters->type = usb::ControlTransferType::STANDARD; 597 mojo_parameters->type = UsbControlTransferType::STANDARD;
590 } else if (parameters.requestType() == "class") { 598 } else if (parameters.requestType() == "class") {
591 mojo_parameters->type = usb::ControlTransferType::CLASS; 599 mojo_parameters->type = UsbControlTransferType::CLASS;
592 } else if (parameters.requestType() == "vendor") { 600 } else if (parameters.requestType() == "vendor") {
593 mojo_parameters->type = usb::ControlTransferType::VENDOR; 601 mojo_parameters->type = UsbControlTransferType::VENDOR;
594 } else { 602 } else {
595 resolver->Reject(DOMException::Create( 603 resolver->Reject(DOMException::Create(
596 kTypeMismatchError, 604 kTypeMismatchError,
597 "The control transfer requestType parameter is invalid.")); 605 "The control transfer requestType parameter is invalid."));
598 return nullptr; 606 return nullptr;
599 } 607 }
600 608
601 if (parameters.recipient() == "device") { 609 if (parameters.recipient() == "device") {
602 mojo_parameters->recipient = usb::ControlTransferRecipient::DEVICE; 610 mojo_parameters->recipient = UsbControlTransferRecipient::DEVICE;
603 } else if (parameters.recipient() == "interface") { 611 } else if (parameters.recipient() == "interface") {
604 size_t interface_number = parameters.index() & 0xff; 612 size_t interface_number = parameters.index() & 0xff;
605 if (!EnsureInterfaceClaimed(interface_number, resolver)) 613 if (!EnsureInterfaceClaimed(interface_number, resolver))
606 return nullptr; 614 return nullptr;
607 mojo_parameters->recipient = usb::ControlTransferRecipient::INTERFACE; 615 mojo_parameters->recipient = UsbControlTransferRecipient::INTERFACE;
608 } else if (parameters.recipient() == "endpoint") { 616 } else if (parameters.recipient() == "endpoint") {
609 bool in_transfer = parameters.index() & 0x80; 617 bool in_transfer = parameters.index() & 0x80;
610 size_t endpoint_number = parameters.index() & 0x0f; 618 size_t endpoint_number = parameters.index() & 0x0f;
611 if (!EnsureEndpointAvailable(in_transfer, endpoint_number, resolver)) 619 if (!EnsureEndpointAvailable(in_transfer, endpoint_number, resolver))
612 return nullptr; 620 return nullptr;
613 mojo_parameters->recipient = usb::ControlTransferRecipient::ENDPOINT; 621 mojo_parameters->recipient = UsbControlTransferRecipient::ENDPOINT;
614 } else if (parameters.recipient() == "other") { 622 } else if (parameters.recipient() == "other") {
615 mojo_parameters->recipient = usb::ControlTransferRecipient::OTHER; 623 mojo_parameters->recipient = UsbControlTransferRecipient::OTHER;
616 } else { 624 } else {
617 resolver->Reject(DOMException::Create( 625 resolver->Reject(DOMException::Create(
618 kTypeMismatchError, 626 kTypeMismatchError,
619 "The control transfer recipient parameter is invalid.")); 627 "The control transfer recipient parameter is invalid."));
620 return nullptr; 628 return nullptr;
621 } 629 }
622 630
623 mojo_parameters->request = parameters.request(); 631 mojo_parameters->request = parameters.request();
624 mojo_parameters->value = parameters.value(); 632 mojo_parameters->value = parameters.value();
625 mojo_parameters->index = parameters.index(); 633 mojo_parameters->index = parameters.index();
626 return mojo_parameters; 634 return mojo_parameters;
627 } 635 }
628 636
629 void USBDevice::SetEndpointsForInterface(size_t interface_index, bool set) { 637 void USBDevice::SetEndpointsForInterface(size_t interface_index, bool set) {
630 const auto& configuration = *Info().configurations[configuration_index_]; 638 const auto& configuration = *Info().configurations[configuration_index_];
631 const auto& interface = *configuration.interfaces[interface_index]; 639 const auto& interface = *configuration.interfaces[interface_index];
632 const auto& alternate = 640 const auto& alternate =
633 *interface.alternates[selected_alternates_[interface_index]]; 641 *interface.alternates[selected_alternates_[interface_index]];
634 for (const auto& endpoint : alternate.endpoints) { 642 for (const auto& endpoint : alternate.endpoints) {
635 uint8_t endpoint_number = endpoint->endpoint_number; 643 uint8_t endpoint_number = endpoint->endpoint_number;
636 if (endpoint_number == 0 || endpoint_number >= 16) 644 if (endpoint_number == 0 || endpoint_number >= 16)
637 continue; // Ignore endpoints with invalid indices. 645 continue; // Ignore endpoints with invalid indices.
638 auto& bit_vector = endpoint->direction == usb::TransferDirection::INBOUND 646 auto& bit_vector = endpoint->direction == UsbTransferDirection::INBOUND
639 ? in_endpoints_ 647 ? in_endpoints_
640 : out_endpoints_; 648 : out_endpoints_;
641 if (set) 649 if (set)
642 bit_vector.Set(endpoint_number - 1); 650 bit_vector.Set(endpoint_number - 1);
643 else 651 else
644 bit_vector.Clear(endpoint_number - 1); 652 bit_vector.Clear(endpoint_number - 1);
645 } 653 }
646 } 654 }
647 655
648 void USBDevice::AsyncOpen(ScriptPromiseResolver* resolver, 656 void USBDevice::AsyncOpen(ScriptPromiseResolver* resolver,
649 usb::OpenDeviceError error) { 657 UsbOpenDeviceError error) {
650 if (!MarkRequestComplete(resolver)) 658 if (!MarkRequestComplete(resolver))
651 return; 659 return;
652 660
653 switch (error) { 661 switch (error) {
654 case usb::OpenDeviceError::ALREADY_OPEN: 662 case UsbOpenDeviceError::ALREADY_OPEN:
655 ASSERT_NOT_REACHED(); 663 ASSERT_NOT_REACHED();
656 // fall through 664 // fall through
657 case usb::OpenDeviceError::OK: 665 case UsbOpenDeviceError::OK:
658 OnDeviceOpenedOrClosed(true /* opened */); 666 OnDeviceOpenedOrClosed(true /* opened */);
659 resolver->Resolve(); 667 resolver->Resolve();
660 return; 668 return;
661 case usb::OpenDeviceError::ACCESS_DENIED: 669 case UsbOpenDeviceError::ACCESS_DENIED:
662 OnDeviceOpenedOrClosed(false /* not opened */); 670 OnDeviceOpenedOrClosed(false /* not opened */);
663 resolver->Reject(DOMException::Create(kSecurityError, "Access denied.")); 671 resolver->Reject(DOMException::Create(kSecurityError, "Access denied."));
664 return; 672 return;
665 } 673 }
666 } 674 }
667 675
668 void USBDevice::AsyncClose(ScriptPromiseResolver* resolver) { 676 void USBDevice::AsyncClose(ScriptPromiseResolver* resolver) {
669 if (!MarkRequestComplete(resolver)) 677 if (!MarkRequestComplete(resolver))
670 return; 678 return;
671 679
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 interface_state_change_in_progress_.Clear(interface_index); 777 interface_state_change_in_progress_.Clear(interface_index);
770 778
771 if (success) 779 if (success)
772 resolver->Resolve(); 780 resolver->Resolve();
773 else 781 else
774 resolver->Reject( 782 resolver->Reject(
775 DOMException::Create(kNetworkError, "Unable to set device interface.")); 783 DOMException::Create(kNetworkError, "Unable to set device interface."));
776 } 784 }
777 785
778 void USBDevice::AsyncControlTransferIn(ScriptPromiseResolver* resolver, 786 void USBDevice::AsyncControlTransferIn(ScriptPromiseResolver* resolver,
779 usb::TransferStatus status, 787 UsbTransferStatus status,
780 const Optional<Vector<uint8_t>>& data) { 788 const Optional<Vector<uint8_t>>& data) {
781 if (!MarkRequestComplete(resolver)) 789 if (!MarkRequestComplete(resolver))
782 return; 790 return;
783 791
784 DOMException* error = ConvertFatalTransferStatus(status); 792 DOMException* error = ConvertFatalTransferStatus(status);
785 if (error) { 793 if (error) {
786 resolver->Reject(error); 794 resolver->Reject(error);
787 } else { 795 } else {
788 resolver->Resolve( 796 resolver->Resolve(
789 USBInTransferResult::Create(ConvertTransferStatus(status), data)); 797 USBInTransferResult::Create(ConvertTransferStatus(status), data));
790 } 798 }
791 } 799 }
792 800
793 void USBDevice::AsyncControlTransferOut(unsigned transfer_length, 801 void USBDevice::AsyncControlTransferOut(unsigned transfer_length,
794 ScriptPromiseResolver* resolver, 802 ScriptPromiseResolver* resolver,
795 usb::TransferStatus status) { 803 UsbTransferStatus status) {
796 if (!MarkRequestComplete(resolver)) 804 if (!MarkRequestComplete(resolver))
797 return; 805 return;
798 806
799 DOMException* error = ConvertFatalTransferStatus(status); 807 DOMException* error = ConvertFatalTransferStatus(status);
800 if (error) { 808 if (error) {
801 resolver->Reject(error); 809 resolver->Reject(error);
802 } else { 810 } else {
803 resolver->Resolve(USBOutTransferResult::Create( 811 resolver->Resolve(USBOutTransferResult::Create(
804 ConvertTransferStatus(status), transfer_length)); 812 ConvertTransferStatus(status), transfer_length));
805 } 813 }
806 } 814 }
807 815
808 void USBDevice::AsyncClearHalt(ScriptPromiseResolver* resolver, bool success) { 816 void USBDevice::AsyncClearHalt(ScriptPromiseResolver* resolver, bool success) {
809 if (!MarkRequestComplete(resolver)) 817 if (!MarkRequestComplete(resolver))
810 return; 818 return;
811 819
812 if (success) 820 if (success)
813 resolver->Resolve(); 821 resolver->Resolve();
814 else 822 else
815 resolver->Reject( 823 resolver->Reject(
816 DOMException::Create(kNetworkError, "Unable to clear endpoint.")); 824 DOMException::Create(kNetworkError, "Unable to clear endpoint."));
817 } 825 }
818 826
819 void USBDevice::AsyncTransferIn(ScriptPromiseResolver* resolver, 827 void USBDevice::AsyncTransferIn(ScriptPromiseResolver* resolver,
820 usb::TransferStatus status, 828 UsbTransferStatus status,
821 const Optional<Vector<uint8_t>>& data) { 829 const Optional<Vector<uint8_t>>& data) {
822 if (!MarkRequestComplete(resolver)) 830 if (!MarkRequestComplete(resolver))
823 return; 831 return;
824 832
825 DOMException* error = ConvertFatalTransferStatus(status); 833 DOMException* error = ConvertFatalTransferStatus(status);
826 if (error) { 834 if (error) {
827 resolver->Reject(error); 835 resolver->Reject(error);
828 } else { 836 } else {
829 resolver->Resolve( 837 resolver->Resolve(
830 USBInTransferResult::Create(ConvertTransferStatus(status), data)); 838 USBInTransferResult::Create(ConvertTransferStatus(status), data));
831 } 839 }
832 } 840 }
833 841
834 void USBDevice::AsyncTransferOut(unsigned transfer_length, 842 void USBDevice::AsyncTransferOut(unsigned transfer_length,
835 ScriptPromiseResolver* resolver, 843 ScriptPromiseResolver* resolver,
836 usb::TransferStatus status) { 844 UsbTransferStatus status) {
837 if (!MarkRequestComplete(resolver)) 845 if (!MarkRequestComplete(resolver))
838 return; 846 return;
839 847
840 DOMException* error = ConvertFatalTransferStatus(status); 848 DOMException* error = ConvertFatalTransferStatus(status);
841 if (error) { 849 if (error) {
842 resolver->Reject(error); 850 resolver->Reject(error);
843 } else { 851 } else {
844 resolver->Resolve(USBOutTransferResult::Create( 852 resolver->Resolve(USBOutTransferResult::Create(
845 ConvertTransferStatus(status), transfer_length)); 853 ConvertTransferStatus(status), transfer_length));
846 } 854 }
847 } 855 }
848 856
849 void USBDevice::AsyncIsochronousTransferIn( 857 void USBDevice::AsyncIsochronousTransferIn(
850 ScriptPromiseResolver* resolver, 858 ScriptPromiseResolver* resolver,
851 const Optional<Vector<uint8_t>>& data, 859 const Optional<Vector<uint8_t>>& data,
852 Vector<usb::IsochronousPacketPtr> mojo_packets) { 860 Vector<UsbIsochronousPacketPtr> mojo_packets) {
853 if (!MarkRequestComplete(resolver)) 861 if (!MarkRequestComplete(resolver))
854 return; 862 return;
855 863
856 DOMArrayBuffer* buffer = 864 DOMArrayBuffer* buffer =
857 data ? DOMArrayBuffer::Create(data->Data(), data->size()) : nullptr; 865 data ? DOMArrayBuffer::Create(data->Data(), data->size()) : nullptr;
858 HeapVector<Member<USBIsochronousInTransferPacket>> packets; 866 HeapVector<Member<USBIsochronousInTransferPacket>> packets;
859 packets.ReserveCapacity(mojo_packets.size()); 867 packets.ReserveCapacity(mojo_packets.size());
860 size_t byte_offset = 0; 868 size_t byte_offset = 0;
861 for (const auto& packet : mojo_packets) { 869 for (const auto& packet : mojo_packets) {
862 DOMException* error = ConvertFatalTransferStatus(packet->status); 870 DOMException* error = ConvertFatalTransferStatus(packet->status);
863 if (error) { 871 if (error) {
864 resolver->Reject(error); 872 resolver->Reject(error);
865 return; 873 return;
866 } 874 }
867 DOMDataView* data_view = nullptr; 875 DOMDataView* data_view = nullptr;
868 if (buffer) { 876 if (buffer) {
869 data_view = 877 data_view =
870 DOMDataView::Create(buffer, byte_offset, packet->transferred_length); 878 DOMDataView::Create(buffer, byte_offset, packet->transferred_length);
871 } 879 }
872 packets.push_back(USBIsochronousInTransferPacket::Create( 880 packets.push_back(USBIsochronousInTransferPacket::Create(
873 ConvertTransferStatus(packet->status), data_view)); 881 ConvertTransferStatus(packet->status), data_view));
874 byte_offset += packet->length; 882 byte_offset += packet->length;
875 } 883 }
876 resolver->Resolve(USBIsochronousInTransferResult::Create(buffer, packets)); 884 resolver->Resolve(USBIsochronousInTransferResult::Create(buffer, packets));
877 } 885 }
878 886
879 void USBDevice::AsyncIsochronousTransferOut( 887 void USBDevice::AsyncIsochronousTransferOut(
880 ScriptPromiseResolver* resolver, 888 ScriptPromiseResolver* resolver,
881 Vector<usb::IsochronousPacketPtr> mojo_packets) { 889 Vector<UsbIsochronousPacketPtr> mojo_packets) {
882 if (!MarkRequestComplete(resolver)) 890 if (!MarkRequestComplete(resolver))
883 return; 891 return;
884 892
885 HeapVector<Member<USBIsochronousOutTransferPacket>> packets; 893 HeapVector<Member<USBIsochronousOutTransferPacket>> packets;
886 packets.ReserveCapacity(mojo_packets.size()); 894 packets.ReserveCapacity(mojo_packets.size());
887 for (const auto& packet : mojo_packets) { 895 for (const auto& packet : mojo_packets) {
888 DOMException* error = ConvertFatalTransferStatus(packet->status); 896 DOMException* error = ConvertFatalTransferStatus(packet->status);
889 if (error) { 897 if (error) {
890 resolver->Reject(error); 898 resolver->Reject(error);
891 return; 899 return;
(...skipping 25 matching lines...) Expand all
917 925
918 bool USBDevice::MarkRequestComplete(ScriptPromiseResolver* resolver) { 926 bool USBDevice::MarkRequestComplete(ScriptPromiseResolver* resolver) {
919 auto request_entry = device_requests_.Find(resolver); 927 auto request_entry = device_requests_.Find(resolver);
920 if (request_entry == device_requests_.end()) 928 if (request_entry == device_requests_.end())
921 return false; 929 return false;
922 device_requests_.erase(request_entry); 930 device_requests_.erase(request_entry);
923 return true; 931 return true;
924 } 932 }
925 933
926 } // namespace blink 934 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/webusb/USBDevice.h ('k') | third_party/WebKit/Source/modules/webusb/USBEndpoint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698