Android: Delete legacy jni_generator support for non-proxy natives

We have long switched to "proxy natives", and places that use raw
"native" jni calls do so because they do not want to use jni_generator.

This also removes @JniIgnoreNatives annotation, since it existed only to
allow files to opt-out of JNI generation.

Bug: 1407278
Change-Id: Id3bc14ebcf326e9cb9dc864fae2512d472a25c67
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4167416
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Owners-Override: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Sam Maier <smaier@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1093873}
diff --git a/android_webview/glue/BUILD.gn b/android_webview/glue/BUILD.gn
index 8d42762..cd83246 100644
--- a/android_webview/glue/BUILD.gn
+++ b/android_webview/glue/BUILD.gn
@@ -16,7 +16,6 @@
     "//android_webview/support_library/boundary_interfaces:boundary_interface_java",
     "//android_webview/support_library/callback:callback_java",
     "//base:base_java",
-    "//base:jni_java",
     "//build/android:build_java",
     "//components/content_capture/android:java",
     "//components/embedder_support/android:application_java",
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/DrawFunctor.java b/android_webview/glue/java/src/com/android/webview/chromium/DrawFunctor.java
index 937e875..65a7c55 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/DrawFunctor.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/DrawFunctor.java
@@ -4,9 +4,6 @@
 
 package com.android.webview.chromium;
 
-import org.chromium.base.annotations.JniIgnoreNatives;
-
-@JniIgnoreNatives
 class DrawFunctor {
     public static long getDrawFnFunctionTable() {
         return nativeGetFunctionTable();
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/DrawGLFunctor.java b/android_webview/glue/java/src/com/android/webview/chromium/DrawGLFunctor.java
index 01086cb6..48a6013 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/DrawGLFunctor.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/DrawGLFunctor.java
@@ -9,7 +9,6 @@
 import android.webkit.WebViewDelegate;
 
 import org.chromium.android_webview.AwContents;
-import org.chromium.base.annotations.JniIgnoreNatives;
 
 /**
  * Simple Java abstraction and wrapper for the native DrawGLFunctor flow.
@@ -17,7 +16,6 @@
  * and then drawn and detached from the view tree any number of times (using requestDrawGL and
  * detach respectively).
  */
-@JniIgnoreNatives
 class DrawGLFunctor implements AwContents.NativeDrawGLFunctor {
     private static final String TAG = DrawGLFunctor.class.getSimpleName();
 
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/GraphicsUtils.java b/android_webview/glue/java/src/com/android/webview/chromium/GraphicsUtils.java
index 7de7c96..4e20b5e7 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/GraphicsUtils.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/GraphicsUtils.java
@@ -4,9 +4,6 @@
 
 package com.android.webview.chromium;
 
-import org.chromium.base.annotations.JniIgnoreNatives;
-
-@JniIgnoreNatives
 abstract class GraphicsUtils {
     public static long getDrawSWFunctionTable() {
         return nativeGetDrawSWFunctionTable();
diff --git a/base/BUILD.gn b/base/BUILD.gn
index f95986f..585ed71b 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -4120,7 +4120,6 @@
       "android/java/src/org/chromium/base/annotations/CalledByNativeUnchecked.java",
       "android/java/src/org/chromium/base/annotations/JNIAdditionalImport.java",
       "android/java/src/org/chromium/base/annotations/JNINamespace.java",
-      "android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java",
       "android/java/src/org/chromium/base/annotations/NativeClassQualifiedName.java",
       "android/java/src/org/chromium/base/annotations/NativeMethods.java",
     ]
diff --git a/base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java b/base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java
deleted file mode 100644
index 0105791a..0000000
--- a/base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-package org.chromium.base.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Causes generate_jni_registration() to skip native methods in a file.
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.SOURCE)
-public @interface JniIgnoreNatives {}
diff --git a/base/android/java/src/org/chromium/base/library_loader/Linker.java b/base/android/java/src/org/chromium/base/library_loader/Linker.java
index b503843..1d23797 100644
--- a/base/android/java/src/org/chromium/base/library_loader/Linker.java
+++ b/base/android/java/src/org/chromium/base/library_loader/Linker.java
@@ -18,7 +18,6 @@
 import org.chromium.base.StreamUtil;
 import org.chromium.base.TimeUtils.UptimeMillisTimer;
 import org.chromium.base.annotations.AccessedByNative;
-import org.chromium.base.annotations.JniIgnoreNatives;
 import org.chromium.base.metrics.RecordHistogram;
 
 import java.io.BufferedReader;
@@ -73,7 +72,6 @@
  *   available to then send the Bundle to Linkers in other processes, consumed
  *   by takeSharedRelrosFromBundle().
  */
-@JniIgnoreNatives
 class Linker {
     private static final String TAG = "Linker";
 
@@ -769,7 +767,6 @@
      * well.
      */
     @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
-    @JniIgnoreNatives
     static class LibInfo implements Parcelable {
         private static final String EXTRA_LINKER_LIB_INFO = "libinfo";
 
@@ -870,8 +867,7 @@
         public int mRelroFd = -1; // shared RELRO file descriptor, or -1
     }
 
-    // Intentionally omitting @NativeMethods because generation of the stubs it requires (as
-    // GEN_JNI.java) is disabled by the @JniIgnoreNatives.
+    // Intentionally omitting @NativeMethods because this class does manual JNI.
     interface Natives {
         /**
          * Reserves a memory region (=mapping) of sufficient size to hold the loaded library before
diff --git a/base/android/java/src/org/chromium/base/library_loader/LinkerJni.java b/base/android/java/src/org/chromium/base/library_loader/LinkerJni.java
index c614e2e..80abb1e 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LinkerJni.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LinkerJni.java
@@ -7,7 +7,6 @@
 import androidx.annotation.NonNull;
 
 import org.chromium.base.annotations.CalledByNative;
-import org.chromium.base.annotations.JniIgnoreNatives;
 
 /**
  * Mockable stub for all native methods in Linker.
@@ -15,11 +14,9 @@
  * This functionality is usually generated from @NativeMethods, which cannot be used for the
  * auxiliary native library used by classes in Linker and other classes in this package.
  *
- * Generation of JNI stubs for classes in this package is omitted via @JniIgnoreNatives because
- * otherwise the generated native parts would have been linked into lib{,mono}chrome.so instead of
- * lib$LINKER_JNI_LIBRARY.so, where they are needed.
+ * Does not use jni_generator because otherwise the generated native parts would have been
+ * linked into libmonochrome.so instead of lib$LINKER_JNI_LIBRARY.so, where they are needed.
  */
-@JniIgnoreNatives
 class LinkerJni implements Linker.Natives {
     @Override
     public void findMemoryRegionAtRandomAddress(@NonNull Linker.LibInfo libInfo) {
diff --git a/base/android/jni_generator/README.md b/base/android/jni_generator/README.md
index b254205d..1cdd208 100644
--- a/base/android/jni_generator/README.md
+++ b/base/android/jni_generator/README.md
@@ -128,13 +128,6 @@
 void MyClass::NonStatic(JNIEnv* env) { ... }
 ```
 
-**Using the 'native' keyword**
-
-- The binding generator also looks for `native` JNI method declarations and
-  generates stubs for them. This used to be the norm, but is now obsolete.
-- If you have native methods that you don't want stubs generated for, you should
-  add @JniIgnoreNatives to the class.
-
 #### Testing Mockable Natives
 
 1. Add the `JniMocker` rule to your test.
diff --git a/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden b/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden
index 5398b32..a2570c71 100644
--- a/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden
+++ b/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden
@@ -35,18 +35,6 @@
 
 
 // Step 3: Method stubs.
-static void JNI_Foo_DoSomething(JNIEnv* env, const base::android::JavaParamRef<jobject>& callback1,
-    const base::android::JavaParamRef<jobject>& callback2);
-
-JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeDoSomething(
-    JNIEnv* env,
-    jclass jcaller,
-    jobject callback1,
-    jobject callback2) {
-  return JNI_Foo_DoSomething(env, base::android::JavaParamRef<jobject>(env, callback1),
-      base::android::JavaParamRef<jobject>(env, callback2));
-}
-
 
 static std::atomic<jmethodID> g_org_chromium_foo_Foo_calledByNative(nullptr);
 static void Java_Foo_calledByNative(JNIEnv* env, const base::android::JavaRef<jobject>& callback1,
diff --git a/base/android/jni_generator/golden/testProxyNativesWithNatives.golden b/base/android/jni_generator/golden/testProxyNativesWithNatives.golden
index 2c4cecd4..a15fd819 100644
--- a/base/android/jni_generator/golden/testProxyNativesWithNatives.golden
+++ b/base/android/jni_generator/golden/testProxyNativesWithNatives.golden
@@ -18,42 +18,11 @@
 
 // Step 1: Forward declarations.
 
-JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_foo_Foo[];
-const char kClassPath_org_chromium_foo_Foo[] = "org/chromium/foo/Foo";
-// Leaking this jclass as we cannot use LazyInstance from some threads.
-JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_foo_Foo_clazz(nullptr);
-#ifndef org_chromium_foo_Foo_clazz_defined
-#define org_chromium_foo_Foo_clazz_defined
-inline jclass org_chromium_foo_Foo_clazz(JNIEnv* env) {
-  return base::android::LazyGetClass(env, kClassPath_org_chromium_foo_Foo,
-      &g_org_chromium_foo_Foo_clazz);
-}
-#endif
-
 
 // Step 2: Constants (optional).
 
 
 // Step 3: Method stubs.
-JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeInstanceMethod(
-    JNIEnv* env,
-    jobject jcaller,
-    jlong nativeInstance) {
-  TRACE_EVENT0("jni", "Instance::InstanceMethod");
-  Instance* native = reinterpret_cast<Instance*>(nativeInstance);
-  CHECK_NATIVE_PTR(env, jcaller, native, "InstanceMethod");
-  return native->InstanceMethod(env, base::android::JavaParamRef<jobject>(env, jcaller));
-}
-
-static void JNI_Foo_StaticMethod(JNIEnv* env);
-
-JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeStaticMethod(
-    JNIEnv* env,
-    jclass jcaller) {
-  TRACE_EVENT0("jni", "JNI_Foo_StaticMethod");
-  return JNI_Foo_StaticMethod(env);
-}
-
 static void JNI_Foo_Foo(JNIEnv* env);
 
 JNI_GENERATOR_EXPORT void Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1foo(
diff --git a/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden b/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden
index bfcd98c..82cc21e 100644
--- a/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden
+++ b/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden
@@ -35,15 +35,6 @@
 
 
 // Step 3: Method stubs.
-static void JNI_Foo_DoSomething(JNIEnv* env, const base::android::JavaParamRef<jobject>& callback);
-
-JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeDoSomething(
-    JNIEnv* env,
-    jclass jcaller,
-    jobject callback) {
-  return JNI_Foo_DoSomething(env, base::android::JavaParamRef<jobject>(env, callback));
-}
-
 
 static std::atomic<jmethodID> g_org_chromium_foo_Foo_calledByNative(nullptr);
 static void Java_Foo_calledByNative(JNIEnv* env, const base::android::JavaRef<jobject>& callback) {
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index 6f3e4321..e765c9a 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -39,25 +39,14 @@
     r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"',
     re.DOTALL | re.MULTILINE)
 
-_EXTRACT_NATIVES_REGEX = re.compile(
-    r'(@NativeClassQualifiedName'
-    r'\(\"(?P<native_class_name>.*?)\"\)\s+)?'
-    r'(@NativeCall(\(\"(?P<java_class_name>.*?)\"\))\s+)?'
-    r'(?P<qualifiers>\w+\s\w+|\w+|\s+)\s*native '
-    r'(?P<return_type>\S*) '
-    r'(?P<name>native\w+)\((?P<params>.*?)\);')
-
 _MAIN_DEX_REGEX = re.compile(r'^\s*(?:@(?:\w+\.)*\w+\s+)*@MainDex\b',
                              re.MULTILINE)
 
-# Matches on method declarations unlike _EXTRACT_NATIVES_REGEX
-# doesn't require name to be prefixed with native, and does not
-# require a native qualifier.
 _EXTRACT_METHODS_REGEX = re.compile(
     r'(@NativeClassQualifiedName'
     r'\(\"(?P<native_class_name>.*?)\"\)\s*)?'
     r'(?P<qualifiers>'
-    r'((public|private|static|final|abstract|protected|native)\s*)*)\s+'
+    r'((public|private|static|final|abstract|protected)\s*)*)\s+'
     r'(?P<return_type>\S*)\s+'
     r'(?P<name>\w+)\((?P<params>.*?)\);',
     flags=re.DOTALL)
@@ -534,23 +523,6 @@
   return class_path + '/' + class_name
 
 
-def ExtractNatives(contents, ptr_type):
-  """Returns a list of dict containing information about a native method."""
-  contents = contents.replace('\n', '')
-  natives = []
-  for match in _EXTRACT_NATIVES_REGEX.finditer(contents):
-    native = NativeMethod(
-        static='static' in match.group('qualifiers'),
-        java_class_name=match.group('java_class_name'),
-        native_class_name=match.group('native_class_name'),
-        return_type=match.group('return_type'),
-        name=match.group('name').replace('native', ''),
-        params=JniParams.Parse(match.group('params')),
-        ptr_type=ptr_type)
-    natives += [native]
-  return natives
-
-
 def IsMainDexJavaClass(contents):
   """Returns True if the class or any of its methods are annotated as @MainDex.
 
@@ -971,13 +943,10 @@
     self.jni_params = JniParams(fully_qualified_class)
     self.jni_params.ExtractImportsAndInnerClasses(contents)
     jni_namespace = ExtractJNINamespace(contents) or options.namespace
-    natives = ExtractNatives(contents, options.ptr_type)
     called_by_natives = ExtractCalledByNatives(self.jni_params, contents,
                                                options.always_mangle)
-
-    natives += ProxyHelpers.ExtractStaticProxyNatives(fully_qualified_class,
-                                                      contents,
-                                                      options.ptr_type)
+    natives = ProxyHelpers.ExtractStaticProxyNatives(fully_qualified_class,
+                                                     contents, options.ptr_type)
 
     if len(natives) == 0 and len(called_by_natives) == 0:
       raise SyntaxError(
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py
index 60fd271..382cfafd 100755
--- a/base/android/jni_generator/jni_generator_tests.py
+++ b/base/android/jni_generator/jni_generator_tests.py
@@ -219,280 +219,6 @@
 
     self.assertRaises(AssertionError, willRaise)
 
-  def testNatives(self):
-    test_data = """"
-    import android.graphics.Bitmap;
-    import android.view.View;
-
-    interface OnFrameAvailableListener {}
-    private native int nativeInit();
-    private native void nativeDestroy(int nativeChromeBrowserProvider);
-    private native long nativeAddBookmark(
-            int nativeChromeBrowserProvider,
-            String url, String title, boolean isFolder, long parentId);
-    private static native String nativeGetDomainAndRegistry(String url);
-    private static native void nativeCreateHistoricalTabFromState(
-            byte[] state, int tab_index);
-    private native byte[] nativeGetStateAsByteArray(View view);
-    private static native String[] nativeGetAutofillProfileGUIDs();
-    private native void nativeSetRecognitionResults(
-            int sessionId, String[] results);
-    private native long nativeAddBookmarkFromAPI(
-            int nativeChromeBrowserProvider,
-            String url, Long created, Boolean isBookmark,
-            Long date, byte[] favicon, String title, Integer visits);
-    native int nativeFindAll(String find);
-    private static native OnFrameAvailableListener nativeGetInnerClass();
-    private native Bitmap nativeQueryBitmap(
-            int nativeChromeBrowserProvider,
-            String[] projection, String selection,
-            String[] selectionArgs, String sortOrder);
-    private native void nativeGotOrientation(
-            int nativeDataFetcherImplAndroid,
-            double alpha, double beta, double gamma);
-    private static native Throwable nativeMessWithJavaException(Throwable e);
-    """
-    jni_params = jni_generator.JniParams(
-        'org/chromium/example/jni_generator/SampleForTests')
-    jni_params.ExtractImportsAndInnerClasses(test_data)
-    natives = jni_generator.ExtractNatives(test_data, 'int')
-    golden_natives = [
-        NativeMethod(
-            return_type='int',
-            static=False,
-            name='Init',
-            params=[],
-            java_class_name=None),
-        NativeMethod(
-            return_type='void',
-            static=False,
-            name='Destroy',
-            params=[Param(datatype='int', name='nativeChromeBrowserProvider')],
-            java_class_name=None),
-        NativeMethod(
-            return_type='long',
-            static=False,
-            name='AddBookmark',
-            params=[
-                Param(datatype='int', name='nativeChromeBrowserProvider'),
-                Param(datatype='String', name='url'),
-                Param(datatype='String', name='title'),
-                Param(datatype='boolean', name='isFolder'),
-                Param(datatype='long', name='parentId')
-            ],
-            java_class_name=None),
-        NativeMethod(
-            return_type='String',
-            static=True,
-            name='GetDomainAndRegistry',
-            params=[Param(datatype='String', name='url')],
-            java_class_name=None),
-        NativeMethod(
-            return_type='void',
-            static=True,
-            name='CreateHistoricalTabFromState',
-            params=[
-                Param(datatype='byte[]', name='state'),
-                Param(datatype='int', name='tab_index')
-            ],
-            java_class_name=None),
-        NativeMethod(
-            return_type='byte[]',
-            static=False,
-            name='GetStateAsByteArray',
-            params=[Param(datatype='View', name='view')],
-            java_class_name=None),
-        NativeMethod(
-            return_type='String[]',
-            static=True,
-            name='GetAutofillProfileGUIDs',
-            params=[],
-            java_class_name=None),
-        NativeMethod(
-            return_type='void',
-            static=False,
-            name='SetRecognitionResults',
-            params=[
-                Param(datatype='int', name='sessionId'),
-                Param(datatype='String[]', name='results')
-            ],
-            java_class_name=None),
-        NativeMethod(
-            return_type='long',
-            static=False,
-            name='AddBookmarkFromAPI',
-            params=[
-                Param(datatype='int', name='nativeChromeBrowserProvider'),
-                Param(datatype='String', name='url'),
-                Param(datatype='Long', name='created'),
-                Param(datatype='Boolean', name='isBookmark'),
-                Param(datatype='Long', name='date'),
-                Param(datatype='byte[]', name='favicon'),
-                Param(datatype='String', name='title'),
-                Param(datatype='Integer', name='visits')
-            ],
-            java_class_name=None),
-        NativeMethod(
-            return_type='int',
-            static=False,
-            name='FindAll',
-            params=[Param(datatype='String', name='find')],
-            java_class_name=None),
-        NativeMethod(
-            return_type='OnFrameAvailableListener',
-            static=True,
-            name='GetInnerClass',
-            params=[],
-            java_class_name=None),
-        NativeMethod(
-            return_type='Bitmap',
-            static=False,
-            name='QueryBitmap',
-            params=[
-                Param(datatype='int', name='nativeChromeBrowserProvider'),
-                Param(datatype='String[]', name='projection'),
-                Param(datatype='String', name='selection'),
-                Param(datatype='String[]', name='selectionArgs'),
-                Param(datatype='String', name='sortOrder'),
-            ],
-            java_class_name=None),
-        NativeMethod(
-            return_type='void',
-            static=False,
-            name='GotOrientation',
-            params=[
-                Param(datatype='int', name='nativeDataFetcherImplAndroid'),
-                Param(datatype='double', name='alpha'),
-                Param(datatype='double', name='beta'),
-                Param(datatype='double', name='gamma'),
-            ],
-            java_class_name=None),
-        NativeMethod(
-            return_type='Throwable',
-            static=True,
-            name='MessWithJavaException',
-            params=[Param(datatype='Throwable', name='e')],
-            java_class_name=None)
-    ]
-    self.AssertListEquals(golden_natives, natives)
-    h1 = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
-                                              natives, [], [], jni_params,
-                                              TestOptions())
-    self.AssertGoldenTextEquals(h1.GetContent())
-    h2 = jni_registration_generator.HeaderGenerator('',
-                                                    '',
-                                                    'org/chromium/TestJni',
-                                                    natives,
-                                                    jni_params,
-                                                    True,
-                                                    use_proxy_hash=False)
-    content = TestGenerator._MergeRegistrationForTests([h2.Generate()])
-
-    self.AssertGoldenTextEquals(jni_registration_generator.CreateFromDict(
-        content, use_hash=False, manual_jni_registration=True),
-                                suffix='Registrations')
-
-  def testInnerClassNatives(self):
-    test_data = """
-    class MyInnerClass {
-      @NativeCall("MyInnerClass")
-      private native int nativeInit();
-    }
-    """
-    natives = jni_generator.ExtractNatives(test_data, 'int')
-    golden_natives = [
-        NativeMethod(
-            return_type='int',
-            static=False,
-            name='Init',
-            params=[],
-            java_class_name='MyInnerClass')
-    ]
-    self.AssertListEquals(golden_natives, natives)
-    jni_params = jni_generator.JniParams('')
-    h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
-                                             natives, [], [], jni_params,
-                                             TestOptions())
-    self.AssertGoldenTextEquals(h.GetContent())
-
-  def testInnerClassNativesMultiple(self):
-    test_data = """
-    class MyInnerClass {
-      @NativeCall("MyInnerClass")
-      private native int nativeInit();
-    }
-    class MyOtherInnerClass {
-      @NativeCall("MyOtherInnerClass")
-      private native int nativeInit();
-    }
-    """
-    natives = jni_generator.ExtractNatives(test_data, 'int')
-    golden_natives = [
-        NativeMethod(
-            return_type='int',
-            static=False,
-            name='Init',
-            params=[],
-            java_class_name='MyInnerClass'),
-        NativeMethod(
-            return_type='int',
-            static=False,
-            name='Init',
-            params=[],
-            java_class_name='MyOtherInnerClass')
-    ]
-    self.AssertListEquals(golden_natives, natives)
-    jni_params = jni_generator.JniParams('')
-    h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
-                                             natives, [], [], jni_params,
-                                             TestOptions())
-    self.AssertGoldenTextEquals(h.GetContent())
-
-  def testInnerClassNativesBothInnerAndOuter(self):
-    test_data = """
-    class MyOuterClass {
-      private native int nativeInit();
-      class MyOtherInnerClass {
-        @NativeCall("MyOtherInnerClass")
-        private native int nativeInit();
-      }
-    }
-    """
-    natives = jni_generator.ExtractNatives(test_data, 'int')
-    golden_natives = [
-        NativeMethod(
-            return_type='int',
-            static=False,
-            name='Init',
-            params=[],
-            java_class_name=None),
-        NativeMethod(
-            return_type='int',
-            static=False,
-            name='Init',
-            params=[],
-            java_class_name='MyOtherInnerClass')
-    ]
-    self.AssertListEquals(golden_natives, natives)
-    jni_params = jni_generator.JniParams('')
-    h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
-                                             natives, [], [], jni_params,
-                                             TestOptions())
-    self.AssertGoldenTextEquals(h.GetContent())
-
-    h2 = jni_registration_generator.HeaderGenerator('',
-                                                    '',
-                                                    'org/chromium/TestJni',
-                                                    natives,
-                                                    jni_params,
-                                                    True,
-                                                    use_proxy_hash=False)
-    content = TestGenerator._MergeRegistrationForTests([h2.Generate()])
-
-    self.AssertGoldenTextEquals(jni_registration_generator.CreateFromDict(
-        content, use_hash=False, manual_jni_registration=True),
-                                suffix='Registrations')
-
   def testCalledByNatives(self):
     test_data = """"
     import android.graphics.Bitmap;
@@ -993,27 +719,6 @@
       self.assertEqual(86, len(jni_from_javap.called_by_natives))
       self.AssertGoldenTextEquals(jni_from_javap.GetContent())
 
-  def testREForNatives(self):
-    # We should not match "native SyncSetupFlow" inside the comment.
-    test_data = """
-    /**
-     * Invoked when the setup process is complete so we can disconnect from the
-     * private native void nativeSyncSetupFlowHandler();.
-     */
-    public void destroy() {
-        Log.v(TAG, "Destroying native SyncSetupFlow");
-        if (mNativeSyncSetupFlow != 0) {
-            nativeSyncSetupEnded(mNativeSyncSetupFlow);
-            mNativeSyncSetupFlow = 0;
-        }
-    }
-    private native void nativeSyncSetupEnded(
-        int nativeAndroidSyncSetupFlowHandler);
-    """
-    jni_from_java = jni_generator.JNIFromJavaSource(
-        test_data, 'foo/bar', TestOptions())
-    self.AssertGoldenTextEquals(jni_from_java.GetContent())
-
   def testRaisesOnNonJNIMethod(self):
     test_data = """
     class MyInnerClass {
@@ -1031,24 +736,6 @@
     self.AssertGoldenTextEquals(
         generated_text, golden_file='SampleForTests_jni.golden')
 
-  def testNoWrappingPreprocessorLines(self):
-    test_data = """
-    package com.google.lookhowextremelylongiam.snarf.icankeepthisupallday;
-
-    class ReallyLongClassNamesAreAllTheRage {
-        private static native int nativeTest();
-    }
-    """
-    jni_from_java = jni_generator.JNIFromJavaSource(
-        test_data, ('com/google/lookhowextremelylongiam/snarf/'
-                    'icankeepthisupallday/ReallyLongClassNamesAreAllTheRage'),
-        TestOptions())
-    jni_lines = jni_from_java.GetContent().split('\n')
-    line = next(
-        line for line in jni_lines if line.lstrip().startswith('#ifndef'))
-    self.assertTrue(
-        len(line) > 80, ('Expected #ifndef line to be > 80 chars: ', line))
-
   def testImports(self):
     import_header = """
 // Copyright 2012 The Chromium Authors
@@ -1109,29 +796,6 @@
     self.AssertTextEquals('[Ljava/nio/ByteBuffer;',
                           jni_params.JavaToJni('java/nio/ByteBuffer[]'))
 
-  def testNativesLong(self):
-    test_options = TestOptions()
-    test_options.ptr_type = 'long'
-    test_data = """"
-    private native void nativeDestroy(long nativeChromeBrowserProvider);
-    """
-    jni_params = jni_generator.JniParams('')
-    jni_params.ExtractImportsAndInnerClasses(test_data)
-    natives = jni_generator.ExtractNatives(test_data, test_options.ptr_type)
-    golden_natives = [
-        NativeMethod(
-            return_type='void',
-            static=False,
-            name='Destroy',
-            params=[Param(datatype='long', name='nativeChromeBrowserProvider')],
-            java_class_name=None,
-            ptr_type=test_options.ptr_type),
-    ]
-    self.AssertListEquals(golden_natives, natives)
-    h = jni_generator.InlHeaderFileGenerator(
-        '', 'org/chromium/TestJni', natives, [], [], jni_params, test_options)
-    self.AssertGoldenTextEquals(h.GetContent())
-
   def testMainDexAnnotation(self):
     mainDexEntries = [
         '@MainDex public class Test {',
@@ -1176,43 +840,6 @@
     for entry in noMainDexEntries:
       self.assertEqual(False, IsMainDexJavaClass(entry))
 
-  def testNativeExportsOnlyOption(self):
-    test_data = """
-    package org.chromium.example.jni_generator;
-
-    /** The pointer to the native Test. */
-    long nativeTest;
-
-    class Test {
-        private static native int nativeStaticMethod(long nativeTest, int arg1);
-        private native int nativeMethod(long nativeTest, int arg1);
-        @CalledByNative
-        private void testMethodWithParam(int iParam);
-        @CalledByNative
-        private String testMethodWithParamAndReturn(int iParam);
-        @CalledByNative
-        private static int testStaticMethodWithParam(int iParam);
-        @CalledByNative
-        private static double testMethodWithNoParam();
-        @CalledByNative
-        private static String testStaticMethodWithNoParam();
-
-        class MyInnerClass {
-          @NativeCall("MyInnerClass")
-          private native int nativeInit();
-        }
-        class MyOtherInnerClass {
-          @NativeCall("MyOtherInnerClass")
-          private native int nativeInit();
-        }
-    }
-    """
-    options = TestOptions()
-    options.native_exports_optional = False
-    jni_from_java = jni_generator.JNIFromJavaSource(
-        test_data, 'org/chromium/example/jni_generator/SampleForTests', options)
-    self.AssertGoldenTextEquals(jni_from_java.GetContent())
-
   def testOuterInnerRaises(self):
     test_data = """
     package org.chromium.media;
@@ -1240,9 +867,6 @@
     @CalledByNative
     private static void calledByNative(Bar.Callback callback) {
     }
-
-    private static native void nativeDoSomething(Bar.Callback callback);
-    }
     """
     jni_from_java = jni_generator.JNIFromJavaSource(test_data,
                                                     'org/chromium/foo/Foo',
@@ -1260,9 +884,6 @@
     private static void calledByNative(Bar1.Callback callback1,
                                        Bar2.Callback callback2) {
     }
-
-    private static native void nativeDoSomething(Bar1.Callback callback1,
-                                                 Bar2.Callback callback2);
     }
     """
     jni_from_java = jni_generator.JNIFromJavaSource(test_data,
@@ -1270,50 +891,6 @@
                                                     TestOptions())
     self.AssertGoldenTextEquals(jni_from_java.GetContent())
 
-  def testTracing(self):
-    test_data = """
-    package org.chromium.foo;
-
-    @JNINamespace("org::chromium_foo")
-    class Foo {
-
-    @CalledByNative
-    Foo();
-
-    @CalledByNative
-    void callbackFromNative();
-
-    native void nativeInstanceMethod(long nativeInstance);
-
-    static native void nativeStaticMethod();
-    }
-    """
-    options_with_tracing = TestOptions()
-    options_with_tracing.enable_tracing = True
-    jni_from_java = jni_generator.JNIFromJavaSource(
-        test_data, 'org/chromium/foo/Foo', options_with_tracing)
-    self.AssertGoldenTextEquals(jni_from_java.GetContent())
-
-  def testStaticBindingCaller(self):
-    test_data = """
-    package org.chromium.foo;
-
-    class Bar {
-      static native void nativeShouldBindCaller(Object caller);
-      static native void nativeShouldBindCaller(Object caller, int a);
-      static native void nativeFoo(long nativeNativeObject, Bar caller);
-      static native void nativeFoo(long nativeNativeObject, Bar caller, int a);
-      native void nativeCallNativeMethod(long nativePtr);
-      @NativeClassQualifiedName("Foo::Bar")
-      native void nativeCallWithQualifiedObject(long nativePtr);
-    }
-    """
-
-    jni_from_java = jni_generator.JNIFromJavaSource(test_data,
-                                                    'org/chromium/foo/Foo',
-                                                    TestOptions())
-    self.AssertGoldenTextEquals(jni_from_java.GetContent())
-
   def testSplitNameExample(self):
     opts = TestOptions()
     opts.split_name = "sample"
diff --git a/base/android/jni_generator/jni_registration_generator.py b/base/android/jni_generator/jni_registration_generator.py
index f939014..639bd88 100755
--- a/base/android/jni_generator/jni_registration_generator.py
+++ b/base/android/jni_generator/jni_registration_generator.py
@@ -146,9 +146,8 @@
 
   fully_qualified_class = jni_generator.ExtractFullyQualifiedJavaClassName(
       path, contents)
-  natives = jni_generator.ExtractNatives(contents, 'long')
 
-  natives += jni_generator.ProxyHelpers.ExtractStaticProxyNatives(
+  natives = jni_generator.ProxyHelpers.ExtractStaticProxyNatives(
       fully_qualified_class=fully_qualified_class,
       contents=contents,
       ptr_type='long',