Permalink
Browse files

Android: Fix WebView crash for links of unknown schemes

Summary:
When tapping on a link in a WebView with an unknown scheme, the app would crash. For example, if you have the link "something://example/" but your device doesn't have anything to handle the "something" scheme, the app would crash when the user clicks on the link. This change handles the exception to prevent the app from crashing. Instead, the click is a no-op and the WebView doesn't navigate anywhere.

**Test plan (required)**

Verified the app no longer crashes when clicking on unknown schemes in a test app. Also, my team uses this change in our app.

Adam Comella
Microsoft Corp.
Closes #10903

Differential Revision: D4226371

Pulled By: mkonicek

fbshipit-source-id: a6d3957806c6063e74fe055b0979cb9d1ce40e51
  • Loading branch information...
1 parent 4181000 commit 35e75c8cdf036c68680464c8f916bd855ce86c3e @rigdern rigdern committed with Facebook Github Bot Nov 23, 2016
@@ -16,6 +16,7 @@
import java.util.Locale;
import java.util.Map;
+import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Picture;
@@ -136,9 +137,13 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
url.startsWith("file://")) {
return false;
} else {
- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- view.getContext().startActivity(intent);
+ try {
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ view.getContext().startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ FLog.w(ReactConstants.TAG, "activity not found to handle uri scheme for: " + url, e);
+ }
return true;
}
}

0 comments on commit 35e75c8

Please sign in to comment.