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

Side by Side Diff: chrome/browser/extensions/api/usb/usb_device_resource.cc

Issue 10561021: Change the USB extension API to use ArrayBuffers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 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 | Annotate | Revision Log
OLDNEW
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_device_resource.h" 5 #include "chrome/browser/extensions/api/usb/usb_device_resource.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 template<class T> 87 template<class T>
88 static bool GetTransferSize(const T& input, size_t* output) { 88 static bool GetTransferSize(const T& input, size_t* output) {
89 if (input.direction == kDirectionIn) { 89 if (input.direction == kDirectionIn) {
90 const int* length = input.length.get(); 90 const int* length = input.length.get();
91 if (length) { 91 if (length) {
92 *output = *length; 92 *output = *length;
93 return true; 93 return true;
94 } 94 }
95 } else if (input.direction == kDirectionOut) { 95 } else if (input.direction == kDirectionOut) {
96 if (input.data.get()) { 96 if (input.data.get()) {
97 *output = input.data->size(); 97 *output = input.data->GetSize();
98 return true; 98 return true;
99 } 99 }
100 } 100 }
101 return false; 101 return false;
102 } 102 }
103 103
104 template<class T> 104 template<class T>
105 static scoped_refptr<net::IOBuffer> CreateBufferForTransfer(const T& input) { 105 static scoped_refptr<net::IOBuffer> CreateBufferForTransfer(const T& input) {
106 size_t size = 0; 106 size_t size = 0;
107 if (!GetTransferSize(input, &size)) { 107 if (!GetTransferSize(input, &size)) {
108 return NULL; 108 return NULL;
109 } 109 }
110 110
111 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size); 111 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size);
112 if (!input.data.get()) { 112 if (!input.data.get()) {
113 return buffer; 113 return buffer;
114 } 114 }
115 115
116 const vector<int>& input_buffer = *input.data.get(); 116 memcpy(buffer->data(), input.data->GetBuffer(), size);
117 for (size_t i = 0; i < size; ++i) {
118 buffer->data()[i] = input_buffer[i];
119 }
120 117
121 return buffer; 118 return buffer;
122 } 119 }
123 120
124 } // namespace 121 } // namespace
125 122
126 namespace extensions { 123 namespace extensions {
127 124
128 UsbDeviceResource::UsbDeviceResource(APIResourceEventNotifier* notifier, 125 UsbDeviceResource::UsbDeviceResource(APIResourceEventNotifier* notifier,
129 UsbDevice* device) 126 UsbDevice* device)
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 device_->IsochronousTransfer(direction, generic_transfer.endpoint, buffer, 199 device_->IsochronousTransfer(direction, generic_transfer.endpoint, buffer,
203 size, transfer.packets, transfer.packet_length, 0, base::Bind( 200 size, transfer.packets, transfer.packet_length, 0, base::Bind(
204 &UsbDeviceResource::TransferComplete, base::Unretained(this), buffer, 201 &UsbDeviceResource::TransferComplete, base::Unretained(this), buffer,
205 size)); 202 size));
206 } 203 }
207 204
208 void UsbDeviceResource::TransferComplete(net::IOBuffer* buffer, 205 void UsbDeviceResource::TransferComplete(net::IOBuffer* buffer,
209 const size_t length, 206 const size_t length,
210 int success) { 207 int success) {
211 if (buffer) { 208 if (buffer) {
212 base::ListValue *const response_buffer = new base::ListValue(); 209 base::BinaryValue* const response_buffer =
213 for (size_t i = 0; i < length; ++i) { 210 base::BinaryValue::CreateWithCopiedBuffer(buffer->data(), length);
214 const uint8_t value = buffer->data()[i] & 0xFF;
215 response_buffer->Append(base::Value::CreateIntegerValue(value));
216 }
217 event_notifier()->OnTransferComplete(success, response_buffer); 211 event_notifier()->OnTransferComplete(success, response_buffer);
218 } 212 }
219 } 213 }
220 214
221 } // namespace extensions 215 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698