package mobi.acpm.inspeckage.hooks;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
/**
* Created by acpm on 24/11/15.
*/
public class WebViewHook extends XC_MethodHook {
public static final String TAG = "Inspeckage_WebView:";
static StringBuilder sb = null;
public static void initAllHooks(final XC_LoadPackage.LoadPackageParam loadPackageParam) {
//Injects the supplied Java object into this WebView.
//http://developer.android.com/intl/pt-br/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object, java.lang.String)
findAndHookMethod(WebView.class, "addJavascriptInterface",
Object.class, String.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
String objName = (String) param.args[1];
XposedBridge.log(TAG + "addJavascriptInterface(Object, " + objName + ");");
}
});
findAndHookMethod(WebView.class, "loadUrl",
String.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
sb = new StringBuilder();
WebView wv = (WebView) param.thisObject;
sb.append("Load URL: " + param.args[0]);
sb.append(checkSettings(wv));
XposedBridge.log(TAG + sb.toString());
}
});
findAndHookMethod(WebView.class, "loadData",
String.class, String.class, String.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
sb = new StringBuilder();
WebView wv = (WebView) param.thisObject;
sb.append("Load Data: " + param.args[0]);
sb.append(checkSettings(wv));
XposedBridge.log(TAG + sb.toString());
}
});
findAndHookMethod(WebView.class, "setWebChromeClient", WebChromeClient.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log(TAG + "Client: WebChrome");
}
});
findAndHookMethod(WebView.class, "setWebViewClient", WebViewClient.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//XposedBridge.log(TAG + "Client: WebView");
}
});
findAndHookMethod(WebView.class, "setWebContentsDebuggingEnabled", "boolean", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
boolean value = (boolean) param.args[0];
XposedBridge.log(TAG + "Web Contents Debugging Enabled: " + String.valueOf(value));
}
});
}
static String checkSettings(WebView wv) {
String r = "</br>";
//javascript
if (wv.getSettings().getJavaScriptEnabled()) {
r = r + " -- JavaScript: Enable</br>";
} else {
r = r + " -- JavaScript: Disable</br>";
}
//PluginState
if (wv.getSettings().getPluginState() == WebSettings.PluginState.OFF) {
r = r + " -- Plugin State: OFF</br>";
} else {
r = r + " -- Plugin State: ON</br>";
}
//AllowFileAccess
if (wv.getSettings().getAllowFileAccess()) {
r = r + " -- Allow File Access: Enable</br>";
} else {
r = r + " -- Allow File Access: Disable</br>";
}
return r;
}
}