diff options
author | yfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-23 17:53:53 +0000 |
---|---|---|
committer | yfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-23 17:53:53 +0000 |
commit | efd3b9e8d4b409c7dd7537e36b016e586dbcbac6 (patch) | |
tree | c872b316e86f64b3bc8dadca563d0adfdd320053 /base/android | |
parent | 3ae1f4ccb245deb6458acccb1ad7ad8a18f26ece (diff) | |
download | chromium_src-efd3b9e8d4b409c7dd7537e36b016e586dbcbac6.zip chromium_src-efd3b9e8d4b409c7dd7537e36b016e586dbcbac6.tar.gz chromium_src-efd3b9e8d4b409c7dd7537e36b016e586dbcbac6.tar.bz2 |
Update jni_generator with latest from downstream.
Adds the option to specify a jar file and specific classes from which to
extract JNI headers.
Review URL: https://chromiumcodereview.appspot.com/10414057
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138519 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/android')
-rw-r--r-- | base/android/jni_generator/SampleForTests.java | 2 | ||||
-rwxr-xr-x | base/android/jni_generator/jni_generator.py | 95 | ||||
-rwxr-xr-x | base/android/jni_generator/jni_generator_tests.py | 36 |
3 files changed, 88 insertions, 45 deletions
diff --git a/base/android/jni_generator/SampleForTests.java b/base/android/jni_generator/SampleForTests.java index a081921..6a15666 100644 --- a/base/android/jni_generator/SampleForTests.java +++ b/base/android/jni_generator/SampleForTests.java @@ -74,7 +74,7 @@ class SampleForTests { void methodThatThrowsException() throws Exception {} //------------------------------------------------------------------------------------------------ - // Java fields which are accessed from C++ code must be annotated with @AccessedByNative to + // Java fields which are accessed from C++ code only must be annotated with @AccessedByNative to // prevent them being eliminated when unreferenced code is stripped. @AccessedByNative private int javaField; diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py index 17b6aea..54a4510 100755 --- a/base/android/jni_generator/jni_generator.py +++ b/base/android/jni_generator/jni_generator.py @@ -19,7 +19,7 @@ from string import Template import subprocess import sys import textwrap - +import zipfile UNKNOWN_JAVA_TYPE_PREFIX = 'UNKNOWN_JAVA_TYPE: ' @@ -150,36 +150,43 @@ def JavaParamToJni(param): ] app_param_list = [ 'Landroid/graphics/SurfaceTexture', - 'Lcom/android/chrome/ChromeBrowserProvider$BookmarkNode', - 'Lcom/android/chrome/JSModalDialog', - 'Lcom/android/chrome/OmniboxSuggestion', - 'Lcom/android/chrome/PageInfoViewer', - 'Lcom/android/chrome/Tab', - 'Lcom/android/chrome/database/SQLiteCursor', - 'Lcom/android/chrome/infobar/InfoBarContainer$NativeInfoBar', - ('Lcom/android/chrome/preferences/ChromeNativePreferences$' + 'Lcom/google/android/apps/chrome/AutofillData', + 'Lcom/google/android/apps/chrome/ChromeBrowserProvider$BookmarkNode', + 'Lcom/google/android/apps/chrome/ChromeHttpAuthHandler', + 'Lcom/google/android/apps/chrome/ChromeContextMenuInfo', + 'Lcom/google/android/apps/chrome/OmniboxSuggestion', + 'Lcom/google/android/apps/chrome/PageInfoViewer', + 'Lcom/google/android/apps/chrome/Tab', + 'Lcom/google/android/apps/chrome/database/SQLiteCursor', + '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/base/SystemMessageHandler', - 'Lorg/chromium/chromeview/AutofillData', - 'Lorg/chromium/chromeview/ChromeHttpAuthHandler', - 'Lorg/chromium/chromeview/ChromeVideoView', - 'Lorg/chromium/chromeview/ChromeView', - 'Lorg/chromium/chromeview/ChromeView$ChromeViewContextMenuInfo', - ('Lorg/chromium/chromeview/ChromeView$' + 'Lorg/chromium/chrome/browser/JSModalDialog', + 'Lorg/chromium/chrome/browser/SelectFileDialog', + 'Lorg/chromium/content/browser/ChromeVideoView', + 'Lorg/chromium/content/browser/ContentView', + ('Lorg/chromium/content/browser/ContentView$' 'FindResultReceivedListener$FindNotificationDetails'), - 'Lorg/chromium/chromeview/ChromeViewClient', - 'Lorg/chromium/chromeview/DeviceInfo', - 'Lorg/chromium/chromeview/DeviceOrientation', - 'Lorg/chromium/chromeview/JavaInputStream', - 'Lorg/chromium/chromeview/LocationProvider', - 'Lorg/chromium/chromeview/SandboxedProcessArgs', - 'Lorg/chromium/chromeview/SandboxedProcessConnection', - 'Lorg/chromium/chromeview/SandboxedProcessService', - 'Lorg/chromium/chromeview/SelectFileDialog', - 'Lorg/chromium/chromeview/SurfaceTextureListener', - 'Lorg/chromium/chromeview/TouchPoint', + 'Lorg/chromium/content/browser/ChromeViewClient', + 'Lorg/chromium/content/browser/ContentHttpAuthHandler', + 'Lorg/chromium/content/browser/DeviceInfo', + 'Lorg/chromium/content/browser/DeviceOrientation', + 'Lorg/chromium/content/browser/FileChooserParams', + 'Lorg/chromium/content/browser/InterceptedRequestData', + 'Lorg/chromium/content/browser/JavaInputStream', + 'Lorg/chromium/content/browser/LocationProvider', + 'Lorg/chromium/content/browser/SandboxedProcessArgs', + 'Lorg/chromium/content/browser/SandboxedProcessConnection', + 'Lorg/chromium/content/browser/SandboxedProcessService', + 'Lorg/chromium/content/browser/SurfaceTextureListener', + 'Lorg/chromium/content/browser/TouchPoint', + 'Lorg/chromium/content/browser/WaitableNativeEvent', 'Lorg/chromium/media/MediaPlayerListener', 'Lorg/chromium/net/NetworkChangeNotifier', + 'Lorg/chromium/net/ProxyChangeListener', + 'Lorg/chromium/net/NetworkChangeNotifier', ] if param == 'byte[][]': return '[[B' @@ -870,6 +877,35 @@ def WrapOutput(output): return '\n'.join(ret) +def ExtractInputFiles(jar_file, input_files, out_dirs): + """Extracts input files from jar and returns them as list of filenames. + + The input files are extracted to the same directory that the generated jni + headers will be placed in. This is passed as an argument to script. + + Args: + jar_file: the jar file containing the input files to extract + input_files: the list of files to extract from the jar file + out_dirs: the name of the directories to extract to + + Returns: + a list of file names of extracted input files + """ + jar_file = zipfile.ZipFile(jar_file) + extracted_file_names = [] + + for (input_file, out_dir) in zip(input_files, out_dirs): + out_dir = os.path.join(out_dir, os.path.dirname(input_file)) + if not os.path.exists(out_dir): + os.makedirs(out_dir) + extracted_file_name = os.path.join(out_dir, os.path.basename(input_file)) + with open(extracted_file_name, 'w') as outfile: + outfile.write(jar_file.read(input_file)) + extracted_file_names.append(extracted_file_name) + + return extracted_file_names + + def GenerateJNIHeaders(input_files, output_files, use_javap, namespace): for i in xrange(len(input_files)): try: @@ -928,6 +964,9 @@ See SampleForTests.java for more details. help='Saves the output to file(s) (the first half of' ' args specify the java input files, the second' ' half specify the header output files.') + option_parser.add_option('-j', dest='jar_file', + help='Extract the list of input files from' + ' a specified jar file.') option_parser.add_option('-p', dest='javap_class', action='store_true', default=False, @@ -944,6 +983,10 @@ See SampleForTests.java for more details. output_files = input_files[len(input_files) / 2:] input_files = input_files[:len(input_files) / 2] CheckFilenames(input_files, output_files) + if options.jar_file: + # CheckFileNames guarantees same length for inputs and outputs + out_dirs = map(os.path.dirname, output_files) + input_files = ExtractInputFiles(options.jar_file, input_files, out_dirs) GenerateJNIHeaders(input_files, output_files, options.javap_class, options.namespace) diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py index 159c34d..112909f 100755 --- a/base/android/jni_generator/jni_generator_tests.py +++ b/base/android/jni_generator/jni_generator_tests.py @@ -62,7 +62,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(ChromeView view); + private native byte[] nativeGetStateAsByteArray(ContentView view); private static native String[] nativeGetAutofillProfileGUIDs(); private native void nativeSetRecognitionResults( int sessionId, String[] results); @@ -123,7 +123,7 @@ class TestGenerator(unittest.TestCase): type='function'), NativeMethod(return_type='byte[]', static=False, name='GetStateAsByteArray', - params=[Param(datatype='ChromeView', name='view')], + params=[Param(datatype='ContentView', name='view')], java_class_name='', type='function'), NativeMethod(return_type='String[]', static=True, @@ -371,7 +371,7 @@ static bool RegisterNativesImpl(JNIEnv* env) { "V", reinterpret_cast<void*>(CreateHistoricalTabFromState) }, { "nativeGetStateAsByteArray", "(" -"Lorg/chromium/chromeview/ChromeView;" +"Lorg/chromium/content/browser/ContentView;" ")" "[B", reinterpret_cast<void*>(GetStateAsByteArray) }, { "nativeGetAutofillProfileGUIDs", @@ -404,7 +404,7 @@ static bool RegisterNativesImpl(JNIEnv* env) { { "nativeGetDefaultBookmarkFolder", "(" ")" -"Lcom/android/chrome/ChromeBrowserProvider$BookmarkNode;", +"Lcom/google/android/apps/chrome/ChromeBrowserProvider$BookmarkNode;", reinterpret_cast<void*>(GetDefaultBookmarkFolder) }, { "nativeQueryBookmarkFromAPI", "(" @@ -414,7 +414,7 @@ static bool RegisterNativesImpl(JNIEnv* env) { "[Ljava/lang/String;" "Ljava/lang/String;" ")" -"Lcom/android/chrome/database/SQLiteCursor;", +"Lcom/google/android/apps/chrome/database/SQLiteCursor;", reinterpret_cast<void*>(QueryBookmarkFromAPI) }, { "nativeGotOrientation", "(" @@ -783,10 +783,10 @@ static bool RegisterNativesImpl(JNIEnv* env) { void dismiss(); @SuppressWarnings("unused") @CalledByNative - private static boolean shouldShowAutoLogin(ChromeView chromeView, + private static boolean shouldShowAutoLogin(ContentView contentView, String realm, String account, String args) { AccountManagerContainer accountManagerContainer = - new AccountManagerContainer((Activity)chromeView.getContext(), + new AccountManagerContainer((Activity)contentView.getContext(), realm, account, args); String[] logins = accountManagerContainer.getAccountLogins(null); return logins.length != 0; @@ -855,7 +855,7 @@ static bool RegisterNativesImpl(JNIEnv* env) { name='shouldShowAutoLogin', method_id_var_name='shouldShowAutoLogin', java_class_name='', - params=[Param(datatype='ChromeView', name='chromeView'), + params=[Param(datatype='ContentView', name='contentView'), Param(datatype='String', name='realm'), Param(datatype='String', name='account'), Param(datatype='String', name='args')], @@ -988,7 +988,7 @@ static void Java_InfoBar_dismiss(JNIEnv* env, jobject obj) { static jmethodID g_TestJni_shouldShowAutoLogin = 0; static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject - chromeView, + contentView, jstring realm, jstring account, jstring args) { @@ -997,7 +997,7 @@ static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject DCHECK(g_TestJni_shouldShowAutoLogin); jboolean ret = env->CallStaticBooleanMethod(g_TestJni_clazz, - g_TestJni_shouldShowAutoLogin, chromeView, realm, account, args); + g_TestJni_shouldShowAutoLogin, contentView, realm, account, args); base::android::CheckException(env); return ret; } @@ -1065,7 +1065,7 @@ static void GetMethodIDsImpl(JNIEnv* env) { "Ljava/lang/String;" "Landroid/graphics/Bitmap;" ")" -"Lcom/android/chrome/infobar/InfoBarContainer$NativeInfoBar;"); +"Lcom/google/android/apps/chrome/infobar/InfoBarContainer$NativeInfoBar;"); g_TestJni_showAutoLoginInfoBar = base::android::GetMethodID( @@ -1078,7 +1078,7 @@ static void GetMethodIDsImpl(JNIEnv* env) { "Ljava/lang/String;" "Ljava/lang/String;" ")" -"Lcom/android/chrome/infobar/InfoBarContainer$NativeInfoBar;"); +"Lcom/google/android/apps/chrome/infobar/InfoBarContainer$NativeInfoBar;"); g_InfoBar_dismiss = base::android::GetMethodID( @@ -1095,7 +1095,7 @@ static void GetMethodIDsImpl(JNIEnv* env) { "shouldShowAutoLogin", "(" -"Lorg/chromium/chromeview/ChromeView;" +"Lorg/chromium/content/browser/ContentView;" "Ljava/lang/String;" "Ljava/lang/String;" "Ljava/lang/String;" @@ -1167,14 +1167,14 @@ scooby doo // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chromeview; +package org.chromium.content.browser; -import org.chromium.chromeview.legacy.DownloadListener; +import org.chromium.base.BuildInfo; """ - self.assertEquals('org/chromium/chromeview/Foo', + self.assertEquals('org/chromium/content/browser/Foo', jni_generator.ExtractFullyQualifiedJavaClassName( - 'org/chromium/chromeview/Foo.java', contents)) - self.assertEquals('org/chromium/chromeview/Foo', + 'org/chromium/content/browser/Foo.java', contents)) + self.assertEquals('org/chromium/content/browser/Foo', jni_generator.ExtractFullyQualifiedJavaClassName( 'frameworks/Foo.java', contents)) self.assertRaises(SyntaxError, |