Reland "Fix module install"
This is a reland of 801cc00b4ec48cfcfbbd48a441d59d48892f7c48 that calls
ModuleInstaller on the correct thread.
Original change's description:
> Fix module install
>
> Previously, we created a SplitInstallManager _before_ calling
> SplitCompat.install(-), which breaks the module install flow on Android
> pre-Q.
>
> Bug: b/133669491
> Change-Id: I0b317732ed364a592047eeb7387c74dd1ea1b258
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1646903
> Commit-Queue: Tibor Goldschwendt <tiborg@chromium.org>
> Auto-Submit: Tibor Goldschwendt <tiborg@chromium.org>
> Reviewed-by: Christopher Grant <cjgrant@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#668416}
(cherry picked from commit a5d34eb5307d88db26e2b33e1668e35b09fb222b)
Bug: b/133669491
Bug: 966870
Change-Id: I16ae3dcbdd2217fa186371cd1db7b5f57caf9484
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1661798
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Commit-Queue: Tibor Goldschwendt <tiborg@chromium.org>
Auto-Submit: Tibor Goldschwendt <tiborg@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#669785}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1662927
Reviewed-by: Tibor Goldschwendt <tiborg@chromium.org>
Cr-Commit-Position: refs/branch-heads/3809@{#409}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
index 222725ed..53ee809 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
@@ -30,8 +30,6 @@
import org.chromium.base.memory.MemoryPressureMonitor;
import org.chromium.base.multidex.ChromiumMultiDexInstaller;
import org.chromium.base.task.AsyncTask;
-import org.chromium.base.task.PostTask;
-import org.chromium.base.task.TaskTraits;
import org.chromium.build.BuildHooks;
import org.chromium.build.BuildHooksAndroid;
import org.chromium.build.BuildHooksConfig;
@@ -140,7 +138,7 @@
// Record via UMA all modules that have been requested and are currently installed. This
// will tell us the install penetration of each module over time.
- PostTask.postTask(TaskTraits.BEST_EFFORT, ModuleInstaller::recordModuleAvailability);
+ ModuleInstaller.recordModuleAvailability();
}
// Write installed modules to crash keys. This needs to be done as early as possible so that
diff --git a/components/module_installer/android/java/src-impl/org/chromium/components/module_installer/ModuleInstaller.java b/components/module_installer/android/java/src-impl/org/chromium/components/module_installer/ModuleInstaller.java
index c87f1d36..d01bc2c 100644
--- a/components/module_installer/android/java/src-impl/org/chromium/components/module_installer/ModuleInstaller.java
+++ b/components/module_installer/android/java/src-impl/org/chromium/components/module_installer/ModuleInstaller.java
@@ -40,6 +40,7 @@
/** Needs to be called before trying to access a module. */
public static void init() {
+ if (sSplitCompatted) return;
// SplitCompat.install may copy modules into Chrome's internal folder or clean them up.
try (StrictModeContext unused = StrictModeContext.allowDiskWrites()) {
SplitCompat.install(ContextUtils.getApplicationContext());
diff --git a/components/module_installer/android/java/src-impl/org/chromium/components/module_installer/PlayCoreModuleInstallerBackend.java b/components/module_installer/android/java/src-impl/org/chromium/components/module_installer/PlayCoreModuleInstallerBackend.java
index 447be85..8b7a346 100644
--- a/components/module_installer/android/java/src-impl/org/chromium/components/module_installer/PlayCoreModuleInstallerBackend.java
+++ b/components/module_installer/android/java/src-impl/org/chromium/components/module_installer/PlayCoreModuleInstallerBackend.java
@@ -91,6 +91,8 @@
/** Records via UMA all modules that have been requested and are currently installed. */
public static void recordModuleAvailability() {
+ // MUST call init before creating a SplitInstallManager.
+ ModuleInstaller.init();
SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
Set<String> requestedModules = new HashSet<>();
requestedModules.addAll(
@@ -124,6 +126,8 @@
public PlayCoreModuleInstallerBackend(OnFinishedListener listener) {
super(listener);
+ // MUST call init before creating a SplitInstallManager.
+ ModuleInstaller.init();
mManager = SplitInstallManagerFactory.create(ContextUtils.getApplicationContext());
mManager.registerListener(this);
}