diff options
author | Torne (Richard Coles) <torne@google.com> | 2014-08-08 18:24:12 +0100 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2014-08-08 18:40:51 +0100 |
commit | 27cb0d22a839f9fc132ae6b4e7c059c75a1826e1 (patch) | |
tree | c42409e38bf3cf6644610e13247136967b60fe8d | |
parent | 6d9fe654b5da2f2b7751b6affae535f4ddfa7f64 (diff) | |
download | frameworks_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
-rw-r--r-- | core/java/android/webkit/WebViewFactory.java | 56 |
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); } |