jni_oauth_token_getter.cc 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright 2017 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 "remoting/client/jni/jni_oauth_token_getter.h"
  5. #include "base/android/jni_android.h"
  6. #include "base/android/jni_string.h"
  7. #include "base/android/scoped_java_ref.h"
  8. #include "remoting/android/jni_headers/JniOAuthTokenGetter_jni.h"
  9. using base::android::ConvertJavaStringToUTF8;
  10. using base::android::JavaParamRef;
  11. namespace remoting {
  12. static void JNI_JniOAuthTokenGetter_ResolveOAuthTokenCallback(
  13. JNIEnv* env,
  14. jlong callback_ptr,
  15. jint jni_status,
  16. const JavaParamRef<jstring>& user_email,
  17. const JavaParamRef<jstring>& token) {
  18. auto* callback =
  19. reinterpret_cast<OAuthTokenGetter::TokenCallback*>(callback_ptr);
  20. OAuthTokenGetter::Status status;
  21. switch (static_cast<JniOAuthTokenGetter::JniStatus>(jni_status)) {
  22. case JniOAuthTokenGetter::JNI_STATUS_SUCCESS:
  23. status = OAuthTokenGetter::SUCCESS;
  24. break;
  25. case JniOAuthTokenGetter::JNI_STATUS_NETWORK_ERROR:
  26. status = OAuthTokenGetter::NETWORK_ERROR;
  27. break;
  28. case JniOAuthTokenGetter::JNI_STATUS_AUTH_ERROR:
  29. status = OAuthTokenGetter::AUTH_ERROR;
  30. break;
  31. default:
  32. NOTREACHED();
  33. return;
  34. }
  35. std::string utf8_user_email =
  36. user_email.is_null() ? "" : ConvertJavaStringToUTF8(user_email);
  37. std::string utf8_token =
  38. token.is_null() ? "" : ConvertJavaStringToUTF8(token);
  39. std::move(*callback).Run(status, utf8_user_email, utf8_token);
  40. delete callback;
  41. }
  42. JniOAuthTokenGetter::JniOAuthTokenGetter() {
  43. DETACH_FROM_THREAD(thread_checker_);
  44. weak_ptr_ = weak_factory_.GetWeakPtr();
  45. }
  46. JniOAuthTokenGetter::~JniOAuthTokenGetter() {
  47. DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
  48. }
  49. void JniOAuthTokenGetter::CallWithToken(TokenCallback on_access_token) {
  50. DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
  51. JNIEnv* env = base::android::AttachCurrentThread();
  52. TokenCallback* callback = new TokenCallback(std::move(on_access_token));
  53. Java_JniOAuthTokenGetter_fetchAuthToken(env,
  54. reinterpret_cast<intptr_t>(callback));
  55. }
  56. void JniOAuthTokenGetter::InvalidateCache() {
  57. DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
  58. JNIEnv* env = base::android::AttachCurrentThread();
  59. Java_JniOAuthTokenGetter_invalidateCache(env);
  60. }
  61. base::WeakPtr<JniOAuthTokenGetter> JniOAuthTokenGetter::GetWeakPtr() {
  62. return weak_ptr_;
  63. }
  64. } // namespace remoting