summaryrefslogtreecommitdiff
path: root/chromium/components/module_installer
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/module_installer')
-rw-r--r--chromium/components/module_installer/android/BUILD.gn2
-rw-r--r--chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/FakeEngine.java15
-rw-r--r--chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/logger/SplitAvailabilityLogger.java2
-rw-r--r--chromium/components/module_installer/android/module_desc_java.gni20
-rwxr-xr-xchromium/components/module_installer/android/module_desc_java.py87
5 files changed, 73 insertions, 53 deletions
diff --git a/chromium/components/module_installer/android/BUILD.gn b/chromium/components/module_installer/android/BUILD.gn
index d072a62d10e..00d7d2a8194 100644
--- a/chromium/components/module_installer/android/BUILD.gn
+++ b/chromium/components/module_installer/android/BUILD.gn
@@ -59,6 +59,8 @@ junit_binary("module_installer_junit_tests") {
"//base:base_java",
"//base:base_java_test_support",
"//base:base_junit_test_support",
+ "//third_party/google_android_play_core:com_google_android_play_core_java",
+ "//third_party/hamcrest:hamcrest_java",
]
}
diff --git a/chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/FakeEngine.java b/chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/FakeEngine.java
index 52c3dae21b8..c129ce772c0 100644
--- a/chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/FakeEngine.java
+++ b/chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/FakeEngine.java
@@ -36,8 +36,8 @@ class FakeEngine extends SplitCompatEngine {
}
/**
- * Copies {MODULES_SRC_DIRECTORY_PATH}/|moduleName|.apk to the folder where SplitCompat expects
- * downloaded modules to be. Then calls SplitCompat to emulate the module.
+ * Copies {MODULES_SRC_DIRECTORY_PATH}/|package name|/|moduleName|.apk to the folder where
+ * SplitCompat expects downloaded modules to be. Then calls SplitCompat to emulate the module.
*
* We copy the module so that this works on non-rooted devices. The path SplitCompat expects
* module to be is not accessible without rooting.
@@ -65,10 +65,15 @@ class FakeEngine extends SplitCompatEngine {
// Get list of all files at path where SplitCompat looks for downloaded modules.
// May change in future releases of the Play Core SDK.
- File srcModuleDir = new File(MODULES_SRC_DIRECTORY_PATH);
+ File srcModuleDir = new File(MODULES_SRC_DIRECTORY_PATH, context.getPackageName());
if (!srcModuleDir.exists()) {
- Log.e(TAG, "Modules source directory does not exist");
- return false;
+ // As fallback, check the parent directory (this is the old behavior).
+ // TODO(huangs): Delete this fallback once catapult/.../device_utils.py is updated.
+ srcModuleDir = new File(MODULES_SRC_DIRECTORY_PATH);
+ if (!srcModuleDir.exists()) {
+ Log.e(TAG, "Modules source directory does not exist");
+ return false;
+ }
}
if (!srcModuleDir.canRead()) {
Log.e(TAG, "Cannot read modules source directory");
diff --git a/chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/logger/SplitAvailabilityLogger.java b/chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/logger/SplitAvailabilityLogger.java
index a6274fe5e85..d0b2cf84a81 100644
--- a/chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/logger/SplitAvailabilityLogger.java
+++ b/chromium/components/module_installer/android/java/src/org/chromium/components/module_installer/logger/SplitAvailabilityLogger.java
@@ -96,7 +96,7 @@ public class SplitAvailabilityLogger {
* @param moduleName The module name.
*/
public void storeRequestStart(String moduleName) {
- assert !mInstallTimesMap.containsKey(moduleName);
+ // Ignore previously failed requests (orphan keys).
boolean moduleRequested = storeModuleRequested(moduleName, ONDEMAND_REQ_PREV);
mInstallTimesMap.put(moduleName, new InstallTimes(moduleRequested));
}
diff --git a/chromium/components/module_installer/android/module_desc_java.gni b/chromium/components/module_installer/android/module_desc_java.gni
index 4aba28b6516..edf39d98653 100644
--- a/chromium/components/module_installer/android/module_desc_java.gni
+++ b/chromium/components/module_installer/android/module_desc_java.gni
@@ -23,32 +23,36 @@ import("//build/config/python.gni")
template("module_desc_java") {
_target_name = target_name
- _libraries = "${target_gen_dir}/${_target_name}.libraries"
- _rebased_libraries = rebase_path(_libraries, root_out_dir)
+ _libraries_file = "${target_gen_dir}/${_target_name}.libraries"
generated_file("${_target_name}__libraries") {
if (defined(invoker.shared_libraries)) {
deps = invoker.shared_libraries
}
- outputs = [ _libraries ]
+ outputs = [ _libraries_file ]
data_keys = [ "shared_libraries" ]
walk_keys = [ "shared_libraries_barrier" ]
rebase = root_build_dir
- output_conversion = "json"
+ output_conversion = "value"
}
_srcjar = "$target_gen_dir/${_target_name}__srcjar.srcjar"
action_with_pydeps("${_target_name}__srcjar") {
script = "//components/module_installer/android/module_desc_java.py"
- deps = [ ":${_target_name}__libraries" ]
- inputs = [ _libraries ]
outputs = [ _srcjar ]
+
+ # Do not add a dep on the generated_file target in order to avoid having
+ # to build the native libraries before this target. The dependency is
+ # instead captured via a depfile.
+ depfile = "$target_gen_dir/$target_name.d"
args = [
"--module",
invoker.module_name,
- "--libraries",
- "@FileArg($_rebased_libraries)",
+ "--libraries-file",
+ rebase_path(_libraries_file, root_out_dir),
"--output",
rebase_path(_srcjar, root_out_dir),
+ "--depfile",
+ rebase_path(depfile, root_out_dir),
]
if (defined(invoker.load_native_on_get_impl) &&
diff --git a/chromium/components/module_installer/android/module_desc_java.py b/chromium/components/module_installer/android/module_desc_java.py
index 36b0b2f762c..6c74bb4e0bb 100755
--- a/chromium/components/module_installer/android/module_desc_java.py
+++ b/chromium/components/module_installer/android/module_desc_java.py
@@ -48,45 +48,54 @@ public class ModuleDescriptor_{MODULE} implements ModuleDescriptor {{
def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('--module', required=True, help='The module name.')
- parser.add_argument(
- '--libraries', required=True, help='GN list of native library paths.')
- parser.add_argument('--paks', help='GN list of PAK file paths')
- parser.add_argument(
- '--output', required=True, help='Path to the generated srcjar file.')
- parser.add_argument('--load-native-on-get-impl', action='store_true',
- default=False,
- help='Load module automatically on calling Module.getImpl().')
- options = parser.parse_args(build_utils.ExpandFileArgs(sys.argv[1:]))
- options.libraries = build_utils.ParseGnList(options.libraries)
- options.paks = build_utils.ParseGnList(options.paks)
-
- libraries = []
- for path in options.libraries:
- path = path.strip()
- filename = os.path.split(path)[1]
- assert filename.startswith('lib')
- assert filename.endswith('.so')
- # Remove lib prefix and .so suffix.
- libraries += [filename[3:-3]]
- paks = options.paks if options.paks else []
-
- format_dict = {
- 'MODULE': options.module,
- 'LIBRARIES': ','.join(['"%s"' % l for l in libraries]),
- 'PAKS': ','.join(['"%s"' % os.path.basename(p) for p in paks]),
- 'LOAD_NATIVE_ON_GET_IMPL': (
- 'true' if options.load_native_on_get_impl else 'false'),
- }
- with build_utils.AtomicOutput(options.output) as f:
- with zipfile.ZipFile(f.name, 'w') as srcjar_file:
- build_utils.AddToZipHermetic(
- srcjar_file,
- 'org/chromium/components/module_installer/builder/'
- 'ModuleDescriptor_%s.java' % options.module,
- data=_TEMPLATE.format(**format_dict))
+ parser = argparse.ArgumentParser()
+ build_utils.AddDepfileOption(parser)
+ parser.add_argument('--module', required=True, help='The module name.')
+ parser.add_argument('--libraries-file',
+ required=True,
+ help='Path to file with GN list of library paths')
+ parser.add_argument('--paks', help='GN list of PAK file paths')
+ parser.add_argument(
+ '--output', required=True, help='Path to the generated srcjar file.')
+ parser.add_argument('--load-native-on-get-impl', action='store_true',
+ default=False,
+ help='Load module automatically on calling Module.getImpl().')
+ options = parser.parse_args()
+ options.paks = build_utils.ParseGnList(options.paks)
+
+ with open(options.libraries_file) as f:
+ libraries_list = build_utils.ParseGnList(f.read())
+
+ libraries = []
+ for path in libraries_list:
+ path = path.strip()
+ filename = os.path.split(path)[1]
+ assert filename.startswith('lib')
+ assert filename.endswith('.so')
+ # Remove lib prefix and .so suffix.
+ libraries += [filename[3:-3]]
+ paks = options.paks if options.paks else []
+
+ format_dict = {
+ 'MODULE': options.module,
+ 'LIBRARIES': ','.join(['"%s"' % l for l in libraries]),
+ 'PAKS': ','.join(['"%s"' % os.path.basename(p) for p in paks]),
+ 'LOAD_NATIVE_ON_GET_IMPL': (
+ 'true' if options.load_native_on_get_impl else 'false'),
+ }
+ with build_utils.AtomicOutput(options.output) as f:
+ with zipfile.ZipFile(f.name, 'w') as srcjar_file:
+ build_utils.AddToZipHermetic(
+ srcjar_file,
+ 'org/chromium/components/module_installer/builder/'
+ 'ModuleDescriptor_%s.java' % options.module,
+ data=_TEMPLATE.format(**format_dict))
+
+ if options.depfile:
+ build_utils.WriteDepfile(options.depfile,
+ options.output,
+ inputs=[options.libraries_file])
if __name__ == '__main__':
- sys.exit(main())
+ sys.exit(main())