@@ -102,9 +102,11 @@ class RNCWebViewManagerImpl(private val newArch: Boolean = false) {
102102 webView.setImportantForAutofill(View .IMPORTANT_FOR_AUTOFILL_NO );
103103 }
104104 val base64DownloaderRequestFilePermission = { base64: String ->
105- webView.reactApplicationContext.getNativeModule(RNCWebViewModule ::class .java)?.let { module ->
106- module.setBase64DownloadRequest(base64)
107- module.grantFileDownloaderPermissions(getDownloadingMessageOrDefault(), getLackPermissionToDownloadMessageOrDefault())
105+ if (webView.allowFileDownloads) {
106+ webView.reactApplicationContext.getNativeModule(RNCWebViewModule ::class .java)?.let { module ->
107+ module.setBase64DownloadRequest(base64)
108+ module.grantFileDownloaderPermissions(getDownloadingMessageOrDefault(), getLackPermissionToDownloadMessageOrDefault())
109+ }
108110 }
109111 Unit
110112 }
@@ -113,6 +115,9 @@ class RNCWebViewManagerImpl(private val newArch: Boolean = false) {
113115 requestFilePermission = base64DownloaderRequestFilePermission,
114116 )
115117 webView.setDownloadListener(DownloadListener { url, userAgent, contentDisposition, mimetype, contentLength ->
118+ if (! webView.allowFileDownloads) {
119+ return @DownloadListener
120+ }
116121 if (url.startsWith(" data:" )) {
117122 Base64FileDownloader .downloadBase64File(
118123 context = context,
@@ -255,6 +260,7 @@ class RNCWebViewManagerImpl(private val newArch: Boolean = false) {
255260 }
256261 webChromeClient.setAllowsProtectedMedia(mAllowsProtectedMedia);
257262 webChromeClient.setHasOnOpenWindowEvent(mHasOnOpenWindowEvent);
263+ webChromeClient.setSuppressJavaScriptDialogs(webView.suppressJavaScriptDialogs);
258264 webView.webChromeClient = webChromeClient
259265 } else {
260266 var webChromeClient = webView.webChromeClient as RNCWebChromeClient ?
@@ -266,6 +272,7 @@ class RNCWebViewManagerImpl(private val newArch: Boolean = false) {
266272 }
267273 webChromeClient.setAllowsProtectedMedia(mAllowsProtectedMedia);
268274 webChromeClient.setHasOnOpenWindowEvent(mHasOnOpenWindowEvent);
275+ webChromeClient.setSuppressJavaScriptDialogs(webView.suppressJavaScriptDialogs);
269276 webView.webChromeClient = webChromeClient
270277 }
271278 }
@@ -673,6 +680,11 @@ class RNCWebViewManagerImpl(private val newArch: Boolean = false) {
673680 mLackPermissionToDownloadMessage = value
674681 }
675682
683+ fun setAllowFileDownloads (viewWrapper : RNCWebViewWrapper , value : Boolean ) {
684+ val view = viewWrapper.webView
685+ view.allowFileDownloads = value
686+ }
687+
676688 fun setHasOnOpenWindowEvent (viewWrapper : RNCWebViewWrapper , value : Boolean ) {
677689 val view = viewWrapper.webView
678690 mHasOnOpenWindowEvent = value
@@ -698,6 +710,15 @@ class RNCWebViewManagerImpl(private val newArch: Boolean = false) {
698710 }
699711 }
700712
713+ fun setSuppressJavaScriptDialogs (viewWrapper : RNCWebViewWrapper , suppress : Boolean ) {
714+ val view = viewWrapper.webView
715+ view.suppressJavaScriptDialogs = suppress
716+ val client = view.webChromeClient
717+ if (client is RNCWebChromeClient ) {
718+ client.setSuppressJavaScriptDialogs(suppress)
719+ }
720+ }
721+
701722 fun setMenuCustomItems (viewWrapper : RNCWebViewWrapper , value : ReadableArray ? ) {
702723 val view = viewWrapper.webView
703724 when (value) {
0 commit comments