[go: up one dir, main page]

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);
     }