summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2014-08-08 18:24:12 +0100
committerTorne (Richard Coles) <torne@google.com>2014-08-08 18:40:51 +0100
commit27cb0d22a839f9fc132ae6b4e7c059c75a1826e1 (patch)
treec42409e38bf3cf6644610e13247136967b60fe8d /core/java
parent6d9fe654b5da2f2b7751b6affae535f4ddfa7f64 (diff)
downloadframeworks_base-27cb0d22a839f9fc132ae6b4e7c059c75a1826e1.zip
frameworks_base-27cb0d22a839f9fc132ae6b4e7c059c75a1826e1.tar.gz
frameworks_base-27cb0d22a839f9fc132ae6b4e7c059c75a1826e1.tar.bz2
Make WebViewFactory more robust.
Catch and discard any exception thrown in getWebViewNativeLibraryPaths to avoid the system server crashing if there is something wrong with the update APK. prepareWebViewInSystemServer(nativePaths) is safe to call even if nativePaths is null or invalid, and must be called to ensure that any process waiting for relro processing is unblocked. Bug: 16894062 Change-Id: I76c759bebcb7c4643fb50979376afea764c859c4
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/webkit/WebViewFactory.java56
1 files changed, 30 insertions, 26 deletions
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index d93ca2c..23894ee 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -175,7 +175,9 @@ public final class WebViewFactory {
String[] nativePaths = null;
try {
nativePaths = getWebViewNativeLibraryPaths();
- } catch (PackageManager.NameNotFoundException e) {
+ } catch (Throwable t) {
+ // Log and discard errors at this stage as we must not crash the system server.
+ Log.e(LOGTAG, "error preparing webview native library", t);
}
prepareWebViewInSystemServer(nativePaths);
}
@@ -201,35 +203,37 @@ public final class WebViewFactory {
String[] nativeLibs = null;
try {
nativeLibs = WebViewFactory.getWebViewNativeLibraryPaths();
- } catch (PackageManager.NameNotFoundException e) {
- }
-
- if (nativeLibs != null) {
- long newVmSize = 0L;
-
- for (String path : nativeLibs) {
- if (DEBUG) Log.d(LOGTAG, "Checking file size of " + path);
- if (path == null) continue;
- File f = new File(path);
- if (f.exists()) {
- long length = f.length();
- if (length > newVmSize) {
- newVmSize = length;
+ if (nativeLibs != null) {
+ long newVmSize = 0L;
+
+ for (String path : nativeLibs) {
+ if (DEBUG) Log.d(LOGTAG, "Checking file size of " + path);
+ if (path == null) continue;
+ File f = new File(path);
+ if (f.exists()) {
+ long length = f.length();
+ if (length > newVmSize) {
+ newVmSize = length;
+ }
}
}
- }
- if (DEBUG) {
- Log.v(LOGTAG, "Based on library size, need " + newVmSize +
- " bytes of address space.");
+ if (DEBUG) {
+ Log.v(LOGTAG, "Based on library size, need " + newVmSize +
+ " bytes of address space.");
+ }
+ // The required memory can be larger than the file on disk (due to .bss), and an
+ // upgraded version of the library will likely be larger, so always attempt to
+ // reserve twice as much as we think to allow for the library to grow during this
+ // boot cycle.
+ newVmSize = Math.max(2 * newVmSize, CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
+ Log.d(LOGTAG, "Setting new address space to " + newVmSize);
+ SystemProperties.set(CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
+ Long.toString(newVmSize));
}
- // The required memory can be larger than the file on disk (due to .bss), and an
- // upgraded version of the library will likely be larger, so always attempt to reserve
- // twice as much as we think to allow for the library to grow during this boot cycle.
- newVmSize = Math.max(2 * newVmSize, CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
- Log.d(LOGTAG, "Setting new address space to " + newVmSize);
- SystemProperties.set(CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
- Long.toString(newVmSize));
+ } catch (Throwable t) {
+ // Log and discard errors at this stage as we must not crash the system server.
+ Log.e(LOGTAG, "error preparing webview native library", t);
}
prepareWebViewInSystemServer(nativeLibs);
}