summaryrefslogtreecommitdiffstats
path: root/base/android
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-31 22:58:15 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-31 22:58:15 +0000
commit41082f88209166b2f331b52078bb0230df141f99 (patch)
treef344ef2a520b8e232bee6ae2cd4b27bbbd0125f3 /base/android
parente41ea2173affbae34566680ed79dd11ad6a834eb (diff)
downloadchromium_src-41082f88209166b2f331b52078bb0230df141f99.zip
chromium_src-41082f88209166b2f331b52078bb0230df141f99.tar.gz
chromium_src-41082f88209166b2f331b52078bb0230df141f99.tar.bz2
Android: passes a list of qualified JNI parameters as a param to the generator.
Instead of hardcoding the list of qualified JNI parameters, pass it as a parameter so that different modules can inject their classes. This is the first step in such decoupling; follow up will start splitting the class_list.jni list closer to their modules. BUG=158722 TEST=jni_generator_tests Review URL: https://chromiumcodereview.appspot.com/11339013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@165250 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/android')
-rw-r--r--base/android/jni_generator/class_list.jni53
-rwxr-xr-xbase/android/jni_generator/jni_generator.py332
-rwxr-xr-xbase/android/jni_generator/jni_generator_tests.py79
3 files changed, 244 insertions, 220 deletions
diff --git a/base/android/jni_generator/class_list.jni b/base/android/jni_generator/class_list.jni
new file mode 100644
index 0000000..0c4f6fa
--- /dev/null
+++ b/base/android/jni_generator/class_list.jni
@@ -0,0 +1,53 @@
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This file contains a list of JNI parameters used to generate the
+# bindings.
+# TODO(bulach): this file should only contain classes from base/ all other
+# classes should move to corresponding class_list.jni files closer to their own
+# directories. See crbug.com/158722
+Lcom/google/android/apps/chrome/ChromeContextMenuInfo
+Lcom/google/android/apps/chrome/ChromeWindow
+Lcom/google/android/apps/chrome/OmniboxSuggestion
+Lcom/google/android/apps/chrome/PageInfoViewer
+Lcom/google/android/apps/chrome/Tab
+Lcom/google/android/apps/chrome/infobar/AutoLogin
+Lcom/google/android/apps/chrome/infobar/InfoBarContainer
+Lcom/google/android/apps/chrome/infobar/InfoBarContainer$NativeInfoBar
+Lcom/google/android/apps/chrome/preferences/ChromeNativePreferences$PasswordListObserver
+Lorg/chromium/android_webview/AwContents
+Lorg/chromium/android_webview/AwContentsClient
+Lorg/chromium/android_webview/AwHttpAuthHandler
+Lorg/chromium/android_webview/AwContentsIoThreadClient
+Lorg/chromium/android_webview/AwWebContentsDelegate
+Lorg/chromium/android_webview/InterceptedRequestData
+Lorg/chromium/android_webview/JsPromptResultReceiver
+Lorg/chromium/android_webview/JsResultHandler
+Lorg/chromium/android_webview/JsResultReceiver
+Lorg/chromium/base/SystemMessageHandler
+Lorg/chromium/chrome/browser/component/navigation_interception/InterceptNavigationDelegate
+Lorg/chromium/chrome/browser/ChromeHttpAuthHandler
+Lorg/chromium/chrome/browser/ChromeWebContentsDelegateAndroid
+Lorg/chromium/content/app/SandboxedProcessService
+Lorg/chromium/content/browser/ContainerViewDelegate
+Lorg/chromium/content/browser/ContentVideoView
+Lorg/chromium/content/browser/ContentViewCore
+Lorg/chromium/content/browser/DeviceOrientation
+Lorg/chromium/content/browser/JavaInputStream
+Lorg/chromium/content/browser/LocationProvider
+Lorg/chromium/content/browser/SandboxedProcessArgs
+Lorg/chromium/content/browser/SandboxedProcessConnection
+Lorg/chromium/content/browser/TouchPoint
+Lorg/chromium/content/browser/WaitableNativeEvent
+Lorg/chromium/content/browser/WebContentsObserverAndroid
+Lorg/chromium/content/common/DeviceInfo
+Lorg/chromium/content/common/SurfaceTextureListener
+Lorg/chromium/media/MediaPlayerListener
+Lorg/chromium/net/NetworkChangeNotifier
+Lorg/chromium/net/ProxyChangeListener
+Lorg/chromium/ui/gfx/NativeWindow
+Lorg/chromium/ui/SelectFileDialog
+Lcom/google/android/apps/chrome/GoogleLocationSettingsHelperImpl
+Lorg/chromium/chrome/browser/GoogleLocationSettingsHelper
+Lorg/chromium/chrome/browser/GoogleLocationSettingsHelperStub
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index 85d8ce8..20595dd 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -3,10 +3,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-# TODO (qinmin): Need to refactor this file as base should not know about
-# higher level concepts. Currently this file has knowledge about higher level
-# java classes.
-
"""Extracts native methods from a Java file and generates the JNI bindings.
If you change this, please run and update the tests."""
@@ -21,8 +17,6 @@ import sys
import textwrap
import zipfile
-UNKNOWN_JAVA_TYPE_PREFIX = 'UNKNOWN_JAVA_TYPE: '
-
class ParseError(Exception):
"""Exception thrown when we can't parse the input file."""
@@ -113,168 +107,142 @@ def JavaDataTypeToC(java_type):
return 'jobject'
-def JavaParamToJni(param):
- """Converts a java param into a JNI signature type."""
- pod_param_map = {
- 'int': 'I',
- 'boolean': 'Z',
- 'long': 'J',
- 'double': 'D',
- 'float': 'F',
- 'byte': 'B',
- 'void': 'V',
- }
- object_param_list = [
- 'Ljava/lang/Boolean',
- 'Ljava/lang/Integer',
- 'Ljava/lang/Long',
- 'Ljava/lang/Object',
- 'Ljava/lang/String',
- 'Ljava/util/ArrayList',
- 'Ljava/util/HashMap',
- 'Ljava/util/List',
- 'Landroid/content/Context',
- 'Landroid/graphics/Bitmap',
- 'Landroid/graphics/Canvas',
- 'Landroid/graphics/Rect',
- 'Landroid/graphics/RectF',
- 'Landroid/graphics/Matrix',
- 'Landroid/graphics/Point',
- 'Landroid/graphics/SurfaceTexture$OnFrameAvailableListener',
- 'Landroid/media/MediaPlayer',
- 'Landroid/os/Message',
- 'Landroid/view/KeyEvent',
- 'Landroid/view/Surface',
- 'Landroid/view/View',
- 'Landroid/webkit/ValueCallback',
- 'Ljava/io/InputStream',
- 'Ljava/nio/ByteBuffer',
- 'Ljava/util/Vector',
- ]
- app_param_list = [
- 'Landroid/graphics/SurfaceTexture',
- 'Lcom/google/android/apps/chrome/ChromeContextMenuInfo',
- 'Lcom/google/android/apps/chrome/ChromeWindow',
- 'Lcom/google/android/apps/chrome/GoogleLocationSettingsHelperImpl',
- 'Lcom/google/android/apps/chrome/OmniboxSuggestion',
- 'Lcom/google/android/apps/chrome/PageInfoViewer',
- 'Lcom/google/android/apps/chrome/Tab',
- 'Lcom/google/android/apps/chrome/infobar/AutoLogin',
- 'Lcom/google/android/apps/chrome/infobar/InfoBarContainer',
- 'Lcom/google/android/apps/chrome/infobar/InfoBarContainer$NativeInfoBar',
- ('Lcom/google/android/apps/chrome/preferences/ChromeNativePreferences$'
- 'PasswordListObserver'),
- 'Lorg/chromium/android_webview/AwContents',
- 'Lorg/chromium/android_webview/AwContentsClient',
- 'Lorg/chromium/android_webview/AwHttpAuthHandler',
- 'Lorg/chromium/android_webview/AwContentsIoThreadClient',
- 'Lorg/chromium/android_webview/AwWebContentsDelegate',
- 'Lorg/chromium/android_webview/InterceptedRequestData',
- 'Lorg/chromium/android_webview/JsPromptResultReceiver',
- 'Lorg/chromium/android_webview/JsResultHandler',
- 'Lorg/chromium/android_webview/JsResultReceiver',
- 'Lorg/chromium/base/SystemMessageHandler',
- 'Lorg/chromium/chrome/browser/autofill/AutofillExternalDelegate',
- 'Lorg/chromium/chrome/browser/autofill/AutofillSuggestion',
- 'Lorg/chromium/chrome/browser/ChromeBrowserProvider$BookmarkNode',
- 'Lorg/chromium/chrome/browser/ChromeHttpAuthHandler',
- 'Lorg/chromium/chrome/browser/ChromeWebContentsDelegateAndroid',
- 'Lorg/chromium/chrome/browser/FindMatchRectsDetails',
- 'Lorg/chromium/chrome/browser/FindNotificationDetails',
- 'Lorg/chromium/chrome/browser/GoogleLocationSettingsHelper',
- 'Lorg/chromium/chrome/browser/GoogleLocationSettingsHelperStub',
- 'Lorg/chromium/chrome/browser/JavascriptAppModalDialog',
- 'Lorg/chromium/chrome/browser/ProcessUtils',
- ('Lorg/chromium/chrome/browser/component/navigation_interception/'
- 'InterceptNavigationDelegate'),
- ('Lorg/chromium/chrome/browser/component/web_contents_delegate_android/'
- 'WebContentsDelegateAndroid'),
- 'Lorg/chromium/chrome/browser/database/SQLiteCursor',
- 'Lorg/chromium/content/app/SandboxedProcessService',
- 'Lorg/chromium/content/browser/ContainerViewDelegate',
- 'Lorg/chromium/content/browser/ContentVideoView',
- 'Lorg/chromium/content/browser/ContentViewCore',
- 'Lorg/chromium/content/browser/DeviceOrientation',
- 'Lorg/chromium/content/browser/JavaInputStream',
- 'Lorg/chromium/content/browser/LocationProvider',
- 'Lorg/chromium/content/browser/SandboxedProcessArgs',
- 'Lorg/chromium/content/browser/SandboxedProcessConnection',
- 'Lorg/chromium/content/browser/TouchPoint',
- 'Lorg/chromium/content/browser/WaitableNativeEvent',
- 'Lorg/chromium/content/browser/WebContentsObserverAndroid',
- 'Lorg/chromium/content/common/DeviceInfo',
- 'Lorg/chromium/content/common/SurfaceTextureListener',
- 'Lorg/chromium/media/MediaPlayerListener',
- 'Lorg/chromium/net/NetworkChangeNotifier',
- 'Lorg/chromium/net/ProxyChangeListener',
- 'Lorg/chromium/ui/gfx/NativeWindow',
- 'Lorg/chromium/ui/SelectFileDialog',
- ]
- if param == 'byte[][]':
- return '[[B'
- prefix = ''
- # Array?
- if param[-2:] == '[]':
- prefix = '['
- param = param[:-2]
- # Generic?
- if '<' in param:
- param = param[:param.index('<')]
- if param in pod_param_map:
- return prefix + pod_param_map[param]
- if '/' in param:
- # Coming from javap, use the fully qualified param directly.
- return 'L' + param + ';'
- for qualified_name in object_param_list + app_param_list:
- if (qualified_name.endswith('/' + param) or
- qualified_name.endswith('$' + param.replace('.', '$')) or
- qualified_name == 'L' + param):
- return prefix + qualified_name + ';'
- else:
- return UNKNOWN_JAVA_TYPE_PREFIX + prefix + param + ';'
+class JniParams(object):
+ _UNKNOWN_JAVA_TYPE_PREFIX = 'UNKNOWN_JAVA_TYPE: '
+ _external_param_files = set()
+ _external_param_list = []
+ @staticmethod
+ def ReadExternalParamList(external_param_files):
+ if not external_param_files:
+ return
+ assert not JniParams._external_param_files
+ JniParams._external_param_files = set(external_param_files)
+ for external_param_file in JniParams._external_param_files:
+ with file(external_param_file, 'r') as f:
+ contents = f.read()
+ JniParams._external_param_list += [x.strip()
+ for x in contents.splitlines()
+ if x and not x.startswith('#')]
-def JniSignature(params, returns, wrap):
- """Returns the JNI signature for the given datatypes."""
- items = ['(']
- items += [JavaParamToJni(param.datatype) for param in params]
- items += [')']
- items += [JavaParamToJni(returns)]
- if wrap:
- return '\n' + '\n'.join(['"' + item + '"' for item in items])
- else:
- return '"' + ''.join(items) + '"'
+ @staticmethod
+ def JavaToJni(param):
+ """Converts a java param into a JNI signature type."""
+ pod_param_map = {
+ 'int': 'I',
+ 'boolean': 'Z',
+ 'long': 'J',
+ 'double': 'D',
+ 'float': 'F',
+ 'byte': 'B',
+ 'void': 'V',
+ }
+ object_param_list = [
+ 'Ljava/lang/Boolean',
+ 'Ljava/lang/Integer',
+ 'Ljava/lang/Long',
+ 'Ljava/lang/Object',
+ 'Ljava/lang/String',
+ 'Ljava/util/ArrayList',
+ 'Ljava/util/HashMap',
+ 'Ljava/util/List',
+ 'Landroid/content/Context',
+ 'Landroid/graphics/Bitmap',
+ 'Landroid/graphics/Canvas',
+ 'Landroid/graphics/Rect',
+ 'Landroid/graphics/RectF',
+ 'Landroid/graphics/Matrix',
+ 'Landroid/graphics/Point',
+ 'Landroid/graphics/SurfaceTexture',
+ 'Landroid/graphics/SurfaceTexture$OnFrameAvailableListener',
+ 'Landroid/media/MediaPlayer',
+ 'Landroid/os/Message',
+ 'Landroid/view/KeyEvent',
+ 'Landroid/view/Surface',
+ 'Landroid/view/View',
+ 'Landroid/webkit/ValueCallback',
+ 'Ljava/io/InputStream',
+ 'Ljava/nio/ByteBuffer',
+ 'Ljava/util/Vector',
+ ]
+ if param == 'byte[][]':
+ return '[[B'
+ prefix = ''
+ # Array?
+ if param[-2:] == '[]':
+ prefix = '['
+ param = param[:-2]
+ # Generic?
+ if '<' in param:
+ param = param[:param.index('<')]
+ if param in pod_param_map:
+ return prefix + pod_param_map[param]
+ if '/' in param:
+ # Coming from javap, use the fully qualified param directly.
+ return 'L' + param + ';'
+ for qualified_name in object_param_list + JniParams._external_param_list:
+ if (qualified_name.endswith('/' + param) or
+ qualified_name.endswith('$' + param.replace('.', '$')) or
+ qualified_name == 'L' + param):
+ return prefix + qualified_name + ';'
+ else:
+ return JniParams._UNKNOWN_JAVA_TYPE_PREFIX + prefix + param + ';'
+ @staticmethod
+ def Signature(params, returns, wrap):
+ """Returns the JNI signature for the given datatypes."""
+ items = ['(']
+ items += [JniParams.JavaToJni(param.datatype) for param in params]
+ items += [')']
+ items += [JniParams.JavaToJni(returns)]
+ if wrap:
+ return '\n' + '\n'.join(['"' + item + '"' for item in items])
+ else:
+ return '"' + ''.join(items) + '"'
-def ParseParams(params):
- """Parses the params into a list of Param objects."""
- if not params:
- return []
- ret = []
- for p in [p.strip() for p in params.split(',')]:
- items = p.split(' ')
- if 'final' in items:
- items.remove('final')
- param = Param(
- datatype=items[0],
- name=(items[1] if len(items) > 1 else 'p%s' % len(ret)),
- )
- ret += [param]
- return ret
+ @staticmethod
+ def Parse(params):
+ """Parses the params into a list of Param objects."""
+ if not params:
+ return []
+ ret = []
+ for p in [p.strip() for p in params.split(',')]:
+ items = p.split(' ')
+ if 'final' in items:
+ items.remove('final')
+ param = Param(
+ datatype=items[0],
+ name=(items[1] if len(items) > 1 else 'p%s' % len(ret)),
+ )
+ ret += [param]
+ return ret
+ @staticmethod
+ def CheckUnknownDatatypes(fully_qualified_class, items):
+ unknown_datatypes = JniParams._GetUnknownDatatypes(items)
+ if unknown_datatypes:
+ msg = ('There are a few unknown datatypes in %s' %
+ fully_qualified_class)
+ msg += '\nPlease, edit %s' % str(JniParams._external_param_files)
+ msg += '\nand add the JNI type(s):\n'
+ for unknown_datatype in unknown_datatypes:
+ msg += '\n%s in methods:\n' % unknown_datatype
+ msg += '\n '.join(unknown_datatypes[unknown_datatype])
+ raise SyntaxError(msg)
-def GetUnknownDatatypes(items):
- """Returns a list containing the unknown datatypes."""
- unknown_types = {}
- for item in items:
- all_datatypes = ([JavaParamToJni(param.datatype)
- for param in item.params] +
- [JavaParamToJni(item.return_type)])
- for d in all_datatypes:
- if d.startswith(UNKNOWN_JAVA_TYPE_PREFIX):
- unknown_types[d] = (unknown_types.get(d, []) +
- [item.name or 'Unable to parse'])
- return unknown_types
+ @staticmethod
+ def _GetUnknownDatatypes(items):
+ """Returns a list containing the unknown datatypes."""
+ unknown_types = {}
+ for item in items:
+ all_datatypes = ([JniParams.JavaToJni(param.datatype)
+ for param in item.params] +
+ [JniParams.JavaToJni(item.return_type)])
+ for d in all_datatypes:
+ if d.startswith(JniParams._UNKNOWN_JAVA_TYPE_PREFIX):
+ unknown_types[d] = (unknown_types.get(d, []) +
+ [item.name or 'Unable to parse'])
+ return unknown_types
def ExtractJNINamespace(contents):
@@ -311,7 +279,7 @@ def ExtractNatives(contents):
native_class_name=match.group('native_class_name'),
return_type=match.group('return'),
name=match.group('name').replace('native', ''),
- params=ParseParams(match.group('params')))
+ params=JniParams.Parse(match.group('params')))
natives += [native]
return natives
@@ -373,7 +341,7 @@ def GetMangledMethodName(name, params, return_type):
"""
mangled_items = []
for datatype in [return_type] + [x.datatype for x in params]:
- mangled_items += [GetMangledParam(JavaParamToJni(datatype))]
+ mangled_items += [GetMangledParam(JniParams.JavaToJni(datatype))]
mangled_name = name + '_'.join(mangled_items)
assert re.match(r'[0-9a-zA-Z_]+', mangled_name)
return mangled_name
@@ -434,7 +402,7 @@ def ExtractCalledByNatives(contents):
java_class_name=match.group('annotation') or '',
return_type=match.group('return_type'),
name=match.group('name'),
- params=ParseParams(match.group('params')))]
+ params=JniParams.Parse(match.group('params')))]
# Check for any @CalledByNative occurrences that weren't matched.
unmatched_lines = re.sub(RE_CALLED_BY_NATIVE, '', contents).split('\n')
for line1, line2 in zip(unmatched_lines, unmatched_lines[1:]):
@@ -470,7 +438,7 @@ class JNIFromJavaP(object):
java_class_name='',
return_type=match.group('return_type'),
name=match.group('name'),
- params=ParseParams(match.group('params').replace('.', '/')))]
+ params=JniParams.Parse(match.group('params').replace('.', '/')))]
re_constructor = re.compile('.*? public ' +
self.fully_qualified_class.replace('/', '.') +
'\((?P<params>.*?)\)')
@@ -485,7 +453,7 @@ class JNIFromJavaP(object):
java_class_name='',
return_type=self.fully_qualified_class,
name='Constructor',
- params=ParseParams(match.group('params').replace('.', '/')),
+ params=JniParams.Parse(match.group('params').replace('.', '/')),
is_constructor=True)]
self.called_by_natives = MangleCalledByNatives(self.called_by_natives)
self.inl_header_file_generator = InlHeaderFileGenerator(
@@ -561,17 +529,8 @@ class InlHeaderFileGenerator(object):
self.natives = natives
self.called_by_natives = called_by_natives
self.header_guard = fully_qualified_class.replace('/', '_') + '_JNI'
- unknown_datatypes = GetUnknownDatatypes(self.natives +
- self.called_by_natives)
- if unknown_datatypes:
- msg = ('There are a few unknown datatypes in %s' %
- self.fully_qualified_class)
- msg += '\nPlease, edit %s' % sys.argv[0]
- msg += '\nand add the java type to JavaParamToJni()\n'
- for unknown_datatype in unknown_datatypes:
- msg += '\n%s in methods:\n' % unknown_datatype
- msg += '\n '.join(unknown_datatypes[unknown_datatype])
- raise SyntaxError(msg)
+ JniParams.CheckUnknownDatatypes(self.fully_qualified_class,
+ self.natives + self.called_by_natives)
def GetContent(self):
"""Returns the content of the JNI binding file."""
@@ -865,8 +824,9 @@ ${FUNCTION_HEADER}
template = Template("""\
{ "native${NAME}", ${JNI_SIGNATURE}, reinterpret_cast<void*>(${NAME}) },""")
values = {'NAME': native.name,
- 'JNI_SIGNATURE': JniSignature(native.params, native.return_type,
- True)}
+ 'JNI_SIGNATURE': JniParams.Signature(native.params,
+ native.return_type,
+ True)}
return template.substitute(values)
def GetUniqueClasses(self, origin):
@@ -937,9 +897,9 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""")
'JNI_NAME': jni_name,
'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name,
'STATIC': 'STATIC' if called_by_native.static else 'INSTANCE',
- 'JNI_SIGNATURE': JniSignature(called_by_native.params,
- jni_return_type,
- True)
+ 'JNI_SIGNATURE': JniParams.Signature(called_by_native.params,
+ jni_return_type,
+ True)
}
return template.substitute(values)
@@ -1034,7 +994,13 @@ See SampleForTests.java for more details.
option_parser.add_option('--output_dir',
help='The output directory. Must be used with '
'--input')
+ option_parser.add_option('--external_param_list',
+ help='A file name containing a list with extra '
+ 'fully-qualified param names. Can be used multiple '
+ 'times.',
+ action='append')
options, args = option_parser.parse_args(argv)
+ JniParams.ReadExternalParamList(options.external_param_list)
if options.jar_file:
input_file = ExtractJarInputFile(options.jar_file, options.input_file,
options.output_dir)
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py
index 4c345ed..3dd9097 100755
--- a/base/android/jni_generator/jni_generator_tests.py
+++ b/base/android/jni_generator/jni_generator_tests.py
@@ -54,7 +54,6 @@ class TestGenerator(unittest.TestCase):
print '=' * 80
self.fail('Golden text mismatch')
- # TODO(bulach): Detangle these tests from knowing about classes from Content.
def testNatives(self):
test_data = """"
private native int nativeInit();
@@ -65,7 +64,7 @@ class TestGenerator(unittest.TestCase):
private static native String nativeGetDomainAndRegistry(String url);
private static native void nativeCreateHistoricalTabFromState(
byte[] state, int tab_index);
- private native byte[] nativeGetStateAsByteArray(ContentViewCore view);
+ private native byte[] nativeGetStateAsByteArray(View view);
private static native String[] nativeGetAutofillProfileGUIDs();
private native void nativeSetRecognitionResults(
int sessionId, String[] results);
@@ -74,8 +73,8 @@ class TestGenerator(unittest.TestCase):
String url, Long created, Boolean isBookmark,
Long date, byte[] favicon, String title, Integer visits);
native int nativeFindAll(String find);
- private static native BookmarkNode nativeGetDefaultBookmarkFolder();
- private native SQLiteCursor nativeQueryBookmarkFromAPI(
+ private static native OnFrameAvailableListener nativeGetInnerClass();
+ private native Bitmap nativeQueryBitmap(
int nativeChromeBrowserProvider,
String[] projection, String selection,
String[] selectionArgs, String sortOrder);
@@ -126,7 +125,7 @@ class TestGenerator(unittest.TestCase):
type='function'),
NativeMethod(return_type='byte[]', static=False,
name='GetStateAsByteArray',
- params=[Param(datatype='ContentViewCore', name='view')],
+ params=[Param(datatype='View', name='view')],
java_class_name=None,
type='function'),
NativeMethod(return_type='String[]', static=True,
@@ -166,14 +165,14 @@ class TestGenerator(unittest.TestCase):
name='find')],
java_class_name=None,
type='function'),
- NativeMethod(return_type='BookmarkNode', static=True,
- name='GetDefaultBookmarkFolder',
+ NativeMethod(return_type='OnFrameAvailableListener', static=True,
+ name='GetInnerClass',
params=[],
java_class_name=None,
type='function'),
- NativeMethod(return_type='SQLiteCursor',
+ NativeMethod(return_type='Bitmap',
static=False,
- name='QueryBookmarkFromAPI',
+ name='QueryBitmap',
params=[Param(datatype='int',
name='nativeChromeBrowserProvider'),
Param(datatype='String[]',
@@ -256,7 +255,7 @@ static void SetRecognitionResults(JNIEnv* env, jobject obj,
static jint FindAll(JNIEnv* env, jobject obj,
jstring find);
-static jobject GetDefaultBookmarkFolder(JNIEnv* env, jclass clazz);
+static jobject GetInnerClass(JNIEnv* env, jclass clazz);
// Step 2: method stubs.
static void Destroy(JNIEnv* env, jobject obj,
@@ -295,17 +294,17 @@ static jlong AddBookmarkFromAPI(JNIEnv* env, jobject obj,
favicon, title, visits);
}
-static jobject QueryBookmarkFromAPI(JNIEnv* env, jobject obj,
+static jobject QueryBitmap(JNIEnv* env, jobject obj,
jint nativeChromeBrowserProvider,
jobjectArray projection,
jstring selection,
jobjectArray selectionArgs,
jstring sortOrder) {
- DCHECK(nativeChromeBrowserProvider) << "QueryBookmarkFromAPI";
+ DCHECK(nativeChromeBrowserProvider) << "QueryBitmap";
ChromeBrowserProvider* native =
reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider);
- return native->QueryBookmarkFromAPI(env, obj, projection, selection,
- selectionArgs, sortOrder).Release();
+ return native->QueryBitmap(env, obj, projection, selection, selectionArgs,
+ sortOrder).Release();
}
static void GotOrientation(JNIEnv* env, jobject obj,
@@ -357,7 +356,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
"V", reinterpret_cast<void*>(CreateHistoricalTabFromState) },
{ "nativeGetStateAsByteArray",
"("
-"Lorg/chromium/content/browser/ContentViewCore;"
+"Landroid/view/View;"
")"
"[B", reinterpret_cast<void*>(GetStateAsByteArray) },
{ "nativeGetAutofillProfileGUIDs",
@@ -387,12 +386,12 @@ static bool RegisterNativesImpl(JNIEnv* env) {
"Ljava/lang/String;"
")"
"I", reinterpret_cast<void*>(FindAll) },
- { "nativeGetDefaultBookmarkFolder",
+ { "nativeGetInnerClass",
"("
")"
-"Lorg/chromium/chrome/browser/ChromeBrowserProvider$BookmarkNode;",
- reinterpret_cast<void*>(GetDefaultBookmarkFolder) },
- { "nativeQueryBookmarkFromAPI",
+"Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;",
+ reinterpret_cast<void*>(GetInnerClass) },
+ { "nativeQueryBitmap",
"("
"I"
"[Ljava/lang/String;"
@@ -400,8 +399,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
"[Ljava/lang/String;"
"Ljava/lang/String;"
")"
-"Lorg/chromium/chrome/browser/database/SQLiteCursor;",
- reinterpret_cast<void*>(QueryBookmarkFromAPI) },
+"Landroid/graphics/Bitmap;", reinterpret_cast<void*>(QueryBitmap) },
{ "nativeGotOrientation",
"("
"I"
@@ -721,18 +719,16 @@ static bool RegisterNativesImpl(JNIEnv* env) {
def testCalledByNatives(self):
test_data = """"
@CalledByNative
- NativeInfoBar showConfirmInfoBar(int nativeInfoBar, String buttonOk,
- String buttonCancel, String title,
- Bitmap icon) {
+ OnFrameAvailableListener showConfirmInfoBar(int nativeInfoBar,
+ String buttonOk, String buttonCancel, String title, Bitmap icon) {
InfoBar infobar = new ConfirmInfoBar(nativeInfoBar, mContext,
buttonOk, buttonCancel,
title, icon);
return infobar;
}
@CalledByNative
- NativeInfoBar showAutoLoginInfoBar(int nativeInfoBar,
- String realm, String account,
- String args) {
+ OnFrameAvailableListener showAutoLoginInfoBar(int nativeInfoBar,
+ String realm, String account, String args) {
AutoLoginInfoBar infobar = new AutoLoginInfoBar(nativeInfoBar, mContext,
realm, account, args);
if (infobar.displayedAccountCount() == 0)
@@ -743,7 +739,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
void dismiss();
@SuppressWarnings("unused")
@CalledByNative
- private static boolean shouldShowAutoLogin(ContentViewCore contentView,
+ private static boolean shouldShowAutoLogin(View view,
String realm, String account, String args) {
AccountManagerContainer accountManagerContainer =
new AccountManagerContainer((Activity)contentView.getContext(),
@@ -769,7 +765,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
called_by_natives = jni_generator.ExtractCalledByNatives(test_data)
golden_called_by_natives = [
CalledByNative(
- return_type='NativeInfoBar',
+ return_type='OnFrameAvailableListener',
system_class=False,
static=False,
name='showConfirmInfoBar',
@@ -784,7 +780,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
unchecked=False,
),
CalledByNative(
- return_type='NativeInfoBar',
+ return_type='OnFrameAvailableListener',
system_class=False,
static=False,
name='showAutoLoginInfoBar',
@@ -815,7 +811,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
name='shouldShowAutoLogin',
method_id_var_name='shouldShowAutoLogin',
java_class_name='',
- params=[Param(datatype='ContentViewCore', name='contentView'),
+ params=[Param(datatype='View', name='view'),
Param(datatype='String', name='realm'),
Param(datatype='String', name='account'),
Param(datatype='String', name='args')],
@@ -920,7 +916,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showConfirmInfoBar(JNIEnv* env,
"Ljava/lang/String;"
"Landroid/graphics/Bitmap;"
")"
-"Lcom/google/android/apps/chrome/infobar/InfoBarContainer$NativeInfoBar;",
+"Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;",
&g_TestJni_showConfirmInfoBar);
jobject ret =
@@ -950,7 +946,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showAutoLoginInfoBar(JNIEnv*
"Ljava/lang/String;"
"Ljava/lang/String;"
")"
-"Lcom/google/android/apps/chrome/infobar/InfoBarContainer$NativeInfoBar;",
+"Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;",
&g_TestJni_showAutoLoginInfoBar);
jobject ret =
@@ -982,8 +978,7 @@ static void Java_InfoBar_dismiss(JNIEnv* env, jobject obj) {
}
static base::subtle::AtomicWord g_TestJni_shouldShowAutoLogin = 0;
-static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject
- contentView,
+static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject view,
jstring realm,
jstring account,
jstring args) {
@@ -996,7 +991,7 @@ static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject
"shouldShowAutoLogin",
"("
-"Lorg/chromium/content/browser/ContentViewCore;"
+"Landroid/view/View;"
"Ljava/lang/String;"
"Ljava/lang/String;"
"Ljava/lang/String;"
@@ -1006,7 +1001,7 @@ static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject
jboolean ret =
env->CallStaticBooleanMethod(g_TestJni_clazz,
- method_id, contentView, realm, account, args);
+ method_id, view, realm, account, args);
base::android::CheckException(env);
return ret;
}
@@ -1532,5 +1527,15 @@ static bool RegisterNativesImpl(JNIEnv* env) {
self.assertTrue(len(line) > 80,
('Expected #ifndef line to be > 80 chars: ', line))
+ def testExternalParamList(self):
+ script_dir = os.path.dirname(sys.argv[0])
+ external_param_list = [os.path.join(script_dir, 'class_list.jni')]
+ jni_generator.JniParams.ReadExternalParamList(external_param_list)
+ self.assertTrue('Lorg/chromium/base/SystemMessageHandler' in
+ jni_generator.JniParams._external_param_list)
+ self.assertRaises(AssertionError,
+ jni_generator.JniParams.ReadExternalParamList,
+ external_param_list)
+
if __name__ == '__main__':
unittest.main()