@@ -138,27 +138,18 @@ protected void doInBackgroundGuarded(Void... params) {
138
138
// https://bugs.chromium.org/p/chromium/issues/detail?id=559720
139
139
return null ;
140
140
} catch (Exception exception ) {
141
- String message = exception .getMessage ();
142
- // We cannot catch MissingWebViewPackageException as it is in a private / system API
143
- // class. This validates the exception's message to ensure we are only handling this
144
- // specific exception.
145
- // The exception class doesn't always contain the correct name as it depends on the OEM
146
- // and OS version. It is better to check the message for clues regarding the exception
147
- // as that is somewhat consistent across OEMs.
148
- // For instance, the Exception thrown on OxygenOS 11 is a RuntimeException but the message
149
- // contains the required strings.
150
- // https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/webkit/WebViewFactory.java#348
151
- if (exception .getClass ().getCanonicalName ().contains ("MissingWebViewPackageException" )
152
- || (message != null
153
- && (message .contains ("WebView provider" )
154
- || message .contains ("No WebView installed" )
155
- || message .contains ("Cannot load WebView" )
156
- || message .contains ("disableWebView" )
157
- || message .contains ("WebView is disabled" )))) {
158
- return null ;
159
- } else {
160
- throw exception ;
161
- }
141
+ // Ideally we would like to catch a `MissingWebViewPackageException` here.
142
+ // That API is private so we can't access it.
143
+ // Historically we used string matching on the error message to understand
144
+ // if the exception was a Missing Webview One.
145
+ // OEMs have been customizing that message making really hard to catch it.
146
+ // Therefore we result to returning null as a default instead of rethrowing
147
+ // the exception as it will result in a app crash at runtime.
148
+ // a) We will return null for all the other unhandled conditions when a webview provider is
149
+ // not found.
150
+ // b) We already have null checks in place for `getCookieManager()` calls.
151
+ // c) We have annotated the method as @Nullable to notify future devs about our return type.
152
+ return null ;
162
153
}
163
154
}
164
155
0 commit comments