Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(356)

Unified Diff: base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java

Issue 2247143004: Remove app context init from LibraryLoader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix per review. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
index 454b167c9e20559b6fbefbec71f96945a7945c90..9b0596784e29c0d31cf55910a6cd41c737656a8d 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -129,18 +129,14 @@ public class LibraryLoader {
/**
* This method blocks until the library is fully loaded and initialized.
- *
- * @param context The context in which the method is called.
*/
- public void ensureInitialized(Context context) throws ProcessInitException {
- // TODO(wnwen): Move this call appropriately down to the tests that need it.
- ContextUtils.initApplicationContext(context.getApplicationContext());
+ public void ensureInitialized() throws ProcessInitException {
synchronized (sLock) {
if (mInitialized) {
// Already initialized, nothing to do.
return;
}
- loadAlreadyLocked(context);
+ loadAlreadyLocked(ContextUtils.getApplicationContext());
initializeAlreadyLocked();
}
}
@@ -159,13 +155,26 @@ public class LibraryLoader {
* this is called on will be the thread that runs the native code's static initializers.
* See the comment in doInBackground() for more considerations on this.
*
- * @param context The context the code is running.
- *
* @throws ProcessInitException if the native library failed to load.
*/
- public void loadNow(Context context) throws ProcessInitException {
+ public void loadNow() throws ProcessInitException {
+ loadNowOverrideApplicationContext(ContextUtils.getApplicationContext());
+ }
+
+ /**
+ * Override kept for callers that need to load from a different app context. Do not use unless
+ * specifically required to load from another context that is not the current process's app
+ * context.
+ *
+ * @param appContext The overriding app context to be used to load libraries.
+ * @throws ProcessInitException if the native library failed to load with this context.
+ */
+ public void loadNowOverrideApplicationContext(Context appContext) throws ProcessInitException {
synchronized (sLock) {
- loadAlreadyLocked(context);
+ if (mLoaded && appContext != ContextUtils.getApplicationContext()) {
+ throw new IllegalStateException("Attempt to load again from alternate context.");
+ }
+ loadAlreadyLocked(appContext);
}
}
@@ -250,7 +259,7 @@ public class LibraryLoader {
// Invoke either Linker.loadLibrary(...) or System.loadLibrary(...), triggering
// JNI_OnLoad in native code
- private void loadAlreadyLocked(Context context) throws ProcessInitException {
+ private void loadAlreadyLocked(Context appContext) throws ProcessInitException {
try {
if (!mLoaded) {
assert !mInitialized;
@@ -276,7 +285,7 @@ public class LibraryLoader {
String libFilePath = System.mapLibraryName(library);
if (Linker.isInZipFile()) {
// Load directly from the APK.
- zipFilePath = context.getApplicationInfo().sourceDir;
+ zipFilePath = appContext.getApplicationInfo().sourceDir;
Log.i(TAG, "Loading " + library + " from within " + zipFilePath);
} else {
// The library is in its own file.
@@ -290,7 +299,7 @@ public class LibraryLoader {
linker.finishLibraryLoad();
} else {
if (sLibraryPreloader != null) {
- mLibraryPreloaderStatus = sLibraryPreloader.loadLibrary(context);
+ mLibraryPreloaderStatus = sLibraryPreloader.loadLibrary(appContext);
}
// Load libraries using the system linker.
for (String library : NativeLibraries.LIBRARIES) {
@@ -378,18 +387,19 @@ public class LibraryLoader {
}
// Called after all native initializations are complete.
- public void onNativeInitializationComplete(Context context) {
- recordBrowserProcessHistogram(context);
+ public void onNativeInitializationComplete() {
+ recordBrowserProcessHistogram();
}
// Record Chromium linker histogram state for the main browser process. Called from
// onNativeInitializationComplete().
- private void recordBrowserProcessHistogram(Context context) {
+ private void recordBrowserProcessHistogram() {
if (Linker.getInstance().isUsed()) {
- nativeRecordChromiumAndroidLinkerBrowserHistogram(mIsUsingBrowserSharedRelros,
- mLoadAtFixedAddressFailed,
- getLibraryLoadFromApkStatus(context),
- mLibraryLoadTimeMs);
+ nativeRecordChromiumAndroidLinkerBrowserHistogram(
+ mIsUsingBrowserSharedRelros,
+ mLoadAtFixedAddressFailed,
+ getLibraryLoadFromApkStatus(),
+ mLibraryLoadTimeMs);
}
if (sLibraryPreloader != null) {
nativeRecordLibraryPreloaderBrowserHistogram(mLibraryPreloaderStatus);
@@ -398,7 +408,7 @@ public class LibraryLoader {
// Returns the device's status for loading a library directly from the APK file.
// This method can only be called when the Chromium linker is used.
- private int getLibraryLoadFromApkStatus(Context context) {
+ private int getLibraryLoadFromApkStatus() {
assert Linker.getInstance().isUsed();
if (mLibraryWasLoadedFromApk) {

Powered by Google App Engine
This is Rietveld 408576698