Commit f86a758d authored by Tibor Goldschwendt's avatar Tibor Goldschwendt Committed by Commit Bot

[vr] Make VR Java android_library and separate VR JNI registration

This CL does two things:

- In order to move VR Java code into its own module move the code into a
  separate android_library target.

- As a result of the separate library target we may miss making the VR
  JNI registrations (in case VR moves out of chrome_public_apk). Thus,
  separate the JNI registration generation for VR and register VR JNI
  calls in VR code.

Bug: 862694
Change-Id: I2b78cea7b30725d5f2b51afbcac1a6add555f355
Reviewed-on: https://chromium-review.googlesource.com/1158715
Commit-Queue: Tibor Goldschwendt <tiborg@chromium.org>
Reviewed-by: default avataragrieve <agrieve@chromium.org>
Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/master@{#581576}
parent 05715217
......@@ -9,5 +9,5 @@ jni_exception_files =
# Exclude it from JNI registration if VR is not enabled.
if (!enable_vr) {
jni_exception_files += [ "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java" ]
jni_exception_files += [ "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java" ]
}
......@@ -294,6 +294,8 @@ class TestGenerator(unittest.TestCase):
content = h2.Generate()
for k in jni_registration_generator.MERGEABLE_KEYS:
content[k] = content.get(k, '')
content['HEADER_GUARD'] = 'HEADER_GUARD'
content['NAMESPACE'] = 'test'
self.assertGoldenTextEquals(
jni_registration_generator.CreateFromDict(content),
......@@ -383,6 +385,8 @@ class TestGenerator(unittest.TestCase):
content = h2.Generate()
for k in jni_registration_generator.MERGEABLE_KEYS:
content[k] = content.get(k, '')
content['HEADER_GUARD'] = 'HEADER_GUARD'
content['NAMESPACE'] = 'test'
self.assertGoldenTextEquals(
jni_registration_generator.CreateFromDict(content),
......
......@@ -12,6 +12,7 @@ to register all native methods that exist within an application."""
import argparse
import jni_generator
import multiprocessing
import os
import string
import sys
from util import build_utils
......@@ -54,6 +55,10 @@ def GenerateJNIHeader(java_file_paths, output_file, args):
for key in MERGEABLE_KEYS:
combined_dict[key] = ''.join(d.get(key, '') for d in results)
combined_dict['HEADER_GUARD'] = \
os.path.splitext(output_file)[0].replace('/', '_').upper() + '_'
combined_dict['NAMESPACE'] = args.namespace
header_content = CreateFromDict(combined_dict)
if output_file:
jni_generator.WriteOutput(output_file, header_content)
......@@ -91,8 +96,8 @@ def CreateFromDict(registration_dict):
// base/android/jni_generator/jni_registration_generator.py
// Please do not change its content.
#ifndef HEADER_GUARD
#define HEADER_GUARD
#ifndef ${HEADER_GUARD}
#define ${HEADER_GUARD}
#include <jni.h>
......@@ -113,6 +118,8 @@ ${JNI_NATIVE_METHOD_ARRAY}
${JNI_NATIVE_METHOD}
// Step 4: Main dex and non-main dex registration functions.
namespace ${NAMESPACE} {
bool RegisterMainDexNatives(JNIEnv* env) {
${REGISTER_MAIN_DEX_NATIVES}
return true;
......@@ -123,7 +130,9 @@ ${REGISTER_NON_MAIN_DEX_NATIVES}
return true;
}
#endif // HEADER_GUARD
} // namespace ${NAMESPACE}
#endif // ${HEADER_GUARD}
""")
if len(registration_dict['FORWARD_DECLARATIONS']) == 0:
return ''
......@@ -315,8 +324,13 @@ def main(argv):
arg_parser.add_argument('--output',
help='The output file path.')
arg_parser.add_argument('--no_register_java',
default=[],
help='A list of Java files which should be ignored '
'by the parser.')
arg_parser.add_argument('--namespace',
default='',
help='Namespace to wrap the registration functions '
'into.')
args = arg_parser.parse_args(build_utils.ExpandFileArgs(argv[1:]))
args.sources_files = build_utils.ParseGnList(args.sources_files)
......
......@@ -94,6 +94,8 @@ JNI_REGISTRATION_EXPORT bool RegisterNative_org_chromium_TestJni(JNIEnv* env) {
// Step 4: Main dex and non-main dex registration functions.
namespace test {
bool RegisterMainDexNatives(JNIEnv* env) {
if (!RegisterNative_org_chromium_TestJni(env))
return false;
......@@ -106,4 +108,6 @@ bool RegisterNonMainDexNatives(JNIEnv* env) {
return true;
}
} // namespace test
#endif // HEADER_GUARD
......@@ -160,6 +160,8 @@ JNI_REGISTRATION_EXPORT bool RegisterNative_org_chromium_TestJni(JNIEnv* env) {
// Step 4: Main dex and non-main dex registration functions.
namespace test {
bool RegisterMainDexNatives(JNIEnv* env) {
if (!RegisterNative_org_chromium_TestJni(env))
return false;
......@@ -172,4 +174,6 @@ bool RegisterNonMainDexNatives(JNIEnv* env) {
return true;
}
} // namespace test
#endif // HEADER_GUARD
......@@ -92,7 +92,10 @@ def main(args):
proguard.config_exclusions(options.proguard_config_exclusions)
proguard.outjar(options.output_path)
classpath = list(set(options.classpath))
# If a jar is part of input no need to include it as library jar.
classpath = [
p for p in set(options.classpath) if p not in options.input_paths
]
proguard.libraryjars(classpath)
proguard.verbose(options.verbose)
if not options.enable_dangerous_optimizations:
......
......@@ -1012,7 +1012,10 @@ def main(argv):
else:
gradle['dependent_java_projects'].append(c['path'])
if is_apk_or_module_target:
# TODO(tiborg): Remove creation of JNI info for type group and java_library
# once we can generate the JNI registration based on APK / module targets as
# opposed to groups and libraries.
if is_apk_or_module_target or options.type in ('group', 'java_library'):
config['jni'] = {}
all_java_sources = [c['java_sources_file'] for c in all_library_deps
if 'java_sources_file' in c]
......@@ -1168,23 +1171,28 @@ def main(argv):
# Deps to add to the compile-time classpath (but not the runtime classpath).
# TODO(agrieve): Might be less confusing to fold these into bootclasspath.
extra_jars = [c['unprocessed_jar_path']
javac_extra_jars = [c['unprocessed_jar_path']
for c in classpath_deps.Direct('java_library')]
extra_jars = [c['jar_path']
for c in classpath_deps.Direct('java_library')]
if options.extra_classpath_jars:
# These are .jars to add to javac classpath but not to runtime classpath.
javac_extra_jars.extend(
build_utils.ParseGnList(options.extra_classpath_jars))
extra_jars.extend(build_utils.ParseGnList(options.extra_classpath_jars))
extra_jars = [p for p in extra_jars if p not in javac_classpath]
javac_classpath.extend(extra_jars)
javac_interface_classpath.extend(extra_jars)
javac_full_interface_classpath.extend(
p for p in extra_jars if p not in javac_full_classpath)
javac_full_classpath.extend(
p for p in extra_jars if p not in javac_full_classpath)
if extra_jars:
deps_info['extra_classpath_jars'] = extra_jars
javac_extra_jars = [p for p in javac_extra_jars if p not in javac_classpath]
javac_classpath.extend(javac_extra_jars)
javac_interface_classpath.extend(javac_extra_jars)
javac_full_interface_classpath.extend(
p for p in javac_extra_jars if p not in javac_full_classpath)
javac_full_classpath.extend(
p for p in javac_extra_jars if p not in javac_full_classpath)
if is_java_target or options.type == 'android_app_bundle':
# The classpath to use to run this target (or as an input to ProGuard).
java_full_classpath = []
......
......@@ -396,7 +396,8 @@ if (enable_java_templates) {
# target: The Apk target to generate registrations for.
# output: Path to the generated .h file.
# exception_files: List of .java files that should be ignored when searching
# for native methods. (optional)
# for native methods. (optional)
# namespace: Registration functions will be wrapped into this. (optional)
#
# Example
# generate_jni_registration("chrome_jni_registration") {
......@@ -413,9 +414,6 @@ if (enable_java_templates) {
get_label_info(invoker.target, "name") + ".build_config"
_rebased_build_config = rebase_path(_build_config, root_build_dir)
_rebase_exception_java_files =
rebase_path(invoker.exception_files, root_build_dir)
script = "//base/android/jni_generator/jni_registration_generator.py"
deps = [
"${invoker.target}__build_config",
......@@ -433,10 +431,17 @@ if (enable_java_templates) {
"--sources_files=@FileArg($_rebased_build_config:jni:all_source)",
"--output",
rebase_path(invoker.output, root_build_dir),
"--no_register_java=$_rebase_exception_java_files",
"--depfile",
rebase_path(depfile, root_build_dir),
]
if (defined(invoker.exception_files)) {
_rebase_exception_java_files =
rebase_path(invoker.exception_files, root_build_dir)
args += [ "--no_register_java=$_rebase_exception_java_files" ]
}
if (defined(invoker.namespace)) {
args += [ "--namespace=${invoker.namespace}" ]
}
}
}
......
......@@ -348,7 +348,6 @@ android_library("chrome_java") {
srcjar_deps += feed_srcjar_deps
if (enable_vr) {
java_files += chrome_vr_java_sources
deps += [
"//device/vr:java",
"//third_party/gvr-android-keyboard:kb_java",
......@@ -681,6 +680,7 @@ if (enable_vr || (enable_arcore && package_arcore)) {
"//base:base_java_test_support",
"//chrome/android:app_hooks_java",
"//chrome/android:chrome_java",
"//chrome/browser/android/vr:java",
"//chrome/test/android:chrome_java_test_support",
"//components/policy/android:policy_java",
"//content/public/android:content_java",
......@@ -930,6 +930,11 @@ chrome_shared_library("libchrome") {
deps = [
":chrome_jni_registration($default_toolchain)",
]
if (enable_vr) {
sources += [ "../browser/android/vr/register_jni.cc" ]
deps +=
[ "//chrome/browser/android/vr:jni_registration($default_toolchain)" ]
}
}
chrome_shared_library("libchromefortest") {
......@@ -945,6 +950,11 @@ chrome_shared_library("libchromefortest") {
"//components/heap_profiling:test_support",
"//content/public/test/android:content_native_test_support",
]
if (enable_vr) {
sources += [ "../browser/android/vr/register_jni.cc" ]
deps +=
[ "//chrome/browser/android/vr:jni_registration($default_toolchain)" ]
}
}
# Ensure that .pak files are built only once (build them in the default
......@@ -952,21 +962,21 @@ chrome_shared_library("libchromefortest") {
# is generated from Java code so it just needs to be generated once.
if (current_toolchain == default_toolchain) {
generate_jni_registration("chrome_jni_registration") {
target = ":chrome_public_apk"
target = ":chrome_public_base_module_java"
output = "$root_gen_dir/chrome/browser/android/${target_name}.h"
exception_files = jni_exception_files
}
generate_jni_registration("chrome_jni_for_test_registration") {
testonly = true
target = ":chrome_public_apk_for_test"
target = ":chrome_public_base_module_java_for_test"
output = "$root_gen_dir/chrome/browser/android/${target_name}.h"
exception_files = jni_exception_files
}
generate_jni_registration("chrome_sync_shell_jni_registration") {
testonly = true
target = ":chrome_sync_shell_apk"
target = ":chrome_sync_shell_java"
output = "$root_gen_dir/chrome/browser/android/${target_name}.h"
exception_files = jni_exception_files
}
......@@ -1109,6 +1119,9 @@ if (!android_64bit_target_cpu ||
sources = [
"../browser/android/monochrome_entry_point.cc",
]
if (enable_vr) {
sources += [ "../browser/android/vr/register_jni_monochrome.cc" ]
}
deps = [
"//android_webview:common",
"//chrome:chrome_android_core",
......@@ -1154,17 +1167,62 @@ shared_library("chrome_sync_shell") {
if (chromium_linker_supported && use_lld) {
configs += [ "//build/config/android:lld_pack_relocations" ]
}
if (enable_vr) {
sources += [ "../browser/android/vr/register_jni.cc" ]
deps +=
[ "//chrome/browser/android/vr:jni_registration($default_toolchain)" ]
}
}
# Java libraries that go into each public chrome APK and base module. The chrome
# JNI registration is generated based on this target.
# TODO(tiborg): Remove the following three groups once we have a APK / module
# target that contain exactly the grouped java libraries.
java_group("chrome_public_base_module_java") {
deps = [
":app_hooks_java",
":chrome_java",
]
}
# Similar to chrome_public_base_module_java but for Java libraries that go into
# the public chrome test APK.
java_group("chrome_public_base_module_java_for_test") {
testonly = true
deps = [
":browser_java_test_support",
":chrome_public_base_module_java",
"//chrome/browser/android/metrics:ukm_utils_java",
"//components/heap_profiling:heap_profiling_java_test_support",
"//content/public/test/android:content_java_test_support",
"//third_party/android_tools:android_test_mock_java",
]
}
# Similar to chrome_public_base_module_java but for Java libraries that go into
# the chrome sync shell APK.
android_library("chrome_sync_shell_java") {
# This exists here rather than in chrome_sync_shell_test_apk for JNI
# registration to be able to find the native side functions.
java_files = [ "sync_shell/javatests/src/org/chromium/chrome/browser/sync/FakeServerHelper.java" ]
deps = [
":chrome_public_base_module_java",
# This exists here because com.google.protobuf.nano is needed in tests,
# but that code is stripped out via proguard. Adding this deps adds
# usages and prevents removal of the proto code.
"//components/sync:test_support_proto_java",
"//third_party/android_protobuf:protobuf_nano_javalib",
]
}
# Dependencies that are common to any chrome_public derivative targets, as well
# as to chrome_sync_shell_apk.
_chrome_public_and_sync_shell_shared_deps = [
":app_hooks_java",
":chrome_java",
":chrome_public_apk_resources",
":chrome_public_base_module_java",
":chrome_public_non_pak_assets",
":chrome_public_pak_assets",
"//base:base_java",
]
generate_jni("test_support_jni_headers") {
......@@ -1303,13 +1361,8 @@ chrome_public_common_apk_or_module_tmpl("chrome_public_apk_for_test") {
if (_add_unwind_tables_in_chrome_public_apk) {
shared_library_for_unwind_asset = "chromefortest"
}
deps = _chrome_public_and_sync_shell_shared_deps + [
":browser_java_test_support",
"//chrome/browser/android/metrics:ukm_utils_java",
"//components/heap_profiling:heap_profiling_java_test_support",
"//content/public/test/android:content_java_test_support",
"//third_party/android_tools:android_test_mock_java",
]
deps = _chrome_public_and_sync_shell_shared_deps +
[ ":chrome_public_base_module_java_for_test" ]
if (!is_java_debug) {
proguard_configs = [ "//chrome/android/java/apk_for_test.flags" ]
}
......@@ -1401,19 +1454,10 @@ chrome_public_common_apk_or_module_tmpl("chrome_sync_shell_apk") {
apk_name = "ChromeSyncShell"
shared_libraries = [ ":chrome_sync_shell" ]
# This exists here rather than in chrome_sync_shell_test_apk for JNI
# registration to be able to find the native side functions.
java_files = [ "sync_shell/javatests/src/org/chromium/chrome/browser/sync/FakeServerHelper.java" ]
deps =
_chrome_public_and_sync_shell_shared_deps + [
":chrome_sync_shell_apk_template_resources",
# This exists here because com.google.protobuf.nano is needed in tests,
# but that code is stripped out via proguard. Adding this deps adds
# usages and prevents removal of the proto code.
"//components/sync:test_support_proto_java",
"//third_party/android_protobuf:protobuf_nano_javalib",
]
deps = _chrome_public_and_sync_shell_shared_deps + [
":chrome_sync_shell_apk_template_resources",
":chrome_sync_shell_java",
]
}
chrome_public_test_apk_manifest =
......
......@@ -170,6 +170,10 @@ template("chrome_public_common_apk_or_module_tmpl") {
invoker.add_unwind_tables_in_apk) {
deps += [ ":$_unwind_asset" ]
}
if (enable_vr) {
deps += [ "//chrome/browser/android/vr:java" ]
}
}
}
......
......@@ -4,6 +4,9 @@
package org.chromium.chrome.browser.vr;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.chrome.R;
import java.util.ArrayList;
import java.util.List;
......@@ -11,6 +14,7 @@ import java.util.List;
* Instantiates the VR delegates. If the VR module is not available this provider will
* instantiate a fallback implementation.
*/
@JNINamespace("vr")
public class VrModuleProvider {
private static VrDelegateProvider sDelegateProvider;
private static final List<VrModeObserver> sVrModeObservers = new ArrayList<>();
......@@ -49,6 +53,12 @@ public class VrModuleProvider {
for (VrModeObserver observer : sVrModeObservers) observer.onExitVr();
}
// TODO(crbug.com/870055): JNI should be registered in the shared VR library's JNI_OnLoad
// function. Do this once we have a shared VR library.
/* package */ static void registerJni() {
nativeRegisterJni();
}
private static VrDelegateProvider getDelegateProvider() {
if (sDelegateProvider == null) {
try {
......@@ -65,4 +75,19 @@ public class VrModuleProvider {
}
private VrModuleProvider() {}
// TODO(crbug/870056): Move resources into VR DFM.
private void silenceLintErrors() {
int[] res = new int[] {
R.string.vr_shell_feedback_infobar_feedback_button,
R.string.vr_shell_feedback_infobar_description,
R.string.vr_services_check_infobar_install_text,
R.string.vr_services_check_infobar_update_text,
R.string.vr_services_check_infobar_install_button,
R.string.vr_services_check_infobar_update_button, R.anim.stay_hidden,
R.drawable.vr_services,
};
}
private static native void nativeRegisterJni();
}
......@@ -364,6 +364,7 @@ public class VrShellDelegate
* Called when the native library is first available.
*/
public static void onNativeLibraryAvailable() {
VrModuleProvider.registerJni();
nativeOnLibraryAvailable();
}
......
......@@ -1622,42 +1622,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/widget/textbubble/TextBubble.java",
]
chrome_vr_java_sources = [
"java/src/org/chromium/chrome/browser/component_updater/VrAssetsComponentInstaller.java",
"java/src/org/chromium/chrome/browser/vr/AndroidUiGestureTarget.java",
"java/src/org/chromium/chrome/browser/vr/AndroidVSyncHelper.java",
"java/src/org/chromium/chrome/browser/vr/keyboard/BuildConstants.java",
"java/src/org/chromium/chrome/browser/vr/keyboard/GvrKeyboardLoaderClient.java",
"java/src/org/chromium/chrome/browser/vr/keyboard/TextEditAction.java",
"java/src/org/chromium/chrome/browser/vr/keyboard/VrInputMethodManagerWrapper.java",
"java/src/org/chromium/chrome/browser/vr/EmptySniffingVrViewContainer.java",
"java/src/org/chromium/chrome/browser/vr/NoopCanvas.java",
"java/src/org/chromium/chrome/browser/vr/OnDispatchTouchEventCallback.java",
"java/src/org/chromium/chrome/browser/vr/VrAlertDialog.java",
"java/src/org/chromium/chrome/browser/vr/VrCancelAnimationActivity.java",
"java/src/org/chromium/chrome/browser/vr/VrCompositorSurfaceManager.java",
"java/src/org/chromium/chrome/browser/vr/VrCoreInfo.java",
"java/src/org/chromium/chrome/browser/vr/VrCoreVersionChecker.java",
"java/src/org/chromium/chrome/browser/vr/VrDaydreamApi.java",
"java/src/org/chromium/chrome/browser/vr/VrDelegateImpl.java",
"java/src/org/chromium/chrome/browser/vr/VrDelegateProviderImpl.java",
"java/src/org/chromium/chrome/browser/vr/VrDialog.java",
"java/src/org/chromium/chrome/browser/vr/VrDialogManager.java",
"java/src/org/chromium/chrome/browser/vr/VrFeedbackStatus.java",
"java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java",
"java/src/org/chromium/chrome/browser/vr/VrInputConnection.java",
"java/src/org/chromium/chrome/browser/vr/VrIntentUtils.java",
"java/src/org/chromium/chrome/browser/vr/VrModalPresenter.java",
"java/src/org/chromium/chrome/browser/vr/VrPopupWindow.java",
"java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java",
"java/src/org/chromium/chrome/browser/vr/VrShell.java",
"java/src/org/chromium/chrome/browser/vr/VrToast.java",
"java/src/org/chromium/chrome/browser/vr/VrToastManager.java",
"java/src/org/chromium/chrome/browser/vr/VrUiWidgetFactory.java",
"java/src/org/chromium/chrome/browser/vr/VrViewContainer.java",
"java/src/org/chromium/chrome/browser/vr/VrWindowAndroid.java",
]
chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/compositor/CompositorVisibilityTest.java",
"javatests/src/org/chromium/chrome/browser/AudioTest.java",
......
......@@ -33,6 +33,7 @@ static_library("vr_android") {
"mailbox_to_surface_bridge.h",
"metrics_util_android.cc",
"metrics_util_android.h",
"register_jni.h",
"scoped_gpu_trace.cc",
"scoped_gpu_trace.h",
"vr_controller.cc",
......@@ -43,6 +44,7 @@ static_library("vr_android") {
"vr_gl_thread.h",
"vr_input_connection.cc",
"vr_input_connection.h",
"vr_module_provider.cc",
"vr_shell.cc",
"vr_shell.h",
"vr_shell_delegate.cc",
......@@ -129,12 +131,66 @@ static_library("vr_android") {
}
}
android_library("java") {
java_files = [
"//chrome/android/java/src/org/chromium/chrome/browser/component_updater/VrAssetsComponentInstaller.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/AndroidUiGestureTarget.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/AndroidVSyncHelper.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/EmptySniffingVrViewContainer.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/BuildConstants.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/GvrKeyboardLoaderClient.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/TextEditAction.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/VrInputMethodManagerWrapper.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/NoopCanvas.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/OnDispatchTouchEventCallback.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrAlertDialog.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCancelAnimationActivity.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCompositorSurfaceManager.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCoreInfo.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCoreVersionChecker.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDaydreamApi.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDelegateImpl.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDelegateProviderImpl.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDialog.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDialogManager.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrFeedbackStatus.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrInputConnection.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrIntentUtils.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrModalPresenter.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrPopupWindow.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrToast.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrToastManager.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrUiWidgetFactory.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrViewContainer.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrWindowAndroid.java",
]
classpath_deps = [
"//base:base_java",
"//chrome/android:chrome_java",
"//components/policy/android:policy_java",
"//content/public/android:content_java",
"//third_party/android_tools:android_arch_lifecycle_common_java",
"//third_party/android_tools:android_arch_lifecycle_runtime_java",
"//third_party/android_tools:android_support_annotations_java",
"//third_party/android_tools:android_support_v7_appcompat_java",
"//third_party/gvr-android-keyboard:kb_java",
"//third_party/gvr-android-sdk:gvr_common_java",
"//ui/android:ui_full_java",
"//ui/android:ui_utils_java",
]
}
generate_jni("vr_jni_headers") {
sources = [
"//chrome/android/java/src/org/chromium/chrome/browser/vr/AndroidUiGestureTarget.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/AndroidVSyncHelper.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCoreInfo.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrInputConnection.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java",
"//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/GvrKeyboardLoaderClient.java",
......@@ -151,3 +207,11 @@ if (enable_arcore) {
jni_package = "vr"
}
}
if (current_toolchain == default_toolchain) {
generate_jni_registration("jni_registration") {
target = ":java"
output = "$target_gen_dir/${target_name}.h"
namespace = "vr"
}
}
// Copyright 2018 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.
#include "chrome/browser/android/vr/register_jni.h"
#include "base/android/jni_utils.h"
#include "chrome/browser/android/vr/jni_registration.h"
namespace vr {
bool RegisterJni(JNIEnv* env) {
if (!base::android::IsSelectiveJniRegistrationEnabled(env) &&
!vr::RegisterNonMainDexNatives(env)) {
return false;
}
if (!vr::RegisterMainDexNatives(env)) {
return false;
}
return true;
}
} // namespace vr
// Copyright 2018 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.
#ifndef CHROME_BROWSER_ANDROID_VR_REGISTER_JNI_H_
#define CHROME_BROWSER_ANDROID_VR_REGISTER_JNI_H_
#include <jni.h>
namespace vr {
bool RegisterJni(JNIEnv* env);
} // namespace vr
#endif // CHROME_BROWSER_ANDROID_VR_REGISTER_JNI_H_
// Copyright 2018 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.
#include "chrome/browser/android/vr/register_jni.h"
namespace vr {
bool RegisterJni(JNIEnv* env) {
return true;
}
} // namespace vr
// Copyright 2018 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.
#include "chrome/browser/android/vr/register_jni.h"
#include "jni/VrModuleProvider_jni.h"
namespace vr {
static void JNI_VrModuleProvider_RegisterJni(
JNIEnv* env,
const base::android::JavaParamRef<jclass>& clazz) {
CHECK(RegisterJni(env));
}
} // namespace vr
......@@ -186,6 +186,10 @@ static_library("test_support") {
"base/test_browser_window.cc",
"base/test_browser_window.h",
]
if (enable_vr) {
# Add a dummy implementation of RegisterJni to satisfy the linker.
sources += [ "../browser/android/vr/register_jni_monochrome.cc" ]
}
} else {
public_deps += [
"//components/ukm:test_support",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment