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

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

Issue 217283005: [Android] Fix a few issues related to old lib deletion. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address reviewer's comments and rebase Created 6 years, 9 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 c3b3b35fc5ec0b8b6e4e9b5f868d88a5ddd8901b..22513810ec9cf90dd3f45453f3b604dc7c355779 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
@@ -47,14 +47,20 @@ public class LibraryLoader {
// The flag is used to report UMA stats later.
private static boolean sNativeLibraryHackWasUsed = false;
+ // TODO(fqian): Remove this method once downstream CL is
+ // committed.
+ public static void ensureInitialized(Context context) throws ProcessInitException {
+ ensureInitialized(context, true);
+ }
/**
- * TODO: http://crbug.com/354655
- * remove this method once WebViewChromiumFactoryProvider.java
- * changes the call to ensureInitialized(null).
+ * The same as ensureInitialized(null, false), should only be called
+ * by non-browser processes.
+ *
+ * @throws ProcessInitException
*/
public static void ensureInitialized() throws ProcessInitException {
- ensureInitialized(null);
+ ensureInitialized(null, false);
}
/**
@@ -70,14 +76,18 @@ public class LibraryLoader {
* will extract the native libraries from APK. This is a hack used to
* work around some Sony devices with the following platform bug:
* http://b/13216167.
+ *
+ * @param inBrowserProcess The caller indicates it is running in the browser
+ * process, so the code will perform browser-specific file cleanup.
*/
- public static void ensureInitialized(Context context) throws ProcessInitException {
+ public static void ensureInitialized(Context context, boolean inBrowserProcess)
+ throws ProcessInitException {
synchronized (sLock) {
if (sInitialized) {
// Already initialized, nothing to do.
return;
}
- loadAlreadyLocked(context);
+ loadAlreadyLocked(context, inBrowserProcess);
initializeAlreadyLocked(CommandLine.getJavaSwitchesOrNull());
}
}
@@ -92,17 +102,32 @@ public class LibraryLoader {
}
/**
+ * The same as loadNow(null, false), should only be called by
+ * non-browser process.
+ *
+ * @throws ProcessInitException
+ */
+ public static void loadNow() throws ProcessInitException {
+ loadNow(null, false);
+ }
+
+ /**
* Loads the library and blocks until the load completes. The caller is responsible
* for subsequently calling ensureInitialized().
* May be called on any thread, but should only be called once. Note the thread
* 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, or null if it doesn't have one.
+ * @param inBrowserProcess The flag tells whether the code is running in
+ * the browser process.
cjhopman 2014/04/02 22:24:24 It's unclear (from this documentation) what this f
Feng Qian 2014/04/03 00:50:42 ok, I am fine with renaming. On 2014/04/02 22:24:
+ *
* @throws ProcessInitException if the native library failed to load.
*/
- public static void loadNow(Context context) throws ProcessInitException {
+ public static void loadNow(Context context, boolean inBrowserProcess)
+ throws ProcessInitException {
synchronized (sLock) {
- loadAlreadyLocked(context);
+ loadAlreadyLocked(context, inBrowserProcess);
}
}
@@ -120,7 +145,8 @@ public class LibraryLoader {
}
// Invoke System.loadLibrary(...), triggering JNI_OnLoad in native code
- private static void loadAlreadyLocked(Context context) throws ProcessInitException {
+ private static void loadAlreadyLocked(Context context, boolean inBrowserProcess)
+ throws ProcessInitException {
try {
if (!sLoaded) {
assert !sInitialized;
@@ -130,6 +156,7 @@ public class LibraryLoader {
if (useChromiumLinker) Linker.prepareLibraryLoad();
+ boolean workaroundLibrariesDeleted = false;
for (String library : NativeLibraries.LIBRARIES) {
Log.i(TAG, "Loading: " + library);
if (useChromiumLinker) {
@@ -137,9 +164,12 @@ public class LibraryLoader {
} else {
try {
System.loadLibrary(library);
- if (context != null) {
+ if (context != null
+ && inBrowserProcess
boliu 2014/04/03 01:03:22 Webview technically only has the browser process,
+ && !workaroundLibrariesDeleted) {
LibraryLoaderHelper.deleteWorkaroundLibrariesAsynchronously(
context);
+ workaroundLibrariesDeleted = true;
cjhopman 2014/04/02 22:24:24 Since we only want this to happen once, how about
Feng Qian 2014/04/03 00:50:42 The code is not just run when sNativeLibraryHackWa
}
} catch (UnsatisfiedLinkError e) {
if (context != null

Powered by Google App Engine
This is Rietveld 408576698