diff --git a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java index bd880d08c..56eae5a27 100644 --- a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java @@ -300,8 +300,10 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE internetAccess); // this does not block network but sets `window.navigator.isOnline` in js // land webView.addJavascriptInterface(new InternalJSApi(), "InternalJSApi"); - if (!internetAccess) { - installWebRtcBlockerScript(); + if (!installWebRtcBlockerScript()) { + Toast.makeText(this, R.string.webxdc_requires_modern_webview, Toast.LENGTH_LONG).show(); + finish(); + return; } String extraHref = b.getString(EXTRA_HREF, ""); @@ -492,8 +494,8 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE res = new WebResourceResponse("text/plain", "UTF-8", targetStream); } + Map headers = new HashMap<>(); if (!internetAccess) { - Map headers = new HashMap<>(); headers.put( "Content-Security-Policy", "default-src 'self'; " @@ -505,23 +507,29 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE + "media-src 'self' data: blob: ;" + "webrtc 'block' ; "); headers.put("X-DNS-Prefetch-Control", "off"); - headers.put("Permissions-Policy", "camera=(), microphone=(), display-capture=()"); - res.setResponseHeaders(headers); } + headers.put("Permissions-Policy", "camera=(), microphone=(), display-capture=()"); + res.setResponseHeaders(headers); return res; } - private void installWebRtcBlockerScript() { + private boolean installWebRtcBlockerScript() { if (!WebViewFeature.isFeatureSupported(WebViewFeature.DOCUMENT_START_SCRIPT)) { Log.w(TAG, "Document start script not supported, cannot hard-block WebRTC."); - return; + return false; } if (webRtcBlockerScriptHandler != null) { - return; + return true; + } + try { + webRtcBlockerScriptHandler = + WebViewCompat.addDocumentStartJavaScript( + webView, WEBRTC_BLOCKER_SCRIPT, Collections.singleton("*")); + return true; + } catch (RuntimeException e) { + Log.e(TAG, "Failed to add WebRTC blocker document-start script.", e); + return false; } - webRtcBlockerScriptHandler = - WebViewCompat.addDocumentStartJavaScript( - webView, WEBRTC_BLOCKER_SCRIPT, Collections.singleton("*")); } private void callJavaScriptFunction(String func) { diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 2f3ae5b75..5a5996134 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -540,6 +540,7 @@ Send \"%1$s\" to… Send Message to… + Please update Android System WebView to open this app securely. Suspicious link detected