blob: ef618da80a65664eeab11610b99d9f7871d9f472 [file] [log] [blame]
Luis Hector Chavez645501c2016-12-28 10:56:26 -08001// Copyright 2014 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
5// This file is autogenerated by
6// base/android/jni_generator/jni_generator.py
7// For
8// org/chromium/foo/Foo
9
10#ifndef org_chromium_foo_Foo_JNI
11#define org_chromium_foo_Foo_JNI
12
13#include <jni.h>
14
15#include "base/android/jni_generator/jni_generator_helper.h"
16
17#include "base/android/jni_int_wrapper.h"
18
19// Step 1: forward declarations.
20namespace {
21const char kFooClassPath[] = "org/chromium/foo/Foo";
22// Leaking this jclass as we cannot use LazyInstance from some threads.
Jay Civellicfc1eaa2017-08-21 17:18:10 -070023base::subtle::AtomicWord g_Foo_clazz __attribute__((unused)) = 0;
24#define Foo_clazz(env) base::android::LazyGetClass(env, kFooClassPath, &g_Foo_clazz)
Luis Hector Chavez645501c2016-12-28 10:56:26 -080025
26} // namespace
27
28// Step 2: method stubs.
29
Jay Civellicfc1eaa2017-08-21 17:18:10 -070030static void DoSomething(JNIEnv* env, const base::android::JavaParamRef<jclass>&
Luis Hector Chavez21a249e2017-07-26 17:38:05 +000031 jcaller,
Jay Civellicfc1eaa2017-08-21 17:18:10 -070032 const base::android::JavaParamRef<jobject>& callback);
33
34JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeDoSomething(JNIEnv*
35 env, jclass jcaller,
Luis Hector Chavez645501c2016-12-28 10:56:26 -080036 jobject callback) {
Jay Civellicfc1eaa2017-08-21 17:18:10 -070037 return DoSomething(env, base::android::JavaParamRef<jclass>(env, jcaller),
38 base::android::JavaParamRef<jobject>(env, callback));
Luis Hector Chavez645501c2016-12-28 10:56:26 -080039}
40
41static base::subtle::AtomicWord g_Foo_calledByNative = 0;
Jay Civellicfc1eaa2017-08-21 17:18:10 -070042static void Java_Foo_calledByNative(JNIEnv* env, const
43 base::android::JavaRefOrBare<jobject>& callback) {
Luis Hector Chavez645501c2016-12-28 10:56:26 -080044 CHECK_CLAZZ(env, Foo_clazz(env),
45 Foo_clazz(env));
46 jmethodID method_id =
47 base::android::MethodID::LazyGet<
48 base::android::MethodID::TYPE_STATIC>(
49 env, Foo_clazz(env),
50 "calledByNative",
Luis Hector Chavez645501c2016-12-28 10:56:26 -080051"("
52"Lorg/chromium/foo/Bar$Callback;"
53")"
54"V",
55 &g_Foo_calledByNative);
56
57 env->CallStaticVoidMethod(Foo_clazz(env),
Jay Civellicfc1eaa2017-08-21 17:18:10 -070058 method_id, callback.obj());
Luis Hector Chavez645501c2016-12-28 10:56:26 -080059 jni_generator::CheckException(env);
Luis Hector Chavez645501c2016-12-28 10:56:26 -080060}
61
62// Step 3: RegisterNatives.
63
64static const JNINativeMethod kMethodsFoo[] = {
65 { "nativeDoSomething",
66"("
67"Lorg/chromium/foo/Bar$Callback;"
68")"
69"V", reinterpret_cast<void*>(Java_org_chromium_foo_Foo_nativeDoSomething) },
70};
71
72static bool RegisterNativesImpl(JNIEnv* env) {
Jay Civellicfc1eaa2017-08-21 17:18:10 -070073 if (jni_generator::ShouldSkipJniRegistration(false))
74 return true;
Luis Hector Chavez645501c2016-12-28 10:56:26 -080075
76 const int kMethodsFooSize = arraysize(kMethodsFoo);
77
78 if (env->RegisterNatives(Foo_clazz(env),
79 kMethodsFoo,
80 kMethodsFooSize) < 0) {
81 jni_generator::HandleRegistrationError(
82 env, Foo_clazz(env), __FILE__);
83 return false;
84 }
85
86 return true;
87}
88
89#endif // org_chromium_foo_Foo_JNI