• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// 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.
23jclass g_Foo_clazz = NULL;
24#define Foo_clazz(env) g_Foo_clazz
25
26}  // namespace
27
28// Step 2: method stubs.
29
30static void DoSomething(JNIEnv* env, const JavaParamRef<jclass>& jcaller,
31    const JavaParamRef<jobject>& callback);
32
33static void Java_org_chromium_foo_Foo_nativeDoSomething(JNIEnv* env, jclass
34    jcaller,
35    jobject callback) {
36  return DoSomething(env, JavaParamRef<jclass>(env, jcaller),
37      JavaParamRef<jobject>(env, callback));
38}
39
40static base::subtle::AtomicWord g_Foo_calledByNative = 0;
41static void Java_Foo_calledByNative(JNIEnv* env, jobject callback) {
42  /* Must call RegisterNativesImpl()  */
43  CHECK_CLAZZ(env, Foo_clazz(env),
44      Foo_clazz(env));
45  jmethodID method_id =
46      base::android::MethodID::LazyGet<
47      base::android::MethodID::TYPE_STATIC>(
48      env, Foo_clazz(env),
49      "calledByNative",
50
51"("
52"Lorg/chromium/foo/Bar$Callback;"
53")"
54"V",
55      &g_Foo_calledByNative);
56
57     env->CallStaticVoidMethod(Foo_clazz(env),
58          method_id, callback);
59  jni_generator::CheckException(env);
60
61}
62
63// Step 3: RegisterNatives.
64
65static const JNINativeMethod kMethodsFoo[] = {
66    { "nativeDoSomething",
67"("
68"Lorg/chromium/foo/Bar$Callback;"
69")"
70"V", reinterpret_cast<void*>(Java_org_chromium_foo_Foo_nativeDoSomething) },
71};
72
73static bool RegisterNativesImpl(JNIEnv* env) {
74
75  g_Foo_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
76      base::android::GetClass(env, kFooClassPath).obj()));
77
78  const int kMethodsFooSize = arraysize(kMethodsFoo);
79
80  if (env->RegisterNatives(Foo_clazz(env),
81                           kMethodsFoo,
82                           kMethodsFooSize) < 0) {
83    jni_generator::HandleRegistrationError(
84        env, Foo_clazz(env), __FILE__);
85    return false;
86  }
87
88  return true;
89}
90
91#endif  // org_chromium_foo_Foo_JNI
92