trcoffman před 4 roky
rodič
revize
ad1df56ab9
No account linked to committer's email address

+ 26
- 0
android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java Zobrazit soubor

@@ -194,6 +194,8 @@ public class RNCWebViewManager extends SimpleViewManager<WebView> {
194 194
 
195 195
     webView.setDownloadListener(new DownloadListener() {
196 196
       public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
197
+        webView.setIgnoreErrFailedForThisURL(url);
198
+
197 199
         RNCWebViewModule module = getModule(reactContext);
198 200
 
199 201
         DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
@@ -713,6 +715,11 @@ public class RNCWebViewManager extends SimpleViewManager<WebView> {
713 715
     protected boolean mLastLoadFailed = false;
714 716
     protected @Nullable
715 717
     ReadableArray mUrlPrefixesForDefaultIntent;
718
+    protected @Nullable String ignoreErrFailedForThisURL = null;
719
+
720
+    public void setIgnoreErrFailedForThisURL(@Nullable String url) {
721
+      ignoreErrFailedForThisURL = url;
722
+    }
716 723
 
717 724
     @Override
718 725
     public void onPageFinished(WebView webView, String url) {
@@ -764,6 +771,21 @@ public class RNCWebViewManager extends SimpleViewManager<WebView> {
764 771
       int errorCode,
765 772
       String description,
766 773
       String failingUrl) {
774
+
775
+      if (ignoreErrFailedForThisURL != null
776
+          && failingUrl.equals(ignoreErrFailedForThisURL)
777
+          && errorCode == -1
778
+          && description.equals("net::ERR_FAILED")) {
779
+
780
+        // This is a workaround for a bug in the WebView.
781
+        // See these chromium issues for more context:
782
+        // https://bugs.chromium.org/p/chromium/issues/detail?id=1023678
783
+        // https://bugs.chromium.org/p/chromium/issues/detail?id=1050635
784
+        // This entire commit should be reverted once this bug is resolved in chromium.
785
+        setIgnoreErrFailedForThisURL(null);
786
+        return;
787
+      }
788
+
767 789
       super.onReceivedError(webView, errorCode, description, failingUrl);
768 790
       mLastLoadFailed = true;
769 791
 
@@ -987,6 +1009,10 @@ public class RNCWebViewManager extends SimpleViewManager<WebView> {
987 1009
       super(reactContext);
988 1010
     }
989 1011
 
1012
+    public void setIgnoreErrFailedForThisURL(String url) {
1013
+      mRNCWebViewClient.setIgnoreErrFailedForThisURL(url);
1014
+    }
1015
+
990 1016
     public void setSendContentSizeChangeEvents(boolean sendContentSizeChangeEvents) {
991 1017
       this.sendContentSizeChangeEvents = sendContentSizeChangeEvents;
992 1018
     }