blob: 93a59d1f70f9ed52020648f64f2c1f89d49b2a00 [file] [log] [blame]
Avi Drissmand6cdf9b2022-09-15 19:52:531// Copyright 2017 The Chromium Authors
Yuwei Huang29849a42017-11-10 06:18:022// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "remoting/client/jni/jni_oauth_token_getter.h"
6
7#include "base/android/jni_android.h"
8#include "base/android/jni_string.h"
9#include "base/android/scoped_java_ref.h"
Mohamed Heikal58800442019-06-22 00:19:4810#include "remoting/android/jni_headers/JniOAuthTokenGetter_jni.h"
Yuwei Huang29849a42017-11-10 06:18:0211
12using base::android::ConvertJavaStringToUTF8;
13using base::android::JavaParamRef;
14
15namespace remoting {
16
Daniel Bratell7aacf952017-11-21 17:51:2517static void JNI_JniOAuthTokenGetter_ResolveOAuthTokenCallback(
18 JNIEnv* env,
Daniel Bratell7aacf952017-11-21 17:51:2519 jlong callback_ptr,
20 jint jni_status,
21 const JavaParamRef<jstring>& user_email,
22 const JavaParamRef<jstring>& token) {
Yuwei Huang29849a42017-11-10 06:18:0223 auto* callback =
24 reinterpret_cast<OAuthTokenGetter::TokenCallback*>(callback_ptr);
25 OAuthTokenGetter::Status status;
26 switch (static_cast<JniOAuthTokenGetter::JniStatus>(jni_status)) {
27 case JniOAuthTokenGetter::JNI_STATUS_SUCCESS:
28 status = OAuthTokenGetter::SUCCESS;
29 break;
30 case JniOAuthTokenGetter::JNI_STATUS_NETWORK_ERROR:
31 status = OAuthTokenGetter::NETWORK_ERROR;
32 break;
33 case JniOAuthTokenGetter::JNI_STATUS_AUTH_ERROR:
34 status = OAuthTokenGetter::AUTH_ERROR;
35 break;
36 default:
37 NOTREACHED();
38 return;
39 }
Yuwei Huang4e77a442019-02-20 23:08:1440
41 std::string utf8_user_email =
42 user_email.is_null() ? "" : ConvertJavaStringToUTF8(user_email);
43 std::string utf8_token =
44 token.is_null() ? "" : ConvertJavaStringToUTF8(token);
45 std::move(*callback).Run(status, utf8_user_email, utf8_token);
Yuwei Huang29849a42017-11-10 06:18:0246 delete callback;
47}
48
Jeremy Roman877cf8b42019-08-14 20:18:2849JniOAuthTokenGetter::JniOAuthTokenGetter() {
Yuwei Huang29849a42017-11-10 06:18:0250 DETACH_FROM_THREAD(thread_checker_);
Yuwei Huang50afc832018-03-21 22:00:2651 weak_ptr_ = weak_factory_.GetWeakPtr();
Yuwei Huang29849a42017-11-10 06:18:0252}
53
54JniOAuthTokenGetter::~JniOAuthTokenGetter() {
55 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
56}
57
Yuwei Huang4e77a442019-02-20 23:08:1458void JniOAuthTokenGetter::CallWithToken(TokenCallback on_access_token) {
Yuwei Huang29849a42017-11-10 06:18:0259 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
60 JNIEnv* env = base::android::AttachCurrentThread();
Yuwei Huang4e77a442019-02-20 23:08:1461 TokenCallback* callback = new TokenCallback(std::move(on_access_token));
62 Java_JniOAuthTokenGetter_fetchAuthToken(env,
63 reinterpret_cast<intptr_t>(callback));
Yuwei Huang29849a42017-11-10 06:18:0264}
65
66void JniOAuthTokenGetter::InvalidateCache() {
67 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
68 JNIEnv* env = base::android::AttachCurrentThread();
69 Java_JniOAuthTokenGetter_invalidateCache(env);
70}
71
Yuwei Huang50afc832018-03-21 22:00:2672base::WeakPtr<JniOAuthTokenGetter> JniOAuthTokenGetter::GetWeakPtr() {
73 return weak_ptr_;
74}
75
Yuwei Huang29849a42017-11-10 06:18:0276} // namespace remoting