OLD | NEW |
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 "device/usb/usb_device_android.h" | 5 #include "device/usb/usb_device_android.h" |
6 | 6 |
7 #include "base/android/build_info.h" | 7 #include "base/android/build_info.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 | 23 |
24 namespace device { | 24 namespace device { |
25 | 25 |
26 // static | 26 // static |
27 scoped_refptr<UsbDeviceAndroid> UsbDeviceAndroid::Create( | 27 scoped_refptr<UsbDeviceAndroid> UsbDeviceAndroid::Create( |
28 JNIEnv* env, | 28 JNIEnv* env, |
29 base::WeakPtr<UsbServiceAndroid> service, | 29 base::WeakPtr<UsbServiceAndroid> service, |
30 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner, | 30 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner, |
31 const JavaRef<jobject>& usb_device) { | 31 const JavaRef<jobject>& usb_device) { |
32 ScopedJavaLocalRef<jobject> wrapper = | 32 ScopedJavaLocalRef<jobject> wrapper = |
33 Java_ChromeUsbDevice_create(env, usb_device.obj()); | 33 Java_ChromeUsbDevice_create(env, usb_device); |
34 uint16_t device_version = 0; | 34 uint16_t device_version = 0; |
35 if (base::android::BuildInfo::GetInstance()->sdk_int() >= 23) | 35 if (base::android::BuildInfo::GetInstance()->sdk_int() >= 23) |
36 device_version = Java_ChromeUsbDevice_getDeviceVersion(env, wrapper.obj()); | 36 device_version = Java_ChromeUsbDevice_getDeviceVersion(env, wrapper); |
37 base::string16 manufacturer_string, product_string, serial_number; | 37 base::string16 manufacturer_string, product_string, serial_number; |
38 if (base::android::BuildInfo::GetInstance()->sdk_int() >= 21) { | 38 if (base::android::BuildInfo::GetInstance()->sdk_int() >= 21) { |
39 manufacturer_string = ConvertJavaStringToUTF16( | 39 manufacturer_string = ConvertJavaStringToUTF16( |
40 env, Java_ChromeUsbDevice_getManufacturerName(env, wrapper.obj())); | 40 env, Java_ChromeUsbDevice_getManufacturerName(env, wrapper)); |
41 product_string = ConvertJavaStringToUTF16( | 41 product_string = ConvertJavaStringToUTF16( |
42 env, Java_ChromeUsbDevice_getProductName(env, wrapper.obj())); | 42 env, Java_ChromeUsbDevice_getProductName(env, wrapper)); |
43 serial_number = ConvertJavaStringToUTF16( | 43 serial_number = ConvertJavaStringToUTF16( |
44 env, Java_ChromeUsbDevice_getSerialNumber(env, wrapper.obj())); | 44 env, Java_ChromeUsbDevice_getSerialNumber(env, wrapper)); |
45 } | 45 } |
46 return make_scoped_refptr(new UsbDeviceAndroid( | 46 return make_scoped_refptr(new UsbDeviceAndroid( |
47 env, service, | 47 env, service, |
48 0x0200, // USB protocol version, not provided by the Android API. | 48 0x0200, // USB protocol version, not provided by the Android API. |
49 Java_ChromeUsbDevice_getDeviceClass(env, wrapper.obj()), | 49 Java_ChromeUsbDevice_getDeviceClass(env, wrapper), |
50 Java_ChromeUsbDevice_getDeviceSubclass(env, wrapper.obj()), | 50 Java_ChromeUsbDevice_getDeviceSubclass(env, wrapper), |
51 Java_ChromeUsbDevice_getDeviceProtocol(env, wrapper.obj()), | 51 Java_ChromeUsbDevice_getDeviceProtocol(env, wrapper), |
52 Java_ChromeUsbDevice_getVendorId(env, wrapper.obj()), | 52 Java_ChromeUsbDevice_getVendorId(env, wrapper), |
53 Java_ChromeUsbDevice_getProductId(env, wrapper.obj()), device_version, | 53 Java_ChromeUsbDevice_getProductId(env, wrapper), device_version, |
54 manufacturer_string, product_string, serial_number, blocking_task_runner, | 54 manufacturer_string, product_string, serial_number, blocking_task_runner, |
55 wrapper)); | 55 wrapper)); |
56 } | 56 } |
57 | 57 |
58 void UsbDeviceAndroid::RequestPermission(const ResultCallback& callback) { | 58 void UsbDeviceAndroid::RequestPermission(const ResultCallback& callback) { |
59 if (!permission_granted_ && service_) { | 59 if (!permission_granted_ && service_) { |
60 request_permission_callbacks_.push_back(callback); | 60 request_permission_callbacks_.push_back(callback); |
61 service_->RequestDevicePermission(j_object_, device_id_); | 61 service_->RequestDevicePermission(j_object_, device_id_); |
62 } else { | 62 } else { |
63 base::ThreadTaskRunnerHandle::Get()->PostTask( | 63 base::ThreadTaskRunnerHandle::Get()->PostTask( |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 device_class, | 104 device_class, |
105 device_subclass, | 105 device_subclass, |
106 device_protocol, | 106 device_protocol, |
107 vendor_id, | 107 vendor_id, |
108 product_id, | 108 product_id, |
109 device_version, | 109 device_version, |
110 manufacturer_string, | 110 manufacturer_string, |
111 product_string, | 111 product_string, |
112 serial_number), | 112 serial_number), |
113 blocking_task_runner_(blocking_task_runner), | 113 blocking_task_runner_(blocking_task_runner), |
114 device_id_(Java_ChromeUsbDevice_getDeviceId(env, wrapper.obj())), | 114 device_id_(Java_ChromeUsbDevice_getDeviceId(env, wrapper)), |
115 service_(service), | 115 service_(service), |
116 j_object_(wrapper) { | 116 j_object_(wrapper) { |
117 if (base::android::BuildInfo::GetInstance()->sdk_int() >= 21) { | 117 if (base::android::BuildInfo::GetInstance()->sdk_int() >= 21) { |
118 ScopedJavaLocalRef<jobjectArray> configurations = | 118 ScopedJavaLocalRef<jobjectArray> configurations = |
119 Java_ChromeUsbDevice_getConfigurations(env, j_object_.obj()); | 119 Java_ChromeUsbDevice_getConfigurations(env, j_object_); |
120 jsize count = env->GetArrayLength(configurations.obj()); | 120 jsize count = env->GetArrayLength(configurations.obj()); |
121 configurations_.reserve(count); | 121 configurations_.reserve(count); |
122 for (jsize i = 0; i < count; ++i) { | 122 for (jsize i = 0; i < count; ++i) { |
123 ScopedJavaLocalRef<jobject> config( | 123 ScopedJavaLocalRef<jobject> config( |
124 env, env->GetObjectArrayElement(configurations.obj(), i)); | 124 env, env->GetObjectArrayElement(configurations.obj(), i)); |
125 configurations_.push_back(UsbConfigurationAndroid::Convert(env, config)); | 125 configurations_.push_back(UsbConfigurationAndroid::Convert(env, config)); |
126 } | 126 } |
127 } else { | 127 } else { |
128 // Pre-lollipop only the first configuration was supported. Build a basic | 128 // Pre-lollipop only the first configuration was supported. Build a basic |
129 // configuration out of the available interfaces. | 129 // configuration out of the available interfaces. |
130 UsbConfigDescriptor config(1, // Configuration value, reasonable guess. | 130 UsbConfigDescriptor config(1, // Configuration value, reasonable guess. |
131 false, // Self powered, arbitrary default. | 131 false, // Self powered, arbitrary default. |
132 false, // Remote wakeup, rbitrary default. | 132 false, // Remote wakeup, rbitrary default. |
133 0); // Maximum power, aitrary default. | 133 0); // Maximum power, aitrary default. |
134 | 134 |
135 ScopedJavaLocalRef<jobjectArray> interfaces = | 135 ScopedJavaLocalRef<jobjectArray> interfaces = |
136 Java_ChromeUsbDevice_getInterfaces(env, wrapper.obj()); | 136 Java_ChromeUsbDevice_getInterfaces(env, wrapper); |
137 jsize count = env->GetArrayLength(interfaces.obj()); | 137 jsize count = env->GetArrayLength(interfaces.obj()); |
138 config.interfaces.reserve(count); | 138 config.interfaces.reserve(count); |
139 for (jsize i = 0; i < count; ++i) { | 139 for (jsize i = 0; i < count; ++i) { |
140 ScopedJavaLocalRef<jobject> interface( | 140 ScopedJavaLocalRef<jobject> interface( |
141 env, env->GetObjectArrayElement(interfaces.obj(), i)); | 141 env, env->GetObjectArrayElement(interfaces.obj(), i)); |
142 config.interfaces.push_back(UsbInterfaceAndroid::Convert(env, interface)); | 142 config.interfaces.push_back(UsbInterfaceAndroid::Convert(env, interface)); |
143 } | 143 } |
144 configurations_.push_back(config); | 144 configurations_.push_back(config); |
145 } | 145 } |
146 } | 146 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 if (allowed_origins) | 203 if (allowed_origins) |
204 webusb_allowed_origins_ = std::move(allowed_origins); | 204 webusb_allowed_origins_ = std::move(allowed_origins); |
205 if (landing_page.is_valid()) | 205 if (landing_page.is_valid()) |
206 webusb_landing_page_ = landing_page; | 206 webusb_landing_page_ = landing_page; |
207 | 207 |
208 device_handle->Close(); | 208 device_handle->Close(); |
209 CallRequestPermissionCallbacks(true); | 209 CallRequestPermissionCallbacks(true); |
210 } | 210 } |
211 | 211 |
212 } // namespace device | 212 } // namespace device |
OLD | NEW |