Merge "Load WebView even if WebView relro creation times out." into nyc-dev

This commit is contained in:
Gustav Sennton
2016-05-24 10:39:31 +00:00
committed by Android (Google) Code Review
2 changed files with 16 additions and 5 deletions

View File

@@ -142,13 +142,17 @@ public final class WebViewFactory {
public static int loadWebViewNativeLibraryFromPackage(String packageName, public static int loadWebViewNativeLibraryFromPackage(String packageName,
ClassLoader clazzLoader) { ClassLoader clazzLoader) {
int ret = waitForProviderAndSetPackageInfo(); int ret = waitForProviderAndSetPackageInfo();
if (ret != LIBLOAD_SUCCESS) { if (ret != LIBLOAD_SUCCESS && ret != LIBLOAD_FAILED_WAITING_FOR_RELRO) {
return ret; return ret;
} }
if (!sPackageInfo.packageName.equals(packageName)) if (!sPackageInfo.packageName.equals(packageName))
return LIBLOAD_WRONG_PACKAGE_NAME; return LIBLOAD_WRONG_PACKAGE_NAME;
return loadNativeLibrary(clazzLoader); int loadNativeRet = loadNativeLibrary(clazzLoader);
// If we failed waiting for relro we want to return that fact even if we successfully load
// the relro file.
if (loadNativeRet == LIBLOAD_SUCCESS) return ret;
return loadNativeRet;
} }
static WebViewFactoryProvider getProvider() { static WebViewFactoryProvider getProvider() {
@@ -240,7 +244,8 @@ public final class WebViewFactory {
} finally { } finally {
Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW);
} }
if (response.status != LIBLOAD_SUCCESS) { if (response.status != LIBLOAD_SUCCESS
&& response.status != LIBLOAD_FAILED_WAITING_FOR_RELRO) {
throw new MissingWebViewPackageException("Failed to load WebView provider: " throw new MissingWebViewPackageException("Failed to load WebView provider: "
+ getWebViewPreparationErrorReason(response.status)); + getWebViewPreparationErrorReason(response.status));
} }
@@ -599,8 +604,10 @@ public final class WebViewFactory {
try { try {
response = response =
getUpdateService().waitForAndGetProvider(); getUpdateService().waitForAndGetProvider();
if (response.status == WebViewFactory.LIBLOAD_SUCCESS) if (response.status == LIBLOAD_SUCCESS
|| response.status == LIBLOAD_FAILED_WAITING_FOR_RELRO) {
sPackageInfo = response.packageInfo; sPackageInfo = response.packageInfo;
}
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(LOGTAG, "error waiting for relro creation", e); Log.e(LOGTAG, "error waiting for relro creation", e);
return LIBLOAD_FAILED_WAITING_FOR_WEBVIEW_REASON_UNKNOWN; return LIBLOAD_FAILED_WAITING_FOR_WEBVIEW_REASON_UNKNOWN;

View File

@@ -217,7 +217,7 @@ public class WebViewUpdateServiceImpl {
mSystemInterface = systemInterface; mSystemInterface = systemInterface;
} }
private static final int WAIT_TIMEOUT_MS = 4500; // KEY_DISPATCHING_TIMEOUT is 5000. private static final int WAIT_TIMEOUT_MS = 1000; // KEY_DISPATCHING_TIMEOUT is 5000.
// Keeps track of the number of running relro creations // Keeps track of the number of running relro creations
private int mNumRelroCreationsStarted = 0; private int mNumRelroCreationsStarted = 0;
@@ -487,6 +487,10 @@ public class WebViewUpdateServiceImpl {
// Either the current relro creation isn't done yet, or the new relro creatioin // Either the current relro creation isn't done yet, or the new relro creatioin
// hasn't kicked off yet (the last relro creation used an out-of-date WebView). // hasn't kicked off yet (the last relro creation used an out-of-date WebView).
webViewStatus = WebViewFactory.LIBLOAD_FAILED_WAITING_FOR_RELRO; webViewStatus = WebViewFactory.LIBLOAD_FAILED_WAITING_FOR_RELRO;
Slog.e(TAG, "Timed out waiting for relro creation, relros started "
+ mNumRelroCreationsStarted
+ " relros finished " + mNumRelroCreationsFinished
+ " package dirty? " + mWebViewPackageDirty);
} }
} }
if (!webViewReady) Slog.w(TAG, "creating relro file timed out"); if (!webViewReady) Slog.w(TAG, "creating relro file timed out");