All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.imqa.asm.WebviewLoadVisitor Maven / Gradle / Ivy

There is a newer version: 2.25.11
Show newest version
package io.imqa.asm;

import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.commons.AdviceAdapter;

import io.imqa.injector.util.Logger;

public class WebviewLoadVisitor extends AdviceAdapter { 
	protected String methodName;
	protected String className;
	protected String desc;

	protected WebviewLoadVisitor(String className, int access, String methodName, String desc, MethodVisitor mv) { 
		super(Opcodes.ASM5, mv, access, methodName, desc);
		this.className = className;
		this.methodName = methodName;
		this.desc = desc;


	} 
	
	@Override 
	protected void onMethodEnter() {
		Logger.d("Webview Method name", methodName);
		Logger.d("Webview Method desc", desc);

		switch (this.methodName) {
			
			case "shouldOverrideUrlLoading":
				if (this.desc.equals("(Landroid/webkit/WebView;Ljava/lang/String;)Z")) {
					super.visitVarInsn(Opcodes.ALOAD, 1);
					super.visitVarInsn(Opcodes.ALOAD, 2);
					super.visitMethodInsn(
						Opcodes.INVOKESTATIC, 
						"io/imqa/mpm/network/MPMWebviewInterface", 
						"requestHttp", 
						"(Landroid/webkit/WebView;Ljava/lang/String;)V");
				}
				break;
			case "shouldInterceptRequest" :
				if (this.desc.equals("(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;")) {
					super.visitVarInsn(Opcodes.ALOAD, 0);
					super.visitVarInsn(Opcodes.ALOAD, 2);
					super.visitMethodInsn(
						Opcodes.INVOKESTATIC, 
						"io/imqa/mpm/network/MPMWebviewInterface", 
						"urlStart", 
						"(Landroid/webkit/WebViewClient;Landroid/webkit/WebResourceRequest;)V");
				} else if (this.desc.equals("(Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse;")) {
					super.visitVarInsn(Opcodes.ALOAD, 0);
					super.visitVarInsn(Opcodes.ALOAD, 2);
					super.visitLdcInsn("GET");
					super.visitMethodInsn(
						Opcodes.INVOKESTATIC, 
						"io/imqa/mpm/network/MPMWebviewInterface", 
						"urlStart", 
						"(Landroid/webkit/WebViewClient;Ljava/lang/String;Ljava/lang/String;)V");
				}
				break;
			case "onPageStarted":
				if (this.desc.equals("(Landroid/webkit/WebView;Ljava/lang/String;Landroid/graphics/Bitmap;)V")) {
					super.visitVarInsn(Opcodes.ALOAD, 0);
					super.visitMethodInsn(
						Opcodes.INVOKESTATIC, 
						"io/imqa/mpm/network/MPMWebviewInterface", 
						"onPageStarted", 
						"(Landroid/webkit/WebViewClient;)V");
				}
				break;
			case "onPageFinished":
				if (this.desc.equals("(Landroid/webkit/WebView;Ljava/lang/String;)V")) {
					super.visitVarInsn(Opcodes.ALOAD, 0);
					super.visitVarInsn(Opcodes.ALOAD, 1);
					super.visitVarInsn(Opcodes.ALOAD, 2);
					super.visitMethodInsn(
						Opcodes.INVOKESTATIC, 
						"io/imqa/mpm/network/MPMWebviewInterface", 
						"loadEndJavascript", 
						"(Landroid/webkit/WebViewClient;Landroid/webkit/WebView;Ljava/lang/String;)Ljava/lang/String;");
				}
				break;
			case "onReceivedHttpError":
				if (this.desc.equals("(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceResponse;)V")) {
					super.visitVarInsn(Opcodes.ALOAD, 0);
					super.visitVarInsn(Opcodes.ALOAD, 2);
					super.visitVarInsn(Opcodes.ALOAD, 3);
					super.visitMethodInsn(
						Opcodes.INVOKESTATIC, 
						"io/imqa/mpm/network/MPMWebviewInterface", 
						"receivedError", 
						"(Landroid/webkit/WebViewClient;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceResponse;)V");
				}
				break;
				
			case "onReceivedError":
				if (this.desc.equals("(Landroid/webkit/WebView;ILjava/lang/String;Ljava/lang/String;)V")) {
					super.visitVarInsn(Opcodes.ALOAD, 0);
					super.visitVarInsn(Opcodes.ALOAD, 4);
					super.visitVarInsn(Opcodes.ALOAD, 2);
					super.visitVarInsn(Opcodes.ALOAD, 3);
					super.visitMethodInsn(
						Opcodes.INVOKESTATIC, 
						"io/imqa/mpm/network/MPMWebviewInterface", 
						"receivedError", 
						"(Landroid/webkit/WebViewClient;Ljava/lang/String;ILjava/lang/String;)V");
				}
				break;

		}
	}
	@Override
	protected void onMethodExit(int opcode) {
	}

	
	@Override 
	public void visitMaxs(int maxStack, int maxLocals) { 
		super.visitMaxs(maxStack, maxLocals); 
	} 

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy