usb_device_handle_android.cc 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "services/device/usb/usb_device_handle_android.h"
  5. #include "base/bind.h"
  6. #include "base/location.h"
  7. #include "services/device/usb/jni_headers/ChromeUsbConnection_jni.h"
  8. #include "services/device/usb/usb_device.h"
  9. #include "services/device/usb/usb_service.h"
  10. using base::android::ScopedJavaLocalRef;
  11. namespace device {
  12. // static
  13. scoped_refptr<UsbDeviceHandleAndroid> UsbDeviceHandleAndroid::Create(
  14. JNIEnv* env,
  15. scoped_refptr<UsbDevice> device,
  16. const base::android::JavaRef<jobject>& usb_connection) {
  17. ScopedJavaLocalRef<jobject> wrapper =
  18. Java_ChromeUsbConnection_create(env, usb_connection);
  19. // C++ doesn't own this file descriptor so CloseBlocking() is overridden
  20. // below to release it without closing it.
  21. base::ScopedFD fd(Java_ChromeUsbConnection_getFileDescriptor(env, wrapper));
  22. return base::WrapRefCounted(
  23. new UsbDeviceHandleAndroid(device, std::move(fd), wrapper));
  24. }
  25. UsbDeviceHandleAndroid::UsbDeviceHandleAndroid(
  26. scoped_refptr<UsbDevice> device,
  27. base::ScopedFD fd,
  28. const base::android::JavaRef<jobject>& wrapper)
  29. : UsbDeviceHandleUsbfs(
  30. device,
  31. std::move(fd),
  32. base::ScopedFD(),
  33. "", // Empty string to indicate an invalid client id.
  34. UsbService::CreateBlockingTaskRunner()),
  35. j_object_(wrapper) {}
  36. UsbDeviceHandleAndroid::~UsbDeviceHandleAndroid() {}
  37. void UsbDeviceHandleAndroid::FinishClose() {
  38. ReleaseFileDescriptor(
  39. base::BindOnce(&UsbDeviceHandleAndroid::CloseConnection, this));
  40. }
  41. void UsbDeviceHandleAndroid::CloseConnection() {
  42. JNIEnv* env = base::android::AttachCurrentThread();
  43. Java_ChromeUsbConnection_close(env, j_object_);
  44. j_object_.Reset();
  45. }
  46. } // namespace device