Merge "Load WebView even if WebView relro creation times out." into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a2fbfbce9e
@@ -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;
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user