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 #include "base/android/unguessable_token_android.h"
6
7 #include "build/robolectric_buildflags.h"
8
9 // Must come after all headers that specialize FromJniType() / ToJniType().
10 #if BUILDFLAG(IS_ROBOLECTRIC)
11 #include "base/base_robolectric_jni/TokenBase_jni.h" // nogncheck
12 #include "base/base_robolectric_jni/UnguessableToken_jni.h" // nogncheck
13 #else
14 #include "base/base_jni/TokenBase_jni.h"
15 #include "base/base_jni/UnguessableToken_jni.h"
16 #endif
17
18
19 namespace base {
20 namespace android {
21
Create(JNIEnv * env,const base::UnguessableToken & token)22 jni_zero::ScopedJavaLocalRef<jobject> UnguessableTokenAndroid::Create(
23 JNIEnv* env,
24 const base::UnguessableToken& token) {
25 const uint64_t high = token.GetHighForSerialization();
26 const uint64_t low = token.GetLowForSerialization();
27 DCHECK(high);
28 DCHECK(low);
29 return Java_UnguessableToken_Constructor(env, static_cast<jlong>(high),
30 static_cast<jlong>(low));
31 }
32
FromJavaUnguessableToken(JNIEnv * env,const jni_zero::JavaRef<jobject> & token)33 base::UnguessableToken UnguessableTokenAndroid::FromJavaUnguessableToken(
34 JNIEnv* env,
35 const jni_zero::JavaRef<jobject>& token) {
36 const uint64_t high =
37 static_cast<uint64_t>(Java_TokenBase_getHighForSerialization(env, token));
38 const uint64_t low =
39 static_cast<uint64_t>(Java_TokenBase_getLowForSerialization(env, token));
40 DCHECK(high);
41 DCHECK(low);
42 return base::UnguessableToken::Deserialize(high, low).value();
43 }
44
45 jni_zero::ScopedJavaLocalRef<jobject>
ParcelAndUnparcelForTesting(JNIEnv * env,const jni_zero::JavaRef<jobject> & token)46 UnguessableTokenAndroid::ParcelAndUnparcelForTesting(
47 JNIEnv* env,
48 const jni_zero::JavaRef<jobject>& token) {
49 return Java_UnguessableToken_parcelAndUnparcelForTesting(env, token);
50 }
51
52 } // namespace android
53 } // namespace base
54