Chromium Code Reviews| 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..a6f6a546dcb890d96198a0685727c685c196df4c 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 { |
| + if (mLoaded && appContext != ContextUtils.getApplicationContext()) { |
|
Ted C
2016/09/28 17:27:46
should this be in the synchronized block since tha
Peter Wen
2016/09/29 18:41:38
Done. Thanks!
|
| + throw new IllegalStateException("Duplicate attempt to load from alternate context."); |
| + } |
| synchronized (sLock) { |
| - loadAlreadyLocked(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) { |