in cordova-plugin-whitelist/src/android/WhitelistAPI.java [43:89]
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("URLMatchesPatterns")) {
String url = args.getString(0);
JSONArray patterns = args.getJSONArray(1);
Whitelist whitelist = new Whitelist();
for (int i=0; i < patterns.length(); i++) {
String pattern = patterns.getString(i);
whitelist.addWhiteListEntry(pattern, false);
}
boolean isAllowed = whitelist.isUrlWhiteListed(url);
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, isAllowed));
return true;
} else if (action.equals("URLIsAllowed")) {
String url = args.getString(0);
/* This code exists for compatibility between 3.x and 4.x versions of Cordova.
* Previously the CordovaWebView class had a method, getWhitelist, which would
* return a Whitelist object. Since the fixed whitelist is removed in Cordova 4.x,
* the correct call now is to shouldAllowRequest from the plugin manager.
*/
Boolean isAllowed = null;
try {
Method isUrlWhiteListed = Config.class.getDeclaredMethod("isUrlWhitelisted", String.class);
isAllowed = (Boolean)isUrlWhiteListed.invoke(url);
} catch (NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
if (isAllowed == null) {
try {
Method gpm = webView.getClass().getMethod("getPluginManager");
PluginManager pm = (PluginManager)gpm.invoke(webView);
Method isAllowedMethod = pm.getClass().getMethod("shouldAllowRequest", String.class);
isAllowed = (Boolean)isAllowedMethod.invoke(pm, url);
if (isAllowed == null) {
isAllowed = false;
}
} catch (NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
}
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, isAllowed));
return true;
}
return false;
}