1 // Copyright 2016 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_ANDROID_UNGUESSABLE_TOKEN_ANDROID_H_ 6 #define BASE_ANDROID_UNGUESSABLE_TOKEN_ANDROID_H_ 7 8 #include "base/base_export.h" 9 #include "base/unguessable_token.h" 10 #include "third_party/jni_zero/jni_zero.h" 11 12 namespace base { 13 namespace android { 14 15 class BASE_EXPORT UnguessableTokenAndroid { 16 public: 17 // Create a Java UnguessableToken with the same value as |token|. 18 static jni_zero::ScopedJavaLocalRef<jobject> Create( 19 JNIEnv* env, 20 const base::UnguessableToken& token); 21 22 // Create a native UnguessableToken from Java UnguessableToken |token|. 23 static base::UnguessableToken FromJavaUnguessableToken( 24 JNIEnv* env, 25 const jni_zero::JavaRef<jobject>& token); 26 27 // Parcel UnguessableToken |token| and unparcel it, and return the result. 28 // While this method is intended for facilitating unit tests, it results only 29 // in a clone of |token|. 30 static jni_zero::ScopedJavaLocalRef<jobject> ParcelAndUnparcelForTesting( 31 JNIEnv* env, 32 const jni_zero::JavaRef<jobject>& token); 33 34 UnguessableTokenAndroid() = delete; 35 UnguessableTokenAndroid(const UnguessableTokenAndroid&) = delete; 36 UnguessableTokenAndroid& operator=(const UnguessableTokenAndroid&) = delete; 37 }; 38 39 } // namespace android 40 } // namespace base 41 42 namespace jni_zero { 43 template <> 44 inline base::UnguessableToken FromJniType<base::UnguessableToken>( 45 JNIEnv* env, 46 const JavaRef<jobject>& j_object) { 47 return base::android::UnguessableTokenAndroid::FromJavaUnguessableToken( 48 env, j_object); 49 } 50 51 template <> 52 inline ScopedJavaLocalRef<jobject> ToJniType<base::UnguessableToken>( 53 JNIEnv* env, 54 const base::UnguessableToken& token) { 55 return base::android::UnguessableTokenAndroid::Create(env, token); 56 } 57 } // namespace jni_zero 58 59 #endif // BASE_ANDROID_UNGUESSABLE_TOKEN_ANDROID_H_ 60