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

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

Issue 869593002: Skip direct map from apk check for pre-KitKat Samsung. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update for review feedback Created 5 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/android/java/src/org/chromium/base/library_loader/Linker.java
diff --git a/base/android/java/src/org/chromium/base/library_loader/Linker.java b/base/android/java/src/org/chromium/base/library_loader/Linker.java
index dfcc14156bbdc857e8d1efea52ea498fafc44d24..12c76f38401611188ecec2bdd38c17018d6475c6 100644
--- a/base/android/java/src/org/chromium/base/library_loader/Linker.java
+++ b/base/android/java/src/org/chromium/base/library_loader/Linker.java
@@ -16,9 +16,13 @@ import org.chromium.base.SysUtils;
import org.chromium.base.ThreadUtils;
import java.io.FileNotFoundException;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import javax.annotation.Nullable;
@@ -190,6 +194,28 @@ public class Linker {
// for testing by calling setMemoryDeviceConfig().
private static int sMemoryDeviceConfig = MEMORY_DEVICE_CONFIG_INIT;
+ // List of devices for which we suppress the test for support for mapping
+ // the APK file with executable permission. This test triggers a warning
+ // on some devices. Devices must be listed in all uppercase only, on the
+ // working assumption that no two distinct actual devices would have model
+ // strings that differ only in character case.
+ //
+ // For more, see:
+ // https://code.google.com/p/chromium/issues/detail?id=448084
+ private static final String[] MAP_CHECK_BLACKLIST = {
+ "SCH-P709", "GT-I9158", "GT-I9152", "GT-I9150", "GT-I9200X",
+ "SGH-M819N", "SCH-R960", "SPH-L600", "SGH-I527M", "SGH-I527",
+ "SCH-P729", "SHV-E310L", "SHV-E310S", "SHV-E310K", "GT-I9208",
+ "GT-I9205", "GT-I9200"};
+
+ // The blacklist is only used if the OS version code indicates that it
+ // pre-dates an expiry version code.
+ private static final int MAP_CHECK_BLACKLIST_EXPIRY =
+ android.os.Build.VERSION_CODES.KITKAT;
Andrew Hayden (chromium.org) 2015/01/23 14:59:51 I don't think you can use this on ICS, right? How
simonb (inactive) 2015/01/23 16:03:19 Compile-time constants should be okay. From: htt
+
+ // Lookup set, lazy-initialized from the MAP_CHECK_BLACKLIST array.
+ private static Set<String> sMapCheckBlacklist = null;
+
// Becomes true after linker initialization.
private static boolean sInitialized = false;
@@ -846,13 +872,37 @@ public class Linker {
public static boolean checkMapExecSupport(String apkFile) {
assert apkFile != null;
- // https://code.google.com/p/chromium/issues/detail?id=448084
- // Do not check if the device is Samsung Mega.
+ // If the android build version is before a known good release, check
+ // the blacklist for the build model. If the model is listed then
+ // we skip the check for mmap exec support and return false. This avoids
+ // triggering a warning on these devices. The version check is included
+ // because these devices do not show the warning on later OS builds.
+ //
+ // Uses a case-insensitive lookup to ensure nothing is missed. No two
+ // devices will differ in model character case only. We ensure that the
+ // blacklist is populated with uppercased device names.
+ //
+ // For more, see:
+ // https://code.google.com/p/chromium/issues/detail?id=448084
final String model = android.os.Build.MODEL;
- if (model != null && model.equals("GT-I9205")) {
- if (DEBUG) Log.i(TAG, "checkMapExecSupport: model is '" + model
- + "', returning false");
- return false;
+ final int version = android.os.Build.VERSION.SDK_INT;
+
+ if (model != null && version < MAP_CHECK_BLACKLIST_EXPIRY) {
+ synchronized (Linker.class) {
+ // Initialize the blacklist lookup set before first use.
+ if (sMapCheckBlacklist == null) {
+ if (DEBUG) Log.i(TAG, "checkMapExecSupport: initializing blacklist");
+ final List<String> list = Arrays.asList(MAP_CHECK_BLACKLIST);
+ sMapCheckBlacklist = new HashSet<String>(list);
+ }
+ }
+
+ // Search the blacklist for the model reported by the OS.
+ if (sMapCheckBlacklist.contains(model.toUpperCase())) {
+ if (DEBUG) Log.i(TAG, "checkMapExecSupport: " + model
+ + ": model is blacklisted, returning false");
+ return false;
+ }
}
synchronized (Linker.class) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698