From 9ddef77b1ddb996e9e8edb21baaccefd12d95940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Siffel?= Date: Mon, 1 Apr 2019 11:13:50 -0700 Subject: [PATCH] Add the ability to customize webview response to client cert requests Summary: Add the ability to set a custom handler on ReactWebViewManager to handle client certificate challenges during TLS authentication. [Android][Added] - Public method setCustomClientCertRequestHandler to the native com.facebook.react.views.webview.ReactWebViewManager, that allows using a custom response for client certificate challenges. Reviewed By: mjhu Differential Revision: D14609697 fbshipit-source-id: 567c95458af638d1f8233fc3ca0d9cefc061c2bf --- .../views/webview/ReactWebViewManager.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java index a5f54d0ca6f..3e3fd79d230 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java @@ -19,6 +19,7 @@ import android.os.Build; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup.LayoutParams; +import android.webkit.ClientCertRequest; import android.webkit.ConsoleMessage; import android.webkit.CookieManager; import android.webkit.GeolocationPermissions; @@ -103,6 +104,8 @@ public class ReactWebViewManager extends SimpleViewManager { // Intent urls are a type of deeplinks which start with: intent:// private static final String INTENT_URL_PREFIX = "intent://"; + private static CustomClientCertRequestHandler customClientCertRequestHandler = null; + protected WebViewConfig mWebViewConfig; protected @Nullable WebView.PictureListener mPictureListener; @@ -210,6 +213,15 @@ public class ReactWebViewManager extends SimpleViewManager { return false; } + @Override + public void onReceivedClientCertRequest(WebView webview, ClientCertRequest request) { + if (ReactWebViewManager.customClientCertRequestHandler != null) { + ReactWebViewManager.customClientCertRequestHandler.handle(webview, request); + } else { + super.onReceivedClientCertRequest(webview, request); + } + } + @Override public void onReceivedError( WebView webView, int errorCode, String description, String failingUrl) { @@ -734,4 +746,12 @@ public class ReactWebViewManager extends SimpleViewManager { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher(); eventDispatcher.dispatchEvent(event); } + + public static interface CustomClientCertRequestHandler { + public void handle(WebView webview, ClientCertRequest request); + } + + public static void setCustomClientCertRequestHandler(CustomClientCertRequestHandler handler) { + ReactWebViewManager.customClientCertRequestHandler = handler; + } }